修复: list->items
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m46s

This commit is contained in:
sexygoat
2026-03-31 10:15:10 +08:00
parent 36da079d59
commit 104d62b17d
2 changed files with 163 additions and 163 deletions

View File

@@ -869,7 +869,7 @@
} }
const res = await OrderService.getOrders(params) const res = await OrderService.getOrders(params)
if (res.code === 0) { if (res.code === 0) {
orderList.value = res.data.list || [] orderList.value = res.data.items || []
pagination.total = res.data.total || 0 pagination.total = res.data.total || 0
} }
} catch (error) { } catch (error) {
@@ -1011,9 +1011,7 @@
try { try {
// 获取资源ID (IoT卡ID或设备ID) // 获取资源ID (IoT卡ID或设备ID)
const resourceId = const resourceId =
createForm.order_type === 'single_card' createForm.order_type === 'single_card' ? createForm.iot_card_id : createForm.device_id
? createForm.iot_card_id
: createForm.device_id
if (!resourceId) { if (!resourceId) {
ElMessage.error('请选择IoT卡或设备') ElMessage.error('请选择IoT卡或设备')

View File

@@ -161,7 +161,9 @@
:stroke-width="20" :stroke-width="20"
:color="getProgressColor(initProgress.progress)" :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> </el-progress>
</div> </div>
</el-card> </el-card>
@@ -169,207 +171,207 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue' import { ref, onMounted, onUnmounted } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { Document, CircleCheck, User, Box, DataLine } from '@element-plus/icons-vue' import { Document, CircleCheck, User, Box, DataLine } from '@element-plus/icons-vue'
import { PollingMonitorService } from '@/api/modules' import { PollingMonitorService } from '@/api/modules'
import type { import type {
PollingOverviewStats, PollingOverviewStats,
PollingInitProgress, PollingInitProgress,
PollingQueueStatus, PollingQueueStatus,
PollingTaskStats PollingTaskStats
} from '@/types/api' } from '@/types/api'
import { formatDateTime } from '@/utils/business/format' import { formatDateTime } from '@/utils/business/format'
const overviewStats = ref<PollingOverviewStats>() const overviewStats = ref<PollingOverviewStats>()
const initProgress = ref<PollingInitProgress>() const initProgress = ref<PollingInitProgress>()
const queueStatusList = ref<PollingQueueStatus[]>([]) const queueStatusList = ref<PollingQueueStatus[]>([])
const taskStatsList = ref<PollingTaskStats[]>([]) const taskStatsList = ref<PollingTaskStats[]>([])
let refreshTimer: NodeJS.Timeout | null = null let refreshTimer: NodeJS.Timeout | null = null
// 加载总览统计 // 加载总览统计
const loadOverviewStats = async () => { const loadOverviewStats = async () => {
try { try {
const { data } = await PollingMonitorService.getOverviewStats() const { data } = await PollingMonitorService.getOverviewStats()
overviewStats.value = data overviewStats.value = data
} catch (error) { } catch (error) {
ElMessage.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 loadQueueStatus = async (showMessage = false) => { const loadInitProgress = async (showMessage = false) => {
try { try {
const { data } = await PollingMonitorService.getQueueStatus() const { data } = await PollingMonitorService.getInitProgress()
queueStatusList.value = data.items initProgress.value = data
if (showMessage) { if (showMessage) {
ElMessage.success('队列状态已刷新') ElMessage.success('初始化进度已刷新')
}
} catch (error) {
console.error('加载初始化进度失败', error)
if (showMessage) {
ElMessage.error('加载初始化进度失败')
}
} }
} catch (error) {
ElMessage.error('加载队列状态失败')
} }
}
// 加载任务统计 // 加载队列状态
const loadTaskStats = async (showMessage = false) => { const loadQueueStatus = async (showMessage = false) => {
try { try {
const { data } = await PollingMonitorService.getTaskStats() const { data } = await PollingMonitorService.getQueueStatus()
taskStatsList.value = data.items queueStatusList.value = data.items
if (showMessage) { if (showMessage) {
ElMessage.success('任务统计已刷新') ElMessage.success('队列状态已刷新')
}
} catch (error) {
ElMessage.error('加载队列状态失败')
} }
} catch (error) {
ElMessage.error('加载任务统计失败')
} }
}
// 加载所有数据 // 加载任务统计
const loadAllData = () => { const loadTaskStats = async (showMessage = false) => {
loadOverviewStats() try {
loadInitProgress() const { data } = await PollingMonitorService.getTaskStats()
loadQueueStatus() taskStatsList.value = data.items
loadTaskStats() if (showMessage) {
} ElMessage.success('任务统计已刷新')
}
} catch (error) {
ElMessage.error('加载任务统计失败')
}
}
// 获取成功率颜色 // 加载所有数据
const getSuccessRateColor = (rate: number) => { const loadAllData = () => {
if (rate >= 95) return '#67c23a' loadOverviewStats()
if (rate >= 85) return '#e6a23c' loadInitProgress()
return '#f56c6c' loadQueueStatus()
} loadTaskStats()
}
// 获取进度颜色 // 获取成功率颜色
const getProgressColor = (progress: number) => { const getSuccessRateColor = (rate: number) => {
if (progress >= 90) return '#67c23a' if (rate >= 95) return '#67c23a'
if (progress >= 50) return '#409eff' if (rate >= 85) return '#e6a23c'
return '#e6a23c' return '#f56c6c'
} }
onMounted(() => { // 获取进度颜色
loadAllData() const getProgressColor = (progress: number) => {
if (progress >= 90) return '#67c23a'
if (progress >= 50) return '#409eff'
return '#e6a23c'
}
// 每30秒自动刷新 onMounted(() => {
refreshTimer = setInterval(() => {
loadAllData() loadAllData()
}, 30000)
})
onUnmounted(() => { // 每30秒自动刷新
if (refreshTimer) { refreshTimer = setInterval(() => {
clearInterval(refreshTimer) loadAllData()
} }, 30000)
}) })
onUnmounted(() => {
if (refreshTimer) {
clearInterval(refreshTimer)
}
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.polling-monitor-page { .polling-monitor-page {
padding: 20px; padding: 20px;
.stats-row { .stats-row {
margin-bottom: 20px; margin-bottom: 20px;
} }
.stat-card { .stat-card {
display: flex;
align-items: center;
gap: 16px;
.stat-icon {
width: 64px;
height: 64px;
border-radius: 12px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; gap: 16px;
color: #ffffff;
&.total { .stat-icon {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 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 { .stat-content {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); flex: 1;
}
&.realname { .stat-label {
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); font-size: 14px;
} color: var(--el-text-color-secondary);
margin-bottom: 4px;
}
&.package { .stat-value {
background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%); font-size: 24px;
} font-weight: bold;
color: var(--el-text-color-primary);
&.carddata { }
background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
} }
} }
.stat-content { .section-card {
flex: 1; margin-bottom: 20px;
.stat-label { .card-header {
font-size: 14px; display: flex;
color: var(--el-text-color-secondary); justify-content: space-between;
margin-bottom: 4px; align-items: center;
}
.stat-value {
font-size: 24px;
font-weight: bold; font-weight: bold;
color: var(--el-text-color-primary); color: var(--el-text-color-primary);
} }
} }
}
.section-card { .init-progress-content {
margin-bottom: 20px; .progress-info {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
margin-bottom: 20px;
.card-header { .info-item {
display: flex; .label {
justify-content: space-between; color: var(--el-text-color-secondary);
align-items: center; font-size: 14px;
font-weight: bold; }
color: var(--el-text-color-primary);
}
}
.init-progress-content { .value {
.progress-info { color: var(--el-text-color-primary);
display: grid; font-weight: 500;
grid-template-columns: repeat(2, 1fr); margin-left: 8px;
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;
} }
} }
} }
} }
}
</style> </style>