<template>
|
<div>
|
<el-table :data="rows" v-loading="loading" stripe>
|
<el-table-column prop="id" label="任务ID" width="100" />
|
<el-table-column prop="nodeCode" label="节点" width="200" />
|
<el-table-column prop="taskStatus" label="状态" width="120" />
|
<el-table-column label="操作" width="200">
|
<template #default="{ row }">
|
<div class="table-ops">
|
<el-button v-permission="'approvals:action'" size="small" type="success" link @click="act(row, true)">同意</el-button>
|
<el-button v-permission="'approvals:action'" size="small" type="danger" link @click="act(row, false)">拒绝</el-button>
|
</div>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { onMounted, ref } from "vue";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
import http from "../api/http";
|
|
const loading = ref(false);
|
const rows = ref<Record<string, unknown>[]>([]);
|
|
async function load() {
|
loading.value = true;
|
try {
|
const { data } = await http.get("/approvals/todo", { params: { page: 1, size: 50 } });
|
rows.value = data.result || [];
|
} catch (e: unknown) {
|
ElMessage.error(e instanceof Error ? e.message : "加载失败");
|
} finally {
|
loading.value = false;
|
}
|
}
|
|
async function act(row: Record<string, unknown>, approve: boolean) {
|
let comment = "";
|
if (!approve) {
|
const { value } = await ElMessageBox.prompt("拒绝原因", "审批", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
});
|
comment = value || "";
|
}
|
try {
|
await http.post("/approvals/action", {
|
taskId: row.id,
|
taskUuid: row.uuid,
|
approve,
|
comment,
|
});
|
ElMessage.success("已处理");
|
load();
|
} catch (e: unknown) {
|
ElMessage.error(e instanceof Error ? e.message : "操作失败");
|
}
|
}
|
|
onMounted(load);
|
</script>
|