@ -1,67 +1,186 @@
< template >
< C ontentW rap>
<!-- 列表 -- >
< XTable @register ="registerTable" >
< template # toolbar_buttons >
<!-- 操作 : 新增 -- >
< XButton
type = "warning "
preIcon = "ep:download"
:title = "t('action.export') "
v-hasPermi = "['system:operate-log:export']"
@click ="exportList('操作日志.xls')"
< c ontent-w rap>
<!-- 搜索工作栏 -- >
< el-form class = "-mb-15px" :model = "queryParams" ref = "queryFormRef" :inline = "true" >
< el-form-item label = "系统模块" prop = "module" >
< el-input
v-model = "queryParams.module"
placeholder = "请输入系统模块 "
clearable
@keyup.enter ="handleQuery "
/ >
< / templa te>
< template # duration = "{ row } ">
< span > { { row . duration + 'ms' } } < / span >
< / template >
< template # resultCo de = "{ row }" >
< span > { { row . resultCode === 0 ? '成功' : '失败' } } < / span >
< / template >
< template # actionbtns_default = "{ row }" >
<!-- 操作 : 详情 -- >
< XTextButton preIcon = "ep:view" :title = "t('action.detail')" @click ="handleDetail(row)" / >
< / template >
< / XTable >
< / ContentWrap >
<!-- 弹窗 -- >
< XModal id = "postModel" v-model = "dialogVisible" :title="t('action.detail')" >
< ! - - 对话框 ( 详情 ) - - >
< Descriptions :schema = "allSchemas.detailSchema" :data = "detailData" >
< template # resultCode = "{ row }" >
< span > { { row . resultCode === 0 ? '成功' : '失败' } } < / span >
< / template >
< template # duration = "{ row }" >
< span > { { row . duration + 'ms' } } < / span >
< / template >
< / Descriptions >
< template # footer >
<!-- 按钮 : 关闭 -- >
< XButton :loading = "actionLoading" :title = "t('dialog.close')" @click ="dialogVisible = false" / >
< / template >
< / XModal >
< / el-form-i tem >
< el-form-item label = "操作人员" prop = "userNickname ">
< el-input
v-model = "queryParams.userNickname"
placehol der = "请输入操作人员"
clearable
@keyup.enter ="handleQuery"
/ >
< / el-form-item >
< el-form-item label = "类型" prop = "type" >
< el-select v-model = "queryParams.type" placeholder="操作类型" clearable >
< el-option
v-for = "dict in getDictOptions(DICT_TYPE.INFRA_CONFIG_TYPE)"
:key = "parseInt(dict.value)"
:label = "dict.label"
:value = "parseInt(dict.value)"
/ >
< / el-select >
< / el-form-item >
< el-form-item label = "状态" prop = "success" >
< el-select v-model = "queryParams.success" placeholder="操作状态" clearable >
< el-option :key = "true" label = "成功" :value = "true" / >
< el-option :key = "false" label = "失败" :value = "false" / >
< / el-select >
< / el-form-item >
< el-form-item label = "操作时间" prop = "startTime" >
< el-date-picker
v-model = "queryParams.startTime"
value -format = " YYYY -MM -DD HH : mm : ss "
type = "daterange"
start -placeholder = " 开始日期 "
end -placeholder = " 结束日期 "
: default -time = " [ new Date ( ' 1 00 : 00 : 00 ' ) , new Date ( ' 1 23 : 59 : 59 ' ) ] "
/ >
< / el-form-item >
< el-form-item >
< el-button @click ="handleQuery" > < Icon icon = "ep:search" class = "mr-5px" / > 搜索 < / el-button >
< el-button @click ="resetQuery" > < Icon icon = "ep:refresh" class = "mr-5px" / > 重置 < / el-button >
< el-button
type = "success"
plain
@click ="handleExport"
:loading = "exportLoading"
v-hasPermi = "['infra:config:export']"
>
< Icon icon = "ep:download" class = "mr-5px" / > 导出
< / el-button >
< / el-form-item >
< / el-form >
< / content-wrap >
<!-- 列表 -- >
< content-wrap >
< el-table v-loading = "loading" :data="list" >
< el -table -column label = "日志编号" align = "center" prop = "id" / >
< el-table-column label = "操作模块" align = "center" prop = "module" width = "180" / >
< el-table-column label = "操作名" align = "center" prop = "name" width = "180" / >
< el-table-column label = "操作类型" align = "center" prop = "type" >
< template # default = "scope" >
< dict-tag :type = "DICT_TYPE.SYSTEM_OPERATE_TYPE" :value = "scope.row.type" / >
< / template >
< / el-table-column >
< el-table-column label = "操作人" align = "center" prop = "userNickname" / >
< el-table-column label = "操作结果" align = "center" prop = "status" >
< template # default = "scope" >
< span > { { scope . row . resultCode === 0 ? '成功' : '失败' } } < / span >
< / template >
< / el-table-column >
< el-table-column
label = "操作时间"
align = "center"
prop = "startTime"
width = "180"
:formatter = "dateFormatter"
/ >
< el-table-column label = "执行时长" align = "center" prop = "startTime" >
< template # default = "scope" >
< span > { { scope . row . duration } } ms < / span >
< / template >
< / el-table-column >
< el-table-column label = "操作" align = "center" >
< template # default = "scope" >
< el-button
link
type = "primary"
@click ="openModal('update', scope.row.id)"
v-hasPermi = "['infra:config:query']"
>
详情
< / el-button >
< / template >
< / el-table-column >
< / el-table >
<!-- 分页 -- >
< Pagination
:total = "total"
v -model :page = "queryParams.pageNo"
v -model :limit = "queryParams.pageSize"
@pagination ="getList"
/ >
< / content-wrap >
< / template >
< script setup lang = "ts" name = "OperateLog" >
// 业务相关的 import
import { DICT _TYPE , getDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as OperateLogApi from '@/api/system/operatelog'
import { allSchemas } from './operatelog.data'
// import ConfigForm from './form.vue'
const message = useMessage ( ) // 消息弹窗
const { t } = useI18n ( ) // 国际化
// 列表相关的变量
const [ registerTable , { exportList } ] = useXTable ( {
allSchemas : allSchemas ,
getListApi : OperateLogApi . getOperateLogPageApi ,
exportListApi : OperateLogApi . exportOperateLogApi
const loading = ref ( true ) // 列表的加载中
const total = ref ( 0 ) // 列表的总页数
const list = ref ( [ ] ) // 列表的数据
const queryParams = reactive ( {
pageNo : 1 ,
pageSize : 10 ,
module : undefined ,
userNickname : undefined ,
type : undefined ,
success : undefined ,
startTime : [ ]
} )
const queryFormRef = ref ( ) // 搜索的表单
const exportLoading = ref ( false ) // 导出的加载中
// 弹窗相关的变量
const dialogVisible = ref ( false ) // 是否显示弹出层
const actionLoading = ref ( f als e) // 按钮 Loading
const detailData = ref ( ) // 详情 Ref
// 详情
const handleDetail = ( row : OperateLogApi . OperateLogVO ) => {
// 设置数据
detailData . value = row
dialogVisible . value = tru e
/** 查询参数列表 */
const getList = async ( ) => {
loading . v alu e = true
try {
const data = await OperateLogApi . getOperateLogPage ( queryParams )
list . value = data . list
total . value = data . total
} finally {
loading . value = fals e
}
}
/** 搜索按钮操作 */
const handleQuery = ( ) => {
queryParams . pageNo = 1
getList ( )
}
/** 重置按钮操作 */
const resetQuery = ( ) => {
queryFormRef . value . resetFields ( )
handleQuery ( )
}
/** 添加/修改操作 */
// const modalRef = ref()
// const openModal = (type: string, id?: number) => {
// modalRef.value.openModal(type, id)
// }
/** 导出按钮操作 */
const handleExport = async ( ) => {
try {
// 导出的二次确认
await message . exportConfirm ( )
// 发起导出
exportLoading . value = true
const data = await OperateLogApi . exportOperateLog ( queryParams )
download . excel ( data , '操作日志.xls' )
} catch {
} finally {
exportLoading . value = false
}
}
/** 初始化 **/
onMounted ( ( ) => {
getList ( )
} )
< / script >