feat: 代码优化

This commit is contained in:
meilin.huang
2023-03-16 16:40:57 +08:00
parent 5f1aaa40d8
commit 110abc4ac7
28 changed files with 430 additions and 340 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,51 @@
{
"id": "3953964",
"name": "mayfly-go",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "23957582",
"name": "MongoDB",
"font_class": "mongo",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "4969649",
"name": "Redis",
"font_class": "op-redis",
"unicode": "e728",
"unicode_decimal": 59176
},
{
"icon_id": "22442993",
"name": "PostgreSQL",
"font_class": "op-postgres",
"unicode": "e8b7",
"unicode_decimal": 59575
},
{
"icon_id": "10055634",
"name": "云数据库MongoDB",
"font_class": "op-mongo",
"unicode": "e7d7",
"unicode_decimal": 59351
},
{
"icon_id": "10055642",
"name": "云数据库 RDS MySQL",
"font_class": "op-mysql",
"unicode": "e7d8",
"unicode_decimal": 59352
},
{
"icon_id": "3876165",
"name": "redis",
"font_class": "redis",
"unicode": "e619",
"unicode_decimal": 58905
}
]
}

View File

@@ -1,42 +1,47 @@
// 字体图标 url // 字体图标 url
const cssCdnUrlList: Array<string> = [ const cssCdnUrlList: Array<string> = [
'//at.alicdn.com/t/font_2298093_ysc3z187xhh.css',
'//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css',
]; ];
// 第三方 js url // 第三方 js url
const jsCdnUrlList: Array<string> = []; const jsCdnUrlList: Array<string> = [];
// 动态设置字体图标 // 动态批量设置字体图标
export function setCssCdn() { export function setCssCdn() {
if (cssCdnUrlList.length <= 0) return false; if (cssCdnUrlList.length <= 0) return false;
cssCdnUrlList.map((v) => { cssCdnUrlList.map((v) => {
let link = document.createElement('link'); let link = document.createElement('link');
link.rel = 'stylesheet'; link.rel = 'stylesheet';
link.href = v; link.href = v;
link.crossOrigin = 'anonymous'; link.crossOrigin = 'anonymous';
document.getElementsByTagName('head')[0].appendChild(link); document.getElementsByTagName('head')[0].appendChild(link);
}); });
} }
// 批量设置第三方js // 动态批量设置第三方js
export function setJsCdn() { export function setJsCdn() {
if (jsCdnUrlList.length <= 0) return false; if (jsCdnUrlList.length <= 0) return false;
jsCdnUrlList.map((v) => { jsCdnUrlList.map((v) => {
let link = document.createElement('script'); let link = document.createElement('script');
link.src = v; link.src = v;
document.body.appendChild(link); document.body.appendChild(link);
}); });
} }
// 设置执行函数 /**
* 批量设置字体图标、动态js
* @method cssCdn 动态批量设置字体图标
* @method jsCdn 动态批量设置第三方js
*/
const setIntroduction = { const setIntroduction = {
cssCdn: () => { // 设置css
setCssCdn(); cssCdn: () => {
}, setCssCdn();
jsCdn: () => { },
setJsCdn(); // 设置js
}, jsCdn: () => {
setJsCdn();
},
}; };
// 导出函数方法 // 导出函数方法
export default setIntroduction; export default setIntroduction;

View File

@@ -1,5 +1,20 @@
import { nextTick } from 'vue'; import { nextTick } from 'vue';
import * as svg from '@element-plus/icons-vue'; import * as svg from '@element-plus/icons-vue';
import iconfontJson from '@/assets/iconfont/iconfont.json'
import SvgIcon from '@/components/svgIcon/index.vue';
/**
* element plus svg
* @param app vue
* @description 使https://element-plus.gitee.io/zh-CN/component/icon.html
*/
export function registElSvgIcon(app: any) {
const icons = svg as any;
for (const i in icons) {
app.component(`${icons[i].name}`, icons[i]);
}
app.component('SvgIcon', SvgIcon);
}
// 获取阿里字体图标 // 获取阿里字体图标
const getAlicdnIconfont = () => { const getAlicdnIconfont = () => {
@@ -9,7 +24,8 @@ const getAlicdnIconfont = () => {
let sheetsList = []; let sheetsList = [];
let sheetsIconList = []; let sheetsIconList = [];
for (let i = 0; i < styles.length; i++) { for (let i = 0; i < styles.length; i++) {
if (styles[i].href && styles[i].href.indexOf('at.alicdn.com') > -1) { console.log(styles[i]);
if (styles[i].href && styles[i].href.indexOf('iconfont') > -1) {
sheetsList.push(styles[i]); sheetsList.push(styles[i]);
} }
} }
@@ -28,6 +44,16 @@ const getAlicdnIconfont = () => {
}); });
}; };
// 获取本地阿里icons
const getLocalAliIconfont = () => {
return new Promise((resolve, reject) => {
nextTick(() => {
const prefix = iconfontJson.css_prefix_text;
resolve(iconfontJson.glyphs.map((x: any) => prefix + x.font_class));
});
});
}
// 初始化获取 css 样式,获取 element plus 自带图标 // 初始化获取 css 样式,获取 element plus 自带图标
const elementPlusIconfont = () => { const elementPlusIconfont = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -76,9 +102,9 @@ const awesomeIconfont = () => {
// 定义导出方法集合 // 定义导出方法集合
const initIconfont = { const initIconfont = {
// ali: () => { ali: () => {
// return getAlicdnIconfont(); return getLocalAliIconfont();
// }, },
ele: () => { ele: () => {
return elementPlusIconfont(); return elementPlusIconfont();
}, },

View File

@@ -16,7 +16,6 @@
:name="state.fontIconPrefix === '' ? prepend : state.fontIconPrefix" :name="state.fontIconPrefix === '' ? prepend : state.fontIconPrefix"
class="font14" class="font14"
/> />
<!-- <i v-else :class="state.fontIconPrefix === '' ? prepend : state.fontIconPrefix" class="font14"></i> -->
</template> </template>
</el-input> </el-input>
<el-popover <el-popover
@@ -32,12 +31,12 @@
<div class="icon-selector-warp"> <div class="icon-selector-warp">
<div class="icon-selector-warp-title">{{ title }}</div> <div class="icon-selector-warp-title">{{ title }}</div>
<el-tabs v-model="state.fontIconTabActive" @tab-click="onIconClick"> <el-tabs v-model="state.fontIconTabActive" @tab-click="onIconClick">
<!-- <el-tab-pane lazy label="ali" name="ali">
<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
</el-tab-pane> -->
<el-tab-pane lazy label="ele" name="ele"> <el-tab-pane lazy label="ele" name="ele">
<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" /> <IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane lazy label="ali" name="ali">
<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
</el-tab-pane>
<!-- <el-tab-pane lazy label="awe" name="awe"> <!-- <el-tab-pane lazy label="awe" name="awe">
<IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" /> <IconList :list="fontIconSheetsFilterList" :empty="emptyDescription" :prefix="state.fontIconPrefix" @get-icon="onColClick" />
</el-tab-pane> --> </el-tab-pane> -->
@@ -51,7 +50,7 @@
<script setup lang="ts" name="iconSelector"> <script setup lang="ts" name="iconSelector">
import { defineAsyncComponent, ref, reactive, onMounted, nextTick, computed, watch } from 'vue'; import { defineAsyncComponent, ref, reactive, onMounted, nextTick, computed, watch } from 'vue';
import type { TabsPaneContext } from 'element-plus'; import type { TabsPaneContext } from 'element-plus';
import initIconfont from '@/common/utils/getStyleSheets'; import initIconfont from '@/common/utils/svgIcons';
import '@/theme/iconSelector.scss'; import '@/theme/iconSelector.scss';
// 定义父组件传过来的值 // 定义父组件传过来的值
@@ -158,7 +157,11 @@ const initModeValueEcho = () => {
// 处理 icon 类型用于回显时tab 高亮与初始化数据 // 处理 icon 类型用于回显时tab 高亮与初始化数据
const initFontIconName = () => { const initFontIconName = () => {
let name = 'ele'; let name = 'ele';
// if (props.modelValue!.indexOf('iconfont') > -1) name = 'ali'; if (props.modelValue!.indexOf('iconfont') > -1) {
name = 'ali';
} else {
name = 'ele';
}
// else if (props.modelValue!.indexOf('ele-') > -1) name = 'ele'; // else if (props.modelValue!.indexOf('ele-') > -1) name = 'ele';
// else if (props.modelValue!.indexOf('fa') > -1) name = 'awe'; // else if (props.modelValue!.indexOf('fa') > -1) name = 'awe';
// 初始化 tab 高亮回显 // 初始化 tab 高亮回显
@@ -169,10 +172,9 @@ const initFontIconName = () => {
const initFontIconData = async (name: string) => { const initFontIconData = async (name: string) => {
if (name === 'ali') { if (name === 'ali') {
// 阿里字体图标使用 `iconfont xxx` // 阿里字体图标使用 `iconfont xxx`
// if (state.fontIconList.ali.length > 0) return; if (state.fontIconList.ali.length > 0) return;
// await initIconfont.ali().then((res: any) => { const res: any = await initIconfont.ali();
// state.fontIconList.ali = res.map((i: string) => `iconfont ${i}`); state.fontIconList.ali = res.map((i: string) => `iconfont ${i}`);
// });
} else if (name === 'ele') { } else if (name === 'ele') {
// element plus 图标 // element plus 图标
if (state.fontIconList.ele.length > 0) return; if (state.fontIconList.ele.length > 0) return;

View File

@@ -1,11 +1,17 @@
<template> <template>
<i v-if="isEle" class="el-icon" :style="setIconSvgStyle"> <i v-if="isShowIconSvg" class="el-icon icon-middle" :style="setIconSvgStyle">
<component :is="getIconName" /> <component :is="getIconName" :style="setIconSvgStyle" />
</i> </i>
<div v-else-if="isShowIconImg" :style="setIconImgOutStyle">
<img :src="getIconName" :style="setIconSvgInsStyle" /> <svg v-else-if="isIconfont()" class="el-icon iconfont-icon icon-middle" aria-hidden="true" :style="setIconSvgStyle">
</div> <use :xlink:href="'#' + getIconfontName()"></use>
<i v-else :class="getIconName" :style="setIconSvgStyle" /> </svg>
<div v-else-if="isShowIconImg" :style="setIconImgOutStyle">
<img :src="getIconName" :style="setIconSvgInsStyle" />
</div>
<i v-else :class="getIconName" :style="setIconSvgStyle" />
</template> </template>
<script setup lang="ts" name="svgIcon"> <script setup lang="ts" name="svgIcon">
@@ -13,19 +19,19 @@ import { computed } from 'vue';
// 定义父组件传过来的值 // 定义父组件传过来的值
const props = defineProps({ const props = defineProps({
// svg 图标组件名字 // svg 图标组件名字
name: { name: {
type: String, type: String,
}, },
// svg 大小 // svg 大小
size: { size: {
type: Number, type: Number,
default: () => 14, default: () => 14,
}, },
// svg 颜色 // svg 颜色
color: { color: {
type: String, type: String,
}, },
isEle: { isEle: {
type: Boolean, type: Boolean,
default: true, default: true,
@@ -33,35 +39,67 @@ const props = defineProps({
}); });
// 在线链接、本地引入地址前缀 // 在线链接、本地引入地址前缀
// https://gitee.com/lyt-top/vue-next-admin/issues/I62OVL
const linesString = ['https', 'http', '/src', '/assets', 'data:image', import.meta.env.VITE_PUBLIC_PATH]; const linesString = ['https', 'http', '/src', '/assets', 'data:image', import.meta.env.VITE_PUBLIC_PATH];
// 获取 icon 图标名称 // 获取 icon 图标名称
const getIconName = computed(() => { const getIconName = computed(() => {
return props?.name; return props?.name as any;
}); });
// 用于判断 element plus 自带 svg 图标的显示、隐藏
// 用于判断 element plus 自带 svg 图标的显示、隐藏。不存在 空格分隔的icon name即为element plus自带icon
const isShowIconSvg = computed(() => { const isShowIconSvg = computed(() => {
return props?.name?.startsWith('ele-'); const ss = props?.name?.split(" ")
if (!ss) {
return true;
}
return ss.length == 1;
}); });
const isIconfont = () => {
return props?.name?.startsWith("iconfont")
}
const getIconfontName = () => {
// iconfont icon-xxxx 获取icon-xxx即可
return props?.name?.split(" ")[1]
}
// 用于判断在线链接、本地引入等图标显示、隐藏 // 用于判断在线链接、本地引入等图标显示、隐藏
const isShowIconImg = computed(() => { const isShowIconImg = computed(() => {
return linesString.find((str) => props.name?.startsWith(str)); return linesString.find((str) => props.name?.startsWith(str));
}); });
// 设置图标样式 // 设置图标样式
const setIconSvgStyle = computed(() => { const setIconSvgStyle = computed(() => {
return `font-size: ${props.size}px;color: ${props.color};`; return `font-size: ${props.size}px;color: ${props.color};width: ${props.size}px;height: ${props.size}px;`;
}); });
// 设置图片样式 // 设置图片样式
const setIconImgOutStyle = computed(() => { const setIconImgOutStyle = computed(() => {
return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`; return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`;
}); });
// 设置图片样式 // 设置图片样式
// https://gitee.com/lyt-top/vue-next-admin/issues/I59ND0
const setIconSvgInsStyle = computed(() => { const setIconSvgInsStyle = computed(() => {
const filterStyle: string[] = []; const filterStyle: string[] = [];
const compatibles: string[] = ['-webkit', '-ms', '-o', '-moz']; const compatibles: string[] = ['-webkit', '-ms', '-o', '-moz'];
compatibles.forEach((j) => filterStyle.push(`${j}-filter: drop-shadow(${props.color} 30px 0);`)); compatibles.forEach((j) => filterStyle.push(`${j}-filter: drop-shadow(${props.color} 30px 0);`));
return `width: ${props.size}px;height: ${props.size}px;position: relative;left: -${props.size}px;${filterStyle.join('')}`; return `width: ${props.size}px;height: ${props.size}px;position: relative;left: -${props.size}px;${filterStyle.join('')}`;
}); });
</script> </script>
<style type="text/css">
.iconfont-icon {
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.icon-middle {
display: inline-flex;
justify-content: center;
align-items: center;
cursor: pointer;
vertical-align: middle;
}
</style>

View File

@@ -1,36 +1,24 @@
import { createApp } from 'vue'; import { createApp } from 'vue';
import App from '@/App.vue'; import App from '@/App.vue';
import router from './router'; import router from './router';
import pinia from '@/store/index'; import pinia from '@/store/index';
import { directive } from '@/directive/index'; import { directive } from '@/directive/index';
import { globalComponentSize } from '@/common/utils/componentSize'; import { globalComponentSize } from '@/common/utils/componentSize';
import { registElSvgIcon } from '@/common/utils/svgIcons';
import ElementPlus from 'element-plus'; import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'; import 'element-plus/dist/index.css';
import zhCn from 'element-plus/es/locale/lang/zh-cn' import zhCn from 'element-plus/es/locale/lang/zh-cn'
import '@/theme/index.scss';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import * as svg from '@element-plus/icons-vue'; import '@/theme/index.scss';
import SvgIcon from '@/components/svgIcon/index.vue';
import '@/assets/font/font.css' import '@/assets/font/font.css'
import '@/assets/iconfont/iconfont.js'
const app = createApp(App); const app = createApp(App);
/** registElSvgIcon(app);
* 导出全局注册 element plus svg 图标
* @param app vue 实例
* @description 使用https://element-plus.gitee.io/zh-CN/component/icon.html
*/
function elSvg(app: any) {
const icons = svg as any;
for (const i in icons) {
app.component(`${icons[i].name}`, icons[i]);
}
app.component('SvgIcon', SvgIcon);
}
elSvg(app);
directive(app); directive(app);
app.use(pinia) app.use(pinia)

View File

@@ -340,24 +340,4 @@ body,
.f12 { .f12 {
font-size: 12px font-size: 12px
}
// 图标垂直居中
.icon-middle {
.el-icon {
display: inline-flex;
justify-content: center;
align-items: center;
cursor: pointer;
vertical-align: middle;
}
}
.img-icon {
display: inline-flex;
justify-content: center;
align-items: center;
cursor: pointer;
vertical-align: middle;
height: 16px;
width: 16px;
} }

View File

@@ -6,19 +6,19 @@
<template v-for="val in menuLists"> <template v-for="val in menuLists">
<el-submenu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path"> <el-submenu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
<template #title> <template #title>
<i :class="val.meta.icon ? val.meta.icon : ''"></i> <SvgIcon :name="val.meta.icon"/>
<span>{{ val.meta.title }}</span> <span>{{ val.meta.title }}</span>
</template> </template>
<SubItem :chil="val.children" /> <SubItem :chil="val.children" />
</el-submenu> </el-submenu>
<el-menu-item :index="val.path" :key="val?.path" v-else> <el-menu-item :index="val.path" :key="val?.path" v-else>
<template #title v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)"> <template #title v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)">
<i :class="val.meta.icon ? val.meta.icon : ''"></i> <SvgIcon :name="val.meta.icon"/>
{{ val.meta.title }} {{ val.meta.title }}
</template> </template>
<template #title v-else> <template #title v-else>
<a :href="val.meta.link" target="_blank"> <a :href="val.meta.link" target="_blank">
<i :class="val.meta.icon ? val.meta.icon : ''"></i> <SvgIcon :name="val.meta.icon"/>
{{ val.meta.title }} {{ val.meta.title }}
</a> </a>
</template> </template>

View File

@@ -2,19 +2,19 @@
<template v-for="val in chils"> <template v-for="val in chils">
<el-sub-menu :index="val.path" :key="val.path" v-if="val.children && val.children.length > 0"> <el-sub-menu :index="val.path" :key="val.path" v-if="val.children && val.children.length > 0">
<template #title> <template #title>
<SvgIcon :name="val.meta.icon" /> <SvgIcon :name="val.meta.icon"/>
<span>{{ val.meta.title }}</span> <span>{{ val.meta.title }}</span>
</template> </template>
<sub-item :chil="val.children" /> <sub-item :chil="val.children" />
</el-sub-menu> </el-sub-menu>
<el-menu-item :index="val.path" :key="val.path" v-else> <el-menu-item :index="val.path" :key="val?.path" v-else>
<template v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)"> <template v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)">
<SvgIcon :name="val.meta.icon" /> <SvgIcon :name="val.meta.icon"/>
<span>{{ val.meta.title }}</span> <span>{{ val.meta.title }}</span>
</template> </template>
<template v-else> <template v-else>
<a :href="val.meta.link" target="_blank"> <a :href="val.meta.link" target="_blank">
<SvgIcon :name="val.meta.icon" /> <SvgIcon :name="val.meta.icon"/>
{{ val.meta.title }} {{ val.meta.title }}
</a> </a>
</template> </template>
@@ -24,6 +24,7 @@
<script lang="ts"> <script lang="ts">
import { computed, defineComponent } from 'vue'; import { computed, defineComponent } from 'vue';
import SvgIcon from '@/components/svgIcon/index.vue';
export default defineComponent({ export default defineComponent({
name: 'navMenuSubItem', name: 'navMenuSubItem',
props: { props: {
@@ -35,7 +36,7 @@ export default defineComponent({
setup(props) { setup(props) {
// 获取父级菜单数据 // 获取父级菜单数据
const chils = computed(() => { const chils = computed(() => {
return props.chil; return props.chil as any;
}); });
return { return {
chils, chils,

View File

@@ -4,13 +4,13 @@
<template v-for="val in menuLists"> <template v-for="val in menuLists">
<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path"> <el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
<template #title> <template #title>
<SvgIcon :name="val.meta.icon" /> <SvgIcon :name="val.meta.icon"/>
<span>{{ val.meta.title }}</span> <span>{{ val.meta.title }}</span>
</template> </template>
<SubItem :chil="val.children" /> <SubItem :chil="val.children" />
</el-sub-menu> </el-sub-menu>
<el-menu-item :index="val.path" :key="val?.path" v-else> <el-menu-item :index="val.path" :key="val?.path" v-else>
<SvgIcon :name="val.meta.icon" /> <SvgIcon :name="val.meta.icon"/>
<template #title v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)"> <template #title v-if="!val.meta.link || (val.meta.link && val.meta.isIframe)">
<span>{{ val.meta.title }}</span> <span>{{ val.meta.title }}</span>
</template> </template>

View File

@@ -6,9 +6,10 @@
<el-tree ref="treeRef" :style="{ maxHeight: state.height, height: state.height, overflow: 'auto' }" <el-tree ref="treeRef" :style="{ maxHeight: state.height, height: state.height, overflow: 'auto' }"
:highlight-current="true" :indent="7" :load="loadNode" :props="treeProps" lazy node-key="key" :highlight-current="true" :indent="7" :load="loadNode" :props="treeProps" lazy node-key="key"
:expand-on-click-node="true" :filter-node-method="filterNode" @node-click="treeNodeClick" @node-expand="treeNodeClick"> :expand-on-click-node="true" :filter-node-method="filterNode" @node-click="treeNodeClick"
@node-expand="treeNodeClick">
<template #default="{ node, data }"> <template #default="{ node, data }">
<span class="icon-middle "> <span>
<span v-if="data.type == TagTreeNode.TagPath"> <span v-if="data.type == TagTreeNode.TagPath">
<tag-info :tag-path="data.label" /> <tag-info :tag-path="data.label" />
</span> </span>
@@ -60,7 +61,7 @@ const { filterText } = toRefs(state)
onMounted(async () => { onMounted(async () => {
if (!props.height) { if (!props.height) {
state.height = window.innerHeight - 145 + 'px'; state.height = window.innerHeight - 147 + 'px';
} else { } else {
state.height = props.height; state.height = props.height;
} }
@@ -84,7 +85,13 @@ const loadNode = async (node: any, resolve: any) => {
if (typeof resolve !== 'function') { if (typeof resolve !== 'function') {
return; return;
} }
return resolve(await props.load(node)); let nodes = []
try {
nodes = await props.load(node)
} catch (e: any) {
console.error(e);
}
return resolve(nodes)
}; };
const treeNodeClick = (data: any) => { const treeNodeClick = (data: any) => {

View File

@@ -10,7 +10,7 @@
<el-select @focus="getTags" v-model="query.tagPath" placeholder="请选择标签" filterable clearable> <el-select @focus="getTags" v-model="query.tagPath" placeholder="请选择标签" filterable clearable>
<el-option v-for="item in tags" :key="item" :label="item" :value="item"> </el-option> <el-option v-for="item in tags" :key="item" :label="item" :value="item"> </el-option>
</el-select> </el-select>
<el-button v-waves type="primary" icon="search" @click="search()" class="ml5">查询</el-button> <el-button type="success" icon="search" @click="search()" class="ml5"></el-button>
</div> </div>
<el-table :data="datas" ref="table" @current-change="choose" show-overflow-tooltip stripe> <el-table :data="datas" ref="table" @current-change="choose" show-overflow-tooltip stripe>
<el-table-column label="选择" width="60px"> <el-table-column label="选择" width="60px">

View File

@@ -28,14 +28,10 @@
<span v-if="data.type == NodeType.DbInst"> <span v-if="data.type == NodeType.DbInst">
<el-popover placement="right-start" title="数据库实例信息" trigger="hover" :width="210"> <el-popover placement="right-start" title="数据库实例信息" trigger="hover" :width="210">
<template #reference> <template #reference>
<img v-if="data.params.type === 'mysql'" src="@/assets/icon/mysql.png" <SvgIcon v-if="data.params.type === 'mysql'" name="iconfont icon-op-mysql" :size="18" />
class="img-icon" /> <SvgIcon v-if="data.params.type === 'postgres'" name="iconfont icon-op-postgres" :size="18" />
<img v-if="data.params.type === 'postgres'" src="@/assets/icon/postgres.png"
class="img-icon" />
<el-icon v-else> <SvgIcon name="InfoFilled" v-else />
<InfoFilled />
</el-icon>
</template> </template>
<template #default> <template #default>
<el-form class="instances-pop-form" label-width="55px" :size="'small'"> <el-form class="instances-pop-form" label-width="55px" :size="'small'">
@@ -52,23 +48,16 @@
</el-popover> </el-popover>
</span> </span>
<el-icon v-if="data.type == NodeType.Db"> <SvgIcon v-if="data.type == NodeType.Db" name="Coin" color="#67c23a" />
<Coin color="#67c23a" />
</el-icon> <SvgIcon name="Calendar" v-if="data.type == NodeType.TableMenu" color="#409eff" />
<el-icon v-if="data.type == NodeType.TableMenu">
<Calendar color="#409eff" />
</el-icon>
<el-tooltip v-if="data.type == NodeType.Table" effect="customized" <el-tooltip v-if="data.type == NodeType.Table" effect="customized"
:content="data.params.tableComment" placement="top-end"> :content="data.params.tableComment" placement="top-end">
<el-icon> <SvgIcon name="Calendar" color="#409eff" />
<Calendar color="#409eff" />
</el-icon>
</el-tooltip> </el-tooltip>
<el-icon v-if="data.type == NodeType.SqlMenu || data.type == NodeType.Sql"> <SvgIcon name="Files" v-if="data.type == NodeType.SqlMenu || data.type == NodeType.Sql" color="#f56c6c" />
<Files color="#f56c6c" />
</el-icon>
</template> </template>
</tag-tree> </tag-tree>
</el-col> </el-col>

View File

@@ -105,7 +105,8 @@
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item> <el-dropdown-item>
<el-link :disabled="!scope.row.hasCli || scope.row.status == -1" type="danger" <el-link v-auth="'machine:close-cli'"
:disabled="!scope.row.hasCli || scope.row.status == -1" type="danger"
@click="closeCli(scope.row)" plain size="small" :underline="false">关闭连接 @click="closeCli(scope.row)" plain size="small" :underline="false">关闭连接
</el-link> </el-link>
</el-dropdown-item> </el-dropdown-item>

View File

@@ -9,10 +9,7 @@
</el-button> </el-button>
<div style="float: right"> <div style="float: right">
<el-select v-model="query.type" placeholder="请选择标签" @clear="search" filterable clearable> <el-input class="ml5" placeholder="请输入凭证名称" style="width: 200px" v-model="query.name" @clear="search"
<el-option label="" value="item"> </el-option>
</el-select>
<el-input class="ml5" placeholder="请输入凭证名称" style="width: 150px" v-model="query.name" @clear="search"
plain clearable></el-input> plain clearable></el-input>
<el-button class="ml5" @click="search" type="success" icon="search"></el-button> <el-button class="ml5" @click="search" type="success" icon="search"></el-button>
</div> </div>

View File

@@ -7,7 +7,7 @@
<span v-if="data.type == NodeType.Mongo"> <span v-if="data.type == NodeType.Mongo">
<el-popover placement="right-start" title="mongo实例信息" trigger="hover" :width="210"> <el-popover placement="right-start" title="mongo实例信息" trigger="hover" :width="210">
<template #reference> <template #reference>
<img src="@/assets/icon/mongo.png" class="img-icon" /> <SvgIcon name="iconfont icon-op-mongo" :size="18"/>
</template> </template>
<template #default> <template #default>
<el-form class="instances-pop-form" label-width="50px" :size="'small'"> <el-form class="instances-pop-form" label-width="50px" :size="'small'">
@@ -20,13 +20,9 @@
</el-popover> </el-popover>
</span> </span>
<el-icon v-if="data.type == NodeType.Dbs"> <SvgIcon v-if="data.type == NodeType.Dbs" name="Coin" color="#67c23a"/>
<Coin color="#67c23a" />
</el-icon>
<el-icon v-if="data.type == NodeType.Coll || data.type == NodeType.CollMenu"> <SvgIcon v-if="data.type == NodeType.Coll || data.type == NodeType.CollMenu" name="Document" class="color-primary"/>
<Document class="color-primary" />
</el-icon>
</template> </template>
<template #label="{ data }"> <template #label="{ data }">

View File

@@ -9,7 +9,7 @@
<span v-if="data.type == NodeType.Redis"> <span v-if="data.type == NodeType.Redis">
<el-popover placement="right-start" title="redis实例信息" trigger="hover" :width="210"> <el-popover placement="right-start" title="redis实例信息" trigger="hover" :width="210">
<template #reference> <template #reference>
<img src="@/assets/icon/redis.png" class="img-icon" /> <SvgIcon name="iconfont icon-op-redis" :size="18"/>
</template> </template>
<template #default> <template #default>
<el-form class="instances-pop-form" label-width="50px" :size="'small'"> <el-form class="instances-pop-form" label-width="50px" :size="'small'">
@@ -24,9 +24,7 @@
</el-popover> </el-popover>
</span> </span>
<el-icon v-if="data.type == NodeType.Db"> <SvgIcon v-if="data.type == NodeType.Db" name="Coin" color="#67c23a"/>
<Coin color="#67c23a" />
</el-icon>
</template> </template>
</tag-tree> </tag-tree>
</el-col> </el-col>

View File

@@ -9,9 +9,9 @@
<el-button v-auth="'account:del'" :disabled="chooseId == null" @click="deleteAccount()" type="danger" <el-button v-auth="'account:del'" :disabled="chooseId == null" @click="deleteAccount()" type="danger"
icon="delete">删除</el-button> icon="delete">删除</el-button>
<div style="float: right"> <div style="float: right">
<el-input class="mr2" placeholder="请输入账号名" size="small" style="width: 300px" v-model="query.username" <el-input class="mr2" placeholder="请输入账号名" style="width: 200px" v-model="query.username"
@clear="search()" clearable></el-input> @clear="search()" clearable></el-input>
<el-button @click="search()" type="success" icon="search" size="small"></el-button> <el-button @click="search()" type="success" icon="search"></el-button>
</div> </div>
<el-table :data="datas" ref="table" @current-change="choose" show-overflow-tooltip> <el-table :data="datas" ref="table" @current-change="choose" show-overflow-tooltip>
<el-table-column label="选择" width="55px"> <el-table-column label="选择" width="55px">

View File

@@ -219,7 +219,6 @@ const addResource = (data: any) => {
}; };
const editResource = async (data: any) => { const editResource = async (data: any) => {
state.dialogForm.visible = true;
const res = await resourceApi.detail.request({ const res = await resourceApi.detail.request({
id: data.id, id: data.id,
}); });
@@ -230,6 +229,7 @@ const editResource = async (data: any) => {
state.dialogForm.data = res; state.dialogForm.data = res;
state.dialogForm.typeDisabled = true; state.dialogForm.typeDisabled = true;
state.dialogForm.title = '修改“' + data.name + '”菜单'; state.dialogForm.title = '修改“' + data.name + '”菜单';
state.dialogForm.visible = true;
}; };
const valChange = () => { const valChange = () => {

View File

@@ -57,6 +57,7 @@ func InitMachineRouter(router *gin.RouterGroup) {
machines.PUT(":machineId/:status", func(c *gin.Context) { machines.PUT(":machineId/:status", func(c *gin.Context) {
req.NewCtxWithGin(c). req.NewCtxWithGin(c).
WithLog(changeStatus). WithLog(changeStatus).
WithRequiredPermission(saveMachineP).
Handle(m.ChangeStatus) Handle(m.ChangeStatus)
}) })
@@ -68,8 +69,12 @@ func InitMachineRouter(router *gin.RouterGroup) {
}) })
closeCli := req.NewLogInfo("关闭机器客户端").WithSave(true) closeCli := req.NewLogInfo("关闭机器客户端").WithSave(true)
closeCliP := req.NewPermission("machine:close-cli")
machines.DELETE(":machineId/close-cli", func(c *gin.Context) { machines.DELETE(":machineId/close-cli", func(c *gin.Context) {
req.NewCtxWithGin(c).WithLog(closeCli).Handle(m.CloseCli) req.NewCtxWithGin(c).
WithLog(closeCli).
WithRequiredPermission(closeCliP).
Handle(m.CloseCli)
}) })
machines.GET(":machineId/terminal", m.WsSSH) machines.GET(":machineId/terminal", m.WsSSH)

View File

@@ -443,7 +443,7 @@ 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,`type`,status,name,code,weight,meta,creator_id,creator,modifier_id,modifier,create_time,update_time) VALUES
(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'), (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'),
(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'), (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'),
(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-14 14:33:15'), (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'),
(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'), (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'),
(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'), (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'),
(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'), (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'),
@@ -469,9 +469,9 @@ INSERT INTO `t_sys_resource` (id,pid,`type`,status,name,code,weight,meta,creator
(32,5,2,1,'资源管理基本权限','resource',0,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'),
(33,11,2,1,'角色管理基本权限','role',0,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'),
(34,14,2,1,'账号启用禁用按钮','account:changeStatus',5,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'),
(36,0,1,1,'DBMS','/dbms',5,'{"icon":"Grid","isKeepAlive":true,"routeName":"DBMS"}',1,'admin',1,'admin','2021-06-01 14:01:33','2022-10-06 15:00:40'), (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'),
(37,3,2,1,'添加文件配置','machine:addFile',6,'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'),
(38,36,1,1,'数据操作','sql-exec',1,'{"component":"ops/db/SqlExec","icon":"Search","isKeepAlive":true,"routeName":"SqlExec"}',1,'admin',1,'admin','2021-06-03 09:09:29','2023-03-14 15:42:29'), (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'),
(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'), (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'),
(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'), (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'),
(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'), (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'),
@@ -481,23 +481,23 @@ INSERT INTO `t_sys_resource` (id,pid,`type`,status,name,code,weight,meta,creator
(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'), (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'),
(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'), (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'),
(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'), (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'),
(49,36,1,1,'数据库管理','dbs',2,'{"component":"ops/db/DbList","icon":"Menu","isKeepAlive":true,"routeName":"DbList"}',1,'admin',1,'admin','2021-07-07 15:13:55','2023-03-14 14:34:01'), (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'),
(54,49,2,1,'数据库保存','db:save',1,'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'),
(55,49,2,1,'数据库删除','db:del',2,'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'),
(57,3,2,1,'基本权限','machine',0,'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'),
(58,49,2,1,'基本权限','db',0,'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'),
(59,38,2,1,'基本权限','db:exec',1,'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'),
(60,0,1,1,'Redis','/redis',6,'{"icon":"Menu","isKeepAlive":true,"routeName":"RDS"}',1,'admin',1,'admin','2021-07-19 20:15:41','2022-10-06 15:01:29'), (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'),
(61,60,1,1,'数据操作','data-operation',1,'{"component":"ops/redis/DataOperation","icon":"Search","isKeepAlive":true,"routeName":"DataOperation"}',1,'admin',1,'admin','2021-07-19 20:17:29','2023-03-14 15:40:32'), (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'),
(62,61,2,1,'基本权限','redis:data',1,'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'),
(63,60,1,1,'redis管理','manage',2,'{"component":"ops/redis/RedisList","icon":"Menu","isKeepAlive":true,"routeName":"RedisList"}',1,'admin',1,'admin','2021-07-20 10:48:04','2023-03-14 15:42:56'), (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'),
(64,63,2,1,'基本权限','redis:manage',1,'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'),
(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'), (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'),
(72,3,2,1,'终止进程','machine:killprocess',6,'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'),
(79,0,1,1,'Mongo','/mongo',7,'{"icon":"Document","isKeepAlive":true,"routeName":"Mongo"}',1,'admin',1,'admin','2022-05-13 14:00:41','2022-10-06 15:01:34'), (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'),
(80,79,1,1,'数据操作','mongo-data-operation',1,'{"component":"ops/mongo/MongoDataOp","icon":"Document","isKeepAlive":true,"routeName":"MongoDataOp"}',1,'admin',1,'admin','2022-05-13 14:03:58','2023-03-14 15:41: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'),
(81,80,2,1,'基本权限','mongo:base',1,'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'),
(82,79,1,1,'Mongo管理','mongo-manage',2,'{"component":"ops/mongo/MongoList","icon":"Menu","isKeepAlive":true,"routeName":"MongoList"}',1,'admin',1,'admin','2022-05-16 18:13:06','2023-03-14 15:41:13'), (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'),
(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'), (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'),
(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'), (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'),
(85,84,2,1,'操作日志基本权限','syslog',1,'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'),
@@ -517,7 +517,8 @@ INSERT INTO `t_sys_resource` (id,pid,`type`,status,name,code,weight,meta,creator
(104,103,2,1,'基本权限','authcert',1,'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'),
(105,103,2,1,'保存权限','authcert:save',2,'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'),
(106,103,2,1,'删除权限','authcert:del',3,'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'),
(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'); (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'),
(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;
-- ---------------------------- -- ----------------------------
@@ -568,164 +569,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` VALUES (1, 1, 1, 1, 'admin', '2021-05-27 15:07:39'); INSERT INTO `t_sys_role_resource` (id,role_id,resource_id,creator_id,creator,create_time) VALUES
INSERT INTO `t_sys_role_resource` VALUES (323, 1, 2, 1, 'admin', '2021-05-28 09:04:50'); (1,1,1,1,'admin','2021-05-27 15:07:39'),
INSERT INTO `t_sys_role_resource` VALUES (326, 1, 4, 1, 'admin', '2021-05-28 09:04:50'); (323,1,2,1,'admin','2021-05-28 09:04:50'),
INSERT INTO `t_sys_role_resource` VALUES (327, 1, 5, 1, 'admin', '2021-05-28 09:04:50'); (326,1,4,1,'admin','2021-05-28 09:04:50'),
INSERT INTO `t_sys_role_resource` VALUES (328, 1, 11, 1, 'admin', '2021-05-28 09:04:50'); (327,1,5,1,'admin','2021-05-28 09:04:50'),
INSERT INTO `t_sys_role_resource` VALUES (335, 1, 14, 1, 'admin', '2021-05-28 17:42:21'); (328,1,11,1,'admin','2021-05-28 09:04:50'),
INSERT INTO `t_sys_role_resource` VALUES (336, 1, 3, 1, 'admin', '2021-05-28 17:42:43'); (335,1,14,1,'admin','2021-05-28 17:42:21'),
INSERT INTO `t_sys_role_resource` VALUES (337, 1, 12, 1, 'admin', '2021-05-28 17:42:43'); (336,1,3,1,'admin','2021-05-28 17:42:43'),
INSERT INTO `t_sys_role_resource` VALUES (338, 6, 2, 1, 'admin', '2021-05-28 19:19:38'); (337,1,12,1,'admin','2021-05-28 17:42:43'),
INSERT INTO `t_sys_role_resource` VALUES (339, 6, 3, 1, 'admin', '2021-05-28 19:19:38'); (338,6,2,1,'admin','2021-05-28 19:19:38'),
INSERT INTO `t_sys_role_resource` VALUES (342, 6, 1, 1, 'admin', '2021-05-29 01:31:22'); (339,6,3,1,'admin','2021-05-28 19:19:38'),
INSERT INTO `t_sys_role_resource` VALUES (343, 5, 1, 1, 'admin', '2021-05-31 14:05:23'); (342,6,1,1,'admin','2021-05-29 01:31:22'),
INSERT INTO `t_sys_role_resource` VALUES (344, 5, 4, 1, 'admin', '2021-05-31 14:05:23'); (343,5,1,1,'admin','2021-05-31 14:05:23'),
INSERT INTO `t_sys_role_resource` VALUES (345, 5, 14, 1, 'admin', '2021-05-31 14:05:23'); (344,5,4,1,'admin','2021-05-31 14:05:23'),
INSERT INTO `t_sys_role_resource` VALUES (346, 5, 5, 1, 'admin', '2021-05-31 14:05:23'); (345,5,14,1,'admin','2021-05-31 14:05:23'),
INSERT INTO `t_sys_role_resource` VALUES (347, 5, 11, 1, 'admin', '2021-05-31 14:05:23'); (346,5,5,1,'admin','2021-05-31 14:05:23'),
INSERT INTO `t_sys_role_resource` VALUES (348, 5, 3, 1, 'admin', '2021-05-31 16:33:14'); (347,5,11,1,'admin','2021-05-31 14:05:23'),
INSERT INTO `t_sys_role_resource` VALUES (349, 5, 12, 1, 'admin', '2021-05-31 16:33:14'); (348,5,3,1,'admin','2021-05-31 16:33:14'),
INSERT INTO `t_sys_role_resource` VALUES (350, 5, 2, 1, 'admin', '2021-05-31 16:33:14'); (349,5,12,1,'admin','2021-05-31 16:33:14'),
INSERT INTO `t_sys_role_resource` VALUES (353, 1, 15, 1, 'admin', '2021-05-31 17:48:33'); (350,5,2,1,'admin','2021-05-31 16:33:14'),
INSERT INTO `t_sys_role_resource` VALUES (354, 1, 16, 1, 'admin', '2021-05-31 17:48:33'); (353,1,15,1,'admin','2021-05-31 17:48:33'),
INSERT INTO `t_sys_role_resource` VALUES (355, 1, 17, 1, 'admin', '2021-05-31 17:48:33'); (354,1,16,1,'admin','2021-05-31 17:48:33'),
INSERT INTO `t_sys_role_resource` VALUES (356, 1, 18, 1, 'admin', '2021-05-31 17:48:33'); (355,1,17,1,'admin','2021-05-31 17:48:33'),
INSERT INTO `t_sys_role_resource` VALUES (358, 1, 20, 1, 'admin', '2021-05-31 17:52:08'); (356,1,18,1,'admin','2021-05-31 17:48:33'),
INSERT INTO `t_sys_role_resource` VALUES (360, 1, 22, 1, 'admin', '2021-05-31 18:05:04'); (358,1,20,1,'admin','2021-05-31 17:52:08'),
INSERT INTO `t_sys_role_resource` VALUES (361, 1, 23, 1, 'admin', '2021-05-31 18:05:04'); (360,1,22,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (362, 1, 24, 1, 'admin', '2021-05-31 18:05:04'); (361,1,23,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (363, 1, 25, 1, 'admin', '2021-05-31 18:05:04'); (362,1,24,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (364, 1, 26, 1, 'admin', '2021-05-31 18:05:04'); (363,1,25,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (365, 1, 27, 1, 'admin', '2021-05-31 18:05:04'); (364,1,26,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (366, 1, 28, 1, 'admin', '2021-05-31 18:05:04'); (365,1,27,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (369, 1, 31, 1, 'admin', '2021-05-31 21:25:56'); (366,1,28,1,'admin','2021-05-31 18:05:04'),
INSERT INTO `t_sys_role_resource` VALUES (370, 1, 32, 1, 'admin', '2021-05-31 21:25:56'); (369,1,31,1,'admin','2021-05-31 21:25:56'),
INSERT INTO `t_sys_role_resource` VALUES (371, 1, 33, 1, 'admin', '2021-05-31 21:25:56'); (370,1,32,1,'admin','2021-05-31 21:25:56'),
INSERT INTO `t_sys_role_resource` VALUES (374, 1, 36, 1, 'admin', '2021-06-01 14:01:57'); (371,1,33,1,'admin','2021-05-31 21:25:56'),
INSERT INTO `t_sys_role_resource` VALUES (375, 1, 19, 1, 'admin', '2021-06-01 17:34:03'); (374,1,36,1,'admin','2021-06-01 14:01:57'),
INSERT INTO `t_sys_role_resource` VALUES (376, 1, 21, 1, 'admin', '2021-06-01 17:34:03'); (375,1,19,1,'admin','2021-06-01 17:34:03'),
INSERT INTO `t_sys_role_resource` VALUES (377, 1, 29, 1, 'admin', '2021-06-01 17:34:03'); (376,1,21,1,'admin','2021-06-01 17:34:03'),
INSERT INTO `t_sys_role_resource` VALUES (378, 1, 30, 1, 'admin', '2021-06-01 17:34:03'); (377,1,29,1,'admin','2021-06-01 17:34:03'),
INSERT INTO `t_sys_role_resource` VALUES (379, 1, 34, 1, 'admin', '2021-06-01 17:34:03'); (378,1,30,1,'admin','2021-06-01 17:34:03'),
INSERT INTO `t_sys_role_resource` VALUES (380, 1, 37, 1, 'admin', '2021-06-03 09:09:42'); (379,1,34,1,'admin','2021-06-01 17:34:03'),
INSERT INTO `t_sys_role_resource` VALUES (381, 1, 38, 1, 'admin', '2021-06-03 09:09:42'); (380,1,37,1,'admin','2021-06-03 09:09:42'),
INSERT INTO `t_sys_role_resource` VALUES (383, 1, 40, 1, 'admin', '2021-06-08 11:21:52'); (381,1,38,1,'admin','2021-06-03 09:09:42'),
INSERT INTO `t_sys_role_resource` VALUES (384, 1, 41, 1, 'admin', '2021-06-08 11:21:52'); (383,1,40,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (385, 1, 42, 1, 'admin', '2021-06-08 11:21:52'); (384,1,41,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (386, 1, 43, 1, 'admin', '2021-06-08 11:21:52'); (385,1,42,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (387, 1, 44, 1, 'admin', '2021-06-08 11:21:52'); (386,1,43,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (388, 1, 45, 1, 'admin', '2021-06-08 11:21:52'); (387,1,44,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (389, 1, 46, 1, 'admin', '2021-06-08 11:21:52'); (388,1,45,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (390, 1, 47, 1, 'admin', '2021-06-08 11:21:52'); (389,1,46,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (391, 6, 39, 1, 'admin', '2021-06-08 15:10:58'); (390,1,47,1,'admin','2021-06-08 11:21:52'),
INSERT INTO `t_sys_role_resource` VALUES (392, 6, 15, 1, 'admin', '2021-06-08 15:10:58'); (391,6,39,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (395, 6, 31, 1, 'admin', '2021-06-08 15:10:58'); (392,6,15,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (396, 6, 33, 1, 'admin', '2021-06-08 15:10:58'); (395,6,31,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (397, 6, 32, 1, 'admin', '2021-06-08 15:10:58'); (396,6,33,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (398, 6, 4, 1, 'admin', '2021-06-08 15:10:58'); (397,6,32,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (399, 6, 14, 1, 'admin', '2021-06-08 15:10:58'); (398,6,4,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (400, 6, 11, 1, 'admin', '2021-06-08 15:10:58'); (399,6,14,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (401, 6, 5, 1, 'admin', '2021-06-08 15:10:58'); (400,6,11,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (403, 7, 1, 1, 'admin', '2021-07-06 15:07:09'); (401,6,5,1,'admin','2021-06-08 15:10:58'),
INSERT INTO `t_sys_role_resource` VALUES (405, 1, 49, 1, 'admin', '2021-07-07 15:14:17'); (403,7,1,1,'admin','2021-07-06 15:07:09'),
INSERT INTO `t_sys_role_resource` VALUES (410, 1, 54, 1, 'admin', '2021-07-08 17:32:19'); (405,1,49,1,'admin','2021-07-07 15:14:17'),
INSERT INTO `t_sys_role_resource` VALUES (411, 1, 55, 1, 'admin', '2021-07-08 17:32:19'); (410,1,54,1,'admin','2021-07-08 17:32:19'),
INSERT INTO `t_sys_role_resource` VALUES (413, 1, 57, 1, 'admin', '2021-07-09 10:48:50'); (411,1,55,1,'admin','2021-07-08 17:32:19'),
INSERT INTO `t_sys_role_resource` VALUES (414, 1, 58, 1, 'admin', '2021-07-09 10:48:50'); (413,1,57,1,'admin','2021-07-09 10:48:50'),
INSERT INTO `t_sys_role_resource` VALUES (415, 8, 1, 1, 'admin', '2021-07-09 10:49:46'); (414,1,58,1,'admin','2021-07-09 10:48:50'),
INSERT INTO `t_sys_role_resource` VALUES (416, 8, 39, 1, 'admin', '2021-07-09 10:49:46'); (418,8,57,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (418, 8, 57, 1, 'admin', '2021-07-09 10:49:46'); (419,8,12,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (419, 8, 12, 1, 'admin', '2021-07-09 10:49:46'); (420,8,15,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (420, 8, 15, 1, 'admin', '2021-07-09 10:49:46'); (421,8,38,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (421, 8, 38, 1, 'admin', '2021-07-09 10:49:46'); (423,8,2,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (422, 8, 58, 1, 'admin', '2021-07-09 10:49:46'); (425,8,3,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (423, 8, 2, 1, 'admin', '2021-07-09 10:49:46'); (426,8,36,1,'admin','2021-07-09 10:49:46'),
INSERT INTO `t_sys_role_resource` VALUES (425, 8, 3, 1, 'admin', '2021-07-09 10:49:46'); (428,1,59,1,'admin','2021-07-09 10:50:20'),
INSERT INTO `t_sys_role_resource` VALUES (426, 8, 36, 1, 'admin', '2021-07-09 10:49:46'); (429,8,59,1,'admin','2021-07-09 10:50:32'),
INSERT INTO `t_sys_role_resource` VALUES (427, 8, 49, 1, 'admin', '2021-07-09 10:49:46'); (431,6,57,1,'admin','2021-07-12 16:44:12'),
INSERT INTO `t_sys_role_resource` VALUES (428, 1, 59, 1, 'admin', '2021-07-09 10:50:20'); (433,1,60,1,'admin','2021-07-19 20:19:29'),
INSERT INTO `t_sys_role_resource` VALUES (429, 8, 59, 1, 'admin', '2021-07-09 10:50:32'); (434,1,61,1,'admin','2021-07-19 20:19:29'),
INSERT INTO `t_sys_role_resource` VALUES (431, 6, 57, 1, 'admin', '2021-07-12 16:44:12'); (435,1,62,1,'admin','2021-07-19 20:19:29'),
INSERT INTO `t_sys_role_resource` VALUES (433, 1, 60, 1, 'admin', '2021-07-19 20:19:29'); (436,1,63,1,'admin','2021-07-20 10:48:39'),
INSERT INTO `t_sys_role_resource` VALUES (434, 1, 61, 1, 'admin', '2021-07-19 20:19:29'); (437,1,64,1,'admin','2021-07-20 10:48:39'),
INSERT INTO `t_sys_role_resource` VALUES (435, 1, 62, 1, 'admin', '2021-07-19 20:19:29'); (444,7,39,1,'admin','2021-09-09 10:10:30'),
INSERT INTO `t_sys_role_resource` VALUES (436, 1, 63, 1, 'admin', '2021-07-20 10:48:39'); (450,6,16,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (437, 1, 64, 1, 'admin', '2021-07-20 10:48:39'); (451,6,17,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (444, 7, 39, 1, 'admin', '2021-09-09 10:10:30'); (452,6,18,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (450, 6, 16, 1, 'admin', '2021-09-09 15:52:38'); (453,6,37,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (451, 6, 17, 1, 'admin', '2021-09-09 15:52:38'); (454,6,40,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (452, 6, 18, 1, 'admin', '2021-09-09 15:52:38'); (455,6,41,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (453, 6, 37, 1, 'admin', '2021-09-09 15:52:38'); (456,6,42,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (454, 6, 40, 1, 'admin', '2021-09-09 15:52:38'); (457,6,43,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (455, 6, 41, 1, 'admin', '2021-09-09 15:52:38'); (458,6,44,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (456, 6, 42, 1, 'admin', '2021-09-09 15:52:38'); (459,6,45,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (457, 6, 43, 1, 'admin', '2021-09-09 15:52:38'); (460,6,46,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (458, 6, 44, 1, 'admin', '2021-09-09 15:52:38'); (461,6,47,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (459, 6, 45, 1, 'admin', '2021-09-09 15:52:38'); (462,6,36,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (460, 6, 46, 1, 'admin', '2021-09-09 15:52:38'); (463,6,38,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (461, 6, 47, 1, 'admin', '2021-09-09 15:52:38'); (464,6,59,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (462, 6, 36, 1, 'admin', '2021-09-09 15:52:38'); (465,6,49,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (463, 6, 38, 1, 'admin', '2021-09-09 15:52:38'); (466,6,58,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (464, 6, 59, 1, 'admin', '2021-09-09 15:52:38'); (467,6,54,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (465, 6, 49, 1, 'admin', '2021-09-09 15:52:38'); (468,6,55,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (466, 6, 58, 1, 'admin', '2021-09-09 15:52:38'); (469,6,60,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (467, 6, 54, 1, 'admin', '2021-09-09 15:52:38'); (470,6,61,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (468, 6, 55, 1, 'admin', '2021-09-09 15:52:38'); (471,6,62,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (469, 6, 60, 1, 'admin', '2021-09-09 15:52:38'); (472,6,63,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (470, 6, 61, 1, 'admin', '2021-09-09 15:52:38'); (473,6,64,1,'admin','2021-09-09 15:52:38'),
INSERT INTO `t_sys_role_resource` VALUES (471, 6, 62, 1, 'admin', '2021-09-09 15:52:38'); (479,6,19,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (472, 6, 63, 1, 'admin', '2021-09-09 15:52:38'); (480,6,21,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (473, 6, 64, 1, 'admin', '2021-09-09 15:52:38'); (481,6,29,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (479, 6, 19, 1, 'admin', '2021-09-09 15:53:56'); (482,6,30,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (480, 6, 21, 1, 'admin', '2021-09-09 15:53:56'); (483,6,34,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (481, 6, 29, 1, 'admin', '2021-09-09 15:53:56'); (484,6,20,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (482, 6, 30, 1, 'admin', '2021-09-09 15:53:56'); (485,6,22,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (483, 6, 34, 1, 'admin', '2021-09-09 15:53:56'); (486,6,23,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (484, 6, 20, 1, 'admin', '2021-09-09 15:53:56'); (487,6,24,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (485, 6, 22, 1, 'admin', '2021-09-09 15:53:56'); (488,6,25,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (486, 6, 23, 1, 'admin', '2021-09-09 15:53:56'); (489,6,26,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (487, 6, 24, 1, 'admin', '2021-09-09 15:53:56'); (490,6,27,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (488, 6, 25, 1, 'admin', '2021-09-09 15:53:56'); (491,6,28,1,'admin','2021-09-09 15:53:56'),
INSERT INTO `t_sys_role_resource` VALUES (489, 6, 26, 1, 'admin', '2021-09-09 15:53:56'); (492,8,42,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (490, 6, 27, 1, 'admin', '2021-09-09 15:53:56'); (493,8,43,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (491, 6, 28, 1, 'admin', '2021-09-09 15:53:56'); (494,8,47,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (492, 8, 42, 1, 'admin', '2021-11-05 15:59:16'); (495,8,60,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (493, 8, 43, 1, 'admin', '2021-11-05 15:59:16'); (496,8,61,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (494, 8, 47, 1, 'admin', '2021-11-05 15:59:16'); (497,8,62,1,'admin','2021-11-05 15:59:16'),
INSERT INTO `t_sys_role_resource` VALUES (495, 8, 60, 1, 'admin', '2021-11-05 15:59:16'); (500,1,72,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (496, 8, 61, 1, 'admin', '2021-11-05 15:59:16'); (501,1,71,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (497, 8, 62, 1, 'admin', '2021-11-05 15:59:16'); (502,1,79,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (498, 8, 63, 1, 'admin', '2021-11-05 15:59:16'); (503,1,80,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (499, 8, 64, 1, 'admin', '2021-11-05 15:59:16'); (504,1,81,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (500, 1, 72, 1, 'admin', '2022-07-14 11:03:09'); (505,1,82,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (501, 1, 71, 1, 'admin', '2022-07-14 11:03:09'); (506,1,83,1,'admin','2022-07-14 11:03:09'),
INSERT INTO `t_sys_role_resource` VALUES (502, 1, 79, 1, 'admin', '2022-07-14 11:03:09'); (507,1,84,1,'admin','2022-07-14 11:10:11'),
INSERT INTO `t_sys_role_resource` VALUES (503, 1, 80, 1, 'admin', '2022-07-14 11:03:09'); (508,1,85,1,'admin','2022-07-14 11:10:11'),
INSERT INTO `t_sys_role_resource` VALUES (504, 1, 81, 1, 'admin', '2022-07-14 11:03:09'); (510,1,87,1,'admin','2022-07-14 11:10:11'),
INSERT INTO `t_sys_role_resource` VALUES (505, 1, 82, 1, 'admin', '2022-07-14 11:03:09'); (511,1,88,1,'admin','2022-10-08 10:54:06'),
INSERT INTO `t_sys_role_resource` VALUES (506, 1, 83, 1, 'admin', '2022-07-14 11:03:09'); (512,8,80,1,'admin','2022-10-08 10:54:34'),
INSERT INTO `t_sys_role_resource` VALUES (507, 1, 84, 1, 'admin', '2022-07-14 11:10:11'); (513,8,81,1,'admin','2022-10-08 10:54:34'),
INSERT INTO `t_sys_role_resource` VALUES (508, 1, 85, 1, 'admin', '2022-07-14 11:10:11'); (515,8,79,1,'admin','2022-10-08 10:54:34'),
INSERT INTO `t_sys_role_resource` VALUES (510, 1, 87, 1, 'admin', '2022-07-14 11:10:11'); (516,1,93,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (511, 1, 88, 1, 'admin', '2022-10-08 10:54:06'); (517,1,94,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (512, 8, 80, 1, 'admin', '2022-10-08 10:54:34'); (518,1,96,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (513, 8, 81, 1, 'admin', '2022-10-08 10:54:34'); (519,1,98,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (515, 8, 79, 1, 'admin', '2022-10-08 10:54:34'); (520,1,95,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (516, 1, 93, 1, 'admin', '2022-10-26 20:03:14'); (521,1,97,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (517, 1, 94, 1, 'admin', '2022-10-26 20:03:14'); (522,1,99,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (518, 1, 96, 1, 'admin', '2022-10-26 20:03:14'); (523,1,100,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (519, 1, 98, 1, 'admin', '2022-10-26 20:03:14'); (524,1,101,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (520, 1, 95, 1, 'admin', '2022-10-26 20:03:14'); (525,1,102,1,'admin','2022-10-26 20:03:14'),
INSERT INTO `t_sys_role_resource` VALUES (521, 1, 97, 1, 'admin', '2022-10-26 20:03:14'); (527,1,106,1,'admin','2023-02-23 14:30:54'),
INSERT INTO `t_sys_role_resource` VALUES (522, 1, 99, 1, 'admin', '2022-10-26 20:03:14'); (528,1,103,1,'admin','2023-02-23 14:30:54'),
INSERT INTO `t_sys_role_resource` VALUES (523, 1, 100, 1, 'admin', '2022-10-26 20:03:14'); (529,1,105,1,'admin','2023-02-23 14:31:00'),
INSERT INTO `t_sys_role_resource` VALUES (524, 1, 101, 1, 'admin', '2022-10-26 20:03:14'); (530,1,104,1,'admin','2023-02-24 13:40:26'),
INSERT INTO `t_sys_role_resource` VALUES (525, 1, 102, 1, 'admin', '2022-10-26 20:03:14'); (532,1,108,1,'admin','2023-03-14 17:28:06'),
INSERT INTO `t_sys_role_resource` VALUES (526, 1, 103, 1, 'admin', '2022-10-26 20:03:14'); (533,6,79,1,'admin','2023-03-14 17:28:50'),
INSERT INTO `t_sys_role_resource` VALUES (527, 1, 104, 1, 'admin', '2022-10-26 20:03:14'); (534,6,80,1,'admin','2023-03-14 17:28:50'),
INSERT INTO `t_sys_role_resource` VALUES (528, 1, 105, 1, 'admin', '2022-10-26 20:03:14'); (535,6,81,1,'admin','2023-03-14 17:28:50'),
INSERT INTO `t_sys_role_resource` VALUES (529, 1, 106, 1, 'admin', '2022-10-26 20:03:14'); (536,6,82,1,'admin','2023-03-14 17:28:50'),
(537,6,83,1,'admin','2023-03-14 17:28:50'),
(538,6,84,1,'admin','2023-03-14 17:29:00'),
(539,6,85,1,'admin','2023-03-14 17:29:00'),
(540,6,87,1,'admin','2023-03-14 17:29:00'),
(541,6,88,1,'admin','2023-03-14 17:29:00'),
(544,1,109,1,'admin','2023-03-16 16:11:25');
COMMIT; COMMIT;
-- ---------------------------- -- ----------------------------

View File

@@ -6,6 +6,7 @@ import (
"mayfly-go/pkg/global" "mayfly-go/pkg/global"
"mayfly-go/pkg/model" "mayfly-go/pkg/model"
"net/http" "net/http"
"runtime/debug"
"strconv" "strconv"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -66,12 +67,10 @@ func ErrorRes(g *gin.Context, err interface{}) {
g.JSON(http.StatusOK, model.Error(t)) g.JSON(http.StatusOK, model.Error(t))
case error: case error:
g.JSON(http.StatusOK, model.ServerError()) g.JSON(http.StatusOK, model.ServerError())
global.Log.Error(t) global.Log.Errorf("%s\n%s", t.Error(), string(debug.Stack()))
// panic(err)
case string: case string:
g.JSON(http.StatusOK, model.ServerError()) g.JSON(http.StatusOK, model.ServerError())
global.Log.Error(t) global.Log.Errorf("%s\n%s", t, string(debug.Stack()))
// panic(err)
default: default:
global.Log.Error(t) global.Log.Error(t)
} }

View File

@@ -5,7 +5,6 @@ import (
"mayfly-go/pkg/biz" "mayfly-go/pkg/biz"
"mayfly-go/pkg/logger" "mayfly-go/pkg/logger"
"mayfly-go/pkg/utils" "mayfly-go/pkg/utils"
"runtime/debug"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@@ -93,9 +92,9 @@ func getErrMsg(rc *Ctx, err interface{}) string {
case biz.BizError: case biz.BizError:
errMsg = fmt.Sprintf("\n<-e errCode: %d, errMsg: %s", t.Code(), t.Error()) errMsg = fmt.Sprintf("\n<-e errCode: %d, errMsg: %s", t.Code(), t.Error())
case error: case error:
errMsg = fmt.Sprintf("\n<-e errMsg: %s\n%s", t.Error(), string(debug.Stack())) errMsg = fmt.Sprintf("\n<-e errMsg: %s", t.Error())
case string: case string:
errMsg = fmt.Sprintf("\n<-e errMsg: %s\n%s", t, string(debug.Stack())) errMsg = fmt.Sprintf("\n<-e errMsg: %s", t)
} }
return (msg + errMsg) return (msg + errMsg)
} }