From 8e37b959738eaa0e2a92b1b51a4eaf0429aa0e2b Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期五, 24 十月 2025 16:23:33 +0800
Subject: [PATCH] 工单自动带出刀具时也填充寿命比预警值
---
components/WorkOrderPrint.vue | 290 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 229 insertions(+), 61 deletions(-)
diff --git a/components/WorkOrderPrint.vue b/components/WorkOrderPrint.vue
index 7583179..8cfcd57 100644
--- a/components/WorkOrderPrint.vue
+++ b/components/WorkOrderPrint.vue
@@ -21,26 +21,45 @@
</tr>
</thead>
<tbody>
- <tr>
+ <!-- 褰撳墠瀹炴椂缁熻(淇濇寔鍘熸潵鍗曡) -->
+ <tr class="summary-row">
<td>{{ nowTime }}</td>
<td>{{ staffDisplay || '-' }}</td>
<td>{{ orderNo || '-' }}</td>
<td>{{ order.daa003 || '-' }}</td>
<td>{{ planQtyDisplay }}</td>
<td>{{ machineNo || '-' }}</td>
- <td>{{ initialValue }}</td>
- <td>{{ productionCount }}</td>
- <td>{{ calculatedTotalProduction }}</td>
- <td>{{ calculatedDefectiveCount }}</td>
- <td>{{ sQuantity }}</td>
+ <td>{{ order.initCjNum }}</td><!--鍒濆閲囬泦鏁�-->
+ <td>{{ order.currentCjNum }}</td><!--鎶ュ伐鏃堕噰闆嗘暟-->
+ <td>{{ order.currentCjNum - order.initCjNum }}</td><!--鎶ュ伐鏁帮紙璁$畻锛�-->
+ <td>{{ realTimeDefectiveCount }}</td><!--涓嶈壇鏁�-->
+ <td>{{ realTimeOkCount }}</td><!--鑹搧鏁帮紙璁$畻锛�-->
+ </tr>
+ <!-- 鍘嗗彶鎶ュ伐璁板綍琛� -->
+ <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><!--鑹搧鏁帮紙璁$畻锛�-->
+ </tr>
+ <tr v-if="!reportingHistory.length">
+ <td colspan="11" class="no-data">鏆傛棤鍘嗗彶鎶ュ伐璁板綍</td>
</tr>
</tbody>
</table>
</div>
</view>
+ <!-- 涓嬮潰鍘熸湁鍐呭淇濇寔涓嶅彉 -->
<view class="status-row">
- <view class="status-box">
+ <!--<view class="status-box">
<text>鏈哄彴闈㈡澘鏁帮細</text>
<input v-model="productionCount" class="highlight" disabled />
</view>
@@ -61,7 +80,7 @@
<view class="status-box result-box">
<text>宸茬敓浜ф暟锛�</text>
<input v-model="calculatedTotalProduction" class="highlight" disabled />
- </view>
+ </view>-->
<view class="btn-group">
<button class="refresh-btn-inline" @click="refresh">鍒锋柊</button>
<button v-if="isGeneratingBarcode" class="reset-btn-inline" @click="resetGenerateState">閲嶇疆</button>
@@ -88,17 +107,35 @@
</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">
- <view class="user-list-grid">
- <button v-for="(u, index) in users"
- :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>
+ <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">
@@ -107,11 +144,13 @@
</view>
</view>
- <view class="bottom-section">
+ <!-- 绂佺敤鎸夐挳锛氣�樹繚瀛樺苟鐢熸晥'銆佲�樺彇娑堚�� -->
+ <!--<view class="bottom-section">
<button class="save-btn" @click="save">淇濆瓨骞剁敓鏁�</button>
<button class="cancel-btn" @click="cancel">鍙栨秷</button>
- </view>
+ </view>-->
+ <!-- 淇濈暀鏃у脊绐� -->
<view v-if="isShow" class="overlay">
<view class="popup">
<view class="bottom-section1">
@@ -171,27 +210,48 @@
staffNo: '', printStr: '', printMac: '', bluetoothSocket: {}, device: '', uuid: '',
printNum: 1, reportingList: [], printLoading: false, customAmount: '',
isGeneratingBarcode: false, lastGenerateTime: 0, generateRequestId: null,
- nowTimeTimer: null, nowTime: ''
+ nowTimeTimer: null, nowTime: '',
+ userSearch: '',
+ /* 鏂板锛氬巻鍙叉姤宸ヨ褰曟暟缁� */
+ reportingHistory: []
}
},
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; },
- staffDisplay() {
- if (!this.staffNo) return '';
- const segs = this.staffNo.split(':');
- return segs.length > 1 ? `${segs[0]} ${segs[1]}` : this.staffNo;
- }
- },
- created() {
- this.initializeData();
- this.fetchData(true);
- this.init();
- this.getXS0101();
- this.updateNowTime();
- this.nowTimeTimer = setInterval(this.updateNowTime, 60000);
+ //鑹搧鏁板疄鏃惰绠�
+ 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);
},
beforeDestroy() { if (this.nowTimeTimer) clearInterval(this.nowTimeTimer); },
methods: {
@@ -200,28 +260,29 @@
const segs = u.split(':');
return segs.length > 1 ? `${segs[0]} ${segs[1]}` : u;
},
- selectUser(u) { this.staffNo = u; this.isShowUserSelect = false; },
- 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())}`;
- },
- 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/RefreshDev",
- data: { machineNo: this.order.machineNo },
- contentType: "application/json"
- }).then(r => { r.code == 200 ? this.fetchData(true) : this.$showMessage("鍚屾澶辫触"); });
- },
+ 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 => { r.code == 200 ? this.fetchData(true) : this.$showMessage("鍚屾澶辫触"); });
+ },
onDaa003Change(v) {
let o = this.lineList[this.DAA003List.indexOf(v)];
this.orderId = o.id; this.orderNo = o.daa001;
@@ -234,6 +295,7 @@
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 => {
@@ -242,27 +304,71 @@
});
}
},
+ /* 鏂板锛氳幏鍙栧巻鍙叉姤宸ヨ褰� */
+ /* 淇敼锛氳鑼冨巻鍙叉椂闂村埌绉� */
+ 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//鑹搧鏁帮紙璁$畻锛�
+ }
+ });
+ }).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 }
+ 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.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() {
@@ -355,6 +461,19 @@
</script>
<style scoped>
+ /* 鍘熸牱寮忎繚鎸侊紝鏂板鍑犺杈呭姪鏍峰紡 */
+ .report-table .summary-row {
+ background: #f0f8ff;
+ font-weight: 600;
+ }
+
+ .report-table .no-data {
+ text-align: center;
+ color: #777;
+ font-size: 14px;
+ }
+ /* 鍏朵綑鏍峰紡淇濇寔涓嶅彉 */
+
.page {
padding: 1.2vh 2vw;
display: flex;
@@ -622,11 +741,53 @@
display: flex;
flex-direction: column;
}
+ /* 鎼滅储鏉℃牱寮� */
+ .user-search-bar {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 18px 32px 0 32px;
+ background: #fff;
+ flex-wrap: wrap;
+ }
+
+ .user-search-input {
+ flex: 1 1 260px;
+ padding: 10px 14px;
+ font-size: 16px;
+ border: 1px solid #bbb;
+ border-radius: 8px;
+ outline: none;
+ }
+
+ .user-search-input:focus {
+ border-color: #007aff;
+ box-shadow: 0 0 0 2px rgba(0,122,255,.15);
+ }
+
+ .user-search-clear {
+ padding: 10px 18px;
+ background: #ff9f43;
+ color: #fff;
+ border: none;
+ border-radius: 8px;
+ font-size: 14px;
+ cursor: pointer;
+ }
+
+ .user-search-clear:hover {
+ background: #ff8920;
+ }
+
+ .user-search-info {
+ font-size: 14px;
+ color: #555;
+ }
.user-list-scroll {
flex: 1 1 auto;
overflow-y: auto;
- padding: 34px 32px 0 32px;
+ padding: 24px 32px 0 32px;
}
.user-list-grid {
@@ -671,6 +832,13 @@
background: #008ed0;
}
+ .no-user-result {
+ padding: 40px 0;
+ text-align: center;
+ font-size: 18px;
+ color: #666;
+ }
+
.user-popup-footer {
flex-shrink: 0;
padding: 22px 32px 32px 32px;
--
Gitblit v1.9.3