From f78d49f38f25f20968f332882995e1cab4600709 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期四, 04 十二月 2025 11:13:40 +0800
Subject: [PATCH] 样板更改
---
components/WorkOrderPrint.vue | 2924 ++++++++++++++++++++++-------------------------------------
1 files changed, 1,088 insertions(+), 1,836 deletions(-)
diff --git a/components/WorkOrderPrint.vue b/components/WorkOrderPrint.vue
index 1b01576..0eaa260 100644
--- a/components/WorkOrderPrint.vue
+++ b/components/WorkOrderPrint.vue
@@ -1,1922 +1,1174 @@
<template>
- <view class="page">
- <!-- 椤堕儴鏄剧ず褰撳墠绯荤粺閲囬泦鐢熶骇鏁帮紝鎵撶爜鎶ュ伐鏁板拰涓嶈壇鏁� -->
- <view class="status-section">
- <!-- 鏁翠綋鏍囬鍜屽埛鏂版寜閽� -->
- <view class="header-container">
- <view class="header-title">
- <text>鐢熶骇鏁版嵁缁熻</text>
- </view>
- <view class="header-right">
- <view class="version-info-top">
- <text>v1.0.6</text>
- </view>
- <button class="refresh-btn" @click="refresh">鍒锋柊</button>
- <!-- 绱ф�ラ噸缃寜閽紙浠呭湪鐢熸垚鐘舵�佸崱浣忔椂鏄剧ず锛� -->
- <button v-if="isGeneratingBarcode" class="reset-btn" @click="resetGenerateState">閲嶇疆</button>
- </view>
- </view>
+ <view class="page wide-layout" :class="{'has-overlay': (isShowUserSelect || isShow || barcodeIsShow)}">
+ <view class="status-section">
+ <!-- 鎶ュ伐璁板綍琛ㄩ儴鍒嗭紝鍦ㄦ爣棰樿娣诲姞鍒锋柊鎸夐挳 -->
+ <view class="report-table-wrapper">
+ <view class="report-header">
+ <view class="report-title">鎶ュ伐璁板綍琛�</view>
+ <view class="header-buttons">
+ <button class="refresh-btn-header" @click="refresh">鍒锋柊</button>
+ <button v-if="isGeneratingBarcode" class="reset-btn-header" @click="resetGenerateState">閲嶇疆</button>
+ </view>
+ </view>
- <view class="status-row">
- <view class="status-box">
- <text>鏈哄彴闈㈡澘鏁帮細</text>
- <input v-model="productionCount" class="highlight" disabled />
- </view>
- <view class="status-box">
- <text>褰撳墠閲囬泦鏁帮細</text>
- <input v-model="calculatedCurrentCount" class="highlight" disabled />
- </view>
- <!-- <view class="status-box">
- <text>寮�宸ユ椂宸ュ崟宸叉姤宸ユ暟锛�</text>
- <input v-model="kgQty" class="highlight" disabled />
- </view> -->
- <view class="operator-box">-</view>
- <view class="status-box standalone-box">
- <text>宸叉墦鍗版潯鐮佹暟锛�</text>
- <input v-model="sQuantity" class="highlight" disabled />
- </view>
- <view class="operator-box">=</view>
- <view class="status-box">
- <text>鏈洪噰涓嶈壇鏁帮細</text>
- <input v-model="calculatedDefectiveCount" class="highlight" disabled />
- </view>
- <view class="status-box result-box">
- <text>宸茬敓浜ф暟锛�</text>
- <input v-model="calculatedTotalProduction" class="highlight" disabled />
- </view>
- </view>
- <view class="status-row">
- <view class="status-box">
- <text>鎵嬫姤涓嶈壇鏁帮細</text>
- <input v-model="defectiveCount" class="highlight" disabled />
- </view>
- <view class="status-box">
- <text>鏈墦鍗版潯鐮佹暟锛�</text>
- <input v-model="bqty" class="highlight" disabled />
- </view>
- </view>
- <!-- 绗竴琛� -->
- <!-- <view class="status-row">
- <view class="status-box result-box">
- <text>褰撳墠閲囬泦鏁帮細</text>
- <input v-model="calculatedCurrentCount" class="highlight" disabled />
- </view>
- <view class="operator-box">=</view>
- <view class="status-box">
- <text>鏈哄彴闈㈡澘鏁帮細</text>
- <input v-model="productionCount" class="highlight" disabled />
- </view>
- <view class="operator-box">-</view>
- <view class="status-box">
- <text>鍒濆鍊硷細</text>
- <input v-model="initialValue" class="highlight" disabled />
- </view>
- </view> -->
- <!-- 绗簩琛� -->
- <!-- <view class="status-row">
- <view class="status-box result-box">
- <text>宸茬敓浜ф暟锛�</text>
- <input v-model="calculatedTotalProduction" class="highlight" disabled />
- </view>
- <view class="operator-box">=</view>
- <view class="status-box">
- <text>寮�宸ユ椂宸ュ崟宸叉姤宸ユ暟锛�</text>
- <input v-model="kgQty" class="highlight" disabled />
- </view>
- <view class="operator-box">+</view>
- <view class="status-box">
- <text>褰撳墠閲囬泦鏁帮細</text>
- <input v-model="calculatedCurrentCount" class="highlight" disabled />
- </view>
- </view> -->
- <!-- 绗笁琛� -->
- <!-- <view class="status-row">
- <view class="status-box result-box">
- <text>涓嶈壇鏁帮細</text>
- <input v-model="calculatedDefectiveCount" class="highlight" disabled />
- </view>
- <view class="operator-box">=</view>
- <view class="status-box">
- <text>宸茬敓浜ф暟锛�</text>
- <input v-model="calculatedTotalProduction" class="highlight" disabled />
- </view>
- <view class="operator-box">-</view>
- <view class="status-box">
- <text>鑹搧鏁帮細</text>
- <input v-model="sQuantity" class="highlight" disabled />
- </view>
- <view class="status-box standalone-box">
- <text>宸叉墦鍗版潯鐮佹暟锛�</text>
- <input v-model="sQuantity" class="highlight" disabled />
- </view>
- </view> -->
+ <!-- 鏁伴噰鎬讳骇閲� -->
+ <view class="section-title">褰撳墠鏁伴噰浜ч噺鎶ュ伐璁板綍</view>
+ <div class="table-scroll">
+ <table class="report-table">
+ <thead>
+ <tr>
+ <th>鏃堕棿</th>
+ <th>鎶ュ伐浜�</th>
+ <th>宸ュ崟鍙�</th>
+ <th>浜у搧鍚嶇О</th>
+ <th>璁″垝鐢熶骇鏁�</th>
+ <th>鏈姤宸ユ暟閲�</th>
+ <th>鏈哄彴鍙�</th>
+ <th>鍒濆閲囬泦鏁�</th>
+ <th>鎶ュ伐鏃堕噰闆嗘暟</th>
+ <th>鍩轰簬鏁伴噰鐨勬姤宸ユ暟</th>
+ <th>涓嶈壇鏁�</th>
+ <th>鑹搧鏁帮紙璁$畻锛�</th>
+ <th>鎶ュ伐绫诲瀷</th> <!-- 鏂板 -->
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="summary-row highlight-row">
+ <td>{{ nowTime }}</td>
+ <td>{{ staffDisplay || '-' }}</td>
+ <td>{{ orderNo || '-' }}</td>
+ <td>{{ order.daa003 || '-' }}</td>
+ <td>{{ planQtyDisplay }}</td><!--璁″垝鐢熶骇鏁�-->
+ <td>{{ order.daa008 - order.daa011 }}</td> <!-- 鏂板锛氭湭鎶ュ伐鏁伴噺 -->
+ <td>{{ machineNo || '-' }}</td>
+ <td>{{ order.initCjNum }}</td>
+ <td>{{ order.currentCjNum }}</td>
+ <td>{{ order.currentCjNum - order.initCjNum }}</td>
+ <td>{{ realTimeDefectiveCount }}</td>
+ <td>{{ realTimeOkCount }}</td>
+ <td>
+ {{ order.daa018 === '寮�宸�' ? '鐢熶骇鎶ュ伐' : '璋冩満鎶ュ伐' }}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
- <view>
- <view style="display: flex; flex-direction: column; flex-wrap: nowrap; align-content: flex-start;">
- <view class="form-row">
- <view class="form-item">
- <label>浜у搧缂栫爜:</label>
- <input class="inp" type="text" v-model="order.daa002" disabled="true" />
- </view>
- <view class="form-item">
- <label>浜у搧鍚嶇О:</label>
- <!-- <input class="inp" type="text" v-model="order.daa003" disabled="true" /> -->
- <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="true" />
- </view>
- </view>
- <view class="form-row">
- <view class="form-item">
- <label>鍥� 鍙�:</label>
- <input class="inp" type="text" v-model="order.engineeringNo" disabled="true" />
- </view>
- <view class="form-item">
- <label>鏉� 璐�:</label>
- <input class="inp" type="text" v-model="order.material" disabled="true" />
- </view>
- <view class="form-item">
- <label>棰� 鑹�:</label>
- <input class="inp" type="text" v-model="order.colorName" disabled="true" />
- </view>
- </view>
- </view>
- </view>
+ <!-- 鍘嗗彶鎶ュ伐璁板綍 -->
+ <view class="section-title history-title">鍘嗗彶鎶ュ伐璁板綍</view>
+ <div class="table-scroll history-table-scroll">
+ <table class="report-table">
+ <thead>
+ <tr>
+ <th>鏃堕棿</th>
+ <th>鎶ュ伐浜�</th>
+ <th>宸ュ崟鍙�</th>
+ <th>浜у搧鍚嶇О</th>
+ <th>璁″垝鐢熶骇鏁�</th>
+ <th>鏈哄彴鍙�</th>
+ <th>鍒濆閲囬泦鏁�</th>
+ <th>鎶ュ伐鏃堕噰闆嗘暟</th>
+ <th>鎶ュ伐鏁帮紙璁$畻锛�</th>
+ <th>涓嶈壇鏁�</th>
+ <th>鑹搧鏁帮紙璁$畻锛�</th>
+ <th>鎶ュ伐绫诲瀷</th> <!-- 鏂板 -->
+ </tr>
+ </thead>
+ <tbody>
+ <tr v-for="(r, idx) in reportingHistory" :key="idx">
+ <td>{{ r.bgDate }}</td>
+ <td>{{ r.staff || '-' }}</td>
+ <td>{{ r.orderNo || '-' }}</td>
+ <td>{{ order.daa003 || '-' }}</td>
+ <td>{{ planQtyDisplay }}</td>
+ <td>{{ r.machineNo || '-' }}</td>
+ <td>{{ r.initialValue }}</td>
+ <td>{{ r.productionCount }}</td>
+ <td>{{ r.totalProduction }}</td>
+ <td>{{ r.BfQty }}</td>
+ <td>{{ r.OkQty }}</td>
+ <td>{{ r.reportType || '-' }}</td> <!-- 鏂板 -->
+ </tr>
+ <tr v-if="!reportingHistory.length">
+ <td colspan="12" class="no-data">鏆傛棤鍘嗗彶鎶ュ伐璁板綍</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </view>
- <!-- 鏉$爜鎵撳嵃閮ㄥ垎 - 涓儴鍏冪礌鍦ㄤ竴鏉$嚎涓� -->
- <view class="print-section">
- <view class="barcode-info">
- <view class="user-select">
- <text style="display: inline-block;float:left;margin-left: -11px;">鎵撳嵃鏉$爜寮犳暟锛�</text>
- <input v-model="icount" class="inp"
- style="width: 20%; height: 70px; border: 3px solid #808080; font-size: 40px; text-align: center; margin-top: 5px;" />
- </view>
+ <!-- 绉婚櫎浜嗗師鏉ョ殑鐘舵�佽涓殑鎸夐挳缁� -->
+ <view class="status-row">
+ <!--<view class="status-box">
+ <text>鏈哄彴闈㈡澘鏁帮細</text>
+ <input v-model="productionCount" class="highlight" disabled />
+ </view>
+ <view class="status-box">
+ <text>褰撳墠閲囬泦鏁帮細</text>
+ <input v-model="calculatedCurrentCount" class="highlight" disabled />
+ </view>
+ <view class="operator-box">-</view>
+ <view class="status-box standalone-box">
+ <text>宸叉墦鍗版潯鐮佹暟锛�</text>
+ <input v-model="sQuantity" class="highlight" disabled />
+ </view>
+ <view class="operator-box">=</view>
+ <view class="status-box">
+ <text>鏈洪噰涓嶈壇鏁帮細</text>
+ <input v-model="calculatedDefectiveCount" class="highlight" disabled />
+ </view>
+ <view class="status-box result-box">
+ <text>宸茬敓浜ф暟锛�</text>
+ <input v-model="calculatedTotalProduction" class="highlight" disabled />
+ </view>-->
+ </view>
- <text style="margin-left:-280px;">姣忓紶鏉$爜鏁伴噺锛�</text>
- <input class="inp"
- style="width: 19%; height: 70px; border: 3px solid #808080; font-size: 40px; text-align: center; margin-top: 5px; margin-left: -38px;"
- v-model="barcodeAmount" placeholder="鏉$爜鏁伴噺锛堣绠辨暟锛�" />
+ <view class="flex-row gap-lg">
+ <!-- 褰撳墠鎶ュ伐浜洪儴鍒� -->
+ <view class="current-user-section">
+ <text>褰撳墠鎶ュ伐浜猴細</text>
+ <text class="current-user-name">{{ staffDisplay || '鏈�夋嫨' }}</text>
+ <button class="select-user-btn" @click="isShowUserSelect = true">閫変汉</button>
+ </view>
- <view class="user-select">
- <button class="print-btn" @click="showPrint" :disabled="isGeneratingBarcode || printLoading"
- :style="(isGeneratingBarcode || printLoading) ? 'background-color: #ccc; cursor: not-allowed;' : ''">
- {{ isGeneratingBarcode ? '鐢熸垚涓�...' : (printLoading ? '鎵撳嵃涓�...' : '鎵撳嵃鏉$爜') }}
- </button>
- <button class="details-btn" @click="showBarcode">鏉$爜鏄庣粏</button>
- </view>
- </view>
- </view>
+ <!-- 涓嶈壇鏁伴噺閮ㄥ垎 -->
+ <view class="defective-section">
+ <text>涓嶈壇鏁伴噺锛�</text>
+ <input v-model="customAmount" class="inp bad-input" placeholder="璇疯緭鍏ユ暟閲�" />
+ </view>
- <!-- 鑷畾涔夋暟閲忚緭鍏ヨ -->
- <view class="print-section" style="margin-top: 20px;">
- <view class="barcode-info">
- <view class="user-select">
- <text style="display: inline-block;float:left;margin-left: -11px;">涓嶈壇鏁伴噺锛�</text>
- <input v-model="customAmount" class="inp"
- style="width: 55%; height: 70px; border: 3px solid #808080; font-size: 40px; text-align: center; margin-top: 5px;"
- placeholder="璇疯緭鍏ユ暟閲�" />
- </view>
+ <!-- 纭鎻愪氦鍜岃皟鏈烘姤宸ユ寜閽� -->
+ <view class="submit-section">
+ <button class="details-btn" @click="confirmCustomAmount">纭鎻愪氦</button>
+ <button class="details-btn" @click="confirmTiaojiBaogong">
+ 鎶ヨ瘯浜ф暟<br>
+ <span style="font-size:24px;">锛堜粠璋冩満寮�濮嬪埌寮�宸ュ墠鐨勮瘯浜ф暟閲忥級</span>
+ </button>
+ </view>
+ </view>
- <view class="user-select" style="margin-left: 30px;">
- <button class="details-btn" @click="confirmCustomAmount">纭鎻愪氦</button>
- </view>
- </view>
- </view>
+ <!-- 閫変汉寮圭獥 -->
+ <view v-if="isShowUserSelect" class="overlay">
+ <view class="popup user-select-popup">
+ <!-- 鎼滅储鏍� -->
+ <view class="user-search-bar">
+ <input v-model.trim="userSearch"
+ type="text"
+ class="user-search-input"
+ placeholder="杈撳叆宸ュ彿鎴栧鍚嶆悳绱�"
+ @keydown.enter.prevent />
+ <button v-if="userSearch" class="user-search-clear" @click="userSearch=''">娓呯┖</button>
+ <view class="user-search-info">
+ 鍖归厤锛歿{ filteredUsers.length }} / {{ users.length }}
+ </view>
+ </view>
+ <view class="user-list-scroll">
+ <template v-if="filteredUsers.length">
+ <view class="user-list-grid">
+ <button v-for="(u, index) in filteredUsers"
+ :key="index"
+ :class="['user-list-btn', {'selected': u===staffNo}]"
+ @click="selectUser(u)">
+ <span class="user-code">{{ u.split(':')[0] }}</span>
+ <span class="user-name">{{ u.split(':')[1] }}</span>
+ </button>
+ </view>
+ </template>
+ <view v-else class="no-user-result">
+ 鏈壘鍒板尮閰嶄汉鍛�
+ </view>
+ </view>
+ <view class="user-popup-footer">
+ <button class="clean-btn wide-btn" @click="isShowUserSelect = false">鍏抽棴</button>
+ </view>
+ </view>
+ </view>
- <!-- 涓嶈壇鍘熷洜閫夋嫨 -->
- <view>
- <view class="reason-section" style="margin-bottom: -16px">
- <text>鐐归�変笉鑹娉紙缁戝畾鍒板伐鍗曪級锛�</text>
- <view class="reason-buttons" style="font-size: 23px;">
- <button v-for="(reason, index) in badReasons" :key="index"
- :class="{'reason-btn': true, 'selected': selectedReasons.includes(reason)}"
- @click="toggleReason(reason)" v-text="reason"></button>
- </view>
- </view>
- </view>
+ <!-- 绂佺敤鎸夐挳锛氣�樹繚瀛樺苟鐢熸晥'銆佲�樺彇娑堚�� -->
+ <!--<view class="bottom-section">
+ <button class="save-btn" @click="save">淇濆瓨骞剁敓鏁�</button>
+ <button class="cancel-btn" @click="cancel">鍙栨秷</button>
+ </view>-->
+ <!-- 淇濈暀鏃у脊绐� -->
+ <view v-if="isShow" class="overlay">
+ <view class="popup">
+ <view class="bottom-section1">
+ <button class="clean-btn" type="warn" @click="deleteBarcode">鍏抽棴</button>
+ </view>
+ <view class="reason-section">
+ <text>鎶ュ伐浜猴細</text>
+ <view class="reason-buttons">
+ <button v-for="(u,index) in users" :key="index"
+ :class="{'reason-btn':true,'selected': user===u}"
+ @click="toggleUser(u)">
+ {{ formatUser(u) }}
+ </button>
+ </view>
+ </view>
+ </view>
+ </view>
- <!-- 搴曢儴淇濆瓨鍜屽彇娑堟寜閽� -->
- <view class="bottom-section">
- <button class="save-btn" @click="save">淇濆瓨骞剁敓鏁�</button>
- <button class="cancel-btn" @click="cancel">鍙栨秷</button>
- </view>
-
- <view v-if="isShow" class="overlay">
- <view class="popup">
- <view class="barcode-info">
- <!-- <view class="user-select">
- <text>宸叉墦鍗版潯鐮佹暟锛�</text>
- <input v-model="sQuantity" class="highlight" disabled />
- </view>
- <view class="user-select">
- <text>鏈墦鍗版潯鐮佹暟锛�</text>
- <input v-model="bqty" class="highlight" disabled />
- </view> -->
-
- <view class="user-select1">
- <text style="float: left; display: inline-block;">鎵撳嵃鏉$爜寮犳暟锛�</text>
- <input v-model="icount" class="inp5" disabled="true" />
- </view>
- <view class="user-select2">
- <text style="float: left;">姣忓紶鏉$爜鏁伴噺锛�</text>
- <input class="inp6" disabled="true" v-model="barcodeAmount" placeholder="鏉$爜鏁伴噺锛堣绠辨暟锛�" />
- </view>
-
- <view class="form-row">
- <!--<kk-printer defaultText="鎵撳嵃鏉$爜" class="print-btn" ref="kkprinter" :user="staffNo"
- :bufferData="bufferData" @onPrint="onPrint" @onPrintSuccess="onPrintSuccess"
- @onPrintFail="onPrintFail">
- </kk-printer>-->
- </view>
- </view>
- <view class="bottom-section1">
- <!-- <button class="clean-btn" type="primary" @click="cleanUser">鍏抽棴</button> -->
- <button class="clean-btn" type="warn" @click="deleteBarcode">鍙栨秷鎵撳嵃</button>
- <button class="print-btn"
- style="width: 48%; padding: 1.5vh; color: white; font-size: 1.5vw; border: none; text-align: center; cursor: pointer; border-radius: 0.5vw;"
- @click="printTest" :loading="printLoading" :disabled="printLoading || isGeneratingBarcode"
- :style="(printLoading || isGeneratingBarcode) ? 'background-color: #ccc; cursor: not-allowed;' : ''">
- {{ isGeneratingBarcode ? '鐢熸垚涓�...' : (printLoading ? '鎵撳嵃涓�...' : '鎵撳嵃鏉$爜') }}
- </button>
- </view>
- <view class="reason-section">
- <text>鎶ュ伐浜猴細</text>
- <view class="reason-buttons">
- <button v-for="(reason, index) in users" :key="index"
- :class="{'reason-btn': true, 'selected': user === reason}" @click="toggleUser(reason)"
- v-text="reason"></button>
- </view>
- </view>
- </view>
- </view>
-
- <!-- 灞曠ず鏉$爜鏄庣粏 -->
- <view v-if="barcodeIsShow" class="overlay">
- <view class="popup">
- <!-- <view class="barcode-info"> -->
- <uni-table ref="table" border stripe emptyText="鏆傛棤鏇村鏁版嵁" class="table1">
- <uni-tr>
- <uni-th align="center" style="font-size: 40px;">鐢熸垚鏃堕棿</uni-th>
- <uni-th align="center" style="width:39%;font-size: 40px;">鏉$爜</uni-th>
- <uni-th align="center" style="font-size: 40px;">鎶ュ伐浜�</uni-th>
- <uni-th align="center" style="font-size: 40px;">鎶ュ伐鏁伴噺</uni-th>
- </uni-tr>
- <uni-tr v-for="(item, index) in reportingList" :key="index">
- <uni-td align="center">
- <input type="text" v-model="item.bgDate" style="width: 26vh;" />
- </uni-td>
- <uni-td align="center">
- <input v-model="item.itemNoCade" style="width: 40vh;" />
- </uni-td>
- <uni-td align="center">
- <input v-model="item.staffName" />
- </uni-td>
- <uni-td align="center">
- <input v-model="item.okQty" />
- </uni-td>
- </uni-tr>
- </uni-table>
- <!-- </view> -->
- <view>
- <button class="clean-btn" type="warn" @click="barcodeIsShow = false">鍏抽棴</button>
- </view>
- </view>
- </view>
- </view>
- </view>
+ <view v-if="barcodeIsShow" class="overlay">
+ <view class="popup">
+ <uni-table ref="table" border stripe emptyText="鏆傛棤鏇村鏁版嵁" class="table1">
+ <uni-tr>
+ <uni-th align="center" style="font-size:40px;">鐢熸垚鏃堕棿</uni-th>
+ <uni-th align="center" style="width:39%;font-size:40px;">鏉$爜</uni-th>
+ <uni-th align="center" style="font-size:40px;">鎶ュ伐浜�</uni-th>
+ <uni-th align="center" style="font-size:40px;">鎶ュ伐鏁伴噺</uni-th>
+ </uni-tr>
+ <uni-tr v-for="(item,index) in reportingList" :key="index">
+ <uni-td align="center"><input type="text" v-model="item.bgDate" style="width:26vh;" /></uni-td>
+ <uni-td align="center"><input v-model="item.itemNoCade" style="width:40vh;" /></uni-td>
+ <uni-td align="center"><input v-model="item.staffName" /></uni-td>
+ <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>
+ </view>
+ </view>
+ </view>
</template>
<script>
- import {
- printTemplate3
- } from "../utils/printTemplate";
+ import { printTemplate3 } from "../utils/printTemplate";
- export default {
- props: {
- orderNo: String,
- orderId: Number,
- machineNo: String
- },
- data() {
- return {
- currentUser: '', // 榛樿褰撳墠鐢ㄦ埛
- barcodeAmount: '', // 杈撳叆鐨勬潯鐮佹暟閲�
- users: [], // 鐢ㄦ埛鍒楄〃
- userForm: [],
- staff: [],
- user: {},
- badReasons: [], // 涓嶈壇鍘熷洜
- itemsNgname: [],
- selectedReasons: [], // 瀛樺偍閫変腑鐨勪笉鑹師鍥�
- productionCount: 0, // 褰撳墠绯荤粺閲囬泦鐢熶骇鏁�
- printedCount: 0, // 褰撳墠宸叉墦鐮佹姤宸ユ暟
- defectiveCount: 0, // 涓嶈壇鏁�
- order: {},
- icount: 1, // 榛樿涓�1锛岄伩鍏嶄负0鎴杗ull
- 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: '',
+ export default {
+ props: { orderNo: String, orderId: Number, machineNo: String },
+ data() {
+ return {
+ isShowUserSelect: false,
+ 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: '',
+ userSearch: '',
+ refreshTimer: null, // 鏂板锛氳嚜鍔ㄥ埛鏂板畾鏃跺櫒
+ /* 鏂板锛氬巻鍙叉姤宸ヨ褰曟暟缁� */
+ reportingHistory: []
+ }
+ },
+ computed: {
+ //鑹搧鏁板疄鏃惰绠�
+ realTimeDefectiveCount() {
+ // 浼樺厛鐢ㄨ緭鍏ユ鐨勫�硷紝鍚﹀垯鐢ㄦ帴鍙f暟鎹�
+ const val = Number(this.customAmount);
+ if (!isNaN(val) && this.customAmount !== '') return val;
+ return this.calculatedDefectiveCount;
+ },
+ realTimeOkCount() {
+ // 鑹搧鏁� = 鎶ュ伐鏁帮紙璁$畻锛� - 涓嶈壇鏁�
+ const total = (this.order.currentCjNum || 0) - (this.order.initCjNum || 0);
+ return total - this.realTimeDefectiveCount;
+ },
+ calculatedCurrentCount() { return (this.productionCount || 0) - (this.initialValue || 0); },
+ calculatedTotalProduction() { return (this.kgQty || 0); }, // 鑻ラ渶鎭㈠鏃ч�昏緫鍙敤 (this.kgQty||0)+this.calculatedCurrentCount
+ calculatedDefectiveCount() { return this.calculatedTotalProduction - (this.sQuantity || 0); },
+ planQtyDisplay() { return this.order.planQty || this.order.planQuantity || this.order.daa008 || 0; },
+ staffDisplay() {
+ if (!this.staffNo) return '';
+ const segs = this.staffNo.split(':');
+ return segs.length > 1 ? `${segs[0]} ${segs[1]}` : this.staffNo;
+ },
+ filteredUsers() {
+ if (!this.userSearch) return this.users;
+ const kw = this.userSearch.trim().toLowerCase();
+ return this.users.filter(u => u.toLowerCase().includes(kw));
+ }
+ },
+ created() {
+ this.initializeData();
+ this.fetchData(true);
+ this.init();
+ this.getXS0101();
+ this.updateNowTime();
+ // 绉掔骇鍒锋柊锛涘涓嶉渶鍔ㄦ�佽烦绉掑彲鏀逛负 60000
+ this.nowTimeTimer = setInterval(this.updateNowTime, 1000);
- printMac: '',
- bluetoothSocket: {}, // 钃濈墮杩炴帴
- device: '',
- uuid: '',
- printNum: 1,
+ // 鏂板锛氭瘡鍒嗛挓鑷姩鍒锋柊鏁版嵁锛�60000姣 = 1鍒嗛挓锛�
+ this.startAutoRefresh();
+ },
+ beforeDestroy() {
+ if (this.nowTimeTimer) clearInterval(this.nowTimeTimer);
+ // 鏂板锛氭竻鐞嗚嚜鍔ㄥ埛鏂板畾鏃跺櫒
+ this.stopAutoRefresh();
+ },
+ methods: {
+ // 鏂板锛氬紑濮嬭嚜鍔ㄥ埛鏂�
+ startAutoRefresh() {
+ // 鍏堟竻闄ゅ彲鑳藉瓨鍦ㄧ殑鏃у畾鏃跺櫒
+ this.stopAutoRefresh();
+ // 璁剧疆鏂扮殑瀹氭椂鍣紝姣忓垎閽熸墽琛屼竴娆�
+ this.refreshTimer = setInterval(() => {
+ console.log('鑷姩鍒锋柊鏁版嵁...');
+ this.refresh();
+ }, 60000); // 60000姣 = 1鍒嗛挓
+ },
+ // 鏂板锛氬仠姝㈣嚜鍔ㄥ埛鏂�
+ stopAutoRefresh() {
+ if (this.refreshTimer) {
+ clearInterval(this.refreshTimer);
+ this.refreshTimer = null;
+ }
+ },
- reportingList: [],
-
- printLoading: false,
- customAmount: '',
-
- // 鏂板闃查噸澶嶈姹傜浉鍏冲彉閲�
- isGeneratingBarcode: false, // 鏄惁姝e湪鐢熸垚鏉$爜
- lastGenerateTime: 0, // 涓婃鐢熸垚鏉$爜鐨勬椂闂存埑
- generateRequestId: null // 褰撳墠鐢熸垚璇锋眰鐨勫敮涓�ID
- };
- },
- computed: {
- // 璁$畻褰撳墠閲囬泦鏁帮紝纭繚涓嶄細鍑虹幇NaN鎴杣ndefined
- calculatedCurrentCount() {
- const production = this.productionCount || 0;
- const initial = this.initialValue || 0;
- return production - initial;
- },
- // 璁$畻宸茬敓浜ф�绘暟
- calculatedTotalProduction() {
- const kgQty = this.kgQty || 0;
- const currentCount = this.calculatedCurrentCount;
- // 褰撳紑宸ユ椂宸ュ崟宸叉姤宸ユ暟涓�0鏃讹紝鐩存帴浣跨敤褰撳墠閲囬泦鏁扮殑鍊�
- //return kgQty === 0 ? currentCount : kgQty + currentCount;
- return kgQty + currentCount
- },
- // 璁$畻涓嶈壇鏁�
- calculatedDefectiveCount() {
- const totalProduction = this.calculatedTotalProduction;
- // const totalProduction = this.productionCount;
- const goodCount = this.sQuantity || 0;
- return totalProduction - goodCount;
- }
- },
- components: {},
- mounted() {
- // this.fetchData(false); // Initial fetch
- // this.timer = setInterval(this.fetchData, 180000); // Call fetchData every 5 minutes
- },
- created() {
- // 鍒濆鍖栨暟鎹紝纭繚鎵�鏈夋暟鍊煎瀷鍙橀噺鏈夐粯璁ゅ��
- this.initializeData();
- this.fetchData(true);
- this.init();
- },
- methods: {
- // 鍒濆鍖栨墍鏈夋暟鍊煎瀷鍙橀噺锛岄伩鍏峮ull鎴杣ndefined
- initializeData() {
- this.productionCount = 0;
- this.printedCount = 0;
- this.defectiveCount = 0;
- this.icount = 1;
- this.bqty = 0;
- this.sQuantity = 0;
- this.kgQty = 0;
- this.initialValue = 0;
- this.qqty = 0;
-
- // 鍒濆鍖栭槻閲嶅鐘舵��
- this.isGeneratingBarcode = false;
- this.lastGenerateTime = 0;
- this.generateRequestId = null;
- },
-
- // 鎵嬪姩閲嶇疆闃查噸澶嶇姸鎬侊紙绱ф�ユ儏鍐典笅浣跨敤锛�
- resetGenerateState() {
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
- this.lastGenerateTime = 0;
- console.log("宸叉墜鍔ㄩ噸缃潯鐮佺敓鎴愮姸鎬�");
- this.$showMessage("宸查噸缃潯鐮佺敓鎴愮姸鎬�");
- },
- refresh() {
- this.$sendPostRequest({
- url: "http://192.168.0.94:9095/Numerical/RefreshDev",
- data: {
- machineNo: this.order.machineNo
- },
- contentType: "application/json"
- }).then(res1 => {
- if (res1.code == 200) {
- this.fetchData(true); // 閲嶆柊璇锋眰鏁版嵁
- } else {
- this.$showMessage("鍚屾澶辫触");
- }
- });
-
- },
- printTest() {
- if (!this.staffNo) {
- this.$showMessage("璇烽�夋嫨鎶ュ伐浜�");
- return;
- }
-
- try {
- // 鍦ㄨ皟鐢╫nPrint鍓嶆竻绌烘暟鎹�
- // 杩欐牱鍙互纭繚姣忔鎵撳嵃閮芥槸浠庨浂寮�濮�
- this.dataToPrint = [];
- this.bufferData = '';
- this.onPrint();
-
- this.$showMessage('姝e湪鎵撳嵃锛岃绋嶇瓑!');
- this.printLoading = true;
-
- this.printNum = 1;
- setTimeout(() => {
- this.doPrint();
- this.printLoading = false;
- console.log("璋冪敤鎵撳嵃");
- }, 2000);
- } catch (e) {
- this.onPrintFail();
- console.log(e);
- }
-
- },
- doPrint() { //printNum:鎵撳嵃娆℃暟
- var mac_address = uni.getStorageSync('printMac');
- console.log("鎵撳嵃鏈哄湴鍧�" + mac_address);
- console.log('鎵撳嵃寮�濮�');
- console.log("鎵撳嵃鍙傛暟" + this.bufferData);
-
- if (!mac_address) {
- this.$showMessage('璇烽�夋嫨钃濈墮鎵撳嵃鏈�');
- this.printLoading = false;
- return false;
- }
-
- // 妫�鏌ndroid鐗堟湰骞朵娇鐢ㄥ搴旂殑鎵撳嵃鏂规硶
- // const androidVersion = this.getAndroidVersion();
- // console.log('Android鐗堟湰:', androidVersion);
-
- // if (androidVersion >= 12) {
- // return this.doPrintForAndroid12Plus(mac_address);
- // } else {
- return this.doPrintForAndroidLegacy(mac_address);
- // }
- },
-
- // Android 12+ 鐗堟湰鐨勮摑鐗欐墦鍗版柟娉�
- doPrintForAndroid12Plus(mac_address) {
- try {
- console.log('浣跨敤Android 12+鍏煎鐨勮摑鐗欐墦鍗版柟娉�');
-
- // 妫�鏌ヨ摑鐗欐潈闄�
- if (!this.checkBluetoothPermissions()) {
- this.$showMessage('钃濈墮鏉冮檺涓嶈冻锛岃妫�鏌ュ簲鐢ㄦ潈闄愯缃�');
- this.printLoading = false;
- return false;
- }
-
- var main = plus.android.runtimeMainActivity();
- var BluetoothManager = plus.android.importClass("android.bluetooth.BluetoothManager");
- var Context = plus.android.importClass("android.content.Context");
-
- // 鑾峰彇BluetoothManager
- var bluetoothManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
- var bluetoothAdapter = bluetoothManager.getAdapter();
-
- if (!bluetoothAdapter) {
- this.$showMessage('璁惧涓嶆敮鎸佽摑鐗�');
- this.printLoading = false;
- return false;
- }
-
- if (!bluetoothAdapter.isEnabled()) {
- this.$showMessage('璇峰厛寮�鍚摑鐗�');
- this.printLoading = false;
- return false;
- }
-
- // 鑾峰彇閰嶅璁惧
- var pairedDevices = bluetoothAdapter.getBondedDevices();
- var targetDevice = null;
-
- // 鏌ユ壘鐩爣璁惧
- var iterator = pairedDevices.iterator();
- while (iterator.hasNext()) {
- var device = iterator.next();
- if (device.getAddress().equals(mac_address)) {
- targetDevice = device;
- break;
- }
- }
-
- if (!targetDevice) {
- this.$showMessage('鏈壘鍒伴厤瀵圭殑鎵撳嵃鏈鸿澶�');
- this.printLoading = false;
- return false;
- }
-
- // 鍒涘缓钃濈墮杩炴帴
- var UUID = plus.android.importClass("java.util.UUID");
- var uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
- var bluetoothSocket = targetDevice.createRfcommSocketToServiceRecord(uuid);
-
- // 杩炴帴璁惧
- try {
- bluetoothSocket.connect();
- console.log('钃濈墮杩炴帴鎴愬姛');
-
- // 鍙戦�佹墦鍗版暟鎹�
- var outputStream = bluetoothSocket.getOutputStream();
- var bytes = plus.android.invoke(this.bufferData, 'getBytes', 'gbk');
- outputStream.write(bytes);
- outputStream.flush();
-
- // 鍏抽棴杩炴帴
- outputStream.close();
- bluetoothSocket.close();
-
- console.log("鎵撳嵃鎴愬姛");
- this.cleanUser();
- this.onPrintSuccess();
- return true;
-
- } catch (connectError) {
- console.error('钃濈墮杩炴帴澶辫触:', connectError);
-
- // 灏濊瘯fallback鏂规硶
- try {
- bluetoothSocket.close();
- // 浣跨敤鍙嶅皠鑾峰彇hidden鏂规硶
- var createRfcommSocket = targetDevice.getClass().getMethod("createRfcommSocket",
- plus.android.importClass("java.lang.Integer").TYPE);
- bluetoothSocket = createRfcommSocket.invoke(targetDevice, 1);
-
- bluetoothSocket.connect();
- console.log('浣跨敤fallback鏂规硶杩炴帴鎴愬姛');
-
- var outputStream = bluetoothSocket.getOutputStream();
- var bytes = plus.android.invoke(this.bufferData, 'getBytes', 'gbk');
- outputStream.write(bytes);
- outputStream.flush();
-
- outputStream.close();
- bluetoothSocket.close();
-
- this.cleanUser();
- this.onPrintSuccess();
- return true;
-
- } catch (fallbackError) {
- console.error('Fallback鏂规硶涔熷け璐�:', fallbackError);
- this.$showMessage('钃濈墮杩炴帴澶辫触锛岃妫�鏌ユ墦鍗版満鐘舵��');
- this.printLoading = false;
- return false;
- }
- }
-
- } catch (error) {
- console.error('Android 12+ 钃濈墮鎵撳嵃閿欒:', error);
- this.$showMessage('鎵撳嵃澶辫触: ' + error.message);
- this.printLoading = false;
- return false;
- }
- },
-
- // Android 11鍙婁互涓嬬増鏈殑钃濈墮鎵撳嵃鏂规硶锛堜繚鎸佸師鏈夐�昏緫锛�
- doPrintForAndroidLegacy(mac_address) {
- try {
- console.log('浣跨敤浼犵粺钃濈墮鎵撳嵃鏂规硶');
-
- var device = null,
- BAdapter = null,
- BluetoothAdapter = null,
- uuid = null,
- main = null,
- bluetoothSocket = null;
-
- main = plus.android.runtimeMainActivity();
- BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
- let UUID = plus.android.importClass("java.util.UUID");
- uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
- BAdapter = BluetoothAdapter.getDefaultAdapter();
-
- if (!BAdapter) {
- this.$showMessage('璁惧涓嶆敮鎸佽摑鐗�');
- this.printLoading = false;
- return false;
- }
-
- device = BAdapter.getRemoteDevice(mac_address);
- plus.android.importClass(device);
- bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
- plus.android.importClass(bluetoothSocket);
-
- if (!bluetoothSocket.isConnected()) {
- console.log('妫�娴嬪埌璁惧鏈繛鎺ワ紝灏濊瘯杩炴帴....');
- bluetoothSocket.connect();
- }
-
- console.log('璁惧宸茶繛鎺�');
- if (bluetoothSocket.isConnected()) {
- var outputStream = bluetoothSocket.getOutputStream();
- plus.android.importClass(outputStream);
- var bytes = plus.android.invoke(this.bufferData, 'getBytes', 'gbk');
- outputStream.write(bytes);
- outputStream.flush();
- device = null //杩欓噷鍏抽敭
- bluetoothSocket.close(); //蹇呴』鍏抽棴钃濈墮杩炴帴鍚﹀垯鎰忓鏂紑鐨勮瘽鎵撳嵃閿欒
- console.log("鎵撳嵃鏈鸿繛鎺ョ姸鎬侊細111");
- this.cleanUser();
- this.onPrintSuccess();
- return true;
- } else {
- console.log("鎵撳嵃鏈鸿繛鎺ョ姸鎬侊細222");
- this.printLoading = false;
- return false;
- }
- } catch (error) {
- console.error('浼犵粺钃濈墮鎵撳嵃閿欒:', error);
- this.$showMessage('鎵撳嵃澶辫触: ' + error.message);
- this.printLoading = false;
- return false;
- }
- },
-
- // 鑾峰彇Android鐗堟湰鍙�
- getAndroidVersion() {
- try {
- var Build = plus.android.importClass("android.os.Build");
- return Build.VERSION.SDK_INT;
- } catch (error) {
- console.error('鑾峰彇Android鐗堟湰澶辫触:', error);
- return 30; // 榛樿杩斿洖Android 11鐨凙PI Level
- }
- },
-
- // 妫�鏌ヨ摑鐗欐潈闄愶紙Android 12+闇�瑕侊級
- checkBluetoothPermissions() {
- try {
- const androidVersion = this.getAndroidVersion();
-
- // Android 12浠ヤ笅鐗堟湰涓嶉渶瑕佹柊鏉冮檺
- if (androidVersion < 31) { // Android 12 = API 31
- return true;
- }
-
- var main = plus.android.runtimeMainActivity();
- var PackageManager = plus.android.importClass("android.content.pm.PackageManager");
- var ContextCompat = plus.android.importClass("androidx.core.content.ContextCompat");
-
- // Android 12+ 闇�瑕佺殑鏉冮檺
- var permissions = [
- "android.permission.BLUETOOTH_CONNECT",
- "android.permission.BLUETOOTH_SCAN"
- ];
-
- var missingPermissions = [];
- for (var i = 0; i < permissions.length; i++) {
- var permission = permissions[i];
- var granted = ContextCompat.checkSelfPermission(main, permission);
- if (granted !== PackageManager.PERMISSION_GRANTED) {
- console.log('鏉冮檺鏈巿浜�:', permission);
- missingPermissions.push(permission);
- }
- }
-
- if (missingPermissions.length > 0) {
- // 灏濊瘯璇锋眰鏉冮檺
- this.requestBluetoothPermissions(missingPermissions);
- return false;
- }
-
- return true;
- } catch (error) {
- console.error('鏉冮檺妫�鏌ュけ璐�:', error);
- // 濡傛灉妫�鏌ュけ璐ワ紝鍋囪鏉冮檺宸叉巿浜堬紙鍙兘鏄�佺増鏈珹ndroid锛�
- return true;
- }
- },
-
- // 璇锋眰钃濈墮鏉冮檺
- requestBluetoothPermissions(permissions) {
- try {
- var main = plus.android.runtimeMainActivity();
- var ActivityCompat = plus.android.importClass("androidx.core.app.ActivityCompat");
-
- console.log('璇锋眰钃濈墮鏉冮檺:', permissions);
-
- // 灏咼avaScript鏁扮粍杞崲涓篔ava鏁扮粍
- var javaPermissions = plus.android.newObject("java.lang.String", permissions.length);
- for (var i = 0; i < permissions.length; i++) {
- javaPermissions[i] = permissions[i];
- }
-
- // 璇锋眰鏉冮檺
- ActivityCompat.requestPermissions(main, javaPermissions, 1001);
-
- // 鏄剧ず鎻愮ず淇℃伅
- this.$showMessage('姝e湪璇锋眰钃濈墮鏉冮檺锛岃鍦ㄧ郴缁熷脊绐椾腑鍏佽鏉冮檺鍚庨噸璇�');
-
- } catch (error) {
- console.error('璇锋眰鏉冮檺澶辫触:', error);
- this.$showMessage('鏃犳硶璇锋眰钃濈墮鏉冮檺锛岃鎵嬪姩鍦ㄨ缃腑寮�鍚簲鐢ㄧ殑钃濈墮鏉冮檺');
- }
- },
- init() {
- console.log("璁剧疆钃濈墮");
- try {
- // 妫�鏌ndroid鐗堟湰骞朵娇鐢ㄥ搴旂殑鍒濆鍖栨柟娉�
- const androidVersion = this.getAndroidVersion();
-
- if (androidVersion >= 12) {
- this.initForAndroid12Plus();
- } else {
- this.initForAndroidLegacy();
- }
- } catch (err) {
- console.error("钃濈墮鍒濆鍖栧紓甯革紒", err);
- }
- },
-
- // Android 12+ 鐗堟湰鐨勮摑鐗欏垵濮嬪寲
- initForAndroid12Plus() {
- try {
- console.log("浣跨敤Android 12+鍏煎鐨勮摑鐗欏垵濮嬪寲");
-
- var main = plus.android.runtimeMainActivity();
- var BluetoothManager = plus.android.importClass("android.bluetooth.BluetoothManager");
- var Context = plus.android.importClass("android.content.Context");
- var UUID = plus.android.importClass("java.util.UUID");
-
- this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
-
- // 鑾峰彇BluetoothManager鍜孉dapter
- var bluetoothManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
- var bluetoothAdapter = bluetoothManager.getAdapter();
-
- if (bluetoothAdapter && bluetoothAdapter.isDiscovering()) {
- bluetoothAdapter.cancelDiscovery(); // 鍋滄鎵弿
- }
-
- let printMac1 = uni.getStorageSync('printMac');
- this.printMac = printMac1;
- console.log("鎵撳嵃鏈哄湴鍧�" + this.printMac);
-
- var address_mac = this.printMac ? this.printMac : "DC:1D:30:91:06:52";
- console.log("status:" + address_mac);
-
- if (bluetoothAdapter) {
- this.device = bluetoothAdapter.getRemoteDevice(address_mac);
- plus.android.importClass(this.device);
- console.log("Android 12+ 钃濈墮鍒濆鍖栨垚鍔�");
- }
-
- } catch (err) {
- console.error("Android 12+ 钃濈墮鍒濆鍖栧け璐�:", err);
- // 濡傛灉澶辫触锛屽皾璇曚娇鐢ㄤ紶缁熸柟娉�
- this.initForAndroidLegacy();
- }
- },
-
- // Android 11鍙婁互涓嬬増鏈殑钃濈墮鍒濆鍖栵紙淇濇寔鍘熸湁閫昏緫锛�
- initForAndroidLegacy() {
- try {
- console.log("浣跨敤浼犵粺钃濈墮鍒濆鍖栨柟娉�");
-
- var main = plus.android.runtimeMainActivity();
- var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
- var UUID = plus.android.importClass("java.util.UUID");
-
- this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
- var BAdapter = BluetoothAdapter.getDefaultAdapter();
-
- if (BAdapter) {
- BAdapter.cancelDiscovery(); // 鍋滄鎵弿
- }
-
- let printMac1 = uni.getStorageSync('printMac');
- this.printMac = printMac1;
- console.log("鎵撳嵃鏈哄湴鍧�" + this.printMac);
-
- var address_mac = this.printMac ? this.printMac : "DC:1D:30:91:06:52";
- console.log("status:" + address_mac);
-
- if (BAdapter) {
- this.device = BAdapter.getRemoteDevice(address_mac);
- plus.android.importClass(this.device);
-
- this.bluetoothSocket = this.device.createInsecureRfcommSocketToServiceRecord(this.uuid);
- plus.android.importClass(this.bluetoothSocket);
- console.log("浼犵粺钃濈墮鍒濆鍖栨垚鍔�");
- }
-
- } catch (err) {
- console.error("浼犵粺钃濈墮鍒濆鍖栧け璐�:", err);
- }
- },
-
- onDaa003Change(event) {
-
- let orde = this.lineList[this.DAA003List.indexOf(event)];
-
- this.orderId = orde.id;
- this.orderNo = orde.daa001;
-
- //鍒囨崲涓烘柊鐨刬d
- uni.setStorageSync('machine', this.machineNo);
- uni.setStorageSync('orderId', this.orderId);
- uni.setStorageSync('orderNo', this.orderNo);
- uni.setStorageSync('engineeringNo', this.order.engineeringNo);
-
- this.fetchData(false);
- },
- fetchData(flag) {
- // let machine = uni.getStorageSync('machine');
- // let orderId = uni.getStorageSync('orderId');
- // let orderNo = uni.getStorageSync('orderNo');
-
- // if (orderId) {
- // this.orderId = orderId;
- // } else {
- // if (!this.orderId) {
- // this.orderId = uni.getStorageSync('id');
- // }
-
- // }
-
- // if (orderNo) {
- // this.orderNo = orderNo;
- // } else {
- // if (!this.orderNo) {
- // this.orderNo = uni.getStorageSync('daa001');
- // }
- // }
-
- // if (machine) {
- // this.machineNo = machine;
- // } else {
- // if (!this.machineNo) {
- // this.machineNo = uni.getStorageSync('machineNo');
- // }
- // }
-
- if (!this.orderId && !this.orderNo) {
- return;
- }
-
- this.getOrderById();
- this.getMesItemsNgname();
-
- this.getWomdaaPrintById();
- this.findByOrderId();
-
- if (flag) {
- this.$post({
- url: "/Womdaa/GetWomdaasByShow",
- data: {
- machineNo: this.machineNo
- }
- }).then(res => {
- this.lineList = res.data.tbBillList;
- this.DAA003List = res.data.tbBillList.map(item => item.daa003);
- })
- }
-
- },
- formatDate(date) {
- if (!date) return '';
-
- try {
- let year = date.getFullYear(); // 鑾峰彇骞翠唤
- let month = String(date.getMonth() + 1).padStart(2, '0'); // 鑾峰彇鏈堜唤骞惰ˉ闆�
- let day = String(date.getDate()).padStart(2, '0'); // 鑾峰彇鏃ユ湡骞惰ˉ闆�
- return `${year}-${month}-${day}`; // 杩斿洖鏍煎紡鍖栧悗鐨勫瓧绗︿覆
- } catch (error) {
- console.error("鏃ユ湡鏍煎紡鍖栭敊璇�:", error);
- return '';
- }
- },
- // 鍒囨崲閫変腑鐨勪笉鑹師鍥�
- toggleReason(reason) {
- if (!reason) return;
-
- if (this.selectedReasons.includes(reason)) {
- this.selectedReasons = this.selectedReasons.filter(r => r !== reason);
- } else {
- this.selectedReasons.push(reason);
- }
- },
- toggleUser(user) {
- if (!user) return;
-
- this.user = this.user === user ? null : user;
- this.staffNo = user;
- },
- showPrint() {
- // 闃查噸澶嶇偣鍑绘鏌� - 鐢熸垚涓垨鎵撳嵃涓兘涓嶅厑璁�
- if (this.isGeneratingBarcode) {
- this.$showMessage('姝e湪鐢熸垚鏉$爜锛岃绋嶇瓑...');
- return;
- }
-
- if (this.printLoading) {
- this.$showMessage('姝e湪鎵撳嵃鏉$爜锛岃绋嶇瓑...');
- return;
- }
-
- // 闃叉姈妫�鏌ワ細2绉掑唴涓嶅厑璁搁噸澶嶆搷浣�
- const currentTime = Date.now();
- if (currentTime - this.lastGenerateTime < 2000) {
- this.$showMessage('鎿嶄綔杩囦簬棰戠箒锛岃绋嶇瓑鍐嶈瘯');
- return;
- }
-
- if (this.icount > 6) {
- this.$showMessage('鏉$爜鏁伴噺涓嶈兘瓒呰繃6寮�');
- return;
- }
-
- this.isShow = true;
-
- //this.printBarcode();
- this.getXS0101();
-
- this.user = "";
-
- this.staffNo = null;
- },
- showBarcode() {
-
-
- this.$post({
- url: "/MesStaff/GetMesReportingList",
- data: {
- orderNo: this.orderNo,
- }
- }).then(res => {
- this.reportingList = res.data.tbBillList;
- this.barcodeIsShow = true;
- });
- },
- // 鎵撳嵃鏉$爜鎶ュ伐
- printBarcode() {
- // 闃查噸澶嶈姹傛鏌�
- if (this.isGeneratingBarcode) {
- this.$showMessage('姝e湪鐢熸垚鏉$爜锛岃绋嶇瓑...');
- return;
- }
-
- if (!this.barcodeAmount) {
- this.isShow = false;
- this.$showMessage('璇疯緭鍏ユ潯鐮佹暟閲�');
- return;
- }
-
- if (this.bqty == 0) {
- this.isShow = false;
- this.$showMessage('鍙墦鍗版暟閲忎负0');
- return;
- }
-
- if (this.bqty < this.barcodeAmount) {
- this.isShow = false;
- this.$showMessage('鎵撳嵃鏁伴噺涓嶈兘澶т簬鍙墦鍗版暟閲�');
- return;
- }
-
- if (this.icount * this.barcodeAmount > this.bqty) {
- this.isShow = false;
- this.$showMessage('鎵撳嵃鎬绘暟瓒呰繃鍙墦鍗版�绘暟');
- return;
- }
-
- // 璁剧疆鐢熸垚鐘舵�侀攣瀹�
- this.isGeneratingBarcode = true;
- this.lastGenerateTime = Date.now();
-
- // 鐢熸垚鍞竴璇锋眰ID锛岀敤浜庨槻閲�
- this.generateRequestId = `${this.orderNo}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
-
- console.log('寮�濮嬬敓鎴愭潯鐮侊紝璇锋眰ID:', this.generateRequestId);
-
- // 娣诲姞瓒呮椂鏈哄埗锛�15绉掑悗鑷姩閲婃斁閿佸畾
- const timeoutId = setTimeout(() => {
- if (this.isGeneratingBarcode) {
- console.log('鏉$爜鐢熸垚瓒呮椂锛岄噴鏀鹃攣瀹�');
- this.isGeneratingBarcode = false;
- this.$showMessage('鐢熸垚鏉$爜瓒呮椂锛岃閲嶈瘯');
- }
- }, 15000);
-
- this.$post({
- url: "/MesInvItemBarcodes/AddItemToBarcodes",
- data: {
- printQty: this.barcodeAmount,
- orderNo: this.orderNo,
- orderId: this.orderId,
- user: this.user,
- count: this.icount,
- requestId: this.generateRequestId // 浼犻�掕姹侷D鍒板悗绔敤浜庨槻閲�
- },
- showLoading: true,
- showLoadingTitle: "姝e湪鐢熸垚鏉$爜..."
- }).then(res => {
- // 娓呴櫎瓒呮椂瀹氭椂鍣�
- clearTimeout(timeoutId);
-
- // 娉ㄦ剰锛氳繖閲屼笉绔嬪嵆閲婃斁 isGeneratingBarcode锛岃绛夊埌鎵撳嵃瀹屾垚鎵嶉噴鏀�
- // this.isGeneratingBarcode = false; // 绉婚櫎杩欒锛屽湪 cleanUser() 涓噸缃�
-
- if (res.status == 1) {
- this.$showMessage(res.message);
- this.isShow = false;
- // 濡傛灉鐢熸垚澶辫触锛岄噸缃姸鎬�
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
- return;
- }
- this.dataToPrint = res.data.tbBillList;
- // this.getXS0101();
-
- let printCommands = [];
-
- console.log("鎺ュ彛杩斿洖鐨勬潯鏁�" + this.dataToPrint.length);
-
- let user = this.staffNo;
-
- for (let i = 0; i < this.dataToPrint.length; i++) {
- let _printData = {
- strp1: this.dataToPrint[i].out12,
- strp2: this.dataToPrint[i].out2,
- strp3: this.dataToPrint[i].out6,
- strp4: this.dataToPrint[i].out1,
- strp5: this.dataToPrint[i].out11,
- strp6: this.dataToPrint[i].out8,
- strp7: this.dataToPrint[i].out9,
- strp8: this.dataToPrint[i].out12,
- strp9: this.dataToPrint[i].out7,
- strp10: user,
- }
- let printCmd = printTemplate3(_printData);
- printCommands.push(printCmd);
- }
- this.bufferData = printCommands.join('\n');
-
- console.log('鏉$爜鐢熸垚鎴愬姛锛岃姹侷D:', this.generateRequestId);
- }).catch(error => {
- // 缃戠粶閿欒鏃朵篃瑕侀噴鏀鹃攣瀹�
- clearTimeout(timeoutId);
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
-
- console.error('鏉$爜鐢熸垚澶辫触:', error);
- this.$showMessage('缃戠粶寮傚父锛屾潯鐮佺敓鎴愬け璐ワ紝璇烽噸璇�');
- });
- },
- onPrint() {
-
- this.printBarcode();
- },
-
- onPrintSuccess() {
- this.getOrderById();
- this.findByOrderId();
- // this.updateBarcodeAmount();
- this.getWomdaaPrintById();
-
- // 娓呯┖鎵撳嵃鏁版嵁
- this.bufferData = '';
- this.dataToPrint = [];
-
- // 娓呯┖鎶ュ伐浜烘暟鎹�
- this.staffNo = null;
- this.user = '';
-
- // 閲嶇疆闃查噸澶嶇姸鎬侊紙鎵撳嵃鎴愬姛鍚庡畬鍏ㄩ噸缃級
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
-
- console.log("鎵撳嵃鎴愬姛锛屽凡閲嶇疆闃查噸澶嶇姸鎬�");
- },
- onPrintFail() {
- console.log("閲嶈繛澶辫触");
- this.printLoading = false;
-
- // 閲嶇疆闃查噸澶嶇姸鎬侊紙鎵撳嵃澶辫触鍚庝篃瑕侀噸缃級
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
-
- console.log("鎵撳嵃澶辫触锛屽凡閲嶇疆闃查噸澶嶇姸鎬�");
- },
-
- updateBarcodeAmount() {
- if (this.dataToPrint.length == 0) {
- return;
- }
-
- let barcodes = this.dataToPrint.map(s => s.out12);
-
- this.$post({
- url: "/MesInvItemBarcodes/UpdateBarcodeAmount",
- data: {
- barcodes: barcodes,
- user: this.staffNo
- }
- }).then(res => {
- console.log("鏇存柊鏉$爜鏁伴噺鎴愬姛");
- })
- },
-
- deleteBarcode() {
-
- // 鍏抽棴寮圭獥
- this.isShow = false;
-
- // 鍙栨秷鎵撳嵃鏃跺畬鍏ㄩ噸缃槻閲嶅鐘舵��
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
-
- // 娓呯┖鎵撳嵃鏁版嵁
- this.bufferData = '';
- this.dataToPrint = [];
-
- // 娓呯┖鎶ュ伐浜虹浉鍏虫暟鎹�
- this.staffNo = null;
- this.user = '';
-
- // 閲嶇疆鎵撳嵃鏉$爜鏁版嵁
- this.barcodeAmount = '';
- this.icount = 1;
-
- // 娓呯┖staff鏁版嵁
- this.staff = null;
-
- console.log("宸叉竻绌烘姤宸ヤ汉鍜屾墦鍗版暟鎹紝閲嶇疆闃查噸澶嶇姸鎬�");
-
- if (this.dataToPrint.length == 0) {
- return;
- }
-
-
-
- // let barcodes = this.dataToPrint.map(s => s.out12);
- // this.$post({
- // url: "/MesInvItemBarcodes/DeleteBarcode",
- // data: {
- // barcodes: barcodes,
- // }
- // }).then(res => {
- // console.log("鍒犻櫎鏉$爜鎴愬姛");
- // })
- },
- cleanUser() {
- this.isShow = false;
-
- this.printLoading = false;
-
- // 鎵撳嵃缁撴潫鍚庨噸缃敓鎴愮姸鎬侊紝鍏佽涓嬫鐢熸垚
- this.isGeneratingBarcode = false;
- this.generateRequestId = null;
-
- console.log("鎵撳嵃缁撴潫锛屽凡閲嶇疆鐢熸垚鐘舵��");
- },
- // 淇濆瓨鎿嶄綔
- save() {
- console.log('淇濆瓨鎴愬姛');
- let ids = [];
-
- this.selectedReasons.forEach(s => {
- let id = this.itemsNgname[this.badReasons.indexOf(s)].id;
- ids.push(id);
- });
-
- if (ids.length <= 0) {
- return
- }
-
- let ngids = ids.join(",");
-
- //MesOrderSta
- this.$post({
- url: "/MesOrderSta/UpdateNg",
- data: {
- ngId: ngids,
- staId: this.ngStaid
- }
- }).then(res => {
- if (res.data.tbBillList) {
- uni.showToast({
- title: '淇濆瓨鎴愬姛',
- icon: 'success',
- });
- this.getOrderById();
- this.getWomdaaPrintById();
- this.findByOrderId();
- }
- });
-
- },
- // 鍙栨秷鎿嶄綔
- cancel() {
- console.log('鍙栨秷鎿嶄綔');
- uni.showToast({
- title: '鍙栨秷鎿嶄綔',
- icon: 'none',
- });
- },
- getOrderById() {
- this.$post({
- url: "/Womdaa/GetWomdaaById",
- data: {
- orderId: this.orderId,
- orderNo: this.orderNo
- }
- }).then(res => {
- this.order = res.data.tbBillList;
- this.printedCount = res.data.tbBillList.bgqty;
- this.defectiveCount = res.data.tbBillList.blQty;
- this.productionCount = this.order.todayOutput;
-
- if (!this.order.todayOutput) {
- this.productionCount = 0;
- }
-
- if (!this.defectiveCount) {
- this.defectiveCount = 0;
- }
-
- if (!this.printedCount) {
- this.printedCount = 0;
- }
-
- //this.defectiveCount = this.productionCount - this.sQuantity;
- })
- },
- getMesItemsNgname() {
- this.$post({
- url: "/MesItemsNgname/GetMesItemsNgname",
- }).then(res => {
- this.itemsNgname = res.data.tbBillList;
- this.badReasons = this.itemsNgname.map(s => s.ngName);
- });
- },
- getXS0101() {
- this.$post({
- url: "/MesStaff/GetAllXS0101",
- }).then(res => {
- this.staff = res.data.tbBillList;
- this.users = this.staff.map(s => s.staffNo + ":" + s.staffName);
- });
- },
- getWomdaaPrintById() {
- // 娣诲姞閿欒澶勭悊鍜屾暟鎹牎楠�
- try {
- this.$post({
- url: "/Womdaa/GetWomdaaPrintById",
- data: {
- orderId: this.orderId
- }
- }).then(res => {
- // 妫�鏌ュ搷搴旀暟鎹槸鍚﹀瓨鍦ㄤ笖鏍煎紡姝g‘
- if (!res || !res.data || !res.data.tbBillList) {
- console.error('鑾峰彇鎵撳嵃鏁版嵁澶辫触: 鍝嶅簲鏁版嵁鏍煎紡閿欒');
- return;
- }
-
- const data = res.data.tbBillList;
-
- // 鐩存帴璧嬪�糱qty,涓嶄娇鐢ㄩ粯璁ゅ��
- this.bqty = data.bqty;
- this.icount = 1; // 鍥哄畾涓�1
- this.sQuantity = data.sQuantity || 0;
- this.initialValue = data.initialValue || 0;
- this.kgQty = data.kgQty || 0;
- this.barcodeAmount = data.qqty || 0;
-
- // 鍙湁褰揵qty涓嶄负null涓斾笉涓簎ndefined涓旂瓑浜�0鏃舵墠鎵цCompleted
- if (this.bqty !== null && this.bqty !== undefined && this.bqty === 0) {
- console.log('鏁伴噺涓�0,鎵ц瀹屾垚鎿嶄綔');
- this.Completed();
- }
-
- }).catch(err => {
- console.error('鑾峰彇鎵撳嵃鏁版嵁澶辫触:', err);
- });
- } catch (error) {
- console.error('鎵цgetWomdaaPrintById鏃跺彂鐢熼敊璇�:', error);
- }
- },
- Completed() {
- this.$post({
- url: "/MesOrderSta/Completed",
- data: {
- orderId: this.orderId,
- orderNo: this.orderNo
- }
- }).then(res1 => {
-
- })
- },
- findByOrderId() {
- this.$post({
- url: "/MesOrderSta/FindByOrderNo",
- data: {
- orderId: this.orderId,
- orderNo: this.orderNo
- }
- }).then(res => {
-
- // 浠庢帴鍙h幏鍙栫殑宸查�夋嫨鍘熷洜
- let str = res.data.tbBillList.ngId;
-
- this.ngStaid = res.data.tbBillList.id;
-
- if (!str) {
- return;
- }
-
- let ids = str.split(",");
-
- // 浣跨敤 map 鍜� filter 鎻愬彇瀵瑰簲鐨� ngName
- let preSelectedReasons = ids.map(id => {
- // 鏌ユ壘瀵瑰簲鐨勫璞�
- let matchedItem = this.itemsNgname.find(item => item.id == id);
- return matchedItem ? matchedItem.ngName : null; // 濡傛灉鎵惧埌锛岃繑鍥� ngName锛涘惁鍒欒繑鍥� null
- }).filter(ngName => ngName !== null); // 杩囨护鎺� null 鍊�
-
- // 璁剧疆宸查�変腑鐨勪笉鑹師鍥�
- this.selectedReasons = this.badReasons.filter(reason => preSelectedReasons.includes(reason));
- });
- },
- confirmCustomAmount() {
- // 妫�鏌ヨ緭鍏ユ槸鍚︿负鏈夋晥鏁板瓧
- if (!this.customAmount || isNaN(Number(this.customAmount))) {
- this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺');
- return;
- }
-
- // 灏嗚嚜瀹氫箟鏁伴噺搴旂敤鍒扮郴缁熶腑
- let amount = Number(this.customAmount);
- console.log('搴旂敤鑷畾涔夋暟閲�:', amount);
-
- // 杩欓噷鍙互鏍规嵁闇�瑕佽皟鐢ˋPI鎴栨洿鏂扮浉鍏虫暟鎹�
- this.$post({
- url: "/MesInvItemBarcodes/AddBFToBarcodes",
- data: {
- orderNo: this.orderNo,
- orderId: this.orderId,
- bf: amount
- }
- }).then(res => {
- if (res.status == 1) {
- this.$showMessage(res.message);
- return;
- }
- this.$showMessage('鎶ュ簾鏁伴噺濉啓鎴愬姛');
- // 閲嶆柊鑾峰彇鏁版嵁浠ユ洿鏂版樉绀�
- this.fetchData(true);
- // 娓呯┖杈撳叆妗�
- this.customAmount = '';
- }).catch(err => {
- console.error('鎶ュ簾鏁伴噺濉啓澶辫触:', err);
- this.$showMessage('鎶ュ簾鏁伴噺濉啓澶辫触锛岃閲嶈瘯');
- });
- }
- }
- };
+ formatUser(u) {
+ if (!u) return '';
+ const segs = u.split(':');
+ return segs.length > 1 ? `${segs[0]} ${segs[1]}` : u;
+ },
+ selectUser(u) { this.staffNo = u; this.isShowUserSelect = false; this.userSearch = ''; },
+ /* 淇敼锛氬鍔犵 */
+ updateNowTime() {
+ const d = new Date(), p = n => n.toString().padStart(2, '0');
+ this.nowTime = `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+ },
+ initializeData() {
+ this.productionCount = this.printedCount = this.defectiveCount = 0;
+ this.icount = 1; this.bqty = 0; this.sQuantity = 0; this.kgQty = 0;
+ this.initialValue = 0; this.qqty = 0;
+ this.isGeneratingBarcode = false; this.lastGenerateTime = 0; this.generateRequestId = null;
+ },
+ resetGenerateState() {
+ this.isGeneratingBarcode = false; this.generateRequestId = null; this.lastGenerateTime = 0;
+ this.$showMessage("宸查噸缃潯鐮佺敓鎴愮姸鎬�");
+ },
+ // 淇敼锛氬湪鎵嬪姩鍒锋柊鏃朵篃閲嶇疆鑷姩鍒锋柊璁℃椂鍣�
+ refresh() {
+ this.$sendPostRequest({
+ url: "http://192.168.0.94:9095/Numerical/RefreshDevBycl",
+ data: { machineNo: this.order.machineNo },
+ contentType: "application/json"
+ }).then(r => {
+ if (r.code == 200) {
+ this.fetchData(true);
+ this.$showMessage("鏁版嵁鍒锋柊鎴愬姛");
+ } else {
+ this.$showMessage("鍚屾澶辫触");
+ }
+ }).catch(error => {
+ console.error('鍒锋柊澶辫触:', error);
+ this.$showMessage("鍒锋柊澶辫触锛岃妫�鏌ョ綉缁滆繛鎺�");
+ });
+ },
+ onDaa003Change(v) {
+ let o = this.lineList[this.DAA003List.indexOf(v)];
+ this.orderId = o.id; this.orderNo = o.daa001;
+ uni.setStorageSync('machine', this.machineNo);
+ uni.setStorageSync('orderId', this.orderId);
+ uni.setStorageSync('orderNo', this.orderNo);
+ this.fetchData(false);
+ },
+ fetchData(flag) {
+ if (!this.orderId && !this.orderNo) return;
+ this.getOrderById();
+ this.getWomdaaPrintById();
+ this.getReportingHistory(); // 鏂板锛氭瘡娆″埛鏂板悓姝ュ巻鍙�
+ if (flag) {
+ this.$post({ url: "/Womdaa/GetWomdaasByShow", data: { machineNo: this.machineNo } })
+ .then(res => {
+ this.lineList = res.data.tbBillList;
+ this.DAA003List = res.data.tbBillList.map(i => i.daa003);
+ });
+ }
+ },
+ /* 鏂板锛氳幏鍙栧巻鍙叉姤宸ヨ褰� */
+ /* 淇敼锛氳鑼冨巻鍙叉椂闂村埌绉� */
+ getReportingHistory() {
+ if (!this.orderNo) { this.reportingHistory = []; return; }
+ const fmtSec = v => {
+ if (!v) return '';
+ // 鍏煎鍚庣鍙兘杩斿洖鐨勪笉鍚屾牸寮�
+ const d = new Date(typeof v === 'string' ? v.replace(/-/g, '/') : v);
+ if (isNaN(d.getTime())) return v; // 鏃犳硶瑙f瀽鍒欏師鏍疯繑鍥�
+ const p = n => n.toString().padStart(2, '0');
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+ };
+ this.$post({
+ url: "/Womdaa/GetByBillNoBG",
+ data: { billNo: this.orderNo, machineNo: this.machineNo || null }
+ }).then(res => {
+ const list = res?.data?.tbBillList || res?.data || [];
+ this.reportingHistory = list.map(r => {
+ // 渚濇嵁浣犳暟鎹簱瀛楁鍋氭槧灏勶紙涓嬮潰瀛楁鍚嶆寜甯歌鍛藉悕涓句緥锛岄渶瑕佹寜瀹為檯鏀癸級
+ return {
+ bgDate: r.bgDate || '', // 鎶ュ伐鏃堕棿
+ staff: (r.staffNo ? (r.staffNo + ' ' + (r.staffName || '')) : (r.staffName || '')),//鎶ュ伐浜�
+ orderNo: r.billNo,//宸ュ崟鍙�
+ machineNo: r.machineNo,//鏈哄彴鍙�
+ initialValue: r.csQty ?? 0,//鍒濆閲囬泦鏁�
+ productionCount: r.cjQty ?? 0,//鎶ュ伐鏃堕噰闆嗘暟
+ totalProduction: (r.cjQty - r.csQty) ?? 0,//鎶ュ伐鏁帮紙璁$畻锛�
+ BfQty: r.bfQty,//涓嶈壇鏁�
+ OkQty: r.okQty,//鑹搧鏁帮紙璁$畻锛�
+ reportType:r.remark //鎶ュ伐绫诲瀷
+ }
+ });
+ }).catch(() => { this.reportingHistory = []; });
+ },
+ toggleUser(u) {
+ if (!u) return;
+ this.user = this.user === u ? null : u;
+ this.staffNo = this.user;
+ },
+ //閫夋嫨鎶ュ伐浜�
+ confirmCustomAmount() {
+ if (!this.customAmount || isNaN(Number(this.customAmount))) { this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺'); return; }
+ if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
+ const staffNo = this.staffNo.split(':')[0];
+ const amount = Number(this.customAmount);
+ this.$post({
+ url: "/MesInvItemBarcodes/AddBFToBarcodes",
+ data: {
+ orderNo: this.orderNo,
+ orderId: this.orderId,
+ bf: amount,
+ staffNo: staffNo,
+ initCjNum: this.order.initCjNum, // 鍒濆閲囬泦鏁�
+ currentCjNum: this.order.currentCjNum // 鎶ュ伐鏃堕噰闆嗘暟
+ }
+ }).then(res => {
+ if (res.status == 1) { this.$showMessage(res.message); return; }
+ this.$showMessage('鎶ュ簾鏁伴噺濉啓鎴愬姛');
+ this.fetchData(true); // 鑷姩鍒锋柊鍘嗗彶
+ this.customAmount = '';
+ }).catch(() => this.$showMessage('鎶ュ簾鏁伴噺濉啓澶辫触锛岃閲嶈瘯'));
+ },
+ // 鏂板锛氳皟鏈烘姤宸�
+ confirmTiaojiBaogong() {
+ if (!this.customAmount || isNaN(Number(this.customAmount))) { this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺'); return; }
+ if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
+ const staffNo = this.staffNo.split(':')[0];
+ const amount = Number(this.customAmount);
+ this.$post({
+ url: "/MesInvItemBarcodes/AddBFToBarcodes", // 濡傛湁璋冩満涓撶敤鎺ュ彛璇锋浛鎹�
+ data: {
+ orderNo: this.orderNo,
+ orderId: this.orderId,
+ bf: amount,
+ staffNo: staffNo,
+ initCjNum: this.order.initCjNum,
+ currentCjNum: this.order.currentCjNum,
+ type: 'tiaoji' // 鍙姞鍖哄垎瀛楁锛屽悗绔闇�鍖哄垎璋冩満鎶ュ伐
+ }
+ }).then(res => {
+ if (res.status == 1) { this.$showMessage(res.message); return; }
+ this.$showMessage('璋冩満鎶ュ伐鎴愬姛');
+ this.fetchData(true);
+ this.customAmount = '';
+ }).catch(() => this.$showMessage('璋冩満鎶ュ伐澶辫触锛岃閲嶈瘯'));
+ },
+ save() {
+ if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
+ uni.showToast({ title: '淇濆瓨鎴愬姛', icon: 'success' });
+ this.getReportingHistory(); // 淇濆瓨鍚庝篃鍙埛鏂�
+ },
+ cancel() { uni.showToast({ title: '鍙栨秷鎿嶄綔', icon: 'none' }); },
+ getOrderById() {
+ this.$post({ url: "/Womdaa/GetWomdaaById", data: { orderId: this.orderId, orderNo: this.orderNo } })
+ .then(res => {
+ this.order = res.data.tbBillList;
+ this.printedCount = res.data.tbBillList.bgqty || 0;
+ this.defectiveCount = res.data.tbBillList.blQty || 0;
+ this.productionCount = this.order.todayOutput || 0;
+ });
+ },
+ getXS0101() {
+ 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 } })
+ .then(res => {
+ if (!res?.data?.tbBillList) return;
+ const d = res.data.tbBillList;
+ this.bqty = d.bqty;
+ this.icount = 1;
+ this.sQuantity = d.sQuantity || 0;
+ this.initialValue = d.initialValue || 0;
+ this.kgQty = d.kgQty || 0;
+ this.barcodeAmount = d.qqty || 0;
+ if (this.bqty === 0) this.Completed();
+ }).catch(() => { });
+ },
+ Completed() {
+ this.$post({ url: "/MesOrderSta/Completed", data: { orderId: this.orderId, orderNo: this.orderNo } });
+ },
+ init() {
+ try {
+ const v = this.getAndroidVersion();
+ v >= 12 ? this.initForAndroid12Plus() : this.initForAndroidLegacy();
+ } catch (e) { console.error(e); }
+ },
+ getAndroidVersion() {
+ try { var Build = plus.android.importClass("android.os.Build"); return Build.VERSION.SDK_INT; }
+ catch { return 30; }
+ },
+ initForAndroid12Plus() {
+ try {
+ var main = plus.android.runtimeMainActivity();
+ var BluetoothManager = plus.android.importClass("android.bluetooth.BluetoothManager");
+ var Context = plus.android.importClass("android.content.Context");
+ var UUID = plus.android.importClass("java.util.UUID");
+ this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
+ var mgr = main.getSystemService(Context.BLUETOOTH_SERVICE);
+ var adp = mgr.getAdapter();
+ if (adp && adp.isDiscovering()) adp.cancelDiscovery();
+ this.printMac = uni.getStorageSync('printMac');
+ var mac = this.printMac || "DC:1D:30:91:06:52";
+ if (adp) {
+ this.device = adp.getRemoteDevice(mac);
+ plus.android.importClass(this.device);
+ }
+ } catch (e) { this.initForAndroidLegacy(); }
+ },
+ initForAndroidLegacy() {
+ try {
+ var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
+ var UUID = plus.android.importClass("java.util.UUID");
+ this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
+ var BAdapter = BluetoothAdapter.getDefaultAdapter();
+ if (BAdapter) BAdapter.cancelDiscovery();
+ this.printMac = uni.getStorageSync('printMac');
+ var mac = this.printMac || "DC:1D:30:91:06:52";
+ if (BAdapter) {
+ this.device = BAdapter.getRemoteDevice(mac);
+ plus.android.importClass(this.device);
+ this.bluetoothSocket = this.device.createInsecureRfcommSocketToServiceRecord(this.uuid);
+ plus.android.importClass(this.bluetoothSocket);
+ }
+ } catch (e) { }
+ },
+ deleteBarcode() {
+ 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;
+ }
+ }
+ }
</script>
<style scoped>
- /* 椤甸潰鏍峰紡 */
- .page {
- padding: 2vh;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- box-sizing: border-box;
- }
+ .section-title {
+ font-size: 20px;
+ font-weight: bold;
+ margin: 18px 0 8px 0;
+ color: #fff;
+ background: #007aff;
+ padding: 8px 18px;
+ border-radius: 8px 8px 0 0;
+ display: inline-block;
+ }
- .top-right {
- position: absolute;
- top: -25px;
- right: 50px;
- z-index: 1000;
- }
+ .history-title {
+ background: #555;
+ }
- .refresh-btn {
- /* padding: 10px; */
- float: right;
- background-color: #00A2E9;
- color: white;
- border: none;
- font-size: 32px;
- border-radius: 15px;
- margin-top: -23px;
- padding-left: 25px;
- padding-right: 25px;
- margin-top: -32px;
- margin-bottom: 49px;
- }
+ .highlight-row {
+ background: #ffe9b3 !important;
+ font-weight: bold;
+ }
- /* 鐘舵�佽鏍峰紡 */
- .status-section {
- display: flex;
- flex-direction: column;
- margin-bottom: 3vh;
- padding-top: 14px;
- }
+ .report-table .summary-row {
+ background: #f0f8ff;
+ font-weight: 600;
+ }
- .status-row {
- display: flex;
- justify-content: space-around;
- margin-bottom: 20px;
- }
+ .report-table .no-data {
+ text-align: center;
+ color: #777;
+ font-size: 14px;
+ }
- .status-box {
- display: flex;
- align-items: center;
- }
+ .report-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 8px;
+ }
- .refresh-container {
- display: flex;
- flex-direction: column;
- align-items: flex-end;
- }
+ .header-buttons {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ }
- input.highlight {
- width: 10vw;
- font-weight: 700;
- border: none;
- background-color: #FFD700;
- text-align: center;
- font-size: 1.5vw;
- }
+ .refresh-btn-header {
+ background: #00A2E9;
+ color: #fff;
+ border: none;
+ font-size: 16px;
+ border-radius: 8px;
+ padding: 8px 20px;
+ transition: background 0.15s;
+ }
- .form-row {
- display: flex;
- justify-content: space-between;
- margin-bottom: 3vh;
- flex-wrap: nowrap;
- }
+ .refresh-btn-header:hover {
+ background: #0086c0;
+ }
- .form-item {
- width: 30%;
+ .reset-btn-header {
+ background: #ff6b6b;
+ color: #fff;
+ border: none;
+ font-size: 14px;
+ border-radius: 8px;
+ padding: 8px 16px;
+ transition: background 0.15s;
+ }
- }
+ .reset-btn-header:hover {
+ background: #e94d4d;
+ }
- .print-section {
+ .page {
+ padding: 1.2vh 2vw;
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+ }
- padding: 1vh;
- border-radius: 1vw;
- margin-bottom: 2vh;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- flex-direction: row;
- align-content: stretch;
- justify-content: flex-start;
- }
+ .wide-layout {
+ max-width: none;
+ width: 100%;
+ }
- .barcode-info {
- display: flex;
- align-items: flex-start;
- gap: 2vw;
- flex-direction: row;
- flex-wrap: nowrap;
- align-content: flex-start;
- justify-content: flex-start;
- }
+ .page.has-overlay .status-section > :not(.overlay) {
+ pointer-events: none;
+ }
- .inp {
- width: 65%;
- padding: 1vh;
- margin-top: -13px;
- font-size: 1.3vw;
- border: 1px solid #808080;
- border-radius: 0.5vw;
- box-sizing: border-box;
- }
+ .page.has-overlay .status-section > .overlay {
+ pointer-events: auto;
+ }
- .barcode-info text {
- font-size: 2.5vw
- }
+ .report-table-wrapper {
+ width: 100%;
+ max-width: none;
+ }
- input {
- padding: 1vh;
- font-size: 1.5vw;
- width: 10vw;
- border-radius: 0.5vw;
- height: 2.4em;
- }
+ .table-scroll {
+ width: 100%;
+ overflow-x: scroll !important;
+ min-height: 40px;
+ }
- .print-btn {
- display: inline-block;
- padding: 1.5vh;
- background-color: #e93c00eb;
- color: white;
- font-size: 1.5vw;
- border: none;
- cursor: pointer;
- border-radius: 1vw;
- margin-left: 30px;
- }
+ .report-title {
+ font-size: 32px;
+ font-weight: 600;
+ text-align: center;
+ margin: 0;
+ }
- .details-btn {
- display: inline-block;
- padding: 1.5vh;
- background-color: #00a2e9;
- color: white;
- font-size: 1.5vw;
- border: none;
- cursor: pointer;
- border-radius: 1vw;
- margin-left: 50px;
- }
+ /* 2. 鍖哄潡鏍囬 */
+ .section-title, .history-title {
+ font-size: 26px;
+ }
- /* 涓嶈壇鍘熷洜閫夋嫨 */
- .reason-section {
- margin-bottom: 3vh;
- }
+ /* 3. 琛ㄦ牸瀛椾綋 */
+ .report-table, .report-table th, .report-table td {
+ font-size: 22px;
+ }
- .reason-buttons {
- display: grid;
- grid-template-columns: repeat(5, 1fr);
- gap: 1vw;
- }
+ /* 4. 褰撳墠鎶ュ伐浜恒�佷笉鑹暟閲忕瓑杈撳叆鍖� */
+ .current-user-section,
+ .defective-section,
+ .submit-section {
+ font-size: 30px;
+ }
- .reason-btn {
- padding: 0.5vh;
- background-color: #808080;
- color: white;
- font-size: 1.3vw;
- border: none;
- border-radius: 0.5vw;
- cursor: pointer;
- }
+ /* 5. 杈撳叆妗嗗瓧浣� */
+ .inp, .bad-input {
+ font-size: 28px;
+ }
- .reason-btn.selected {
- background-color: #FFD700;
- color: black;
- }
+ /* 6. 鎸夐挳瀛椾綋 */
+ .details-btn,
+ .select-user-btn,
+ .refresh-btn-header,
+ .reset-btn-header {
+ font-size: 22px;
+ }
- /* 搴曢儴淇濆瓨鍜屽彇娑堟寜閽� */
- .bottom-section {
- display: flex;
- justify-content: space-between;
- margin-top: 2vh;
- }
+ .report-table {
+ width: 100%;
+ min-width: 1800px;
+ border-collapse: collapse;
+ background: #fff;
+ }
- .bottom-section1 {
- display: flex;
- justify-content: space-around;
- margin-bottom: 2vh;
- padding: 2vh 1vw;
- }
+ .report-table th, .report-table td {
+ border: 1px solid #555;
+ padding: 6px 8px;
+ text-align: center;
+ white-space: normal; /*鍏佽鎹㈣*/
+ word-break: break-all; /*闀垮崟璇� /鏁板瓧涔熸崲琛�*/
+ }
- .save-btn,
- .cancel-btn {
- width: 48%;
- padding: 1.5vh;
- background-color: #00A2E9;
- color: white;
- font-size: 1.5vw;
- border: none;
- text-align: center;
- cursor: pointer;
- border-radius: 0.5vw;
- }
+ .status-section {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
- .clean-btn {
- width: 48%;
- padding: 1.5vh;
- color: white;
- font-size: 1.5vw;
- border: none;
- text-align: center;
- cursor: pointer;
- border-radius: 0.5vw;
- background-color: #007aff;
- }
+ .status-row {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 10px;
+ background: #f9f9f9;
+ padding: 10px 14px;
+ border-radius: 8px;
+ box-shadow: 0 1px 4px rgba(0,0,0,.06);
+ }
- .user-select1 {
- float: left;
- display: inline-block;
- margin-top: 17px;
- }
+ .status-box {
+ display: flex;
+ align-items: center;
+ }
- .user-select2 {
- margin-top: 17px;
- margin-left: -10px;
- }
+ .result-box {
+ background: #f0f8ff;
+ padding: 4px 12px;
+ border-radius: 6px;
+ border-left: 5px solid #007aff;
+ }
+
+ input.highlight {
+ width: 9vw;
+ min-width: 110px;
+ font-weight: 600;
+ border: none;
+ background: #fff;
+ text-align: center;
+ font-size: 18px;
+ padding: 6px 0;
+ border-radius: 6px;
+ box-shadow: inset 0 1px 3px rgba(0,0,0,.12);
+ }
+
+ .operator-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 28px;
+ font-weight: bold;
+ color: #007aff;
+ margin: 0 6px;
+ }
+
+ .btn-group {
+ margin-left: auto;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ }
+
+ .refresh-btn-inline, .reset-btn-inline {
+ transition: .15s;
+ }
+
+ .refresh-btn-inline {
+ background: #00A2E9;
+ color: #fff;
+ font-size: 18px;
+ border-radius: 10px;
+ padding: 8px 30px;
+ border: none;
+ }
+
+ .refresh-btn-inline:hover {
+ background: #0086c0;
+ }
+
+ .reset-btn-inline {
+ background: #ff6b6b;
+ color: #fff;
+ font-size: 16px;
+ border-radius: 10px;
+ padding: 8px 18px;
+ border: none;
+ }
+
+ .reset-btn-inline:hover {
+ background: #e94d4d;
+ }
+
+ .flex-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ align-items: stretch;
+ }
+
+ .flex-grow {
+ flex: 1 1 540px;
+ }
+
+ .gap-lg {
+ gap: 30px;
+ }
+
+ /* 涓嶈壇鏁伴噺鍖哄煙 */
+ .defective-section {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+ font-size: 36px; /* 浠�32px鏀逛负36px */
+ font-weight: bold; /* 鍙�夛細鍔犵矖瀛椾綋 */
+ }
+
+ .submit-section {
+ display: flex;
+ align-items: center;
+ }
+
+ .inp {
+ padding: 8px;
+ font-size: 16px;
+ border: 1px solid #808080;
+ border-radius: 8px;
+ box-sizing: border-box;
+ }
+
+ /* 涓嶈壇鏁伴噺杈撳叆妗� */
+ .bad-input {
+ width: 320px;
+ max-width: 100%;
+ height: 66px;
+ border: 3px solid #808080;
+ font-size: 42px;
+ text-align: center;
+ }
+
+ /* 纭鎻愪氦鎸夐挳*/
+ .details-btn {
+ padding: 12px 34px;
+ background: #00a2e9;
+ color: #fff;
+ font-size: 32px;
+ border: none;
+ cursor: pointer;
+ border-radius: 12px;
+ }
+
+ .details-btn:hover {
+ background: #008ac2;
+ }
+
+ .current-user-section {
+ display: flex;
+ align-items: center;
+ font-size: 32px;
+ border: 1.5px solid #f00;
+ border-radius: 10px;
+ padding: 14px 22px;
+ background: #fff;
+ gap: 14px;
+ flex: 0 0 auto;
+ }
+
+ .current-user-name {
+ font-weight: bold;
+ font-size: 32px;
+ }
+
+ /* 閫変汉鎸夐挳 - 钃濊壊涓婚 */
+ .select-user-btn {
+ background: #00a2e9; /* 涓庢彁浜ゆ寜閽浉鍚岀殑钃濊壊 */
+ color: #fff; /* 鐧借壊鏂囧瓧 */
+ border: none; /* 绉婚櫎杈规 */
+ padding: 12px 22px; /* 璋冩暣鍐呰竟璺濅笌鎻愪氦鎸夐挳鍗忚皟 */
+ border-radius: 12px; /* 涓庢彁浜ゆ寜閽浉鍚岀殑鍦嗚 */
+ font-size: 32px; /* 淇濇寔瀛椾綋澶у皬 */
+ cursor: pointer;
+ transition: background 0.15s; /* 娣诲姞杩囨浮鏁堟灉 */
+ }
+
+ .select-user-btn:hover {
+ background: #008ac2;
+ }
- .user-select {
- /* margin-right: 2vw; */
- font-size: 1.5vw;
- }
+ .overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0,0,0,.45);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 1000;
+ }
- .form-item label {
- float: left;
- margin-top: -5px;
- font-size: 1.5vw;
- /* Larger font for labels */
- display: inline-block;
- margin-bottom: 0.5vh;
- color: #333;
- }
+ .popup {
+ background: #fff;
+ padding: 2vh;
+ border: 1px solid #ccc;
+ box-shadow: 0 0 14px rgba(0,0,0,.12);
+ width: 72vw;
+ max-width: 1400px;
+ height: 70vh;
+ font-size: 1.4vw;
+ max-height: 80vh;
+ overflow-y: auto;
+ border-radius: 12px;
+ z-index: 1001;
+ }
- .overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-color: rgba(0, 0, 0, 0.5);
- display: flex;
- justify-content: center;
- align-items: center;
- }
+ /* 閫変汉寮圭獥鏇村锛屽悕瀛楁洿澶э紝鍏抽棴鎸夐挳鏇村皬 */
+ .user-select-popup {
+ width: 1600px;
+ max-width: 99vw;
+ min-width: 1000px;
+ height: auto;
+ min-height: 520px;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ font-size: 32px;
+ }
- .popup {
- background-color: #fff;
- padding: 2vh;
- border: 1px solid #ccc;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
- width: 70vw;
- height: 70vh;
- font-size: 1.6vw;
- /* 璁剧疆寮规鐨勬渶澶ч珮搴� */
- max-height: 80vh;
- /* 鍚敤绾靛悜婊氬姩鏉� */
- overflow-y: auto;
- /* 璁剧疆寮规鐨勫瑙� */
- border-radius: 8px;
- /* Increased font size within popups */
- }
+ .user-search-bar {
+ display: flex;
+ align-items: center;
+ gap: 18px;
+ padding: 24px 64px 0 64px;
+ background: #fff;
+ flex-wrap: wrap;
+ }
- .inp5 {
- float: left;
- margin-top: 0px;
- width: 20%;
- text-align: center;
- font-size: 45px;
- border: 0px;
- border-radius: 1.5vw;
- background-color: #e5d3a0;
- }
+ .user-search-input {
+ flex: 1 1 260px;
+ padding: 16px 20px;
+ font-size: 28px;
+ border: 1px solid #bbb;
+ border-radius: 8px;
+ outline: none;
+ height: 54px;
+ }
- .inp6 {
- float: left;
- width: 22%;
- text-align: center;
- font-size: 45px;
- border: 0px;
- border-radius: 1.5vw;
- background-color: #e5d3a0;
- display: inline-block;
- }
+ .user-search-input:focus {
+ border-color: #007aff;
+ box-shadow: 0 0 0 2px rgba(0,122,255,.15);
+ }
- .table1 {
- width: 100%;
- border-spacing: 3px;
- }
+ .user-search-clear {
+ padding: 12px 28px;
+ background: #ff9f43;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ font-size: 24px;
+ cursor: pointer;
+ }
- .table2 {
- background-color: bisque;
+ .user-search-clear:hover {
+ background: #ff8920;
+ }
- }
+ .user-search-info {
+ font-size: 22px;
+ color: #555;
+ }
- .top-refresh-container {
- display: flex;
- justify-content: flex-end;
- align-items: center;
- margin-bottom: 15px;
- }
+ .user-list-scroll {
+ flex: 1 1 auto;
+ overflow-y: auto;
+ padding: 32px 64px 0 64px;
+ }
- .version-info-top {
- text-align: right;
- font-size: 13px;
- color: #000;
- margin-right: 10px;
- }
+ .user-list-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill,minmax(200px,1fr));
+ gap: 22px 22px;
+ }
- .operator-box {
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 36px;
- font-weight: bold;
- margin: 0 10px;
- color: #333;
- }
+ .user-list-btn {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 2px; /* 鍘�8px锛屽噺灏忚闂磋窛 */
+ padding: 10px 10px; /* 閫傚綋鍑忓皬涓婁笅鍐呰竟璺� */
+ height: 100px; /* 鍙�傚綋鍑忓皬楂樺害 */
+ font-size: 30px;
+ background: #00a2e9;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ cursor: pointer;
+ box-sizing: border-box;
+ word-break: break-word;
+ }
- .header-container {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 20px;
- padding: 10px 15px;
- background-color: #f2f2f2;
- border-radius: 10px;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
- }
+ .user-list-btn .user-code {
+ font-weight: 700;
+ font-size: 36px;
+ line-height: 1.1; /* 绱у噾涓�鐐� */
+ }
- .header-title {
- font-size: 24px;
- font-weight: bold;
- color: #333;
- }
+ .user-list-btn .user-name {
+ font-size: 32px;
+ line-height: 1.1; /* 绱у噾涓�鐐� */
+ }
- .header-right {
- display: flex;
- align-items: center;
- }
+ .user-list-btn.selected {
+ background: #0072c9;
+ box-shadow: 0 0 0 3px rgba(255,255,255,.6) inset;
+ }
- .top-refresh-container {
- display: flex;
- justify-content: flex-end;
- align-items: center;
- margin-bottom: 15px;
- }
+ .user-list-btn:hover {
+ background: #008ed0;
+ }
- .version-info-top {
- text-align: right;
- font-size: 13px;
- color: #666;
- margin-right: 10px;
- }
+ .no-user-result {
+ padding: 40px 0;
+ text-align: center;
+ font-size: 28px;
+ color: #666;
+ }
- .status-row {
- display: flex;
- justify-content: flex-start;
- align-items: center;
- margin-bottom: 20px;
- background-color: #f9f9f9;
- padding: 15px;
- border-radius: 8px;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
- }
+ .user-popup-footer {
+ flex-shrink: 0;
+ padding: 24px 64px 32px 64px;
+ background: #fff;
+ text-align: center;
+ }
- .status-box {
- display: flex;
- align-items: center;
- padding: 0 10px;
- }
+ .clean-btn {
+ width: 24%;
+ padding: 10px 0;
+ color: #fff;
+ font-size: 20px;
+ border: none;
+ text-align: center;
+ cursor: pointer;
+ border-radius: 0.6vw;
+ background: #007aff;
+ }
- .result-box {
- background-color: #f0f8ff;
- padding: 5px 15px;
- border-radius: 6px;
- border-left: 4px solid #007aff;
- }
+ .clean-btn.wide-btn {
+ width: 30%;
+ font-size: 22px;
+ padding: 12px 0;
+ }
- input.highlight {
- width: 10vw;
- font-weight: 700;
- border: none;
- background-color: #fff;
- text-align: center;
- font-size: 1.5vw;
- padding: 8px;
- border-radius: 4px;
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
- }
+ .clean-btn:hover {
+ background: #0062c9;
+ }
- .operator-box {
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 36px;
- font-weight: bold;
- margin: 0 15px;
- color: #007aff;
- width: 40px;
- height: 40px;
- line-height: 40px;
- text-align: center;
- }
+ .reason-section {
+ margin: 14px 0 18px;
+ }
- .refresh-btn {
- background-color: #007aff;
- color: white;
- border: none;
- font-size: 18px;
- border-radius: 6px;
- padding: 8px 20px;
- transition: background-color 0.3s;
- }
+ .reason-buttons {
+ display: grid;
+ grid-template-columns: repeat(5,1fr);
+ gap: 12px;
+ }
- .refresh-btn:active {
- background-color: #0062cc;
- }
+ .reason-btn {
+ padding: 10px 6px;
+ background: #808080;
+ color: #fff;
+ font-size: 14px;
+ border: none;
+ border-radius: 8px;
+ cursor: pointer;
+ }
- .reset-btn {
- background-color: #ff6b6b;
- color: white;
- border: none;
- font-size: 18px;
- border-radius: 6px;
- padding: 8px 15px;
- margin-left: 10px;
- transition: background-color 0.3s;
- }
+ .reason-btn.selected {
+ background: #FFD700;
+ color: #000;
+ }
- .reset-btn:active {
- background-color: #e55555;
- }
+ .bottom-section {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 16px;
+ gap: 16px;
+ }
- .non-calc-row {
- border-top: 1px dashed #ccc;
- margin-top: 30px;
- padding-top: 20px;
- position: relative;
- }
+ .save-btn, .cancel-btn {
+ flex: 1;
+ padding: 16px 0;
+ background: #00A2E9;
+ color: #fff;
+ font-size: 20px;
+ border: none;
+ border-radius: 10px;
+ }
- .divider-label {
- position: absolute;
- top: -12px;
- left: 30px;
- background-color: #fff;
- padding: 0 15px;
- font-size: 16px;
- color: #777;
- }
+ .save-btn:hover, .cancel-btn:hover {
+ background: #0086c0;
+ }
- .standalone-box {
- background-color: #f5f5f5;
- padding: 8px 15px;
- border-radius: 6px;
- margin-right: 20px;
- }
+ .table1 {
+ width: 100%;
+ border-spacing: 3px;
+ }
- .confirm-row {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-top: 10px;
- }
+ .history-table-scroll {
+ max-height: 420px; /* 鍙牴鎹疄闄呴〉闈㈣皟鏁撮珮搴� */
+ overflow-y: scroll; /* 濮嬬粓鏄剧ず绾靛悜婊戞潯 */
+ overflow-x: auto;
+ border: 2px solid #d00;
+ background: #fff;
+ }
- .input-group {
- display: flex;
- align-items: center;
- }
+ /* 琛ㄥご鍥哄畾 */
+ .history-table-scroll thead tr th {
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ background: #fff;
+ box-shadow: 0 2px 6px rgba(0,0,0,0.04);
+ }
- .custom-input {
- width: 60%;
- padding: 1vh;
- font-size: 1.5vw;
- border: 1px solid #808080;
- border-radius: 0.5vw;
- }
+ @media (max-width:1400px) {
+ input.highlight {
+ font-size: 16px;
+ }
- .confirm-btn {
- padding: 1.5vh;
- background-color: #00A2E9;
- color: white;
- font-size: 1.5vw;
- border: none;
- cursor: pointer;
- border-radius: 0.5vw;
- }
+ .user-list-btn {
+ height: 70px;
+ font-size: 18px;
+ }
- .custom-amount-section {
- margin-top: 20px;
- }
+ .user-list-btn .user-code {
+ font-size: 18px;
+ }
- .custom-amount-container {
- display: flex;
- align-items: center;
- }
+ .user-list-btn .user-name {
+ font-size: 16px;
+ }
- .custom-amount-label {
- margin-right: 10px;
- font-size: 1.5vw;
- }
+ .reason-btn {
+ font-size: 12px;
+ }
- .custom-amount-input {
- width: 60%;
- padding: 1vh;
- font-size: 1.5vw;
- border: 1px solid #808080;
- border-radius: 0.5vw;
- }
+ .refresh-btn-header {
+ font-size: 14px;
+ padding: 6px 16px;
+ }
- .custom-amount-row {
- margin-top: 20px;
- }
+ .reset-btn-header {
+ font-size: 12px;
+ padding: 6px 12px;
+ }
+ }
</style>
\ No newline at end of file
--
Gitblit v1.9.3