diff --git a/src/utils/mqttClient.js b/src/utils/mqttClient.js index 2240faf..e80ea31 100644 --- a/src/utils/mqttClient.js +++ b/src/utils/mqttClient.js @@ -65,9 +65,21 @@ export const useMqtt = () => { } const publish = (topic, message) => { - if (client.value && connected.value) { - client.value.publish(topic, message) - } + return new Promise((resolve, reject) => { + if (client.value && connected.value) { + client.value.publish(topic, message, { qos: 1 }, (error) => { + if (error) { + console.error('发送消息失败:', error) + reject(error) + } else { + console.log('发送消息成功:', topic) + resolve(true) + } + }) + } else { + reject(new Error('MQTT 客户端未连接')) + } + }) } const disconnect = () => { diff --git a/src/views/equipment/common/AddMonitorData.vue b/src/views/equipment/common/AddMonitorData.vue index e41a014..d98b85f 100644 --- a/src/views/equipment/common/AddMonitorData.vue +++ b/src/views/equipment/common/AddMonitorData.vue @@ -32,6 +32,10 @@ const options = [ value: 'conductorDiameter', label: '导体直径', children: [ + { + value: 'conductorDiameter', + label: '导体直径' + }, { value: 'conductorDiameterX', label: '导体直径X' @@ -48,7 +52,25 @@ const options = [ }, { value: 'hotOuterDiameter', - label: '热外径' + label: '热外径', + children: [ + { + value: 'hotOuterDiameter', + label: '热外径' + }, + { + value: 'hotOuterDiameterX', + label: '热外径X' + }, + { + value: 'hotOuterDiameterY', + label: '热外径Y' + }, + { + value: 'hotOuterDiameterOval', + label: '热外径椭圆度' + } + ] }, { value: 'coldOuterDiameter', @@ -56,19 +78,107 @@ const options = [ }, { value: 'totalThickness', - label: '总厚度' + label: '总厚度', + children: [ + { + value: 'totalThickness', + label: '总厚度' + }, + { + value: 'totalThicknessMin', + label: '总厚度最小厚度' + }, + { + value: 'totalThickness', + label: '总厚度偏心' + }, + { + value: 'totalThicknessOval', + label: '总厚度偏心度' + }, + { + value: 'totalThicknessMax', + label: '总厚度同心度' + } + ] }, { value: 'innerShieldThickness', - label: '内屏层厚度' + label: '内屏层厚度', + children: [ + { + value: 'innerShieldThickness', + label: '内屏层厚度' + }, + { + value: 'innerShieldThicknessMin', + label: '内屏层最小厚度' + }, + { + value: 'innerShieldThicknessMax', + label: '内屏层偏心' + }, + { + value: 'innerShieldThicknessOval', + label: '内屏层同心度' + }, + { + value: 'innerShieldThicknessMax', + label: '内屏层偏心度' + } + ] }, { value: 'insulationThickness', - label: '绝缘层厚度' + label: '绝缘层厚度', + children: [ + { + value: 'insulationThickness', + label: '绝缘层厚度' + }, + { + value: 'insulationThicknessMin', + label: '绝缘层最小厚度' + }, + { + value: 'insulationThicknessMax', + label: '绝缘层偏心' + }, + { + value: 'insulationThicknessOval', + label: '绝缘层同心度' + }, + { + value: 'insulationThicknessMax', + label: '绝缘层偏心度' + } + ] }, { value: 'outerShieldThickness', - label: '外屏层厚度' + label: '外屏层厚度', + children: [ + { + value: 'outerShieldThickness', + label: '外屏层厚度' + }, + { + value: 'outerShieldThicknessMin', + label: '外屏层最小厚度' + }, + { + value: 'outerShieldThicknessMax', + label: '外屏层偏心' + }, + { + value: 'outerShieldThicknessOval', + label: '外屏层同心度' + }, + { + value: 'outerShieldThicknessMax', + label: '外屏层偏心度' + } + ] }, { value: 'productionInfo', diff --git a/src/views/equipment/common/CircleDetectionChart.vue b/src/views/equipment/common/CircleDetectionChart.vue index c464db5..3456401 100644 --- a/src/views/equipment/common/CircleDetectionChart.vue +++ b/src/views/equipment/common/CircleDetectionChart.vue @@ -70,13 +70,47 @@ const drawCircles = () => { ctx.fillStyle = fillColor ctx.fill() } + // for (let i = 0; i < 3; i++) { + // // 绘制45-90度红色扇形 + // ctx.beginPath() + // ctx.arc(centerX, centerY, radii[i], Math.PI / 4, Math.PI / 2) + // ctx.arc(centerX, centerY, radii[i + 1], Math.PI / 2, Math.PI / 4, true) + // ctx.closePath() + // + // if ((props.selectedLayer === 'inner' && i === 0) || + // (props.selectedLayer === 'middle' && i === 1) || + // (props.selectedLayer === 'outer' && i === 2)) { + // ctx.fillStyle = '#FF0000' + // } else { + // ctx.fillStyle = '#F5F7FA' + // } + // ctx.fill() + // + // // 绘制其余部分为蓝色 + // ctx.beginPath() + // ctx.arc(centerX, centerY, radii[i], 0, Math.PI / 4) + // ctx.arc(centerX, centerY, radii[i + 1], Math.PI / 4, 0, true) + // ctx.arc(centerX, centerY, radii[i], Math.PI / 2, Math.PI * 2) + // ctx.arc(centerX, centerY, radii[i + 1], Math.PI * 2, Math.PI / 2, true) + // ctx.closePath() + // + // if ((props.selectedLayer === 'inner' && i === 0) || + // (props.selectedLayer === 'middle' && i === 1) || + // (props.selectedLayer === 'outer' && i === 2)) { + // ctx.fillStyle = '#1D4389' + // } else { + // ctx.fillStyle = '#F5F7FA' + // } + // ctx.fill() + // } + // // // 绘制第一个圆环(固定位置) - ctx.beginPath() - ctx.arc(centerX, centerY, radii[0], 0, 2 * Math.PI) - ctx.arc(centerX, centerY, radii[1], 0, 2 * Math.PI, true) - ctx.closePath() - ctx.fillStyle = props.selectedLayer === 'inner' ? '#1D4389' : '#F5F7FA' - ctx.fill() + // ctx.beginPath() + // ctx.arc(centerX, centerY, radii[0], 0, 2 * Math.PI) + // ctx.arc(centerX, centerY, radii[1], 0, 2 * Math.PI, true) + // ctx.closePath() + // ctx.fillStyle = props.selectedLayer === 'inner' ? '#1D4389' : '#F5F7FA' + // ctx.fill() // 绘制第二个圆环(偏心位置) // console.log(centerX, centerY, radii[0], radii[1], radii[2]) // angles.forEach((angle, index) => { diff --git a/src/views/equipment/common/DeviceStatus.vue b/src/views/equipment/common/DeviceStatus.vue index 13b3e19..0ee4499 100644 --- a/src/views/equipment/common/DeviceStatus.vue +++ b/src/views/equipment/common/DeviceStatus.vue @@ -2,28 +2,30 @@
- + - + @@ -31,33 +33,43 @@