From e7931380311ae5e4b41df8dc39b827ea29f09158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=AF=E7=A1=85=E6=AD=A5=EF=BC=8C=E8=87=B3=E5=8D=83?= =?UTF-8?q?=E9=87=8C?= <1553592282@qq.com> Date: Thu, 17 Feb 2022 17:16:11 +0800 Subject: [PATCH 01/38] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E5=88=B7=E6=96=B0=E9=A1=B5=E9=9D=A2=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E8=BF=98=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E9=87=8D=E6=96=B0=E7=99=BB=E5=BD=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/permission.js | 109 +++++++++++++++++----------------- ruoyi-ui/src/utils/request.js | 15 ++--- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js index bde529365..6bb0a1f83 100644 --- a/ruoyi-ui/src/permission.js +++ b/ruoyi-ui/src/permission.js @@ -1,53 +1,56 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' -import 'nprogress/nprogress.css' -import { getToken } from '@/utils/auth' - -NProgress.configure({ showSpinner: false }) - -const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] - -router.beforeEach((to, from, next) => { - NProgress.start() - if (getToken()) { - to.meta.title && store.dispatch('settings/setTitle', to.meta.title) - /* has token*/ - if (to.path === '/login') { - next({ path: '/' }) - NProgress.done() - } else { - if (store.getters.roles.length === 0) { - // 判断当前用户是否已拉取完user_info信息 - store.dispatch('GetInfo').then(() => { - store.dispatch('GenerateRoutes').then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - router.addRoutes(accessRoutes) // 动态添加可访问路由表 - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 - }) - }).catch(err => { - store.dispatch('LogOut').then(() => { - Message.error(err) - next({ path: '/' }) - }) - }) - } else { - next() - } - } - } else { - // 没有token - if (whiteList.indexOf(to.path) !== -1) { - // 在免登录白名单,直接进入 - next() - } else { - next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 - NProgress.done() - } - } -}) - -router.afterEach(() => { - NProgress.done() -}) +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isRelogin } from '@/utils/request' + +NProgress.configure({ showSpinner: false }) + +const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] + +router.beforeEach((to, from, next) => { + NProgress.start() + if (getToken()) { + to.meta.title && store.dispatch('settings/setTitle', to.meta.title) + /* has token*/ + if (to.path === '/login') { + next({ path: '/' }) + NProgress.done() + } else { + if (store.getters.roles.length === 0) { + isRelogin.show = true + // 判断当前用户是否已拉取完user_info信息 + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + store.dispatch('GenerateRoutes').then(accessRoutes => { + // 根据roles权限生成可访问的路由表 + router.addRoutes(accessRoutes) // 动态添加可访问路由表 + next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + }) + }).catch(err => { + store.dispatch('LogOut').then(() => { + Message.error(err) + next({ path: '/' }) + }) + }) + } else { + next() + } + } + } else { + // 没有token + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 107a28d67..e69205bc7 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -9,7 +9,7 @@ import { saveAs } from 'file-saver' let downloadLoadingInstance; // 是否显示重新登录 -let isReloginShow; +export let isRelogin = { show: false }; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 @@ -76,23 +76,20 @@ service.interceptors.response.use(res => { return res.data } if (code === 401) { - if (!isReloginShow) { - isReloginShow = true; + if (!isRelogin.show) { + isRelogin.show = true; MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } ).then(() => { - isReloginShow = false; + isRelogin.show = false; store.dispatch('LogOut').then(() => { - // 如果是登录页面不需要重新加载 - if (window.location.hash.indexOf("#/login") != 0) { - location.href = '/index'; - } + location.href = '/index'; }) }).catch(() => { - isReloginShow = false; + isRelogin.show = false; }); } return Promise.reject('无效的会话,或者会话已过期,请重新登录。') From bb793d71e7bb47e8a036dba4d07b132cecc24c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 18 Feb 2022 14:05:32 +0800 Subject: [PATCH 02/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20minio=20?= =?UTF-8?q?=E9=80=82=E9=85=8D=20https=20=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/oss/service/impl/MinioOssStrategy.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java index eb2e77042..93f88fb3a 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java @@ -9,6 +9,8 @@ import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import io.minio.*; +import io.minio.http.HttpUtils; +import okhttp3.HttpUrl; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; @@ -29,10 +31,15 @@ public class MinioOssStrategy extends AbstractOssStrategy { public void init(OssProperties ossProperties) { super.init(ossProperties); try { - minioClient = MinioClient.builder() - .endpoint(properties.getEndpoint(), 443, OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) - .credentials(properties.getAccessKey(), properties.getSecretKey()) - .build(); + MinioClient.Builder builder = MinioClient.builder(); + if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) { + HttpUrl url = HttpUtils.getBaseUrl(properties.getEndpoint()) + .newBuilder().scheme("https").build(); + builder.endpoint(url); + } else { + builder.endpoint(properties.getEndpoint()); + } + minioClient = builder.credentials(properties.getAccessKey(), properties.getSecretKey()).build(); createBucket(); } catch (Exception e) { throw new OssException("Minio存储配置错误! 请检查系统配置:[" + e.getMessage() + "]"); From 3446b38cbbe59150942f5b83740a1c71a1798b4a Mon Sep 17 00:00:00 2001 From: hewenqiang <1527468660@qq.com> Date: Fri, 18 Feb 2022 16:18:38 +0800 Subject: [PATCH 03/38] =?UTF-8?q?update=20=E4=BF=AE=E6=AD=A3=20StringUtils?= =?UTF-8?q?.format()=20=E6=B3=A8=E9=87=8A=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/StringUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index 77a484ec8..7181a454a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -86,7 +86,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可 * 例: * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b - * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a + * 转义{}: format("this is \\{} for {}", "a", "b") -> this is {} for a * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b * * @param template 文本模板,被替换的部分用 {} 表示 From 30e90619f50f5051a41287c329100461523a7cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 18 Feb 2022 13:39:02 +0000 Subject: [PATCH 04/38] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=95=86=E5=AE=B6=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 353e087fc..7256e8685 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ ## 捐献作者 作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭 - + ## 业务功能 From 2917d335bc3fd1f6dfb57cbad6d73ba48bc5f9d7 Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: Sat, 19 Feb 2022 15:13:32 +0800 Subject: [PATCH 05/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA=E7=AE=A1=E7=90=86=E5=91=98=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/controller/system/SysUserController.java | 5 +++-- .../main/java/com/ruoyi/common/constant/UserConstants.java | 6 ++++++ .../java/com/ruoyi/common/core/domain/entity/SysRole.java | 7 ++----- .../java/com/ruoyi/common/core/domain/entity/SysUser.java | 7 ++----- .../src/main/java/com/ruoyi/common/helper/LoginHelper.java | 6 +++--- .../ruoyi/framework/handler/PlusDataPermissionHandler.java | 2 +- .../com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 2 +- .../com/ruoyi/system/service/impl/SysMenuServiceImpl.java | 3 +-- .../com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 3 +-- .../com/ruoyi/system/service/impl/SysUserServiceImpl.java | 2 +- 10 files changed, 21 insertions(+), 22 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 0c2e9e022..07553d7aa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -16,6 +16,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.excel.ExcelResult; +import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.vo.SysUserExportVo; @@ -109,7 +110,7 @@ public class SysUserController extends BaseController { userService.checkUserDataScope(userId); Map ajax = new HashMap<>(); List roles = roleService.selectRoleAll(); - ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); ajax.put("posts", postService.selectPostAll()); if (ObjectUtil.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); @@ -213,7 +214,7 @@ public class SysUserController extends BaseController { List roles = roleService.selectRolesByUserId(userId); Map ajax = new HashMap<>(); ajax.put("user", user); - ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); return R.ok(ajax); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java index eebbb4b46..406d14413 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -109,4 +109,10 @@ public interface UserConstants { */ int PASSWORD_MIN_LENGTH = 5; int PASSWORD_MAX_LENGTH = 20; + + /** + * 管理员ID + */ + Long ADMIN_ID = 1L; + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index aeffc409d..662989efe 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.convert.ExcelDictConvert; import com.ruoyi.common.core.domain.BaseEntity; import io.swagger.annotations.ApiModelProperty; @@ -132,11 +133,7 @@ public class SysRole extends BaseEntity { @ApiModelProperty(value = "是否管理员") public boolean isAdmin() { - return isAdmin(this.roleId); - } - - public static boolean isAdmin(Long roleId) { - return roleId != null && 1L == roleId; + return UserConstants.ADMIN_ID.equals(this.roleId); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index b6f5d17c1..6885e95cf 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.common.annotation.Sensitive; +import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.enums.SensitiveStrategy; import com.ruoyi.common.xss.Xss; @@ -185,11 +186,7 @@ public class SysUser extends BaseEntity { @ApiModelProperty(value = "是否管理员") public boolean isAdmin() { - return isAdmin(this.userId); - } - - public static boolean isAdmin(Long userId) { - return userId != null && 1L == userId; + return UserConstants.ADMIN_ID.equals(this.userId); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java index a15220859..daa20d848 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java @@ -2,6 +2,7 @@ package com.ruoyi.common.helper; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.DeviceType; import com.ruoyi.common.enums.UserType; @@ -125,12 +126,11 @@ public class LoginHelper { * @return 结果 */ public static boolean isAdmin(Long userId) { - return userId != null && 1L == userId; + return UserConstants.ADMIN_ID.equals(userId); } public static boolean isAdmin() { - Long userId = getUserId(); - return userId != null && 1L == userId; + return isAdmin(getUserId()); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java index f2a60a415..7ecc12a3f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java @@ -79,7 +79,7 @@ public class PlusDataPermissionHandler { DataPermissionHelper.setVariable("user", currentUser); } // 如果是超级管理员,则不过滤数据 - if (ObjectUtil.isNull(currentUser) || LoginHelper.isAdmin(currentUser.getUserId())) { + if (LoginHelper.isAdmin()) { return where; } String dataFilterSql = buildDataFilter(dataColumns, isSelect); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 621dc078d..5cd3fe0e6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -152,7 +152,7 @@ public class SysDeptServiceImpl implements ISysDeptService { */ @Override public void checkDeptDataScope(Long deptId) { - if (!SysUser.isAdmin(LoginHelper.getUserId())) { + if (!LoginHelper.isAdmin()) { SysDept dept = new SysDept(); dept.setDeptId(deptId); List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 0029ecd36..e9c28e1ca 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -8,7 +8,6 @@ import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysRole; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.TreeBuildUtils; @@ -58,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService { public List selectMenuList(SysMenu menu, Long userId) { List menuList = null; // 管理员显示所有菜单信息 - if (SysUser.isAdmin(userId)) { + if (LoginHelper.isAdmin(userId)) { menuList = baseMapper.selectList(new LambdaQueryWrapper() .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index 271dc9754..81334892f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.entity.SysRole; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; @@ -181,7 +180,7 @@ public class SysRoleServiceImpl implements ISysRoleService { */ @Override public void checkRoleDataScope(Long roleId) { - if (!SysUser.isAdmin(LoginHelper.getUserId())) { + if (!LoginHelper.isAdmin()) { SysRole role = new SysRole(); role.setRoleId(roleId); List roles = SpringUtils.getAopProxy(this).selectRoleList(role); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 00e999138..c3ff6f409 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -206,7 +206,7 @@ public class SysUserServiceImpl implements ISysUserService { */ @Override public void checkUserDataScope(Long userId) { - if (!SysUser.isAdmin(LoginHelper.getUserId())) { + if (!LoginHelper.isAdmin()) { SysUser user = new SysUser(); user.setUserId(userId); List users = SpringUtils.getAopProxy(this).selectUserList(user); From edce19e406dee954e2f35fe828c30851f4cbd30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 18 Feb 2022 16:20:58 +0000 Subject: [PATCH 06/38] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20=E5=A4=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=A4=9A=E8=AE=BE=E5=A4=87=E7=9A=84=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/helper/LoginHelper.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java index daa20d848..7875c5630 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java @@ -13,7 +13,13 @@ import lombok.NoArgsConstructor; /** * 登录鉴权助手 - * 为适配多端登录而封装 + * + * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app + * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios + * 可以组成 用户类型与设备类型多对多的 权限灵活控制 + * + * 多用户体系 针对 多种用户类型 但权限控制不一致 + * 可以组成 多用户类型表与多设备类型 分别控制权限 * * @author Lion Li */ @@ -27,7 +33,6 @@ public class LoginHelper { /** * 登录系统 - * 针对两套用户体系 * * @param loginUser 登录用户信息 */ @@ -39,7 +44,7 @@ public class LoginHelper { /** * 登录系统 基于 设备类型 - * 针对一套用户体系 + * 针对相同用户体系不同设备 * * @param loginUser 登录用户信息 */ From f05aa674abefe4e93fcd7b1b1a3e99f7af95579c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 20 Feb 2022 16:04:25 +0800 Subject: [PATCH 07/38] =?UTF-8?q?=E5=8D=87=E7=BA=A7oshi=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC6.1.2?= 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 b4d6fe419..1b838b02c 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 2.2.0 1.4.0 1.2.79 - 5.8.6 + 6.1.2 5.10.0 2.11.0 1.4 From 3bb9b03add7a0b88a61b9692048ec1671d389c8c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 20 Feb 2022 16:04:40 +0800 Subject: [PATCH 08/38] =?UTF-8?q?=E5=8D=87=E7=BA=A7spring-boot-mybatis?= =?UTF-8?q?=E5=88=B0=E6=9C=80=E6=96=B0=E7=89=882.2.2?= 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 1b838b02c..844d78377 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 1.21 3.0.0 2.3.2 - 2.2.0 + 2.2.2 1.4.0 1.2.79 6.1.2 From 986b48cf36fac1ea013c8243edef759bc0ab3777 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 20 Feb 2022 16:05:04 +0800 Subject: [PATCH 09/38] =?UTF-8?q?=E5=8D=87=E7=BA=A7pagehelper=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=881.4.1?= 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 844d78377..ddc287527 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 3.0.0 2.3.2 2.2.2 - 1.4.0 + 1.4.1 1.2.79 6.1.2 5.10.0 From 54c6c4e547252cb14c3b0fe1a08758e42fd97691 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 20 Feb 2022 16:06:33 +0800 Subject: [PATCH 10/38] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=90=E8=A1=8C=E5=8F=82=E6=95=B0=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/framework/web/domain/server/Jvm.java | 8 ++++++++ ruoyi-ui/src/views/monitor/server/index.vue | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java index f29d2cbe6..604ca020a 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java @@ -119,4 +119,12 @@ public class Jvm { return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate()); } + + /** + * 运行参数 + */ + public String getInputArgs() + { + return ManagementFactory.getRuntimeMXBean().getInputArguments().toString(); + } } diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue index 3eaaea0e1..9522b8d21 100644 --- a/ruoyi-ui/src/views/monitor/server/index.vue +++ b/ruoyi-ui/src/views/monitor/server/index.vue @@ -128,6 +128,10 @@ 项目路径 {{ server.sys.userDir }} + + 运行参数 + {{ server.jvm.inputArgs }} + From 64b183da3689c33b78773f6b93cc0438d2b7aaae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 21 Feb 2022 10:40:28 +0800 Subject: [PATCH 11/38] =?UTF-8?q?update=20=E5=A2=9E=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=87=BA=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/controller/system/SysLoginController.java | 1 + .../main/java/com/ruoyi/system/service/SysLoginService.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 3a033e517..fad8b5bf3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -65,6 +65,7 @@ public class SysLoginController { public R logout() { try { StpUtil.logout(); + loginService.logout(LoginHelper.getUsername()); } catch (NotLoginException e) { } return R.ok("退出成功"); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 522e32b74..9938e2edf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -97,6 +97,10 @@ public class SysLoginService { return StpUtil.getTokenValue(); } + public void logout(String loginName) { + asyncService.recordLogininfor(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success"), ServletUtils.getRequest()); + } + /** * 校验验证码 * From 075f7fc19e80cab53dc5bfe7f03c9d6765da64a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 21 Feb 2022 10:53:59 +0800 Subject: [PATCH 12/38] =?UTF-8?q?update=20=E5=A2=9E=E5=8A=A0=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=20=E7=94=A8=E6=88=B7=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/register.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/register.vue b/ruoyi-ui/src/views/register.vue index c9f1efbb2..9320b8071 100644 --- a/ruoyi-ui/src/views/register.vue +++ b/ruoyi-ui/src/views/register.vue @@ -86,7 +86,8 @@ export default { password: "", confirmPassword: "", code: "", - uuid: "" + uuid: "", + user_type: "sys_user" }, registerRules: { username: [ From aa9ed2e863ebd1b3a25f5f15b9a5cb78369aae22 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 21 Feb 2022 15:21:16 +0800 Subject: [PATCH 13/38] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E8=AF=B7=E6=B1=82=E4=B8=A4=E6=AC=A1=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/components/Pagination/index.vue | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ruoyi-ui/src/components/Pagination/index.vue b/ruoyi-ui/src/components/Pagination/index.vue index 4d862116b..1617af004 100644 --- a/ruoyi-ui/src/components/Pagination/index.vue +++ b/ruoyi-ui/src/components/Pagination/index.vue @@ -1,7 +1,6 @@ this.total) { - this.pageShow = false; - this.$nextTick(() => { - this.pageShow = true - }) + this.currentPage = 1 } this.$emit('pagination', { page: this.currentPage, limit: val }) if (this.autoScroll) { From 3517a8f49440afcf7bd5b98bb4f0ba255f5f409d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 22 Feb 2022 14:03:53 +0800 Subject: [PATCH 14/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20R=20?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=BF=94=E5=9B=9E=20msg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/core/domain/R.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java index f868e8e75..7a2420238 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java @@ -38,11 +38,11 @@ public class R implements Serializable { private T data; public static R ok() { - return restResult(null, SUCCESS, null); + return restResult(null, SUCCESS, "操作成功"); } public static R ok(T data) { - return restResult(data, SUCCESS, null); + return restResult(data, SUCCESS, "操作成功"); } public static R ok(String msg) { @@ -54,7 +54,7 @@ public class R implements Serializable { } public static R fail() { - return restResult(null, FAIL, null); + return restResult(null, FAIL, "操作失败"); } public static R fail(String msg) { @@ -62,7 +62,7 @@ public class R implements Serializable { } public static R fail(T data) { - return restResult(data, FAIL, null); + return restResult(data, FAIL, "操作失败"); } public static R fail(String msg, T data) { From d0f7a317e4657e1f44b3ffdb9a039e72b33d00ff Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 22 Feb 2022 19:10:21 +0800 Subject: [PATCH 15/38] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E4=BF=9D=E5=AD=98=E5=88=B0=E5=86=85=E5=AD=98?= =?UTF-8?q?=E4=B8=AD=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/quartz/config/ScheduleConfig.java | 114 +++++++++--------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java index 04db2c9db..bd315d25a 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -1,57 +1,57 @@ -package com.ruoyi.quartz.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.quartz.SchedulerFactoryBean; -import javax.sql.DataSource; -import java.util.Properties; - -/** - * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) - * - * @author ruoyi - */ -@Configuration -public class ScheduleConfig -{ - @Bean - public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) - { - SchedulerFactoryBean factory = new SchedulerFactoryBean(); - factory.setDataSource(dataSource); - - // quartz参数 - Properties prop = new Properties(); - prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); - prop.put("org.quartz.scheduler.instanceId", "AUTO"); - // 线程池配置 - prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); - prop.put("org.quartz.threadPool.threadCount", "20"); - prop.put("org.quartz.threadPool.threadPriority", "5"); - // JobStore配置 - prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); - // 集群配置 - prop.put("org.quartz.jobStore.isClustered", "true"); - prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); - prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); - prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); - - // sqlserver 启用 - // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); - prop.put("org.quartz.jobStore.misfireThreshold", "12000"); - prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); - factory.setQuartzProperties(prop); - - factory.setSchedulerName("RuoyiScheduler"); - // 延时启动 - factory.setStartupDelay(1); - factory.setApplicationContextSchedulerContextKey("applicationContextKey"); - // 可选,QuartzScheduler - // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 - factory.setOverwriteExistingJobs(true); - // 设置自动启动,默认为true - factory.setAutoStartup(true); - - return factory; - } -} +//package com.ruoyi.quartz.config; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.quartz.SchedulerFactoryBean; +//import javax.sql.DataSource; +//import java.util.Properties; +// +///** +// * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) +// * +// * @author ruoyi +// */ +//@Configuration +//public class ScheduleConfig +//{ +// @Bean +// public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) +// { +// SchedulerFactoryBean factory = new SchedulerFactoryBean(); +// factory.setDataSource(dataSource); +// +// // quartz参数 +// Properties prop = new Properties(); +// prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); +// prop.put("org.quartz.scheduler.instanceId", "AUTO"); +// // 线程池配置 +// prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); +// prop.put("org.quartz.threadPool.threadCount", "20"); +// prop.put("org.quartz.threadPool.threadPriority", "5"); +// // JobStore配置 +// prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); +// // 集群配置 +// prop.put("org.quartz.jobStore.isClustered", "true"); +// prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); +// prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); +// prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); +// +// // sqlserver 启用 +// // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); +// prop.put("org.quartz.jobStore.misfireThreshold", "12000"); +// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); +// factory.setQuartzProperties(prop); +// +// factory.setSchedulerName("RuoyiScheduler"); +// // 延时启动 +// factory.setStartupDelay(1); +// factory.setApplicationContextSchedulerContextKey("applicationContextKey"); +// // 可选,QuartzScheduler +// // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 +// factory.setOverwriteExistingJobs(true); +// // 设置自动启动,默认为true +// factory.setAutoStartup(true); +// +// return factory; +// } +//} From c8c57b545aecc4692d00ced16325363faaa86fbe Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 22 Feb 2022 19:10:34 +0800 Subject: [PATCH 16/38] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=AD=97=E5=AF=BC=E8=87=B4=E7=9A=84=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=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 --- .../src/main/resources/mapper/system/SysMenuMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index fd5f6a313..81e7b705a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -133,7 +133,7 @@ order_num = #{orderNum}, path = #{path}, component = #{component}, - query = #{query}, + `query` = #{query}, is_frame = #{isFrame}, is_cache = #{isCache}, menu_type = #{menuType}, @@ -156,7 +156,7 @@ order_num, path, component, - query, + `query`, is_frame, is_cache, menu_type, From d9b9f0b3d3b9917b9c85210d6227bfb9d444e622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 22 Feb 2022 21:37:48 +0800 Subject: [PATCH 17/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=B4=A6=E5=8F=B7=20=E9=82=AE=E7=AE=B1=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=AF=BC=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/sql/ry_vue_4.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/sql/ry_vue_4.0.sql b/script/sql/ry_vue_4.0.sql index fd78de96e..9b57bd010 100644 --- a/script/sql/ry_vue_4.0.sql +++ b/script/sql/ry_vue_4.0.sql @@ -66,7 +66,7 @@ create table sys_user ( -- 初始化-用户信息表数据 -- ---------------------------- insert into sys_user values(1, 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); -insert into sys_user values(2, 105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); +insert into sys_user values(2, 105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); -- ---------------------------- From 4d8bd8805b4f786660cfab74abab0f1982380ecf Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 23 Feb 2022 16:54:59 +0800 Subject: [PATCH 18/38] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E9=A1=B5=E9=9D=A2email=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E8=A1=A8=E5=8D=95=E9=AA=8C=E8=AF=81=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=BC=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/system/user/profile/userInfo.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/system/user/profile/userInfo.vue b/ruoyi-ui/src/views/system/user/profile/userInfo.vue index ac7c44a65..a40d8f60f 100644 --- a/ruoyi-ui/src/views/system/user/profile/userInfo.vue +++ b/ruoyi-ui/src/views/system/user/profile/userInfo.vue @@ -42,7 +42,7 @@ export default { { required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", - message: "'请输入正确的邮箱地址", + message: "请输入正确的邮箱地址", trigger: ["blur", "change"] } ], From cb5a6d29e2ca814c7291a3fec811f96d2974b0ce Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 23 Feb 2022 16:55:09 +0800 Subject: [PATCH 19/38] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=8B=A5=E6=9C=AA?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E5=88=B0=E5=AD=97=E5=85=B8=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=88=99=E8=BF=94=E5=9B=9E=E5=8E=9F=E5=AD=97=E5=85=B8=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/utils/ruoyi.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js index 8e3cb0cea..7e6eccd11 100644 --- a/ruoyi-ui/src/utils/ruoyi.js +++ b/ruoyi-ui/src/utils/ruoyi.js @@ -70,6 +70,9 @@ export function addDateRange(params, dateRange, propName) { // 回显数据字典 export function selectDictLabel(datas, value) { + if (value === undefined) { + return ""; + } var actions = []; Object.keys(datas).some((key) => { if (datas[key].value == ('' + value)) { @@ -77,23 +80,31 @@ export function selectDictLabel(datas, value) { return true; } }) + if (actions.length === 0) { + actions.push(value); + } return actions.join(''); } // 回显数据字典(字符串数组) export function selectDictLabels(datas, value, separator) { - if(value === undefined) { + if (value === undefined) { return ""; } var actions = []; var currentSeparator = undefined === separator ? "," : separator; var temp = value.split(currentSeparator); Object.keys(value.split(currentSeparator)).some((val) => { + var match = false; Object.keys(datas).some((key) => { if (datas[key].value == ('' + temp[val])) { actions.push(datas[key].label + currentSeparator); + match = true; } }) + if (!match) { + actions.push(temp[val] + currentSeparator); + } }) return actions.join('').substring(0, actions.join('').length - 1); } From 9aaa9ce8aa8190c9e2526d48a4e71f0352321377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Clumingsyc=E2=80=9D?= Date: Wed, 23 Feb 2022 20:00:47 +0800 Subject: [PATCH 20/38] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2email=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=9A=84=E8=A1=A8=E5=8D=95=E9=AA=8C=E8=AF=81=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=8D=95=E5=BC=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/system/dept/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue index b57f2b9de..17bc72ac6 100644 --- a/ruoyi-ui/src/views/system/dept/index.vue +++ b/ruoyi-ui/src/views/system/dept/index.vue @@ -206,7 +206,7 @@ export default { email: [ { type: "email", - message: "'请输入正确的邮箱地址", + message: "请输入正确的邮箱地址", trigger: ["blur", "change"] } ], From bb65cd1976231dc2665b9ba208b7ff26e325afd0 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 24 Feb 2022 09:28:51 +0800 Subject: [PATCH 21/38] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=AD=90=E8=A1=A8=E6=94=AF=E6=8C=81=E6=97=A5=E6=9C=9F/?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/generator/util/VelocityUtils.java | 18 ++++++++- .../src/main/resources/vm/vue/index.vue.vm | 35 ++++++++++++++-- .../src/main/resources/vm/vue/v3/index.vue.vm | 40 +++++++++++++++++-- ruoyi-ui/src/views/monitor/job/index.vue | 2 +- ruoyi-ui/src/views/system/notice/index.vue | 2 +- ruoyi-ui/src/views/system/user/index.vue | 6 +-- 6 files changed, 89 insertions(+), 14 deletions(-) diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index 6bce127c5..9ddf2650c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -271,6 +271,23 @@ public class VelocityUtils { List columns = genTable.getColumns(); Set dicts = new HashSet(); + addDicts(dicts, columns); + if (StringUtils.isNotNull(genTable.getSubTable())) + { + List subColumns = genTable.getSubTable().getColumns(); + addDicts(dicts, subColumns); + } + return StringUtils.join(dicts, ", "); + } + + /** + * 添加字典列表 + * + * @param dicts 字典列表 + * @param columns 列集合 + */ + public static void addDicts(Set dicts, List columns) + { for (GenTableColumn column : columns) { if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( @@ -280,7 +297,6 @@ public class VelocityUtils dicts.add("'" + column.getDictType() + "'"); } } - return StringUtils.join(dicts, ", "); } /** diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm index e7687b7b5..f034d7dfa 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -44,7 +44,7 @@ v-model="queryParams.${column.javaField}" type="date" value-format="yyyy-MM-dd" - placeholder="选择${comment}"> + placeholder="请选择${comment}"> #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") @@ -269,7 +269,7 @@ v-model="form.${field}" type="date" value-format="yyyy-MM-dd" - placeholder="选择${comment}"> + placeholder="请选择${comment}"> #elseif($column.htmlType == "textarea") @@ -302,12 +302,39 @@ #set($comment=$column.columnComment) #end #if($column.pk || $javaField == ${subTableFkclassName}) -#elseif($column.list && "" != $javaField) - +#elseif($column.list && $column.htmlType == "input") + +#elseif($column.list && $column.htmlType == "datetime") + + + + + +#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) + + + + + + + +#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) + + + + + + + #end #end diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm index 08bb07110..a363ef364 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm @@ -43,7 +43,7 @@ v-model="queryParams.${column.javaField}" type="date" value-format="YYYY-MM-DD" - placeholder="选择${comment}"> + placeholder="请选择${comment}"> #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") @@ -260,7 +260,7 @@ v-model="form.${field}" type="date" value-format="YYYY-MM-DD" - placeholder="选择${comment}"> + placeholder="请选择${comment}"> #elseif($column.htmlType == "textarea") @@ -293,12 +293,44 @@ #set($comment=$column.columnComment) #end #if($column.pk || $javaField == ${subTableFkclassName}) -#elseif($column.list && "" != $javaField) - +#elseif($column.list && $column.htmlType == "input") + +#elseif($column.list && $column.htmlType == "datetime") + + + + + + +#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) + + + + + + + +#elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) + + + + + + + #end #end diff --git a/ruoyi-ui/src/views/monitor/job/index.vue b/ruoyi-ui/src/views/monitor/job/index.vue index 84ea6af69..eba8e0f25 100644 --- a/ruoyi-ui/src/views/monitor/job/index.vue +++ b/ruoyi-ui/src/views/monitor/job/index.vue @@ -165,7 +165,7 @@ - + - + - + - + - + Date: Thu, 24 Feb 2022 10:01:59 +0800 Subject: [PATCH 22/38] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=20=E5=B0=86=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=B0=E6=9C=80=E5=90=8E=20=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/system/service/SysLoginService.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 9938e2edf..62ca18b57 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -87,13 +87,12 @@ public class SysLoginService { // 登录成功 清空错误次数 RedisUtils.deleteObject(Constants.LOGIN_ERROR + username); - asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); - recordLoginInfo(user.getUserId(), username); - LoginUser loginUser = buildLoginUser(user); - // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.PC); + + asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); + recordLoginInfo(user.getUserId(), username); return StpUtil.getTokenValue(); } From 8b097af195e5b0056eaad06f199cd1d291821912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=9F=E6=98=8E=E9=94=AE?= Date: Thu, 24 Feb 2022 12:39:28 +0800 Subject: [PATCH 23/38] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E6=95=B0=E7=94=9F=E6=88=90=E6=96=B9=E5=BC=8F=20?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=AE=B9=E6=98=93=E7=94=9F=E6=88=90=E4=B8=A4?= =?UTF-8?q?=E4=B8=AA=E7=9B=B8=E5=90=8C=E9=9A=8F=E6=9C=BA=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/captcha/UnsignedMathGenerator.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java b/ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java index 7b908a24f..5dd00ec08 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java @@ -41,14 +41,14 @@ public class UnsignedMathGenerator implements CodeGenerator { @Override public String generate() { final int limit = getLimit(); - int min = RandomUtil.randomInt(limit); - int max = RandomUtil.randomInt(min, limit); - String number1 = Integer.toString(max); - String number2 = Integer.toString(min); - number1 = StringUtils.rightPad(number1, this.numberLength, CharUtil.SPACE); - number2 = StringUtils.rightPad(number2, this.numberLength, CharUtil.SPACE); + int a = RandomUtil.randomInt(limit); + int b = RandomUtil.randomInt(limit); + String max = Integer.toString(Math.max(a,b)); + String min = Integer.toString(Math.min(a,b)); + max = StringUtils.rightPad(max, this.numberLength, CharUtil.SPACE); + min = StringUtils.rightPad(min, this.numberLength, CharUtil.SPACE); - return number1 + RandomUtil.randomChar(OPERATORS) + number2 + '='; + return max + RandomUtil.randomChar(OPERATORS) + min + '='; } @Override From e62e8e372cf4368f139da191666d3e5e8c62e781 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 25 Feb 2022 09:08:56 +0800 Subject: [PATCH 24/38] =?UTF-8?q?=E7=BB=84=E4=BB=B6ImageUpload=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E5=9B=BE=E5=90=8C=E6=97=B6=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/common/CommonController.java | 55 +++++++++++++++++-- .../ruoyi/common/utils/file/FileUtils.java | 18 ++++++ .../com/ruoyi/quartz/util/ScheduleUtils.java | 5 +- ruoyi-ui/src/components/ImageUpload/index.vue | 15 ++++- 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java index acd12ccfc..d51d61d00 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -1,5 +1,7 @@ package com.ruoyi.web.controller.common; +import java.util.ArrayList; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; @@ -8,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.config.RuoYiConfig; @@ -24,6 +27,7 @@ import com.ruoyi.framework.config.ServerConfig; * @author ruoyi */ @RestController +@RequestMapping("/common") public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @@ -31,13 +35,15 @@ public class CommonController @Autowired private ServerConfig serverConfig; + private static final String FILE_DELIMETER = ","; + /** * 通用下载请求 * * @param fileName 文件名称 * @param delete 是否删除 */ - @GetMapping("common/download") + @GetMapping("/download") public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { try @@ -64,9 +70,9 @@ public class CommonController } /** - * 通用上传请求 + * 通用上传请求(单个) */ - @PostMapping("/common/upload") + @PostMapping("/upload") public AjaxResult uploadFile(MultipartFile file) throws Exception { try @@ -77,8 +83,47 @@ public class CommonController String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); - ajax.put("fileName", fileName); ajax.put("url", url); + ajax.put("fileName", fileName); + ajax.put("newFileName", FileUtils.getName(fileName)); + ajax.put("originalFilename", file.getOriginalFilename()); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 通用上传请求(多个) + */ + @PostMapping("/uploads") + public AjaxResult uploadFiles(List files) throws Exception + { + try + { + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + List urls = new ArrayList(); + List fileNames = new ArrayList(); + List newFileNames = new ArrayList(); + List originalFilenames = new ArrayList(); + for (MultipartFile file : files) + { + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + String url = serverConfig.getUrl() + fileName; + urls.add(url); + fileNames.add(fileName); + newFileNames.add(FileUtils.getName(fileName)); + originalFilenames.add(file.getOriginalFilename()); + } + AjaxResult ajax = AjaxResult.success(); + ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); + ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); + ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); + ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); return ajax; } catch (Exception e) @@ -90,7 +135,7 @@ public class CommonController /** * 本地资源通用下载 */ - @GetMapping("/common/download/resource") + @GetMapping("/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index dd1bcc46f..69c7cc452 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -256,4 +256,22 @@ public class FileUtils } return strFileExtendName; } + + /** + * 获取名称 + * + * @param fileName 路径名称 + * @return 没有文件路径的名称 + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index ec2e0b88c..6712a721e 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -125,10 +125,7 @@ public class ScheduleUtils int count = StringUtils.countMatches(packageName, "."); if (count > 1) { - if (!StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR)) - { - return false; - } + return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR); } return true; } diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index 978576f8f..bf04c5be7 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -1,6 +1,7 @@ Date: Fri, 25 Feb 2022 09:47:57 +0800 Subject: [PATCH 25/38] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0minio=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=20=E5=85=B3=E4=BA=8Ehttps=E7=9B=B8=E5=85=B3=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/docker/docker-compose.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index 50ae4a240..a7c1acb8b 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -89,12 +89,14 @@ services: MINIO_ACCESS_KEY: ruoyi # 管理后台密码,最小8个字符 MINIO_SECRET_KEY: ruoyi123 + # https需要指定域名 + MINIO_SERVER_URL: "" volumes: # 映射当前目录下的data目录至容器内/data目录 - /docker/minio/data:/data # 映射配置目录 - /docker/minio/config:/root/.minio/ - command: server --console-address ':9001' /data # 指定容器中的目录 /data + command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data privileged: true restart: always networks: From 158e883e4707253e2b59c8817243b1db6947cade Mon Sep 17 00:00:00 2001 From: xueye Date: Fri, 25 Feb 2022 10:40:29 +0800 Subject: [PATCH 26/38] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8B=E8=BD=BD=E8=B7=A8=E5=9F=9F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/file/FileUtils.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index 69c7cc452..6915a53a5 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -196,7 +196,6 @@ public class FileUtils * * @param response 响应对象 * @param realFileName 真实文件名 - * @return */ public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { @@ -210,7 +209,6 @@ public class FileUtils .append("utf-8''") .append(percentEncodedFileName); - response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); response.setHeader("Content-disposition", contentDispositionValue.toString()); response.setHeader("download-filename", percentEncodedFileName); From 927b05713a25340f3ba3a58bdd42ca2129060c4a Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 25 Feb 2022 11:51:29 +0800 Subject: [PATCH 27/38] =?UTF-8?q?=E7=BB=84=E4=BB=B6fileUpload=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E6=96=87=E4=BB=B6=E5=90=8C=E6=97=B6=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/StringUtils.java | 49 +++++++++++ .../common/utils/file/FileUploadUtils.java | 5 +- .../java/com/ruoyi/common/utils/uuid/Seq.java | 86 +++++++++++++++++++ ruoyi-ui/src/components/FileUpload/index.vue | 29 +++++-- ruoyi-ui/src/components/ImageUpload/index.vue | 23 ++--- ruoyi-ui/src/views/system/user/index.vue | 2 +- 6 files changed, 166 insertions(+), 28 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index 8df561779..676511784 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -531,4 +531,53 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return (T) obj; } + + /** + * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 + * + * @param num 数字对象 + * @param size 字符串指定长度 + * @return 返回数字的字符串格式,该字符串为指定长度。 + */ + public static final String padl(final Number num, final int size) + { + return padl(num.toString(), size, '0'); + } + + /** + * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 + * + * @param s 原始字符串 + * @param size 字符串指定长度 + * @param c 用于补齐的字符 + * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 + */ + public static final String padl(final String s, final int size, final char c) + { + final StringBuilder sb = new StringBuilder(size); + if (s != null) + { + final int len = s.length(); + if (s.length() <= size) + { + for (int i = size - len; i > 0; i--) + { + sb.append(c); + } + sb.append(s); + } + else + { + return s.substring(len - size, len); + } + } + else + { + for (int i = size; i > 0; i--) + { + sb.append(c); + } + } + return sb.toString(); + } } \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 1a89dd9c8..cc3fd2684 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -12,7 +12,7 @@ import com.ruoyi.common.exception.file.FileSizeLimitExceededException; import com.ruoyi.common.exception.file.InvalidExtensionException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.utils.uuid.Seq; /** * 文件上传工具类 @@ -121,7 +121,8 @@ public class FileUploadUtils */ public static final String extractFilename(MultipartFile file) { - return DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + getExtension(file); + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file)); } public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java new file mode 100644 index 000000000..fd88245c4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java @@ -0,0 +1,86 @@ +package com.ruoyi.common.utils.uuid; + +import java.util.concurrent.atomic.AtomicInteger; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; + +/** + * @author ruoyi 序列生成类 + */ +public class Seq +{ + // 通用序列类型 + public static final String commSeqType = "COMMON"; + + // 上传序列类型 + public static final String uploadSeqType = "UPLOAD"; + + // 通用接口序列数 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 上传接口序列数 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 机器标识 + private static String machineCode = "A"; + + /** + * 获取通用序列号 + * + * @return 序列值 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 + * + * @return 序列值 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 + * + * @param atomicInt 序列数 + * @param length 数值长度 + * @return 序列值 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 + * + * @return 序列值 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 先取值再+1 + int value = atomicInt.getAndIncrement(); + + // 如果更新后值>=10 的 (length)幂次方则重置为1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 转字符串,用0左补齐 + return StringUtils.padl(value, length); + } +} diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index ea15a5730..aa2296b93 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -1,6 +1,7 @@ -1) { - return name.slice(name.lastIndexOf("/") + 1).toLowerCase(); + return name.slice(name.lastIndexOf("/") + 1); } else { return ""; } diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index bf04c5be7..71172c1f4 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -133,7 +133,7 @@ export default { this.uploadList = []; this.number = 0; this.$emit("input", this.listToString(this.fileList)); - this.loading.close(); + this.$modal.closeLoading(); } }, // 上传前loading加载 @@ -154,36 +154,27 @@ export default { } if (!isImg) { - this.$message.error( - `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!` - ); + this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`); return false; } if (this.fileSize) { const isLt = file.size / 1024 / 1024 < this.fileSize; if (!isLt) { - this.$message.error(`上传头像图片大小不能超过 ${this.fileSize} MB!`); + this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`); return false; } } - this.loading = this.$loading({ - lock: true, - text: "上传中", - background: "rgba(0, 0, 0, 0.7)", - }); + this.$modal.loading("正在上传图片,请稍候..."); this.number++; }, // 文件个数超出 handleExceed() { - this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`); + this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`); }, // 上传失败 handleUploadError() { - this.$message({ - type: "error", - message: "上传失败", - }); - this.loading.close(); + this.$modal.msgError("上传图片失败,请重试"); + this.$modal.closeLoading(); }, // 预览 handlePictureCardPreview(file) { diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue index ea1fd4599..58de56f06 100644 --- a/ruoyi-ui/src/views/system/user/index.vue +++ b/ruoyi-ui/src/views/system/user/index.vue @@ -443,7 +443,7 @@ export default { email: [ { type: "email", - message: "'请输入正确的邮箱地址", + message: "请输入正确的邮箱地址", trigger: ["blur", "change"] } ], From 6751b97db9a892cdc91288e1a90dabfa3870b52f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 25 Feb 2022 18:34:37 +0800 Subject: [PATCH 28/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/vm/java/serviceImpl.java.vm | 8 ++++---- .../src/main/resources/vm/vue/index-tree.vue.vm | 2 +- ruoyi-ui/src/views/system/menu/index.vue | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index 83a8f4272..005c84a9f 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -48,7 +48,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { /** * 查询${functionName}列表 * - * @param ${className} ${functionName} + * @param bo ${functionName} * @return ${functionName} */ @Override @@ -62,7 +62,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { /** * 查询${functionName}列表 * - * @param ${className} ${functionName} + * @param bo ${functionName} * @return ${functionName} */ @Override @@ -101,7 +101,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { /** * 新增${functionName} * - * @param ${className} ${functionName} + * @param bo ${functionName} * @return 结果 */ @Override @@ -119,7 +119,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { /** * 修改${functionName} * - * @param ${className} ${functionName} + * @param bo ${functionName} * @return 结果 */ @Override diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm index 37928941d..14c4a14c0 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm @@ -306,7 +306,7 @@ export default { queryParams: { #foreach ($column in $columns) #if($column.query) - $column.javaField: null#if($foreach.count != $columns.size()),#end + $column.javaField: undefined#if($foreach.count != $columns.size()),#end #end #end }, diff --git a/ruoyi-ui/src/views/system/menu/index.vue b/ruoyi-ui/src/views/system/menu/index.vue index 5c1f85a6f..1b6f39de6 100644 --- a/ruoyi-ui/src/views/system/menu/index.vue +++ b/ruoyi-ui/src/views/system/menu/index.vue @@ -78,7 +78,7 @@ - - + 权限字符 From 96edba7eecf5d193a086185e92ac1b7eccb30a05 Mon Sep 17 00:00:00 2001 From: fuzui <73400@163.com> Date: Sat, 26 Feb 2022 03:20:50 +0800 Subject: [PATCH 29/38] =?UTF-8?q?fix:=20=E6=9C=8D=E5=8A=A1=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E4=B8=AD=E8=BF=90=E8=A1=8C=E5=8F=82=E6=95=B0=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=9D=A1=E4=BB=B6=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/monitor/server/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue index 9522b8d21..4b16f0dee 100644 --- a/ruoyi-ui/src/views/monitor/server/index.vue +++ b/ruoyi-ui/src/views/monitor/server/index.vue @@ -130,7 +130,7 @@ 运行参数 - {{ server.jvm.inputArgs }} + {{ server.jvm.inputArgs }} From 93707474792c96834fd985889a3b497ccdc35670 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 26 Feb 2022 09:48:17 +0800 Subject: [PATCH 30/38] =?UTF-8?q?=E5=8D=87=E7=BA=A7spring-boot=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC2.5.10?= 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 ddc287527..b4931dbc5 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ org.springframework.boot spring-boot-dependencies - 2.5.9 + 2.5.10 pom import From ac030b727559d3521689c27d99e410fb6462515a Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 26 Feb 2022 09:54:52 +0800 Subject: [PATCH 31/38] =?UTF-8?q?=E4=BC=98=E5=8C=96Excel=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E4=B8=8D=E5=90=8C=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/DateUtils.java | 36 ++++++++++++++- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 45 ++++++++++++++++--- 2 files changed, 73 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 8ff95f1b7..a2cb78d99 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -3,6 +3,11 @@ package com.ruoyi.common.utils; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; @@ -22,7 +27,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; - + private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", @@ -121,7 +126,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils return null; } } - + /** * 获取服务器启动时间 */ @@ -131,6 +136,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils return new Date(time); } + /** + * 计算相差天数 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + /** * 计算两个时间差 */ @@ -152,4 +165,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils // long sec = diff % nd % nh % nm / ns; return day + "天" + hour + "小时" + min + "分钟"; } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index f852f9514..7c4510a55 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -9,6 +9,8 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -132,7 +134,7 @@ public class ExcelUtil * 当前行号 */ private int rownum; - + /** * 标题 */ @@ -314,7 +316,7 @@ public class ExcelUtil String dateFormat = field.getAnnotation(Excel.class).dateFormat(); if (StringUtils.isNotEmpty(dateFormat)) { - val = DateUtils.parseDateToStr(dateFormat, (Date) val); + val = parseDateToStr(dateFormat, (Date) val); } else { @@ -409,7 +411,7 @@ public class ExcelUtil { return exportExcel(list, sheetName, StringUtils.EMPTY); } - + /** * 对list数据源将其里面的数据导入到excel表单 * @@ -431,7 +433,6 @@ public class ExcelUtil * @param list 导出数据集合 * @param sheetName 工作表的名称 * @return 结果 - * @throws IOException */ public void exportExcel(HttpServletResponse response, List list, String sheetName) { @@ -446,7 +447,6 @@ public class ExcelUtil * @param sheetName 工作表的名称 * @param title 标题 * @return 结果 - * @throws IOException */ public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) { @@ -823,7 +823,7 @@ public class ExcelUtil String dictType = attr.dictType(); if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) { - cell.setCellValue(DateUtils.parseDateToStr(dateFormat, (Date) value)); + cell.setCellValue(parseDateToStr(dateFormat, (Date) value)); } else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) { @@ -1396,4 +1396,37 @@ public class ExcelUtil } return sheetIndexPicMap; } + + /** + * 格式化不同类型的日期对象 + * + * @param dateFormat 日期格式 + * @param val 被格式化的日期对象 + * @return 格式化后的日期字符 + */ + public String parseDateToStr(String dateFormat, Object val) + { + if (val == null) + { + return ""; + } + String str; + if (val instanceof Date) + { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else if (val instanceof LocalDateTime) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } + else if (val instanceof LocalDate) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } + else + { + str = val.toString(); + } + return str; + } } From e6014dd0e904a7bd7049116069bdb48109c42860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 27 Feb 2022 22:09:53 +0800 Subject: [PATCH 32/38] =?UTF-8?q?fix=20=E6=81=A2=E5=A4=8D=E8=AF=AF?= =?UTF-8?q?=E5=88=A0=20@Async=20=E6=B3=A8=E8=A7=A3=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E9=85=8D=E7=BD=AE=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/framework/config/AsyncConfig.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java new file mode 100644 index 000000000..47898e3fa --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/AsyncConfig.java @@ -0,0 +1,54 @@ +package com.ruoyi.framework.config; + +import cn.hutool.core.util.ArrayUtil; +import com.ruoyi.common.exception.ServiceException; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurerSupport; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.util.Arrays; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledExecutorService; + +/** + * 异步配置 + * + * @author Lion Li + */ +@EnableAsync +@Configuration +public class AsyncConfig extends AsyncConfigurerSupport { + + @Autowired + @Qualifier("scheduledExecutorService") + private ScheduledExecutorService scheduledExecutorService; + + /** + * 自定义 @Async 注解使用系统线程池 + */ + @Override + public Executor getAsyncExecutor() { + return scheduledExecutorService; + } + + /** + * 异步执行异常处理 + */ + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (throwable, method, objects) -> { + throwable.printStackTrace(); + StringBuilder sb = new StringBuilder(); + sb.append("Exception message - ").append(throwable.getMessage()) + .append(", Method name - ").append(method.getName()); + if (ArrayUtil.isNotEmpty(objects)) { + sb.append(", Parameter value - ").append(Arrays.toString(objects)); + } + throw new ServiceException(sb.toString()); + }; + } + +} From 81ab86103655d3272c08bdd7ca335305407fc0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 28 Feb 2022 10:56:59 +0800 Subject: [PATCH 33/38] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E5=9F=BA=E4=BA=8E=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E7=94=9F=E6=88=90=20=E8=B7=AF=E5=BE=84=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/generator/domain/GenTable.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java index 965c9f34c..f8bbc474c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -1,8 +1,6 @@ package com.ruoyi.generator.domain; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.utils.StringUtils; @@ -102,6 +100,7 @@ public class GenTable extends BaseEntity { /** * 生成路径(不填默认项目路径) */ + @TableField(updateStrategy = FieldStrategy.NOT_EMPTY) private String genPath; /** From 147eb7a9e578a377c794280fa6a8ee572aae7109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 28 Feb 2022 12:10:55 +0800 Subject: [PATCH 34/38] =?UTF-8?q?update=20=E5=9B=BE=E7=89=87=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=20=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=B9=B6=E5=8F=91=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysOssController.java | 2 - ruoyi-ui/src/components/FileUpload/index.vue | 27 ++++++++---- ruoyi-ui/src/components/ImageUpload/index.vue | 42 +++++++++---------- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java index 55fb73b9a..4342716f7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpException; import cn.hutool.http.HttpUtil; import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; @@ -70,7 +69,6 @@ public class SysOssController extends BaseController { }) @SaCheckPermission("system:oss:upload") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) - @RepeatSubmit @PostMapping("/upload") public R> upload(@RequestPart("file") MultipartFile file) { if (ObjectUtil.isNull(file)) { diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index 46da967dc..e46445ee2 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -1,6 +1,7 @@ -1) { - return name.slice(name.lastIndexOf("/") + 1).toLowerCase(); + return name.slice(name.lastIndexOf("/") + 1); } else { return ""; } diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index fcf010dfd..11573dd88 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -1,6 +1,7 @@ - + 请上传 @@ -70,6 +71,8 @@ export default { }, data() { return { + number: 0, + uploadList: [], dialogImageUrl: "", dialogVisible: false, hideUpload: false, @@ -121,12 +124,17 @@ export default { // 上传成功回调 handleUploadSuccess(res) { if (res.code == 200) { - this.fileList.push({ name: res.data.fileName, url: res.data.url }); - this.$emit("input", this.listToString(this.fileList)); - this.loading.close(); + this.uploadList.push({ name: res.data.fileName, url: res.data.url }); + if (this.uploadList.length === this.number) { + this.fileList = this.fileList.concat(this.uploadList); + this.uploadList = []; + this.number = 0; + this.$emit("input", this.listToString(this.fileList)); + this.$modal.closeLoading(); + } } else { - this.$message.error(res.msg); - this.loading.close(); + this.$modal.msgError(res.msg); + this.$modal.closeLoading(); } }, // 上传前loading加载 @@ -147,35 +155,27 @@ export default { } if (!isImg) { - this.$message.error( - `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!` - ); + this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`); return false; } if (this.fileSize) { const isLt = file.size / 1024 / 1024 < this.fileSize; if (!isLt) { - this.$message.error(`上传头像图片大小不能超过 ${this.fileSize} MB!`); + this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`); return false; } } - this.loading = this.$loading({ - lock: true, - text: "上传中", - background: "rgba(0, 0, 0, 0.7)", - }); + this.$modal.loading("正在上传图片,请稍候..."); + this.number++; }, // 文件个数超出 handleExceed() { - this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`); + this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`); }, // 上传失败 handleUploadError(res) { - this.$message({ - type: "error", - message: "上传失败", - }); - this.loading.close(); + this.$modal.msgError("上传图片失败,请重试"); + this.$modal.closeLoading(); }, // 预览 handlePictureCardPreview(file) { From eefdba947ce3a72f621ce59e5050d819f362e6ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 28 Feb 2022 12:17:40 +0800 Subject: [PATCH 35/38] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/utils/uuid/Seq.java | 86 ------------------- 1 file changed, 86 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java deleted file mode 100644 index fd88245c4..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.ruoyi.common.utils.uuid; - -import java.util.concurrent.atomic.AtomicInteger; -import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.StringUtils; - -/** - * @author ruoyi 序列生成类 - */ -public class Seq -{ - // 通用序列类型 - public static final String commSeqType = "COMMON"; - - // 上传序列类型 - public static final String uploadSeqType = "UPLOAD"; - - // 通用接口序列数 - private static AtomicInteger commSeq = new AtomicInteger(1); - - // 上传接口序列数 - private static AtomicInteger uploadSeq = new AtomicInteger(1); - - // 机器标识 - private static String machineCode = "A"; - - /** - * 获取通用序列号 - * - * @return 序列值 - */ - public static String getId() - { - return getId(commSeqType); - } - - /** - * 默认16位序列号 yyMMddHHmmss + 一位机器标识 + 3长度循环递增字符串 - * - * @return 序列值 - */ - public static String getId(String type) - { - AtomicInteger atomicInt = commSeq; - if (uploadSeqType.equals(type)) - { - atomicInt = uploadSeq; - } - return getId(atomicInt, 3); - } - - /** - * 通用接口序列号 yyMMddHHmmss + 一位机器标识 + length长度循环递增字符串 - * - * @param atomicInt 序列数 - * @param length 数值长度 - * @return 序列值 - */ - public static String getId(AtomicInteger atomicInt, int length) - { - String result = DateUtils.dateTimeNow(); - result += machineCode; - result += getSeq(atomicInt, length); - return result; - } - - /** - * 序列循环递增字符串[1, 10 的 (length)幂次方), 用0左补齐length位数 - * - * @return 序列值 - */ - private synchronized static String getSeq(AtomicInteger atomicInt, int length) - { - // 先取值再+1 - int value = atomicInt.getAndIncrement(); - - // 如果更新后值>=10 的 (length)幂次方则重置为1 - int maxSeq = (int) Math.pow(10, length); - if (atomicInt.get() >= maxSeq) - { - atomicInt.set(1); - } - // 转字符串,用0左补齐 - return StringUtils.padl(value, length); - } -} From 2190d87dc970308e1dde614f54eae47f5de61fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 28 Feb 2022 13:03:55 +0800 Subject: [PATCH 36/38] =?UTF-8?q?update=20=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E8=A1=A5=E5=85=A8=E6=BC=8F=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/components/FileUpload/index.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index e46445ee2..5f1e23652 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -162,8 +162,8 @@ export default { this.$modal.closeLoading(); } } else { - this.$message.error(res.msg); - this.loading.close(); + this.$modal.msgError(res.msg); + this.$modal.closeLoading(); } }, // 删除文件 From c23c98654327b43ee2b9fb1f602df730ba00bd4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 28 Feb 2022 13:27:16 +0800 Subject: [PATCH 37/38] update springboot 2.6.3 => 2.6.4 update hutool 5.7.20 => 5.7.21 update qiniu 7.9.2 => 7.9.3 update minio 8.3.5 => 8.3.7 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 3de1dae0a..702d01a3b 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ 4.0.0 - 2.6.3 + 2.6.4 UTF-8 UTF-8 1.8 @@ -29,7 +29,7 @@ 1.29.0 3.5.1 3.9.1 - 5.7.20 + 5.7.21 4.9.2 2.6.2 3.16.8 @@ -42,10 +42,10 @@ 3.0.1 - 7.9.2 + 7.9.3 3.14.0 5.6.68 - 8.3.5 + 8.3.7 localhost From 42df37bb21c42e00aac5be6478cf3bec5d0ca54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 1 Mar 2022 10:08:09 +0800 Subject: [PATCH 38/38] =?UTF-8?q?=E5=8F=91=E5=B8=83=204.0.1=20=E5=A4=A7?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=204.X=20=E4=B9=8B=E5=90=8E=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BF=AE=E5=A4=8D=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- pom.xml | 4 ++-- ruoyi-admin/pom.xml | 2 +- ruoyi-common/pom.xml | 2 +- ruoyi-demo/pom.xml | 2 +- ruoyi-extend/pom.xml | 2 +- ruoyi-extend/ruoyi-monitor-admin/pom.xml | 2 +- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 2 +- ruoyi-framework/pom.xml | 2 +- ruoyi-generator/pom.xml | 2 +- ruoyi-job/pom.xml | 2 +- ruoyi-oss/pom.xml | 2 +- ruoyi-system/pom.xml | 2 +- ruoyi-ui/package.json | 2 +- ruoyi-ui/src/views/index.vue | 25 +++++++++++++++++++++++- script/docker/docker-compose.yml | 8 ++++---- 16 files changed, 43 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 7256e8685..d6a2409a5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE) [](https://www.jetbrains.com/?from=RuoYi-Vue-Plus) -[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) +[](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) []() []() []() diff --git a/pom.xml b/pom.xml index 702d01a3b..b0c52d5fe 100644 --- a/pom.xml +++ b/pom.xml @@ -6,14 +6,14 @@ com.ruoyi ruoyi-vue-plus - 4.0.0 + 4.0.1 RuoYi-Vue-Plus https://gitee.com/JavaLionLi/RuoYi-Vue-Plus RuoYi-Vue-Plus后台管理系统 - 4.0.0 + 4.0.1 2.6.4 UTF-8 UTF-8 diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index ea4183bf4..1c8c759e9 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 jar diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 3dd32a980..81a983f99 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-demo/pom.xml b/ruoyi-demo/pom.xml index 1c05e2c5f..329b4e7ee 100644 --- a/ruoyi-demo/pom.xml +++ b/ruoyi-demo/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-extend/pom.xml b/ruoyi-extend/pom.xml index e9f343c55..3b80b15ca 100644 --- a/ruoyi-extend/pom.xml +++ b/ruoyi-extend/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 ruoyi-extend diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml index 6159ccc39..e811fd3be 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml +++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml @@ -5,7 +5,7 @@ ruoyi-extend com.ruoyi - 4.0.0 + 4.0.1 4.0.0 jar diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index f444c3123..65125b905 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ ruoyi-extend com.ruoyi - 4.0.0 + 4.0.1 ruoyi-xxl-job-admin jar diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index e199496c6..9f28913f9 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml index 848e1ecae..f44a9e5f1 100644 --- a/ruoyi-generator/pom.xml +++ b/ruoyi-generator/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-job/pom.xml b/ruoyi-job/pom.xml index 42c4c27f4..995db6629 100644 --- a/ruoyi-job/pom.xml +++ b/ruoyi-job/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 jar diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml index 0fb09a850..e54cc18cc 100644 --- a/ruoyi-oss/pom.xml +++ b/ruoyi-oss/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index 106245e85..142063cea 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 4.0.0 + 4.0.1 4.0.0 diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 3fe16b602..8b36c0255 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -1,6 +1,6 @@ { "name": "ruoyi-vue-plus", - "version": "4.0.0", + "version": "4.0.1", "description": "RuoYi-Vue-Plus后台管理系统", "author": "LionLi", "license": "MIT", diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 7936eea51..f630b45fd 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -101,6 +101,29 @@ 更新日志 + + + update 图片上传 文件上传 支持并发上传 + update 组件ImageUpload支持多图同时选择上传 + udpate 组件fileUpload支持多文件同时选择上传 + update springboot 2.6.3 => 2.6.4 + update hutool 5.7.20 => 5.7.21 + update qiniu 7.9.2 => 7.9.3 + update minio 8.3.5 => 8.3.7 + update 优化 R 默认返回 msg + update 增加 用户注册 用户类型默认值 + update 增加用户登出日志 + update 更新 多用户多设备的注释说明 + update 优化 是否为管理员的判断 + update 优化 页面若未匹配到字典标签则返回原字典值 + update 调整用户登录 将日志调整到最后 防止获取不到用户警告 + update 优化随机数生成方式 避免容易生成两个相同随机数的问题 + fix 修复代码生成 基于路径生成 路径为空问题 + fix 恢复误删 @Async 注解线程池配置类 + fix 修复 minio 适配 https 导致的问题 + fix 修复分页组件请求两次问题 + + [重大更新] 重写项目整体结构 数据处理下沉至Mapper符合MVC规范 减少循环依赖 @@ -708,7 +731,7 @@ export default { data() { return { // 版本号 - version: "4.0.0", + version: "4.0.1", }; }, methods: { diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index a7c1acb8b..920441595 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -104,7 +104,7 @@ services: ipv4_address: 172.30.0.54 ruoyi-server1: - image: ruoyi/ruoyi-server:4.0.0 + image: ruoyi/ruoyi-server:4.0.1 container_name: ruoyi-server1 environment: # 时区上海 @@ -119,7 +119,7 @@ services: ipv4_address: 172.30.0.60 ruoyi-server2: - image: "ruoyi/ruoyi-server:4.0.0" + image: "ruoyi/ruoyi-server:4.0.1" container_name: ruoyi-server2 environment: # 时区上海 @@ -134,7 +134,7 @@ services: ipv4_address: 172.30.0.61 ruoyi-monitor-admin: - image: ruoyi/ruoyi-monitor-admin:4.0.0 + image: ruoyi/ruoyi-monitor-admin:4.0.1 container_name: ruoyi-monitor-admin environment: # 时区上海 @@ -149,7 +149,7 @@ services: ipv4_address: 172.30.0.90 ruoyi-xxl-job-admin: - image: ruoyi/ruoyi-xxl-job-admin:4.0.0 + image: ruoyi/ruoyi-xxl-job-admin:4.0.1 container_name: ruoyi-xxl-job-admin environment: # 时区上海