消毒机设备
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

143 lines
3.6 KiB

<script lang="ts" setup>
import { sendCmd, syncSendCmd } from 'apis/system'
import type { TableColumnCtx } from 'element-plus'
import { ElLoading } from 'element-plus'
import { onMounted, ref } from 'vue'
import { FtMessage } from '@/libs/message'
/**
* 操作记录组件
*/
// 分页控制
const pageNum = ref(1) // 当前页码
const pageSize = ref(10) // 每页显示数量
const totle = ref(0) // 总记录数
// 表格数据
const tableData = ref<Audit.AuditItem[]>([]) // 审计日志表格数据
/**
* @hook 生命周期钩子 - 组件挂载完成时执行
* @description 初始化加载审计日志列表
*/
onMounted(() => {
getAuditList()
})
/**
* @function 获取审计日志列表
* @desc 从服务端获取分页后的审计日志数据
*/
const getAuditList = async () => {
const params = {
className: 'AuditMgrService',
fnName: 'getRecords',
params: {
page: pageNum.value,
pageSize: pageSize.value,
},
}
try {
const res = await sendCmd(params)
tableData.value = res.items || []
totle.value = res.total || 0
}
catch (error) {
FtMessage.error('获取日志列表失败')
console.error('获取审计日志失败:', error)
}
}
/**
* @function 导出全部审计记录
* @desc 导出单条审计记录,需先选择一条记录
*/
const onExportRecord = () => {
// if (selectedUserList.value.length !== 1) {
// FtMessage.warning('请选择一条数据进行导出')
// return
// }
const loading = ElLoading.service({
lock: true,
text: '正在导出',
background: 'rgba(255, 255, 255, 0.8)',
})
const params = {
className: 'AuditMgrService',
fnName: 'exportData',
}
syncSendCmd(params)
.then((res) => {
if (res.ackcode === 0) {
FtMessage.success('导出成功')
}
})
.catch((error) => {
console.error('导出审计记录失败:', error)
})
.finally(() => {
loading.close()
})
}
/**
* @function 页码变更处理
* @param {number} page - 新的页码
* @desc 更新页码并重新加载数据
*/
const handleCurrentChange = (page: number) => {
pageNum.value = page
getAuditList()
}
const formatIndex = (_row: unknown, _column: TableColumnCtx<unknown>, _cellValue: unknown, index: number): number => {
return (pageNum.value - 1) * pageSize.value + index + 1
}
</script>
<template>
<div class="dashboard-container">
<main class="main-content">
<div class="audit-export">
<bt-button type="primary" button-text="全部导出" @click="onExportRecord" />
</div>
<div class="audit-table">
<el-table :data="tableData" style="width: 100%" height="100%">
<el-table-column label="序号" width="100" :formatter="formatIndex" />
<el-table-column prop="usrName" label="操作人" width="120" />
<el-table-column prop="behaviorinfo" label="操作内容" />
<el-table-column prop="date" label="操作时间" width="250" />
</el-table>
</div>
<div class="audit-pagination">
<el-pagination layout="prev, pager, next" :total="totle" @current-change="handleCurrentChange" />
</div>
</main>
</div>
</template>
<style lang="scss" scoped>
.main-content {
height: $main-container-height;
overflow: hidden;
background: $gradient-color;
.audit-export {
height: 50px;
//padding: 0 10px;
display: flex;
align-items: center;
}
.audit-table {
overflow: auto;
height: calc(100% - 110px);
}
.audit-pagination {
height: 50px;
display: flex;
align-items: center;
float: right;
}
}
</style>