From 3a75daf63f5b64af3388424c3de82662c20aa383 Mon Sep 17 00:00:00 2001 From: yyb <995253665@qq.com> Date: 星期五, 18 七月 2025 13:49:01 +0800 Subject: [PATCH] 添加了打印超时定时器清除逻辑,确保打印成功后清除超时回调 --- pages/wareHouse/nuclearScale/nuclearscalerecord.vue | 856 ++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 608 insertions(+), 248 deletions(-) diff --git a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue index 260c131..d80cbfe 100644 --- a/pages/wareHouse/nuclearScale/nuclearscalerecord.vue +++ b/pages/wareHouse/nuclearScale/nuclearscalerecord.vue @@ -1,16 +1,49 @@ <template> <view class="page"> <view class="finishProductIn-locno-bg" /> - <u-navbar title="鏍哥璁板綍" :background="background" :border-bottom="false" :title-bold="true" title-color="#000" - back-icon-color="#000"> + <u-navbar + title="鏍哥璁板綍" + :background="background" + :border-bottom="false" + :title-bold="true" + title-color="#000" + back-icon-color="#000" + > <view class="navbar-right" slot="right" @click="goPrintAll"> 鍏ㄩ儴鎵撳嵃 </view> </u-navbar> <view class="wrap"> - <scroll-view class="finishProductIn-locno-scroll-list" scroll-y="true" @scrolltolower="loadMore"> - <u-cell-group class="finishProductIn-locno-scroll-list-group" :border="false"> - <view class="content" v-for="(item, index) in list" :key="item.locNo" :index="index" @click="selectNo(item)"> + <!-- 杩炴帴鍜屾墦鍗扮姸鎬佹寚绀哄櫒 --> + <view + class="status-indicator" + :class="{ + connected: connectionStatus === 'connected', + connecting: connectionStatus === 'connecting', + disconnected: connectionStatus === 'disconnected', + }" + > + <text class="status-text">{{ getConnectionStatusText() }}</text> + <text class="print-status" v-if="printStatus !== 'idle'" + >- {{ getPrintStatusText() }}</text + > + </view> + <scroll-view + class="finishProductIn-locno-scroll-list" + scroll-y="true" + @scrolltolower="getmoreList()" + > + <u-cell-group + class="finishProductIn-locno-scroll-list-group" + :border="false" + > + <view + class="content" + v-for="(item, index) in list" + :key="item.locNo" + :index="index" + @click="selectNo(item)" + > <view class="content-header"> <view class="content-header-title">{{ index + 1 }}</view> </view> @@ -21,7 +54,7 @@ <view class="_label-name">鎵规鍙凤細</view> </view> <view class="_content"> - {{ item.value0 }} + {{ item.outBatchNo }} </view> </view> <view class="row-list"> @@ -30,7 +63,7 @@ <view class="_label-name">浜у搧鎻忚堪锛�</view> </view> <view class="_content"> - {{ item.value1 }} + {{ item.netWeight }} </view> </view> <view class="row-list"> @@ -39,7 +72,7 @@ <view class="_label-name">闆朵欢鍙凤細</view> </view> <view class="_content"> - {{ item.value2 }} + {{ item.partNo }} </view> </view> <view class="row-list"> @@ -48,7 +81,7 @@ <view class="_label-name">姣涢噸锛�</view> </view> <view class="_content"> - {{ item.value3 }} + {{ item.grossWeight }} </view> </view> <view class="row-list"> @@ -57,7 +90,7 @@ <view class="_label-name">鐩橀噸锛�</view> </view> <view class="_content"> - {{ item.value4 }} + {{ item.trayWeight }} </view> </view> <view class="row-list"> @@ -75,7 +108,7 @@ <view class="_label-name">鏍哥閲嶉噺锛�</view> </view> <view class="_content"> - {{ item.value6 }} + {{ item.netWeight }} </view> </view> <view class="row-list"> @@ -90,26 +123,48 @@ </view> </view> </u-cell-group> - <view class="loadmore" @click="loadMore"> - <u-loadmore :status="loadStatus"></u-loadmore> + <view class="loadmore" @click="getmoreList()"> + <u-loadmore + :status="status" + :load-text="loadText" + @loadmore="getmoreList()" + /> </view> </scroll-view> </view> <u-toast ref="uToast" /> - <view v-if="maskShow" class="uni-mask" @touchmove.stop.prevent="moveHandle" @click="maskclose"> - <scroll-view class="uni-scroll_box" scroll-y @touchmove.stop.prevent="moveHandle" @click.stop="moveHandle"> - <view class="uni-list-box" v-for="(item, index) in listDevice" :key="index" @click="tapQuery(item)"> - <view> - <view class="uni-list_name">鍚嶇О锛歿{ item.name }}</view> - <view class="uni-list_item">UUID:{{ item.address }}</view> + <u-modal v-model="maskShow" title="" :show-confirm-button="false"> + <view @touchmove.stop.prevent="moveHandle" @click="maskclose"> + <scroll-view + class="uni-scroll_box" + scroll-y + @touchmove.stop.prevent="moveHandle" + @click.stop="moveHandle" + > + <view class="modal-title">閫夋嫨钃濈墮璁惧</view> + <view v-if="listDevice.length === 0" class="empty-tip">鏆傛棤璁惧</view> + <view + v-for="(item, index) in listDevice" + :key="index" + @click="tapQuery(item)" + class="device-item" + > + <view class="device-name"> + <text>鍚嶇О锛�</text> + <text>{{ item.name || "鏈煡璁惧" }}</text> + </view> + <view class="device-uuid"> + <text>UUID:</text> + <text>{{ item.address || "鏃犲湴鍧�" }}</text> + </view> </view> - </view> - </scroll-view> - </view> + </scroll-view> + </view> + </u-modal> </view> </template> <script> -import content_bg from '@/static/custom/finishProductIn/locNoBg.png' +import content_bg from "@/static/custom/finishProductIn/locNoBg.png"; const jcapi = uni.requireNativePlugin("JCSDK-JCApiModule"); // 浜岀淮鐮佺被鍨� @@ -117,301 +172,484 @@ QrCode: 31, PDF417: 32, DataMatrix: 33, - AZTEC: 34 -} + AZTEC: 34, +}; // 绾挎潯绫诲瀷 const LineType = { Solid: 1, // 瀹炵嚎 Dotted: 2, // 铏氱嚎锛堥粯璁よ櫄瀹�1:1鐩搁棿锛� -} +}; // 鎹㈣鏂瑰紡 const LineModeType = { Justified: 1, // 瀹介珮鍥哄畾锛屽唴瀹硅嚜閫傚簲锛堝瓧鍙�/瀛楅棿璺�/琛岄棿璺濇寜姣斾緥缂╂斁锛� AutoHeight: 2, // 瀹藉害鍥哄畾锛岄珮搴﹁嚜閫傚簲 Fixed: 4, // 瀹介珮鍥哄畾锛岃秴鍑洪儴鍒嗚鍓� Adapt: 6, // 瀹介珮鍥哄畾锛屽唴瀹硅秴杩囨椂棰勮瀹介珮鑷姩缂╁皬 -} +}; export default { data() { return { background: { backgroundImage: `url(${content_bg})`, - backgroundAttachment: 'fixed', - backgroundSize: '100% auto', - backgroundRepeat: 'no-repeat', + backgroundAttachment: "fixed", + backgroundSize: "100% auto", + backgroundRepeat: "no-repeat", }, - keywords: '', - alllist: [], - originList: [], - query: { - current: 1, - size: 10 + keywords: "", + list: [], + total: 0, + pageNum: 1, + pageSize: 10, + status: "loading", + loadText: { + loadmore: "鍔犺浇鏇村...", + loading: "鍔姏鍔犺浇涓�...", + nomore: "娌℃湁鏇村浜�", }, - list: [ - { - value0: '123456789', - value1: '123456789', - value2: '123456789', - value3: '123456789', - value4: '123456789', - value5: '123456789', - value6: '123456789', - value7: '123456789' - }, - { - value0: '123456789', - value1: '123456789', - value2: '123456789', - value3: '123456789', - value4: '123456789', - value5: '123456789', - value6: '123456789', - value7: '123456789' - } - ], - count: 0, - loadStatus: 'loading', maskShow: false, listDevice: [], //钃濈墮璁惧鏁版嵁 - pritList: [] + printQueue: [], // 鎵撳嵃闃熷垪 + printing: false, // 鏄惁姝e湪鎵撳嵃 + printDensity: 3, // 榛樿鎵撳嵃娴撳害 + labelType: 1, // 榛樿鏍囩绫诲瀷 + // 1锛氶棿闅欑焊 + // 2锛氶粦鏍囩焊 + // 3锛氳繛缁焊 + // 4锛氬畾瀛旂焊 + // 5锛氶�忔槑绾� + printMode: 2, // 榛樿鎵撳嵃妯″紡 + // 1锛氱儹鏁� + // 2锛氱儹杞嵃 + connectedDevice: null, // 宸茶繛鎺ョ殑鎵撳嵃鏈� + connectionStatus: "disconnected", // 杩炴帴鐘舵��: disconnected, connecting, connected + printStatus: "idle", // 鎵撳嵃鐘舵��: idle, printing, error + errorMessage: "", // 閿欒淇℃伅 }; }, onLoad() { - this.$u.api.finishProductIn.fetchList().then(res => { - this.alllist = res.data - this.originList = res.data - this.loadList() - }) + this.getlist(); // 鍒濆鍖朣DK - jcapi.initSDK() + jcapi.initSDK(); // 鐩戝惉椤电爜鍥炶皟 jcapi.didReadPrintCountInfo(function (r) { - console.log(r) - }) + console.log(r); + }); // 鐩戝惉閿欒鍥炶皟 - jcapi.didReadPrintErrorInfo(function (r) { - console.log(r) + jcapi.didReadPrintErrorInfo((r) => { + console.log(r); if (r.code == 23) { // 鎵撳嵃鏈烘柇寮�杩炴帴 - _this.connectedDevice = null + this.connectedDevice = null; + uni.showToast({ + icon: "none", + title: "鎵撳嵃鏈鸿繛鎺ュ凡鏂紑锛岃閲嶆柊杩炴帴", + duration: 2 * 1000, + }); + } else { + uni.showToast({ + icon: "none", + title: JSON.stringify(r), + duration: 2 * 1000, + }); } - uni.showToast({ - icon: 'none', - title: JSON.stringify(r), - duration: 2 * 1000 - }) - }) + }); }, methods: { - loadMore() { - if (this.loadStatus == "nomore" || this.loadStatus == "loading") { - return + getmoreList() { + if (this.pageSize >= this.total) { + this.status = "nomore"; + return; } - this.loadStatus = "loading"; + this.status = "loading"; setTimeout(() => { - this.query.current += 1; - this.loadList(); - }, 100); + this.pageSize += this.pageSize; + this.getlist(); + }, 1000); }, - loadList() { - const data = this.originList.slice((this.query.current - 1) * this.query.size, this.query.current * this.query.size) - this.list = this.list.concat(data); - this.loadStatus = "loadmore"; - if (!data || data.length < this.query.size) { - this.loadStatus = "nomore"; - } + getlist() { + this.$u.api.workReporting + .getWorkshopOrder({ + current: this.pageNum, + size: this.pageSize, + }) + .then((res) => { + this.list = res.data.records; + this.total = res.data.total; + if (this.pageSize >= this.total) { + this.status = "nomore"; + } else { + this.status = "loadmore"; + } + }); }, search(value) { - this.list = []; - this.query.current = 1; if (value) { - this.originList = this.alllist.filter(item => item.locNo.includes(value)) + this.list = []; + this.pageSize = 10; + this.$u.api.workReporting + .getWorkshopOrder({ + current: this.pageNum, + size: this.pageSize, + moNo: value, + }) + .then((res) => { + this.list = res.data.records; + this.total = res.data.total; + if (this.pageSize >= this.total) { + this.status = "nomore"; + } else { + this.status = "loadmore"; + } + }); } else { - this.originList = this.alllist + this.getlist(); } - this.loadList() + }, + // 妫�鏌ヨ摑鐗欒繛鎺ョ姸鎬� + async checkBluetoothConnection() { + if (!this.connectedDevice) { + this.connectionStatus = "disconnected"; + return false; + } + + // 璁剧疆涓鸿繛鎺ヤ腑鐘舵�� + this.connectionStatus = "connecting"; + + // 澧炲己杩炴帴鐘舵�佹娴� + return new Promise((resolve) => { + // 绠�鍖栬繛鎺ョ姸鎬佹娴嬶紝鐩存帴浣跨敤宸茶褰曠殑杩炴帴鐘舵�� + if (this.connectedDevice) { + this.connectionStatus = "connected"; + resolve(true); + } else { + this.connectionStatus = "disconnected"; + uni.showToast({ + icon: "none", + title: "鎵撳嵃鏈烘湭杩炴帴锛岃鍏堣繛鎺�", + duration: 2000, + }); + resolve(false); + } + }); + }, + + // 娣诲姞鍒版墦鍗伴槦鍒� + addToPrintQueue(items) { + if (!Array.isArray(items)) { + items = [items]; + } + + this.printQueue.push(...items); + // 濡傛灉涓嶅湪鎵撳嵃涓紝鍒欏紑濮嬪鐞嗛槦鍒� + if (!this.printing) { + this.processPrintQueue(); + } + }, + + // 澶勭悊鎵撳嵃闃熷垪 + async processPrintQueue() { + while (this.printQueue.length > 0) { + // 妫�鏌ヨ繛鎺ョ姸鎬� + const isConnected = await this.checkBluetoothConnection(); + if (!isConnected) { + // 濡傛灉鏈繛鎺ワ紝鏄剧ず钃濈墮杩炴帴瀵硅瘽妗� + this.searchDevice(); + // 涓嶆槸鐩存帴return锛岃�屾槸绛夊緟鐢ㄦ埛杩炴帴鍚庡啀缁х画澶勭悊 + return; + } + + this.printing = true; + this.printStatus = "printing"; + + // 鍙栧嚭闃熷垪涓殑绗竴涓换鍔� + const item = this.printQueue.shift(); + + try { + // 鎵ц鎵撳嵃 + await this.printQrCode(item); + + // 鎵撳嵃鎴愬姛鍚庣户缁鐞嗕笅涓�涓� + uni.showToast({ + title: "鎵撳嵃鎴愬姛", + icon: "success", + duration: 1000, + }); + + // 鐭殏寤惰繜锛岄伩鍏嶆墦鍗版満缂撳瓨婧㈠嚭 + await new Promise((resolve) => setTimeout(resolve, 1000)); + } catch (error) { + console.error("鎵撳嵃鍑洪敊:", error); + this.printStatus = "error"; + this.errorMessage = error.message || "鎵撳嵃鏃跺彂鐢熸湭鐭ラ敊璇�"; + this.printing = false; + + // 璁板綍澶辫触鐨勪换鍔★紝涓嶉噸鏂版坊鍔犲埌闃熷垪 + this.failedPrintJobs = this.failedPrintJobs || []; + this.failedPrintJobs.push(item); + + uni.showToast({ + title: `鎵撳嵃澶辫触: ${this.errorMessage}`, + icon: "none", + duration: 2000, + }); + // 缁х画澶勭悊涓嬩竴涓换鍔� + continue; + } + } + + this.printing = false; + this.printStatus = "idle"; }, // 鎵撳嵃鍗曚釜淇℃伅 selectNo(item) { - let that = this + let that = this; uni.showModal({ - title: '鎻愮ず', - content: '鏄惁鎵撳嵃瑁呯鍗曪紵', + title: "鎻愮ず", + content: "鏄惁鎵撳嵃瑁呯鍗曪紵", showCancel: true, - success: function (res) { + success: async function (res) { if (res.confirm) { - that.searchDevice() - that.pritList = [item] + // 娣诲姞鍒版墦鍗伴槦鍒� + that.addToPrintQueue(item); } - } + }, }); }, + // 鎵撳嵃鍏ㄩ儴淇℃伅 goPrintAll() { - let that = this + let that = this; uni.showModal({ - title: '鎻愮ず', - content: '鏄惁鎵撳嵃瑁呯鍗曪紵', + title: "鎻愮ず", + content: `鏄惁鎵撳嵃鍏ㄩ儴${that.list.length}鏉¤绠卞崟锛焋, showCancel: true, - success: function (res) { + success: async function (res) { if (res.confirm) { - that.searchDevice() - that.pritList = this.list + // 娣诲姞鍒版墦鍗伴槦鍒� + that.addToPrintQueue([...that.list]); } - } + }, }); }, - moveHandle() { - - }, - maskclose() { - - }, + moveHandle() {}, + maskclose() {}, //鎵撳嵃浜岀淮鐮� async printQrCode(item) { - const params = { - rwMatlBindId: item.id - } - let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params) - if (!res.data) { - this.$refs.uToast.show({ - title: '鏈煡璇㈠埌璇ユ爣绛句俊鎭紒', - type: 'warning ' - }) - return - } - // 鍒濆鍖栫敾鏉� - jcapi.initDrawingBoard({ - width: 50, - height: 100, - rotate: 0 - }); + return new Promise(async (resolve, reject) => { + const params = { + rwMatlBindId: item.id + }; + try { + let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params) + if (!res.data) { + this.$refs.uToast.show({ + title: "鏈煡璇㈠埌璇ユ爣绛句俊鎭紒", + type: "warning ", + }); + reject(new Error("鏈煡璇㈠埌璇ユ爣绛句俊鎭�")); + return; + } - // // 缁樺埗浜岀淮鐮� - jcapi.drawLabelQrCode({ - x: 14.5, - y: 74, - width: 20, - height: 20, - value: jsonString, - rotate: 0, - codeType: QrCodeType.QrCode, - }); - // 缁樺埗妯嚎 瀹炵嚎8鏉� - let sum = 4; - for (let i = 1; i < 13; i++) { - this.getDrawLabelLine(4, sum, 46, 0.5, 0, LineType.Solid) // 瀹炵嚎 - sum = (i * 6) + 4 - } - // 浜岀淮鐮佸ぇ妗� - this.getDrawLabelLine(4, 97, 46, 0.5, 0, LineType.Solid) // 瀹炵嚎9 + // 浠嶢PI鍝嶅簲涓彁鍙栨墍闇�鏁版嵁 + const { ht, lj, ljms, fh, scdt, scph, fhdw, shdw } = res.data; - //缁樺埗绔栫嚎 - this.getDrawLabelLine(4, 4, 0.5, 97, 0, LineType.Solid) // 绔栫嚎1 - this.getDrawLabelLine(20, 4, 0.5, 66, 0, LineType.Solid) // 绔栫嚎2 - this.getDrawLabelLine(44.5, 4, 0.5, 97, 0, LineType.Solid) // 绔栫嚎2 + // 鍒濆鍖栫敾鏉� + jcapi.initDrawingBoard({ + width: 70, + height: 49, + rotate: 90, + }); - // 濉啿鏂囧瓧鏍囬 - this.getDrawLabelText(5, 5, 20, 20, '缂� 鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 11, 20, 20, '宸ュ崟鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 17, 20, 20, '鐗� 鍙�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 23, 20, 20, '鐗囧锛坢m锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 29, 20, 20, '鍘氬害锛坢m锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 35, 20, 20, '閲嶉噺锛圞G锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 41, 20, 20, '闀垮害锛坢锛�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 47, 20, 20, '鐢熶骇浜�:', 3.6, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 53, 20, 20, '鐢熶骇鏃堕棿:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 59, 20, 20, '鍘傚:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1) - this.getDrawLabelText(5, 65, 20, 20, '閾佹崯:', 3.4, 0, LineModeType.AutoHeight, 0, 0, 0, 1) + // 缁樺埗浜岀淮鐮� + const qrContent = `ht:${ht}\nlj:${lj}\nljms:${ljms}\nfh:${fh}\nscdt:${scdt}\nscph:${scph}\nfhdw:${fhdw}\nshdw:${shdw}`; + jcapi.drawLabelQrCode({ + x: 43.5, + y: 2, + width: 24, + height: 24, + value: qrContent, + rotate: 0, + codeType: QrCodeType.QrCode, + }); - // // 濉啿鍙傛暟鍊� - this.getDrawLabelText(22, 5, 35, 12, labelNo, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 11, 35, 12, optaskNo, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 17, 35, 12, grade, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 23, 35, 12, sliceWidth, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 29, 35, 12, thickness, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 35, 35, 12, wweight, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 41, 35, 12, llength, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 47, 35, 12, reportName, 2, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 53, 35, 12, reportTime, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 59, 35, 12, supplierVenderName, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) - this.getDrawLabelText(22, 65, 35, 12, ironLoss, 3, 0, LineModeType.AutoHeight, 0, 0, 0, 0) + // 缁樺埗妯嚎 + this.getDrawLabelLine(1, 1, 67, 0.5, 0, LineType.Solid); + this.getDrawLabelLine(1, 6, 42, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 11, 42, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 16, 42, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 21, 42, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 27, 67, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 32, 67, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 37, 67, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 42, 67, 0.3, 0, LineType.Solid); + this.getDrawLabelLine(1, 47, 67, 0.5, 0, LineType.Solid); - // 鐢熸垚鎵撳嵃鏁版嵁 - let imageJsonObj = jcapi.generateLabelJson() - // 璁剧疆鎵撳嵃浠诲姟 - jcapi.startJob({ - totalCount: 1, - density: this.printDensity, - labelType: this.labelType, - printMode: this.printMode, - }, function (r) { - if (r.code == 0) { - // 鎵撳嵃鏁版嵁 - jcapi.printData(imageJsonObj, { - "printQuantity": 1, - }, function (r) { - if (r.code == 0) { - console.log("鎵撳嵃鎴愬姛") - } else { - console.log("鎵撳嵃澶辫触") + //缁樺埗绔栫嚎 + this.getDrawLabelLine(1, 1, 0.5, 46, 0, LineType.Solid); // 绔栫嚎1 + this.getDrawLabelLine(43, 1, 0.3, 26, 0, LineType.Solid); // 绔栫嚎2 + this.getDrawLabelLine(68, 1, 0.5, 46, 0, LineType.Solid); // 绔栫嚎3 + + // 缁樺埗鏂囨湰 + this.getDrawLabelText(3,2.5,40,8,"涓ぉ绉戞妧瑁呯娓呭崟",2.5,0,LineModeType.AutoHeight,0,0,1,1,1); + this.getDrawLabelText(2,7,25,8,"鍚堝悓鍙�:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,12,25,8,"闆朵欢鍙�:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,17,25,8,"闆朵欢鎻忚堪:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,22.5,25,8,"鍙戣揣/瑁呯鏁�:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,27.5,25,8,"鐢熶骇鏃ユ湡:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,32.5,25,8,"鐢熶骇鎵瑰彿:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,37.5,25,8,"鍙戣揣鍗曚綅:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + this.getDrawLabelText(2,42.5,25,8,"鏀惰揣鍗曚綅:",2.5,0,LineModeType.AutoHeight,0,0,0,1,1); + + // 濉厖鍙傛暟鍊� + this.getDrawLabelText(11,7,30,8,ht,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(11,12,32,8,lj,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(14,17,30,8,ljms,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(17,22.5,27,8,fh,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(14,27.5,55,8,scdt,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(14,32.7,55,8,scph,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(14,37.5,55,8,fhdw,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + this.getDrawLabelText(14,42.5,55,8,shdw,2.5,0,LineModeType.AutoHeight,0,0,0,0,1); + + // 鐢熸垚鎵撳嵃鏁版嵁 + let imageJsonObj = jcapi.generateLabelJson(); + + // 璁剧疆鎵撳嵃浠诲姟 + jcapi.startJob( + { + totalCount: 1, + density: this.printDensity, + labelType: this.labelType, + printMode: this.printMode, + }, + function (r) { + if (r.code == 0) { + // 鎵撳嵃鏁版嵁 + // 瀛樺偍鍘熷鎵撳嵃璁℃暟鍥炶皟 + const originalPrintCountCallback = + jcapi.didReadPrintCountInfo._callback; + // 涓存椂鎵撳嵃璁℃暟鍥炶皟锛岀敤浜庣‘璁ゆ墦鍗板畬鎴� + const tempPrintCountCallback = (printResult) => { + // 鎭㈠鍘熷鍥炶皟 + jcapi.didReadPrintCountInfo(originalPrintCountCallback); + // 娓呴櫎鎵撳嵃瓒呮椂 + clearTimeout(printTimeout); + // 缁撴潫褰撳墠鎵撳嵃浠诲姟 + // 瑙f瀽Promise琛ㄧず鎵撳嵃瀹屾垚 + resolve(); + }; + // 璁剧疆涓存椂鍥炶皟 + jcapi.didReadPrintCountInfo(tempPrintCountCallback); + + // 娣诲姞鎵撳嵃瓒呮椂澶勭悊 + const printTimeout = setTimeout(() => { + jcapi.didReadPrintCountInfo(originalPrintCountCallback); + reject(new Error("鎵撳嵃瓒呮椂鏈搷搴�")); + }, 20000); + + jcapi.printData( + imageJsonObj, + { + printQuantity: 1, + }, + function (r) { + if (r.code != 0) { + // 鎭㈠鍘熷鍥炶皟 + jcapi.didReadPrintCountInfo(originalPrintCountCallback); + // 缁撴潫褰撳墠鎵撳嵃浠诲姟 + reject(new Error(r.msg || "鎵撳嵃澶辫触")); + } + // 鎵撳嵃鏁版嵁鍙戦�佹垚鍔熷悗绛夊緟鎵撳嵃璁℃暟鍥炶皟纭瀹為檯鎵撳嵃瀹屾垚 + } + ); + } else { + reject(new Error(r.msg || "璁剧疆鎵撳嵃浠诲姟澶辫触")); + } } - }) - } else { - console.log("璁剧疆鎵撳嵃浠诲姟澶辫触") + ); + } catch (error) { + reject(error); } - }) + }); }, tapQuery(item) { - this.maskShow = false + this.maskShow = false; // 杩炴帴鎵撳嵃鏈� let _this = this; - console.log(item) - jcapi.openPrinterByDevice({ - address: item.address, - name: item.name, - deviceType: item.deviceType // 璁惧绫诲瀷锛�0-钃濈墮锛�1-缃戠粶 - }, function (r) { - uni.showToast({ - title: (r.code == 0) ? "杩炴帴鎴愬姛" : "杩炴帴澶辫触", - duration: 2 * 1000 - }) - if (r.code == 0) { - _this.connectedDevice = item - // 缁樻爣绛捐繘琛屾墦鍗� - _this.pritList.forEac(async item => { - await _this.printQrCode(item) - }) + + // 璁剧疆涓鸿繛鎺ヤ腑鐘舵�� + this.connectionStatus = "connecting"; + + jcapi.openPrinterByDevice( + { + address: item.address, + name: item.name, + deviceType: 0, // 璁惧绫诲瀷锛�0-钃濈墮锛�1-缃戠粶 + }, + function (r) { + if (r.code == 0) { + _this.connectedDevice = item; + _this.connectionStatus = "connected"; + uni.showToast({ + title: "杩炴帴鎴愬姛", + duration: 1500, + }); + // 寮�濮嬪鐞嗘墦鍗伴槦鍒� + if (_this.printQueue.length > 0) { + _this.processPrintQueue(); + } + } else { + _this.connectionStatus = "disconnected"; + uni.showToast({ + title: "杩炴帴澶辫触: " + (r.msg || "鏈煡閿欒"), + icon: "none", + duration: 2000, + }); + } } - }) + ); }, //鎵撳嵃鐩稿叧 searchDevice() { - let _this = this - uni.openBluetoothAdapter({ // 纭钃濈墮鏄惁鎵撳紑 + let _this = this; + uni.openBluetoothAdapter({ + // 纭钃濈墮鏄惁鎵撳紑 success(r) { uni.showLoading({ - title: "鎼滅储涓�..." - }) + title: "鎼滅储涓�...", + }); // 鏈巿浜堣摑鐗欑浉鍏虫潈闄愬拰鏈墦寮�鎵嬫満瀹氫綅浼氭悳绱笉鍒拌澶� jcapi.getBluetoothDevices(function (r) { - console.log("device:" + JSON.stringify(r)) + console.log("device:" + JSON.stringify(r)); // 鎼滅储鍒拌澶囧洖璋� - uni.hideLoading() + uni.hideLoading(); + // 濡傛灉涔嬪墠鏈夎繛鎺ョ殑璁惧浣嗕笉鍦ㄦ悳绱㈢粨鏋滀腑锛岃鏄庤澶囧凡鏇存崲 + if ( + _this.connectedDevice && + !r.some((dev) => dev.address === _this.connectedDevice.address) + ) { + _this.connectedDevice = null; + uni.showToast({ + icon: "none", + title: "宸茶繛鎺ョ殑钃濈墮璁惧宸叉洿鎹紝璇烽噸鏂伴�夋嫨", + duration: 2000, + }); + } _this.listDevice = r; - _this.maskShow = true - }) + _this.maskShow = true; + }); }, fail(e) { uni.showModal({ - confirmText: "鎵撳紑钃濈墮澶辫触" - }) - console.log("寮�鍚摑鐗欒澶囧け璐�" + e) - } - }) + title: "鎻愮ず", + content: "鎵撳紑钃濈墮澶辫触锛岃妫�鏌ヨ摑鐗欐槸鍚﹀紑鍚�", + showCancel: false, + }); + console.log("寮�鍚摑鐗欒澶囧け璐�" + e); + }, + }); }, - // 缁樺埗妯嚎 瀹炵嚎 + // 缁樺埗妯嚎 getDrawLabelLine(x, y, width, height, rotate, lineType) { jcapi.drawLabelLine({ x: x, @@ -419,11 +657,25 @@ width: width, height: height, rotate: rotate, - lineType: lineType + lineType: lineType, }); }, // 濉啿鏂囧瓧鏍囬 - getDrawLabelText(x, y, width, height, value, fontSize, rotate, lineMode, lineSpace, letterSpace, textAlignHorizontal, textAlignVertical) { + getDrawLabelText( + x, + y, + width, + height, + value, + fontSize, + rotate, + lineMode, + lineSpace, + letterSpace, + textAlignHorizontal, + textAlignVertical, + bold + ) { jcapi.drawLabelText({ x: x, y: y, @@ -436,34 +688,56 @@ lineSpace: lineSpace, letterSpace: letterSpace, textAlignHorizontal: textAlignHorizontal, - textAlignVertical: textAlignVertical - }) + textAlignVertical: textAlignVertical, + bold: bold, + }); }, - + getConnectionStatusText() { + switch (this.connectionStatus) { + case "connected": + return "钃濈墮宸茶繛鎺�"; + case "connecting": + return "钃濈墮杩炴帴涓�..."; + default: + return "钃濈墮鏈繛鎺�"; + } + }, + getPrintStatusText() { + switch (this.printStatus) { + case "printing": + const total = this.printQueue.length + 1; // 闃熷垪涓墿浣� + 褰撳墠姝e湪鎵撳嵃 + const current = total - this.printQueue.length; + return `鎵撳嵃涓�(${current}/${total})`; + case "error": + return `鎵撳嵃閿欒: ${this.errorMessage}`; + default: + return "灏辩华"; + } + }, //鍒锋柊涓婁竴涓〉闈� refreshLastPage(no) { // 鍛婄煡 A.vue 鏇存柊鏁版嵁 // 鑾峰彇椤甸潰鏍� - let pages = getCurrentPages() + let pages = getCurrentPages(); // 鑾峰彇涓婁竴椤垫爤 - let prevPage = pages[pages.length - 2] + let prevPage = pages[pages.length - 2]; // 瑙﹀彂涓婁竴椤� upData 鍑芥暟(骞舵惡甯﹀弬鏁�) - prevPage.$vm.setNo(no) + prevPage.$vm.setNo(no); // 杩斿洖涓婁竴椤� uni.navigateBack({ - delta: 1 - }) + delta: 1, + }); }, - } + }, }; </script> <style lang="scss"> .finishProductIn-locno-bg { - background-color: #F6F9FF; - background-image: url('~@/static/custom/finishProductIn/locNoBg.png'); + background-color: #f6f9ff; + background-image: url("~@/static/custom/finishProductIn/locNoBg.png"); // background: linear-gradient(180deg,rgba(206,227,254,1),rgba(206,227,254,1) 20%,rgba(206,227,254,0.5) 40%,rgba(206,227,254,0.25) 60%,rgba(206,227,254,0.08) 80%,rgba(206,227,254,0)); padding: 0 20rpx; background-attachment: fixed; @@ -597,4 +871,90 @@ line-height: 36rpx; margin-right: 32rpx; } -</style> + +/* 妯℃�佹鏍峰紡浼樺寲 */ +.u-modal { + --modal-width: 85% !important; + --modal-radius: 16rpx !important; + --modal-bg-color: #ffffff !important; +} + +/* 妯℃�佹鍐呭鍖哄煙 */ +.uni-scroll_box { + height: 500rpx !important; + padding: 20rpx; +} + +/* 璁惧鍒楄〃椤规牱寮� */ +.device-item { + background-color: #f5f9ff; + border-radius: 12rpx; + padding: 20rpx; + margin-bottom: 16rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); +} + +/* 璁惧鍚嶇О鏍峰紡 */ +.device-name { + font-size: 28rpx; + font-weight: 500; + color: #333333; + margin-bottom: 10rpx; + display: flex; + justify-content: space-between; +} + +/* UUID鏂囨湰鏍峰紡 */ +.device-uuid { + font-size: 28rpx; + font-weight: 500; + color: #333333; + margin-bottom: 10rpx; + display: flex; + justify-content: space-between; +} + +/* 妯℃�佹鏍囬 */ +.modal-title { + font-size: 32rpx; + font-weight: bold; + color: #333333; + text-align: center; + margin-bottom: 20rpx; + padding-bottom: 10rpx; + border-bottom: 1rpx solid #eeeeee; +} + +/* 绌虹姸鎬佹彁绀� */ +.empty-tip { + text-align: center; + padding: 100rpx 0; + color: #999999; + font-size: 28rpx; +} + +.status-indicator { + padding: 8rpx 16rpx; + font-size: 24rpx; + text-align: center; + color: #fff; + background-color: #666; + + &.connected { + background-color: #07c160; + } + + &.connecting { + background-color: #ff976a; + } + + &.disconnected { + background-color: #f53f3f; + } + + .print-status { + margin-left: 10rpx; + font-size: 22rpx; + } +} +</style> \ No newline at end of file -- Gitblit v1.9.3