修改新增加文件数量的查询功能
This commit is contained in:
@ -103,6 +103,25 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="今日文件" width="120" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip content="点击查看历史文件趋势" placement="top">
|
||||
<div
|
||||
class="file-count-cell"
|
||||
@click="openHistoryDialog(row)"
|
||||
:class="{ 'has-data': row.file_count > 0 }"
|
||||
>
|
||||
<el-tag v-if="row.file_count > 0" type="primary" effect="plain" round size="small">
|
||||
{{ row.file_count }} 个
|
||||
</el-tag>
|
||||
<span v-else style="color: #ccc; font-size: 12px;">--</span>
|
||||
|
||||
<el-icon v-if="!row.is_hidden" class="history-icon"><Histogram /></el-icon>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="安装地点" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.isEditingSite" class="editing-cell">
|
||||
@ -235,6 +254,8 @@
|
||||
<MaintenanceLogs ref="maintenanceLogsRef" />
|
||||
<IoTDeviceBinder ref="iotBinderRef" @update-success="fetchData" />
|
||||
|
||||
<FileHistoryDialog ref="fileHistoryRef" />
|
||||
|
||||
<el-dialog v-model="showAddDialog" title="手动添加设备" width="400px" align-center>
|
||||
<el-form :model="newDeviceForm" label-width="80px">
|
||||
<el-form-item label="设备名称">
|
||||
@ -262,11 +283,13 @@ import { ref, reactive, computed, onMounted, nextTick, onBeforeUnmount } from 'v
|
||||
import { useRouter } from 'vue-router'
|
||||
import axios from 'axios'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { Clock, DataLine, Document, Refresh, EditPen, Search, Edit, RefreshRight, Delete, RefreshLeft, SwitchButton, Warning, WarningFilled, Plus, Odometer, Link } from '@element-plus/icons-vue'
|
||||
import { Clock, DataLine, Document, Refresh, EditPen, Search, Edit, RefreshRight, Delete, RefreshLeft, SwitchButton, Warning, WarningFilled, Plus, Odometer, Link, Histogram } from '@element-plus/icons-vue'
|
||||
|
||||
import DataMonitor from './DataMonitor.vue'
|
||||
import MaintenanceLogs from './MaintenanceLogs.vue'
|
||||
import IoTDeviceBinder from './IoTDeviceBinder.vue'
|
||||
// ✅ 引入新组件
|
||||
import FileHistoryDialog from './FileHistoryDialog.vue'
|
||||
|
||||
const router = useRouter()
|
||||
const loading = ref(false)
|
||||
@ -288,6 +311,8 @@ const API_BASE = import.meta.env.DEV ? 'http://127.0.0.1:5000' : ''
|
||||
const dataMonitorRef = ref(null)
|
||||
const maintenanceLogsRef = ref(null)
|
||||
const iotBinderRef = ref(null)
|
||||
// ✅ 定义新的 ref
|
||||
const fileHistoryRef = ref(null)
|
||||
|
||||
const showAddDialog = ref(false)
|
||||
const isAdding = ref(false)
|
||||
@ -422,10 +447,6 @@ const fetchData = async () => {
|
||||
} else if (diffHours > 24) {
|
||||
statusLabel = '滞后'; statusColor = '#E6A23C'; statusType = 'warning';
|
||||
statusReason = `滞后 ${Math.floor(diffDays)} 天`;
|
||||
|
||||
// === 注意:这里没有把 trafficWarning 加入到 sortWeight 或 statusType 的改变逻辑中 ===
|
||||
// 从而实现了“只标黄文字,不改变行状态,不置顶”
|
||||
|
||||
} else if (expireWarning) {
|
||||
statusLabel = '即将过期'; statusColor = '#E6A23C'; statusType = 'warning';
|
||||
statusReason = `即将过期`;
|
||||
@ -451,7 +472,8 @@ const fetchData = async () => {
|
||||
currentValueNum,
|
||||
trafficNum,
|
||||
trafficWarning,
|
||||
expireWarning
|
||||
expireWarning,
|
||||
file_count: item.file_count || 0 // ✅ 绑定后端返回的文件数字段
|
||||
}
|
||||
}).sort((a, b) => b.sortWeight - a.sortWeight)
|
||||
|
||||
@ -500,6 +522,14 @@ const totalUsageSum = computed(() => {
|
||||
})
|
||||
|
||||
// === 交互函数 ===
|
||||
// ✅ 新增:打开历史记录弹窗
|
||||
const openHistoryDialog = (row) => {
|
||||
if (row.is_hidden) return
|
||||
if (fileHistoryRef.value) {
|
||||
fileHistoryRef.value.open(row)
|
||||
}
|
||||
}
|
||||
|
||||
const handleAddDeviceSubmit = async () => { if (!newDeviceForm.name) return; await axios.post(`${API_BASE}/api/add_device`, newDeviceForm); showAddDialog.value=false; fetchData() }
|
||||
const handleDeviceClick = (row) => { if (!row.is_hidden && dataMonitorRef.value) dataMonitorRef.value.open(row) }
|
||||
const openLogCenter = (row) => { if (maintenanceLogsRef.value) maintenanceLogsRef.value.open(row ? { deviceName: row.name } : null) }
|
||||
@ -567,6 +597,34 @@ onBeforeUnmount(() => window.removeEventListener('resize', updateDimensions))
|
||||
:deep(.data-error-row) { background-color: #ffe6e6 !important; }
|
||||
:deep(.data-warning-row) { background-color: #fffbe6 !important; }
|
||||
|
||||
/* ✅ 新增样式 */
|
||||
.file-count-cell {
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 5px;
|
||||
transition: all 0.2s;
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.file-count-cell:hover {
|
||||
background-color: #f0f9ff;
|
||||
}
|
||||
.file-count-cell:hover .el-tag {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
.history-icon {
|
||||
font-size: 14px;
|
||||
color: #909399;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.file-count-cell:hover .history-icon {
|
||||
opacity: 1;
|
||||
color: #409EFF;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.dashboard-container { padding: 5px; }
|
||||
.left-panel, .header-actions { width: 100%; justify-content: space-between; margin-bottom: 5px; }
|
||||
|
||||
Reference in New Issue
Block a user