256 lines
7.1 KiB
JavaScript
256 lines
7.1 KiB
JavaScript
|
|
//组件
|
|||
|
|
var Logcomponent = {
|
|||
|
|
template: `
|
|||
|
|
<div>
|
|||
|
|
<div id="" style="display: inline-block;width: 100%;">
|
|||
|
|
<div style="float: left; width: 20%;">
|
|||
|
|
<!-- <el-input v-model="input" placeholder="请输入用户" clearable @change="input_change"></el-input>-->
|
|||
|
|
<!-- <el-autocomplete v-model="input" :fetch-suggestions="querySearch" placeholder="请输入内容" clearable @change="input_change" style="width: 100%;"></el-autocomplete>-->
|
|||
|
|
<el-select v-model="input" filterable multiple placeholder="请选择用户" clearable @change="input_change" style="width: 100%;">
|
|||
|
|
<el-option
|
|||
|
|
v-for="item in options"
|
|||
|
|
:key="item.value"
|
|||
|
|
:label="item.label"
|
|||
|
|
:value="item.value">
|
|||
|
|
</el-option>
|
|||
|
|
</el-select>
|
|||
|
|
</div>
|
|||
|
|
<div style="float: left;">
|
|||
|
|
<el-button id ="bt_search" plain type="primary" icon="el-icon-search" @click="getLogsByName">搜索</el-button>
|
|||
|
|
<el-button id ="bt_search" plain type="primary" icon="el-icon-document" @click="exportLogs">导出</el-button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="span">
|
|||
|
|
<el-table
|
|||
|
|
:data="tableData"
|
|||
|
|
style="width: 100%"
|
|||
|
|
:height="tHeight"
|
|||
|
|
:cell-style="{background:'#fff'}"
|
|||
|
|
border
|
|||
|
|
>
|
|||
|
|
<el-table-column
|
|||
|
|
prop="username"
|
|||
|
|
label="用户名"
|
|||
|
|
:width="flexColumnWidth('username', tableData,3)">
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column
|
|||
|
|
prop="operation_time"
|
|||
|
|
label="操作时间"
|
|||
|
|
width="140">
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column
|
|||
|
|
prop="operation"
|
|||
|
|
label="操作记录"
|
|||
|
|
:width="flexColumnWidth('operation', tableData,4)"
|
|||
|
|
class-name="left-aligned-column">
|
|||
|
|
</el-table-column>
|
|||
|
|
<!-- <el-table-column
|
|||
|
|
label="操作"
|
|||
|
|
width="50">
|
|||
|
|
<template slot-scope="scope">
|
|||
|
|
<el-button @click="delLogs(scope.row)" type="text" size="medium" >删除</el-button>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
</el-table> -->
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="block">
|
|||
|
|
<span class="demonstration"></span>
|
|||
|
|
<el-pagination
|
|||
|
|
@size-change="handleSizeChange"
|
|||
|
|
@current-change="handleCurrentChange"
|
|||
|
|
:current-page="currentPage"
|
|||
|
|
:page-sizes="[50,100, 200, 300]"
|
|||
|
|
:page-size="pagesize"
|
|||
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|||
|
|
:total="recordTotal">
|
|||
|
|
</el-pagination>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
`,
|
|||
|
|
data() {
|
|||
|
|
// 获取当前屏幕的分辨率
|
|||
|
|
let screenW = window.screen.width;
|
|||
|
|
let screenH = window.innerHeight;
|
|||
|
|
console.log("screen width:", screenW);
|
|||
|
|
console.log("screen height:", screenH);
|
|||
|
|
return {
|
|||
|
|
tHeight: screenH - 40 - 232,
|
|||
|
|
tableData: [],
|
|||
|
|
input: '', //搜索框
|
|||
|
|
currentPage: 1, //当前页码
|
|||
|
|
pagesize: 50, //每页条数
|
|||
|
|
recordTotal: 0,//记录总数
|
|||
|
|
options: [], //搜索框下拉选项
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
mounted() {
|
|||
|
|
this.getLogs();
|
|||
|
|
this.getUserNames();
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
//获取日志
|
|||
|
|
getLogs(input = '') {
|
|||
|
|
var _this = this;
|
|||
|
|
var objs;
|
|||
|
|
axios.post('/pp/get_operation_log', {
|
|||
|
|
opuser: localStorage.getItem("online_user"),
|
|||
|
|
opuser_uuid: localStorage.getItem("uuid"),
|
|||
|
|
username: input,
|
|||
|
|
index: this.$data.currentPage,
|
|||
|
|
count: this.$data.pagesize
|
|||
|
|
}).then(function (response) {
|
|||
|
|
console.log(response.data);
|
|||
|
|
objs = response.data.data;
|
|||
|
|
rcnt = response.data.total;
|
|||
|
|
_this.$data.tableData = objs;
|
|||
|
|
_this.$data.recordTotal = rcnt;
|
|||
|
|
}).catch(function (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
getLogsByName() {
|
|||
|
|
// console.log("getLogsByName");
|
|||
|
|
// this.getLogs(this.$data.input);
|
|||
|
|
let str = '('
|
|||
|
|
for (var i = 0; i < this.$data.input.length; i++) {
|
|||
|
|
str += "'" + this.$data.input[i] + "',"
|
|||
|
|
}
|
|||
|
|
str = str.substring(0, str.length - 1)
|
|||
|
|
str += ')'
|
|||
|
|
if (str == '()' || str == ')') {
|
|||
|
|
str = ''
|
|||
|
|
}
|
|||
|
|
console.log(str);
|
|||
|
|
this.getLogs(str);
|
|||
|
|
},
|
|||
|
|
//获取输入联想用户名
|
|||
|
|
getUserNames() {
|
|||
|
|
var _this = this;
|
|||
|
|
axios.post('/pp/get_operation_log_user', {
|
|||
|
|
opuser: localStorage.getItem("online_user"),
|
|||
|
|
opuser_uuid: localStorage.getItem("uuid"),
|
|||
|
|
}).then(function (response) {
|
|||
|
|
console.log(response.data.data);
|
|||
|
|
var objs = response.data.data;
|
|||
|
|
for (var i = 0; i < objs.length; i++) {
|
|||
|
|
_this.$data.options.push({ value: objs[i] });
|
|||
|
|
}
|
|||
|
|
}).catch(function (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 获取建议列表的方法
|
|||
|
|
querySearch(queryString, cb) {
|
|||
|
|
// 过滤匹配的选项
|
|||
|
|
const results = queryString ? this.options.filter(option =>
|
|||
|
|
option.value.toLowerCase().includes(queryString.toLowerCase())
|
|||
|
|
) : this.options;
|
|||
|
|
// 调用回调函数返回结果
|
|||
|
|
cb(results || []);
|
|||
|
|
},
|
|||
|
|
//删除日志
|
|||
|
|
delLogs(row) {
|
|||
|
|
var _this = this;
|
|||
|
|
axios.post('/pp/del_operation_log', {
|
|||
|
|
opuser: localStorage.getItem("online_user"),
|
|||
|
|
opuser_uuid: localStorage.getItem("uuid"),
|
|||
|
|
ID: row.id
|
|||
|
|
}).then(function (response) {
|
|||
|
|
console.log(response.data);
|
|||
|
|
//刷新页面
|
|||
|
|
_this.getLogs();
|
|||
|
|
}).catch(function (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
input_change() {
|
|||
|
|
console.log("input_change");
|
|||
|
|
this.getLogs();
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
|
|||
|
|
//分页
|
|||
|
|
//每页条数改变时触发
|
|||
|
|
handleSizeChange(val) {
|
|||
|
|
console.log(`每页 ${val} 条`);
|
|||
|
|
this.pagesize = val;
|
|||
|
|
this.getLogs(this.$data.input);
|
|||
|
|
},
|
|||
|
|
//当前页码改变时触发
|
|||
|
|
handleCurrentChange(val) {
|
|||
|
|
console.log(`当前页: ${val}`);
|
|||
|
|
this.currentPage = val;
|
|||
|
|
this.getLogs(this.$data.input);
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 根据内容设置列表宽度
|
|||
|
|
flexColumnWidth(str, arr1, fontNum = 4, flag = 'max') {
|
|||
|
|
return window.flexColumnWidth(str, arr1, fontNum, flag);
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
//导出日志
|
|||
|
|
exportLogs() {
|
|||
|
|
var _this = this;
|
|||
|
|
var _this = this;
|
|||
|
|
let str = '('
|
|||
|
|
for (var i = 0; i < this.$data.input.length; i++) {
|
|||
|
|
str += "'" + this.$data.input[i] + "',"
|
|||
|
|
}
|
|||
|
|
str = str.substring(0, str.length - 1)
|
|||
|
|
str += ')'
|
|||
|
|
if (str == '()' || str == ')') {
|
|||
|
|
str = ''
|
|||
|
|
}
|
|||
|
|
axios.post('/pp/export_operation_log', {
|
|||
|
|
opuser: localStorage.getItem("online_user"),
|
|||
|
|
opuser_uuid: localStorage.getItem("uuid"),
|
|||
|
|
username: str,
|
|||
|
|
}).then(function (response) {
|
|||
|
|
|
|||
|
|
var date = new Date();
|
|||
|
|
//年 getFullYear():四位数字返回年份
|
|||
|
|
var year = date.getFullYear() % 2000; //getFullYear()代替getYear()
|
|||
|
|
console.log(year.toString());
|
|||
|
|
//月 getMonth():0 ~ 11
|
|||
|
|
var month = date.getMonth() + 1;
|
|||
|
|
if (month < 10) {
|
|||
|
|
month = '0' + month
|
|||
|
|
}
|
|||
|
|
//日 getDate():(1 ~ 31)
|
|||
|
|
var day = date.getDate();
|
|||
|
|
if (day < 10) {
|
|||
|
|
day = '0' + day;
|
|||
|
|
}
|
|||
|
|
//时 getHours():(0 ~ 23)
|
|||
|
|
var hour = date.getHours();
|
|||
|
|
if (hour < 10) {
|
|||
|
|
hour = '0' + hour;
|
|||
|
|
}
|
|||
|
|
//分 getMinutes(): (0 ~ 59)
|
|||
|
|
var minute = date.getMinutes();
|
|||
|
|
if (minute < 10) {
|
|||
|
|
minute = '0' + minute;
|
|||
|
|
}
|
|||
|
|
//秒 getSeconds():(0 ~ 59)
|
|||
|
|
var second = date.getSeconds();
|
|||
|
|
if (second < 10) {
|
|||
|
|
second = '0' + second;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var filename = year.toString() + month.toString() + day.toString() + " " + hour.toString() + minute.toString() + second.toString();
|
|||
|
|
filename = "用户日志 " + filename + ".csv"
|
|||
|
|
console.log(response.data);
|
|||
|
|
var fileid = response.data.fileId;
|
|||
|
|
|
|||
|
|
var downUrl = '/pp/download_file' + "?id=" + fileid;
|
|||
|
|
downloadUrl(filename, downUrl);
|
|||
|
|
}).catch(function (error) {
|
|||
|
|
console.log(error);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|