zhgdyun/src/views/companyAdmin/operationLog.vue

404 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="fullHeight">
<div class="searchBox whiteBlock" v-if="dialogFormVisible">
<el-form
:inline="true"
size="medium"
:model="searchForm"
ref="searchForm"
>
<el-form-item :label="'操作名称'" prop="operName">
<el-input
v-model="searchForm.operName"
:placeholder="$t('message.docManage.placeholder')"
clearable
></el-input>
</el-form-item>
<el-form-item :label="'操作人'" prop="userName">
<el-input
v-model="searchForm.userName"
:placeholder="$t('message.docManage.placeholder')"
clearable
></el-input>
</el-form-item>
<el-form-item :label="'操作时间'" prop="userName" class="last">
<el-date-picker
v-model="daterange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="getListData"
>{{ $t("message.docManage.query") }}
</el-button>
<el-button type="warning" plain @click="resetForm">{{
$t("message.docManage.refresh")
}}</el-button>
<el-button type="primary" plain @click="exportFn" v-permission="{key: 'user_export', menuPath: '/project/configManage/operationLog'}">
<!-- 导出 -->
{{ $t("message.projectInfo.export") }}
</el-button>
</el-form-item>
</el-form>
</div>
<div class="table_wrap whiteBlock" v-if="dialogFormVisible">
<el-table class="tables" style="height: calc(100% - 80px);" :data="tableData">
<el-table-column
type="index"
width="50"
align="center"
label="序号"
></el-table-column>
<el-table-column
prop="operLogTime"
label="操作时间"
align="center"
></el-table-column>
<el-table-column
prop="operDesc"
label="操作描述"
align="center"
></el-table-column>
<!-- <el-table-column
prop="operMethod"
label="操作方法"
align="center"
></el-table-column> -->
<el-table-column
prop="operModul"
label="功能模块"
align="center"
></el-table-column>
<!-- <el-table-column
prop="operRequParam"
label="请求参数"
align="center"
></el-table-column> -->
<el-table-column
prop="operIp"
label="操作IP"
align="center"
></el-table-column>
<el-table-column
prop="operUri"
label="请求URI"
align="center"
></el-table-column>
<el-table-column
prop="realName"
label="操作员姓名"
align="center"
></el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div class="tableBtns">
<div class="operationText last" @click="deilBtn(scope.row)">
<i
class="el-icon-tickets"
style="color: #8dacfa; font-size: 16px; margin-right: 2px"
></i>
<span>查看详情</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
style="margin-top: 40px;"
class="pagerBox"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(total)"
background
></el-pagination>
</div>
<div class="whiteBlock" style="height: 100%" v-else>
<el-page-header
@back="goBack"
:content="dialogTitle"
class="backText"
></el-page-header>
<el-form class="form-box">
<el-form-item label="操作时间:" :label-width="formLabelWidthDetail">
{{ detailRow.operCreateTime }}
</el-form-item>
<el-form-item label="操作描述:" :label-width="formLabelWidthDetail">
{{ detailRow.operDesc }}
</el-form-item>
<el-form-item label="功能模块:" :label-width="formLabelWidthDetail">
{{ detailRow.operModul }}
</el-form-item>
<el-form-item label="操作IP" :label-width="formLabelWidthDetail">
{{ detailRow.operIp }}
</el-form-item>
<el-form-item label="请求URL" :label-width="formLabelWidthDetail">
{{ detailRow.operUri }}
</el-form-item>
<el-form-item label="操作员姓名:" :label-width="formLabelWidthDetail">
{{ detailRow.realName }}
</el-form-item>
<el-form-item label="数据变更前:" :label-width="formLabelWidthDetail">
{{ detailRow.dataChangeBefore }}
</el-form-item>
<el-form-item label="数据变更后:" :label-width="formLabelWidthDetail">
{{ detailRow.dataChangeAfter }}
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { getOperationLogListApi } from "@/assets/js/api/company/project";
export default {
data() {
return {
tableData: [],
searchForm: {
operName: "",
startTime: "",
endTime: "",
userName: "",
},
total: 0,
pageNo: 1,
pageSize: 10,
daterange: [],
dialogFormVisible: true,
dialogTitle: "",
detailRow: {},
formLabelWidthDetail: "110px",
};
},
mounted() {
this.selectNowDate();
this.getListData();
},
methods: {
goBack() {
this.dialogFormVisible = true;
},
deilBtn(val) {
console.log("!!!!!!!!!!!!!!!!!!", val);
this.dialogFormVisible = false;
// 详细
this.dialogTitle = "详细";
this.detailRow = val;
},
exportFn() {
let requestData = {
sn: this.$store.state.projectSn,
// sn: this.$store.state.userInfo.sn || this.$store.state.userInfo.headquartersSn,
pageNo: this.pageNo,
pageSize: this.pageSize,
// projectSn: this.$store.state.projectSn,
userName: this.searchForm.userName,
// operModul: this.searchForm.operModul,
};
if (this.$store.state.userInfo.accountType == 6) {
requestData.operUserId = this.$store.state.userInfo.userId;
}
if (this.daterange) {
requestData.startTime = this.daterange[0];
requestData.endTime = this.daterange[1];
} else {
requestData.startTime = "";
requestData.endTime = "";
}
fetch(this.$http.defaults.baseURL + "xmgl/operationLog/exportXls", {
method: "post",
headers: {
Authorization: this.$store.state.userInfo.token,
"Content-Type": "application/json", // 设置请求头的内容类型为JSON
},
body: JSON.stringify(requestData), // 将data对象转换为JSON字符串并作为请求体发送
})
.then((response) => {
// 处理响应
if (!response.ok) {
throw new Error("下载失败");
}
return response.blob();
})
.then((blob) => {
// 创建一个下载链接
const url = window.URL.createObjectURL(blob);
// 创建一个<a>元素
const link = document.createElement("a");
link.href = url;
link.download = "安全日志.xlsx"; // 指定下载文件的文件名
// 模拟点击下载链接
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 释放URL对象
window.URL.revokeObjectURL(url);
// 处理导出的文件
// 这里可以使用blob对象来获取导出的文件内容或者将其保存到本地
console.log("下载", link, url);
})
.catch((error) => {
// 处理错误
console.error(error);
});
},
// 获取当前时间 返回YYYY-MM-DD HH:mm:ss
selectNowDate() {
var date = new Date(),
year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),
hours = date.getHours(), //获取当前小时数(0-23)
minutes = date.getMinutes(), //获取当前分钟数(0-59)
seconds = date.getSeconds()
month >= 1 && month <= 9 ? (month = '0' + month) : ''
day >= 0 && day <= 9 ? (day = '0' + day) : ''
hours >= 0 && hours <= 9 ? (hours = '0' + hours) : ''
minutes >= 0 && minutes <= 9 ? (minutes = '0' + minutes) : ''
seconds >= 0 && seconds <= 9 ? (seconds = '0' + seconds) : ''
// var timer = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes+ ':' + seconds;
var timer = year + '-' + month + '-' + day
this.daterange = [timer, timer]
console.log(timer)
// return timer;
},
resetForm() {
this.$refs["searchForm"].resetFields();
// this.daterange = [];
this.selectNowDate();
this.getListData();
},
//获取列表数据
getListData() {
let data = this.searchForm;
data.pageNo = this.pageNo;
data.pageSize = this.pageSize;
// data.sn = this.$store.state.userInfo.sn ||
// this.$store.state.userInfo.headquartersSn;
// data.projectSn = this.$store.state.projectSn;
data.sn = this.$store.state.projectSn
if (this.daterange) {
data.startTime = this.daterange[0];
data.endTime = this.daterange[1];
} else {
data.startTime = "";
data.endTime = "";
}
getOperationLogListApi(data).then((res) => {
this.tableData = res.result.records;
this.total = res.result.total;
});
},
//查看条数
handleSizeChange(val) {
this.pageSize = val;
this.getListData();
},
//查看页
handleCurrentChange(val) {
this.pageNo = val;
this.getListData();
},
},
};
</script>
<style lang="less" scoped>
.form-box {
width: 100%;
display: flex;
flex-wrap: wrap;
max-height: calc(100% - 50px);
overflow-y:scroll;
/deep/.el-form-item {
width: 50%;
padding-right: 10px;
box-sizing: border-box;
}
// /deep/.el-col-12{
// padding-left: 20px;
// }
/deep/.el-input__inner {
width: 100%;
}
/deep/.el-select {
width: 100%;
}
/deep/.el-cascader {
width: 100%;
}
}
// 美化滚动条
.form-box::-webkit-scrollbar {
width: 5px;
height: 5px;
}
.form-box::-webkit-scrollbar-track {
width: 6px;
background: rgba(#101F1C, 0.1);
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
}
.form-box::-webkit-scrollbar-thumb {
background-color: rgba(144,147,153,.5);
background-clip: padding-box;
min-height: 28px;
-webkit-border-radius: 2em;
-moz-border-radius: 2em;
border-radius: 2em;
transition: background-color .3s;
cursor: pointer;
}
.form-box::-webkit-scrollbar-thumb:hover {
background-color: rgba(144,147,153,.3);
}
.tables {
min-height: 0;
max-height: calc(100% - 56px);
}
.table_wrap {
position: relative;
}
.pagerBox {
margin-top: 0;
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
}
.backText {
padding: 8px 0;
padding-left: 10px;
/deep/.el-page-header__content {
font-size: 14px;
}
}
.dark {
/deep/.el-page-header__content {
color: #fff;
}
/deep/ .print-btn {
background: none;
color: #262d47;
font-size: 14px;
}
}
</style>