From 82779f3c705481c26cce3f056db276c82c076892 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 2 Dec 2021 10:44:15 +0800 Subject: [PATCH 01/33] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/api/system/role.js | 1 + ruoyi-ui/src/directive/permission/index.js | 15 --------------- ruoyi-ui/src/layout/components/AppMain.vue | 2 +- ruoyi-ui/src/plugins/modal.js | 8 ++++++++ ruoyi-ui/src/utils/errorCode.js | 2 +- ruoyi-ui/src/views/monitor/druid/index.vue | 15 --------------- ruoyi-ui/src/views/monitor/online/index.vue | 2 +- ruoyi-ui/src/views/system/user/index.vue | 2 +- ruoyi-ui/src/views/tool/gen/basicInfoForm.vue | 3 +-- ruoyi-ui/src/views/tool/gen/editTable.vue | 1 + ruoyi-ui/src/views/tool/gen/genInfoForm.vue | 3 +-- ruoyi-ui/vue.config.js | 2 +- 12 files changed, 17 insertions(+), 39 deletions(-) delete mode 100644 ruoyi-ui/src/directive/permission/index.js delete mode 100644 ruoyi-ui/src/views/monitor/druid/index.vue diff --git a/ruoyi-ui/src/api/system/role.js b/ruoyi-ui/src/api/system/role.js index fa2d613e..b5ebdf6c 100644 --- a/ruoyi-ui/src/api/system/role.js +++ b/ruoyi-ui/src/api/system/role.js @@ -64,6 +64,7 @@ export function delRole(roleId) { method: 'delete' }) } + // 查询角色已授权用户列表 export function allocatedUserList(query) { return request({ diff --git a/ruoyi-ui/src/directive/permission/index.js b/ruoyi-ui/src/directive/permission/index.js deleted file mode 100644 index d6f530de..00000000 --- a/ruoyi-ui/src/directive/permission/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import hasRole from './hasRole' -import hasPermi from './hasPermi' - -const install = function(Vue) { - Vue.directive('hasRole', hasRole) - Vue.directive('hasPermi', hasPermi) -} - -if (window.Vue) { - window['hasRole'] = hasRole - window['hasPermi'] = hasPermi - Vue.use(install); // eslint-disable-line -} - -export default install diff --git a/ruoyi-ui/src/layout/components/AppMain.vue b/ruoyi-ui/src/layout/components/AppMain.vue index 423437b7..7cc66748 100644 --- a/ruoyi-ui/src/layout/components/AppMain.vue +++ b/ruoyi-ui/src/layout/components/AppMain.vue @@ -51,7 +51,7 @@ export default { // fix css style bug in open el-dialog .el-popup-parent--hidden { .fixed-header { - padding-right: 15px; + padding-right: 17px; } } diff --git a/ruoyi-ui/src/plugins/modal.js b/ruoyi-ui/src/plugins/modal.js index 7df61a89..503a16f4 100644 --- a/ruoyi-ui/src/plugins/modal.js +++ b/ruoyi-ui/src/plugins/modal.js @@ -59,6 +59,14 @@ export default { type: "warning", }) }, + // 提交内容 + prompt(content) { + return MessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, // 打开遮罩层 loading(content) { loadingInstance = Loading.service({ diff --git a/ruoyi-ui/src/utils/errorCode.js b/ruoyi-ui/src/utils/errorCode.js index 8f27f7a0..b72d0264 100644 --- a/ruoyi-ui/src/utils/errorCode.js +++ b/ruoyi-ui/src/utils/errorCode.js @@ -2,5 +2,5 @@ export default { '401': '认证失败,无法访问系统资源', '403': '当前操作没有权限', '404': '访问资源不存在', - 'default': '系统未知错误,请反馈给管理员' + 'default': '系统未知错误,请反馈给管理员' } diff --git a/ruoyi-ui/src/views/monitor/druid/index.vue b/ruoyi-ui/src/views/monitor/druid/index.vue deleted file mode 100644 index ef915d9e..00000000 --- a/ruoyi-ui/src/views/monitor/druid/index.vue +++ /dev/null @@ -1,15 +0,0 @@ - - diff --git a/ruoyi-ui/src/views/monitor/online/index.vue b/ruoyi-ui/src/views/monitor/online/index.vue index a20c880f..b02b36e6 100644 --- a/ruoyi-ui/src/views/monitor/online/index.vue +++ b/ruoyi-ui/src/views/monitor/online/index.vue @@ -107,7 +107,7 @@ export default { }, /** 强退按钮操作 */ handleForceLogout(row) { - this.$modal.confirm('是否确认强退名称为"' + row.userName + '"的数据项?').then(function() { + this.$modal.confirm('是否确认强退名称为"' + row.userName + '"的用户?').then(function() { return forceLogout(row.tokenId); }).then(() => { this.getList(); diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue index 3525c9b3..c538a698 100644 --- a/ruoyi-ui/src/views/system/user/index.vue +++ b/ruoyi-ui/src/views/system/user/index.vue @@ -596,7 +596,7 @@ export default { cancelButtonText: "取消", closeOnClickModal: false, inputPattern: /^.{5,20}$/, - inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", + inputErrorMessage: "用户密码长度必须介于 5 和 20 之间" }).then(({ value }) => { resetUserPwd(row.userId, value).then(response => { this.$modal.msgSuccess("修改成功,新密码是:" + value); diff --git a/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue b/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue index f3e87172..75dc3bf3 100644 --- a/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue +++ b/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue @@ -11,7 +11,6 @@ - @@ -30,9 +29,9 @@ + From 05ce7d92a921c38b88100e48070e38582f52df36 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 2 Dec 2021 10:47:30 +0800 Subject: [PATCH 03/33] =?UTF-8?q?=F0=9F=8E=89=20RuoYi-Cloud-Vue3=EF=BC=88V?= =?UTF-8?q?ue3=20Element=20Plus=20Vite=EF=BC=89=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 104499c2..17f141e4 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ * 后端采用Spring Boot、Spring Cloud & Alibaba。 * 注册中心、配置中心选型Nacos,权限认证使用Redis。 * 流量控制框架选型Sentinel,分布式事务选型Seata。 +* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Cloud-Vue3](https://github.com/yangzongzhuan/RuoYi-Cloud-Vue3),保持同步更新。 * 如需不分离应用,请移步 [RuoYi](https://gitee.com/y_project/RuoYi),如需分离应用,请移步 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) * 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)   * 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)   From 9f21dbbc5cc415bc6287ec8814dea95365e5b77e Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 6 Dec 2021 21:55:41 +0800 Subject: [PATCH 04/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=95=BF=E4=B8=BB?= =?UTF-8?q?=E9=94=AE=E6=BA=A2=E5=87=BA=E9=97=AE=E9=A2=98=20=E5=B0=86?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20Long?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/system/mapper/SysConfigMapper.java | 1 - .../ruoyi/system/mapper/SysDeptMapper.java | 4 +-- .../ruoyi/system/mapper/SysMenuMapper.java | 6 ++--- .../ruoyi/system/mapper/SysNoticeMapper.java | 1 - .../ruoyi/system/mapper/SysOperLogMapper.java | 1 - .../ruoyi/system/mapper/SysPostMapper.java | 3 +-- .../system/mapper/SysRoleDeptMapper.java | 1 - .../ruoyi/system/mapper/SysRoleMapper.java | 1 - .../system/mapper/SysRoleMenuMapper.java | 1 - .../ruoyi/system/mapper/SysUserMapper.java | 1 + .../system/mapper/SysUserPostMapper.java | 1 - .../system/mapper/SysUserRoleMapper.java | 2 -- .../system/service/ISysConfigService.java | 1 - .../ruoyi/system/service/ISysDeptService.java | 3 +-- .../ruoyi/system/service/ISysMenuService.java | 3 +-- .../system/service/ISysNoticeService.java | 1 - .../ruoyi/system/service/ISysPostService.java | 3 +-- .../ruoyi/system/service/ISysRoleService.java | 1 + .../ruoyi/system/service/ISysUserService.java | 2 +- .../service/impl/SysDeptServiceImpl.java | 2 +- .../service/impl/SysMenuServiceImpl.java | 17 +++++++++--- .../service/impl/SysNoticeServiceImpl.java | 2 -- .../impl/SysPermissionServiceImpl.java | 1 - .../service/impl/SysPostServiceImpl.java | 4 +-- .../service/impl/SysUserServiceImpl.java | 26 +++++++------------ 25 files changed, 35 insertions(+), 54 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java index 2b1219d6..71a0bce8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysConfig; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java index 980fc894..803b879f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -1,9 +1,7 @@ package com.ruoyi.system.mapper; import java.util.List; - import org.apache.ibatis.annotations.Param; - import com.ruoyi.system.api.domain.SysDept; /** @@ -28,7 +26,7 @@ public interface SysDeptMapper * @param deptCheckStrictly 部门树选择项是否关联显示 * @return 选中部门列表 */ - public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); /** * 根据部门ID查询信息 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java index d1ef73e2..8a141a4e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -1,9 +1,7 @@ package com.ruoyi.system.mapper; import java.util.List; - import org.apache.ibatis.annotations.Param; - import com.ruoyi.system.domain.SysMenu; /** @@ -54,7 +52,7 @@ public interface SysMenuMapper /** * 根据用户ID查询菜单 * - * @param username 用户ID + * @param userId 用户ID * @return 菜单列表 */ public List selectMenuTreeByUserId(Long userId); @@ -66,7 +64,7 @@ public interface SysMenuMapper * @param menuCheckStrictly 菜单树选择项是否关联显示 * @return 选中菜单列表 */ - public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); /** * 根据菜单ID查询信息 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java index 5e801ea3..ec8700d6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysNotice; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java index 55036321..4e9b8cb6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.api.domain.SysOperLog; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java index 81809986..8603d9ae 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysPost; /** @@ -40,7 +39,7 @@ public interface SysPostMapper * @param userId 用户ID * @return 选中岗位ID列表 */ - public List selectPostListByUserId(Long userId); + public List selectPostListByUserId(Long userId); /** * 查询用户所属岗位组 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java index 7946548c..a4ad4de2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysRoleDept; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index a22f93d3..b49511ca 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.api.domain.SysRole; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java index e11419f6..23391557 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysRoleMenu; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 825be740..a7ffdb59 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -18,6 +18,7 @@ public interface SysUserMapper * @return 用户信息集合信息 */ public List selectUserList(SysUser sysUser); + /** * 根据条件分页查询未已配用户角色列表 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java index 8d50b04c..9c33e546 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java @@ -1,7 +1,6 @@ package com.ruoyi.system.mapper; import java.util.List; - import com.ruoyi.system.domain.SysUserPost; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java index 9bce2a07..ad3fe62c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java @@ -1,9 +1,7 @@ package com.ruoyi.system.mapper; import java.util.List; - import org.apache.ibatis.annotations.Param; - import com.ruoyi.system.domain.SysUserRole; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java index 695c9bd4..6b6842f3 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service; import java.util.List; - import com.ruoyi.system.domain.SysConfig; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index ebdfbe4b..ed1f6115 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service; import java.util.List; - import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.domain.vo.TreeSelect; @@ -42,7 +41,7 @@ public interface ISysDeptService * @param roleId 角色ID * @return 选中部门列表 */ - public List selectDeptListByRoleId(Long roleId); + public List selectDeptListByRoleId(Long roleId); /** * 根据部门ID查询信息 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index 96af00e4..9c4daf4a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -2,7 +2,6 @@ package com.ruoyi.system.service; import java.util.List; import java.util.Set; - import com.ruoyi.system.domain.SysMenu; import com.ruoyi.system.domain.vo.RouterVo; import com.ruoyi.system.domain.vo.TreeSelect; @@ -53,7 +52,7 @@ public interface ISysMenuService * @param roleId 角色ID * @return 选中菜单列表 */ - public List selectMenuListByRoleId(Long roleId); + public List selectMenuListByRoleId(Long roleId); /** * 构建前端路由所需要的菜单 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java index 37c6b457..fb1e420f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service; import java.util.List; - import com.ruoyi.system.domain.SysNotice; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java index 626fe05e..c7c3fc3f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service; import java.util.List; - import com.ruoyi.system.domain.SysPost; /** @@ -40,7 +39,7 @@ public interface ISysPostService * @param userId 用户ID * @return 选中岗位ID列表 */ - public List selectPostListByUserId(Long userId); + public List selectPostListByUserId(Long userId); /** * 校验岗位名称 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 9318ed23..d1b45ac8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -144,6 +144,7 @@ public interface ISysRoleService * @return 结果 */ public int deleteRoleByIds(Long[] roleIds); + /** * 取消授权用户角色 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index f8962681..1fc220ad 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -127,7 +127,7 @@ public interface ISysUserService * @return 结果 */ public int updateUser(SysUser user); - + /** * 用户授权角色 * diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 914df81a..d8db7e84 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -100,7 +100,7 @@ public class SysDeptServiceImpl implements ISysDeptService * @return 选中部门列表 */ @Override - public List selectDeptListByRoleId(Long roleId) + public List selectDeptListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 3f77cf25..d74ff8d6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -128,7 +128,7 @@ public class SysMenuServiceImpl implements ISysMenuService * @return 选中菜单列表 */ @Override - public List selectMenuListByRoleId(Long roleId) + public List selectMenuListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); @@ -179,7 +179,7 @@ public class SysMenuServiceImpl implements ISysMenuService router.setPath("/inner"); List childrenList = new ArrayList(); RouterVo children = new RouterVo(); - String routerPath = StringUtils.replaceEach(menu.getPath(), new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + String routerPath = innerLinkReplaceEach(menu.getPath()); children.setPath(routerPath); children.setComponent(UserConstants.INNER_LINK); children.setName(StringUtils.capitalize(routerPath)); @@ -358,7 +358,7 @@ public class SysMenuServiceImpl implements ISysMenuService // 内链打开外网方式 if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { - routerPath = StringUtils.replaceEach(routerPath, new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + routerPath = innerLinkReplaceEach(routerPath); } // 非外链并且是一级目录(类型为目录) if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) @@ -500,4 +500,15 @@ public class SysMenuServiceImpl implements ISysMenuService { return getChildList(list, t).size() > 0 ? true : false; } + + /** + * 内链域名特殊字符替换 + * + * @return + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS }, + new String[] { "", "" }); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index 1ffef6bf..8bebd9c6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -1,10 +1,8 @@ package com.ruoyi.system.service.impl; import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.mapper.SysNoticeMapper; import com.ruoyi.system.service.ISysNoticeService; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java index 47f4961d..46a8c7a8 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java @@ -4,7 +4,6 @@ import java.util.HashSet; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.ISysPermissionService; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index fcd7a670..b14ca4bd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -1,10 +1,8 @@ package com.ruoyi.system.service.impl; import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; @@ -69,7 +67,7 @@ public class SysPostServiceImpl implements ISysPostService * @return 选中岗位ID列表 */ @Override - public List selectPostListByUserId(Long userId) + public List selectPostListByUserId(Long userId) { return postMapper.selectPostListByUserId(userId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index c62959a9..c397aa54 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -2,11 +2,13 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.SpringUtils; @@ -127,16 +129,11 @@ public class SysUserServiceImpl implements ISysUserService public String selectUserRoleGroup(String userName) { List list = roleMapper.selectRolesByUserName(userName); - StringBuffer idsStr = new StringBuffer(); - for (SysRole role : list) + if (CollectionUtils.isEmpty(list)) { - idsStr.append(role.getRoleName()).append(","); + return StringUtils.EMPTY; } - if (StringUtils.isNotEmpty(idsStr.toString())) - { - return idsStr.substring(0, idsStr.length() - 1); - } - return idsStr.toString(); + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); } /** @@ -149,16 +146,11 @@ public class SysUserServiceImpl implements ISysUserService public String selectUserPostGroup(String userName) { List list = postMapper.selectPostsByUserName(userName); - StringBuffer idsStr = new StringBuffer(); - for (SysPost post : list) + if (CollectionUtils.isEmpty(list)) { - idsStr.append(post.getPostName()).append(","); + return StringUtils.EMPTY; } - if (StringUtils.isNotEmpty(idsStr.toString())) - { - return idsStr.substring(0, idsStr.length() - 1); - } - return idsStr.toString(); + return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); } /** @@ -179,7 +171,7 @@ public class SysUserServiceImpl implements ISysUserService } /** - * 校验用户名称是否唯一 + * 校验手机号码是否唯一 * * @param user 用户信息 * @return From f64a5dd5cab6189d2229485370bf6df663104689 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 6 Dec 2021 21:56:00 +0800 Subject: [PATCH 05/33] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=86=E9=85=8D=E8=A7=92=E8=89=B2=E5=B1=9E=E6=80=A7=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/system/user/authRole.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/system/user/authRole.vue b/ruoyi-ui/src/views/system/user/authRole.vue index b184de25..7655bdf6 100644 --- a/ruoyi-ui/src/views/system/user/authRole.vue +++ b/ruoyi-ui/src/views/system/user/authRole.vue @@ -9,7 +9,7 @@ - + From 2bc2b08bc7e5e2459152803fcc28645f88aec815 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 7 Dec 2021 13:48:52 +0800 Subject: [PATCH 06/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7spring-boot-admin?= =?UTF-8?q?=E5=88=B0=E6=9C=80=E6=96=B0=E7=89=882.5.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0baaf102..ee6053d2 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 2020.0.4 2021.1 2.0.3 - 2.5.3 + 2.5.4 2.2.0 3.0.0 1.6.2 From 9d094587b30bbc0ec74efdbed9323cf572d5d233 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 9 Dec 2021 10:02:42 +0800 Subject: [PATCH 07/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7clipboard=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC2.0.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 73c1818c..8258dabd 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -38,7 +38,7 @@ "dependencies": { "@riophae/vue-treeselect": "0.4.0", "axios": "0.24.0", - "clipboard": "2.0.6", + "clipboard": "2.0.8", "core-js": "3.19.1", "echarts": "4.9.0", "element-ui": "2.15.6", From 19ac02fd707a86d4823725e98220479f052ecb88 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 9 Dec 2021 10:03:07 +0800 Subject: [PATCH 08/33] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=A4=8D=E5=88=B6=E5=89=AA=E8=B4=B4=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/directive/index.js | 2 + ruoyi-ui/src/directive/module/clipboard.js | 54 ++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 ruoyi-ui/src/directive/module/clipboard.js diff --git a/ruoyi-ui/src/directive/index.js b/ruoyi-ui/src/directive/index.js index 5801640a..b9b07da3 100644 --- a/ruoyi-ui/src/directive/index.js +++ b/ruoyi-ui/src/directive/index.js @@ -3,10 +3,12 @@ import hasPermi from './permission/hasPermi' import dialogDrag from './dialog/drag' import dialogDragWidth from './dialog/dragWidth' import dialogDragHeight from './dialog/dragHeight' +import clipboard from './module/clipboard' const install = function(Vue) { Vue.directive('hasRole', hasRole) Vue.directive('hasPermi', hasPermi) + Vue.directive('clipboard', clipboard) Vue.directive('dialogDrag', dialogDrag) Vue.directive('dialogDragWidth', dialogDragWidth) Vue.directive('dialogDragHeight', dialogDragHeight) diff --git a/ruoyi-ui/src/directive/module/clipboard.js b/ruoyi-ui/src/directive/module/clipboard.js new file mode 100644 index 00000000..49c572d5 --- /dev/null +++ b/ruoyi-ui/src/directive/module/clipboard.js @@ -0,0 +1,54 @@ +/** +* v-clipboard 文字复制剪贴 +* Copyright (c) 2021 ruoyi +*/ + +import Clipboard from 'clipboard' +export default { + bind(el, binding, vnode) { + switch (binding.arg) { + case 'success': + el._vClipBoard_success = binding.value; + break; + case 'error': + el._vClipBoard_error = binding.value; + break; + default: { + const clipboard = new Clipboard(el, { + text: () => binding.value, + action: () => binding.arg === 'cut' ? 'cut' : 'copy' + }); + clipboard.on('success', e => { + const callback = el._vClipBoard_success; + callback && callback(e); + }); + clipboard.on('error', e => { + const callback = el._vClipBoard_error; + callback && callback(e); + }); + el._vClipBoard = clipboard; + } + } + }, + update(el, binding) { + if (binding.arg === 'success') { + el._vClipBoard_success = binding.value; + } else if (binding.arg === 'error') { + el._vClipBoard_error = binding.value; + } else { + el._vClipBoard.text = function () { return binding.value; }; + el._vClipBoard.action = () => binding.arg === 'cut' ? 'cut' : 'copy'; + } + }, + unbind(el, binding) { + if (!el._vClipboard) return + if (binding.arg === 'success') { + delete el._vClipBoard_success; + } else if (binding.arg === 'error') { + delete el._vClipBoard_error; + } else { + el._vClipBoard.destroy(); + delete el._vClipBoard; + } + } +} From 4db3e908722413c8270454f69462f5c216b65d4f Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 9 Dec 2021 10:03:43 +0800 Subject: [PATCH 09/33] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=94=AF=E6=8C=81=E5=A4=8D=E5=88=B6=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/tool/gen/index.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/tool/gen/index.vue b/ruoyi-ui/src/views/tool/gen/index.vue index 1f24fa9c..27875b88 100644 --- a/ruoyi-ui/src/views/tool/gen/index.vue +++ b/ruoyi-ui/src/views/tool/gen/index.vue @@ -169,7 +169,8 @@ :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))" :key="key" > -
+ 复制 +
@@ -306,6 +307,10 @@ export default { const result = hljs.highlight(language, code || "", true); return result.value || ' '; }, + /** 复制代码成功 */ + clipboardSuccess(){ + this.$modal.msgSuccess("复制成功"); + }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.tableId); From b6222b97558d7db1ec2131c65b03c9a0ac43a94e Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 10 Dec 2021 09:51:22 +0800 Subject: [PATCH 10/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7dynamic-ds=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC3.5.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ee6053d2..286e85be 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ 2.3.2 1.4.0 1.2.8 - 3.4.1 + 3.5.0 2.11.0 1.4 2.3 From 2a5091c6f43657400339411e03304d997a34b8c4 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 10 Dec 2021 10:02:22 +0800 Subject: [PATCH 11/33] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E8=A7=A3=E6=9E=90blob=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/plugins/download.js | 9 ++++++++- ruoyi-ui/src/utils/request.js | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js index e3983731..cfb7c246 100644 --- a/ruoyi-ui/src/plugins/download.js +++ b/ruoyi-ui/src/plugins/download.js @@ -2,6 +2,7 @@ import axios from 'axios' import { Message } from 'element-ui' import { saveAs } from 'file-saver' import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' import { blobValidate } from "@/utils/ruoyi"; const baseURL = process.env.VUE_APP_BASE_API @@ -20,12 +21,18 @@ export default { const blob = new Blob([res.data], { type: 'application/zip' }) this.saveAs(blob, name) } else { - Message.error('无效的会话,或者会话已过期,请重新登录。'); + this.printErrMsg(res.data); } }) }, saveAs(text, name, opts) { saveAs(text, name, opts); + }, + async printErrMsg(data) { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); } } diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 86342eab..ee612ecd 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -108,7 +108,10 @@ export function download(url, params, filename) { const blob = new Blob([data]) saveAs(blob, filename) } else { - Message.error('无效的会话,或者会话已过期,请重新登录。'); + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); } downloadLoadingInstance.close(); }).catch((r) => { From 3c7018b38ace22cc8b55217864640ce5ada4dcee Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 13 Dec 2021 09:02:33 +0800 Subject: [PATCH 12/33] =?UTF-8?q?=E8=8B=A5=E4=BE=9D=203.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +-- ruoyi-api/pom.xml | 2 +- ruoyi-api/ruoyi-api-system/pom.xml | 2 +- ruoyi-auth/pom.xml | 2 +- ruoyi-common/pom.xml | 2 +- ruoyi-common/ruoyi-common-core/pom.xml | 2 +- ruoyi-common/ruoyi-common-datascope/pom.xml | 2 +- ruoyi-common/ruoyi-common-datasource/pom.xml | 2 +- ruoyi-common/ruoyi-common-log/pom.xml | 2 +- ruoyi-common/ruoyi-common-redis/pom.xml | 2 +- ruoyi-common/ruoyi-common-security/pom.xml | 2 +- ruoyi-common/ruoyi-common-swagger/pom.xml | 2 +- ruoyi-gateway/pom.xml | 2 +- ruoyi-modules/pom.xml | 2 +- ruoyi-modules/ruoyi-file/pom.xml | 2 +- ruoyi-modules/ruoyi-gen/pom.xml | 2 +- ruoyi-modules/ruoyi-job/pom.xml | 2 +- ruoyi-modules/ruoyi-system/pom.xml | 2 +- ruoyi-ui/package.json | 2 +- ruoyi-ui/src/views/index.vue | 35 +++++++++++++++++++- ruoyi-visual/pom.xml | 2 +- ruoyi-visual/ruoyi-monitor/pom.xml | 2 +- 22 files changed, 56 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index 286e85be..50ebfbfe 100644 --- a/pom.xml +++ b/pom.xml @@ -6,14 +6,14 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 ruoyi http://www.ruoyi.vip 若依微服务系统 - 3.2.0 + 3.3.0 UTF-8 UTF-8 1.8 diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml index aa8ccde0..2eeb4cc5 100644 --- a/ruoyi-api/pom.xml +++ b/ruoyi-api/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml index 7b3a4649..ad926141 100644 --- a/ruoyi-api/ruoyi-api-system/pom.xml +++ b/ruoyi-api/ruoyi-api-system/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-api - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index f0459836..933c6ea2 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 96ecdf98..ad5f6177 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 3bc14f45..4424f157 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-datascope/pom.xml b/ruoyi-common/ruoyi-common-datascope/pom.xml index 50743d96..cf500507 100644 --- a/ruoyi-common/ruoyi-common-datascope/pom.xml +++ b/ruoyi-common/ruoyi-common-datascope/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-datasource/pom.xml b/ruoyi-common/ruoyi-common-datasource/pom.xml index d15bc86d..e3e2b516 100644 --- a/ruoyi-common/ruoyi-common-datasource/pom.xml +++ b/ruoyi-common/ruoyi-common-datasource/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-log/pom.xml b/ruoyi-common/ruoyi-common-log/pom.xml index eb5c2a1d..8a0803f9 100644 --- a/ruoyi-common/ruoyi-common-log/pom.xml +++ b/ruoyi-common/ruoyi-common-log/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml index 167bb718..909130c7 100644 --- a/ruoyi-common/ruoyi-common-redis/pom.xml +++ b/ruoyi-common/ruoyi-common-redis/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-security/pom.xml b/ruoyi-common/ruoyi-common-security/pom.xml index 130303c8..79985838 100644 --- a/ruoyi-common/ruoyi-common-security/pom.xml +++ b/ruoyi-common/ruoyi-common-security/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-swagger/pom.xml b/ruoyi-common/ruoyi-common-swagger/pom.xml index e53a5fe3..bd78362b 100644 --- a/ruoyi-common/ruoyi-common-swagger/pom.xml +++ b/ruoyi-common/ruoyi-common-swagger/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml index 50bf4875..bb049553 100644 --- a/ruoyi-gateway/pom.xml +++ b/ruoyi-gateway/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml index abc49192..e88ccea7 100644 --- a/ruoyi-modules/pom.xml +++ b/ruoyi-modules/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-file/pom.xml b/ruoyi-modules/ruoyi-file/pom.xml index e335dadb..349cfc91 100644 --- a/ruoyi-modules/ruoyi-file/pom.xml +++ b/ruoyi-modules/ruoyi-file/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-gen/pom.xml b/ruoyi-modules/ruoyi-gen/pom.xml index f61269d3..ad9c7d82 100644 --- a/ruoyi-modules/ruoyi-gen/pom.xml +++ b/ruoyi-modules/ruoyi-gen/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml index 9a831648..d57c0cee 100644 --- a/ruoyi-modules/ruoyi-job/pom.xml +++ b/ruoyi-modules/ruoyi-job/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 6411fb32..48a662c1 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 8258dabd..a4961db2 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -1,6 +1,6 @@ { "name": "ruoyi", - "version": "3.2.0", + "version": "3.3.0", "description": "若依管理系统", "author": "若依", "license": "MIT", diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 58d95deb..fbf3923f 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -146,6 +146,39 @@ 更新日志 + +
    +
  1. 新增配套并同步的Vue3前端版本
  2. +
  3. 新增认证对象简化权限验证
  4. +
  5. 新增tab对象简化页签操作
  6. +
  7. 修改获取缓存信息方式
  8. +
  9. 修改权限认证注解实现
  10. +
  11. 自定义文字复制剪贴指令
  12. +
  13. 升级axios到最新版本0.24.0
  14. +
  15. 升级core-js到最新版本3.19.1
  16. +
  17. 升级jsencrypt到最新版本3.2.1
  18. +
  19. 升级js-cookie到最新版本3.0.1
  20. +
  21. 升级clipboard到最新版本2.0.8
  22. +
  23. 升级velocity到最新版本2.3
  24. +
  25. 升级spring-boot到最新版本2.5.6
  26. +
  27. 升级spring-boot-admin到最新版2.5.4
  28. +
  29. 升级dynamic-ds到最新版本3.5.0
  30. +
  31. 代码生成预览支持复制内容
  32. +
  33. 修复五级以上菜单出现的404问题
  34. +
  35. 生产环境使用路由懒加载提升页面响应速度
  36. +
  37. 任务屏蔽违规字符&参数忽略双引号中的逗号
  38. +
  39. 优化用户个人信息接口防止修改用户名
  40. +
  41. 优化登录/验证码请求headers不设置token
  42. +
  43. 优化注册成功提示消息类型success
  44. +
  45. 优化下载解析blob响应是否登录失效
  46. +
  47. 修复字符串无法被反转义问题
  48. +
  49. 修复响应体过大出现的乱码问题
  50. +
  51. 修复回显数据字典组的键值错误
  52. +
  53. 修复代码生成复选框字典遗漏问题
  54. +
  55. 修复代码生成模板主子表删除缺少事务
  56. +
  57. 其他细节优化
  58. +
+
  1. 菜单管理支持配置路由参数
  2. @@ -609,7 +642,7 @@ export default { data() { return { // 版本号 - version: "3.2.0", + version: "3.3.0", }; }, methods: { diff --git a/ruoyi-visual/pom.xml b/ruoyi-visual/pom.xml index ee76ddeb..55599104 100644 --- a/ruoyi-visual/pom.xml +++ b/ruoyi-visual/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi - 3.2.0 + 3.3.0 4.0.0 diff --git a/ruoyi-visual/ruoyi-monitor/pom.xml b/ruoyi-visual/ruoyi-monitor/pom.xml index 63c57ea6..81154770 100644 --- a/ruoyi-visual/ruoyi-monitor/pom.xml +++ b/ruoyi-visual/ruoyi-monitor/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-visual - 3.2.0 + 3.3.0 4.0.0 From 711aa763b9c125cbc12c5d6f4f6403dfa9de734b Mon Sep 17 00:00:00 2001 From: zbk <540064991@qq.com> Date: Mon, 13 Dec 2021 15:45:42 +0000 Subject: [PATCH 13/33] update docker/deploy.sh. --- docker/deploy.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/deploy.sh b/docker/deploy.sh index 0ee4cd8a..02489092 100644 --- a/docker/deploy.sh +++ b/docker/deploy.sh @@ -26,12 +26,12 @@ port(){ # 启动基础环境(必须) base(){ - docker-compose up -d ruoyi-mysql ruoyi-redis ruoyi-nacos ruoyi-nginx + docker-compose up -d ruoyi-mysql ruoyi-redis ruoyi-nacos } # 启动程序模块(必须) modules(){ - docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-modules-system + docker-compose up -d ruoyi-nginx ruoyi-gateway ruoyi-auth ruoyi-modules-system } # 关闭所有环境/模块 From eb5df8834bfdcb3b9601efa798c461c5a0f62b99 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 10:46:49 +0800 Subject: [PATCH 14/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=9A=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=80=97=E5=8F=B7=E5=88=86=E9=9A=94=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/job/util/JobInvokeUtil.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java index a3527e10..0bfc2f74 100644 --- a/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java +++ b/ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java @@ -110,30 +110,30 @@ public class JobInvokeUtil { return null; } - String[] methodParams = methodStr.split(",(?=(?:[^\']*\"[^\']*\')*[^\']*$)"); + String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"); List classs = new LinkedList<>(); for (int i = 0; i < methodParams.length; i++) { String str = StringUtils.trimToEmpty(methodParams[i]); - // String字符串类型,包含' - if (StringUtils.contains(str, "'")) + // String字符串类型,以'或"开头 + if (StringUtils.startsWithAny(str, "'", "\"")) { - classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class }); + classs.add(new Object[] { StringUtils.substring(str, 1, str.length() - 1), String.class }); } // boolean布尔类型,等于true或者false - else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false")) + else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) { classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); } - // long长整形,包含L - else if (StringUtils.containsIgnoreCase(str, "L")) + // long长整形,以L结尾 + else if (StringUtils.endsWith(str, "L")) { - classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class }); + classs.add(new Object[] { Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class }); } - // double浮点类型,包含D - else if (StringUtils.containsIgnoreCase(str, "D")) + // double浮点类型,以D结尾 + else if (StringUtils.endsWith(str, "D")) { - classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class }); + classs.add(new Object[] { Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class }); } // 其他类型归类为整形 else From 7901116744d33be748586fadccc5eac406af3572 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 10:50:14 +0800 Subject: [PATCH 15/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7log4j2=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index 50ebfbfe..0dbfa800 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ 2.10.0 3.2.2 2.12.2 + 2.15.0 @@ -190,6 +191,19 @@ ${common-pool.version} + + + org.apache.logging.log4j + log4j-api + ${log4j2.version} + + + + org.apache.logging.log4j + log4j-to-slf4j + ${log4j2.version} + + com.ruoyi From 7804d0bd2f5eaccf3d7d9038a3e535fcb6309484 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 12:10:20 +0800 Subject: [PATCH 16/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7log4j2=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0dbfa800..7248b6ee 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 2.10.0 3.2.2 2.12.2 - 2.15.0 + 2.16.0 From c64b5edf20ca78f4728a1e33177e7d480e7e249d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 17:40:02 +0800 Subject: [PATCH 17/33] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E8=AE=BE=E7=BD=AE=E9=BB=98=E8=AE=A4=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ry_20210908.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/ry_20210908.sql b/sql/ry_20210908.sql index e1efcb45..d01ecea5 100644 --- a/sql/ry_20210908.sql +++ b/sql/ry_20210908.sql @@ -1,3 +1,5 @@ +SET NAMES utf8mb4; + -- ---------------------------- -- 1、部门表 -- ---------------------------- From 329e124db0c0882adc72e76ca90babdcb60753b5 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 14 Dec 2021 17:41:36 +0800 Subject: [PATCH 18/33] add docker/copy.sh. --- docker/copy.sh | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docker/copy.sh diff --git a/docker/copy.sh b/docker/copy.sh new file mode 100644 index 00000000..4bb15410 --- /dev/null +++ b/docker/copy.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# 复制项目的文件到对应docker路径,便于一键生成镜像。 +usage() { + echo "Usage: sh copy.sh" + exit 1 +} + + +# copy sql +echo "begin copy sql " +cp ../sql/ry_20210908.sql ./mysql/db +cp ../sql/ry_config_20211118.sql ./mysql/db + +# copy html +echo "begin copy html " +cp -r ../ruoyi-ui/dist/** ./nginx/html/dist + + +# copy jar +echo "begin copy ruoyi-gateway " +cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar + +echo "begin copy ruoyi-auth " +cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar + +echo "begin copy ruoyi-visual " +cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar + +echo "begin copy ruoyi-modules-system " +cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar + +echo "begin copy ruoyi-modules-file " +cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar + +echo "begin copy ruoyi-modules-job " +cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar + +echo "begin copy ruoyi-modules-gen " +cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar + From f91f931c0b0ff992780d4d338b01f122b294298d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 15 Dec 2021 11:00:47 +0800 Subject: [PATCH 19/33] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89xss=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=B3=A8=E8=A7=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/system/api/domain/SysUser.java | 7 +++-- .../core/utils/bean/BeanValidators.java | 24 +++++++++++++++ .../java/com/ruoyi/common/core/xss/Xss.java | 27 +++++++++++++++++ .../ruoyi/common/core/xss/XssValidator.java | 29 +++++++++++++++++++ .../com/ruoyi/system/domain/SysNotice.java | 3 +- .../service/impl/SysUserServiceImpl.java | 7 +++++ 6 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java index 87de3eca..f11f35fd 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java @@ -2,9 +2,7 @@ package com.ruoyi.system.api.domain; import java.util.Date; import java.util.List; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; +import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.fasterxml.jackson.annotation.JsonProperty; @@ -13,6 +11,7 @@ import com.ruoyi.common.core.annotation.Excel.ColumnType; import com.ruoyi.common.core.annotation.Excel.Type; import com.ruoyi.common.core.annotation.Excels; import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.core.xss.Xss; /** * 用户对象 sys_user @@ -131,6 +130,7 @@ public class SysUser extends BaseEntity this.deptId = deptId; } + @Xss(message = "用户昵称不能包含脚本字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") public String getNickName() { @@ -142,6 +142,7 @@ public class SysUser extends BaseEntity this.nickName = nickName; } + @Xss(message = "用户账号不能包含脚本字符") @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") public String getUserName() diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java new file mode 100644 index 00000000..75877262 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.core.utils.bean; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; + +/** + * bean对象属性验证 + * + * @author ruoyi + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java new file mode 100644 index 00000000..0a94d6b4 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.core.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义xss校验注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "不允许任何脚本运行"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java new file mode 100644 index 00000000..c7dfde9b --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.core.xss; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 自定义xss校验注解实现 + * + * @author ruoyi + */ +public class XssValidator implements ConstraintValidator +{ + private final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + return !containsHtml(value); + } + + public boolean containsHtml(String value) + { + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + return matcher.matches(); + } +} \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index 4e1c94c2..6e157638 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -4,8 +4,8 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; - import com.ruoyi.common.core.web.domain.BaseEntity; +import com.ruoyi.common.core.xss.Xss; /** * 通知公告表 sys_notice @@ -46,6 +46,7 @@ public class SysNotice extends BaseEntity this.noticeTitle = noticeTitle; } + @Xss(message = "公告标题不能包含脚本字符") @NotBlank(message = "公告标题不能为空") @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") public String getNoticeTitle() diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index c397aa54..19d40a05 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import javax.validation.Validator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +14,7 @@ import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.bean.BeanValidators; import com.ruoyi.common.datascope.annotation.DataScope; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysRole; @@ -56,6 +58,9 @@ public class SysUserServiceImpl implements ISysUserService @Autowired private ISysConfigService configService; + @Autowired + protected Validator validator; + /** * 根据条件分页查询用户列表 * @@ -513,6 +518,7 @@ public class SysUserServiceImpl implements ISysUserService SysUser u = userMapper.selectUserByUserName(user.getUserName()); if (StringUtils.isNull(u)) { + BeanValidators.validateWithException(validator, user); user.setPassword(SecurityUtils.encryptPassword(password)); user.setCreateBy(operName); this.insertUser(user); @@ -521,6 +527,7 @@ public class SysUserServiceImpl implements ISysUserService } else if (isUpdateSupport) { + BeanValidators.validateWithException(validator, user); user.setUpdateBy(operName); this.updateUser(user); successNum++; From 0d7b23a44fecf9a63b4b131c0264318cec16aa7a Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 16 Dec 2021 09:58:27 +0800 Subject: [PATCH 20/33] =?UTF-8?q?=E4=BC=98=E5=8C=96cron=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E5=91=A8=E5=9B=9E=E6=98=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/components/Crontab/index.vue | 2 +- ruoyi-ui/src/components/Crontab/week.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/components/Crontab/index.vue b/ruoyi-ui/src/components/Crontab/index.vue index bd863b1b..3963df28 100644 --- a/ruoyi-ui/src/components/Crontab/index.vue +++ b/ruoyi-ui/src/components/Crontab/index.vue @@ -273,7 +273,7 @@ export default { insValue = 5; } else { this.$refs[refName].checkboxList = value.split(","); - insValue = 7; + insValue = 6; } } else if (name == "year") { if (value == "") { diff --git a/ruoyi-ui/src/components/Crontab/week.vue b/ruoyi-ui/src/components/Crontab/week.vue index ae389a7a..1cec700e 100644 --- a/ruoyi-ui/src/components/Crontab/week.vue +++ b/ruoyi-ui/src/components/Crontab/week.vue @@ -60,7 +60,7 @@ 指定 - {{item.value}} + {{item.value}} From c1b223e3a765316761c98b7899502ff29f12ba04 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 16 Dec 2021 09:58:48 +0800 Subject: [PATCH 21/33] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=BA=A2=E5=87=BA=E5=88=99=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/system/user/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue index c538a698..81a21617 100644 --- a/ruoyi-ui/src/views/system/user/index.vue +++ b/ruoyi-ui/src/views/system/user/index.vue @@ -663,7 +663,7 @@ export default { this.upload.open = false; this.upload.isUploading = false; this.$refs.upload.clearFiles(); - this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true }); + this.$alert("
    " + response.msg + "
    ", "导入结果", { dangerouslyUseHTMLString: true }); this.getList(); }, // 提交上传文件 From 5c90f0bbb75630704869891a15246fbcecb4ff98 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 16 Dec 2021 09:59:46 +0800 Subject: [PATCH 22/33] =?UTF-8?q?=E6=96=B0=E5=A2=9EVue3=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/vm/vue/index-tree.vue.vm | 2 +- .../src/main/resources/vm/vue/index.vue.vm | 1 - .../resources/vm/vue/v3/index-tree.vue.vm | 465 ++++++++++++++ .../src/main/resources/vm/vue/v3/index.vue.vm | 567 ++++++++++++++++++ .../src/main/resources/vm/vue/v3/readme.txt | 1 + 5 files changed, 1034 insertions(+), 2 deletions(-) create mode 100644 ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm create mode 100644 ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm create mode 100644 ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm index 95ac0ffe..62b12d98 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm @@ -263,7 +263,7 @@ diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm new file mode 100644 index 00000000..6e7b41f1 --- /dev/null +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm @@ -0,0 +1,567 @@ + + + diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt new file mode 100644 index 00000000..10362d62 --- /dev/null +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt @@ -0,0 +1 @@ +ʹõRuoYi-Cloud-Vue3ǰˣôҪһ´Ŀ¼ģindex.vue.vmindex-tree.vue.vmļϼvueĿ¼ \ No newline at end of file From 43f1681f51def0faf062ffc4b225c81e58e654be Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 16 Dec 2021 16:45:17 +0800 Subject: [PATCH 23/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=B7=AE=E5=BC=82=E5=AF=BC=E8=87=B4=E7=9A=84=E6=87=92=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 3 ++- ruoyi-ui/src/router/index.js | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index a4961db2..4e209e16 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -55,8 +55,8 @@ "vue": "2.6.12", "vue-count-to": "1.0.13", "vue-cropper": "0.5.5", - "vue-router": "3.4.9", "vue-meta": "2.4.0", + "vue-router": "3.4.9", "vuedraggable": "2.24.3", "vuex": "3.6.0" }, @@ -65,6 +65,7 @@ "@vue/cli-plugin-eslint": "4.4.6", "@vue/cli-service": "4.4.6", "babel-eslint": "10.1.0", + "babel-plugin-dynamic-import-node": "2.3.3", "chalk": "4.1.0", "connect": "3.6.6", "eslint": "7.15.0", diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index c1fcfc14..213c8a8e 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -35,28 +35,28 @@ export const constantRoutes = [ children: [ { path: '/redirect/:path(.*)', - component: (resolve) => require(['@/views/redirect'], resolve) + component: () => import('@/views/redirect') } ] }, { path: '/login', - component: (resolve) => require(['@/views/login'], resolve), + component: () => import('@/views/login'), hidden: true }, { path: '/register', - component: (resolve) => require(['@/views/register'], resolve), + component: () => import('@/views/register'), hidden: true }, { path: '/404', - component: (resolve) => require(['@/views/error/404'], resolve), + component: () => import('@/views/error/404'), hidden: true }, { path: '/401', - component: (resolve) => require(['@/views/error/401'], resolve), + component: () => import('@/views/error/401'), hidden: true }, { @@ -66,7 +66,7 @@ export const constantRoutes = [ children: [ { path: 'index', - component: (resolve) => require(['@/views/index'], resolve), + component: () => import('@/views/index'), name: 'Index', meta: { title: '首页', icon: 'dashboard', affix: true } } @@ -80,7 +80,7 @@ export const constantRoutes = [ children: [ { path: 'profile', - component: (resolve) => require(['@/views/system/user/profile/index'], resolve), + component: () => import('@/views/system/user/profile/index'), name: 'Profile', meta: { title: '个人中心', icon: 'user' } } @@ -93,7 +93,7 @@ export const constantRoutes = [ children: [ { path: 'role/:userId(\\d+)', - component: (resolve) => require(['@/views/system/user/authRole'], resolve), + component: () => import('@/views/system/user/authRole'), name: 'AuthRole', meta: { title: '分配角色', activeMenu: '/system/user' } } @@ -106,7 +106,7 @@ export const constantRoutes = [ children: [ { path: 'user/:roleId(\\d+)', - component: (resolve) => require(['@/views/system/role/authUser'], resolve), + component: () => import('@/views/system/role/authUser'), name: 'AuthUser', meta: { title: '分配用户', activeMenu: '/system/role' } } @@ -119,7 +119,7 @@ export const constantRoutes = [ children: [ { path: 'index/:dictId(\\d+)', - component: (resolve) => require(['@/views/system/dict/data'], resolve), + component: () => import('@/views/system/dict/data'), name: 'Data', meta: { title: '字典数据', activeMenu: '/system/dict' } } @@ -132,7 +132,7 @@ export const constantRoutes = [ children: [ { path: 'index', - component: (resolve) => require(['@/views/monitor/job/log'], resolve), + component: () => import('@/views/monitor/job/log'), name: 'JobLog', meta: { title: '调度日志', activeMenu: '/monitor/job' } } @@ -145,7 +145,7 @@ export const constantRoutes = [ children: [ { path: 'index', - component: (resolve) => require(['@/views/tool/gen/editTable'], resolve), + component: () => import('@/views/tool/gen/editTable'), name: 'GenEdit', meta: { title: '修改生成配置', activeMenu: '/tool/gen' } } From b06db488919651b70ea81f57e52510abd30f001b Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 17 Dec 2021 11:37:58 +0800 Subject: [PATCH 24/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8C=85?= =?UTF-8?q?=E5=90=8E=E5=AD=97=E4=BD=93=E5=9B=BE=E6=A0=87=E5=81=B6=E7=8E=B0?= =?UTF-8?q?=E7=9A=84=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/vue.config.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 76707460..36cd2025 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -42,6 +42,13 @@ module.exports = { }, disableHostCheck: true }, + css: { + loaderOptions: { + sass: { + sassOptions: { outputStyle: "expanded" } + } + } + }, configureWebpack: { name: name, resolve: { From b64507d64a257f1eccfa2660c5786093312c670e Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 18 Dec 2021 18:20:25 +0800 Subject: [PATCH 25/33] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E8=AE=BE=E7=BD=AE=E6=88=90=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E7=81=B5=E6=B4=BB=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/utils/PageUtils.java | 29 +++++++++++++++++++ .../core/web/controller/BaseController.java | 16 ++-------- 2 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java new file mode 100644 index 00000000..f93d1f84 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/PageUtils.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.core.utils; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.utils.sql.SqlUtil; +import com.ruoyi.common.core.web.page.PageDomain; +import com.ruoyi.common.core.web.page.TableSupport; + +/** + * 分页工具类 + * + * @author ruoyi + */ +public class PageUtils extends PageHelper +{ + /** + * 设置请求分页数据 + */ + public static void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.startPage(pageNum, pageSize, orderBy); + } + } +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java index 64169511..af52f172 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java @@ -7,16 +7,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; -import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ruoyi.common.core.constant.HttpStatus; import com.ruoyi.common.core.utils.DateUtils; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.sql.SqlUtil; +import com.ruoyi.common.core.utils.PageUtils; import com.ruoyi.common.core.web.domain.AjaxResult; -import com.ruoyi.common.core.web.page.PageDomain; import com.ruoyi.common.core.web.page.TableDataInfo; -import com.ruoyi.common.core.web.page.TableSupport; /** * web层通用数据处理 @@ -49,15 +45,7 @@ public class BaseController */ protected void startPage() { - PageDomain pageDomain = TableSupport.buildPageRequest(); - Integer pageNum = pageDomain.getPageNum(); - Integer pageSize = pageDomain.getPageSize(); - if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) - { - String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); - Boolean reasonable = pageDomain.getReasonable(); - PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); - } + PageUtils.startPage(); } /** From 7713948f5c7bc383ce14bb47c21ca8f7ada9973a Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 18 Dec 2021 18:21:23 +0800 Subject: [PATCH 26/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E7=BC=BA=E5=B0=91=E7=9A=84prop=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/system/menu/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/system/menu/index.vue b/ruoyi-ui/src/views/system/menu/index.vue index f203e692..7fb1c7b6 100644 --- a/ruoyi-ui/src/views/system/menu/index.vue +++ b/ruoyi-ui/src/views/system/menu/index.vue @@ -128,7 +128,7 @@ - + Date: Sat, 18 Dec 2021 18:25:56 +0800 Subject: [PATCH 27/33] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ImagePreview/index.vue | 67 +++++++++++++++++++ ruoyi-ui/src/main.js | 3 + 2 files changed, 70 insertions(+) create mode 100644 ruoyi-ui/src/components/ImagePreview/index.vue diff --git a/ruoyi-ui/src/components/ImagePreview/index.vue b/ruoyi-ui/src/components/ImagePreview/index.vue new file mode 100644 index 00000000..44e27aac --- /dev/null +++ b/ruoyi-ui/src/components/ImagePreview/index.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/ruoyi-ui/src/main.js b/ruoyi-ui/src/main.js index 729467ae..ebd94b9d 100644 --- a/ruoyi-ui/src/main.js +++ b/ruoyi-ui/src/main.js @@ -29,6 +29,8 @@ import Editor from "@/components/Editor" import FileUpload from "@/components/FileUpload" // 图片上传组件 import ImageUpload from "@/components/ImageUpload" +// 图片预览组件 +import ImagePreview from "@/components/ImagePreview" // 字典标签组件 import DictTag from '@/components/DictTag' // 头部标签组件 @@ -54,6 +56,7 @@ Vue.component('RightToolbar', RightToolbar) Vue.component('Editor', Editor) Vue.component('FileUpload', FileUpload) Vue.component('ImageUpload', ImageUpload) +Vue.component('ImagePreview', ImagePreview) Vue.use(directive) Vue.use(plugins) From 1e7b9fb94cd666d111e0291947d7f0c80d39c870 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 18 Dec 2021 18:27:14 +0800 Subject: [PATCH 28/33] =?UTF-8?q?=E8=B7=AF=E7=94=B1=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E9=85=8D=E7=BD=AE=E8=8F=9C=E5=8D=95=E6=88=96?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/router/index.js | 13 ++++++++++++- ruoyi-ui/src/store/modules/permission.js | 22 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 213c8a8e..65099a24 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -17,6 +17,8 @@ import Layout from '@/layout' * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 + * roles: ['admin', 'common'] // 访问路由的角色权限 + * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 * meta : { noCache: true // 如果设置为true,则不会被 缓存(默认 false) title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 @@ -85,11 +87,16 @@ export const constantRoutes = [ meta: { title: '个人中心', icon: 'user' } } ] - }, + } +] + +// 动态路由,基于用户权限动态去加载 +export const dynamicRoutes = [ { path: '/system/user-auth', component: Layout, hidden: true, + permissions: ['system:user:edit'], children: [ { path: 'role/:userId(\\d+)', @@ -103,6 +110,7 @@ export const constantRoutes = [ path: '/system/role-auth', component: Layout, hidden: true, + permissions: ['system:role:edit'], children: [ { path: 'user/:roleId(\\d+)', @@ -116,6 +124,7 @@ export const constantRoutes = [ path: '/system/dict-data', component: Layout, hidden: true, + permissions: ['system:dict:list'], children: [ { path: 'index/:dictId(\\d+)', @@ -129,6 +138,7 @@ export const constantRoutes = [ path: '/monitor/job-log', component: Layout, hidden: true, + permissions: ['monitor:job:list'], children: [ { path: 'index', @@ -142,6 +152,7 @@ export const constantRoutes = [ path: '/tool/gen-edit', component: Layout, hidden: true, + permissions: ['tool:gen:edit'], children: [ { path: 'index', diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js index 2c2120a8..8c3c3390 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -1,4 +1,5 @@ -import { constantRoutes } from '@/router' +import auth from '@/plugins/auth' +import router, { constantRoutes, dynamicRoutes } from '@/router' import { getRouters } from '@/api/menu' import Layout from '@/layout/index' import ParentView from '@/components/ParentView' @@ -42,7 +43,9 @@ const permission = { const rdata = JSON.parse(JSON.stringify(res.data)) const sidebarRoutes = filterAsyncRouter(sdata) const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes); rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) + router.addRoutes(asyncRoutes); commit('SET_ROUTES', rewriteRoutes) commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) commit('SET_DEFAULT_ROUTES', sidebarRoutes) @@ -106,6 +109,23 @@ function filterChildren(childrenMap, lastRouter = false) { return children } +// 动态路由遍历,验证是否具备权限 +export function filterDynamicRoutes(routes) { + const res = [] + routes.forEach(route => { + if (route.permissions) { + if (auth.hasPermiOr(route.permissions)) { + res.push(route) + } + } else if (route.roles) { + if (auth.hasRoleOr(route.roles)) { + res.push(route) + } + } + }) + return res +} + export const loadView = (view) => { if (process.env.NODE_ENV === 'development') { return (resolve) => require([`@/views/${view}`], resolve) From 33ba42a75921c8e83e5945e3df3a2b0d2570c6ad Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 19 Dec 2021 20:01:17 +0800 Subject: [PATCH 29/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7log4j2=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7248b6ee..d19b7801 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 2.10.0 3.2.2 2.12.2 - 2.16.0 + 2.17.0 From 24be94be5e56b104d01919853ffc4b50658ca44c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 20 Dec 2021 09:44:13 +0800 Subject: [PATCH 30/33] =?UTF-8?q?=E9=9B=86=E6=88=90compression-webpack-plu?= =?UTF-8?q?gin=E6=8F=92=E4=BB=B6=E5=AE=9E=E7=8E=B0=E6=89=93=E5=8C=85Gzip?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 1 + ruoyi-ui/vue.config.js | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 4e209e16..17c16764 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -67,6 +67,7 @@ "babel-eslint": "10.1.0", "babel-plugin-dynamic-import-node": "2.3.3", "chalk": "4.1.0", + "compression-webpack-plugin": "5.0.2", "connect": "3.6.6", "eslint": "7.15.0", "eslint-plugin-vue": "7.2.0", diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 36cd2025..63bac6a5 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -5,6 +5,8 @@ function resolve(dir) { return path.join(__dirname, dir) } +const CompressionPlugin = require('compression-webpack-plugin') + const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题 const port = process.env.port || process.env.npm_config_port || 80 // 端口 @@ -55,7 +57,16 @@ module.exports = { alias: { '@': resolve('src') } - } + }, + plugins: [ + new CompressionPlugin({ + test: /\.(js|css|html)?$/i, // 压缩文件格式 + filename: '[path].gz[query]', // 压缩后的文件名 + algorithm: 'gzip', // 使用gzip压缩 + threshold: 10240, // 对超过10K的数据压缩 + minRatio: 0.8 // 压缩率小于1才会压缩 + }) + ], }, chainWebpack(config) { config.plugins.delete('preload') // TODO: need test From 1797831afcbe98a61a2b6365460db6d7ba07885d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 20 Dec 2021 14:26:05 +0800 Subject: [PATCH 31/33] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BD=BF=E7=94=A8Gzip?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E7=BC=A9=E9=9D=99=E6=80=81=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/vue.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 63bac6a5..1a9e913d 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -59,11 +59,11 @@ module.exports = { } }, plugins: [ + // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 new CompressionPlugin({ test: /\.(js|css|html)?$/i, // 压缩文件格式 filename: '[path].gz[query]', // 压缩后的文件名 algorithm: 'gzip', // 使用gzip压缩 - threshold: 10240, // 对超过10K的数据压缩 minRatio: 0.8 // 压缩率小于1才会压缩 }) ], From 054fd7546f90c7875b6477f807c19f49dc0eb40c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 21 Dec 2021 13:41:40 +0800 Subject: [PATCH 32/33] =?UTF-8?q?SQL=E5=B7=A5=E5=85=B7=E7=B1=BB=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=A3=80=E6=9F=A5=E5=85=B3=E9=94=AE=E5=AD=97=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/utils/sql/SqlUtil.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java index 00a18efe..271b58dc 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java @@ -10,6 +10,11 @@ import com.ruoyi.common.core.utils.StringUtils; */ public class SqlUtil { + /** + * 定义常用的 sql关键字 + */ + public static String SQL_REGEX = "select |insert |delete |update |drop |count |exec |chr |mid |master |truncate |char |and |declare "; + /** * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) */ @@ -34,4 +39,23 @@ public class SqlUtil { return value.matches(SQL_PATTERN); } + + /** + * SQL关键字检查 + */ + public static void filterKeyword(String value) + { + if (StringUtils.isEmpty(value)) + { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (int i = 0; i < sqlKeywords.length; i++) + { + if (StringUtils.indexOfIgnoreCase(value, sqlKeywords[i]) > -1) + { + throw new UtilException("参数存在SQL注入风险"); + } + } + } } From 3410150e28d60e77db0501146c27ef530aaeae6e Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 21 Dec 2021 13:41:49 +0800 Subject: [PATCH 33/33] =?UTF-8?q?=E5=8D=87=E7=BA=A7fastjson=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=881.2.79?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d19b7801..00ee34ea 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ 2.11.0 1.4 2.3 - 1.2.78 + 1.2.79 0.9.1 8.2.2 4.1.2