From a1a0ea03f56837a65fc19d713aeb2eff3d6496d4 Mon Sep 17 00:00:00 2001 From: tanyp <742354529@qq.com> Date: Fri, 14 Apr 2023 16:16:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tansci-boot-ui/src/api/monitor/loginLog.ts | 16 ++ tansci-boot-ui/src/api/monitor/onlineUser.ts | 28 ++++ tansci-boot-ui/src/api/monitor/operLog.ts | 16 ++ tansci-boot-ui/src/api/system/dict.ts | 15 ++ tansci-boot-ui/src/components/Table.vue | 26 ++-- tansci-boot-ui/src/router/index.ts | 8 +- tansci-boot-ui/src/router/permission.ts | 2 - .../src/router/{common.ts => staticRouter.ts} | 0 tansci-boot-ui/src/utils/common.ts | 22 ++- tansci-boot-ui/src/views/lowcode/CodeGen.vue | 22 +++ .../src/views/lowcode/Interface.vue | 22 +++ tansci-boot-ui/src/views/monitor/LoginLog.vue | 86 +++++++++++ .../src/views/monitor/OnlineUser.vue | 105 +++++++++++++ tansci-boot-ui/src/views/monitor/OperLog.vue | 140 ++++++++++++++++++ tansci-boot-ui/src/views/system/Dict.vue | 10 +- tansci-boot-ui/src/views/system/Menu.vue | 12 +- tansci-boot-ui/src/views/system/User.vue | 26 +++- .../com/tansci/common/constant/Constants.java | 6 + .../com/tansci/controller/AuthController.java | 8 +- .../tansci/controller/SysDictController.java | 16 +- .../tansci/controller/SysLogController.java | 4 +- .../tansci/controller/SysMenuController.java | 12 +- .../tansci/controller/SysOrgController.java | 8 +- .../tansci/controller/SysRoleController.java | 18 +-- .../tansci/controller/SysUserController.java | 12 +- .../java/com/tansci/domain/SysLoginLog.java | 3 + .../com/tansci/service/SysDictService.java | 2 + .../service/impl/SysDictServiceImpl.java | 15 +- .../service/impl/SysLoginLogServiceImpl.java | 16 +- .../service/impl/SysMenuServiceImpl.java | 1 + .../service/impl/SysUserServiceImpl.java | 8 + 31 files changed, 618 insertions(+), 67 deletions(-) create mode 100644 tansci-boot-ui/src/api/monitor/loginLog.ts create mode 100644 tansci-boot-ui/src/api/monitor/onlineUser.ts create mode 100644 tansci-boot-ui/src/api/monitor/operLog.ts rename tansci-boot-ui/src/router/{common.ts => staticRouter.ts} (100%) create mode 100644 tansci-boot-ui/src/views/lowcode/CodeGen.vue create mode 100644 tansci-boot-ui/src/views/lowcode/Interface.vue create mode 100644 tansci-boot-ui/src/views/monitor/LoginLog.vue create mode 100644 tansci-boot-ui/src/views/monitor/OnlineUser.vue create mode 100644 tansci-boot-ui/src/views/monitor/OperLog.vue diff --git a/tansci-boot-ui/src/api/monitor/loginLog.ts b/tansci-boot-ui/src/api/monitor/loginLog.ts new file mode 100644 index 0000000..bb4fa43 --- /dev/null +++ b/tansci-boot-ui/src/api/monitor/loginLog.ts @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +// 列表 +export function page(params:any){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/syslog/loginLog', + method: 'get', + params: params + }).then((res:any) => { + resolve(res.data) + }).catch((e:any) => { + reject(e) + }) + }) +} diff --git a/tansci-boot-ui/src/api/monitor/onlineUser.ts b/tansci-boot-ui/src/api/monitor/onlineUser.ts new file mode 100644 index 0000000..d4507ea --- /dev/null +++ b/tansci-boot-ui/src/api/monitor/onlineUser.ts @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +export function page(params:any){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/auth/onlineUser', + method: 'get', + params: params + }).then((res:any) => { + resolve(res.data) + }).catch((e:any) => { + reject(e) + }) + }) +} + +export function kick(token:String){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/auth/kick/' + token, + method: 'get' + }).then((res:any) => { + resolve(res.data) + }).catch((e:any) => { + reject(e) + }) + }) +} diff --git a/tansci-boot-ui/src/api/monitor/operLog.ts b/tansci-boot-ui/src/api/monitor/operLog.ts new file mode 100644 index 0000000..d715bea --- /dev/null +++ b/tansci-boot-ui/src/api/monitor/operLog.ts @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +// 列表 +export function page(params:any){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/syslog/operLog', + method: 'get', + params: params + }).then((res:any) => { + resolve(res.data) + }).catch((e:any) => { + reject(e) + }) + }) +} diff --git a/tansci-boot-ui/src/api/system/dict.ts b/tansci-boot-ui/src/api/system/dict.ts index 9260940..a890e0e 100644 --- a/tansci-boot-ui/src/api/system/dict.ts +++ b/tansci-boot-ui/src/api/system/dict.ts @@ -1,5 +1,20 @@ import request from '@/utils/request' +// 列表树 +export function tree(params:any){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/sysdict/tree', + method: 'get', + params: params + }).then((res:any) => { + resolve(res.data) + }).catch((e:any) => { + reject(e) + }) + }) +} + // 列表 export function list(params:any){ return new Promise((resolve, reject) => { diff --git a/tansci-boot-ui/src/components/Table.vue b/tansci-boot-ui/src/components/Table.vue index d546209..7376097 100644 --- a/tansci-boot-ui/src/components/Table.vue +++ b/tansci-boot-ui/src/components/Table.vue @@ -69,13 +69,9 @@ emit('onCurrentChange', e) } - // 根据属性获取对象值 function onFind(arr:any,val:any){ if(!arr) return 'info'; - - let temp = arr.find(v=>{ return v.value == val}); - if(temp) return temp.label; - return 'info'; + return arr.find(v=>{ return v.value == val}).label; } - - + @@ -167,13 +167,21 @@ :color="item.option.color"/> + + + + + :fixed="item.fixed" + :formatter="item.function"> diff --git a/tansci-boot-ui/src/router/index.ts b/tansci-boot-ui/src/router/index.ts index f379860..2f97c80 100644 --- a/tansci-boot-ui/src/router/index.ts +++ b/tansci-boot-ui/src/router/index.ts @@ -1,13 +1,14 @@ import { createRouter, createWebHistory } from "vue-router" import { ElMessage } from 'element-plus' import { getToken, removeToken, removeUser, setMenus } from "@/api/auth" +import common from '@/utils/common' import { generateRoutes } from "./permission" -import common from './common' +import staticRouter from './staticRouter' const router = createRouter({ history: createWebHistory(), routes: [ - ...common + ...staticRouter ] }) @@ -37,9 +38,10 @@ router.beforeEach(async (to:any, from:any, next) => { router.addRoute(item) }) - let routers = common.concat(accessRoutes) + let routers = staticRouter.concat(accessRoutes) setMenus([...routers]) }) + await common.getDictData() next({ ...to, replace: true }) } catch (error:any) { diff --git a/tansci-boot-ui/src/router/permission.ts b/tansci-boot-ui/src/router/permission.ts index 3285926..48f3c63 100644 --- a/tansci-boot-ui/src/router/permission.ts +++ b/tansci-boot-ui/src/router/permission.ts @@ -56,8 +56,6 @@ export function generateRoutes(){ method: 'get' }).then( (res:any) => { const routers = filterRouter(res.data.result, 0) - - console.log(routers) resolve(routers) }) }) diff --git a/tansci-boot-ui/src/router/common.ts b/tansci-boot-ui/src/router/staticRouter.ts similarity index 100% rename from tansci-boot-ui/src/router/common.ts rename to tansci-boot-ui/src/router/staticRouter.ts diff --git a/tansci-boot-ui/src/utils/common.ts b/tansci-boot-ui/src/utils/common.ts index 012fba3..55b0154 100644 --- a/tansci-boot-ui/src/utils/common.ts +++ b/tansci-boot-ui/src/utils/common.ts @@ -1,5 +1,25 @@ +import { list } from "@/api/system/dict" + const common:any = {} +// 数据字典 +let dictList = [] +common.getDictData = async function() { + await list({}).then((res:any) =>{ + dictList = res.result + }) +} +common.getDictGroup = (groupName:any) => { + return dictList.filter(item => item.groupName === groupName) +} +common.getDictLabel = (groupName:any, value:any) => { + let dicts = common.getDictGroup(groupName) + let dict = dicts.find((item:any) =>{ + return item.dicValue == value + }) + return dict ? dict.dicLabel : null; +} + // 生成UUID common.uuid = () => { function S4() { @@ -34,6 +54,6 @@ common.toDecimal = (value:any) => { s_x += '0'; } return s_x; -} +} export default common \ No newline at end of file diff --git a/tansci-boot-ui/src/views/lowcode/CodeGen.vue b/tansci-boot-ui/src/views/lowcode/CodeGen.vue new file mode 100644 index 0000000..57717fe --- /dev/null +++ b/tansci-boot-ui/src/views/lowcode/CodeGen.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/lowcode/Interface.vue b/tansci-boot-ui/src/views/lowcode/Interface.vue new file mode 100644 index 0000000..0cd14be --- /dev/null +++ b/tansci-boot-ui/src/views/lowcode/Interface.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/monitor/LoginLog.vue b/tansci-boot-ui/src/views/monitor/LoginLog.vue new file mode 100644 index 0000000..1a97ffa --- /dev/null +++ b/tansci-boot-ui/src/views/monitor/LoginLog.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/monitor/OnlineUser.vue b/tansci-boot-ui/src/views/monitor/OnlineUser.vue new file mode 100644 index 0000000..ad317d9 --- /dev/null +++ b/tansci-boot-ui/src/views/monitor/OnlineUser.vue @@ -0,0 +1,105 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/monitor/OperLog.vue b/tansci-boot-ui/src/views/monitor/OperLog.vue new file mode 100644 index 0000000..831fd69 --- /dev/null +++ b/tansci-boot-ui/src/views/monitor/OperLog.vue @@ -0,0 +1,140 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/system/Dict.vue b/tansci-boot-ui/src/views/system/Dict.vue index 58171c2..13673ed 100644 --- a/tansci-boot-ui/src/views/system/Dict.vue +++ b/tansci-boot-ui/src/views/system/Dict.vue @@ -2,8 +2,9 @@ import {onMounted, reactive, ref} from 'vue' import {ElMessage, ElMessageBox} from 'element-plus' import type {FormInstance} from 'element-plus' + import common from '@/utils/common' import Table from '@/components/Table.vue' - import {list,save,update,del} from '@/api/system/dict' + import {tree,save,update,del} from '@/api/system/dict' const table = reactive({ loading: false, @@ -14,7 +15,7 @@ tableTitle: [ {prop:'dicLabel',label:'字典标签',align:'left'}, {prop:'groupName',label:'分组名称'}, - {prop:'type',label:'字典类型'}, + {prop:'type',label:'字典类型',type:'dict',dictType:'business_type'}, {prop:'dicValue',label:'字典值'}, {prop:'sort',label:'排序'}, {prop:'createTime',label:'创建时间'}, @@ -29,7 +30,7 @@ function onDictList(){ table.loading = true; - list({}).then((res:any)=>{ + tree({}).then((res:any)=>{ if(res){ table.loading = false; table.tableData = res.result; @@ -104,6 +105,7 @@ if(res){ ElMessage.success('删除成功!'); onDictList(); + common.getDictData() } }) }).catch(e=>{ @@ -120,6 +122,7 @@ if(res){ ElMessage.success("添加成功!"); onDictList() + common.getDictData() } }) } else { @@ -127,6 +130,7 @@ if(res){ ElMessage.success("更新成功!"); onDictList() + common.getDictData() } }) } diff --git a/tansci-boot-ui/src/views/system/Menu.vue b/tansci-boot-ui/src/views/system/Menu.vue index 0663fe0..c0f3db7 100644 --- a/tansci-boot-ui/src/views/system/Menu.vue +++ b/tansci-boot-ui/src/views/system/Menu.vue @@ -19,13 +19,13 @@ chineseName: '', englishName: '', sort: 0, - component: '', + component: null, openMode: 0, isDel: 0, keepAlive: 0, isShow: 0, remarks: '', - permission: '' + permission: null }, menuId: null, iconVisible: false, @@ -88,13 +88,13 @@ chineseName: '', englishName: '', sort: 0, - component: '', + component: null, openMode: 0, isDel: 0, keepAlive: 0, isShow: 0, remarks: '', - permission: '' + permission: null } } else if(val == 2) { state.operate = 2; @@ -128,7 +128,7 @@ keepAlive: 0, isShow: 0, remarks: '', - permission: '' + permission: null }; onMenuTree(); } @@ -173,7 +173,7 @@ chineseName: '', englishName: '', sort: 0, - component: '', + component: null, openMode: 0, isDel: 0, keepAlive: 0, diff --git a/tansci-boot-ui/src/views/system/User.vue b/tansci-boot-ui/src/views/system/User.vue index 332849b..eebb5a8 100644 --- a/tansci-boot-ui/src/views/system/User.vue +++ b/tansci-boot-ui/src/views/system/User.vue @@ -24,14 +24,20 @@ {prop:'',label:'',fixed:'left'}, {prop:'username',label:'用户名称'}, {prop:'nickname',label:'用户昵称'}, - {prop:'type',label:'用户类型'}, + {prop:'type',label:'用户类型',type:'dict',dictType:'user_type'}, {prop:'avatar',label:'头像'}, {prop:'phone',label:'手机号'}, - {prop:'gender',label:'性别'}, + {prop:'gender',label:'性别',type:'dict',dictType:'user_gender'}, {prop:'birthday',label:'出生日期'}, {prop:'email',label:'邮箱'}, {prop:'address',label:'地址'}, - {prop:'isLogin',label:'禁止登录'}, + {prop:'isLogin',label:'是否禁用',type:'switch', + option:{ + activeValue:0,activeColor:'#13ce66',activeText:'启用', + inactiveValue:1,inactiveColor:'#ff4949',inactiveText:'禁用', + inlinePrompt: false + } + }, {prop:'updateTime',label:'更新时间'}, {prop:'remarks',label:'描述'} ], @@ -71,6 +77,18 @@ onUserPage(); } + function onSwitchChange(row:any){ + update({ + id: row.id, + isLogin: row.isLogin + }).then(res=>{ + if(res){ + ElMessage.success('操作成功!'); + onUserPage(); + } + }); + } + const formRef = ref(); const form = reactive({ userVisible: false, @@ -201,7 +219,7 @@