From 4e6057d01efc7811f4249800fa3ebd8766a17150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=AD=81=E5=93=B2?= <472764879@qq.com> Date: Fri, 20 Aug 2021 08:52:13 +0000 Subject: [PATCH] =?UTF-8?q?!1=203.00=20*=20update=20=E4=BC=98=E5=8C=96=20O?= =?UTF-8?q?SS=20=E6=A8=A1=E5=9D=97=E4=B8=8E=E4=B8=8A=E4=BC=A0=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=20=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=20*=20fix=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20OSS=E9=85=8D=E7=BD=AE=E6=B8=85=E7=A9=BA?= =?UTF-8?q?=E8=A2=AB=E8=BF=87=E6=BB=A4=E9=97=AE=E9=A2=98=20*=20fix=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=96=B0=E7=89=88=E6=9C=AC=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=20=E6=A0=87=E7=AD=BE=E9=94=99=E8=AF=AF=20*=20fix=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=AF=8C=E6=96=87=E6=9C=AC=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20*=20fix=20=E4=BF=AE=E5=A4=8D=20minio=20=E6=97=A0=20perfix=20?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20*=20=E5=8F=91=E5=B8=83=20v3.0.0=20*=20upda?= =?UTF-8?q?te=20=E9=99=8D=E7=BA=A7=20minio=20=E4=BE=9D=E8=B5=96=E7=89=88?= =?UTF-8?q?=E6=9C=AC=20*=20update=20service=20=E7=BB=9F=E4=B8=80=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20ServicePlusImpl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 57 +- docker/docker-compose.yml | 31 +- pom.xml | 42 +- ruoyi-extend/pom.xml | 2 +- ruoyi-extend/ruoyi-monitor-admin/pom.xml | 2 +- ruoyi-ui/bin/run-web.bat | 4 +- ruoyi-ui/package.json | 4 +- ruoyi-ui/src/api/demo/demo.js | 8 - ruoyi-ui/src/api/demo/tree.js | 9 - ruoyi-ui/src/api/login.js | 14 +- ruoyi-ui/src/api/monitor/jobLog.js | 9 - ruoyi-ui/src/api/monitor/logininfor.js | 9 - ruoyi-ui/src/api/monitor/operlog.js | 9 - ruoyi-ui/src/api/system/config.js | 8 - ruoyi-ui/src/api/system/dict/data.js | 9 - ruoyi-ui/src/api/system/dict/type.js | 9 - ruoyi-ui/src/api/system/oss.js | 11 + ruoyi-ui/src/api/system/ossConfig.js | 58 + ruoyi-ui/src/api/system/role.js | 10 - ruoyi-ui/src/api/system/user.js | 17 - ruoyi-ui/src/components/Breadcrumb/index.vue | 2 +- ruoyi-ui/src/components/Editor/index.vue | 4 +- ruoyi-ui/src/components/FileUpload/index.vue | 17 +- ruoyi-ui/src/components/ImageUpload/index.vue | 32 +- ruoyi-ui/src/main.js | 3 +- ruoyi-ui/src/router/index.js | 22 +- ruoyi-ui/src/store/modules/user.js | 2 +- ruoyi-ui/src/utils/download.js | 91 ++ ruoyi-ui/src/utils/request.js | 10 +- ruoyi-ui/src/utils/ruoyi.js | 24 +- ruoyi-ui/src/views/demo/demo/index.vue | 16 +- ruoyi-ui/src/views/demo/tree/index.vue | 2 +- ruoyi-ui/src/views/index.vue | 50 +- ruoyi-ui/src/views/login.vue | 12 +- ruoyi-ui/src/views/monitor/job/index.vue | 16 +- ruoyi-ui/src/views/monitor/job/log.vue | 20 +- .../src/views/monitor/logininfor/index.vue | 16 +- ruoyi-ui/src/views/monitor/operlog/index.vue | 16 +- ruoyi-ui/src/views/register.vue | 208 +++ ruoyi-ui/src/views/system/config/index.vue | 16 +- ruoyi-ui/src/views/system/dict/data.vue | 16 +- ruoyi-ui/src/views/system/dict/index.vue | 16 +- ruoyi-ui/src/views/system/menu/index.vue | 2 +- ruoyi-ui/src/views/system/oss/config.vue | 414 ++++++ ruoyi-ui/src/views/system/oss/index.vue | 75 +- ruoyi-ui/src/views/system/post/index.vue | 16 +- ruoyi-ui/src/views/system/role/index.vue | 16 +- ruoyi-ui/src/views/system/role/selectUser.vue | 2 +- ruoyi-ui/src/views/system/user/index.vue | 23 +- .../views/system/user/profile/userAvatar.vue | 9 +- ruoyi-ui/src/views/tool/gen/index.vue | 2 +- ruoyi/Dockerfile | 1 + ruoyi/pom.xml | 17 +- .../com/ruoyi/common/annotation/Excel.java | 165 --- .../common/annotation/ExcelDictFormat.java | 30 + .../com/ruoyi/common/annotation/Excels.java | 18 - .../ruoyi/common/annotation/RateLimiter.java | 40 + .../ruoyi/common/annotation/RepeatSubmit.java | 14 +- .../com/ruoyi/common/config/RuoYiConfig.java | 34 +- .../com/ruoyi/common/constant/Constants.java | 23 +- .../ruoyi/common/constant/UserConstants.java | 12 + .../common/convert/ExcelDictConvert.java | 69 + .../core/controller/BaseController.java | 38 +- .../ruoyi/common/core/domain/BaseEntity.java | 56 +- .../ruoyi/common/core/domain/TreeEntity.java | 48 +- .../common/core/domain/entity/SysDept.java | 146 +- .../core/domain/entity/SysDictData.java | 158 ++- .../core/domain/entity/SysDictType.java | 108 +- .../common/core/domain/entity/SysMenu.java | 169 ++- .../common/core/domain/entity/SysRole.java | 190 +-- .../common/core/domain/entity/SysUser.java | 240 ++-- .../common/core/domain/model/LoginUser.java | 20 +- .../core/domain/model/RegisterBody.java | 11 + .../mybatisplus/core/ServicePlusImpl.java | 4 + .../core/mybatisplus/methods/InsertAll.java | 15 +- .../com/ruoyi/common/enums/LimitType.java | 20 + .../common/exception/CustomException.java | 43 - .../common/exception/GlobalException.java | 58 + .../common/exception/ServiceException.java | 73 + .../exception/{ => base}/BaseException.java | 8 +- .../common/exception/file/FileException.java | 4 +- .../common/exception/user/UserException.java | 4 +- .../ruoyi/common/filter/RepeatableFilter.java | 6 +- .../com/ruoyi/common/filter/XssFilter.java | 41 +- .../filter/XssHttpServletRequestWrapper.java | 7 +- .../com/ruoyi/common/utils/DictUtils.java | 30 +- .../com/ruoyi/common/utils/JsonUtils.java | 12 +- .../com/ruoyi/common/utils/PageUtils.java | 7 +- .../com/ruoyi/common/utils/SecurityUtils.java | 40 +- .../com/ruoyi/common/utils/ServletUtils.java | 5 +- .../com/ruoyi/common/utils/StringUtils.java | 354 +++++ .../common/utils/file/FileTypeUtils.java | 76 -- .../common/utils/file/FileUploadUtils.java | 239 ---- .../ruoyi/common/utils/file/FileUtils.java | 76 +- .../ruoyi/common/utils/file/ImageUtils.java | 102 -- .../common/utils/file/MimeTypeUtils.java | 59 - .../ruoyi/common/utils/ip/AddressUtils.java | 4 +- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 1184 ++--------------- .../common/utils/reflect/ReflectUtils.java | 17 +- .../com/ruoyi/common/utils/sql/SqlUtil.java | 10 +- .../demo/controller/TestBatchController.java | 11 +- .../demo/controller/TestDemoController.java | 9 +- .../demo/controller/TestI18nController.java | 29 + .../demo/controller/TestTreeController.java | 6 +- .../com/ruoyi/demo/domain/vo/TestDemoVo.java | 23 +- .../com/ruoyi/demo/domain/vo/TestTreeVo.java | 15 +- .../service/impl/TestDemoServiceImpl.java | 8 +- .../service/impl/TestTreeServiceImpl.java | 6 +- .../framework/aspectj/DataScopeAspect.java | 25 +- .../framework/aspectj/DataSourceAspect.java | 4 +- .../ruoyi/framework/aspectj/LogAspect.java | 11 +- .../framework/aspectj/RateLimiterAspect.java | 116 ++ .../captcha/UnsignedMathGenerator.java | 8 +- .../framework/config/ApplicationConfig.java | 12 +- .../ruoyi/framework/config/AsyncConfig.java | 4 +- .../ruoyi/framework/config/FilterConfig.java | 7 +- .../ruoyi/framework/config/I18nConfig.java | 48 + .../ruoyi/framework/config/JacksonConfig.java | 8 + .../ruoyi/framework/config/RedisConfig.java | 32 +- .../framework/config/ResourcesConfig.java | 6 +- .../framework/config/SecurityConfig.java | 10 +- .../properties/RepeatSubmitProperties.java | 22 + .../interceptor/RepeatSubmitInterceptor.java | 66 +- .../impl/SameUrlDataInterceptor.java | 164 +-- .../jackson/BigNumberSerializer.java | 42 + .../CreateAndUpdateMetaObjectHandler.java | 40 +- .../filter/JwtAuthenticationTokenFilter.java | 6 +- .../handle/AuthenticationEntryPointImpl.java | 4 +- .../handle/LogoutSuccessHandlerImpl.java | 4 +- .../web/exception/GlobalExceptionHandler.java | 87 +- .../framework/web/service/AsyncService.java | 3 +- .../web/service/PermissionService.java | 32 +- .../web/service/SysLoginService.java | 4 +- .../web/service/SysRegisterService.java | 117 ++ .../framework/web/service/TokenService.java | 26 +- .../web/service/UserDetailsServiceImpl.java | 22 +- .../com/ruoyi/generator/domain/GenTable.java | 14 +- .../generator/domain/GenTableColumn.java | 28 +- .../service/GenTableColumnServiceImpl.java | 4 +- .../service/GenTableServiceImpl.java | 73 +- .../com/ruoyi/generator/util/GenUtils.java | 38 +- .../ruoyi/generator/util/VelocityUtils.java | 70 +- .../com/ruoyi/oss/constant/CloudConstant.java | 22 +- .../ruoyi/oss/enumd/CloudServiceEnumd.java | 28 +- .../com/ruoyi/oss/factory/OssFactory.java | 64 +- .../properties/CloudStorageProperties.java | 184 +-- ...ervice.java => ICloudStorageStrategy.java} | 6 +- ...java => AbstractCloudStorageStrategy.java} | 19 +- ...l.java => AliyunCloudStorageStrategy.java} | 41 +- ...pl.java => MinioCloudStorageStrategy.java} | 40 +- ...l.java => QcloudCloudStorageStrategy.java} | 43 +- ...pl.java => QiniuCloudStorageStrategy.java} | 50 +- .../quartz/controller/SysJobController.java | 45 +- .../controller/SysJobLogController.java | 10 +- .../java/com/ruoyi/quartz/domain/SysJob.java | 35 +- .../com/ruoyi/quartz/domain/SysJobLog.java | 26 +- .../service/impl/SysJobLogServiceImpl.java | 31 +- .../service/impl/SysJobServiceImpl.java | 22 +- .../java/com/ruoyi/quartz/task/RyTask.java | 6 +- .../ruoyi/quartz/util/AbstractQuartzJob.java | 7 +- .../com/ruoyi/quartz/util/JobInvokeUtil.java | 47 +- .../com/ruoyi/system/domain/SysConfig.java | 21 +- .../ruoyi/system/domain/SysLogininfor.java | 28 +- .../com/ruoyi/system/domain/SysOperLog.java | 44 +- .../com/ruoyi/system/domain/SysOssConfig.java | 111 ++ .../java/com/ruoyi/system/domain/SysPost.java | 21 +- .../system/domain/bo/SysOssConfigBo.java | 130 ++ .../com/ruoyi/system/domain/vo/MetaVo.java | 4 +- .../system/domain/vo/SysOssConfigVo.java | 96 ++ .../system/domain/vo/SysUserExportVo.java | 93 ++ .../system/domain/vo/SysUserImportVo.java | 73 + .../system/mapper/SysOssConfigMapper.java | 15 + .../system/service/ISysOssConfigService.java | 58 + .../ruoyi/system/service/ISysOssService.java | 2 +- .../ruoyi/system/service/ISysUserService.java | 8 + .../service/impl/SysConfigServiceImpl.java | 45 +- .../service/impl/SysDeptServiceImpl.java | 21 +- .../service/impl/SysDictDataServiceImpl.java | 18 +- .../service/impl/SysDictTypeServiceImpl.java | 35 +- .../impl/SysLogininforServiceImpl.java | 27 +- .../service/impl/SysMenuServiceImpl.java | 40 +- .../service/impl/SysNoticeServiceImpl.java | 18 +- .../service/impl/SysOperLogServiceImpl.java | 25 +- .../service/impl/SysOssConfigServiceImpl.java | 180 +++ .../service/impl/SysOssServiceImpl.java | 30 +- .../service/impl/SysPostServiceImpl.java | 31 +- .../service/impl/SysRoleServiceImpl.java | 24 +- .../impl/SysUserOnlineServiceImpl.java | 13 +- .../service/impl/SysUserServiceImpl.java | 49 +- .../controller/common/CaptchaController.java | 6 +- .../controller/common/CommonController.java | 88 -- .../controller/monitor/CacheController.java | 8 +- .../monitor/SysLogininforController.java | 8 +- .../monitor/SysOperlogController.java | 8 +- .../monitor/SysUserOnlineController.java | 17 +- .../system/SysConfigController.java | 11 +- .../controller/system/SysDeptController.java | 13 +- .../system/SysDictDataController.java | 15 +- .../system/SysDictTypeController.java | 11 +- .../controller/system/SysIndexController.java | 4 +- .../controller/system/SysLoginController.java | 7 +- .../controller/system/SysMenuController.java | 28 +- .../system/SysNoticeController.java | 7 +- .../system/SysOssConfigController.java | 108 ++ .../controller/system}/SysOssController.java | 38 +- .../controller/system/SysPostController.java | 33 +- .../system/SysProfileController.java | 16 +- .../system/SysRegisterController.java | 38 + .../controller/system/SysRoleController.java | 17 +- .../controller/system/SysUserController.java | 57 +- ruoyi/src/main/resources/application-dev.yml | 59 +- .../src/main/resources/application-local.yml | 108 ++ ruoyi/src/main/resources/application-prod.yml | 59 +- ruoyi/src/main/resources/application.yml | 29 +- .../main/resources/i18n/messages.properties | 3 +- .../resources/i18n/messages_en_US.properties | 2 +- .../resources/i18n/messages_zh_CN.properties | 3 +- .../mapper/system/SysOssConfigMapper.xml | 27 + ruoyi/src/main/resources/spy.properties | 26 + ruoyi/src/main/resources/vm/java/bo.java.vm | 4 +- .../main/resources/vm/java/controller.java.vm | 13 +- .../resources/vm/java/serviceImpl.java.vm | 4 +- ruoyi/src/main/resources/vm/java/vo.java.vm | 18 +- ruoyi/src/main/resources/vm/js/api.js.vm | 9 - .../main/resources/vm/vue/index-tree.vue.vm | 6 +- ruoyi/src/main/resources/vm/vue/index.vue.vm | 39 +- ruoyi/src/main/resources/vm/xml/mapper.xml.vm | 2 +- sql/oss.sql | 32 +- sql/ry_20210731.sql | 690 ++++++++++ 229 files changed, 6198 insertions(+), 4320 deletions(-) create mode 100644 ruoyi-ui/src/api/system/ossConfig.js create mode 100644 ruoyi-ui/src/utils/download.js create mode 100644 ruoyi-ui/src/views/register.vue create mode 100644 ruoyi-ui/src/views/system/oss/config.vue delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/annotation/Excel.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/annotation/ExcelDictFormat.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/annotation/Excels.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/annotation/RateLimiter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/enums/LimitType.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/CustomException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/GlobalException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/ServiceException.java rename ruoyi/src/main/java/com/ruoyi/common/exception/{ => base}/BaseException.java (93%) create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/StringUtils.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/demo/controller/TestI18nController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/I18nConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/properties/RepeatSubmitProperties.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/jackson/BigNumberSerializer.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java rename ruoyi/src/main/java/com/ruoyi/oss/service/{ICloudStorageService.java => ICloudStorageStrategy.java} (93%) rename ruoyi/src/main/java/com/ruoyi/oss/service/abstractd/{AbstractCloudStorageService.java => AbstractCloudStorageStrategy.java} (73%) rename ruoyi/src/main/java/com/ruoyi/oss/service/impl/{AliyunCloudStorageServiceImpl.java => AliyunCloudStorageStrategy.java} (70%) rename ruoyi/src/main/java/com/ruoyi/oss/service/impl/{MinioCloudStorageServiceImpl.java => MinioCloudStorageStrategy.java} (81%) rename ruoyi/src/main/java/com/ruoyi/oss/service/impl/{QcloudCloudStorageServiceImpl.java => QcloudCloudStorageStrategy.java} (71%) rename ruoyi/src/main/java/com/ruoyi/oss/service/impl/{QiniuCloudStorageServiceImpl.java => QiniuCloudStorageStrategy.java} (66%) create mode 100644 ruoyi/src/main/java/com/ruoyi/system/domain/SysOssConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/mapper/SysOssConfigMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java delete mode 100644 ruoyi/src/main/java/com/ruoyi/web/controller/common/CommonController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java rename ruoyi/src/main/java/com/ruoyi/{system/controller => web/controller/system}/SysOssController.java (74%) create mode 100644 ruoyi/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java create mode 100644 ruoyi/src/main/resources/application-local.yml create mode 100644 ruoyi/src/main/resources/mapper/system/SysOssConfigMapper.xml create mode 100644 ruoyi/src/main/resources/spy.properties create mode 100644 sql/ry_20210731.sql diff --git a/README.md b/README.md index 2779fda93..778b901f4 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE) [![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
-[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-2.6.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) -[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.4-blue.svg)]() +[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-3.0.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) +[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5-blue.svg)]() [![JDK-8+](https://img.shields.io/badge/JDK-8+-green.svg)]() [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]() @@ -21,51 +21,39 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级 定期 * 权限认证框架 Spring Security、Jwt,支持多终端认证系统 * 关系数据库 MySQL 适配 8.X * 缓存数据库 Redis 适配 6.X -* 数据库开发框架 Mybatis-Plus 快速 CRUD 增加开发效率 插件化支持各类需求 +* 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率 插件化支持各类需求 +* 数据库框架 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构 +* 数据库框架 Redis客户端 采用 Redisson 性能更强 +* 数据库框架 性能分析插件 p6spy 更强劲的 SQL 分析 +* 序列化框架 统一使用 jackson 高效可靠 * 网络框架 Feign、OkHttp3 接口化管理 HTTP 请求 -* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性 +* 分布式锁 Lock4j 注解锁、工具锁 多种多样 +* 文件存储 OSS 对象存储模块 支持(Minio、七牛、阿里、腾讯) * 监控框架 spring-boot-admin 全方位服务监控 * 校验框架 validation 增强接口安全性 严谨性 +* Excel框架 Alibaba EasyExcel 性能优异 扩展性强 * 文档框架 knife4j 美化接口文档 -* 序列化框架 统一使用 jackson 高效可靠 +* 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性 * 代码生成器 一键生成前后端代码 -* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构 -* Redis客户端 采用 Redisson 性能更强 -* 分布式锁 Lock4j 注解锁、工具锁 多种多样 * 部署方式 Docker 容器编排 一键部署业务集群 -* 文件存储 OSS 对象存储模块 支持(Minio、七牛、阿里、腾讯) +* 国际化 Spring 标准国际化方解决方案 ## 参考文档 使用框架前请仔细阅读文档重点注意事项
>[初始化项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117) +>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117) > >[部署项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382) +>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382) > >[参考文档 Wiki](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) +>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) -## 提问四部曲 -### 一、查阅wiki -优先在`wiki->重点事项`,查找是否有相关问题及解决方案,尤其是框架更新后产生的问题,多会在wiki中提及 +## 软件架构图 -> [参考文档 Wiki](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) - -### 二、借助issues -尝试issues中搜索问题关键字(记得选择已完成),看看是否有其他人提出相同问题 -- `如果有`那么依据评论中的解决方案自行尝试解决 -- `如果没有`那么提交一个新的issues描述清楚你的问题,需要包含以下内容(优质的issues,能够帮助作者更高效的帮你解决问题): - - 出现问题的模块或功能或类,总之你要说清楚在哪出的问题 - - 描述产生问题的相关操作流程,以便复现快速解决 - - 报错的日志截图,一定是截图,不要复制一堆报错的文本 -> [issues](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/issues) - -### 三、百度 -大家都懂,不多描述,将关键的报错信息CC->CV到百度中看看大佬们怎么解决的 -> [百度](http://www.baidu.com) - -### 四、加群 -以上三点已经能解决大家绝大部分问题了,如果还有问题没能通过这几种方式解决,那么加群,大家一起在群里探讨一下 +![Plus部署架构图](https://images.gitee.com/uploads/images/2021/0729/112230_4295e5ce_1766278.png "Plus部署架构图.png") ## 贡献代码 @@ -79,7 +67,8 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级 定期 * ORM框架 使用 Mybatis-Plus 简化CRUD (不支持主子表) * Bean简化 使用 Lombok 简化 get set toString 等等 * 容器改动 Tomcat 改为 并发性能更好的 undertow -* 分页移除 pagehelper 改为 Mybatis-Plus 分页 +* 移除 pagehelper 改为 Mybatis-Plus 分页 +* 集成 p6spy 更强劲的 SQL 分析 * 升级 swagger 为 knife4j * 集成 Hutool 5.X 并重写RuoYi部分功能 * 集成 Feign 接口化管理 Http 请求(如三方请求 支付,短信,推送等) @@ -90,7 +79,8 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级 定期 * 集成 dynamic-datasource 多数据源(默认支持MySQL,其他种类需自行适配) * 集成 Lock4j 实现分布式 注解锁、工具锁 多种多样 * 增加 Docker 容器编排 打包插件与部署脚本 -* 移除 本地文件上传 改为 OSS对象存储 支持(Minio、七牛、阿里、腾讯) +* 移除 通用上传下载 改为 OSS对象存储 支持(Minio、七牛、阿里、腾讯) +* 移除 RuoYi自带 Excel 工具 改为 EasyExcel 工具 ### 代码改动 @@ -112,8 +102,9 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级 定期 * 单模块 fast 分支 [RuoYi-Vue-Plus-fast](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/) * Oracle 模块 oracle 分支 [RuoYi-Vue-Plus-oracle](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/oracle/) -## 扫码加群 一起交流 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/160026_11d949aa_1766278.jpeg "07f7121fab14e57e03e5f6a35eff6ce.jpg") +## 加群与捐献 +>[加群与捐献](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598) +>>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/加群与捐献?sort_id=4104598) ## 捐献作者 作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index ac065c351..228ddbf29 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -18,8 +18,6 @@ services: - /docker/mysql/data/:/var/lib/mysql/ # 配置挂载 - /docker/mysql/conf/:/etc/mysql/conf.d/ - # 主机本机时间文件映射 与本机时间同步 - - /etc/localtime:/etc/localtime:ro command: # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配) --default-authentication-plugin=mysql_native_password @@ -37,6 +35,9 @@ services: # 如果需要指定版本 就把 latest 换成版本号 image: nginx:latest container_name: nginx-web + environment: + # 时区上海 + TZ: Asia/Shanghai ports: - 80:80 - 443:443 @@ -49,8 +50,6 @@ services: - /docker/nginx/html:/usr/share/nginx/html # 日志目录 - /docker/nginx/log:/var/log/nginx - # 主机本机时间文件映射 与本机时间同步 - - /etc/localtime:/etc/localtime:ro privileged: true restart: always networks: @@ -62,16 +61,13 @@ services: ports: - 6379:6379 environment: - # 设置环境变量 时区上海 编码UTF-8 + # 时区上海 TZ: Asia/Shanghai - LANG: en_US.UTF-8 volumes: # 配置文件 - /docker/redis/conf/redis.conf:/redis.conf:rw # 数据文件 - /docker/redis/data:/data:rw - # 主机本机时间文件映射 与本机时间同步 - - /etc/localtime:/etc/localtime:ro command: "redis-server --appendonly yes" privileged: true restart: always @@ -88,6 +84,8 @@ services: # 控制台端口 - 9001:9001 environment: + # 时区上海 + TZ: Asia/Shanghai # 管理后台用户名 MINIO_ACCESS_KEY: ruoyi # 管理后台密码,最小8个字符 @@ -97,8 +95,6 @@ services: - /docker/minio/data:/data # 映射配置目录 - /docker/minio/config:/root/.minio/ - # 主机本机时间文件映射 与本机时间同步 - - /etc/localtime:/etc/localtime:ro command: server --console-address ':9001' /data # 指定容器中的目录 /data privileged: true restart: always @@ -107,9 +103,10 @@ services: ipv4_address: 172.30.0.54 ruoyi-server1: - image: "ruoyi/ruoyi-server:2.6.0" + image: "ruoyi/ruoyi-server:3.0.0" environment: - - TZ=Asia/Shanghai + # 时区上海 + TZ: Asia/Shanghai volumes: # 配置文件 - /docker/server1/logs/:/ruoyi/server/logs/ @@ -121,9 +118,10 @@ services: ipv4_address: 172.30.0.60 ruoyi-server2: - image: "ruoyi/ruoyi-server:2.6.0" + image: "ruoyi/ruoyi-server:3.0.0" environment: - - TZ=Asia/Shanghai + # 时区上海 + TZ: Asia/Shanghai volumes: # 配置文件 - /docker/server2/logs/:/ruoyi/server/logs/ @@ -135,9 +133,10 @@ services: ipv4_address: 172.30.0.61 ruoyi-monitor-admin: - image: "ruoyi/ruoyi-monitor-admin:2.6.0" + image: "ruoyi/ruoyi-monitor-admin:3.0.0" environment: - - TZ=Asia/Shanghai + # 时区上海 + TZ: Asia/Shanghai privileged: true restart: always networks: diff --git a/pom.xml b/pom.xml index a5c20b7e6..e0866bdad 100644 --- a/pom.xml +++ b/pom.xml @@ -6,14 +6,14 @@ com.ruoyi ruoyi-vue-plus - 2.6.0 + 3.0.0 RuoYi-Vue-Plus https://gitee.com/JavaLionLi/RuoYi-Vue-Plus RuoYi-Vue-Plus后台管理系统 - 2.6.0 + 3.0.0 2.5.3 UTF-8 UTF-8 @@ -22,16 +22,19 @@ 1.2.6 3.0.3 4.1.2 + 2.2.10 1.7 0.9.1 3.4.3 - 5.7.6 + 3.9.1 + 5.7.7 3.0.3 - 11.0 - 2.4.3 + 11.2 + 4.9.1 + 2.5.0 3.16.1 2.2.1 - 3.4.1 + 3.4.1 7.8.0 @@ -79,6 +82,12 @@ ${poi.version} + + com.alibaba + easyexcel + ${easyexcel.version} + + org.apache.velocity @@ -97,7 +106,7 @@ com.baomidou dynamic-datasource-spring-boot-starter - ${datasource.version} + ${dynamic-ds.version} @@ -110,6 +119,12 @@ mybatis-plus-extension ${mybatis-plus.version} + + + p6spy + p6spy + ${p6spy.version} + cn.hutool @@ -129,6 +144,12 @@ ${feign-okhttp.version} + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + de.codecentric spring-boot-admin-starter-server @@ -193,7 +214,7 @@ public aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ + https://maven.aliyun.com/repository/public/ true @@ -204,7 +225,7 @@ public aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ + https://maven.aliyun.com/repository/public/ true @@ -221,6 +242,7 @@ local debug + '*' @@ -229,6 +251,7 @@ dev debug + '*' @@ -240,6 +263,7 @@ prod warn + health,info diff --git a/ruoyi-extend/pom.xml b/ruoyi-extend/pom.xml index 4df48bab7..3bfe77021 100644 --- a/ruoyi-extend/pom.xml +++ b/ruoyi-extend/pom.xml @@ -5,7 +5,7 @@ ruoyi-vue-plus com.ruoyi - 2.6.0 + 3.0.0 4.0.0 ruoyi-extend diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml index 9aca296c1..bada747b4 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 - 2.6.0 + 3.0.0 4.0.0 jar diff --git a/ruoyi-ui/bin/run-web.bat b/ruoyi-ui/bin/run-web.bat index a938e8921..3e209d772 100644 --- a/ruoyi-ui/bin/run-web.bat +++ b/ruoyi-ui/bin/run-web.bat @@ -1,6 +1,6 @@ @echo off echo. -echo [Ϣ] ʹ Vue Web ̡ +echo [��Ϣ] ʹ�� Vue CLI �������� Web ���̡� echo. %~d0 @@ -9,4 +9,4 @@ cd %~dp0 cd .. npm run dev -pause \ No newline at end of file +pause diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index c980bab82..604d964c3 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -1,6 +1,6 @@ { "name": "ruoyi-vue-plus", - "version": "2.6.0", + "version": "3.0.0", "description": "RuoYi-Vue-Plus后台管理系统", "author": "LionLi", "license": "MIT", @@ -41,7 +41,7 @@ "clipboard": "2.0.6", "core-js": "3.8.1", "echarts": "4.9.0", - "element-ui": "2.15.3", + "element-ui": "2.15.5", "file-saver": "2.0.4", "fuse.js": "6.4.3", "highlight.js": "9.18.5", diff --git a/ruoyi-ui/src/api/demo/demo.js b/ruoyi-ui/src/api/demo/demo.js index c7195afbd..04d40256f 100644 --- a/ruoyi-ui/src/api/demo/demo.js +++ b/ruoyi-ui/src/api/demo/demo.js @@ -52,11 +52,3 @@ export function delDemo(id) { }) } -// 导出测试单表 -export function exportDemo(query) { - return request({ - url: '/demo/demo/export', - method: 'get', - params: query - }) -} diff --git a/ruoyi-ui/src/api/demo/tree.js b/ruoyi-ui/src/api/demo/tree.js index d597e7261..4c7ebc070 100644 --- a/ruoyi-ui/src/api/demo/tree.js +++ b/ruoyi-ui/src/api/demo/tree.js @@ -42,12 +42,3 @@ export function delTree(id) { method: 'delete' }) } - -// 导出测试树表 -export function exportTree(query) { - return request({ - url: '/demo/tree/export', - method: 'get', - params: query - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js index 869cd9fda..8b5b6cf22 100644 --- a/ruoyi-ui/src/api/login.js +++ b/ruoyi-ui/src/api/login.js @@ -15,6 +15,18 @@ export function login(username, password, code, uuid) { }) } +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + // 获取用户详细信息 export function getInfo() { return request({ @@ -37,4 +49,4 @@ export function getCodeImg() { url: '/captchaImage', method: 'get' }) -} \ No newline at end of file +} diff --git a/ruoyi-ui/src/api/monitor/jobLog.js b/ruoyi-ui/src/api/monitor/jobLog.js index be1fffdfa..6e0be6166 100644 --- a/ruoyi-ui/src/api/monitor/jobLog.js +++ b/ruoyi-ui/src/api/monitor/jobLog.js @@ -24,12 +24,3 @@ export function cleanJobLog() { method: 'delete' }) } - -// 导出调度日志 -export function exportJobLog(query) { - return request({ - url: '/monitor/jobLog/export', - method: 'get', - params: query - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/logininfor.js b/ruoyi-ui/src/api/monitor/logininfor.js index 383d61f30..26a46eb56 100644 --- a/ruoyi-ui/src/api/monitor/logininfor.js +++ b/ruoyi-ui/src/api/monitor/logininfor.js @@ -24,12 +24,3 @@ export function cleanLogininfor() { method: 'delete' }) } - -// 导出登录日志 -export function exportLogininfor(query) { - return request({ - url: '/monitor/logininfor/export', - method: 'get', - params: query - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/operlog.js b/ruoyi-ui/src/api/monitor/operlog.js index f09b8ed8f..a04bca840 100644 --- a/ruoyi-ui/src/api/monitor/operlog.js +++ b/ruoyi-ui/src/api/monitor/operlog.js @@ -24,12 +24,3 @@ export function cleanOperlog() { method: 'delete' }) } - -// 导出操作日志 -export function exportOperlog(query) { - return request({ - url: '/monitor/operlog/export', - method: 'get', - params: query - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js index 4c5cb6b8d..c1932848d 100644 --- a/ruoyi-ui/src/api/system/config.js +++ b/ruoyi-ui/src/api/system/config.js @@ -59,11 +59,3 @@ export function refreshCache() { }) } -// 导出参数 -export function exportConfig(query) { - return request({ - url: '/system/config/export', - method: 'get', - params: query - }) -} diff --git a/ruoyi-ui/src/api/system/dict/data.js b/ruoyi-ui/src/api/system/dict/data.js index d7aca8923..6c9eb79b4 100644 --- a/ruoyi-ui/src/api/system/dict/data.js +++ b/ruoyi-ui/src/api/system/dict/data.js @@ -50,12 +50,3 @@ export function delData(dictCode) { method: 'delete' }) } - -// 导出字典数据 -export function exportData(query) { - return request({ - url: '/system/dict/data/export', - method: 'get', - params: query - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js index 2f0532da7..a0254baa7 100644 --- a/ruoyi-ui/src/api/system/dict/type.js +++ b/ruoyi-ui/src/api/system/dict/type.js @@ -51,15 +51,6 @@ export function refreshCache() { }) } -// 导出字典类型 -export function exportType(query) { - return request({ - url: '/system/dict/type/export', - method: 'get', - params: query - }) -} - // 获取字典选择框列表 export function optionselect() { return request({ diff --git a/ruoyi-ui/src/api/system/oss.js b/ruoyi-ui/src/api/system/oss.js index 39be59710..965f137aa 100644 --- a/ruoyi-ui/src/api/system/oss.js +++ b/ruoyi-ui/src/api/system/oss.js @@ -16,3 +16,14 @@ export function delOss(ossId) { method: 'delete' }) } + +export function changePreviewListResource(previewListResource) { + const data = { + previewListResource + } + return request({ + url: '/system/oss/changePreviewListResource', + method: 'put', + data: data + }) +} diff --git a/ruoyi-ui/src/api/system/ossConfig.js b/ruoyi-ui/src/api/system/ossConfig.js new file mode 100644 index 000000000..2c6ae0c43 --- /dev/null +++ b/ruoyi-ui/src/api/system/ossConfig.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +// 查询云存储配置列表 +export function listOssConfig(query) { + return request({ + url: '/system/oss/config/list', + method: 'get', + params: query + }) +} + +// 查询云存储配置详细 +export function getOssConfig(ossConfigId) { + return request({ + url: '/system/oss/config/' + ossConfigId, + method: 'get' + }) +} + +// 新增云存储配置 +export function addOssConfig(data) { + return request({ + url: '/system/oss/config', + method: 'post', + data: data + }) +} + +// 修改云存储配置 +export function updateOssConfig(data) { + return request({ + url: '/system/oss/config', + method: 'put', + data: data + }) +} + +// 删除云存储配置 +export function delOssConfig(ossConfigId) { + return request({ + url: '/system/oss/config/' + ossConfigId, + method: 'delete' + }) +} + +// 用户状态修改 +export function changeOssConfigStatus(ossConfigId, status, configKey) { + const data = { + ossConfigId, + status, + configKey + } + return request({ + url: '/system/oss/config/changeStatus', + method: 'put', + data: data + }) +} diff --git a/ruoyi-ui/src/api/system/role.js b/ruoyi-ui/src/api/system/role.js index c669ac43a..888538e55 100644 --- a/ruoyi-ui/src/api/system/role.js +++ b/ruoyi-ui/src/api/system/role.js @@ -65,16 +65,6 @@ export function delRole(roleId) { }) } -// 导出角色 -export function exportRole(query) { - return request({ - url: '/system/role/export', - method: 'get', - params: query - }) -} - - // 查询角色已授权用户列表 export function allocatedUserList(query) { return request({ diff --git a/ruoyi-ui/src/api/system/user.js b/ruoyi-ui/src/api/system/user.js index 37f4eb338..204c26eb8 100644 --- a/ruoyi-ui/src/api/system/user.js +++ b/ruoyi-ui/src/api/system/user.js @@ -44,15 +44,6 @@ export function delUser(userId) { }) } -// 导出用户 -export function exportUser(query) { - return request({ - url: '/system/user/export', - method: 'get', - params: query - }) -} - // 用户密码重置 export function resetUserPwd(userId, password) { const data = { @@ -118,14 +109,6 @@ export function uploadAvatar(data) { }) } -// 下载用户导入模板 -export function importTemplate() { - return request({ - url: '/system/user/importTemplate', - method: 'get' - }) -} - // 查询授权角色 export function getAuthRole(userId) { return request({ diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue index b313fdd67..1fbae5f3c 100644 --- a/ruoyi-ui/src/components/Breadcrumb/index.vue +++ b/ruoyi-ui/src/components/Breadcrumb/index.vue @@ -45,7 +45,7 @@ export default { if (!name) { return false } - return name.trim() === '首页' + return name.trim() === 'Index' }, handleLink(item) { const { redirect, path } = item diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue index bc2e7e1dd..1f2e15ec2 100644 --- a/ruoyi-ui/src/components/Editor/index.vue +++ b/ruoyi-ui/src/components/Editor/index.vue @@ -176,11 +176,11 @@ export default { // 获取光标所在位置 let length = quill.getSelection().index; // 插入图片 res.url为服务器返回的图片地址 - quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.data.fileName); + quill.insertEmbed(length, "image", res.data.url); // 调整光标到最后 quill.setSelection(length + 1); } else { - this.$message.error("图片插入失败"); + this.$message.error(res.msg); } }, handleUploadError() { diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index 244ac2891..d5c3bc700 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -146,9 +146,14 @@ export default { }, // 上传成功回调 handleUploadSuccess(res, file) { - this.$message.success("上传成功"); - this.fileList.push({ name: res.data.fileName, url: res.data.fileName }); - this.$emit("input", this.listToString(this.fileList)); + if (res.code === 200) { + this.$message.success("上传成功"); + this.fileList.push({ name: res.data.fileName, url: res.data.fileName }); + this.$emit("input", this.listToString(this.fileList)); + } else { + this.$message.error(res.msg); + this.loading.close(); + } }, // 删除文件 handleDelete(index) { @@ -170,9 +175,9 @@ export default { for (let i in list) { strs += list[i].url + separator; } - return strs != '' ? strs.substr(0, strs.length - 1) : ''; - } - } + return strs != "" ? strs.substr(0, strs.length - 1) : ""; + }, + }, }; diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index e074b381b..ba088b93a 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -118,9 +118,14 @@ export default { }, // 上传成功回调 handleUploadSuccess(res) { - this.fileList.push({ name: res.data.fileName, url: res.data.url }); - this.$emit("input", this.listToString(this.fileList)); - this.loading.close(); + 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(); + } else { + this.$message.error(res.msg); + this.loading.close(); + } }, // 上传前loading加载 handleBeforeUpload(file) { @@ -130,7 +135,7 @@ export default { if (file.name.lastIndexOf(".") > -1) { fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1); } - isImg = this.fileType.some(type => { + isImg = this.fileType.some((type) => { if (file.type.indexOf(type) > -1) return true; if (fileExtension && fileExtension.indexOf(type) > -1) return true; return false; @@ -163,7 +168,7 @@ export default { this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`); }, // 上传失败 - handleUploadError() { + handleUploadError(res) { this.$message({ type: "error", message: "上传失败", @@ -182,25 +187,26 @@ export default { for (let i in list) { strs += list[i].url + separator; } - return strs != '' ? strs.substr(0, strs.length - 1) : ''; - } - } + return strs != "" ? strs.substr(0, strs.length - 1) : ""; + }, + }, }; diff --git a/ruoyi-ui/src/main.js b/ruoyi-ui/src/main.js index d07dead41..5bc2b6c43 100644 --- a/ruoyi-ui/src/main.js +++ b/ruoyi-ui/src/main.js @@ -16,7 +16,7 @@ import './assets/icons' // icon import './permission' // permission control import { getDicts } from "@/api/system/dict/data"; import { getConfigKey } from "@/api/system/config"; -import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/ruoyi"; +import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"; import Pagination from "@/components/Pagination"; // 自定义表格工具组件 import RightToolbar from "@/components/RightToolbar" @@ -39,7 +39,6 @@ Vue.prototype.resetForm = resetForm Vue.prototype.addDateRange = addDateRange Vue.prototype.selectDictLabel = selectDictLabel Vue.prototype.selectDictLabels = selectDictLabels -Vue.prototype.download = download Vue.prototype.handleTree = handleTree Vue.prototype.msgSuccess = function (msg) { diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 98f09ed3d..381264eeb 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -43,6 +43,11 @@ export const constantRoutes = [ component: (resolve) => require(['@/views/login'], resolve), hidden: true }, + { + path: '/register', + component: (resolve) => require(['@/views/register'], resolve), + hidden: true + }, { path: '/404', component: (resolve) => require(['@/views/error/404'], resolve), @@ -61,8 +66,8 @@ export const constantRoutes = [ { path: 'index', component: (resolve) => require(['@/views/index'], resolve), - name: '首页', - meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true } + name: 'Index', + meta: { title: '首页', icon: 'dashboard', affix: true } } ] }, @@ -119,6 +124,19 @@ export const constantRoutes = [ } ] }, + { + path: '/system/oss-config', + component: Layout, + hidden: true, + children: [ + { + path: 'index', + component: (resolve) => require(['@/views/system/oss/config'], resolve), + name: 'OssConfig', + meta: { title: '配置管理', activeMenu: '/system/oss'} + } + ] + }, { path: '/monitor/job-log', component: Layout, diff --git a/ruoyi-ui/src/store/modules/user.js b/ruoyi-ui/src/store/modules/user.js index c6624e3af..917f9163d 100644 --- a/ruoyi-ui/src/store/modules/user.js +++ b/ruoyi-ui/src/store/modules/user.js @@ -51,7 +51,7 @@ const user = { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.data.user - const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; + const avatar = user.avatar == "" ? require("@/assets/images/profile.jpg") : user.avatar; if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.data.roles) commit('SET_PERMISSIONS', res.data.permissions) diff --git a/ruoyi-ui/src/utils/download.js b/ruoyi-ui/src/utils/download.js new file mode 100644 index 000000000..52b07f713 --- /dev/null +++ b/ruoyi-ui/src/utils/download.js @@ -0,0 +1,91 @@ +import axios from 'axios' +import { getToken } from '@/utils/auth' + +const mimeMap = { + xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + zip: 'application/zip', + oss: 'application/octet-stream' +} + +const baseUrl = process.env.VUE_APP_BASE_API +export function downLoadZip(str, filename) { + var url = baseUrl + str + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(res => { + resolveBlob(res, mimeMap.zip) + }) +} + +export function downLoadOss(ossId) { + var url = baseUrl + '/system/oss/download/' + ossId + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(res => { + resolveBlob(res, mimeMap.oss) + }) +} + +export function downLoadExcel(url, params) { + // get请求映射params参数 + if (params) { + let urlparams = url + '?'; + for (const propName of Object.keys(params)) { + const value = params[propName]; + var part = encodeURIComponent(propName) + "="; + if (value !== null && typeof(value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + let subPart = encodeURIComponent(params) + '='; + urlparams += subPart + encodeURIComponent(value[key]) + '&'; + } + } + } else { + urlparams += part + encodeURIComponent(value) + "&"; + } + } + } + urlparams = urlparams.slice(0, -1); + url = urlparams; + } + url = baseUrl + url + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(res => { + resolveBlob(res, mimeMap.xlsx) + }) +} + +/** + * 解析blob响应内容并下载 + * @param {*} res blob响应内容 + * @param {String} mimeType MIME类型 + */ +export function resolveBlob(res, mimeType) { + const aLink = document.createElement('a') + var blob = new Blob([res.data], { type: mimeType }) + // //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名; + var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*') + var contentDisposition = decodeURI(res.headers['content-disposition']) + var result = patt.exec(contentDisposition) + var fileName = result[1] + fileName = fileName.replace(/\"/g, '') + aLink.style.display = 'none' + aLink.href = URL.createObjectURL(blob) + aLink.setAttribute('download', decodeURI(fileName)) // 设置下载文件名称 + document.body.appendChild(aLink) + aLink.click() + URL.revokeObjectURL(aLink.href);//清除引用 + document.body.removeChild(aLink); +} diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 6a7cbfa32..e4418b17d 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -28,9 +28,11 @@ service.interceptors.request.use(config => { if (value !== null && typeof(value) !== "undefined") { if (typeof value === 'object') { for (const key of Object.keys(value)) { - let params = propName + '[' + key + ']'; - var subPart = encodeURIComponent(params) + "="; - url += subPart + encodeURIComponent(value[key]) + "&"; + if (value[key] !== null && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + let subPart = encodeURIComponent(params) + '='; + url += subPart + encodeURIComponent(value[key]) + '&'; + } } } else { url += part + encodeURIComponent(value) + "&"; @@ -64,7 +66,7 @@ service.interceptors.response.use(res => { location.href = '/index'; }) }).catch(() => {}); - return Promise.reject('error') + return Promise.reject('令牌验证失败') } else if (code === 500) { Message({ message: msg, diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js index ac390f530..b426a313b 100644 --- a/ruoyi-ui/src/utils/ruoyi.js +++ b/ruoyi-ui/src/utils/ruoyi.js @@ -55,16 +55,15 @@ export function resetForm(refName) { // 添加日期范围 export function addDateRange(params, dateRange, propName) { - var search = params; - search.params = {}; - if (null != dateRange && '' != dateRange) { - if (typeof (propName) === "undefined") { - search.params["beginTime"] = dateRange[0]; - search.params["endTime"] = dateRange[1]; - } else { - search.params["begin" + propName] = dateRange[0]; - search.params["end" + propName] = dateRange[1]; - } + let search = params; + search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; + dateRange = Array.isArray(dateRange) ? dateRange : []; + if (typeof (propName) === 'undefined') { + search.params['beginTime'] = dateRange[0]; + search.params['endTime'] = dateRange[1]; + } else { + search.params['begin' + propName] = dateRange[0]; + search.params['end' + propName] = dateRange[1]; } return search; } @@ -96,11 +95,6 @@ export function selectDictLabels(datas, value, separator) { return actions.join('').substring(0, actions.join('').length - 1); } -// 通用下载方法 -export function download(fileName) { - window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true; -} - // 字符串格式化(%s ) export function sprintf(str) { var args = arguments, flag = true, i = 1; diff --git a/ruoyi-ui/src/views/demo/demo/index.vue b/ruoyi-ui/src/views/demo/demo/index.vue index c2ef2e005..a0d9edc72 100644 --- a/ruoyi-ui/src/views/demo/demo/index.vue +++ b/ruoyi-ui/src/views/demo/demo/index.vue @@ -169,7 +169,8 @@ \ No newline at end of file + diff --git a/ruoyi-ui/src/views/monitor/logininfor/index.vue b/ruoyi-ui/src/views/monitor/logininfor/index.vue index 07937b460..5d6c05193 100644 --- a/ruoyi-ui/src/views/monitor/logininfor/index.vue +++ b/ruoyi-ui/src/views/monitor/logininfor/index.vue @@ -119,7 +119,8 @@ + + diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue index 25086a9fe..69d85640f 100644 --- a/ruoyi-ui/src/views/system/config/index.vue +++ b/ruoyi-ui/src/views/system/config/index.vue @@ -181,7 +181,8 @@ diff --git a/ruoyi-ui/src/views/system/oss/index.vue b/ruoyi-ui/src/views/system/oss/index.vue index 1171cc9c6..2bbbba060 100644 --- a/ruoyi-ui/src/views/system/oss/index.vue +++ b/ruoyi-ui/src/views/system/oss/index.vue @@ -96,7 +96,25 @@ v-hasPermi="['system:oss:remove']" >删除 - + + 预览开关 : {{previewListResource ? "禁用" : "启用"}} + + + 配置管理 + @@ -109,12 +127,12 @@ @@ -169,10 +187,8 @@