From 0a6d4ec008e925be104466c69e07137599b5abd5 Mon Sep 17 00:00:00 2001
From: zrg <z1873@LAPTOP-EAVL132E>
Date: 星期五, 29 八月 2025 17:23:20 +0800
Subject: [PATCH] 条码拆码

---
 pages.json                           |    6 
 pages/index/tab2.vue                 |    7 
 .hbuilderx/launch.json               |    2 
 pages/tiaomachaima/tiaomachaima2.vue |  497 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 511 insertions(+), 1 deletions(-)

diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
index d7abf73..4dd14cd 100644
--- a/.hbuilderx/launch.json
+++ b/.hbuilderx/launch.json
@@ -25,7 +25,7 @@
             "localRepoPath" : "D:/WorkBench/ZY_APP_Dev/STUWMS/unpackage/debug",
             "openVueDevtools" : true,
             "packageName" : "com.shebeiguanli.www",
-            "playground" : "custom",
+            "playground" : "standard",
             "type" : "uni-app:app-android"
         }
     ]
diff --git a/pages.json b/pages.json
index e066b2b..64e56a6 100644
--- a/pages.json
+++ b/pages.json
@@ -410,6 +410,12 @@
 			}
 		},
 		{
+			"path": "pages/tiaomachaima/tiaomachaima2",
+			"style": {
+				"navigationBarTitleText": "鏉$爜鎷嗙爜2"
+			}
+		},
+		{
 			"path": "pages/wuliaosaoma/wuliaosaoma",
 			"style": {
 				"navigationBarTitleText": "鐗╂枡娓呭崟"
diff --git a/pages/index/tab2.vue b/pages/index/tab2.vue
index 5df57cf..86e42e6 100644
--- a/pages/index/tab2.vue
+++ b/pages/index/tab2.vue
@@ -195,6 +195,13 @@
 					id: 26,
 					hidden: false,
 				},
+				{
+					img: '../../static/icon/icon21.png',
+					text: '鏉$爜鎷嗙爜2',
+					url: '/pages/tiaomachaima/tiaomachaima2',
+					id: 27,
+					hidden: false,
+				},
 				// , {
 				// 	img: '../../static/icon/icon1.png',
 				// 	text: '璁惧妗f鏌ヨ',
diff --git a/pages/tiaomachaima/tiaomachaima2.vue b/pages/tiaomachaima/tiaomachaima2.vue
new file mode 100644
index 0000000..92c2982
--- /dev/null
+++ b/pages/tiaomachaima/tiaomachaima2.vue
@@ -0,0 +1,497 @@
+<template>
+	<view class="container">
+		<view class="header">
+			<view class="item">
+				<view class="left">鏉$爜缂栧彿锛�</view>
+				<view class="right">
+					<input name="HBarCode"  v-model="barCodeInfoMeta.barCodeNo" placeholder="璇锋壂鎻忔潯鐮�"
+						@blur="searchbarCodeInfo" />
+				</view>
+				<view>
+					<uni-icons type="scan"
+						style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;font-weight: 500;"
+						size="20" @click="toScanCode"></uni-icons>
+				</view>
+			</view>
+			<view class="item">
+				<view class="left">鎷嗙爜鏁伴噺锛�</view>
+				<view class="right">
+					<input type="number" name="HSplitNum" v-model="barCodeInfoMeta.splitNum" placeholder="璇疯緭鍏ユ媶鐮佹暟閲�" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="left">鍒跺崟浜猴細</view>
+				<view class="right">
+					<input type="text" disabled name="HMaker" v-model="barCodeInfoMeta.billMaker"
+						placeholder="璇疯緭鍏ュ埗鍗曚汉" />
+				</view>
+			</view>
+			<view class="operation-zone">
+				<button class="btn-c" @click="searchbarCodeInfoMeta">鎷嗙爜</button>
+				<button type="default" :class="cantGenerate?'':'btn-c'" @click="SaveBarCodeCreate"
+					:disabled="cantGenerate">鐢熸垚</button>
+				<button type="default" :class="cantPrint?'':'btn-c'" @click="PrintHBarCode" :disabled="cantPrint" >鎵撳嵃</button>
+			</view>
+		</view>
+		<view class="divide"></view>
+		<view class="content">
+			<view class="barcode-detail" v-show="CommonUtils.isEmpty(Object.assign(barCodeInfo, {})) === false">
+				<view class="title">鏉$爜淇℃伅</view>
+				<uni-card>
+					<view class="detail" style="display: none;">
+						<text>鏉$爜ID锛�</text>{{barCodeInfo['HItemID'] || '0'}}
+					</view>
+					<view class="detail">
+						<text>鏉$爜缂栧彿锛�</text>{{barCodeInfo['鏉$爜缂栧彿'] || ''}}
+					</view>
+					<view class="detail">
+						<text>鏉$爜鍘熸暟閲忥細</text>{{barCodeInfo['鏁伴噺'] || '0'}}
+					</view>
+					<view class="detail">
+						<text>鍓╀綑鏁伴噺锛�</text>{{barCodeInfo['鍓╀綑鏁伴噺'] || '0'}}
+					</view>
+					<view class="dWetail">
+						<text>鐗╂枡缂栫爜锛�</text>{{barCodeInfo['鐗╂枡浠g爜'] || ''}}
+					</view>
+					<view class="detail">
+						<text>鐗╂枡鍚嶇О锛�</text>{{barCodeInfo['鐗╂枡鍚嶇О'] || ''}}
+					</view>
+					<view class="detail">
+						<text>瑙勬牸鍨嬪彿锛�</text>{{barCodeInfo['瑙勬牸鍨嬪彿'] || ''}}
+					</view>
+					<view class="detail">
+						<text>璁¢噺鍗曚綅锛�</text>{{barCodeInfo['璁¢噺鍗曚綅'] || ''}}
+					</view>
+				</uni-card>
+			</view>
+			<view class="divide"></view>
+			<view class="barcode-split" v-show="barCodeSplitInfo.length>0">
+				<view class="title">鏉$爜鎷嗙爜</view>
+				<view class="barcode-split-list" v-for="(item,index) in barCodeSplitInfo" :key="index">
+					<uni-card @tap="ModityHQty(item)">
+						<view class="detail">
+							<text>鏉$爜缂栧彿锛�</text>{{item['HBarCode'] || ''}}
+						</view>
+						<view class="detail split-num">
+							<text>鎷嗗垎鏁伴噺锛�</text>{{item['HSplitNum'] || '0'}}
+						</view>
+						<view class="detail">
+							<text>鐗╂枡浠g爜锛�</text>{{item['HNumber'] || ''}}
+						</view>
+						<view class="detail">
+							<text>鐗╂枡鍚嶇О锛�</text>{{item['HName'] || ''}}
+						</view>
+						<view class="detail">
+							<text>瑙勬牸鍨嬪彿锛�</text>{{item['HModel'] || ''}}
+						</view>
+						<view class="detail">
+							<text>璁¢噺鍗曚綅锛�</text>{{barCodeInfo['璁¢噺鍗曚綅'] || ''}}
+						</view>
+					</uni-card>
+				</view>
+			</view>
+		</view>
+		<view class="over" v-if="barCodeSplitInfo.length == 0">鏆傛棤鏁版嵁</view>
+		<view class="over" v-if="barCodeSplitInfo.length != 0">宸插埌搴�</view>
+		<view>
+			<!-- 杈撳叆妗嗙ず渚� -->
+			<uni-popup ref="inputDialog" type="dialog">
+				<uni-popup-dialog ref="inputClose" mode="input" title="璇疯緭鍏ユ媶鐮佹暟閲�" :value="dialogVal" placeholder="璇疯緭鍏ユ媶鐮佹暟閲�"
+					@confirm="dialogInputConfirm"></uni-popup-dialog>
+			</uni-popup>
+		</view>
+		<labelPrinterComponentVue ref="labelPrinter" :printInfo="printInfo" :printMode="'cpcl'">
+		</labelPrinterComponentVue>
+	</view>
+</template>
+
+<script>
+	import labelPrinterComponentVue from '../../components/labelPrinterComponent/labelPrinterComponent.vue';
+	import {
+        CBar,
+        CBox,
+        CForm,
+        CImage,
+        CLine,
+        CCodeRotation,
+        CCodeType,
+        CPage,
+        CText,
+        CFont,
+        CBold,
+        CRotation,
+        CInverse,
+        CMag,
+        CQRCode,
+        CCorrectLevel,
+        CSN,
+        CStatus,
+        CPCL,
+    } from "@psdk/cpcl";
+	import {
+		getUserInfo
+	} from "@/utils/auth.js";
+	import {
+		CommonUtils
+	} from "@/utils/common.js"
+	export default {
+		data() {
+			return {
+				CommonUtils,
+				userInfo: getUserInfo(),
+				serverUrl: 'http://192.168.2.227:8082/API',
+				barCodeInfoMeta: {
+					barCodeNo: "",
+					splitNum: "",
+					billMaker: getUserInfo().HEmpName,
+					billMakerID: getUserInfo().HEmpID
+				},
+				barCodeInfo: {
+
+				},
+				barCodeSplitInfo: [],
+				dialogVal: 0,
+				itemCache: {},
+				cantGenerate: true,
+				cantPrint:true,
+				 printInfo: ""//鎵撳嵃
+			};
+		},
+		components: {
+		    labelPrinterComponentVue
+		},
+		methods: {
+			doRequest(url, data, resFunction, errFunction, method) {
+				uni.showLoading({
+					title: '鍔犺浇涓�...'
+				})
+				uni.request({
+					method: method || "GET",
+					url: this.serverUrl + url,
+					data: data || "",
+					success: (res) => {
+						if (typeof resFunction === 'function') {
+							resFunction.call(this, res)
+						} else if (typeof errFunction === 'undefined') {
+							return
+						} else {
+							throw new TypeError("璁块棶鎴愬姛鍥炶皟鍑芥暟绫诲瀷寮傚父!")
+						}
+					},
+					fail: (err) => {
+						uni.showToast({
+							icon: "error",
+							title: "鎺ュ彛璁块棶寮傚父!",
+							duration: 2000
+						})
+						if (typeof errFunction === 'function') {
+							errFunction.call(this, err)
+						} else if (typeof errFunction === 'undefined') {
+							return
+						} else {
+							throw new TypeError("璁块棶澶辫触鍥炶皟鍑芥暟绫诲瀷寮傚父!")
+						}
+					}
+				})
+				uni.hideLoading()
+			},
+			//鎽勫儚澶磋皟鐢�
+			async searchbarCodeInfo() {
+				await this.$nextTick()
+				let urlEncode =
+					`/Gy_BarCodeBillList/page?sWhere= and 鏉$爜缂栧彿=\'\'${this.barCodeInfoMeta.barCodeNo}\'\'&user=${this.userInfo.HEmpName}&page=1&size=1`
+					.toString()
+				if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) == true) {
+					return uni.showToast({
+						icon: "fail",
+						title: "鏉$爜缂栧彿涓嶈兘涓虹┖!"
+					})
+				}
+				this.doRequest(
+					urlEncode,
+					null,
+					function(res) {
+						console.log(res)
+						let res1 = res.data
+						let {data,count} = res1
+						if (count > 0) {
+							this.barCodeInfo = data[0]
+							this.barCodeSplitInfo= []
+						}
+					},
+					function(err) {
+						console.err(err)
+					}
+				)
+			},
+			//鎷嗙爜鎸夐挳璋冪敤
+			async searchbarCodeInfoMeta() {
+				this.cantGenerate = true
+				this.cantPrint=true
+				if (CommonUtils.isEmpty(this.barCodeInfoMeta.barCodeNo) === true) {
+					return uni.showToast({
+						icon: 'none',
+						title: '鏉$爜缂栧彿涓嶅緱涓虹┖!'
+					});
+				}
+				if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
+					return uni.showToast({
+						icon: 'none',
+						title: '鎷嗗垎鏁伴噺涓嶅緱涓虹┖!'
+					});
+				}
+				if (CommonUtils.isEmpty(this.barCodeInfoMeta.splitNum, true) === true) {
+					return uni.showToast({
+						icon: 'none',
+						title: '鎷嗗垎鏁伴噺涓嶅緱涓虹┖!'
+					});
+				}
+				if (parseFloat(this.barCodeInfoMeta.splitNum) > parseFloat(this.barCodeInfo['鏁伴噺'])) {
+				    return uni.showToast({
+				        icon: 'none',
+				        title: '鎷嗗垎鏁伴噺涓嶈兘澶т簬鏉$爜鍘熸暟閲�!'
+					});
+				}
+				this.doRequest(
+					"/Sc_BarCode/SplitBarCode_Sub", {
+						HBarCodeNo: this.barCodeInfoMeta.barCodeNo
+					},
+					function(res) {
+						console.log(res)
+						this.barCodeSplitInfo = []
+						if (res.data.count > 0) {
+			
+							if (res.data.data.length < 1) {
+								return uni.showToast({
+									icon: 'none',
+									title: Message
+								});
+							}
+							
+							//鎷嗗垎鏉$爜锛氭暟閲忎负 splitNum
+							let barCodeItem1 = JSON.parse(JSON.stringify(res.data.data.SubBarCodes[0]));
+							barCodeItem1.HSplitNum = this.barCodeInfoMeta.splitNum;
+							barCodeItem1.HBarCode = res.data.data.NextBarCode;
+							this.barCodeSplitInfo.push(barCodeItem1);
+							
+							//鏇存柊鍘熷厛鏉$爜鏁伴噺
+							this.barCodeInfo['鍓╀綑鏁伴噺'] = this.barCodeInfo['鏁伴噺'] - this.barCodeInfoMeta.splitNum;
+							
+							this.cantGenerate = false;
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: '娌℃湁鎵惧埌瀵瑰簲鐨勫崟鎹�'
+							});
+						}
+					},
+					function(err) {
+						console.error(err)
+					}
+				)
+			},
+			//淇濆瓨鏂规硶
+			SaveBarCodeCreate() {
+				// 鏍¢獙鎷嗙爜鏁伴噺
+				let sum = this.barCodeSplitInfo.reduce((acc, obj) => {
+					return acc + obj["HSplitNum"]
+				}, 0)
+
+				if (sum > this.barCodeInfo["HQty"]) {
+					return uni.showToast({
+						icon: 'none',
+						title: '鎷嗙爜鏁伴噺鍜屼笉寰楀ぇ浜庢潯鐮佹暟閲�'
+					});
+				}
+				let msg =
+					`${this.barCodeInfoMeta["barCodeNo"]};${this.barCodeInfoMeta["splitNum"]};${JSON.stringify(this.barCodeSplitInfo)};${this.userInfo["HEmpName"]}`
+				this.doRequest(
+					"/Sc_BarCode/SplitBarCode_Save", {
+						msg: msg
+					},
+					function(res) {
+						if (res.data.code == 1) {
+							this.cantGenerate = true
+							this.cantPrint=false
+							uni.showToast({
+								title: '鐢熸垚鎴愬姛!'
+							});
+						}else{
+							this.cantGenerate = false
+							uni.showToast({
+								title: res.data.Message
+							});
+						}
+						
+					},
+					function(err) {
+						console.err(err)
+					},
+					"POST"
+				)
+
+			},
+			//鎵撳嵃鎸夐挳
+			async PrintHBarCode() {
+				if (this.$printer.isConnected() === false) {
+					this.$refs.labelPrinter.openPopup()
+				} 
+				else
+				{
+				let HBarCodeNoStr =`${this.barCodeSplitInfo[0]['HBarCode']}`
+				this.printInfo = `! 0 200 200 400 1
+					PAGE-WIDTH 608
+					SETQRVER 3
+					B QR 475 15 Q 0 U 3
+					LA,${HBarCodeNoStr}
+					ENDQR
+					T 24 0 0 30 渚涘簲鍟�: ${this.lailiaoInfo.HSupName}
+					T 55 0 0 55 (Supplier)
+					T 24 0 0 75 渚涘簲鍟嗘枡鍙�:  ${this.lailiaoInfo.HMaterNumber}
+					T 55 0 0 100 (Supplier Sku No.)
+					T 24 0 0 120 鐗╂枡鍚嶇О: ${this.lailiaoInfo.HMaterName}
+					T 55 0 0 145 (Material Code)
+					T 24 0 0 165 娆惧彿: ${this.lailiaoInfo.HCoilNO}
+					T 55 0 0 190 (Style No.)
+					T 24 0 300 165 瀹㈡埛缂栧彿: ${this.lailiaoInfo.HFactory}
+					T 55 0 300 190 (Consumer No.)
+					T 24 0 0 210 鍒嗙粍: ${this.lailiaoInfo.HFurnaceNO || ''}
+					T 55 0 0 235 (Group) 
+					T 24 0 300 210 瑙勬牸: ${this.lailiaoInfo.HMaterModel}
+					T 55 0 300 235 (SKU NO.) 
+					T 24 0 0 255 鏁伴噺:  ${ parseFloat(this.lailiaoInfo.HQty || 0).toFixed(0) } ${pcsInfo}
+					T 55 0 0 280 (Quantity) 
+					T 24 0 300 255 鏃ユ湡: ${this.lailiaoInfo.HDate || ''}
+					T 55 0 300 280 (Date) 
+					T 24 0 0 300 妫�楠屽憳: 
+					T 55 0 0 325 (QC)  
+					T 24 0 300 300 閲囪喘鍗曞彿: ${this.lailiaoInfo.HBillNo || ''}
+					T 55 0 300 325 (Purchase Order No.)  
+					T 24 0 0 345 妫�楠岀粨鏋�: 
+					T 55 0 0 370 (Inspection status) 
+					BOX 240 345 260 365 4
+					T 24 0 270 345 鍚堟牸
+					T 55 0 250 370 (Pass) 
+					BOX 340 345 360 365 4
+					T 24 0 370 345 涓嶅悎鏍�
+					T 55 0 370 370 (Fail) 
+					BOX 460 345 480 365 4
+					T 24 0 490 345 鐗归噰
+					T 55 0 440 370 (Spec. accepted) 
+					FORM
+					PRINT`
+					await this.$nextTick(() => {
+					this.$refs.labelPrinter.execPrint()
+					})
+				}
+			},
+			toScanCode() {
+				var mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
+				mpaasScanModule.mpaasScan({
+					'hideAlbum': true,
+					'timeoutInterval':'10', //瓒呮椂鏃堕棿
+					'timeoutText':'鏈瘑鍒埌浜岀淮鐮�' //瓒呮椂鎻愰啋            
+				},(ret) => {
+					console.log(ret.resp_result)
+					if (this.CommonUtils.isEmpty(ret.resp_result) === false) {
+						console.log('鏉$爜鍐呭锛�' + ret.resp_result);
+						this.barCodeInfoMeta.barCodeNo = ret.resp_result
+					
+						this.searchbarCodeInfo()
+					}
+				})
+			}
+		},
+		onLoad() {
+		}
+	}
+</script>
+
+<style lang="scss">
+	* {
+		box-sizing: border-box;
+	}
+
+	input {
+		padding: 8rpx 20rpx;
+		font-size: 30rpx;
+		line-height: 30rpx;
+	}
+	
+	button {
+		padding: 0;
+		width: 150rpx;
+		font-size: 25rpx;
+	}
+
+	.uni-card {
+		margin: 0 !important;
+	}
+
+	.container {
+		.header {
+			padding: 20rpx 10rpx;
+			display: flex;
+			flex-direction: column;
+			gap: 20rpx;
+
+			.item {
+				display: flex;
+				flex-direction: row;
+				padding: 0 10rpx;
+				gap: 20rpx;
+				font-size: 30rpx;
+				// height: 1.5rem;
+				// justify-content: center;
+				align-items: center;
+
+				.left {
+					text-align: right;
+					width: 5rem;
+				}
+
+				.right {
+					flex: 1;
+					height: 100%;
+					padding: 6rpx 0;
+					border-radius: 22rpx;
+					border: 1px solid #e4e4e4;
+					background-color: #e4e4e4;
+
+					>input {
+						height: auto;
+					}
+				}
+			}
+
+			.operation-zone {
+				display: flex;
+				flex-direction: row;
+				justify-content: space-evenly;
+
+				.btn-c {
+					background-color: #3a78ff;
+					color: #fff;
+				}
+			}
+		}
+
+		.divide {
+			width: 100%;
+			height: 16rpx;
+			background-color: #e5e5e5;
+		}
+
+		.content {
+			flex: 1;
+
+			.barcode-detail,
+			.barcode-split {
+				padding: 30rpx;
+				display: flex;
+				flex-direction: column;
+				gap: 30rpx;
+			}
+		}
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.1