修复: 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)
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卡或设备')

View File

@@ -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>