| | |
| | | <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="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="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> |
| | |
| | | </view> |
| | | </u-cell-group> |
| | | <view class="loadmore" @click="getmoreList()"> |
| | | <u-loadmore :status="status" :load-text="loadText" @loadmore="getmoreList()" /> |
| | | <u-loadmore |
| | | :status="status" |
| | | :load-text="loadText" |
| | | @loadmore="getmoreList()" |
| | | /> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | <u-toast ref="uToast" /> |
| | | <u-modal v-model="maskShow" title="" |
| | | :show-confirm-button="false" > |
| | | <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"> |
| | | <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 |
| | | v-for="(item, index) in listDevice" |
| | | :key="index" |
| | | @click="tapQuery(item)" |
| | | class="device-item" |
| | | > |
| | | <view class="device-name"> |
| | | <text>名称:</text> |
| | | <text>{{ item.name || '未知设备' }}</text> |
| | | <text>{{ item.name || "未知设备" }}</text> |
| | | </view> |
| | | <view class="device-uuid"> |
| | | <text>UUID:</text> |
| | | <text>{{ item.address || '无地址' }}</text> |
| | | <text>{{ item.address || "无地址" }}</text> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | </u-modal> |
| | | <!-- </scroll-view> |
| | | </view> |
| | | </u-modal> --> |
| | | <!-- 连接和打印状态指示器 --> |
| | | <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> |
| | | </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"); |
| | | |
| | | // 二维码类型 |
| | |
| | | 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: '', |
| | | keywords: "", |
| | | list: [], |
| | | total: 0, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | status: 'loading', |
| | | status: "loading", |
| | | loadText: { |
| | | loadmore: "加载更多...", |
| | | loading: "努力加载中...", |
| | |
| | | // 1:热敏 |
| | | // 2:热转印 |
| | | connectedDevice: null, // 已连接的打印机 |
| | | connectionStatus: 'disconnected', // 连接状态: disconnected, connecting, connected |
| | | printStatus: 'idle', // 打印状态: idle, printing, error |
| | | errorMessage: '' // 错误信息 |
| | | connectionStatus: "disconnected", // 连接状态: disconnected, connecting, connected |
| | | printStatus: "idle", // 打印状态: idle, printing, error |
| | | errorMessage: "", // 错误信息 |
| | | }; |
| | | }, |
| | | onLoad() { |
| | | this.getlist() |
| | | this.getlist(); |
| | | // 初始化SDK |
| | | jcapi.initSDK() |
| | | jcapi.initSDK(); |
| | | // 监听页码回调 |
| | | jcapi.didReadPrintCountInfo(function(r) { |
| | | console.log(r) |
| | | }) |
| | | console.log(r); |
| | | }); |
| | | |
| | | // 监听错误回调 |
| | | jcapi.didReadPrintErrorInfo((r) => { |
| | | console.log(r) |
| | | console.log(r); |
| | | if (r.code == 23) { |
| | | // 打印机断开连接 |
| | | this.connectedDevice = null |
| | | this.connectedDevice = null; |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '打印机连接已断开,请重新连接', |
| | | duration: 2 * 1000 |
| | | }) |
| | | icon: "none", |
| | | title: "打印机连接已断开,请重新连接", |
| | | duration: 2 * 1000, |
| | | }); |
| | | } else { |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | icon: "none", |
| | | title: JSON.stringify(r), |
| | | duration: 2 * 1000 |
| | | }) |
| | | duration: 2 * 1000, |
| | | }); |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | methods: { |
| | | getmoreList() { |
| | |
| | | this.$u.api.workReporting |
| | | .getWorkshopOrder({ |
| | | current: this.pageNum, |
| | | size: this.pageSize |
| | | size: this.pageSize, |
| | | }) |
| | | .then((res) => { |
| | | this.list = res.data.records; |
| | |
| | | }, |
| | | // 检查蓝牙连接状态 |
| | | async checkBluetoothConnection() { |
| | | console.log('disconnected1111111111111') |
| | | if (!this.connectedDevice) { |
| | | this.connectionStatus = 'disconnected'; |
| | | this.connectionStatus = "disconnected"; |
| | | return false; |
| | | } |
| | | console.log('disconnected2222222222') |
| | | |
| | | // 设置为连接中状态 |
| | | this.connectionStatus = 'connecting'; |
| | | console.log('disconnected33333333333') |
| | | this.connectionStatus = "connecting"; |
| | | |
| | | // 增强连接状态检测 |
| | | return new Promise(resolve => { |
| | | return new Promise((resolve) => { |
| | | // 简化连接状态检测,直接使用已记录的连接状态 |
| | | if (this.connectedDevice) { |
| | | this.connectionStatus = 'connected'; |
| | | this.connectionStatus = "connected"; |
| | | resolve(true); |
| | | } else { |
| | | this.connectionStatus = 'disconnected'; |
| | | this.connectionStatus = "disconnected"; |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '打印机未连接,请先连接', |
| | | duration: 2000 |
| | | icon: "none", |
| | | title: "打印机未连接,请先连接", |
| | | duration: 2000, |
| | | }); |
| | | resolve(false); |
| | | } |
| | |
| | | // 处理打印队列 |
| | | async processPrintQueue() { |
| | | while (this.printQueue.length > 0) { |
| | | console.log('111111111111111', this.printQueue.length) |
| | | |
| | | // 检查连接状态 |
| | | console.log('12222222222222222') |
| | | const isConnected = await this.checkBluetoothConnection(); |
| | | console.log('isConnected',isConnected) |
| | | if (!isConnected) { |
| | | // 如果未连接,显示蓝牙连接对话框 |
| | | this.searchDevice(); |
| | |
| | | } |
| | | |
| | | this.printing = true; |
| | | this.printStatus = 'printing'; |
| | | this.printStatus = "printing"; |
| | | |
| | | // 取出队列中的第一个任务 |
| | | const item = this.printQueue.shift(); |
| | | console.log('打印的任务',item) |
| | | |
| | | try { |
| | | // 执行打印 |
| | |
| | | |
| | | // 打印成功后继续处理下一个 |
| | | uni.showToast({ |
| | | title: '打印成功', |
| | | icon: 'success', |
| | | duration: 1000 |
| | | title: "打印成功", |
| | | icon: "success", |
| | | duration: 1000, |
| | | }); |
| | | |
| | | // 短暂延迟,避免打印机缓存溢出 |
| | | await new Promise(resolve => setTimeout(resolve, 1000)); |
| | | await new Promise((resolve) => setTimeout(resolve, 1000)); |
| | | } catch (error) { |
| | | console.error('打印出错:', error); |
| | | this.printStatus = 'error'; |
| | | this.errorMessage = error.message || '打印时发生未知错误'; |
| | | console.error("打印出错:", error); |
| | | this.printStatus = "error"; |
| | | this.errorMessage = error.message || "打印时发生未知错误"; |
| | | this.printing = false; |
| | | |
| | | // 记录失败的任务,不重新添加到队列 |
| | |
| | | |
| | | uni.showToast({ |
| | | title: `打印失败: ${this.errorMessage}`, |
| | | icon: 'none', |
| | | duration: 2000 |
| | | icon: "none", |
| | | duration: 2000, |
| | | }); |
| | | // 继续处理下一个任务 |
| | | continue; |
| | |
| | | } |
| | | |
| | | this.printing = false; |
| | | this.printStatus = 'idle'; |
| | | this.printStatus = "idle"; |
| | | }, |
| | | // 打印单个信息 |
| | | selectNo(item) { |
| | | let that = this |
| | | let that = this; |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '是否打印装箱单?', |
| | | title: "提示", |
| | | content: "是否打印装箱单?", |
| | | showCancel: true, |
| | | success: async function(res) { |
| | | if (res.confirm) { |
| | | // 添加到打印队列 |
| | | that.addToPrintQueue(item); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | // 打印全部信息 |
| | | goPrintAll() { |
| | | let that = this |
| | | let that = this; |
| | | uni.showModal({ |
| | | title: '提示', |
| | | title: "提示", |
| | | content: `是否打印全部${that.list.length}条装箱单?`, |
| | | showCancel: true, |
| | | success: async function(res) { |
| | |
| | | // 添加到打印队列 |
| | | that.addToPrintQueue([...that.list]); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }, |
| | | moveHandle() { |
| | | |
| | | }, |
| | | maskclose() { |
| | | |
| | | }, |
| | | moveHandle() {}, |
| | | maskclose() {}, |
| | | //打印二维码 |
| | | async printQrCode(item) { |
| | | return new Promise(async (resolve, reject) => { |
| | | console.log('item de shuju ', item) |
| | | // const params = { |
| | | // rwMatlBindId: item.id |
| | | // }; |
| | | const params = { |
| | | rwMatlBindId: item.id |
| | | }; |
| | | try { |
| | | let res = { |
| | | data: { |
| | | ht:'1', |
| | | lj:'1', |
| | | ljms:'1', |
| | | fh:'1', |
| | | scdt:'1', |
| | | scph:'1', |
| | | fhdw:'1', |
| | | shdw:'1', |
| | | }} |
| | | // let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params) |
| | | let res = await this.$u.api.dailyPaper.zongjianLabelInfo(params) |
| | | if (!res.data) { |
| | | this.$refs.uToast.show({ |
| | | title: '未查询到该标签信息!', |
| | | type: 'warning ' |
| | | }) |
| | | reject(new Error('未查询到该标签信息')); |
| | | return |
| | | title: "未查询到该标签信息!", |
| | | type: "warning ", |
| | | }); |
| | | reject(new Error("未查询到该标签信息")); |
| | | return; |
| | | } |
| | | |
| | | // 从API响应中提取所需数据 |
| | | const { |
| | | ht, |
| | | lj, |
| | | ljms, |
| | | fh, |
| | | scdt, |
| | | scph, |
| | | fhdw, |
| | | shdw |
| | | } = res.data |
| | | const { ht, lj, ljms, fh, scdt, scph, fhdw, shdw } = res.data; |
| | | |
| | | // 初始化画板 |
| | | jcapi.initDrawingBoard({ |
| | | width: 70, |
| | | height: 49, |
| | | rotate: 90 |
| | | rotate: 90, |
| | | }); |
| | | |
| | | // 绘制二维码 |
| | | const qrContent = |
| | | `ht:${ht}\nlj:${lj}\nljms:${ljms}\nfh:${fh}\nscdt:${scdt}\nscph:${scph}\nfhdw:${fhdw}\nshdw:${shdw}`; |
| | | 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, |
| | |
| | | }); |
| | | |
| | | // 绘制横线 |
| | | 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) |
| | | 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); |
| | | |
| | | //绘制竖线 |
| | | 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.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(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) |
| | | 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() |
| | | console.log('打印的数据',imageJsonObj) |
| | | let imageJsonObj = jcapi.generateLabelJson(); |
| | | |
| | | // 设置打印任务 |
| | | jcapi.startJob({ |
| | | jcapi.startJob( |
| | | { |
| | | totalCount: 1, |
| | | density: this.printDensity, |
| | | labelType: this.labelType, |
| | | printMode: this.printMode, |
| | | }, function(r) { |
| | | }, |
| | | function (r) { |
| | | if (r.code == 0) { |
| | | // 打印数据 |
| | | // 存储原始打印计数回调 |
| | | const originalPrintCountCallback = jcapi.didReadPrintCountInfo._callback; |
| | | const originalPrintCountCallback = |
| | | jcapi.didReadPrintCountInfo._callback; |
| | | // 临时打印计数回调,用于确认打印完成 |
| | | const tempPrintCountCallback = (printResult) => { |
| | | console.log("打印计数回调:", printResult); |
| | | // 恢复原始回调 |
| | | jcapi.didReadPrintCountInfo(originalPrintCountCallback); |
| | | // 清除打印超时 |
| | | clearTimeout(printTimeout); |
| | | // 结束当前打印任务 |
| | | // 解析Promise表示打印完成 |
| | | resolve(); |
| | |
| | | // 添加打印超时处理 |
| | | const printTimeout = setTimeout(() => { |
| | | jcapi.didReadPrintCountInfo(originalPrintCountCallback); |
| | | reject(new Error('打印超时未响应')); |
| | | }, 10000); |
| | | reject(new Error("打印超时未响应")); |
| | | }, 20000); |
| | | |
| | | jcapi.printData(imageJsonObj, { |
| | | "printQuantity": 1, |
| | | }, function(r) { |
| | | jcapi.printData( |
| | | imageJsonObj, |
| | | { |
| | | printQuantity: 1, |
| | | }, |
| | | function (r) { |
| | | if (r.code != 0) { |
| | | console.log("打印失败", r); |
| | | // 恢复原始回调 |
| | | jcapi.didReadPrintCountInfo(originalPrintCountCallback); |
| | | // 结束当前打印任务 |
| | | reject(new Error(r.msg || '打印失败')); |
| | | reject(new Error(r.msg || "打印失败")); |
| | | } |
| | | // ��印数据发送成功后等待打印计数回调确认实际打印完成 |
| | | |
| | | }) |
| | | // 打印数据发送成功后等待打印计数回调确认实际打印完成 |
| | | } |
| | | ); |
| | | } else { |
| | | console.log("设置打印任务失败", r) |
| | | reject(new Error(r.msg || '设置打印任务失败')); |
| | | reject(new Error(r.msg || "设置打印任务失败")); |
| | | } |
| | | }) |
| | | } |
| | | ); |
| | | } catch (error) { |
| | | console.log(error) |
| | | reject(error); |
| | | } |
| | | }); |
| | | }, |
| | | tapQuery(item) { |
| | | this.maskShow = false |
| | | this.maskShow = false; |
| | | // 连接打印机 |
| | | let _this = this; |
| | | console.log(item) |
| | | |
| | | // 设置为连接中状态 |
| | | this.connectionStatus = 'connecting'; |
| | | this.connectionStatus = "connecting"; |
| | | |
| | | jcapi.openPrinterByDevice({ |
| | | jcapi.openPrinterByDevice( |
| | | { |
| | | address: item.address, |
| | | name: item.name, |
| | | deviceType: 0 // 设备类型:0-蓝牙,1-网络 |
| | | }, function(r) { |
| | | deviceType: 0, // 设备类型:0-蓝牙,1-网络 |
| | | }, |
| | | function (r) { |
| | | if (r.code == 0) { |
| | | _this.connectedDevice = item |
| | | _this.connectionStatus = 'connected'; |
| | | _this.connectedDevice = item; |
| | | _this.connectionStatus = "connected"; |
| | | uni.showToast({ |
| | | title: "连接成功", |
| | | duration: 1500 |
| | | }) |
| | | duration: 1500, |
| | | }); |
| | | // 开始处理打印队列 |
| | | console.log('打印队列',_this.printQueue) |
| | | if (_this.printQueue.length > 0) { |
| | | _this.processPrintQueue(); |
| | | } |
| | | } else { |
| | | _this.connectionStatus = 'disconnected'; |
| | | _this.connectionStatus = "disconnected"; |
| | | uni.showToast({ |
| | | title: "连接失败: " + (r.msg || '未知错误'), |
| | | icon: 'none', |
| | | duration: 2000 |
| | | }) |
| | | 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)) { |
| | | if ( |
| | | _this.connectedDevice && |
| | | !r.some((dev) => dev.address === _this.connectedDevice.address) |
| | | ) { |
| | | _this.connectedDevice = null; |
| | | uni.showToast({ |
| | | icon: 'none', |
| | | title: '已连接的蓝牙设备已更换,请重新选择', |
| | | duration: 2000 |
| | | icon: "none", |
| | | title: "已连接的蓝牙设备已更换,请重新选择", |
| | | duration: 2000, |
| | | }); |
| | | } |
| | | _this.listDevice = r; |
| | | _this.maskShow = true |
| | | }) |
| | | _this.maskShow = true; |
| | | }); |
| | | }, |
| | | fail(e) { |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '打开蓝牙失败,请检查蓝牙是否开启', |
| | | showCancel: false |
| | | }) |
| | | console.log("开启蓝牙设备失败" + e) |
| | | } |
| | | }) |
| | | title: "提示", |
| | | content: "打开蓝牙失败,请检查蓝牙是否开启", |
| | | showCancel: false, |
| | | }); |
| | | console.log("开启蓝牙设备失败" + e); |
| | | }, |
| | | // 绘制横线 ���线 |
| | | }); |
| | | }, |
| | | // 绘制横线 |
| | | getDrawLabelLine(x, y, width, height, rotate, lineType) { |
| | | jcapi.drawLabelLine({ |
| | | x: x, |
| | |
| | | width: width, |
| | | height: height, |
| | | rotate: rotate, |
| | | lineType: lineType |
| | | lineType: lineType, |
| | | }); |
| | | }, |
| | | // 填冲文字标题 |
| | | getDrawLabelText(x, y, width, height, value, fontSize, rotate, lineMode, lineSpace, letterSpace, |
| | | textAlignHorizontal, textAlignVertical, bold) { |
| | | |
| | | getDrawLabelText( |
| | | x, |
| | | y, |
| | | width, |
| | | height, |
| | | value, |
| | | fontSize, |
| | | rotate, |
| | | lineMode, |
| | | lineSpace, |
| | | letterSpace, |
| | | textAlignHorizontal, |
| | | textAlignVertical, |
| | | bold |
| | | ) { |
| | | jcapi.drawLabelText({ |
| | | x: x, |
| | | y: y, |
| | |
| | | letterSpace: letterSpace, |
| | | textAlignHorizontal: textAlignHorizontal, |
| | | textAlignVertical: textAlignVertical, |
| | | bold: bold |
| | | }) |
| | | bold: bold, |
| | | }); |
| | | }, |
| | | |
| | | //刷新上一个页面 |
| | | getConnectionStatusText() { |
| | | switch(this.connectionStatus) { |
| | | case 'connected': |
| | | return '蓝牙已连接'; |
| | | case 'connecting': |
| | | return '蓝牙连接中...'; |
| | | case "connected": |
| | | return "蓝牙已连接"; |
| | | case "connecting": |
| | | return "蓝牙连接中..."; |
| | | default: |
| | | return '蓝牙未连接'; |
| | | return "蓝牙未连接"; |
| | | } |
| | | }, |
| | | getPrintStatusText() { |
| | | switch(this.printStatus) { |
| | | case 'printing': |
| | | case "printing": |
| | | const total = this.printQueue.length + 1; // 队列中剩余 + 当前正在打印 |
| | | const current = total - this.printQueue.length; |
| | | return `打印中(${current}/${total})`; |
| | | case 'error': |
| | | case "error": |
| | | return `打印错误: ${this.errorMessage}`; |
| | | default: |
| | | return '就绪'; |
| | | 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; |
| | |
| | | |
| | | /* UUID文本样式 */ |
| | | .device-uuid { |
| | | font-size: 24rpx; |
| | | color: #666666; |
| | | word-break: break-all; |
| | | font-size: 28rpx; |
| | | font-weight: 500; |
| | | color: #333333; |
| | | margin-bottom: 10rpx; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | /* 模态框标题 */ |