From a80b1ecc6b88e8b117c40d67bca4d4ec7b0aba55 Mon Sep 17 00:00:00 2001 From: memorylkf <312904636@qq.com> Date: Fri, 10 Apr 2026 08:44:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20[=E4=BB=AA=E5=99=A8=E5=AF=B9=E6=8E=A5]?= =?UTF-8?q?=20=E5=A4=A9=E5=B9=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/tpph.js | 84 +++++++++++++++++++++++++++++++++++------------------ src/views/login.vue | 4 +-- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/src/utils/tpph.js b/src/utils/tpph.js index 89c7922..3997381 100644 --- a/src/utils/tpph.js +++ b/src/utils/tpph.js @@ -10,14 +10,22 @@ export async function getBalance(obj) { originalValue: '1000', originalUnit: 'g', - value: '1000', + value: convertUnit('1000', 'g', obj.dw || 'g'), unit: obj.dw || 'g', message: '' } + let yq = obj.yq let dw = obj.dw - let val = {} + let val = { + success: false, + originalValue: '', + originalUnit: '', + value: '', + unit: '', + message: '未获取到天平数据' + } let url = `/tpphurl/api/v1/balance/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N` // let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/balance/value?cmd=${yq.cmd}&format=${yq.format}&comPort=${yq.comPort}&baudRate=${yq.baudRate}&byteSize=${yq.byteSize}&parity=${yq.parity}` await axios @@ -33,15 +41,17 @@ export async function getBalance(obj) { .then((res) => { if (res.status !== 200) { Message.error('获取天平失败') - return - } - let data = res.data - if (data.code !== 200) { - Message.error(data.msg || '获取天平数据失败') - return + val.message = '获取天平失败' + } else { + let data = res.data + if (data.code !== 200) { + Message.error(data.msg || '获取天平数据失败') + val.message = data.msg || '获取天平数据失败' + } else { + val = parseBalanceData(data.data, dw) + debugger + } } - val = parseBalanceData(data.data) - debugger }) debugger return await val @@ -55,7 +65,7 @@ export async function getPh(obj) { } let yq = obj.yq - let val = {} + let val = { success: false, value: '', message: '未获取到PH数据' } let url = `/tpphurl/api/v1/ph/value?cmd=12&format=hex&comPort=COM1&baudRate=9600&byteSize=8&parity=N` // let url = `http://127.0.0.1:${localStorage.getItem('sb_port')}/api/v1/ph/value?cmd=${yq.cmd}&format=${yq.format}&comPort=${yq.comPort}&baudRate=${yq.baudRate}&byteSize=${yq.byteSize}&parity=${yq.parity}` await axios @@ -72,28 +82,30 @@ export async function getPh(obj) { debugger if (res.status !== 200) { Message.error('获取PH失败') - return - } - let data = res.data - if (data.code !== 200) { - Message.error(data.msg || '获取PH数据失败') - return + val.message = '获取PH失败' + } else { + let data = res.data + if (data.code !== 200) { + Message.error(data.msg || '获取PH数据失败') + val.message = data.msg || '获取PH数据失败' + } else { + val = extractPHValue(data.data) + debugger + } } - val = extractPHValue(data.data) - debugger }) debugger return await val } -export function parseBalanceData(rawData, targetUnit = 'g', precision) { +export function parseBalanceData(rawData, unit, precision) { // 初始化返回结果,固定字段结构 const result = { success: false, - value: '', originalValue: '', originalUnit: '', - targetUnit: targetUnit.toLowerCase(), + value: '', + unit: '', message: '' } @@ -157,6 +169,7 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) { // 赋值到结果对象 result.originalValue = originalValue result.originalUnit = originalUnit + result.unit = unit || originalUnit result.message = `【解析成功】匹配到${matchedFormat.desc},提取数值:${originalValue},单位:${originalUnit}` // 7. 数值有效性校验 @@ -167,10 +180,8 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) { } // 8. 单位换算核心逻辑 - const unitToGram = { g: 1, kg: 1000 } - const originalCoeff = unitToGram[result.originalUnit] || 1 - const targetCoeff = unitToGram[result.targetUnit] || 1 - let convertedValue = (num * originalCoeff) / targetCoeff + let convertedValue = + unit === originalUnit ? num : convertUnit(num, originalUnit, unit) // 9. 数值格式化:保留原始精度(仅当传入precision时,按指定位数截取,不四舍五入) if (typeof precision === 'number' && precision >= 0) { @@ -192,10 +203,10 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) { // 11. 优化提示信息 const baseMsg = result.message.replace('【解析成功】', '【成功】') - if (result.originalUnit === result.targetUnit) { - result.message = `${baseMsg} → 最终值:${result.value} ${result.targetUnit}` + if (result.originalUnit === result.unit) { + result.message = `${baseMsg} → 最终值:${result.value} ${result.unit}` } else { - result.message = `${baseMsg} → 换算至${result.targetUnit}:${result.value} ${result.targetUnit}` + result.message = `${baseMsg} → 换算至${result.unit}:${result.value} ${result.unit}` } } catch (error) { result.message = `【系统错误】解析换算失败:${error.message}` @@ -205,6 +216,21 @@ export function parseBalanceData(rawData, targetUnit = 'g', precision) { return result } +export function convertUnit(num, originalUnit, targetUnit) { + // 8. 单位换算核心逻辑 + const unitToGram = { + pg: 1, + ug: 1000, + ng: 1000000, + mg: 1000000000, + g: 1000000000000, + kg: 1000000000000000 + } + const originalCoeff = unitToGram[originalUnit] || 1 + const targetCoeff = unitToGram[targetUnit] || 1 + return (num * originalCoeff) / targetCoeff +} + export function extractPHValue(rawData) { const result = { success: false, diff --git a/src/views/login.vue b/src/views/login.vue index 36fc391..7e56baf 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -150,9 +150,9 @@ export default { }; }, async testGetTpph() { - let x = await getBalance() + let x = await getBalance({yq:{},dw:'kg'}) debugger - let y = await getPh() + let y = await getPh({yq:{}}) debugger }, handleLogin() {