55 lines
3.7 KiB
Vue
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>
|