Files
ppgo_job/frontend/src/views/tasklog/TaskLogList.vue
T
2026-07-21 10:28:54 +08:00

55 lines
3.7 KiB
Vue

<template>
<div><el-card shadow="never">
<el-form :inline="true" size="small">
<el-form-item label="状态"><el-select v-model="status" style="width:120px"><el-option label="全部" value="9" /><el-option label="成功" value="0" /><el-option label="错误" value="-1" /><el-option label="超时" value="-2" /></el-select></el-form-item>
<el-form-item><el-button type="primary" @click="search">查询</el-button></el-form-item>
<el-form-item><el-button type="danger" size="small" @click="handleBatchDel" :disabled="!selectedIds.length">批量删除</el-button></el-form-item>
</el-form>
<el-table :data="list" v-loading="loading" stripe size="small" @selection-change="rows => selectedIds = rows.map(r => r.id)">
<el-table-column type="selection" width="45" />
<el-table-column prop="task_id" label="任务ID" width="70" />
<el-table-column prop="task_name" label="任务名称" min-width="120" show-overflow-tooltip />
<el-table-column prop="server_name" label="服务器" />
<el-table-column prop="start_time" label="开始时间" width="160" />
<el-table-column prop="process_time" label="执行耗时" width="80" />
<el-table-column prop="output_size" label="输出" width="80" />
<el-table-column label="状态" width="70"><template #default="{ row }">{{ row.statusText }}</template></el-table-column>
<el-table-column label="操作" width="140" fixed="right">
<template #default="{ row }">
<el-button size="small" @click="router.push(`/task_log/${row.id}`)">详细</el-button>
<el-button size="small" type="danger" @click="handleDelete(row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrap"><el-pagination v-model:current-page="page" v-model:page-size="limit" :total="total" layout="total, prev, pager, next" @current-change="fetchData" size="small" /></div>
</el-card></div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'; import { useRouter, useRoute } from 'vue-router'; import { ElMessage, ElMessageBox } from 'element-plus'
import { getTaskLogList, deleteTaskLog } from '@/api/tasklog'
const router = useRouter(); const route = useRoute(); const loading = ref(false); const list = ref<any[]>([]); const total = ref(0); const page = ref(1); const limit = ref(20); const status = ref('9'); const selectedIds = ref<number[]>([])
async function fetchData() {
loading.value = true; try {
const params: any = { page: page.value, limit: limit.value }
if (status.value !== '9') params.status = status.value
const taskId = route.query.task_id
if (taskId) params.task_id = Number(taskId)
const r = await getTaskLogList(params)
if (r.code === 0) { list.value = r.data || []; total.value = r.count || 0 }
} finally { loading.value = false }
}
function search() { page.value = 1; fetchData() }
async function handleDelete(id: number) { await ElMessageBox.confirm('确认删除此日志?'); const r = await deleteTaskLog(id); if (r.code === 0) { ElMessage.success('删除成功'); fetchData() } else ElMessage.error(r.message) }
async function handleBatchDel() { if (!selectedIds.value.length) return; await ElMessageBox.confirm('确认删除选中的日志?'); for (const id of selectedIds.value) await deleteTaskLog(id); ElMessage.success('批量删除成功'); fetchData() }
onMounted(() => {
const qStatus = route.query.status
if (qStatus !== undefined && qStatus !== null) {
const s = String(qStatus)
if (['0', '-1', '-2'].includes(s)) {
status.value = s
}
}
fetchData()
})
</script><style scoped>.pagination-wrap { margin-top: 12px; display: flex; justify-content: flex-end; }</style>