济菏高速业务端
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.
 
 
 
 
 

549 lines
16 KiB

<template>
<div class="app-container">
<!-- 全局搜索 -->
<el-row :gutter="20" class="topFormRow">
<el-col :span="6">
<el-button
size="small"
:loading="exportLoading"
@click="handleExport"
v-hasPermi="['monitor:operlog:export']"
>导出</el-button
>
<el-button size="small" @click="resetQuery">刷新</el-button>
</el-col>
<el-col :span="6" :offset="12">
<div class="grid-content bg-purple" ref="main">
<el-input
placeholder="请输入系统模块、操作人员"
v-model="queryParams.title"
@keyup.enter.native="handleQuery"
size="small"
>
<el-button
slot="append"
class="searchTable"
@click="rz_boxShow = !rz_boxShow"
></el-button>
</el-input>
</div>
</el-col>
</el-row>
<div class="searchBox" v-show="rz_boxShow">
<el-form
ref="queryForm"
:inline="true"
:model="queryParams"
label-width="75px"
>
<el-form-item label="操作类型" prop="businessType">
<el-select
v-model="queryParams.businessType"
placeholder="请选择操作类型"
clearable
size="small"
>
<el-option
v-for="dict in dict.type.sys_oper_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="操作状态" prop="status">
<el-select
v-model="queryParams.status"
clearable
placeholder="请选择操作状态"
size="small"
>
<el-option
v-for="dict in dict.type.sys_common_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item class="bottomBox">
<el-button size="small" type="primary" @click="handleQuery"
>搜索</el-button
>
<el-button size="small" @click="resetQuery" type="primary" plain
>重置</el-button
>
</el-form-item>
</el-form>
</div>
<!-- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="系统模块" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入系统模块"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="操作人员" prop="operName">
<el-input
v-model="queryParams.operName"
placeholder="请输入操作人员"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="类型" prop="businessType">
<el-select
v-model="queryParams.businessType"
placeholder="操作类型"
clearable
size="small"
>
<el-option
v-for="dict in dict.type.sys_oper_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="操作状态"
clearable
size="small"
>
<el-option
v-for="dict in dict.type.sys_common_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="操作时间">
<el-date-picker
v-model="dateRange"
size="small"
style="width: 215px"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" size="mini" @click="handleQuery">搜索</el-button>
<el-button size="mini" @click="resetQuery" type="primary" plain>重置</el-button>
<el-button
type="primary"
plain
size="mini"
:loading="exportLoading"
@click="handleExport"
v-hasPermi="['monitor:operlog:export']"
>导出</el-button>
</el-form-item>
</el-form>-->
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:operlog:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
@click="handleClean"
v-hasPermi="['monitor:operlog:remove']"
>清空</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
:loading="exportLoading"
@click="handleExport"
v-hasPermi="['monitor:operlog:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> -->
<div class="tableTopHr"></div>
<el-table
ref="tables"
v-loading="loading"
style=" overflow-y: auto;"
max-height="62vh"
:data="list"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
:default-sort="defaultSort"
@sort-change="handleSortChange"
class="allTable"
>
<el-table-column
type="selection"
width="55"
align="center"
reserve-selection
/>
<el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="系统模块" align="center" prop="title" />
<el-table-column label="操作类型" align="center" prop="businessType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_oper_type"
:value="scope.row.businessType"
/>
</template>
</el-table-column>
<el-table-column label="请求方式" align="center" prop="requestMethod" />
<el-table-column
label="操作人员"
align="center"
prop="operName"
width="100"
:show-overflow-tooltip="true"
sortable="custom"
:sort-orders="['descending', 'ascending']"
/>
<el-table-column
label="操作地址"
align="center"
prop="operIp"
width="130"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" />-->
<el-table-column label="操作状态" align="center" prop="status">
<template slot-scope="scope">
<!-- <dict-tag
:options="dict.type.sys_common_status"
:value="scope.row.status"
/> -->
<span
:style="{
color: scope.row.status == '0' ? '#00FF00' : 'red',
}"
>{{ pollFormat(scope.row.status) }}</span
>
</template>
</el-table-column>
<el-table-column
label="操作日期"
align="center"
prop="operTime"
sortable="custom"
:sort-orders="['descending', 'ascending']"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.operTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
class="tableBlueButtton"
@click="handleView(scope.row, scope.index)"
v-hasPermi="['monitor:operlog:query']"
>详细</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 操作日志详细 -->
<el-dialog
title="操作日志详细"
:visible.sync="open"
width="700px"
append-to-body
:before-close="cancel"
:close-on-click-modal="false"
>
<div class="dialogStyleBox">
<div class="dialogLine"></div>
<div class="dialogCloseButton"></div>
</div>
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-row>
<el-col :span="12">
<el-form-item label="系统模块:"
>{{ form.title }} / {{ typeFormat(form) }}</el-form-item
>
<el-form-item label="登录信息:"
>{{ form.operName }} / {{ form.operIp }} /
{{ form.operLocation }}</el-form-item
>
</el-col>
<el-col :span="12">
<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
<el-form-item label="请求方式:">{{
form.requestMethod
}}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="操作方法:">{{ form.method }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="返回参数:">{{
form.jsonResult
}}</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="操作状态:">
<div v-if="form.status === 0">成功</div>
<div v-else-if="form.status === 1">失败</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="操作日期:">{{
parseTime(form.operTime)
}}</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="异常信息:" v-if="form.status === 1">{{
form.errorMsg
}}</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel" class="closeButton"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
list,
delOperlog,
cleanOperlog,
exportOperlog,
} from "@/api/monitor/operlog";
export default {
name: "Operlog",
dicts: ["sys_oper_type", "sys_common_status"],
data() {
return {
rz_boxShow: false,
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 表格数据
list: [],
// 是否显示弹出层
open: false,
// 日期范围
dateRange: [],
// 默认排序
defaultSort: { prop: "operTime", order: "descending" },
// 表单参数
form: {},
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
title: undefined,
operName: undefined,
businessType: undefined,
status: undefined,
},
loginStatusOptions: [], //状态
};
},
created() {
this.getList();
this.getDicts("sys_common_status").then((response) => {
this.loginStatusOptions = response.data;
});
},
//点击空白区域关闭全局搜索弹窗
mounted() {
document.addEventListener("click", this.bodyCloseMenus);
},
methods: {
pollFormat(row) {
return this.selectDictLabel(this.loginStatusOptions, row);
},
cancel() {
this.open = false;
this.$refs.tables.clearSelection();
},
handleRowClick(row) {
this.$refs.tables.toggleRowSelection(row);
},
// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
getRowKey(row) {
return row.id;
},
bodyCloseMenus(e) {
let self = this;
if (this.$refs.main && !this.$refs.main.contains(e.target)) {
if (self.rz_boxShow == true) {
self.rz_boxShow = false;
}
}
},
beforeDestroy() {
document.removeEventListener("click", this.bodyCloseMenus);
},
/** 查询登录日志 */
getList() {
this.loading = true;
list(this.addDateRange(this.queryParams, this.dateRange)).then(
(response) => {
this.list = response.rows;
this.total = response.total;
this.loading = false;
}
);
},
// 操作日志类型字典翻译
typeFormat(row, column) {
return this.selectDictLabel(
this.dict.type.sys_oper_type,
row.businessType
);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 10;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = [];
this.resetForm("queryForm");
this.queryParams.title = "";
this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order);
this.handleQuery();
},
/** 多选框选中数据 */
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.operId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 排序触发事件 */
handleSortChange(column, prop, order) {
this.queryParams.orderByColumn = column.prop;
this.queryParams.isAsc = column.order;
this.getList();
},
/** 详细按钮操作 */
handleView(row) {
this.open = true;
this.form = row;
},
/** 删除按钮操作 */
handleDelete(row) {
const operIds = row.operId || this.ids;
this.$modal
.confirm("是否确认删除所选数据项?")
.then(function () {
return delOperlog(operIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {
this.$refs.tableFile.clearSelection();
});
},
/** 清空按钮操作 */
handleClean() {
this.$modal
.confirm("是否确认清空所有操作日志数据项?")
.then(function () {
return cleanOperlog();
})
.then(() => {
this.getList();
this.$modal.msgSuccess("清空成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
let confirmInfo = "是否确认导出所有的操作日志数据项?";
if (this.ids.length > 0) {
confirmInfo = "是否确认导出所选的操作日志数据项?";
}
this.queryParams.ids = this.ids.join();
const queryParams = this.queryParams;
this.$modal
.confirm(confirmInfo)
.then(() => {
this.exportLoading = true;
return exportOperlog(queryParams);
})
.then((response) => {
this.$download.name(response.msg);
this.$refs.tableFile.clearSelection();
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>
<style scoped lang="scss" >
::v-deep .el-dialog__body {
max-height: 70vh;
overflow: auto;
}
</style>