修复了传感器管理页面的显示问题

This commit is contained in:
wzclm 2025-03-11 13:49:08 +08:00
parent 61dd6f86a9
commit 3d00b93830

View File

@ -78,21 +78,21 @@ const handleDelete = async (id) => {
// //
const getStatusStyle = (status) => { const getStatusStyle = (status) => {
if (!status) return { color: '#909399', text: '未知' } const statusMap = {
return {
1: {
color: '#67C23A',
text: '在线'
},
0: { 0: {
color: '#909399', color: '#909399',
text: '离线' text: '离线'
}, },
1: {
color: '#67C23A',
text: '在线'
},
2: { 2: {
color: '#F56C6C', color: '#F56C6C',
text: '异常' text: '异常'
} }
}[status.code] || { color: '#909399', text: status.text || '未知' } }
return statusMap[status] || { color: '#909399', text: '未知' }
} }
// //
@ -116,6 +116,41 @@ const formatValue = (value, unit = '') => {
return `${value}${unit}` return `${value}${unit}`
} }
//
const getSensorTypeName = (type, name) => {
if (name.includes('CS616')) return '土壤传感器'
if (name.includes('RK500-13')) return '水质传感器'
return '环境传感器'
}
//
const getSensorDataItems = (sensor) => {
if (sensor.device_name.includes('CS616')) {
//
return [
{ label: '温度', value: sensor.data?.temp, unit: '°C' },
{ label: '湿度', value: sensor.data?.humi, unit: '%' },
{ label: '土壤湿度', value: sensor.data?.soil_adc, unit: '' },
{ label: '光照强度', value: sensor.data?.light_adc, unit: '' }
]
} else if (sensor.device_name.includes('RK500-13')) {
//
return [
{ label: '温度', value: sensor.data?.temp, unit: '°C' },
{ label: '湿度', value: sensor.data?.humi, unit: '%' },
{ label: '水质电导率', value: sensor.data?.soil_adc, unit: 'μS/cm' },
{ label: '光照强度', value: sensor.data?.light_adc, unit: '' }
]
}
//
return [
{ label: '温度', value: sensor.data?.temp, unit: '°C' },
{ label: '湿度', value: sensor.data?.humi, unit: '%' },
{ label: '光照强度', value: sensor.data?.light_adc, unit: '' },
{ label: '传感器值', value: sensor.data?.soil_adc, unit: '' }
]
}
// //
onMounted(() => { onMounted(() => {
getSensorList() getSensorList()
@ -137,18 +172,18 @@ onMounted(() => {
v-for="sensor in sensorList" v-for="sensor in sensorList"
:key="sensor.id" :key="sensor.id"
class="sensor-card" class="sensor-card"
:class="{ 'offline': sensor.status?.code === 0 }" :class="{ 'offline': sensor.status === 0 }"
> >
<div class="card-header"> <div class="card-header">
<div class="sensor-info"> <div class="sensor-info">
<el-icon :class="sensor.device_type"> <el-icon :class="sensor.device_type">
<component :is="getTypeInfo(sensor.device_type).icon" /> <Monitor />
</el-icon> </el-icon>
<span class="sensor-name">{{ sensor.device_name }}</span> <span class="sensor-name">{{ sensor.device_name }}</span>
</div> </div>
<el-tag <el-tag
size="small" size="small"
:type="sensor.status?.code === 1 ? 'success' : sensor.status?.code === 2 ? 'danger' : 'info'" :type="sensor.status === 1 ? 'success' : sensor.status === 2 ? 'danger' : 'info'"
> >
{{ getStatusStyle(sensor.status).text }} {{ getStatusStyle(sensor.status).text }}
</el-tag> </el-tag>
@ -159,6 +194,10 @@ onMounted(() => {
<span class="label">设备编号</span> <span class="label">设备编号</span>
<span class="value">{{ sensor.device_code }}</span> <span class="value">{{ sensor.device_code }}</span>
</div> </div>
<div class="info-item">
<span class="label">设备类型</span>
<span class="value">{{ getSensorTypeName(sensor.device_type, sensor.device_name) }}</span>
</div>
<div class="info-item"> <div class="info-item">
<span class="label">安装位置</span> <span class="label">安装位置</span>
<span class="value">{{ sensor.install_location || '暂无数据' }}</span> <span class="value">{{ sensor.install_location || '暂无数据' }}</span>
@ -166,28 +205,20 @@ onMounted(() => {
</div> </div>
<div class="data-section"> <div class="data-section">
<div class="data-grid"> <div class="data-grid">
<div class="data-item"> <div
<div class="data-value">{{ formatValue(sensor.data?.temp, '°C') }}</div> v-for="(item, index) in getSensorDataItems(sensor)"
<div class="data-label">温度</div> :key="index"
</div> class="data-item"
<div class="data-item"> >
<div class="data-value">{{ formatValue(sensor.data?.humi, '%') }}</div> <div class="data-value">{{ formatValue(item.value, item.unit) }}</div>
<div class="data-label">湿度</div> <div class="data-label">{{ item.label }}</div>
</div>
<div class="data-item">
<div class="data-value">{{ formatValue(sensor.data?.light_adc) }}</div>
<div class="data-label">光照强度</div>
</div>
<div class="data-item">
<div class="data-value">{{ formatValue(sensor.data?.soil_adc) }}</div>
<div class="data-label">土壤湿度</div>
</div> </div>
</div> </div>
</div> </div>
<div class="footer-section"> <div class="footer-section">
<div class="update-time"> <div class="update-time">
<el-icon><Timer /></el-icon> <el-icon><Timer /></el-icon>
{{ sensor.last_update_time ? new Date(sensor.last_update_time).toLocaleString() : '暂无数据' }} {{ sensor.updated_at ? new Date(sensor.updated_at).toLocaleString() : '暂无数据' }}
</div> </div>
<div class="actions"> <div class="actions">
<el-button type="primary" link>编辑</el-button> <el-button type="primary" link>编辑</el-button>
@ -306,9 +337,9 @@ onMounted(() => {
.info-item { .info-item {
display: flex; display: flex;
justify-content: space-between; align-items: flex-start;
align-items: center; margin-bottom: 12px;
margin-bottom: 8px; min-width: 0;
&:last-child { &:last-child {
margin-bottom: 0; margin-bottom: 0;
@ -316,13 +347,33 @@ onMounted(() => {
.label { .label {
color: #909399; color: #909399;
font-size: 13px; font-size: 14px;
flex-shrink: 0;
width: 70px;
margin-top: 2px;
} }
.value { .value {
color: #606266; color: #303133;
font-size: 13px; font-size: 15px;
font-family: monospace; font-weight: 500;
font-family: 'DIN Alternate', sans-serif;
flex: 1;
text-align: right;
word-break: break-all;
margin-left: 10px;
line-height: 1.4;
}
//
&:nth-child(1),
&:nth-child(2) {
.value {
font-size: 16px;
font-weight: 600;
color: #1890ff;
opacity: 0.85;
}
} }
} }
} }