修复: list->items
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m46s
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m46s
This commit is contained in:
@@ -869,7 +869,7 @@
|
||||
}
|
||||
const res = await OrderService.getOrders(params)
|
||||
if (res.code === 0) {
|
||||
orderList.value = res.data.list || []
|
||||
orderList.value = res.data.items || []
|
||||
pagination.total = res.data.total || 0
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -1011,9 +1011,7 @@
|
||||
try {
|
||||
// 获取资源ID (IoT卡ID或设备ID)
|
||||
const resourceId =
|
||||
createForm.order_type === 'single_card'
|
||||
? createForm.iot_card_id
|
||||
: createForm.device_id
|
||||
createForm.order_type === 'single_card' ? createForm.iot_card_id : createForm.device_id
|
||||
|
||||
if (!resourceId) {
|
||||
ElMessage.error('请选择IoT卡或设备')
|
||||
|
||||
@@ -161,7 +161,9 @@
|
||||
:stroke-width="20"
|
||||
:color="getProgressColor(initProgress.progress)"
|
||||
>
|
||||
<span style="font-size: 14px; font-weight: bold">{{ initProgress.progress.toFixed(1) }}%</span>
|
||||
<span style="font-size: 14px; font-weight: bold"
|
||||
>{{ initProgress.progress.toFixed(1) }}%</span
|
||||
>
|
||||
</el-progress>
|
||||
</div>
|
||||
</el-card>
|
||||
@@ -169,207 +171,207 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, onUnmounted } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Document, CircleCheck, User, Box, DataLine } from '@element-plus/icons-vue'
|
||||
import { PollingMonitorService } from '@/api/modules'
|
||||
import type {
|
||||
PollingOverviewStats,
|
||||
PollingInitProgress,
|
||||
PollingQueueStatus,
|
||||
PollingTaskStats
|
||||
} from '@/types/api'
|
||||
import { formatDateTime } from '@/utils/business/format'
|
||||
import { ref, onMounted, onUnmounted } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { Document, CircleCheck, User, Box, DataLine } from '@element-plus/icons-vue'
|
||||
import { PollingMonitorService } from '@/api/modules'
|
||||
import type {
|
||||
PollingOverviewStats,
|
||||
PollingInitProgress,
|
||||
PollingQueueStatus,
|
||||
PollingTaskStats
|
||||
} from '@/types/api'
|
||||
import { formatDateTime } from '@/utils/business/format'
|
||||
|
||||
const overviewStats = ref<PollingOverviewStats>()
|
||||
const initProgress = ref<PollingInitProgress>()
|
||||
const queueStatusList = ref<PollingQueueStatus[]>([])
|
||||
const taskStatsList = ref<PollingTaskStats[]>([])
|
||||
const overviewStats = ref<PollingOverviewStats>()
|
||||
const initProgress = ref<PollingInitProgress>()
|
||||
const queueStatusList = ref<PollingQueueStatus[]>([])
|
||||
const taskStatsList = ref<PollingTaskStats[]>([])
|
||||
|
||||
let refreshTimer: NodeJS.Timeout | null = null
|
||||
let refreshTimer: NodeJS.Timeout | null = null
|
||||
|
||||
// 加载总览统计
|
||||
const loadOverviewStats = async () => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getOverviewStats()
|
||||
overviewStats.value = data
|
||||
} catch (error) {
|
||||
ElMessage.error('加载总览统计失败')
|
||||
}
|
||||
}
|
||||
|
||||
// 加载初始化进度
|
||||
const loadInitProgress = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getInitProgress()
|
||||
initProgress.value = data
|
||||
if (showMessage) {
|
||||
ElMessage.success('初始化进度已刷新')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载初始化进度失败', error)
|
||||
if (showMessage) {
|
||||
ElMessage.error('加载初始化进度失败')
|
||||
// 加载总览统计
|
||||
const loadOverviewStats = async () => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getOverviewStats()
|
||||
overviewStats.value = data
|
||||
} catch (error) {
|
||||
ElMessage.error('加载总览统计失败')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 加载队列状态
|
||||
const loadQueueStatus = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getQueueStatus()
|
||||
queueStatusList.value = data.items
|
||||
if (showMessage) {
|
||||
ElMessage.success('队列状态已刷新')
|
||||
// 加载初始化进度
|
||||
const loadInitProgress = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getInitProgress()
|
||||
initProgress.value = data
|
||||
if (showMessage) {
|
||||
ElMessage.success('初始化进度已刷新')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载初始化进度失败', error)
|
||||
if (showMessage) {
|
||||
ElMessage.error('加载初始化进度失败')
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('加载队列状态失败')
|
||||
}
|
||||
}
|
||||
|
||||
// 加载任务统计
|
||||
const loadTaskStats = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getTaskStats()
|
||||
taskStatsList.value = data.items
|
||||
if (showMessage) {
|
||||
ElMessage.success('任务统计已刷新')
|
||||
// 加载队列状态
|
||||
const loadQueueStatus = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getQueueStatus()
|
||||
queueStatusList.value = data.items
|
||||
if (showMessage) {
|
||||
ElMessage.success('队列状态已刷新')
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('加载队列状态失败')
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('加载任务统计失败')
|
||||
}
|
||||
}
|
||||
|
||||
// 加载所有数据
|
||||
const loadAllData = () => {
|
||||
loadOverviewStats()
|
||||
loadInitProgress()
|
||||
loadQueueStatus()
|
||||
loadTaskStats()
|
||||
}
|
||||
// 加载任务统计
|
||||
const loadTaskStats = async (showMessage = false) => {
|
||||
try {
|
||||
const { data } = await PollingMonitorService.getTaskStats()
|
||||
taskStatsList.value = data.items
|
||||
if (showMessage) {
|
||||
ElMessage.success('任务统计已刷新')
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('加载任务统计失败')
|
||||
}
|
||||
}
|
||||
|
||||
// 获取成功率颜色
|
||||
const getSuccessRateColor = (rate: number) => {
|
||||
if (rate >= 95) return '#67c23a'
|
||||
if (rate >= 85) return '#e6a23c'
|
||||
return '#f56c6c'
|
||||
}
|
||||
// 加载所有数据
|
||||
const loadAllData = () => {
|
||||
loadOverviewStats()
|
||||
loadInitProgress()
|
||||
loadQueueStatus()
|
||||
loadTaskStats()
|
||||
}
|
||||
|
||||
// 获取进度颜色
|
||||
const getProgressColor = (progress: number) => {
|
||||
if (progress >= 90) return '#67c23a'
|
||||
if (progress >= 50) return '#409eff'
|
||||
return '#e6a23c'
|
||||
}
|
||||
// 获取成功率颜色
|
||||
const getSuccessRateColor = (rate: number) => {
|
||||
if (rate >= 95) return '#67c23a'
|
||||
if (rate >= 85) return '#e6a23c'
|
||||
return '#f56c6c'
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadAllData()
|
||||
// 获取进度颜色
|
||||
const getProgressColor = (progress: number) => {
|
||||
if (progress >= 90) return '#67c23a'
|
||||
if (progress >= 50) return '#409eff'
|
||||
return '#e6a23c'
|
||||
}
|
||||
|
||||
// 每30秒自动刷新
|
||||
refreshTimer = setInterval(() => {
|
||||
onMounted(() => {
|
||||
loadAllData()
|
||||
}, 30000)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (refreshTimer) {
|
||||
clearInterval(refreshTimer)
|
||||
}
|
||||
})
|
||||
// 每30秒自动刷新
|
||||
refreshTimer = setInterval(() => {
|
||||
loadAllData()
|
||||
}, 30000)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (refreshTimer) {
|
||||
clearInterval(refreshTimer)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.polling-monitor-page {
|
||||
padding: 20px;
|
||||
.polling-monitor-page {
|
||||
padding: 20px;
|
||||
|
||||
.stats-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.stats-row {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
|
||||
.stat-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
border-radius: 12px;
|
||||
.stat-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #ffffff;
|
||||
gap: 16px;
|
||||
|
||||
&.total {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
.stat-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
border-radius: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #ffffff;
|
||||
|
||||
&.total {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
}
|
||||
|
||||
&.initialized {
|
||||
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
}
|
||||
|
||||
&.realname {
|
||||
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
||||
}
|
||||
|
||||
&.package {
|
||||
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
|
||||
}
|
||||
|
||||
&.carddata {
|
||||
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
|
||||
}
|
||||
}
|
||||
|
||||
&.initialized {
|
||||
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
}
|
||||
.stat-content {
|
||||
flex: 1;
|
||||
|
||||
&.realname {
|
||||
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
||||
}
|
||||
.stat-label {
|
||||
font-size: 14px;
|
||||
color: var(--el-text-color-secondary);
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
&.package {
|
||||
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
|
||||
}
|
||||
|
||||
&.carddata {
|
||||
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
|
||||
.stat-value {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: var(--el-text-color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.stat-content {
|
||||
flex: 1;
|
||||
.section-card {
|
||||
margin-bottom: 20px;
|
||||
|
||||
.stat-label {
|
||||
font-size: 14px;
|
||||
color: var(--el-text-color-secondary);
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 24px;
|
||||
.card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-weight: bold;
|
||||
color: var(--el-text-color-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-card {
|
||||
margin-bottom: 20px;
|
||||
.init-progress-content {
|
||||
.progress-info {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-weight: bold;
|
||||
color: var(--el-text-color-primary);
|
||||
}
|
||||
}
|
||||
.info-item {
|
||||
.label {
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.init-progress-content {
|
||||
.progress-info {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.info-item {
|
||||
.label {
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.value {
|
||||
color: var(--el-text-color-primary);
|
||||
font-weight: 500;
|
||||
margin-left: 8px;
|
||||
.value {
|
||||
color: var(--el-text-color-primary);
|
||||
font-weight: 500;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user