feat: redis支持flushdb、菜单资源支持拖拽排序、禁用等

This commit is contained in:
meilin.huang
2023-06-15 19:18:29 +08:00
parent 445cf3716b
commit adc65439e4
26 changed files with 634 additions and 407 deletions

View File

@@ -11,7 +11,7 @@ const config = {
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`, baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`,
// 系统版本 // 系统版本
version: 'v1.4.2' version: 'v1.4.3'
} }
export default config export default config

View File

@@ -48,14 +48,17 @@ const showTagInfo = async () => {
const tagPaths = []; const tagPaths = [];
let nowTag = ''; let nowTag = '';
for (let tagStr of tagStrs) { for (let tagStr of tagStrs) {
if (nowTag) { if (!tagStr) {
nowTag = `${nowTag}/${tagStr}` continue;
} else {
nowTag = tagStr
} }
tagPaths.push(nowTag) if (nowTag) {
nowTag = `${nowTag}${tagStr}/`;
} else {
nowTag = tagStr + '/';
}
tagPaths.push(nowTag);
} }
state.tags = await tagApi.listByQuery.request({ tagPaths: tagPaths.join(',') }) state.tags = await tagApi.listByQuery.request({ tagPaths: tagPaths.join(',') });
} }
</script> </script>

View File

@@ -2,7 +2,8 @@
<div> <div>
<el-row> <el-row>
<el-col :span="4"> <el-col :span="4">
<el-button type="primary" icon="plus" @click="addQueryTab({ id: nowDbInst.id, dbs: nowDbInst.databases }, state.db)" <el-button type="primary" icon="plus"
@click="addQueryTab({ id: nowDbInst.id, dbs: nowDbInst.databases }, state.db)"
size="small">新建查询</el-button> size="small">新建查询</el-button>
</el-col> </el-col>
<el-col :span="20" v-if="state.db"> <el-col :span="20" v-if="state.db">
@@ -23,7 +24,8 @@
</el-row> </el-row>
<el-row type="flex"> <el-row type="flex">
<el-col :span="4" style="border-left: 1px solid #eee; margin-top: 10px"> <el-col :span="4" style="border-left: 1px solid #eee; margin-top: 10px">
<tag-tree ref="tagTreeRef" @node-click="nodeClick" :load="loadNode" :load-contextmenu-items="getContextmenuItems" @current-contextmenu-click="onCurrentContextmenuClick" <tag-tree ref="tagTreeRef" @node-click="nodeClick" :load="loadNode"
:load-contextmenu-items="getContextmenuItems" @current-contextmenu-click="onCurrentContextmenuClick"
:height="state.tagTreeHeight"> :height="state.tagTreeHeight">
<template #prefix="{ data }"> <template #prefix="{ data }">
<span v-if="data.type == NodeType.DbInst"> <span v-if="data.type == NodeType.DbInst">
@@ -246,7 +248,7 @@ const nodeClick = async (data: any) => {
const dataType = data.type; const dataType = data.type;
// 点击数据库,修改当前数据库信息 // 点击数据库,修改当前数据库信息
if (dataType === NodeType.Db || dataType === NodeType.SqlMenu || dataType === NodeType.TableMenu || dataType === NodeType.DbInst) { if (dataType === NodeType.Db || dataType === NodeType.SqlMenu || dataType === NodeType.TableMenu || dataType === NodeType.DbInst) {
changeSchema({ id: params.id, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.database}, params.db); changeSchema({ id: params.id, name: params.name, type: params.type, tagPath: params.tagPath, databases: params.database }, params.db);
return; return;
} }
@@ -490,7 +492,7 @@ const registerSqlCompletionItemProvider = () => {
// // const nextToken = nextTokens[0].toLowerCase() // // const nextToken = nextTokens[0].toLowerCase()
const tokens = textBeforePointer.trim().split(/\s+/) const tokens = textBeforePointer.trim().split(/\s+/)
const lastToken = tokens[tokens.length - 1].toLowerCase() const lastToken = tokens[tokens.length - 1].toLowerCase()
const secondToken = tokens.length >2 && tokens[tokens.length - 2].toLowerCase() || '' const secondToken = tokens.length > 2 && tokens[tokens.length - 2].toLowerCase() || ''
const dbs = nowTab.params?.dbs?.split(' ') || []; const dbs = nowTab.params?.dbs?.split(' ') || [];
// console.log("光标前文本:=>" + textBeforePointerMulti) // console.log("光标前文本:=>" + textBeforePointerMulti)
@@ -499,34 +501,34 @@ const registerSqlCompletionItemProvider = () => {
let suggestions: languages.CompletionItem[] = [] let suggestions: languages.CompletionItem[] = []
const tables = await dbInst.loadTables(db); const tables = await dbInst.loadTables(db);
async function hintTableColumns (tableName, db) { async function hintTableColumns(tableName: any, db: any) {
let dbHits = await dbInst.loadDbHints(db) let dbHits = await dbInst.loadDbHints(db)
let columns = dbHits[tableName] let columns = dbHits[tableName]
let suggestions: languages.CompletionItem[] = [] let suggestions: languages.CompletionItem[] = []
columns?.forEach((a: string, index: any) => { columns?.forEach((a: string, index: any) => {
// 字段数据格式 字段名 字段注释, 如: create_time [datetime][创建时间] // 字段数据格式 字段名 字段注释, 如: create_time [datetime][创建时间]
const nameAndComment = a.split(" ") const nameAndComment = a.split(" ")
const fieldName = nameAndComment[0] const fieldName = nameAndComment[0]
suggestions.push({ suggestions.push({
label: { label: {
label: a, label: a,
description: 'column' description: 'column'
}, },
kind: monaco.languages.CompletionItemKind.Property, kind: monaco.languages.CompletionItemKind.Property,
detail: '', // 不显示detail, 否则选中时备注等会被遮挡 detail: '', // 不显示detail, 否则选中时备注等会被遮挡
insertText: fieldName + ' ', // create_time insertText: fieldName + ' ', // create_time
range, range,
sortText: 100 + index + '' // 使用表字段声明顺序排序,排序需为字符串类型 sortText: 100 + index + '' // 使用表字段声明顺序排序,排序需为字符串类型
}); });
}) })
return suggestions return suggestions
} }
if (lastToken.indexOf('.') > -1 || secondToken.indexOf('.') > -1) { if (lastToken.indexOf('.') > -1 || secondToken.indexOf('.') > -1) {
// 如果是.触发代码提示,则进行【 库.表名联想 】 或 【 表别名.表字段联想 】 // 如果是.触发代码提示,则进行【 库.表名联想 】 或 【 表别名.表字段联想 】
let str = lastToken.substring(0, lastToken.lastIndexOf('.')) let str = lastToken.substring(0, lastToken.lastIndexOf('.'))
if(lastToken.trim().startsWith('.')){ if (lastToken.trim().startsWith('.')) {
str = secondToken str = secondToken
} }
// 库.表名联想 // 库.表名联想
@@ -556,27 +558,27 @@ const registerSqlCompletionItemProvider = () => {
let db = tableInfo.dbName; let db = tableInfo.dbName;
// 取出表名并提示 // 取出表名并提示
let suggestions = await hintTableColumns(tableName, db); let suggestions = await hintTableColumns(tableName, db);
if(suggestions.length > 0){ if (suggestions.length > 0) {
return { suggestions }; return { suggestions };
} }
} }
return { suggestions: [] } return { suggestions: [] }
}else{ } else {
// 如果sql里含有表名则提示表字段 // 如果sql里含有表名则提示表字段
let mat = textBeforePointerMulti.match(/from\n*\s+\n*(\w+)\n*\s+\n*/i) let mat = textBeforePointerMulti.match(/from\n*\s+\n*(\w+)\n*\s+\n*/i)
if(mat && mat.length > 1){ if (mat && mat.length > 1) {
let tableName = mat[1] let tableName = mat[1]
// 取出表名并提示 // 取出表名并提示
let suggestions = await hintTableColumns(tableName, db); let addSuggestions = await hintTableColumns(tableName, db);
if(suggestions.length > 0){ if (addSuggestions.length > 0) {
return { suggestions }; suggestions = suggestions.concat(addSuggestions)
} }
} }
} }
// 表名联想 // 表名联想
tables.forEach((tableMeta: any) => { tables.forEach((tableMeta: any) => {
const {tableName, tableComment} = tableMeta; const { tableName, tableComment } = tableMeta;
suggestions.push({ suggestions.push({
label: { label: {
label: tableName + ' - ' + tableComment, label: tableName + ' - ' + tableComment,

View File

@@ -101,7 +101,7 @@
</el-dialog> </el-dialog>
<el-dialog v-model="addDataDialog.visible" :title="addDataDialog.title" :destroy-on-close="true" width="600px"> <el-dialog v-model="addDataDialog.visible" :title="addDataDialog.title" :destroy-on-close="true" width="600px">
<el-form ref="dataForm" :model="addDataDialog.data" label-width="160px"> <el-form ref="dataForm" :model="addDataDialog.data" label-width="160px" size="small">
<el-form-item v-for="column in columns" class="w100" :prop="column.columnName" :label="column.columnName" <el-form-item v-for="column in columns" class="w100" :prop="column.columnName" :label="column.columnName"
:required="column.nullable != 'YES' && column.columnKey != 'PRI'"> :required="column.nullable != 'YES' && column.columnKey != 'PRI'">
<el-input-number v-if="DbInst.isNumber(column.columnType)" <el-input-number v-if="DbInst.isNumber(column.columnType)"

View File

@@ -48,6 +48,7 @@
<el-button @click="scan()" icon="bottom" plain>scan</el-button> <el-button @click="scan()" icon="bottom" plain>scan</el-button>
<el-button @click="showNewKeyDialog" type="primary" icon="plus" plain <el-button @click="showNewKeyDialog" type="primary" icon="plus" plain
v-auth="'redis:data:save'"></el-button> v-auth="'redis:data:save'"></el-button>
<el-button @click="flushDb" type="danger" plain v-auth="'redis:data:save'">flush</el-button>
</el-form-item> </el-form-item>
<div style="float: right"> <div style="float: right">
<span>keys: {{ state.dbsize }}</span> <span>keys: {{ state.dbsize }}</span>
@@ -338,11 +339,6 @@ const showKeyDetail = async (row: any) => {
state.keyDetailDialog.visible = true; state.keyDetailDialog.visible = true;
}; };
const closeKeyDetail = () => {
// state.keyDetailDialog.visible = false;
}
const showNewKeyDialog = () => { const showNewKeyDialog = () => {
notNull(state.scanParam.id, '请先选择redis'); notNull(state.scanParam.id, '请先选择redis');
notNull(state.scanParam.db, "请选择要操作的库") notNull(state.scanParam.db, "请选择要操作的库")
@@ -350,6 +346,24 @@ const showNewKeyDialog = () => {
state.newKeyDialog.visible = true; state.newKeyDialog.visible = true;
} }
const flushDb = () => {
ElMessageBox.confirm(`确定清空[${state.scanParam.db}]库的所有key?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
redisApi.flushDb
.request({
id: state.scanParam.id,
db: state.scanParam.db,
})
.then(() => {
ElMessage.success('清除成功!');
searchKey();
});
}).catch(() => { });
}
const cancelNewKey = () => { const cancelNewKey = () => {
resetKeyDetailInfo(); resetKeyDetailInfo();
state.newKeyDialog.visible = false; state.newKeyDialog.visible = false;

View File

@@ -33,6 +33,7 @@ export const redisApi = {
del: Api.newDelete("/redis/{id}/{db}/scan/{cursor}/{count}"), del: Api.newDelete("/redis/{id}/{db}/scan/{cursor}/{count}"),
delKey: Api.newDelete("/redis/{id}/{db}/key"), delKey: Api.newDelete("/redis/{id}/{db}/key"),
flushDb: Api.newDelete("/redis/{id}/{db}/flushdb"),
lrem: Api.newPost("/redis/{id}/{db}/lrem"), lrem: Api.newPost("/redis/{id}/{db}/lrem"),
getListValue: Api.newGet("/redis/{id}/{db}/list-value"), getListValue: Api.newGet("/redis/{id}/{db}/list-value"),

View File

@@ -6,7 +6,8 @@ export const resourceApi = {
save: Api.newPost("/sys/resources"), save: Api.newPost("/sys/resources"),
update: Api.newPut("/sys/resources/{id}"), update: Api.newPut("/sys/resources/{id}"),
del: Api.newDelete("/sys/resources/{id}"), del: Api.newDelete("/sys/resources/{id}"),
changeStatus: Api.newPut("/sys/resources/{id}/{status}") changeStatus: Api.newPut("/sys/resources/{id}/{status}"),
sort: Api.newPost("/sys/resources/sort")
} }
export const roleApi = { export const roleApi = {

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="system-menu-dialog-container layout-pd"> <div class="system-menu-dialog-container layout-pd">
<el-dialog :title="title" :destroy-on-close="true" v-model="dialogVisible" width="800px"> <el-dialog :title="title" :destroy-on-close="true" v-model="dialogVisible" width="800px">
<el-form :model="form" :inline="true" ref="menuForm" :rules="rules" label-width="95px"> <el-form :model="form" :inline="true" ref="menuForm" :rules="rules" label-width="100px">
<el-row :gutter="35"> <el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item class="w100" prop="type" label="类型" required> <el-form-item class="w100" prop="type" label="类型" required>
@@ -19,31 +19,60 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item class="w100" prop="code" label="path|code"> <el-form-item class="w100" prop="code" label="path|code">
<template #label>
path|code
<el-tooltip effect="dark" content="菜单类型则为访问路径(若菜单路径不以'/'开头则访问地址会自动拼接父菜单路径)、否则为资源唯一编码"
placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-input v-model.trim="form.code" placeholder="菜单不以'/'开头则自动拼接父菜单路径"></el-input> <el-input v-model.trim="form.code" placeholder="菜单不以'/'开头则自动拼接父菜单路径"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item class="w100" label="序号" prop="weight" required>
<el-input v-model.number="form.weight" type="number" placeholder="请输入序号"></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" label="图标"> <el-form-item class="w100" label="图标">
<icon-selector v-model="form.meta.icon" /> <icon-selector v-model="form.meta.icon" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" prop="code" label="路由名"> <el-form-item class="w100">
<template #label>
路由名
<el-tooltip effect="dark" content="与vue的组件名一致才可使组件缓存生效如ResourceList" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-input v-model.trim="form.meta.routeName" placeholder="请输入路由名称"></el-input> <el-input v-model.trim="form.meta.routeName" placeholder="请输入路由名称"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" prop="code" label="组件路径"> <el-form-item class="w100" prop="code">
<template #label>
组件路径
<el-tooltip effect="dark" content="访问的组件路径,如:`system/resource/ResourceList`,默认在`views`目录下"
placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-input v-model.trim="form.meta.component" placeholder="请输入组件路径"></el-input> <el-input v-model.trim="form.meta.component" placeholder="请输入组件路径"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" prop="code" label="是否缓存"> <el-form-item class="w100" prop="isKeepAlive">
<template #label>
是否缓存
<el-tooltip effect="dark" content="选择是则会被`keep-alive`缓存(重新进入页面不会刷新页面及重新请求数据)需要路由名与vue的组件名一致" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-select v-model="form.meta.isKeepAlive" placeholder="请选择" class="w100"> <el-select v-model="form.meta.isKeepAlive" placeholder="请选择" class="w100">
<el-option v-for="item in trueFalseOption" :key="item.value" :label="item.label" <el-option v-for="item in trueFalseOption" :key="item.value" :label="item.label"
:value="item.value"> </el-option> :value="item.value"> </el-option>
@@ -51,7 +80,15 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" prop="code" label="是否隐藏"> <el-form-item class="w100">
<template #label>
是否隐藏
<el-tooltip effect="dark" content="选择隐藏则路由将不会出现在菜单栏中,但仍然可以访问。禁用则不可访问与操作" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-select v-model="form.meta.isHide" placeholder="请选择" class="w100"> <el-select v-model="form.meta.isHide" placeholder="请选择" class="w100">
<el-option v-for="item in trueFalseOption" :key="item.value" :label="item.label" <el-option v-for="item in trueFalseOption" :key="item.value" :label="item.label"
:value="item.value"> </el-option> :value="item.value"> </el-option>
@@ -67,10 +104,16 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="form.type === menuTypeValue">
<el-form-item class="w100" prop="code" label="外链"> <el-form-item class="w100" prop="linkType">
<template #label>
外链
<el-tooltip effect="dark" content="内嵌: 以iframe展示、外链: 新标签打开" placement="top">
<el-icon>
<question-filled />
</el-icon>
</el-tooltip>
</template>
<el-select class="w100" @change="changeIsIframe" v-model="form.meta.linkType" placeholder="请选择"> <el-select class="w100" @change="changeIsIframe" v-model="form.meta.linkType" placeholder="请选择">
<!-- <el-option v-for="item in trueFalseOption" :key="item.value" :label="item.label"
:value="item.value"> </el-option> -->
<el-option :key="0" label="否" :value="0"> </el-option> <el-option :key="0" label="否" :value="0"> </el-option>
<el-option :key="1" label="内嵌" :value="1"> </el-option> <el-option :key="1" label="内嵌" :value="1"> </el-option>
<el-option :key="2" label="外链" :value="2"> </el-option> <el-option :key="2" label="外链" :value="2"> </el-option>
@@ -146,13 +189,6 @@ const rules = {
trigger: ['change', 'blur'], trigger: ['change', 'blur'],
}, },
], ],
weight: [
{
required: true,
message: '请输入序号',
trigger: ['change', 'blur'],
},
],
} }
const trueFalseOption = [ const trueFalseOption = [
@@ -174,7 +210,6 @@ const state = reactive({
pid: null, pid: null,
code: null, code: null,
type: null, type: null,
weight: 0,
meta: { meta: {
routeName: '', routeName: '',
icon: '', icon: '',

View File

@@ -3,19 +3,20 @@
<div class="toolbar"> <div class="toolbar">
<div> <div>
<span style="font-size: 14px"> <span style="font-size: 14px">
<SvgIcon name="info-filled" />红色字体表示禁用状态 <SvgIcon name="info-filled" />红色橙色字体表示禁用状态
</span> </span>
</div> </div>
<el-button v-auth="'resource:add'" type="primary" icon="plus" @click="addResource(false)">添加</el-button> <el-button v-auth="'resource:add'" type="primary" icon="plus" @click="addResource(false)">添加</el-button>
</div> </div>
<el-tree class="none-select" :indent="38" node-key="id" :props="props" :data="data" <el-tree class="none-select" :indent="38" node-key="id" :props="props" :data="data" @node-expand="handleNodeExpand"
@node-expand="handleNodeExpand" @node-collapse="handleNodeCollapse" @node-collapse="handleNodeCollapse" :default-expanded-keys="defaultExpandedKeys" :expand-on-click-node="false"
:default-expanded-keys="defaultExpandedKeys" :expand-on-click-node="false"> draggable :allow-drop="allowDrop" @node-drop="handleDrop">
<template #default="{ data }"> <template #default="{ data }">
<span class="custom-tree-node"> <span class="custom-tree-node">
<span style="font-size: 13px" v-if="data.type === menuTypeValue"> <span style="font-size: 13px" v-if="data.type === menuTypeValue">
<span style="color: #3c8dbc"></span> <span style="color: #3c8dbc"></span>
{{ data.name }} <span v-if="data.status == 1">{{ data.name }}</span>
<span v-if="data.status == -1" style="color: #e6a23c;">{{ data.name }}</span>
<span style="color: #3c8dbc"></span> <span style="color: #3c8dbc"></span>
<el-tag v-if="data.children !== null" size="small">{{ data.children.length }}</el-tag> <el-tag v-if="data.children !== null" size="small">{{ data.children.length }}</el-tag>
</span> </span>
@@ -31,21 +32,17 @@
<el-link v-auth="'resource:update'" @click.prevent="editResource(data)" class="ml5" type="primary" <el-link v-auth="'resource:update'" @click.prevent="editResource(data)" class="ml5" type="primary"
icon="edit" :underline="false" /> icon="edit" :underline="false" />
<el-link v-auth="'resource:add'" @click.prevent="addResource(data)" <el-link v-auth="'resource:add'" @click.prevent="addResource(data)" v-if="data.type === menuTypeValue"
v-if="data.type === menuTypeValue" icon="circle-plus" :underline="false" icon="circle-plus" :underline="false" type="success" class="ml5" />
type="success" class="ml5" />
<el-link v-auth="'resource:changeStatus'" @click.prevent="changeStatus(data, -1)" <el-link v-auth="'resource:changeStatus'" @click.prevent="changeStatus(data, -1)"
v-if="data.status === 1 && data.type === permissionTypeValue" v-if="data.status === 1" icon="circle-close" :underline="false" type="warning" class="ml5" />
icon="circle-close" :underline="false" type="warning" class="ml5" />
<el-link v-auth="'resource:changeStatus'" @click.prevent="changeStatus(data, 1)" <el-link v-auth="'resource:changeStatus'" @click.prevent="changeStatus(data, 1)"
v-if="data.status === -1 && data.type === permissionTypeValue" v-if="data.status === -1" type="success" icon="circle-check" :underline="false" plain class="ml5" />
type="success" icon="circle-check" :underline="false" plain class="ml5" />
<el-link v-auth="'resource:delete'" v-if="data.children == null && data.name !== '首页'" <el-link v-auth="'resource:delete'" @click.prevent="deleteMenu(data)" type="danger" icon="delete"
@click.prevent="deleteMenu(data)" type="danger" icon="delete" :underline="false" plain :underline="false" plain class="ml5" />
class="ml5" />
</span> </span>
</template> </template>
</el-tree> </el-tree>
@@ -61,7 +58,9 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="名称">{{ infoDialog.data.name }}</el-descriptions-item> <el-descriptions-item label="名称">{{ infoDialog.data.name }}</el-descriptions-item>
<el-descriptions-item label="code[菜单path]">{{ infoDialog.data.code }}</el-descriptions-item> <el-descriptions-item label="code[菜单path]">{{ infoDialog.data.code }}</el-descriptions-item>
<el-descriptions-item label="序号">{{ infoDialog.data.weight }}</el-descriptions-item> <el-descriptions-item v-if="infoDialog.data.type == menuTypeValue" label="图标">
<SvgIcon :name="infoDialog.data.meta.icon" />
</el-descriptions-item>
<el-descriptions-item v-if="infoDialog.data.type == menuTypeValue" label="路由名"> <el-descriptions-item v-if="infoDialog.data.type == menuTypeValue" label="路由名">
{{ infoDialog.data.meta.routeName }} {{ infoDialog.data.meta.routeName }}
</el-descriptions-item> </el-descriptions-item>
@@ -117,7 +116,7 @@ const state = reactive({
type: null, type: null,
title: '', title: '',
visible: false, visible: false,
data: { pid: 0, type: 1, weight: 1 }, data: { pid: 0, type: 1 },
// 资源类型选择是否选 // 资源类型选择是否选
typeDisabled: true, typeDisabled: true,
}, },
@@ -134,7 +133,6 @@ const state = reactive({
modifier: '', modifier: '',
createTime: '', createTime: '',
updateTime: '', updateTime: '',
weight: null,
code: '', code: '',
}, },
}, },
@@ -182,7 +180,7 @@ const deleteMenu = (data: any) => {
const addResource = (data: any) => { const addResource = (data: any) => {
let dialog = state.dialogForm; let dialog = state.dialogForm;
dialog.data = { pid: 0, type: 1, weight: 1 }; dialog.data = { pid: 0, type: 1 };
// 添加顶级菜单情况 // 添加顶级菜单情况
if (!data) { if (!data) {
dialog.typeDisabled = true; dialog.typeDisabled = true;
@@ -213,7 +211,6 @@ const addResource = (data: any) => {
} else { } else {
dialog.data.type = menuTypeValue; dialog.data.type = menuTypeValue;
} }
dialog.data.weight = data.children.length + 1;
} }
dialog.visible = true; dialog.visible = true;
}; };
@@ -242,7 +239,7 @@ const changeStatus = async (data: any, status: any) => {
id: data.id, id: data.id,
status: status, status: status,
}); });
data.status = status; search();
ElMessage.success((status === 1 ? '启用' : '禁用') + '成功!'); ElMessage.success((status === 1 ? '启用' : '禁用') + '成功!');
}; };
@@ -271,6 +268,51 @@ const handleNodeCollapse = (data: any, node: any) => {
} }
}; };
const allowDrop = (draggingNode: any, dropNode: any, type: any) => {
// 如果是插入至目标节点
if (type === 'inner') {
// 只有目标节点下没有子节点才允许移动
if (!dropNode.data.children || dropNode.data.children == 0) {
// 只有权限节点可移动至菜单节点下 或者移动菜单
return (draggingNode.data.type == permissionTypeValue && dropNode.data.type == menuTypeValue) ||
(draggingNode.data.type == menuTypeValue && dropNode.data.type == menuTypeValue)
}
return false;
}
return draggingNode.data.type === dropNode.data.type;
}
const handleDrop = async (
draggingNode: any,
dropNode: any,
dropType: any,
) => {
const draggingData = draggingNode.data;
const dropData = dropNode.data;
if (draggingData.pid !== dropData.pid) {
draggingData.pid = dropData.pid;
}
if (dropType === 'inner') {
draggingData.weight = 1;
draggingData.pid = dropData.id;
}
if (dropType === 'before') {
draggingData.weight = dropData.weight - 1;
}
if (dropType === 'after') {
draggingData.weight = dropData.weight + 1;
}
await resourceApi.sort.request([
{
id: draggingData.id,
name: draggingData.name,
pid: draggingData.pid,
weight: draggingData.weight
},
])
}
const removeDeafultExpandId = (id: any) => { const removeDeafultExpandId = (id: any) => {
let index = state.defaultExpandedKeys.indexOf(id); let index = state.defaultExpandedKeys.indexOf(id);
if (index > -1) { if (index > -1) {

View File

@@ -10,8 +10,8 @@
node.label node.label
}}</span> }}</span>
<el-link @click.prevent="info(data)" style="margin-left: 25px" icon="InfoFilled" type="info" <!-- <el-link @click.prevent="info(data)" style="margin-left: 25px" icon="InfoFilled" type="info"
:underline="false" /> :underline="false" /> -->
</span> </span>
</template> </template>
</el-tree> </el-tree>

View File

@@ -15,7 +15,7 @@ require (
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2
go.mongodb.org/mongo-driver v1.11.4 // mongo go.mongodb.org/mongo-driver v1.11.4 // mongo
golang.org/x/crypto v0.9.0 // ssh golang.org/x/crypto v0.10.0 // ssh
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
// gorm // gorm
gorm.io/driver/mysql v1.5.0 gorm.io/driver/mysql v1.5.0
@@ -58,7 +58,7 @@ require (
golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect
golang.org/x/net v0.10.0 // indirect golang.org/x/net v0.10.0 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/sys v0.8.0 // indirect golang.org/x/sys v0.9.0 // indirect
golang.org/x/text v0.9.0 // indirect golang.org/x/text v0.10.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect google.golang.org/protobuf v1.30.0 // indirect
) )

View File

@@ -52,6 +52,7 @@ func (r *Redis) Hset(rc *req.Ctx) {
g := rc.GinCtx g := rc.GinCtx
hashValue := new(form.HashValue) hashValue := new(form.HashValue)
ginx.BindJsonAndValid(g, hashValue) ginx.BindJsonAndValid(g, hashValue)
rc.ReqParam = hashValue
hv := hashValue.Value[0] hv := hashValue.Value[0]
res, err := r.getRedisIns(rc).GetCmdable().HSet(context.TODO(), hashValue.Key, hv["field"].(string), hv["value"]).Result() res, err := r.getRedisIns(rc).GetCmdable().HSet(context.TODO(), hashValue.Key, hv["field"].(string), hv["value"]).Result()

View File

@@ -148,7 +148,7 @@ func (r *Redis) Scan(rc *req.Ctx) {
func (r *Redis) TtlKey(rc *req.Ctx) { func (r *Redis) TtlKey(rc *req.Ctx) {
ri, key := r.checkKeyAndGetRedisIns(rc) ri, key := r.checkKeyAndGetRedisIns(rc)
ttl, err := ri.GetCmdable().TTL(context.Background(), key).Result() ttl, err := ri.GetCmdable().TTL(context.Background(), key).Result()
biz.ErrIsNil(err, "ttl失败: %s") biz.ErrIsNilAppendErr(err, "ttl失败: %s")
if ttl == -1 { if ttl == -1 {
rc.ResData = -1 rc.ResData = -1
@@ -187,3 +187,10 @@ func (r *Redis) PersistKey(rc *req.Ctx) {
rc.ReqParam = fmt.Sprintf("%s -> 移除key[%s]的过期时间", ri.Info.GetLogDesc(), key) rc.ReqParam = fmt.Sprintf("%s -> 移除key[%s]的过期时间", ri.Info.GetLogDesc(), key)
ri.GetCmdable().Persist(context.Background(), key) ri.GetCmdable().Persist(context.Background(), key)
} }
// 清空库
func (r *Redis) FlushDb(rc *req.Ctx) {
ri := r.getRedisIns(rc)
rc.ReqParam = fmt.Sprintf("%s -> flushdb", ri.Info.GetLogDesc())
ri.GetCmdable().FlushDB(context.Background())
}

View File

@@ -91,6 +91,14 @@ func InitRedisRouter(router *gin.RouterGroup) {
Handle(rs.PersistKey) Handle(rs.PersistKey)
}) })
flushDbL := req.NewLogInfo("redis-flushdb").WithSave(true)
redis.DELETE(":id/:db/flushdb", func(c *gin.Context) {
req.NewCtxWithGin(c).
WithLog(flushDbL).
WithRequiredPermission(saveDataP).
Handle(rs.FlushDb)
})
// 获取string类型值 // 获取string类型值
redis.GET(":id/:db/string-value", func(c *gin.Context) { redis.GET(":id/:db/string-value", func(c *gin.Context) {
req.NewCtxWithGin(c).Handle(rs.GetStringValue) req.NewCtxWithGin(c).Handle(rs.GetStringValue)

View File

@@ -2,6 +2,7 @@ package api
import ( import (
"encoding/json" "encoding/json"
"fmt"
"mayfly-go/internal/sys/api/form" "mayfly-go/internal/sys/api/form"
"mayfly-go/internal/sys/api/vo" "mayfly-go/internal/sys/api/vo"
"mayfly-go/internal/sys/application" "mayfly-go/internal/sys/application"
@@ -46,8 +47,20 @@ func (r *Resource) DelResource(rc *req.Ctx) {
} }
func (r *Resource) ChangeStatus(rc *req.Ctx) { func (r *Resource) ChangeStatus(rc *req.Ctx) {
re := &entity.Resource{} rid := uint64(ginx.PathParamInt(rc.GinCtx, "id"))
re.Id = uint64(ginx.PathParamInt(rc.GinCtx, "id")) status := int8(ginx.PathParamInt(rc.GinCtx, "status"))
re.Status = int8(ginx.PathParamInt(rc.GinCtx, "status")) rc.ReqParam = fmt.Sprintf("id = %d, status = %d", rid, status)
r.ResourceApp.Save(re) r.ResourceApp.ChangeStatus(rid, status)
}
func (r *Resource) Sort(rc *req.Ctx) {
var rs []form.ResourceForm
rc.GinCtx.ShouldBindJSON(&rs)
rc.ReqParam = rs
for _, v := range rs {
sortE := &entity.Resource{Pid: v.Pid, Weight: v.Weight}
sortE.Id = uint64(v.Id)
r.ResourceApp.Sort(sortE)
}
} }

View File

@@ -53,6 +53,7 @@ type ResourceManageVO struct {
Name string `json:"name"` Name string `json:"name"`
Type int `json:"type"` Type int `json:"type"`
Status int `json:"status"` Status int `json:"status"`
Weight int `json:"weight"`
Creator string `json:"creator"` Creator string `json:"creator"`
CreateTime *time.Time `json:"createTime"` CreateTime *time.Time `json:"createTime"`
} }

View File

@@ -4,8 +4,11 @@ import (
"mayfly-go/internal/sys/domain/entity" "mayfly-go/internal/sys/domain/entity"
"mayfly-go/internal/sys/domain/repository" "mayfly-go/internal/sys/domain/repository"
"mayfly-go/pkg/biz" "mayfly-go/pkg/biz"
"mayfly-go/pkg/global"
"mayfly-go/pkg/model" "mayfly-go/pkg/model"
"mayfly-go/pkg/utils"
"strings" "strings"
"time"
) )
type Resource interface { type Resource interface {
@@ -17,6 +20,10 @@ type Resource interface {
Save(entity *entity.Resource) Save(entity *entity.Resource)
ChangeStatus(resourceId uint64, status int8)
Sort(re *entity.Resource)
Delete(id uint64) Delete(id uint64)
GetAccountResources(accountId uint64, toEntity any) GetAccountResources(accountId uint64, toEntity any)
@@ -45,6 +52,7 @@ func (r *resourceAppImpl) GetByIdIn(ids []uint64, toEntity any, orderBy ...strin
} }
func (r *resourceAppImpl) Save(resource *entity.Resource) { func (r *resourceAppImpl) Save(resource *entity.Resource) {
// 更新操作
if resource.Id != 0 { if resource.Id != 0 {
if resource.Code != "" { if resource.Code != "" {
oldRes := r.GetById(resource.Id, "Code") oldRes := r.GetById(resource.Id, "Code")
@@ -54,17 +62,88 @@ func (r *resourceAppImpl) Save(resource *entity.Resource) {
} }
} }
model.UpdateById(resource) model.UpdateById(resource)
} else { return
if pid := resource.Pid; pid != 0 {
biz.IsTrue(r.GetById(uint64(pid)) != nil, "该父资源不存在")
}
// 默认启用状态
if resource.Status == 0 {
resource.Status = entity.ResourceStatusEnable
}
r.checkCode(resource.Code)
model.Insert(resource)
} }
// 生成随机八位唯一标识符
ui := utils.RandString(8)
if pid := resource.Pid; pid != 0 {
pResource := r.GetById(uint64(pid))
biz.IsTrue(pResource != nil, "该父资源不存在")
resource.UiPath = pResource.UiPath + ui + entity.ResourceUiPathSp
} else {
resource.UiPath = ui + entity.ResourceUiPathSp
}
// 默认启用状态
if resource.Status == 0 {
resource.Status = entity.ResourceStatusEnable
}
r.checkCode(resource.Code)
resource.Weight = int(time.Now().Unix())
model.Insert(resource)
}
func (r *resourceAppImpl) ChangeStatus(resourceId uint64, status int8) {
resource := r.resourceRepo.GetById(resourceId)
biz.NotNil(resource, "资源不存在")
resource.Status = status
r.resourceRepo.UpdateByUiPathLike(resource)
}
func (r *resourceAppImpl) Sort(sortResource *entity.Resource) {
resource := r.resourceRepo.GetById(sortResource.Id)
biz.NotNil(resource, "资源不存在")
// 未改变父节点,则更新排序值即可
if sortResource.Pid == resource.Pid {
saveE := &entity.Resource{Weight: sortResource.Weight}
saveE.Id = sortResource.Id
r.Save(saveE)
return
}
// 若资源原本唯一标识路径为xxxx/yyyy/zzzz/,则获取其父节点路径标识 xxxx/yyyy/ 与自身节点标识 zzzz/
splitStr := strings.Split(resource.UiPath, entity.ResourceUiPathSp)
// 获取 zzzz/
resourceUi := splitStr[len(splitStr)-2] + entity.ResourceUiPathSp
// 获取父资源路径 xxxx/yyyy/
var parentResourceUiPath string
if len(splitStr) > 2 {
parentResourceUiPath = strings.Split(resource.UiPath, resourceUi)[0]
} else {
parentResourceUiPath = resourceUi
}
newParentResourceUiPath := ""
if sortResource.Pid != 0 {
newParentResource := r.resourceRepo.GetById(uint64(sortResource.Pid))
biz.NotNil(newParentResource, "父资源不存在")
newParentResourceUiPath = newParentResource.UiPath
}
children := r.resourceRepo.GetChildren(resource.UiPath)
for _, v := range children {
if v.Id == sortResource.Id {
continue
}
updateUiPath := &entity.Resource{}
updateUiPath.Id = v.Id
if parentResourceUiPath == resourceUi {
updateUiPath.UiPath = newParentResourceUiPath + v.UiPath
} else {
updateUiPath.UiPath = strings.ReplaceAll(v.UiPath, parentResourceUiPath, newParentResourceUiPath)
}
r.Save(updateUiPath)
}
// 更新零值使用map因为pid=0表示根节点
updateMap := map[string]interface{}{
"pid": sortResource.Pid,
"weight": sortResource.Weight,
"ui_path": newParentResourceUiPath + resourceUi,
}
condition := new(entity.Resource)
condition.Id = sortResource.Id
global.Db.Model(condition).Updates(updateMap)
} }
func (r *resourceAppImpl) checkCode(code string) { func (r *resourceAppImpl) checkCode(code string) {
@@ -73,19 +152,18 @@ func (r *resourceAppImpl) checkCode(code string) {
} }
func (r *resourceAppImpl) Delete(id uint64) { func (r *resourceAppImpl) Delete(id uint64) {
// 查找pid == id的资源 resource := r.resourceRepo.GetById(id)
condition := &entity.Resource{Pid: int(id)} biz.NotNil(resource, "资源不存在")
var resources resourceList
r.resourceRepo.GetResourceList(condition, &resources)
biz.IsTrue(len(resources) == 0, "请先删除该资源的所有子资源") // 删除当前节点及其所有子节点
model.DeleteById(condition, id) children := r.resourceRepo.GetChildren(resource.UiPath)
// 删除角色关联的资源信息 for _, v := range children {
model.DeleteByCondition(&entity.RoleResource{ResourceId: id}) r.resourceRepo.Delete(v.Id)
// 删除角色关联的资源信息
model.DeleteByCondition(&entity.RoleResource{ResourceId: v.Id})
}
} }
func (r *resourceAppImpl) GetAccountResources(accountId uint64, toEntity any) { func (r *resourceAppImpl) GetAccountResources(accountId uint64, toEntity any) {
r.resourceRepo.GetAccountResources(accountId, toEntity) r.resourceRepo.GetAccountResources(accountId, toEntity)
} }
type resourceList []entity.Resource

View File

@@ -5,6 +5,7 @@ import "mayfly-go/pkg/model"
type Resource struct { type Resource struct {
model.Model model.Model
Pid int `json:"pid"` Pid int `json:"pid"`
UiPath string // 唯一标识路径
Type int8 `json:"type"` // 1菜单路由2资源按钮等 Type int8 `json:"type"` // 1菜单路由2资源按钮等
Status int8 `json:"status"` // 1可用-1不可用 Status int8 `json:"status"` // 1可用-1不可用
Code string `json:"code"` Code string `json:"code"`
@@ -24,4 +25,7 @@ const (
// 资源状态 // 资源状态
ResourceTypeMenu int8 = 1 ResourceTypeMenu int8 = 1
ResourceTypePermission int8 = 2 ResourceTypePermission int8 = 2
// 唯一标识路径分隔符
ResourceUiPathSp string = "/"
) )

View File

@@ -18,4 +18,10 @@ type Resource interface {
// 获取账号资源列表 // 获取账号资源列表
GetAccountResources(accountId uint64, toEntity any) GetAccountResources(accountId uint64, toEntity any)
// 获取所有子节点id
GetChildren(uiPath string) []entity.Resource
// 根据uiPath右匹配更新所有相关类资源
UpdateByUiPathLike(resource *entity.Resource)
} }

View File

@@ -38,6 +38,18 @@ func (r *resourceRepoImpl) GetByCondition(condition *entity.Resource, cols ...st
return model.GetBy(condition, cols...) return model.GetBy(condition, cols...)
} }
func (r *resourceRepoImpl) GetChildren(uiPath string) []entity.Resource {
sql := "SELECT id, ui_path FROM t_sys_resource WHERE ui_path LIKE ?"
var rs []entity.Resource
model.GetListBySql2Model(sql, &rs, uiPath+"%")
return rs
}
func (r *resourceRepoImpl) UpdateByUiPathLike(resource *entity.Resource) {
sql := "UPDATE t_sys_resource SET status=? WHERE (ui_path LIKE ?)"
model.ExecSql(sql, resource.Status, resource.UiPath+"%")
}
func (r *resourceRepoImpl) GetAccountResources(accountId uint64, toEntity any) { func (r *resourceRepoImpl) GetAccountResources(accountId uint64, toEntity any) {
sql := `SELECT sql := `SELECT
m.id, m.id,
@@ -51,7 +63,7 @@ func (r *resourceRepoImpl) GetAccountResources(accountId uint64, toEntity any) {
FROM FROM
t_sys_resource m t_sys_resource m
WHERE WHERE
m.STATUS = 1 m.status = 1
AND m.id IN ( AND m.id IN (
SELECT DISTINCT SELECT DISTINCT
( rmb.resource_id ) ( rmb.resource_id )

View File

@@ -38,6 +38,13 @@ func InitResourceRouter(router *gin.RouterGroup) {
Handle(r.ChangeStatus) Handle(r.ChangeStatus)
}) })
sort := req.NewLogInfo("资源排序").WithSave(true)
db.POST("sort", func(c *gin.Context) {
req.NewCtxWithGin(c).
WithLog(sort).
Handle(r.Sort)
})
delResource := req.NewLogInfo("删除资源").WithSave(true) delResource := req.NewLogInfo("删除资源").WithSave(true)
dePermission := req.NewPermission("resource:delete") dePermission := req.NewPermission("resource:delete")
db.DELETE(":id", func(c *gin.Context) { db.DELETE(":id", func(c *gin.Context) {

View File

@@ -72,20 +72,15 @@ func (p *tagTreeAppImpl) Save(tag *entity.TagTree) {
if tag.Pid != 0 { if tag.Pid != 0 {
parentTag := p.tagTreeRepo.SelectById(tag.Pid) parentTag := p.tagTreeRepo.SelectById(tag.Pid)
biz.NotNil(parentTag, "父节点不存在") biz.NotNil(parentTag, "父节点不存在")
tag.CodePath = parentTag.CodePath + entity.CodePathSeparator + tag.Code tag.CodePath = parentTag.CodePath + tag.Code + entity.CodePathSeparator
} else { } else {
tag.CodePath = tag.Code tag.CodePath = tag.Code + entity.CodePathSeparator
} }
// 判断该路径是否存在 // 判断该路径是否存在
var hasLikeTags []entity.TagTree var hasLikeTags []entity.TagTree
p.tagTreeRepo.SelectByCondition(&entity.TagTreeQuery{CodePathLike: tag.CodePath}, &hasLikeTags) p.tagTreeRepo.SelectByCondition(&entity.TagTreeQuery{CodePathLike: tag.CodePath}, &hasLikeTags)
biz.IsTrue(len(hasLikeTags) == 0, "已存在该标签路径开头的标签, 请修改该标识code") biz.IsTrue(len(hasLikeTags) == 0, "已存在该标签路径开头的标签, 请修改该标识code")
// 校验同级标签是否有以该code为开头的标识符
p.tagTreeRepo.SelectByCondition(&entity.TagTreeQuery{Pid: tag.Pid}, &hasLikeTags)
for _, v := range hasLikeTags {
biz.IsTrue(!strings.HasPrefix(tag.Code, v.Code), "同级标签下的[%s]与[%s]存在相似开头字符, 请修改该标识code", v.Code, tag.Code)
}
p.tagTreeRepo.Insert(tag) p.tagTreeRepo.Insert(tag)
return return
} }

View File

@@ -1,17 +1,3 @@
/*
Navicat Premium Data Transfer
Source Server Type : MySQL
Source Server Version : 50730
Source Schema : mayfly-go
Target Server Type : MySQL
Target Server Version : 50730
File Encoding : 65001
Date: 18/11/2021 14:33:55
*/
SET NAMES utf8mb4; SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; SET FOREIGN_KEY_CHECKS = 0;
@@ -419,106 +405,107 @@ COMMIT;
-- ---------------------------- -- ----------------------------
DROP TABLE IF EXISTS `t_sys_resource`; DROP TABLE IF EXISTS `t_sys_resource`;
CREATE TABLE `t_sys_resource` ( CREATE TABLE `t_sys_resource` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL COMMENT '父节点id', `pid` int NOT NULL COMMENT '父节点id',
`type` tinyint(255) NOT NULL COMMENT '1菜单路由2资源按钮等', `ui_path` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '唯一标识路径',
`status` int(255) NOT NULL COMMENT '状态1:可用,-1:禁用', `type` tinyint NOT NULL COMMENT '1菜单路由2资源按钮等',
`status` int NOT NULL COMMENT '状态1:可用,-1:禁用',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名称', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名称',
`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单路由为path其他为唯一标识', `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单路由为path其他为唯一标识',
`weight` int(11) DEFAULT NULL COMMENT '权重顺序', `weight` int DEFAULT NULL COMMENT '权重顺序',
`meta` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '元数据', `meta` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '元数据',
`creator_id` bigint(20) NOT NULL, `creator_id` bigint NOT NULL,
`creator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `creator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`modifier_id` bigint(20) NOT NULL, `modifier_id` bigint NOT NULL,
`modifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `modifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`create_time` datetime NOT NULL, `create_time` datetime NOT NULL,
`update_time` datetime NOT NULL, `update_time` datetime NOT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='资源表'; KEY `t_sys_resource_ui_path_IDX` (`ui_path`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='资源表';
-- ---------------------------- -- ----------------------------
-- Records of t_sys_resource -- Records of t_sys_resource
-- ---------------------------- -- ----------------------------
BEGIN; BEGIN;
INSERT INTO `t_sys_resource` (id,pid,`type`,status,name,code,weight,meta,creator_id,creator,modifier_id,modifier,create_time,update_time) VALUES INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(1, 0, 'Aexqq77l/', 1, 1, '首页', '/home', 10000000, '{"component":"home/Home","icon":"HomeFilled","isAffix":true,"isKeepAlive":true,"routeName":"Home"}', 1, 'admin', 1, 'admin', '2021-05-25 16:44:41', '2023-03-14 14:27:07');
(1,0,1,1,'首页','/home',1,'{"component":"home/Home","icon":"HomeFilled","isAffix":true,"isKeepAlive":true,"routeName":"Home"}',1,'admin',1,'admin','2021-05-25 16:44:41','2023-03-14 14:27:07'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(2, 0, '12sSjal1/', 1, 1, '机器管理', '/machine', 49999998, '{"icon":"Monitor","isKeepAlive":true,"redirect":"machine/list","routeName":"Machine"}', 1, 'admin', 1, 'admin', '2021-05-25 16:48:16', '2022-10-06 14:58:49');
(2,0,1,1,'机器管理','/machine',4,'{"icon":"Monitor","isKeepAlive":true,"redirect":"machine/list","routeName":"Machine"}',1,'admin',1,'admin','2021-05-25 16:48:16','2022-10-06 14:58:49'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(3, 2, '12sSjal1/lskeiql1/', 1, 1, '机器列表', 'machines', 20000000, '{"component":"ops/machine/MachineList","icon":"Monitor","isKeepAlive":true,"routeName":"MachineList"}', 2, 'admin', 1, 'admin', '2021-05-25 16:50:04', '2023-03-15 17:14:44');
(3,2,1,1,'机器列表','machines',2,'{"component":"ops/machine/MachineList","icon":"Monitor","isKeepAlive":true,"routeName":"MachineList"}',2,'admin',1,'admin','2021-05-25 16:50:04','2023-03-15 17:14:44'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(4, 0, 'Xlqig32x/', 1, 1, '系统管理', '/sys', 60000001, '{"icon":"Setting","isKeepAlive":true,"redirect":"/sys/resources","routeName":"sys"}', 1, 'admin', 1, 'admin', '2021-05-26 15:20:20', '2022-10-06 14:59:53');
(4,0,1,1,'系统管理','/sys',8,'{"icon":"Setting","isKeepAlive":true,"redirect":"/sys/resources","routeName":"sys"}',1,'admin',1,'admin','2021-05-26 15:20:20','2022-10-06 14:59:53'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(5, 4, 'Xlqig32x/UGxla231/', 1, 1, '资源管理', 'resources', 9999999, '{"component":"system/resource/ResourceList","icon":"Menu","isKeepAlive":true,"routeName":"ResourceList"}', 1, 'admin', 1, 'admin', '2021-05-26 15:23:07', '2023-03-14 15:44:34');
(5,4,1,1,'资源管理','resources',3,'{"component":"system/resource/ResourceList","icon":"Menu","isKeepAlive":true,"routeName":"ResourceList"}',1,'admin',1,'admin','2021-05-26 15:23:07','2023-03-14 15:44:34'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(11, 4, 'Xlqig32x/lxqSiae1/', 1, 1, '角色管理', 'roles', 10000001, '{"component":"system/role/RoleList","icon":"Menu","isKeepAlive":true,"routeName":"RoleList"}', 1, 'admin', 1, 'admin', '2021-05-27 11:15:35', '2023-03-14 15:44:22');
(11,4,1,1,'角色管理','roles',2,'{"component":"system/role/RoleList","icon":"Menu","isKeepAlive":true,"routeName":"RoleList"}',1,'admin',1,'admin','2021-05-27 11:15:35','2023-03-14 15:44:22'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(12, 3, '12sSjal1/lskeiql1/Alw1Xkq3/', 2, 1, '机器终端按钮', 'machine:terminal', 40000000, '', 1, 'admin', 1, 'admin', '2021-05-28 14:06:02', '2021-05-31 17:47:59');
(12,3,2,1,'机器终端按钮','machine:terminal',4,'',1,'admin',1,'admin','2021-05-28 14:06:02','2021-05-31 17:47:59'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(14, 4, 'Xlqig32x/sfslfel/', 1, 1, '账号管理', 'accounts', 9999999, '{"component":"system/account/AccountList","icon":"Menu","isKeepAlive":true,"routeName":"AccountList"}', 1, 'admin', 1, 'admin', '2021-05-28 14:56:25', '2023-03-14 15:44:10');
(14,4,1,1,'账号管理','accounts',1,'{"component":"system/account/AccountList","icon":"Menu","isKeepAlive":true,"routeName":"AccountList"}',1,'admin',1,'admin','2021-05-28 14:56:25','2023-03-14 15:44:10'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(15, 3, '12sSjal1/lskeiql1/Lsew24Kx/', 2, 1, '文件管理按钮', 'machine:file', 50000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:44:37', '2021-05-31 17:48:07');
(15,3,2,1,'文件管理按钮','machine:file',5,NULL,1,'admin',1,'admin','2021-05-31 17:44:37','2021-05-31 17:48:07'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(16, 3, '12sSjal1/lskeiql1/exIsqL31/', 2, 1, '机器添加按钮', 'machine:add', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:46:11', '2021-05-31 19:34:15');
(16,3,2,1,'机器添加按钮','machine:add',1,NULL,1,'admin',1,'admin','2021-05-31 17:46:11','2021-05-31 19:34:15'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(17, 3, '12sSjal1/lskeiql1/Liwakg2x/', 2, 1, '机器编辑按钮', 'machine:update', 20000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:46:23', '2021-05-31 19:34:18');
(17,3,2,1,'机器编辑按钮','machine:update',2,NULL,1,'admin',1,'admin','2021-05-31 17:46:23','2021-05-31 19:34:18'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(18, 3, '12sSjal1/lskeiql1/Lieakenx/', 2, 1, '机器删除按钮', 'machine:del', 30000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:46:36', '2021-05-31 19:34:17');
(18,3,2,1,'机器删除按钮','machine:del',3,NULL,1,'admin',1,'admin','2021-05-31 17:46:36','2021-05-31 19:34:17'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(19, 14, 'Xlqig32x/sfslfel/UUiex2xA/', 2, 1, '角色分配按钮', 'account:saveRoles', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:50:51', '2021-05-31 19:19:30');
(19,14,2,1,'角色分配按钮','account:saveRoles',1,NULL,1,'admin',1,'admin','2021-05-31 17:50:51','2021-05-31 19:19:30'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(20, 11, 'Xlqig32x/lxqSiae1/EMq2Kxq3/', 2, 1, '分配菜单&权限按钮', 'role:saveResources', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 17:51:41', '2021-05-31 19:33:37');
(20,11,2,1,'分配菜单&权限按钮','role:saveResources',1,NULL,1,'admin',1,'admin','2021-05-31 17:51:41','2021-05-31 19:33:37'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(21, 14, 'Xlqig32x/sfslfel/Uexax2xA/', 2, 1, '账号删除按钮', 'account:del', 20000000, 'null', 1, 'admin', 1, 'admin', '2021-05-31 18:02:01', '2021-06-10 17:12:17');
(21,14,2,1,'账号删除按钮','account:del',2,'null',1,'admin',1,'admin','2021-05-31 18:02:01','2021-06-10 17:12:17'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(22, 11, 'Xlqig32x/lxqSiae1/Elxq2Kxq3/', 2, 1, '角色删除按钮', 'role:del', 20000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:02:29', '2021-05-31 19:33:38');
(22,11,2,1,'角色删除按钮','role:del',2,NULL,1,'admin',1,'admin','2021-05-31 18:02:29','2021-05-31 19:33:38'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(23, 11, 'Xlqig32x/lxqSiae1/342xKxq3/', 2, 1, '角色新增按钮', 'role:add', 30000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:02:44', '2021-05-31 19:33:39');
(23,11,2,1,'角色新增按钮','role:add',3,NULL,1,'admin',1,'admin','2021-05-31 18:02:44','2021-05-31 19:33:39'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(24, 11, 'Xlqig32x/lxqSiae1/LexqKxq3/', 2, 1, '角色编辑按钮', 'role:update', 40000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:02:57', '2021-05-31 19:33:40');
(24,11,2,1,'角色编辑按钮','role:update',4,NULL,1,'admin',1,'admin','2021-05-31 18:02:57','2021-05-31 19:33:40'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(25, 5, 'Xlqig32x/UGxla231/Elxq23XK/', 2, 1, '资源新增按钮', 'resource:add', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:03:33', '2021-05-31 19:31:47');
(25,5,2,1,'资源新增按钮','resource:add',1,NULL,1,'admin',1,'admin','2021-05-31 18:03:33','2021-05-31 19:31:47'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(26, 5, 'Xlqig32x/UGxla231/eloq23XK/', 2, 1, '资源删除按钮', 'resource:delete', 20000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:03:47', '2021-05-31 19:29:40');
(26,5,2,1,'资源删除按钮','resource:delete',2,NULL,1,'admin',1,'admin','2021-05-31 18:03:47','2021-05-31 19:29:40'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(27, 5, 'Xlqig32x/UGxla231/JExq23XK/', 2, 1, '资源编辑按钮', 'resource:update', 30000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:04:03', '2021-05-31 19:29:40');
(27,5,2,1,'资源编辑按钮','resource:update',3,NULL,1,'admin',1,'admin','2021-05-31 18:04:03','2021-05-31 19:29:40'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(28, 5, 'Xlqig32x/UGxla231/Elex13XK/', 2, 1, '资源禁用启用按钮', 'resource:changeStatus', 40000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 18:04:33', '2021-05-31 18:04:33');
(28,5,2,1,'资源禁用启用按钮','resource:changeStatus',4,NULL,1,'admin',1,'admin','2021-05-31 18:04:33','2021-05-31 18:04:33'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(29, 14, 'Xlqig32x/sfslfel/xlawx2xA/', 2, 1, '账号添加按钮', 'account:add', 30000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 19:23:42', '2021-05-31 19:23:42');
(29,14,2,1,'账号添加按钮','account:add',3,NULL,1,'admin',1,'admin','2021-05-31 19:23:42','2021-05-31 19:23:42'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(30, 14, 'Xlqig32x/sfslfel/32xax2xA/', 2, 1, '账号编辑修改按钮', 'account:update', 40000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 19:23:58', '2021-05-31 19:23:58');
(30,14,2,1,'账号编辑修改按钮','account:update',4,NULL,1,'admin',1,'admin','2021-05-31 19:23:58','2021-05-31 19:23:58'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(31, 14, 'Xlqig32x/sfslfel/eubale13/', 2, 1, '账号管理基本权限', 'account', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-05-31 21:25:06', '2021-06-22 11:20:34');
(31,14,2,1,'账号管理基本权限','account',0,'null',1,'admin',1,'admin','2021-05-31 21:25:06','2021-06-22 11:20:34'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(32, 5, 'Xlqig32x/UGxla231/321q23XK/', 2, 1, '资源管理基本权限', 'resource', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 21:25:25', '2021-05-31 21:25:25');
(32,5,2,1,'资源管理基本权限','resource',0,NULL,1,'admin',1,'admin','2021-05-31 21:25:25','2021-05-31 21:25:25'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(33, 11, 'Xlqig32x/lxqSiae1/908xKxq3/', 2, 1, '角色管理基本权限', 'role', 10000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 21:25:40', '2021-05-31 21:25:40');
(33,11,2,1,'角色管理基本权限','role',0,NULL,1,'admin',1,'admin','2021-05-31 21:25:40','2021-05-31 21:25:40'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(34, 14, 'Xlqig32x/sfslfel/32alx2xA/', 2, 1, '账号启用禁用按钮', 'account:changeStatus', 50000000, NULL, 1, 'admin', 1, 'admin', '2021-05-31 21:29:48', '2021-05-31 21:29:48');
(34,14,2,1,'账号启用禁用按钮','account:changeStatus',5,NULL,1,'admin',1,'admin','2021-05-31 21:29:48','2021-05-31 21:29:48'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(36, 0, 'dbms23ax/', 1, 1, 'DBMS', '/dbms', 49999999, '{"icon":"Coin","isKeepAlive":true,"routeName":"DBMS"}', 1, 'admin', 1, 'admin', '2021-06-01 14:01:33', '2023-03-15 17:31:08');
(36,0,1,1,'DBMS','/dbms',5,'{"icon":"Coin","isKeepAlive":true,"routeName":"DBMS"}',1,'admin',1,'admin','2021-06-01 14:01:33','2023-03-15 17:31:08'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(37, 3, '12sSjal1/lskeiql1/Keiqkx4L/', 2, 1, '添加文件配置', 'machine:addFile', 60000000, 'null', 1, 'admin', 1, 'admin', '2021-06-01 19:54:23', '2021-06-01 19:54:23');
(37,3,2,1,'添加文件配置','machine:addFile',6,'null',1,'admin',1,'admin','2021-06-01 19:54:23','2021-06-01 19:54:23'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(38, 36, 'dbms23ax/exaeca2x/', 1, 1, '数据操作', 'sql-exec', 10000000, '{"component":"ops/db/SqlExec","icon":"Coin","isKeepAlive":true,"routeName":"SqlExec"}', 1, 'admin', 1, 'admin', '2021-06-03 09:09:29', '2023-03-15 17:31:21');
(38,36,1,1,'数据操作','sql-exec',1,'{"component":"ops/db/SqlExec","icon":"Coin","isKeepAlive":true,"routeName":"SqlExec"}',1,'admin',1,'admin','2021-06-03 09:09:29','2023-03-15 17:31:21'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(39, 0, 'sl3as23x/', 1, 1, '个人中心', '/personal', 19999999, '{"component":"personal/index","icon":"UserFilled","isHide":true,"isKeepAlive":true,"routeName":"Personal"}', 1, 'admin', 1, 'admin', '2021-06-03 14:25:35', '2023-03-14 14:28:36');
(39,0,1,1,'个人中心','/personal',2,'{"component":"personal/index","icon":"UserFilled","isHide":true,"isKeepAlive":true,"routeName":"Personal"}',1,'admin',1,'admin','2021-06-03 14:25:35','2023-03-14 14:28:36'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(40, 3, '12sSjal1/lskeiql1/Keal2Xke/', 2, 1, '文件管理-新增按钮', 'machine:file:add', 70000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:06:26', '2021-06-08 11:12:28');
(40,3,2,1,'文件管理-新增按钮','machine:file:add',7,'null',1,'admin',1,'admin','2021-06-08 11:06:26','2021-06-08 11:12:28'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(41, 3, '12sSjal1/lskeiql1/Ihfs2xaw/', 2, 1, '文件管理-删除按钮', 'machine:file:del', 80000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:06:49', '2021-06-08 11:06:49');
(41,3,2,1,'文件管理-删除按钮','machine:file:del',8,'null',1,'admin',1,'admin','2021-06-08 11:06:49','2021-06-08 11:06:49'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(42, 3, '12sSjal1/lskeiql1/', 2, 1, '文件管理-写入or下载文件权限', 'machine:file:write', 90000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:07:27', '2021-06-08 11:07:27');
(42,3,2,1,'文件管理-写入or下载文件权限','machine:file:write',9,'null',1,'admin',1,'admin','2021-06-08 11:07:27','2021-06-08 11:07:27'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(43, 3, '12sSjal1/lskeiql1/Ljewix43/', 2, 1, '文件管理-文件上传按钮', 'machine:file:upload', 100000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:07:42', '2021-06-08 11:07:42');
(43,3,2,1,'文件管理-文件上传按钮','machine:file:upload',10,'null',1,'admin',1,'admin','2021-06-08 11:07:42','2021-06-08 11:07:42'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(44, 3, '12sSjal1/lskeiql1/L12wix43/', 2, 1, '文件管理-删除文件按钮', 'machine:file:rm', 110000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:08:12', '2021-06-08 11:08:12');
(44,3,2,1,'文件管理-删除文件按钮','machine:file:rm',11,'null',1,'admin',1,'admin','2021-06-08 11:08:12','2021-06-08 11:08:12'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(45, 3, '12sSjal1/lskeiql1/Ljewisd3/', 2, 1, '脚本管理-保存脚本按钮', 'machine:script:save', 120000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:09:01', '2021-06-08 11:09:01');
(45,3,2,1,'脚本管理-保存脚本按钮','machine:script:save',12,'null',1,'admin',1,'admin','2021-06-08 11:09:01','2021-06-08 11:09:01'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(46, 3, '12sSjal1/lskeiql1/Ljeew43/', 2, 1, '脚本管理-删除按钮', 'machine:script:del', 130000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:09:27', '2021-06-08 11:09:27');
(46,3,2,1,'脚本管理-删除按钮','machine:script:del',13,'null',1,'admin',1,'admin','2021-06-08 11:09:27','2021-06-08 11:09:27'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(47, 3, '12sSjal1/lskeiql1/ODewix43/', 2, 1, '脚本管理-执行按钮', 'machine:script:run', 140000000, 'null', 1, 'admin', 1, 'admin', '2021-06-08 11:09:50', '2021-06-08 11:09:50');
(47,3,2,1,'脚本管理-执行按钮','machine:script:run',14,'null',1,'admin',1,'admin','2021-06-08 11:09:50','2021-06-08 11:09:50'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(49, 36, 'dbms23ax/xleaiec2/', 1, 1, '数据库管理', 'dbs', 20000000, '{"component":"ops/db/DbList","icon":"Coin","isKeepAlive":true,"routeName":"DbList"}', 1, 'admin', 1, 'admin', '2021-07-07 15:13:55', '2023-03-15 17:31:28');
(49,36,1,1,'数据库管理','dbs',2,'{"component":"ops/db/DbList","icon":"Coin","isKeepAlive":true,"routeName":"DbList"}',1,'admin',1,'admin','2021-07-07 15:13:55','2023-03-15 17:31:28'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(54, 49, 'dbms23ax/xleaiec2/leix3Axl/', 2, 1, '数据库保存', 'db:save', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-08 17:30:36', '2021-07-08 17:31:05');
(54,49,2,1,'数据库保存','db:save',1,'null',1,'admin',1,'admin','2021-07-08 17:30:36','2021-07-08 17:31:05'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(55, 49, 'dbms23ax/xleaiec2/ygjL3sxA/', 2, 1, '数据库删除', 'db:del', 20000000, 'null', 1, 'admin', 1, 'admin', '2021-07-08 17:30:48', '2021-07-08 17:30:48');
(55,49,2,1,'数据库删除','db:del',2,'null',1,'admin',1,'admin','2021-07-08 17:30:48','2021-07-08 17:30:48'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(57, 3, '12sSjal1/lskeiql1/OJewex43/', 2, 1, '基本权限', 'machine', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-09 10:48:02', '2021-07-09 10:48:02');
(57,3,2,1,'基本权限','machine',0,'null',1,'admin',1,'admin','2021-07-09 10:48:02','2021-07-09 10:48:02'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(58, 49, 'dbms23ax/xleaiec2/AceXe321/', 2, 1, '基本权限', 'db', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-09 10:48:22', '2021-07-09 10:48:22');
(58,49,2,1,'基本权限','db',0,'null',1,'admin',1,'admin','2021-07-09 10:48:22','2021-07-09 10:48:22'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(59, 38, 'dbms23ax/exaeca2x/ealcia23/', 2, 1, '基本权限', 'db:exec', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-09 10:50:13', '2021-07-09 10:50:13');
(59,38,2,1,'基本权限','db:exec',1,'null',1,'admin',1,'admin','2021-07-09 10:50:13','2021-07-09 10:50:13'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(60, 0, 'RedisXq4/', 1, 1, 'Redis', '/redis', 50000001, '{"icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"RDS"}', 1, 'admin', 1, 'admin', '2021-07-19 20:15:41', '2023-03-15 16:44:59');
(60,0,1,1,'Redis','/redis',6,'{"icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"RDS"}',1,'admin',1,'admin','2021-07-19 20:15:41','2023-03-15 16:44:59'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(61, 60, 'RedisXq4/Exitx4al/', 1, 1, '数据操作', 'data-operation', 10000000, '{"component":"ops/redis/DataOperation","icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"DataOperation"}', 1, 'admin', 1, 'admin', '2021-07-19 20:17:29', '2023-03-15 16:37:50');
(61,60,1,1,'数据操作','data-operation',1,'{"component":"ops/redis/DataOperation","icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"DataOperation"}',1,'admin',1,'admin','2021-07-19 20:17:29','2023-03-15 16:37:50'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(62, 61, 'RedisXq4/Exitx4al/LSjie321/', 2, 1, '基本权限', 'redis:data', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-19 20:18:54', '2021-07-19 20:18:54');
(62,61,2,1,'基本权限','redis:data',1,'null',1,'admin',1,'admin','2021-07-19 20:18:54','2021-07-19 20:18:54'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(63, 60, 'RedisXq4/Eoaljc12/', 1, 1, 'redis管理', 'manage', 20000000, '{"component":"ops/redis/RedisList","icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"RedisList"}', 1, 'admin', 1, 'admin', '2021-07-20 10:48:04', '2023-03-15 16:38:00');
(63,60,1,1,'redis管理','manage',2,'{"component":"ops/redis/RedisList","icon":"iconfont icon-redis","isKeepAlive":true,"routeName":"RedisList"}',1,'admin',1,'admin','2021-07-20 10:48:04','2023-03-15 16:38:00'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(64, 63, 'RedisXq4/Eoaljc12/IoxqAd31/', 2, 1, '基本权限', 'redis:manage', 10000000, 'null', 1, 'admin', 1, 'admin', '2021-07-20 10:48:26', '2021-07-20 10:48:26');
(64,63,2,1,'基本权限','redis:manage',1,'null',1,'admin',1,'admin','2021-07-20 10:48:26','2021-07-20 10:48:26'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(71, 61, 'RedisXq4/Exitx4al/IUlxia23/', 2, 1, '数据保存', 'redis:data:save', 60000000, 'null', 1, 'admin', 1, 'admin', '2021-08-17 11:20:37', '2021-08-17 11:20:37');
(71,61,2,1,'数据保存','redis:data:save',6,'null',1,'admin',1,'admin','2021-08-17 11:20:37','2021-08-17 11:20:37'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(72, 3, '12sSjal1/lskeiql1/LIEwix43/', 2, 1, '终止进程', 'machine:killprocess', 60000000, 'null', 1, 'admin', 1, 'admin', '2021-08-17 11:20:37', '2021-08-17 11:20:37');
(72,3,2,1,'终止进程','machine:killprocess',6,'null',1,'admin',1,'admin','2021-08-17 11:20:37','2021-08-17 11:20:37'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(79, 0, 'Mongo452/', 1, 1, 'Mongo', '/mongo', 50000002, '{"icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"Mongo"}', 1, 'admin', 1, 'admin', '2022-05-13 14:00:41', '2023-03-16 14:23:22');
(79,0,1,1,'Mongo','/mongo',7,'{"icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"Mongo"}',1,'admin',1,'admin','2022-05-13 14:00:41','2023-03-16 14:23:22'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(80, 79, 'Mongo452/eggago31/', 1, 1, '数据操作', 'mongo-data-operation', 10000000, '{"component":"ops/mongo/MongoDataOp","icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"MongoDataOp"}', 1, 'admin', 1, 'admin', '2022-05-13 14:03:58', '2023-03-15 17:15:02');
(80,79,1,1,'数据操作','mongo-data-operation',1,'{"component":"ops/mongo/MongoDataOp","icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"MongoDataOp"}',1,'admin',1,'admin','2022-05-13 14:03:58','2023-03-15 17:15:02'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(81, 80, 'Mongo452/eggago31/egjglal3/', 2, 1, '基本权限', 'mongo:base', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-05-13 14:04:16', '2022-05-13 14:04:16');
(81,80,2,1,'基本权限','mongo:base',1,'null',1,'admin',1,'admin','2022-05-13 14:04:16','2022-05-13 14:04:16'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(82, 79, 'Mongo452/ghxagl43/', 1, 1, 'Mongo管理', 'mongo-manage', 20000000, '{"component":"ops/mongo/MongoList","icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"MongoList"}', 1, 'admin', 1, 'admin', '2022-05-16 18:13:06', '2023-03-15 17:26:55');
(82,79,1,1,'Mongo管理','mongo-manage',2,'{"component":"ops/mongo/MongoList","icon":"iconfont icon-mongo","isKeepAlive":true,"routeName":"MongoList"}',1,'admin',1,'admin','2022-05-16 18:13:06','2023-03-15 17:26:55'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(83, 82, 'Mongo452/ghxagl43/egljbla3/', 2, 1, '基本权限', 'mongo:manage:base', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-05-16 18:13:25', '2022-05-16 18:13:25');
(83,82,2,1,'基本权限','mongo:manage:base',1,'null',1,'admin',1,'admin','2022-05-16 18:13:25','2022-05-16 18:13:25'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(84, 4, 'Xlqig32x/exlaeAlx/', 1, 1, '操作日志', 'syslogs', 20000000, '{"component":"system/syslog/SyslogList","icon":"Tickets","routeName":"SyslogList"}', 1, 'admin', 1, 'admin', '2022-07-13 19:57:07', '2023-03-14 15:44:45');
(84,4,1,1,'操作日志','syslogs',4,'{"component":"system/syslog/SyslogList","icon":"Tickets","routeName":"SyslogList"}',1,'admin',1,'admin','2022-07-13 19:57:07','2023-03-14 15:44:45'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(85, 84, 'Xlqig32x/exlaeAlx/3xlqeXql/', 2, 1, '操作日志基本权限', 'syslog', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-07-13 19:57:55', '2022-07-13 19:57:55');
(85,84,2,1,'操作日志基本权限','syslog',1,'null',1,'admin',1,'admin','2022-07-13 19:57:55','2022-07-13 19:57:55'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(87, 4, 'Xlqig32x/Ulxaee23/', 1, 1, '系统配置', 'configs', 10000002, '{"component":"system/config/ConfigList","icon":"Setting","isKeepAlive":true,"routeName":"ConfigList"}', 1, 'admin', 1, 'admin', '2022-08-25 22:18:55', '2023-03-15 11:06:07');
(87,4,1,1,'系统配置','configs',5,'{"component":"system/config/ConfigList","icon":"Setting","isKeepAlive":true,"routeName":"ConfigList"}',1,'admin',1,'admin','2022-08-25 22:18:55','2023-03-15 11:06:07'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(88, 87, 'Xlqig32x/Ulxaee23/exlqguA3/', 2, 1, '基本权限', 'config:base', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-08-25 22:19:35', '2022-08-25 22:19:35');
(88,87,2,1,'基本权限','config:base',1,'null',1,'admin',1,'admin','2022-08-25 22:19:35','2022-08-25 22:19:35'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(93, 0, 'Tag3fhad/', 1, 1, '标签管理', '/tag', 20000001, '{"icon":"CollectionTag","isKeepAlive":true,"routeName":"Tag"}', 1, 'admin', 1, 'admin', '2022-10-24 15:18:40', '2022-10-24 15:24:29');
(93,0,1,1,'标签管理','/tag',3,'{"icon":"CollectionTag","isKeepAlive":true,"routeName":"Tag"}',1,'admin',1,'admin','2022-10-24 15:18:40','2022-10-24 15:24:29'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(94, 93, 'Tag3fhad/glxajg23/', 1, 1, '标签', 'tag-trees', 10000000, '{"component":"ops/tag/TagTreeList","icon":"CollectionTag","isKeepAlive":true,"routeName":"TagTreeList"}', 1, 'admin', 1, 'admin', '2022-10-24 15:19:40', '2023-03-14 14:30:51');
(94,93,1,1,'标签树','tag-trees',1,'{"component":"ops/tag/TagTreeList","icon":"CollectionTag","isKeepAlive":true,"routeName":"TagTreeList"}',1,'admin',1,'admin','2022-10-24 15:19:40','2023-03-14 14:30:51'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(95, 93, 'Tag3fhad/Bjlag32x/', 1, 1, '团队管理', 'teams', 20000000, '{"component":"ops/tag/TeamList","icon":"UserFilled","isKeepAlive":true,"routeName":"TeamList"}', 1, 'admin', 1, 'admin', '2022-10-24 15:20:09', '2023-03-14 14:31:03');
(95,93,1,1,'团队管理','teams',2,'{"component":"ops/tag/TeamList","icon":"UserFilled","isKeepAlive":true,"routeName":"TeamList"}',1,'admin',1,'admin','2022-10-24 15:20:09','2023-03-14 14:31:03'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(96, 94, 'Tag3fhad/glxajg23/gkxagt23/', 2, 1, '保存标签', 'tag:save', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-10-24 15:20:40', '2022-10-26 13:58:36');
(96,94,2,1,'保存标签','tag:save',1,'null',1,'admin',1,'admin','2022-10-24 15:20:40','2022-10-26 13:58:36'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(97, 95, 'Tag3fhad/Bjlag32x/GJslag32/', 2, 1, '保存团队', 'team:save', 10000000, 'null', 1, 'admin', 1, 'admin', '2022-10-24 15:20:57', '2022-10-26 13:58:56');
(97,95,2,1,'保存团队','team:save',1,'null',1,'admin',1,'admin','2022-10-24 15:20:57','2022-10-26 13:58:56'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(98, 94, 'Tag3fhad/glxajg23/xjgalte2/', 2, 1, '删除标签', 'tag:del', 20000000, 'null', 1, 'admin', 1, 'admin', '2022-10-26 13:58:47', '2022-10-26 13:58:47');
(98,94,2,1,'删除标签','tag:del',2,'null',1,'admin',1,'admin','2022-10-26 13:58:47','2022-10-26 13:58:47'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(99, 95, 'Tag3fhad/Bjlag32x/Gguca23x/', 2, 1, '删除团队', 'team:del', 20000000, 'null', 1, 'admin', 1, 'admin', '2022-10-26 13:59:06', '2022-10-26 13:59:06');
(99,95,2,1,'删除团队','team:del',2,'null',1,'admin',1,'admin','2022-10-26 13:59:06','2022-10-26 13:59:06'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(100, 95, 'Tag3fhad/Bjlag32x/Lgidsq32/', 2, 1, '新增团队成员', 'team:member:save', 30000000, 'null', 1, 'admin', 1, 'admin', '2022-10-26 13:59:27', '2022-10-26 13:59:27');
(100,95,2,1,'新增团队成员','team:member:save',3,'null',1,'admin',1,'admin','2022-10-26 13:59:27','2022-10-26 13:59:27'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(101, 95, 'Tag3fhad/Bjlag32x/Lixaue3G/', 2, 1, '移除团队成员', 'team:member:del', 40000000, 'null', 1, 'admin', 1, 'admin', '2022-10-26 13:59:43', '2022-10-26 13:59:43');
(101,95,2,1,'移除团队成员','team:member:del',4,'null',1,'admin',1,'admin','2022-10-26 13:59:43','2022-10-26 13:59:43'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(102, 95, 'Tag3fhad/Bjlag32x/Oygsq3xg/', 2, 1, '保存团队标签', 'team:tag:save', 50000000, 'null', 1, 'admin', 1, 'admin', '2022-10-26 13:59:57', '2022-10-26 13:59:57');
(102,95,2,1,'保存团队标签','team:tag:save',5,'null',1,'admin',1,'admin','2022-10-26 13:59:57','2022-10-26 13:59:57'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(103, 2, '12sSjal1/exahgl32/', 1, 1, '授权凭证', 'authcerts', 60000000, '{"component":"ops/machine/authcert/AuthCertList","icon":"Unlock","isKeepAlive":true,"routeName":"AuthCertList"}', 1, 'admin', 1, 'admin', '2023-02-23 11:36:26', '2023-03-14 14:33:28');
(103,2,1,1,'授权凭证','authcerts',6,'{"component":"ops/machine/authcert/AuthCertList","icon":"Unlock","isKeepAlive":true,"routeName":"AuthCertList"}',1,'admin',1,'admin','2023-02-23 11:36:26','2023-03-14 14:33:28'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(104, 103, '12sSjal1/exahgl32/egxahg24/', 2, 1, '基本权限', 'authcert', 10000000, 'null', 1, 'admin', 1, 'admin', '2023-02-23 11:37:24', '2023-02-23 11:37:24');
(104,103,2,1,'基本权限','authcert',1,'null',1,'admin',1,'admin','2023-02-23 11:37:24','2023-02-23 11:37:24'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(105, 103, '12sSjal1/exahgl32/yglxahg2/', 2, 1, '保存权限', 'authcert:save', 20000000, 'null', 1, 'admin', 1, 'admin', '2023-02-23 11:37:54', '2023-02-23 11:37:54');
(105,103,2,1,'保存权限','authcert:save',2,'null',1,'admin',1,'admin','2023-02-23 11:37:54','2023-02-23 11:37:54'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(106, 103, '12sSjal1/exahgl32/Glxag234/', 2, 1, '删除权限', 'authcert:del', 30000000, 'null', 1, 'admin', 1, 'admin', '2023-02-23 11:38:09', '2023-02-23 11:38:09');
(106,103,2,1,'删除权限','authcert:del',3,'null',1,'admin',1,'admin','2023-02-23 11:38:09','2023-02-23 11:38:09'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(108, 61, 'RedisXq4/Exitx4al/Gxlagheg/', 2, 1, '数据删除', 'redis:data:del', 30000000, 'null', 1, 'admin', 1, 'admin', '2023-03-14 17:20:00', '2023-03-14 17:20:00');
(108,61,2,1,'数据删除','redis:data:del',3,'null',1,'admin',1,'admin','2023-03-14 17:20:00','2023-03-14 17:20:00'), INSERT INTO t_sys_resource (id, pid, ui_path, `type`, status, name, code, weight, meta, creator_id, creator, modifier_id, modifier, create_time, update_time) VALUES(109, 3, '12sSjal1/lskeiql1/KMdsix43/', 2, 1, '关闭连接', 'machine:close-cli', 60000000, 'null', 1, 'admin', 1, 'admin', '2023-03-16 16:11:04', '2023-03-16 16:11:04');
(109,3,2,1,'关闭连接','machine:close-cli',6,'null',1,'admin',1,'admin','2023-03-16 16:11:04','2023-03-16 16:11:04');
COMMIT; COMMIT;
-- ---------------------------- -- ----------------------------
@@ -569,170 +556,170 @@ CREATE TABLE `t_sys_role_resource` (
-- Records of t_sys_role_resource -- Records of t_sys_role_resource
-- ---------------------------- -- ----------------------------
BEGIN; BEGIN;
INSERT INTO `t_sys_role_resource` (id,role_id,resource_id,creator_id,creator,create_time) VALUES INSERT INTO `t_sys_role_resource` (role_id,resource_id,creator_id,creator,create_time) VALUES
(1,1,1,1,'admin','2021-05-27 15:07:39'), (1,'admin','2021-05-27 15:07:39'),
(323,1,2,1,'admin','2021-05-28 09:04:50'), (1,2,1,'admin','2021-05-28 09:04:50'),
(326,1,4,1,'admin','2021-05-28 09:04:50'), (1,4,1,'admin','2021-05-28 09:04:50'),
(327,1,5,1,'admin','2021-05-28 09:04:50'), (1,5,1,'admin','2021-05-28 09:04:50'),
(328,1,11,1,'admin','2021-05-28 09:04:50'), (1,11,1,'admin','2021-05-28 09:04:50'),
(335,1,14,1,'admin','2021-05-28 17:42:21'), (1,14,1,'admin','2021-05-28 17:42:21'),
(336,1,3,1,'admin','2021-05-28 17:42:43'), (1,3,1,'admin','2021-05-28 17:42:43'),
(337,1,12,1,'admin','2021-05-28 17:42:43'), (1,12,1,'admin','2021-05-28 17:42:43'),
(338,6,2,1,'admin','2021-05-28 19:19:38'), (6,2,1,'admin','2021-05-28 19:19:38'),
(339,6,3,1,'admin','2021-05-28 19:19:38'), (6,3,1,'admin','2021-05-28 19:19:38'),
(342,6,1,1,'admin','2021-05-29 01:31:22'), (6,1,1,'admin','2021-05-29 01:31:22'),
(343,5,1,1,'admin','2021-05-31 14:05:23'), (5,1,1,'admin','2021-05-31 14:05:23'),
(344,5,4,1,'admin','2021-05-31 14:05:23'), (5,4,1,'admin','2021-05-31 14:05:23'),
(345,5,14,1,'admin','2021-05-31 14:05:23'), (5,14,1,'admin','2021-05-31 14:05:23'),
(346,5,5,1,'admin','2021-05-31 14:05:23'), (5,5,1,'admin','2021-05-31 14:05:23'),
(347,5,11,1,'admin','2021-05-31 14:05:23'), (5,11,1,'admin','2021-05-31 14:05:23'),
(348,5,3,1,'admin','2021-05-31 16:33:14'), (5,3,1,'admin','2021-05-31 16:33:14'),
(349,5,12,1,'admin','2021-05-31 16:33:14'), (5,12,1,'admin','2021-05-31 16:33:14'),
(350,5,2,1,'admin','2021-05-31 16:33:14'), (5,2,1,'admin','2021-05-31 16:33:14'),
(353,1,15,1,'admin','2021-05-31 17:48:33'), (1,15,1,'admin','2021-05-31 17:48:33'),
(354,1,16,1,'admin','2021-05-31 17:48:33'), (1,16,1,'admin','2021-05-31 17:48:33'),
(355,1,17,1,'admin','2021-05-31 17:48:33'), (1,17,1,'admin','2021-05-31 17:48:33'),
(356,1,18,1,'admin','2021-05-31 17:48:33'), (1,18,1,'admin','2021-05-31 17:48:33'),
(358,1,20,1,'admin','2021-05-31 17:52:08'), (1,20,1,'admin','2021-05-31 17:52:08'),
(360,1,22,1,'admin','2021-05-31 18:05:04'), (1,22,1,'admin','2021-05-31 18:05:04'),
(361,1,23,1,'admin','2021-05-31 18:05:04'), (1,23,1,'admin','2021-05-31 18:05:04'),
(362,1,24,1,'admin','2021-05-31 18:05:04'), (1,24,1,'admin','2021-05-31 18:05:04'),
(363,1,25,1,'admin','2021-05-31 18:05:04'), (1,25,1,'admin','2021-05-31 18:05:04'),
(364,1,26,1,'admin','2021-05-31 18:05:04'), (1,26,1,'admin','2021-05-31 18:05:04'),
(365,1,27,1,'admin','2021-05-31 18:05:04'), (1,27,1,'admin','2021-05-31 18:05:04'),
(366,1,28,1,'admin','2021-05-31 18:05:04'), (1,28,1,'admin','2021-05-31 18:05:04'),
(369,1,31,1,'admin','2021-05-31 21:25:56'), (1,31,1,'admin','2021-05-31 21:25:56'),
(370,1,32,1,'admin','2021-05-31 21:25:56'), (1,32,1,'admin','2021-05-31 21:25:56'),
(371,1,33,1,'admin','2021-05-31 21:25:56'), (1,33,1,'admin','2021-05-31 21:25:56'),
(374,1,36,1,'admin','2021-06-01 14:01:57'), (1,36,1,'admin','2021-06-01 14:01:57'),
(375,1,19,1,'admin','2021-06-01 17:34:03'), (1,19,1,'admin','2021-06-01 17:34:03'),
(376,1,21,1,'admin','2021-06-01 17:34:03'), (1,21,1,'admin','2021-06-01 17:34:03'),
(377,1,29,1,'admin','2021-06-01 17:34:03'), (1,29,1,'admin','2021-06-01 17:34:03'),
(378,1,30,1,'admin','2021-06-01 17:34:03'), (1,30,1,'admin','2021-06-01 17:34:03'),
(379,1,34,1,'admin','2021-06-01 17:34:03'), (1,34,1,'admin','2021-06-01 17:34:03'),
(380,1,37,1,'admin','2021-06-03 09:09:42'), (1,37,1,'admin','2021-06-03 09:09:42'),
(381,1,38,1,'admin','2021-06-03 09:09:42'), (1,38,1,'admin','2021-06-03 09:09:42'),
(383,1,40,1,'admin','2021-06-08 11:21:52'), (1,40,1,'admin','2021-06-08 11:21:52'),
(384,1,41,1,'admin','2021-06-08 11:21:52'), (1,41,1,'admin','2021-06-08 11:21:52'),
(385,1,42,1,'admin','2021-06-08 11:21:52'), (1,42,1,'admin','2021-06-08 11:21:52'),
(386,1,43,1,'admin','2021-06-08 11:21:52'), (1,43,1,'admin','2021-06-08 11:21:52'),
(387,1,44,1,'admin','2021-06-08 11:21:52'), (1,44,1,'admin','2021-06-08 11:21:52'),
(388,1,45,1,'admin','2021-06-08 11:21:52'), (1,45,1,'admin','2021-06-08 11:21:52'),
(389,1,46,1,'admin','2021-06-08 11:21:52'), (1,46,1,'admin','2021-06-08 11:21:52'),
(390,1,47,1,'admin','2021-06-08 11:21:52'), (1,47,1,'admin','2021-06-08 11:21:52'),
(391,6,39,1,'admin','2021-06-08 15:10:58'), (6,39,1,'admin','2021-06-08 15:10:58'),
(392,6,15,1,'admin','2021-06-08 15:10:58'), (6,15,1,'admin','2021-06-08 15:10:58'),
(395,6,31,1,'admin','2021-06-08 15:10:58'), (6,31,1,'admin','2021-06-08 15:10:58'),
(396,6,33,1,'admin','2021-06-08 15:10:58'), (6,33,1,'admin','2021-06-08 15:10:58'),
(397,6,32,1,'admin','2021-06-08 15:10:58'), (6,32,1,'admin','2021-06-08 15:10:58'),
(398,6,4,1,'admin','2021-06-08 15:10:58'), (6,4,1,'admin','2021-06-08 15:10:58'),
(399,6,14,1,'admin','2021-06-08 15:10:58'), (6,14,1,'admin','2021-06-08 15:10:58'),
(400,6,11,1,'admin','2021-06-08 15:10:58'), (6,11,1,'admin','2021-06-08 15:10:58'),
(401,6,5,1,'admin','2021-06-08 15:10:58'), (6,5,1,'admin','2021-06-08 15:10:58'),
(403,7,1,1,'admin','2021-07-06 15:07:09'), (7,1,1,'admin','2021-07-06 15:07:09'),
(405,1,49,1,'admin','2021-07-07 15:14:17'), (1,49,1,'admin','2021-07-07 15:14:17'),
(410,1,54,1,'admin','2021-07-08 17:32:19'), (1,54,1,'admin','2021-07-08 17:32:19'),
(411,1,55,1,'admin','2021-07-08 17:32:19'), (1,55,1,'admin','2021-07-08 17:32:19'),
(413,1,57,1,'admin','2021-07-09 10:48:50'), (1,57,1,'admin','2021-07-09 10:48:50'),
(414,1,58,1,'admin','2021-07-09 10:48:50'), (1,58,1,'admin','2021-07-09 10:48:50'),
(418,8,57,1,'admin','2021-07-09 10:49:46'), (8,57,1,'admin','2021-07-09 10:49:46'),
(419,8,12,1,'admin','2021-07-09 10:49:46'), (8,12,1,'admin','2021-07-09 10:49:46'),
(420,8,15,1,'admin','2021-07-09 10:49:46'), (8,15,1,'admin','2021-07-09 10:49:46'),
(421,8,38,1,'admin','2021-07-09 10:49:46'), (8,38,1,'admin','2021-07-09 10:49:46'),
(423,8,2,1,'admin','2021-07-09 10:49:46'), (8,2,1,'admin','2021-07-09 10:49:46'),
(425,8,3,1,'admin','2021-07-09 10:49:46'), (8,3,1,'admin','2021-07-09 10:49:46'),
(426,8,36,1,'admin','2021-07-09 10:49:46'), (8,36,1,'admin','2021-07-09 10:49:46'),
(428,1,59,1,'admin','2021-07-09 10:50:20'), (1,59,1,'admin','2021-07-09 10:50:20'),
(429,8,59,1,'admin','2021-07-09 10:50:32'), (8,59,1,'admin','2021-07-09 10:50:32'),
(431,6,57,1,'admin','2021-07-12 16:44:12'), (6,57,1,'admin','2021-07-12 16:44:12'),
(433,1,60,1,'admin','2021-07-19 20:19:29'), (1,60,1,'admin','2021-07-19 20:19:29'),
(434,1,61,1,'admin','2021-07-19 20:19:29'), (1,61,1,'admin','2021-07-19 20:19:29'),
(435,1,62,1,'admin','2021-07-19 20:19:29'), (1,62,1,'admin','2021-07-19 20:19:29'),
(436,1,63,1,'admin','2021-07-20 10:48:39'), (1,63,1,'admin','2021-07-20 10:48:39'),
(437,1,64,1,'admin','2021-07-20 10:48:39'), (1,64,1,'admin','2021-07-20 10:48:39'),
(444,7,39,1,'admin','2021-09-09 10:10:30'), (7,39,1,'admin','2021-09-09 10:10:30'),
(450,6,16,1,'admin','2021-09-09 15:52:38'), (6,16,1,'admin','2021-09-09 15:52:38'),
(451,6,17,1,'admin','2021-09-09 15:52:38'), (6,17,1,'admin','2021-09-09 15:52:38'),
(452,6,18,1,'admin','2021-09-09 15:52:38'), (6,18,1,'admin','2021-09-09 15:52:38'),
(453,6,37,1,'admin','2021-09-09 15:52:38'), (6,37,1,'admin','2021-09-09 15:52:38'),
(454,6,40,1,'admin','2021-09-09 15:52:38'), (6,40,1,'admin','2021-09-09 15:52:38'),
(455,6,41,1,'admin','2021-09-09 15:52:38'), (6,41,1,'admin','2021-09-09 15:52:38'),
(456,6,42,1,'admin','2021-09-09 15:52:38'), (6,42,1,'admin','2021-09-09 15:52:38'),
(457,6,43,1,'admin','2021-09-09 15:52:38'), (6,43,1,'admin','2021-09-09 15:52:38'),
(458,6,44,1,'admin','2021-09-09 15:52:38'), (6,44,1,'admin','2021-09-09 15:52:38'),
(459,6,45,1,'admin','2021-09-09 15:52:38'), (6,45,1,'admin','2021-09-09 15:52:38'),
(460,6,46,1,'admin','2021-09-09 15:52:38'), (6,46,1,'admin','2021-09-09 15:52:38'),
(461,6,47,1,'admin','2021-09-09 15:52:38'), (6,47,1,'admin','2021-09-09 15:52:38'),
(462,6,36,1,'admin','2021-09-09 15:52:38'), (6,36,1,'admin','2021-09-09 15:52:38'),
(463,6,38,1,'admin','2021-09-09 15:52:38'), (6,38,1,'admin','2021-09-09 15:52:38'),
(464,6,59,1,'admin','2021-09-09 15:52:38'), (6,59,1,'admin','2021-09-09 15:52:38'),
(465,6,49,1,'admin','2021-09-09 15:52:38'), (6,49,1,'admin','2021-09-09 15:52:38'),
(466,6,58,1,'admin','2021-09-09 15:52:38'), (6,58,1,'admin','2021-09-09 15:52:38'),
(467,6,54,1,'admin','2021-09-09 15:52:38'), (6,54,1,'admin','2021-09-09 15:52:38'),
(468,6,55,1,'admin','2021-09-09 15:52:38'), (6,55,1,'admin','2021-09-09 15:52:38'),
(469,6,60,1,'admin','2021-09-09 15:52:38'), (6,60,1,'admin','2021-09-09 15:52:38'),
(470,6,61,1,'admin','2021-09-09 15:52:38'), (6,61,1,'admin','2021-09-09 15:52:38'),
(471,6,62,1,'admin','2021-09-09 15:52:38'), (6,62,1,'admin','2021-09-09 15:52:38'),
(472,6,63,1,'admin','2021-09-09 15:52:38'), (6,63,1,'admin','2021-09-09 15:52:38'),
(473,6,64,1,'admin','2021-09-09 15:52:38'), (6,64,1,'admin','2021-09-09 15:52:38'),
(479,6,19,1,'admin','2021-09-09 15:53:56'), (6,19,1,'admin','2021-09-09 15:53:56'),
(480,6,21,1,'admin','2021-09-09 15:53:56'), (6,21,1,'admin','2021-09-09 15:53:56'),
(481,6,29,1,'admin','2021-09-09 15:53:56'), (6,29,1,'admin','2021-09-09 15:53:56'),
(482,6,30,1,'admin','2021-09-09 15:53:56'), (6,30,1,'admin','2021-09-09 15:53:56'),
(483,6,34,1,'admin','2021-09-09 15:53:56'), (6,34,1,'admin','2021-09-09 15:53:56'),
(484,6,20,1,'admin','2021-09-09 15:53:56'), (6,20,1,'admin','2021-09-09 15:53:56'),
(485,6,22,1,'admin','2021-09-09 15:53:56'), (6,22,1,'admin','2021-09-09 15:53:56'),
(486,6,23,1,'admin','2021-09-09 15:53:56'), (6,23,1,'admin','2021-09-09 15:53:56'),
(487,6,24,1,'admin','2021-09-09 15:53:56'), (6,24,1,'admin','2021-09-09 15:53:56'),
(488,6,25,1,'admin','2021-09-09 15:53:56'), (6,25,1,'admin','2021-09-09 15:53:56'),
(489,6,26,1,'admin','2021-09-09 15:53:56'), (6,26,1,'admin','2021-09-09 15:53:56'),
(490,6,27,1,'admin','2021-09-09 15:53:56'), (6,27,1,'admin','2021-09-09 15:53:56'),
(491,6,28,1,'admin','2021-09-09 15:53:56'), (6,28,1,'admin','2021-09-09 15:53:56'),
(492,8,42,1,'admin','2021-11-05 15:59:16'), (8,42,1,'admin','2021-11-05 15:59:16'),
(493,8,43,1,'admin','2021-11-05 15:59:16'), (8,43,1,'admin','2021-11-05 15:59:16'),
(494,8,47,1,'admin','2021-11-05 15:59:16'), (8,47,1,'admin','2021-11-05 15:59:16'),
(495,8,60,1,'admin','2021-11-05 15:59:16'), (8,60,1,'admin','2021-11-05 15:59:16'),
(496,8,61,1,'admin','2021-11-05 15:59:16'), (8,61,1,'admin','2021-11-05 15:59:16'),
(497,8,62,1,'admin','2021-11-05 15:59:16'), (8,62,1,'admin','2021-11-05 15:59:16'),
(500,1,72,1,'admin','2022-07-14 11:03:09'), (1,72,1,'admin','2022-07-14 11:03:09'),
(501,1,71,1,'admin','2022-07-14 11:03:09'), (1,71,1,'admin','2022-07-14 11:03:09'),
(502,1,79,1,'admin','2022-07-14 11:03:09'), (1,79,1,'admin','2022-07-14 11:03:09'),
(503,1,80,1,'admin','2022-07-14 11:03:09'), (1,80,1,'admin','2022-07-14 11:03:09'),
(504,1,81,1,'admin','2022-07-14 11:03:09'), (1,81,1,'admin','2022-07-14 11:03:09'),
(505,1,82,1,'admin','2022-07-14 11:03:09'), (1,82,1,'admin','2022-07-14 11:03:09'),
(506,1,83,1,'admin','2022-07-14 11:03:09'), (1,83,1,'admin','2022-07-14 11:03:09'),
(507,1,84,1,'admin','2022-07-14 11:10:11'), (1,84,1,'admin','2022-07-14 11:10:11'),
(508,1,85,1,'admin','2022-07-14 11:10:11'), (1,85,1,'admin','2022-07-14 11:10:11'),
(510,1,87,1,'admin','2022-07-14 11:10:11'), (1,87,1,'admin','2022-07-14 11:10:11'),
(511,1,88,1,'admin','2022-10-08 10:54:06'), (1,88,1,'admin','2022-10-08 10:54:06'),
(512,8,80,1,'admin','2022-10-08 10:54:34'), (8,80,1,'admin','2022-10-08 10:54:34'),
(513,8,81,1,'admin','2022-10-08 10:54:34'), (8,81,1,'admin','2022-10-08 10:54:34'),
(515,8,79,1,'admin','2022-10-08 10:54:34'), (8,79,1,'admin','2022-10-08 10:54:34'),
(516,1,93,1,'admin','2022-10-26 20:03:14'), (1,93,1,'admin','2022-10-26 20:03:14'),
(517,1,94,1,'admin','2022-10-26 20:03:14'), (1,94,1,'admin','2022-10-26 20:03:14'),
(518,1,96,1,'admin','2022-10-26 20:03:14'), (1,96,1,'admin','2022-10-26 20:03:14'),
(519,1,98,1,'admin','2022-10-26 20:03:14'), (1,98,1,'admin','2022-10-26 20:03:14'),
(520,1,95,1,'admin','2022-10-26 20:03:14'), (1,95,1,'admin','2022-10-26 20:03:14'),
(521,1,97,1,'admin','2022-10-26 20:03:14'), (1,97,1,'admin','2022-10-26 20:03:14'),
(522,1,99,1,'admin','2022-10-26 20:03:14'), (1,99,1,'admin','2022-10-26 20:03:14'),
(523,1,100,1,'admin','2022-10-26 20:03:14'), (1,100,1,'admin','2022-10-26 20:03:14'),
(524,1,101,1,'admin','2022-10-26 20:03:14'), (1,101,1,'admin','2022-10-26 20:03:14'),
(525,1,102,1,'admin','2022-10-26 20:03:14'), (1,102,1,'admin','2022-10-26 20:03:14'),
(527,1,106,1,'admin','2023-02-23 14:30:54'), (1,106,1,'admin','2023-02-23 14:30:54'),
(528,1,103,1,'admin','2023-02-23 14:30:54'), (1,103,1,'admin','2023-02-23 14:30:54'),
(529,1,105,1,'admin','2023-02-23 14:31:00'), (1,105,1,'admin','2023-02-23 14:31:00'),
(530,1,104,1,'admin','2023-02-24 13:40:26'), (1,104,1,'admin','2023-02-24 13:40:26'),
(532,1,108,1,'admin','2023-03-14 17:28:06'), (1,108,1,'admin','2023-03-14 17:28:06'),
(533,6,79,1,'admin','2023-03-14 17:28:50'), (6,79,1,'admin','2023-03-14 17:28:50'),
(534,6,80,1,'admin','2023-03-14 17:28:50'), (6,80,1,'admin','2023-03-14 17:28:50'),
(535,6,81,1,'admin','2023-03-14 17:28:50'), (6,81,1,'admin','2023-03-14 17:28:50'),
(536,6,82,1,'admin','2023-03-14 17:28:50'), (6,82,1,'admin','2023-03-14 17:28:50'),
(537,6,83,1,'admin','2023-03-14 17:28:50'), (6,83,1,'admin','2023-03-14 17:28:50'),
(538,6,84,1,'admin','2023-03-14 17:29:00'), (6,84,1,'admin','2023-03-14 17:29:00'),
(539,6,85,1,'admin','2023-03-14 17:29:00'), (6,85,1,'admin','2023-03-14 17:29:00'),
(540,6,87,1,'admin','2023-03-14 17:29:00'), (6,87,1,'admin','2023-03-14 17:29:00'),
(541,6,88,1,'admin','2023-03-14 17:29:00'), (6,88,1,'admin','2023-03-14 17:29:00'),
(544,1,109,1,'admin','2023-03-16 16:11:25'); (1,109,1,'admin','2023-03-16 16:11:25');
COMMIT; COMMIT;
-- ---------------------------- -- ----------------------------
@@ -760,7 +747,7 @@ CREATE TABLE `t_tag_tree` (
-- Records of t_tag_tree -- Records of t_tag_tree
-- ---------------------------- -- ----------------------------
BEGIN; BEGIN;
INSERT INTO `t_tag_tree` VALUES (33, 0, 'default', 'default', '默认', '默认标签', '2022-10-26 20:04:19', 1, 'admin', '2022-10-26 20:04:19', 1, 'admin'); INSERT INTO `t_tag_tree` VALUES (33, 0, 'default', 'default/', '默认', '默认标签', '2022-10-26 20:04:19', 1, 'admin', '2022-10-26 20:04:19', 1, 'admin');
COMMIT; COMMIT;
-- ---------------------------- -- ----------------------------
@@ -786,7 +773,7 @@ CREATE TABLE `t_tag_tree_team` (
-- Records of t_tag_tree_team -- Records of t_tag_tree_team
-- ---------------------------- -- ----------------------------
BEGIN; BEGIN;
INSERT INTO `t_tag_tree_team` VALUES (31, 33, 'default', 3, '2022-10-26 20:04:45', 1, 'admin', '2022-10-26 20:04:45', 1, 'admin'); INSERT INTO `t_tag_tree_team` VALUES (31, 33, 'default/', 3, '2022-10-26 20:04:45', 1, 'admin', '2022-10-26 20:04:45', 1, 'admin');
COMMIT; COMMIT;
-- ---------------------------- -- ----------------------------

View File

@@ -4,7 +4,7 @@ import "fmt"
const ( const (
AppName = "mayfly-go" AppName = "mayfly-go"
Version = "v1.4.2" Version = "v1.4.3"
) )
func GetAppInfo() string { func GetAppInfo() string {

View File

@@ -231,3 +231,7 @@ func GetListBySql(sql string, params ...any) []map[string]any {
func GetListBySql2Model(sql string, toEntity any, params ...any) error { func GetListBySql2Model(sql string, toEntity any, params ...any) error {
return global.Db.Raw(sql, params...).Find(toEntity).Error return global.Db.Raw(sql, params...).Find(toEntity).Error
} }
func ExecSql(sql string, params ...any) {
global.Db.Exec(sql, params...)
}

View File

@@ -33,13 +33,19 @@ func gormMysql() *gorm.DB {
SkipInitializeWithVersion: false, // 根据版本自动配置 SkipInitializeWithVersion: false, // 根据版本自动配置
} }
sqlLogLevel := logger.Error
logConf := config.Conf.Log
// 如果为配置文件中配置的系统日志级别为debug则打印gorm执行的sql信息
if logConf.Level == "debug" {
sqlLogLevel = logger.Info
}
gormLogger := logger.New( gormLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer日志输出的目标前缀和日志包含的内容——译者注 log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer日志输出的目标前缀和日志包含的内容——译者注
logger.Config{ logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值 SlowThreshold: time.Second, // 慢 SQL 阈值
LogLevel: logger.Error, // 日志级别, 改为logger.Info即可显示sql语句 LogLevel: sqlLogLevel, // 日志级别, 改为logger.Info即可显示sql语句
IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound记录未找到错误 IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound记录未找到错误
Colorful: true, // 禁用彩色打印 Colorful: true, // 禁用彩色打印
}, },
) )