feat: 新增系统操作日志&其他优化

This commit is contained in:
meilin.huang
2022-07-14 11:39:12 +08:00
parent 1c18a01bf6
commit db554ebdc9
38 changed files with 6783 additions and 1388 deletions

5116
mayfly_go_web/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
window.globalConfig = {
"BaseApiUrl": "http://localhost:8888",
"BaseWsUrl": "ws://localhost:8888"
// 默认为空以访问根目录为api请求地址。若前后端分离部署可单独配置该后端api请求地址
"BaseApiUrl": "",
"BaseWsUrl": ""
}

View File

@@ -1,6 +1,6 @@
const config = {
baseApiUrl: `${(window as any).globalConfig.BaseApiUrl}/api`,
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl}/api`
baseApiUrl: `${(window as any).globalConfig.BaseApiUrl}/api`,
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${location.host}`}/api`
}
export default config

View File

@@ -10,6 +10,7 @@ export const imports = {
"ResourceList": () => import('@/views/system/resource'),
"RoleList": () => import('@/views/system/role'),
"AccountList": () => import('@/views/system/account'),
"SyslogList": () => import('@/views/system/syslog/SyslogList.vue'),
// project
"ProjectList": () => import('@/views/ops/project/ProjectList.vue'),
// db

View File

@@ -22,5 +22,5 @@ export const dbApi = {
getSqlNames: Api.create("/dbs/{id}/sql-names", 'get'),
deleteDbSql: Api.create("/dbs/{id}/sql", 'delete'),
// 获取数据库sql执行记录
getSqlExecs: Api.create("/dbs/{id}/sql-execs", 'get'),
getSqlExecs: Api.create("/dbs/{dbId}/sql-execs", 'get'),
}

View File

@@ -33,5 +33,5 @@ export const accountApi = {
}
export const logApi = {
list: Api.create("/sys/logs", "get")
list: Api.create("/syslogs", "get")
}

View File

@@ -10,15 +10,14 @@
<div style="float: right">
<el-input
placeholder="请输入角色名称"
placeholder="请输入角色名称"
class="mr2"
size="small"
style="width: 300px"
style="width: 200px"
v-model="query.name"
@clear="search"
clearable
></el-input>
<el-button @click="search" type="success" icon="search" size="small"></el-button>
<el-button @click="search" type="success" icon="search"></el-button>
</div>
<el-table :data="roles" @current-change="choose" ref="table" style="width: 100%">
<el-table-column label="选择" width="50px">

View File

@@ -0,0 +1,103 @@
<template>
<div class="role-list">
<el-card>
<div style="float: right">
<el-select
remote
:remote-method="getAccount"
v-model="query.creatorId"
filterable
placeholder="请输入并选择账号"
clearable
class="mr5"
>
<el-option v-for="item in accounts" :key="item.id" :label="item.username" :value="item.id"> </el-option>
</el-select>
<el-select v-model="query.type" filterable placeholder="请选择操作结果" clearable class="mr5">
<el-option label="成功" :value="1"> </el-option>
<el-option label="失败" :value="2"> </el-option>
</el-select>
<el-button @click="search" type="success" icon="search"></el-button>
</div>
<el-table :data="logs" style="width: 100%">
<el-table-column prop="creator" label="操作人" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="createTime" label="操作时间" min-width="160">
<template #default="scope">
{{ $filters.dateFormat(scope.row.createTime) }}
</template>
</el-table-column>
<el-table-column prop="type" label="结果" min-width="65">
<template #default="scope">
<el-tag v-if="scope.row.type == 1" type="success" size="small">成功</el-tag>
<el-tag v-if="scope.row.type == 2" type="danger" size="small">失败</el-tag>
</template>
</el-table-column>
<el-table-column prop="description" label="描述" min-width="160" show-overflow-tooltip></el-table-column>
<el-table-column prop="reqParam" label="请求信息" min-width="300" show-overflow-tooltip></el-table-column>
<el-table-column prop="resp" label="响应信息" min-width="200" show-overflow-tooltip></el-table-column>
</el-table>
<el-row style="margin-top: 20px" type="flex" justify="end">
<el-pagination
style="text-align: right"
@current-change="handlePageChange"
:total="total"
layout="prev, pager, next, total, jumper"
v-model:current-page="query.pageNum"
:page-size="query.pageSize"
></el-pagination>
</el-row>
</el-card>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { logApi, accountApi } from '../api';
export default defineComponent({
name: 'SyslogList',
components: {},
setup() {
const state = reactive({
query: {
pageNum: 1,
pageSize: 10,
name: null,
},
total: 0,
logs: [],
accounts: [],
});
onMounted(() => {
search();
});
const search = async () => {
let res = await logApi.list.request(state.query);
state.logs = res.list;
state.total = res.total;
};
const handlePageChange = (curPage: number) => {
state.query.pageNum = curPage;
search();
};
const getAccount = (username: any) => {
accountApi.list.request({ username }).then((res) => {
state.accounts = res.list;
});
};
return {
...toRefs(state),
search,
handlePageChange,
getAccount,
};
},
});
</script>
<style lang="scss">
</style>

View File

@@ -30,7 +30,6 @@ const viteConfig: UserConfig = {
target: 'http://localhost:8888',
ws: true,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '/'),
},
},
},

File diff suppressed because it is too large Load Diff