修复重量单位

This commit is contained in:
2026-07-09 11:06:20 +08:00
parent c3bd7960d0
commit 23aed5f512
3 changed files with 78 additions and 75 deletions
+2 -2
View File
@@ -2,8 +2,8 @@
"name" : "危废数据终端", "name" : "危废数据终端",
"appid" : "__UNI__F18DD0A", "appid" : "__UNI__F18DD0A",
"description" : "", "description" : "",
"versionName" : "1.0.6", "versionName" : "1.0.8",
"versionCode" : 106, "versionCode" : 108,
"transformPx" : false, "transformPx" : false,
/* 5+App */ /* 5+App */
"app-plus" : { "app-plus" : {
+67 -61
View File
@@ -124,6 +124,20 @@ export default {
this.form.productionDate = getDateTime() this.form.productionDate = getDateTime()
this.initData() this.initData()
}, },
onShow() {
// 页面显示时静默连接蓝牙秤(未配置或失败不弹窗)
this.connectScaleSilently()
},
mounted() {
// 注册蓝牙秤实时监听回调
scaleService.onWeightChange(this.handleWeightChange)
scaleService.onConnectionChange(this.handleConnectionChange)
},
beforeDestroy() {
// 注销蓝牙秤监听回调
scaleService.offWeightChange(this.handleWeightChange)
scaleService.offConnectionChange(this.handleConnectionChange)
},
onUnload() { onUnload() {
// 退出页面时断开蓝牙打印机和称重设备连接 // 退出页面时断开蓝牙打印机和称重设备连接
this.handleDisconnect() this.handleDisconnect()
@@ -187,14 +201,14 @@ export default {
this.form.handlerName = handler.name this.form.handlerName = handler.name
}, },
/** /**
* 获取重量 * 获取重量(实时监听模式)
* 蓝牙秤获取当前重量并填入表单 * 蓝牙秤连接后会自动推送重量数据,无需发送读取指令。
* *
* 流程: * 流程:
* 1. 检查是否已配置称重设备 → 未配置则引导去设置页 * 1. 检查是否已配置称重设备 → 未配置则引导去设置页
* 2. 检查蓝牙秤连接状态 → 连接则自动连接 * 2. 检查蓝牙秤连接状态 → 连接则提示实时称重中
* 3. 发送 'R' 命令读取重量(5秒超时) * 3. 未连接则调用 autoConnect() 建立连接
* 4. 解析返回数据填入 form.weight * 4. 连接成功后设备通过 notify 主动推送数据,handleWeightChange 自动填入表单
*/ */
async getWeight() { async getWeight() {
if (!this.scaleDeviceId || !this.scaleServiceId || !this.scaleCharacteristicId) { if (!this.scaleDeviceId || !this.scaleServiceId || !this.scaleCharacteristicId) {
@@ -210,62 +224,56 @@ export default {
return; return;
} }
uni.showToast({ title: '正在获取重量...', icon: 'none' }); // 已连接状态:无需重复连接,重量通过 notify 实时推送
if (scaleService.isConnected && this.scaleConnected) {
uni.showToast({ title: '已开启实时称重', icon: 'none' });
return;
}
uni.showToast({ title: '正在连接称重设备...', icon: 'none' });
try { try {
if (!scaleService.isConnected || !this.scaleConnected) { const success = await scaleService.autoConnect();
await scaleService.autoConnect(); this.scaleConnected = success;
this.scaleConnected = true; uni.showToast({ title: success ? '已连接,实时称重中' : '连接失败', icon: success ? 'success' : 'none' });
}
// ============================================================
// Step 3: 发送读取命令 'R' (0x52),等待设备返回数据
// readWeight() 内部流程:
// - 向 WriteCharacteristic 写入 0x52
// - 启动 5 秒超时定时器
// - 等待 NotifyCharacteristic 收到设备响应
// - 调用 _parseCustom() 解析返回数据
//
// 【调试】如果解析失败(value=null),会显示原始HEX/ASCII数据,
// 你可以根据实际数据修改 _parseCustom() 中的协议解析逻辑
// ============================================================
const result = await scaleService.readWeight();
if (result.value !== null && !isNaN(result.value)) {
// 解析成功:将重量值填入表单
this.form.weight = String(result.value);
uni.showToast({ title: `重量: ${result.value} ${result.unit}`, icon: 'success' });
} else {
// 解析失败:显示原始数据便于调试
console.warn('【蓝牙秤】原始返回数据:', result);
uni.showModal({
title: '无法解析重量',
content: `原始数据:\nHEX: ${result.rawHex || '-'}\nASCII: ${result.rawAscii || '-'}\n\n请检查设备协议格式`,
showCancel: false
});
}
} catch (error) { } catch (error) {
console.error('【蓝牙秤】获取重量失败:', error); console.error('【蓝牙秤】连接失败:', error);
this.scaleConnected = false;
// 提取错误信息(兼容 Error 对象和 uni-app 错误对象) uni.showToast({ title: '连接失败', icon: 'none' });
const errMsg = error.message || error.errMsg || JSON.stringify(error);
// 根据错误类型给出不同提示
let toastMsg = '获取重量失败';
if (errMsg.includes('未配置')) {
toastMsg = '请先配置称重设备';
} else if (errMsg.includes('未连接') || errMsg.includes('连接失败') || errMsg.includes('already connect')) {
toastMsg = '蓝牙连接失败,请检查设备是否开机';
} else if (errMsg.includes('超时') || errMsg.includes('time out')) {
toastMsg = '连接超时,请检查蓝牙设备';
} else if (errMsg.includes('invalid data')) {
toastMsg = '数据格式错误';
} }
},
uni.showToast({ title: toastMsg, icon: 'none', duration: 2000 }); /**
* 静默连接蓝牙秤(未配置或失败不弹窗)
* 在 onShow 时调用,用于页面切回时自动恢复连接
*/
async connectScaleSilently() {
if (!this.scaleDeviceId || !this.scaleServiceId || !this.scaleCharacteristicId) return;
if (scaleService.isConnected && this.scaleConnected) return;
try {
const success = await scaleService.autoConnect();
this.scaleConnected = success;
} catch (e) {
console.warn('【蓝牙秤】静默连接失败:', e);
} }
}, },
/**
* 蓝牙秤实时重量回调
* 设备通过 notify 主动推送数据时触发,自动填入表单
*/
handleWeightChange(weight) {
if (weight && weight.value !== null && !isNaN(weight.value)) {
this.form.weight = String(weight.value);
}
},
/**
* 蓝牙秤连接状态变更回调
*/
handleConnectionChange(connected) {
this.scaleConnected = connected;
},
/** /**
* 危废类型选择变更 * 危废类型选择变更
* @param {Object} e - picker change 事件对象 * @param {Object} e - picker change 事件对象
@@ -321,15 +329,15 @@ export default {
tid: this.form.hwTypeId, tid: this.form.hwTypeId,
time: getDateTime() time: getDateTime()
} }
if (this.hwInfo.unit == '吨') {
submitData.weight = submitData.weight / 1000
}
console.log('提交数据:', submitData) console.log('提交数据:', submitData)
// uni.showLoading({ title: '提交中...' })
api.hwGenerate({ ...submitData }).then(res => { api.hwGenerate({ ...submitData }).then(res => {
console.log('hwGenerate res', res) console.log('hwGenerate res', res)
// "flow_no": "019e5ceb-fc23-70a1-b0e4-06ed6bc7d951",
// "digital_id": "12510100580027911690003949202605250008",
// "label_qrcode": "https://www.cswm.org.cn/qr/?code=7G6MOYELnFHZfF1Y0F8e6h4LCHuJYm7dR2hXRJkeKK7UoS8KYXm5UyRKUnh430z2O&type=WFBQ",
// "produce_ledger_no": "CS20260525000008"
if (res.code == 1000) { if (res.code == 1000) {
uni.showToast({ title: '登记成功', icon: 'success' }) uni.showToast({ title: '登记成功', icon: 'success' })
@@ -356,8 +364,6 @@ export default {
this.currentPrintData = printData this.currentPrintData = printData
this.doPrint() this.doPrint()
} }
}).finally(() => {
// uni.hideLoading()
}) })
}, },
+4 -7
View File
@@ -99,13 +99,10 @@ export default {
// 断开打印机连接 // 断开打印机连接
async disconnectPrinter({ commit, dispatch }) { async disconnectPrinter({ commit, dispatch }) {
try { try {
const config = { commit('SET_PRINTER_CONFIG', {
connected: false, connected: false // ✅ 只更新连接状态
deviceId: '', });
deviceName: '', await dispatch('savePrinterConfig');
lastUpdated: new Date().toISOString()
};
await dispatch('savePrinterConfig', config);
return true; return true;
} catch (error) { } catch (error) {
console.error('断开打印机失败:', error); console.error('断开打印机失败:', error);