update 优化 日志管理使用索引提升查询性能

update 优化 框架时间检索使用时间默认值 00:00:00 - 23:59:59
2.X
疯狂的狮子Li 2023-03-07 23:48:52 +08:00
parent 2868a94cbc
commit 95fc67e577
16 changed files with 937 additions and 905 deletions

View File

@ -51,11 +51,12 @@
<el-date-picker <el-date-picker
v-model="daterange${AttrName}" v-model="daterange${AttrName}"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
#end #end

View File

@ -51,11 +51,12 @@
<el-date-picker <el-date-picker
v-model="daterange${AttrName}" v-model="daterange${AttrName}"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
#end #end

View File

@ -50,11 +50,12 @@
<el-form-item label="${comment}" style="width: 308px"> <el-form-item label="${comment}" style="width: 308px">
<el-date-picker <el-date-picker
v-model="daterange${AttrName}" v-model="daterange${AttrName}"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
#end #end

View File

@ -50,11 +50,12 @@
<el-form-item label="${comment}" style="width: 308px"> <el-form-item label="${comment}" style="width: 308px">
<el-date-picker <el-date-picker
v-model="daterange${AttrName}" v-model="daterange${AttrName}"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
#end #end

View File

@ -24,11 +24,12 @@
v-model="daterangeCreateTime" v-model="daterangeCreateTime"
size="small" size="small"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -15,11 +15,12 @@
v-model="daterangeCreateTime" v-model="daterangeCreateTime"
size="small" size="small"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -33,11 +33,12 @@
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -1,347 +1,348 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="字典名称" prop="dictName"> <el-form-item label="字典名称" prop="dictName">
<el-input <el-input
v-model="queryParams.dictName" v-model="queryParams.dictName"
placeholder="请输入字典名称" placeholder="请输入字典名称"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="字典类型" prop="dictType"> <el-form-item label="字典类型" prop="dictType">
<el-input <el-input
v-model="queryParams.dictType" v-model="queryParams.dictType"
placeholder="请输入字典类型" placeholder="请输入字典类型"
clearable clearable
style="width: 240px" style="width: 240px"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="字典状态" placeholder="字典状态"
clearable clearable
style="width: 240px" style="width: 240px"
> >
<el-option <el-option
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> :default-time="['00:00:00', '23:59:59']"
</el-form-item> ></el-date-picker>
<el-form-item> </el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form> </el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-row :gutter="10" class="mb8">
<el-button <el-col :span="1.5">
type="primary" <el-button
plain type="primary"
icon="el-icon-plus" plain
size="mini" icon="el-icon-plus"
@click="handleAdd" size="mini"
v-hasPermi="['system:dict:add']" @click="handleAdd"
>新增</el-button> v-hasPermi="['system:dict:add']"
</el-col> >新增</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="success" <el-button
plain type="success"
icon="el-icon-edit" plain
size="mini" icon="el-icon-edit"
:disabled="single" size="mini"
@click="handleUpdate" :disabled="single"
v-hasPermi="['system:dict:edit']" @click="handleUpdate"
>修改</el-button> v-hasPermi="['system:dict:edit']"
</el-col> >修改</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-delete" plain
size="mini" icon="el-icon-delete"
:disabled="multiple" size="mini"
@click="handleDelete" :disabled="multiple"
v-hasPermi="['system:dict:remove']" @click="handleDelete"
>删除</el-button> v-hasPermi="['system:dict:remove']"
</el-col> >删除</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="warning" <el-button
plain type="warning"
icon="el-icon-download" plain
size="mini" icon="el-icon-download"
@click="handleExport" size="mini"
v-hasPermi="['system:dict:export']" @click="handleExport"
>导出</el-button> v-hasPermi="['system:dict:export']"
</el-col> >导出</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-refresh" plain
size="mini" icon="el-icon-refresh"
@click="handleRefreshCache" size="mini"
v-hasPermi="['system:dict:remove']" @click="handleRefreshCache"
>刷新缓存</el-button> v-hasPermi="['system:dict:remove']"
</el-col> >刷新缓存</el-button>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-col>
</el-row> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
<el-table-column label="字典编号" align="center" prop="dictId" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" /> <el-table-column label="字典编号" align="center" prop="dictId" />
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
<template slot-scope="scope"> <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
<router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type"> <template slot-scope="scope">
<span>{{ scope.row.dictType }}</span> <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
</router-link> <span>{{ scope.row.dictType }}</span>
</template> </router-link>
</el-table-column> </template>
<el-table-column label="状态" align="center" prop="status"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="状态" align="center" prop="status">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <template slot-scope="scope">
</template> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</el-table-column> </template>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<template slot-scope="scope"> <el-table-column label="创建时间" align="center" prop="createTime" width="180">
<span>{{ parseTime(scope.row.createTime) }}</span> <template slot-scope="scope">
</template> <span>{{ parseTime(scope.row.createTime) }}</span>
</el-table-column> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-button <template slot-scope="scope">
size="mini" <el-button
type="text" size="mini"
icon="el-icon-edit" type="text"
@click="handleUpdate(scope.row)" icon="el-icon-edit"
v-hasPermi="['system:dict:edit']" @click="handleUpdate(scope.row)"
>修改</el-button> v-hasPermi="['system:dict:edit']"
<el-button >修改</el-button>
size="mini" <el-button
type="text" size="mini"
icon="el-icon-delete" type="text"
@click="handleDelete(scope.row)" icon="el-icon-delete"
v-hasPermi="['system:dict:remove']" @click="handleDelete(scope.row)"
>删除</el-button> v-hasPermi="['system:dict:remove']"
</template> >删除</el-button>
</el-table-column> </template>
</el-table> </el-table-column>
</el-table>
<pagination
v-show="total>0" <pagination
:total="total" v-show="total>0"
:page.sync="queryParams.pageNum" :total="total"
:limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum"
@pagination="getList" :limit.sync="queryParams.pageSize"
/> @pagination="getList"
/>
<!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <!-- 添加或修改参数配置对话框 -->
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form-item label="字典名称" prop="dictName"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-input v-model="form.dictName" placeholder="请输入字典名称" /> <el-form-item label="字典名称" prop="dictName">
</el-form-item> <el-input v-model="form.dictName" placeholder="请输入字典名称" />
<el-form-item label="字典类型" prop="dictType"> </el-form-item>
<el-input v-model="form.dictType" placeholder="请输入字典类型" /> <el-form-item label="字典类型" prop="dictType">
</el-form-item> <el-input v-model="form.dictType" placeholder="请输入字典类型" />
<el-form-item label="状态" prop="status"> </el-form-item>
<el-radio-group v-model="form.status"> <el-form-item label="状态" prop="status">
<el-radio <el-radio-group v-model="form.status">
v-for="dict in dict.type.sys_normal_disable" <el-radio
:key="dict.value" v-for="dict in dict.type.sys_normal_disable"
:label="dict.value" :key="dict.value"
>{{dict.label}}</el-radio> :label="dict.value"
</el-radio-group> >{{dict.label}}</el-radio>
</el-form-item> </el-radio-group>
<el-form-item label="备注" prop="remark"> </el-form-item>
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-form-item label="备注" prop="remark">
</el-form-item> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
</el-form> </el-form-item>
<div slot="footer" class="dialog-footer"> </el-form>
<el-button type="primary" @click="submitForm"> </el-button> <div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
</div> <el-button @click="cancel"> </el-button>
</el-dialog> </div>
</div> </el-dialog>
</template> </div>
</template>
<script>
import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type"; <script>
import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type";
export default {
name: "Dict", export default {
dicts: ['sys_normal_disable'], name: "Dict",
data() { dicts: ['sys_normal_disable'],
return { data() {
// return {
loading: true, //
// loading: true,
ids: [], //
// ids: [],
single: true, //
// single: true,
multiple: true, //
// multiple: true,
showSearch: true, //
// showSearch: true,
total: 0, //
// total: 0,
typeList: [], //
// typeList: [],
title: "", //
// title: "",
open: false, //
// open: false,
dateRange: [], //
// dateRange: [],
queryParams: { //
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
dictName: undefined, pageSize: 10,
dictType: undefined, dictName: undefined,
status: undefined dictType: undefined,
}, status: undefined
// },
form: {}, //
// form: {},
rules: { //
dictName: [ rules: {
{ required: true, message: "字典名称不能为空", trigger: "blur" } dictName: [
], { required: true, message: "字典名称不能为空", trigger: "blur" }
dictType: [ ],
{ required: true, message: "字典类型不能为空", trigger: "blur" } dictType: [
] { required: true, message: "字典类型不能为空", trigger: "blur" }
} ]
}; }
}, };
created() { },
this.getList(); created() {
}, this.getList();
methods: { },
/** 查询字典类型列表 */ methods: {
getList() { /** 查询字典类型列表 */
this.loading = true; getList() {
listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => { this.loading = true;
this.typeList = response.rows; listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.total = response.total; this.typeList = response.rows;
this.loading = false; this.total = response.total;
} this.loading = false;
); }
}, );
// },
cancel() { //
this.open = false; cancel() {
this.reset(); this.open = false;
}, this.reset();
// },
reset() { //
this.form = { reset() {
dictId: undefined, this.form = {
dictName: undefined, dictId: undefined,
dictType: undefined, dictName: undefined,
status: "0", dictType: undefined,
remark: undefined status: "0",
}; remark: undefined
this.resetForm("form"); };
}, this.resetForm("form");
/** 搜索按钮操作 */ },
handleQuery() { /** 搜索按钮操作 */
this.queryParams.pageNum = 1; handleQuery() {
this.getList(); this.queryParams.pageNum = 1;
}, this.getList();
/** 重置按钮操作 */ },
resetQuery() { /** 重置按钮操作 */
this.dateRange = []; resetQuery() {
this.resetForm("queryForm"); this.dateRange = [];
this.handleQuery(); this.resetForm("queryForm");
}, this.handleQuery();
/** 新增按钮操作 */ },
handleAdd() { /** 新增按钮操作 */
this.reset(); handleAdd() {
this.open = true; this.reset();
this.title = "添加字典类型"; this.open = true;
}, this.title = "添加字典类型";
// },
handleSelectionChange(selection) { //
this.ids = selection.map(item => item.dictId) handleSelectionChange(selection) {
this.single = selection.length!=1 this.ids = selection.map(item => item.dictId)
this.multiple = !selection.length this.single = selection.length!=1
}, this.multiple = !selection.length
/** 修改按钮操作 */ },
handleUpdate(row) { /** 修改按钮操作 */
this.reset(); handleUpdate(row) {
const dictId = row.dictId || this.ids this.reset();
getType(dictId).then(response => { const dictId = row.dictId || this.ids
this.form = response.data; getType(dictId).then(response => {
this.open = true; this.form = response.data;
this.title = "修改字典类型"; this.open = true;
}); this.title = "修改字典类型";
}, });
/** 提交按钮 */ },
submitForm: function() { /** 提交按钮 */
this.$refs["form"].validate(valid => { submitForm: function() {
if (valid) { this.$refs["form"].validate(valid => {
if (this.form.dictId != undefined) { if (valid) {
updateType(this.form).then(response => { if (this.form.dictId != undefined) {
this.$modal.msgSuccess("修改成功"); updateType(this.form).then(response => {
this.open = false; this.$modal.msgSuccess("修改成功");
this.getList(); this.open = false;
}); this.getList();
} else { });
addType(this.form).then(response => { } else {
this.$modal.msgSuccess("新增成功"); addType(this.form).then(response => {
this.open = false; this.$modal.msgSuccess("新增成功");
this.getList(); this.open = false;
}); this.getList();
} });
} }
}); }
}, });
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const dictIds = row.dictId || this.ids; handleDelete(row) {
this.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() { const dictIds = row.dictId || this.ids;
return delType(dictIds); this.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() {
}).then(() => { return delType(dictIds);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {});
/** 导出按钮操作 */ },
handleExport() { /** 导出按钮操作 */
this.download('system/dict/type/export', { handleExport() {
...this.queryParams this.download('system/dict/type/export', {
}, `type_${new Date().getTime()}.xlsx`) ...this.queryParams
}, }, `type_${new Date().getTime()}.xlsx`)
/** 刷新缓存按钮操作 */ },
handleRefreshCache() { /** 刷新缓存按钮操作 */
refreshCache().then(() => { handleRefreshCache() {
this.$modal.msgSuccess("刷新成功"); refreshCache().then(() => {
this.$store.dispatch('dict/cleanDict'); this.$modal.msgSuccess("刷新成功");
}); this.$store.dispatch('dict/cleanDict');
} });
} }
}; }
</script> };
</script>

View File

@ -1,242 +1,243 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="登录地址" prop="ipaddr"> <el-form-item label="登录地址" prop="ipaddr">
<el-input <el-input
v-model="queryParams.ipaddr" v-model="queryParams.ipaddr"
placeholder="请输入登录地址" placeholder="请输入登录地址"
clearable clearable
style="width: 240px;" style="width: 240px;"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="用户名称" prop="userName"> <el-form-item label="用户名称" prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="请输入用户名称"
clearable clearable
style="width: 240px;" style="width: 240px;"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="登录状态" placeholder="登录状态"
clearable clearable
style="width: 240px" style="width: 240px"
> >
<el-option <el-option
v-for="dict in dict.type.sys_common_status" v-for="dict in dict.type.sys_common_status"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="登录时间"> <el-form-item label="登录时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> :default-time="['00:00:00', '23:59:59']"
</el-form-item> ></el-date-picker>
<el-form-item> </el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form> </el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-row :gutter="10" class="mb8">
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-delete" plain
size="mini" icon="el-icon-delete"
:disabled="multiple" size="mini"
@click="handleDelete" :disabled="multiple"
v-hasPermi="['system:logininfor:remove']" @click="handleDelete"
>删除</el-button> v-hasPermi="['system:logininfor:remove']"
</el-col> >删除</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-delete" plain
size="mini" icon="el-icon-delete"
@click="handleClean" size="mini"
v-hasPermi="['system:logininfor:remove']" @click="handleClean"
>清空</el-button> v-hasPermi="['system:logininfor:remove']"
</el-col> >清空</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="primary" <el-button
plain type="primary"
icon="el-icon-unlock" plain
size="mini" icon="el-icon-unlock"
:disabled="single" size="mini"
@click="handleUnlock" :disabled="single"
v-hasPermi="['system:logininfor:unlock']" @click="handleUnlock"
>解锁</el-button> v-hasPermi="['system:logininfor:unlock']"
</el-col> >解锁</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="warning" <el-button
plain type="warning"
icon="el-icon-download" plain
size="mini" icon="el-icon-download"
@click="handleExport" size="mini"
v-hasPermi="['system:logininfor:export']" @click="handleExport"
>导出</el-button> v-hasPermi="['system:logininfor:export']"
</el-col> >导出</el-button>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-col>
</el-row> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" /> <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column label="访问编号" align="center" prop="infoId" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> <el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" /> <el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="登录状态" align="center" prop="status"> <el-table-column label="地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<template slot-scope="scope"> <el-table-column label="登录状态" align="center" prop="status">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> <template slot-scope="scope">
</template> <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</el-table-column> </template>
<el-table-column label="描述" align="center" prop="msg" /> </el-table-column>
<el-table-column label="访问时间" align="center" prop="accessTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180"> <el-table-column label="描述" align="center" prop="msg" />
<template slot-scope="scope"> <el-table-column label="访问时间" align="center" prop="accessTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
<span>{{ parseTime(scope.row.accessTime) }}</span> <template slot-scope="scope">
</template> <span>{{ parseTime(scope.row.accessTime) }}</span>
</el-table-column> </template>
</el-table> </el-table-column>
</el-table>
<pagination
v-show="total>0" <pagination
:total="total" v-show="total>0"
:page.sync="queryParams.pageNum" :total="total"
:limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum"
@pagination="getList" :limit.sync="queryParams.pageSize"
/> @pagination="getList"
</div> />
</template> </div>
</template>
<script>
import { list, delLogininfor, cleanLogininfor, unlockLogininfor } from "@/api/system/logininfor"; <script>
import { list, delLogininfor, cleanLogininfor, unlockLogininfor } from "@/api/system/logininfor";
export default {
name: "Logininfor", export default {
dicts: ['sys_common_status'], name: "Logininfor",
data() { dicts: ['sys_common_status'],
return { data() {
// return {
loading: true, //
// loading: true,
ids: [], //
// ids: [],
single: true, //
// single: true,
multiple: true, //
// multiple: true,
selectName: "", //
// selectName: "",
showSearch: true, //
// showSearch: true,
total: 0, //
// total: 0,
list: [], //
// list: [],
dateRange: [], //
// dateRange: [],
defaultSort: {prop: 'loginTime', order: 'descending'}, //
// defaultSort: {prop: 'loginTime', order: 'descending'},
queryParams: { //
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
ipaddr: undefined, pageSize: 10,
userName: undefined, ipaddr: undefined,
status: undefined userName: undefined,
} status: undefined
}; }
}, };
created() { },
this.getList(); created() {
}, this.getList();
methods: { },
/** 查询登录日志列表 */ methods: {
getList() { /** 查询登录日志列表 */
this.loading = true; getList() {
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => { this.loading = true;
this.list = response.rows; list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.total = response.total; this.list = response.rows;
this.loading = false; this.total = response.total;
} this.loading = false;
); }
}, );
/** 搜索按钮操作 */ },
handleQuery() { /** 搜索按钮操作 */
this.queryParams.pageNum = 1; handleQuery() {
this.getList(); this.queryParams.pageNum = 1;
}, this.getList();
/** 重置按钮操作 */ },
resetQuery() { /** 重置按钮操作 */
this.dateRange = []; resetQuery() {
this.resetForm("queryForm"); this.dateRange = [];
this.queryParams.pageNum = 1; this.resetForm("queryForm");
this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order) this.queryParams.pageNum = 1;
}, this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order)
/** 多选框选中数据 */ },
handleSelectionChange(selection) { /** 多选框选中数据 */
this.ids = selection.map(item => item.infoId) handleSelectionChange(selection) {
this.single = selection.length!=1 this.ids = selection.map(item => item.infoId)
this.multiple = !selection.length this.single = selection.length!=1
this.selectName = selection.map(item => item.userName); this.multiple = !selection.length
}, this.selectName = selection.map(item => item.userName);
/** 排序触发事件 */ },
handleSortChange(column, prop, order) { /** 排序触发事件 */
this.queryParams.orderByColumn = column.prop; handleSortChange(column, prop, order) {
this.queryParams.isAsc = column.order; this.queryParams.orderByColumn = column.prop;
this.getList(); this.queryParams.isAsc = column.order;
}, this.getList();
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const infoIds = row.infoId || this.ids; handleDelete(row) {
this.$modal.confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?').then(function() { const infoIds = row.infoId || this.ids;
return delLogininfor(infoIds); this.$modal.confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?').then(function() {
}).then(() => { return delLogininfor(infoIds);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {});
/** 清空按钮操作 */ },
handleClean() { /** 清空按钮操作 */
this.$modal.confirm('是否确认清空所有登录日志数据项?').then(function() { handleClean() {
return cleanLogininfor(); this.$modal.confirm('是否确认清空所有登录日志数据项?').then(function() {
}).then(() => { return cleanLogininfor();
this.getList(); }).then(() => {
this.$modal.msgSuccess("清空成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("清空成功");
}, }).catch(() => {});
/** 解锁按钮操作 */ },
handleUnlock() { /** 解锁按钮操作 */
const username = this.selectName; handleUnlock() {
this.$modal.confirm('是否确认解锁用户"' + username + '"数据项?').then(function() { const username = this.selectName;
return unlockLogininfor(username); this.$modal.confirm('是否确认解锁用户"' + username + '"数据项?').then(function() {
}).then(() => { return unlockLogininfor(username);
this.$modal.msgSuccess("用户" + username + "解锁成功"); }).then(() => {
}).catch(() => {}); this.$modal.msgSuccess("用户" + username + "解锁成功");
}, }).catch(() => {});
/** 导出按钮操作 */ },
handleExport() { /** 导出按钮操作 */
this.download('system/logininfor/export', { handleExport() {
...this.queryParams this.download('system/logininfor/export', {
}, `logininfor_${new Date().getTime()}.xlsx`) ...this.queryParams
} }, `logininfor_${new Date().getTime()}.xlsx`)
} }
}; }
</script> };
</script>

View File

@ -1,304 +1,305 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="系统模块" prop="title"> <el-form-item label="系统模块" prop="title">
<el-input <el-input
v-model="queryParams.title" v-model="queryParams.title"
placeholder="请输入系统模块" placeholder="请输入系统模块"
clearable clearable
style="width: 240px;" style="width: 240px;"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="操作人员" prop="operName"> <el-form-item label="操作人员" prop="operName">
<el-input <el-input
v-model="queryParams.operName" v-model="queryParams.operName"
placeholder="请输入操作人员" placeholder="请输入操作人员"
clearable clearable
style="width: 240px;" style="width: 240px;"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="businessType"> <el-form-item label="类型" prop="businessType">
<el-select <el-select
v-model="queryParams.businessType" v-model="queryParams.businessType"
placeholder="操作类型" placeholder="操作类型"
clearable clearable
style="width: 240px" style="width: 240px"
> >
<el-option <el-option
v-for="dict in dict.type.sys_oper_type" v-for="dict in dict.type.sys_oper_type"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="操作状态" placeholder="操作状态"
clearable clearable
style="width: 240px" style="width: 240px"
> >
<el-option <el-option
v-for="dict in dict.type.sys_common_status" v-for="dict in dict.type.sys_common_status"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="操作时间"> <el-form-item label="操作时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> :default-time="['00:00:00', '23:59:59']"
</el-form-item> ></el-date-picker>
<el-form-item> </el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <el-form-item>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
</el-form-item> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form> </el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-row :gutter="10" class="mb8">
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-delete" plain
size="mini" icon="el-icon-delete"
:disabled="multiple" size="mini"
@click="handleDelete" :disabled="multiple"
v-hasPermi="['system:operlog:remove']" @click="handleDelete"
>删除</el-button> v-hasPermi="['system:operlog:remove']"
</el-col> >删除</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="danger" <el-button
plain type="danger"
icon="el-icon-delete" plain
size="mini" icon="el-icon-delete"
@click="handleClean" size="mini"
v-hasPermi="['system:operlog:remove']" @click="handleClean"
>清空</el-button> v-hasPermi="['system:operlog:remove']"
</el-col> >清空</el-button>
<el-col :span="1.5"> </el-col>
<el-button <el-col :span="1.5">
type="warning" <el-button
plain type="warning"
icon="el-icon-download" plain
size="mini" icon="el-icon-download"
@click="handleExport" size="mini"
v-hasPermi="['system:operlog:export']" @click="handleExport"
>导出</el-button> v-hasPermi="['system:operlog:export']"
</el-col> >导出</el-button>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-col>
</el-row> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" /> <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column label="日志编号" align="center" prop="operId" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="系统模块" align="center" prop="title" /> <el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="操作类型" align="center" prop="businessType"> <el-table-column label="系统模块" align="center" prop="title" />
<template slot-scope="scope"> <el-table-column label="操作类型" align="center" prop="businessType">
<dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/> <template slot-scope="scope">
</template> <dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/>
</el-table-column> </template>
<el-table-column label="请求方式" align="center" prop="requestMethod" /> </el-table-column>
<el-table-column label="操作人员" align="center" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" width="100"/> <el-table-column label="请求方式" align="center" prop="requestMethod" />
<el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" /> <el-table-column label="操作人员" align="center" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" width="100"/>
<el-table-column label="操作状态" align="center" prop="status"> <el-table-column label="主机" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
<template slot-scope="scope"> <el-table-column label="操作状态" align="center" prop="status">
<dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> <template slot-scope="scope">
</template> <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>
</el-table-column> </template>
<el-table-column label="操作日期" align="center" prop="operTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="操作日期" align="center" prop="operTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
<span>{{ parseTime(scope.row.operTime) }}</span> <template slot-scope="scope">
</template> <span>{{ parseTime(scope.row.operTime) }}</span>
</el-table-column> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-button <template slot-scope="scope">
size="mini" <el-button
type="text" size="mini"
icon="el-icon-view" type="text"
@click="handleView(scope.row,scope.index)" icon="el-icon-view"
v-hasPermi="['system:operlog:query']" @click="handleView(scope.row,scope.index)"
>详细</el-button> v-hasPermi="['system:operlog:query']"
</template> >详细</el-button>
</el-table-column> </template>
</el-table> </el-table-column>
</el-table>
<pagination
v-show="total>0" <pagination
:total="total" v-show="total>0"
:page.sync="queryParams.pageNum" :total="total"
:limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum"
@pagination="getList" :limit.sync="queryParams.pageSize"
/> @pagination="getList"
/>
<!-- 操作日志详细 -->
<el-dialog title="操作日志详细" :visible.sync="open" width="700px" append-to-body> <!-- 操作日志详细 -->
<el-form ref="form" :model="form" label-width="100px" size="mini"> <el-dialog title="操作日志详细" :visible.sync="open" width="700px" append-to-body>
<el-row> <el-form ref="form" :model="form" label-width="100px" size="mini">
<el-col :span="12"> <el-row>
<el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item> <el-col :span="12">
<el-form-item <el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
label="登录信息:" <el-form-item
>{{ form.operName }} / {{ form.operIp }}</el-form-item> label="登录信息:"
</el-col> >{{ form.operName }} / {{ form.operIp }}</el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item> <el-col :span="12">
<el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item> <el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
</el-col> <el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
<el-col :span="24"> </el-col>
<el-form-item label="操作方法:">{{ form.method }}</el-form-item> <el-col :span="24">
</el-col> <el-form-item label="操作方法:">{{ form.method }}</el-form-item>
<el-col :span="24"> </el-col>
<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item> <el-col :span="24">
</el-col> <el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
<el-col :span="24"> </el-col>
<el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item> <el-col :span="24">
</el-col> <el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="操作状态:"> <el-col :span="12">
<div v-if="form.status === 0"></div> <el-form-item label="操作状态:">
<div v-else-if="form.status === 1">失败</div> <div v-if="form.status === 0"></div>
</el-form-item> <div v-else-if="form.status === 1">失败</div>
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item> <el-col :span="12">
</el-col> <el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
<el-col :span="24"> </el-col>
<el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item> <el-col :span="24">
</el-col> <el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
</el-row> </el-col>
</el-form> </el-row>
<div slot="footer" class="dialog-footer"> </el-form>
<el-button @click="open = false"> </el-button> <div slot="footer" class="dialog-footer">
</div> <el-button @click="open = false"> </el-button>
</el-dialog> </div>
</div> </el-dialog>
</template> </div>
</template>
<script>
import { list, delOperlog, cleanOperlog } from "@/api/system/operlog"; <script>
import { list, delOperlog, cleanOperlog } from "@/api/system/operlog";
export default {
name: "Operlog", export default {
dicts: ['sys_oper_type', 'sys_common_status'], name: "Operlog",
data() { dicts: ['sys_oper_type', 'sys_common_status'],
return { data() {
// return {
loading: true, //
// loading: true,
ids: [], //
// ids: [],
multiple: true, //
// multiple: true,
showSearch: true, //
// showSearch: true,
total: 0, //
// total: 0,
list: [], //
// list: [],
open: false, //
// open: false,
dateRange: [], //
// dateRange: [],
defaultSort: {prop: 'operTime', order: 'descending'}, //
// defaultSort: {prop: 'operTime', order: 'descending'},
form: {}, //
// form: {},
queryParams: { //
pageNum: 1, queryParams: {
pageSize: 10, pageNum: 1,
title: undefined, pageSize: 10,
operName: undefined, title: undefined,
businessType: undefined, operName: undefined,
status: undefined businessType: undefined,
} status: undefined
}; }
}, };
created() { },
this.getList(); created() {
}, this.getList();
methods: { },
/** 查询登录日志 */ methods: {
getList() { /** 查询登录日志 */
this.loading = true; getList() {
list(this.addDateRange(this.queryParams, this.dateRange)).then( response => { this.loading = true;
this.list = response.rows; list(this.addDateRange(this.queryParams, this.dateRange)).then( response => {
this.total = response.total; this.list = response.rows;
this.loading = false; this.total = response.total;
} this.loading = false;
); }
}, );
// },
typeFormat(row, column) { //
return this.selectDictLabel(this.dict.type.sys_oper_type, row.businessType); typeFormat(row, column) {
}, return this.selectDictLabel(this.dict.type.sys_oper_type, row.businessType);
/** 搜索按钮操作 */ },
handleQuery() { /** 搜索按钮操作 */
this.queryParams.pageNum = 1; handleQuery() {
this.getList(); this.queryParams.pageNum = 1;
}, this.getList();
/** 重置按钮操作 */ },
resetQuery() { /** 重置按钮操作 */
this.dateRange = []; resetQuery() {
this.resetForm("queryForm"); this.dateRange = [];
this.queryParams.pageNum = 1; this.resetForm("queryForm");
this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order) this.queryParams.pageNum = 1;
}, this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order)
/** 多选框选中数据 */ },
handleSelectionChange(selection) { /** 多选框选中数据 */
this.ids = selection.map(item => item.operId) handleSelectionChange(selection) {
this.multiple = !selection.length this.ids = selection.map(item => item.operId)
}, this.multiple = !selection.length
/** 排序触发事件 */ },
handleSortChange(column, prop, order) { /** 排序触发事件 */
this.queryParams.orderByColumn = column.prop; handleSortChange(column, prop, order) {
this.queryParams.isAsc = column.order; this.queryParams.orderByColumn = column.prop;
this.getList(); this.queryParams.isAsc = column.order;
}, this.getList();
/** 详细按钮操作 */ },
handleView(row) { /** 详细按钮操作 */
this.open = true; handleView(row) {
this.form = row; this.open = true;
}, this.form = row;
/** 删除按钮操作 */ },
handleDelete(row) { /** 删除按钮操作 */
const operIds = row.operId || this.ids; handleDelete(row) {
this.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function() { const operIds = row.operId || this.ids;
return delOperlog(operIds); this.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function() {
}).then(() => { return delOperlog(operIds);
this.getList(); }).then(() => {
this.$modal.msgSuccess("删除成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("删除成功");
}, }).catch(() => {});
/** 清空按钮操作 */ },
handleClean() { /** 清空按钮操作 */
this.$modal.confirm('是否确认清空所有操作日志数据项?').then(function() { handleClean() {
return cleanOperlog(); this.$modal.confirm('是否确认清空所有操作日志数据项?').then(function() {
}).then(() => { return cleanOperlog();
this.getList(); }).then(() => {
this.$modal.msgSuccess("清空成功"); this.getList();
}).catch(() => {}); this.$modal.msgSuccess("清空成功");
}, }).catch(() => {});
/** 导出按钮操作 */ },
handleExport() { /** 导出按钮操作 */
this.download('system/operlog/export', { handleExport() {
...this.queryParams this.download('system/operlog/export', {
}, `operlog_${new Date().getTime()}.xlsx`) ...this.queryParams
} }, `operlog_${new Date().getTime()}.xlsx`)
} }
}; }
</script> };
</script>

View File

@ -33,11 +33,12 @@
v-model="daterangeCreateTime" v-model="daterangeCreateTime"
size="small" size="small"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="上传人" prop="createBy"> <el-form-item label="上传人" prop="createBy">

View File

@ -38,11 +38,12 @@
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -67,11 +67,12 @@
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@ -533,6 +533,9 @@ create table sys_oper_log (
); );
alter table sys_oper_log add constraint pk_sys_oper_log primary key (oper_id); alter table sys_oper_log add constraint pk_sys_oper_log primary key (oper_id);
create unique index idx_sys_oper_log_bt on sys_oper_log (business_type);
create unique index idx_sys_oper_log_s on sys_oper_log (status);
create unique index idx_sys_oper_log_ot on sys_oper_log (oper_time);
comment on table sys_oper_log is '操作日志记录'; comment on table sys_oper_log is '操作日志记录';
comment on column sys_oper_log.oper_id is '日志主键'; comment on column sys_oper_log.oper_id is '日志主键';
@ -707,6 +710,8 @@ create table sys_logininfor (
); );
alter table sys_logininfor add constraint pk_sys_logininfor primary key (info_id); alter table sys_logininfor add constraint pk_sys_logininfor primary key (info_id);
create unique index idx_sys_logininfor_s on sys_logininfor (status);
create unique index idx_sys_logininfor_lt on sys_logininfor (access_time);
comment on table sys_logininfor is '系统访问记录'; comment on table sys_logininfor is '系统访问记录';
comment on column sys_logininfor.info_id is '访问ID'; comment on column sys_logininfor.info_id is '访问ID';

View File

@ -542,6 +542,10 @@ create table if not exists sys_oper_log
constraint sys_oper_log_pk primary key (oper_id) constraint sys_oper_log_pk primary key (oper_id)
); );
create unique index idx_sys_oper_log_bt ON sys_oper_log (business_type);
create unique index idx_sys_oper_log_s ON sys_oper_log (status);
create unique index idx_sys_oper_log_ot ON sys_oper_log (oper_time);
comment on table sys_oper_log is '操作日志记录'; comment on table sys_oper_log is '操作日志记录';
comment on column sys_oper_log.oper_id is '日志主键'; comment on column sys_oper_log.oper_id is '日志主键';
comment on column sys_oper_log.title is '模块标题'; comment on column sys_oper_log.title is '模块标题';
@ -578,6 +582,8 @@ create table if not exists sys_dict_type
constraint sys_dict_type_pk primary key (dict_id) constraint sys_dict_type_pk primary key (dict_id)
); );
create unique index sys_dict_type_index1 ON sys_dict_type (dict_type);
comment on table sys_dict_type is '字典类型表'; comment on table sys_dict_type is '字典类型表';
comment on column sys_dict_type.dict_id is '字典主键'; comment on column sys_dict_type.dict_id is '字典主键';
comment on column sys_dict_type.dict_name is '字典名称'; comment on column sys_dict_type.dict_name is '字典名称';
@ -719,6 +725,9 @@ create table if not exists sys_logininfor
constraint sys_logininfor_pk primary key (info_id) constraint sys_logininfor_pk primary key (info_id)
); );
create unique index idx_sys_logininfor_s ON sys_logininfor (status);
create unique index idx_sys_logininfor_lt ON sys_logininfor (access_time);
comment on table sys_logininfor is '系统访问记录'; comment on table sys_logininfor is '系统访问记录';
comment on column sys_logininfor.info_id is '访问ID'; comment on column sys_logininfor.info_id is '访问ID';
comment on column sys_logininfor.user_name is '用户账号'; comment on column sys_logininfor.user_name is '用户账号';

View File

@ -433,7 +433,10 @@ create table sys_oper_log (
status int(1) default 0 comment '操作状态0正常 1异常', status int(1) default 0 comment '操作状态0正常 1异常',
error_msg varchar(2000) default '' comment '错误消息', error_msg varchar(2000) default '' comment '错误消息',
oper_time datetime comment '操作时间', oper_time datetime comment '操作时间',
primary key (oper_id) primary key (oper_id),
key idx_sys_oper_log_bt (business_type),
key idx_sys_oper_log_s (status),
key idx_sys_oper_log_ot (oper_time)
) engine=innodb comment = '操作日志记录'; ) engine=innodb comment = '操作日志记录';
@ -550,7 +553,9 @@ create table sys_logininfor (
status char(1) default '0' comment '登录状态0成功 1失败', status char(1) default '0' comment '登录状态0成功 1失败',
msg varchar(255) default '' comment '提示信息', msg varchar(255) default '' comment '提示信息',
access_time datetime comment '访问时间', access_time datetime comment '访问时间',
primary key (info_id) primary key (info_id),
key idx_sys_logininfor_s (status),
key idx_sys_logininfor_lt (access_time)
) engine=innodb comment = '系统访问记录'; ) engine=innodb comment = '系统访问记录';
-- ---------------------------- -- ----------------------------