├── .nojekyll ├── CNAME ├── questions ├── swagger.md ├── jce_cannot.md ├── lombok.md ├── import_excel.md ├── synchronous_update.md ├── identify_fail.md ├── jar_run_fail.md ├── bean_null.md ├── permission_denied.md ├── read_metadata.md ├── st_not_support.md ├── deploy_vue.md ├── use_tomcat.md ├── only_one_subscriber.md ├── nacos_read_fail.md ├── dubbo_ip.md ├── sentinel_404.md ├── use_druid.md ├── https_config.md ├── nacos_naming_instance_metadata.md ├── parse_exception.md ├── domestic_databases.md ├── kinfe4j.md ├── login_step.md └── _sidebar.md ├── static ├── image │ ├── logo.png │ ├── favicon.ico │ ├── ruoyivueplus.png │ └── ruoyicloudplus.png └── js │ ├── prism-typescript.min.js │ ├── docsify-footer.min.js │ ├── docsify-scroll-to-top.min.js │ └── docsify-copy-code.min.js ├── _footer.md ├── ruoyi-cloud-plus ├── quickstart │ ├── extend_project.md │ ├── power_job_init.md │ ├── snail_job_init.md │ ├── idea_environment.md │ ├── 1.Xinit.md │ ├── deploy.md │ └── init.md ├── framework │ ├── architecture_diagram.md │ ├── explain │ │ ├── test.md │ │ ├── about_join.md │ │ ├── key.md │ │ └── transaction.md │ ├── extend │ │ ├── mail.md │ │ ├── sse.md │ │ ├── idempotent.md │ │ ├── sensitive.md │ │ ├── cache.md │ │ ├── encrypt.md │ │ ├── websocket.md │ │ ├── sms.md │ │ ├── translation.md │ │ ├── api_encrypt.md │ │ └── dynamic_datasource.md │ ├── association │ │ ├── inner_authentication.md │ │ ├── collaboration.md │ │ ├── update_url.md │ │ ├── update_package_name.md │ │ ├── new_module.md │ │ └── i18n.md │ ├── basic │ │ ├── database.md │ │ ├── router_release.md │ │ ├── page.md │ │ ├── user.md │ │ ├── social.md │ │ ├── code_generate.md │ │ ├── client.md │ │ ├── tenant.md │ │ ├── permissions_control.md │ │ └── oss.md │ └── tree.md ├── extend-function │ ├── kafka.md │ ├── rabbitmq.md │ ├── rocketmq.md │ ├── nacos.md │ ├── maxkey.md │ ├── es.md │ ├── elk.md │ ├── skywalking.md │ ├── prometheus_grafana.md │ └── shardingproxy.md └── _sidebar.md ├── common ├── blacklist.md ├── demo_system.md ├── add_group.md ├── column.md ├── pr.md ├── contribution.md ├── video1.md └── video.md ├── ruoyi-vue-plus ├── framework │ ├── architecture_diagram.md │ ├── explain │ │ ├── test.md │ │ ├── key.md │ │ ├── about_join.md │ │ └── transaction.md │ ├── extend │ │ ├── mail.md │ │ ├── maxkey.md │ │ ├── skywalking.md │ │ ├── sse.md │ │ ├── idempotent.md │ │ ├── encrypt.md │ │ ├── sensitive.md │ │ ├── cache.md │ │ ├── websocket.md │ │ ├── translation.md │ │ ├── sms.md │ │ ├── topiam.md │ │ ├── api_encrypt.md │ │ └── dynamic_datasource.md │ ├── association │ │ ├── new_module.md │ │ ├── update_url.md │ │ ├── update_package_name.md │ │ └── i18n.md │ ├── basic │ │ ├── interface_release.md │ │ ├── database.md │ │ ├── page.md │ │ ├── user.md │ │ ├── social.md │ │ ├── code_generate.md │ │ ├── client.md │ │ ├── tenant.md │ │ ├── permissions_control.md │ │ └── oss.md │ └── tree.md ├── quickstart │ ├── 5.Xnew.md │ ├── admin_init.md │ ├── snail_job_init.md │ ├── idea_environment.md │ ├── init.md │ └── deploy.md └── _sidebar.md ├── _navbar.md ├── plus-ui ├── devdoc │ ├── param_use.md │ ├── dev_norm.md │ ├── content_copy.md │ ├── icon_use.md │ ├── dict_use.md │ ├── component_use.md │ ├── permissions_use.md │ ├── page_cache.md │ ├── request_process.md │ └── router_use.md ├── _sidebar.md └── home.md ├── .gitignore ├── _sidebar.md ├── _coverpage.md └── index.html /.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | plus-doc.dromara.org -------------------------------------------------------------------------------- /questions/swagger.md: -------------------------------------------------------------------------------- 1 | # 框架内没有任何swagger 2 | 3 | 想使用接口文档功能 请查看框架接口文档说明 -------------------------------------------------------------------------------- /questions/jce_cannot.md: -------------------------------------------------------------------------------- 1 | # 问题说明 由于 OracleJDK 强校验加密证书导致 2 | 3 | 解决方案 禁止使用 oraclejdk 更换为其他例如 openjdk -------------------------------------------------------------------------------- /static/image/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/plus-doc/HEAD/static/image/logo.png -------------------------------------------------------------------------------- /_footer.md: -------------------------------------------------------------------------------- 1 | 2 | 对文档有疑问?欢迎您帮助我们 [完善此文档](https://gitee.com/JavaLionLi/plus-doc) ! -------------------------------------------------------------------------------- /static/image/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/plus-doc/HEAD/static/image/favicon.ico -------------------------------------------------------------------------------- /questions/lombok.md: -------------------------------------------------------------------------------- 1 | # 关于lombok注解爆红 2 | - - - 3 | * 已知 lombok 插件与 idea中文插件 存在兼容性问题 4 | * 移除中文插件或手动关闭idea检查 -------------------------------------------------------------------------------- /static/image/ruoyivueplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/plus-doc/HEAD/static/image/ruoyivueplus.png -------------------------------------------------------------------------------- /static/image/ruoyicloudplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dromara/plus-doc/HEAD/static/image/ruoyicloudplus.png -------------------------------------------------------------------------------- /questions/import_excel.md: -------------------------------------------------------------------------------- 1 | # 关于导入excel实体类为空 2 | - - - 3 | * 禁止在导入实体使用 `lombok` 链式调用注解 `@Accessors(chain = true)` 4 | * 会导致找不到 `set` 方法无法注入内容 -------------------------------------------------------------------------------- /questions/synchronous_update.md: -------------------------------------------------------------------------------- 1 | # 如何同步项目更新 2 | - - - 3 | 参考文章: [关于如何同步更新开源项目](https://blog.csdn.net/qq_31360283/article/details/118345795) -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/extend_project.md: -------------------------------------------------------------------------------- 1 | # 基于 RuoYi-Cloud-Plus 的扩展项目列表 2 | - - - 3 | [扩展项目列表跳转](/ruoyi-vue-plus/quickstart/extend_project.md) -------------------------------------------------------------------------------- /common/blacklist.md: -------------------------------------------------------------------------------- 1 | # 黑名单 2 | - - - 3 | 4 | 地址: https://github.com/QNAV/RuoYi-X-Plus 5 |
6 | 上榜缘由 使用本框架二次开源并未有任何声明与标注 将所有代码的作者名全都改成了自己 剽窃本框架代码 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/architecture_diagram.md: -------------------------------------------------------------------------------- 1 | # 软件架构图 2 | - - - 3 | ![输入图片说明](https://foruda.gitee.com/images/1722569328704494018/e84442b6_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/architecture_diagram.md: -------------------------------------------------------------------------------- 1 | # 软件架构图 2 | - - - 3 | ![输入图片说明](https://foruda.gitee.com/images/1722569321458793955/8672b1fc_1766278.png "屏幕截图") 4 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/5.Xnew.md: -------------------------------------------------------------------------------- 1 | ### 视频讲解 2 | 3 | [RuoYi-Vue-Plus 5.0.0 新功能与变更介绍](https://www.bilibili.com/video/BV1Us4y1m7ky/) 4 | 5 | [RuoYi-Vue-Plus 5.1.0 新功能与变更介绍](https://www.bilibili.com/video/BV1fj411y71X/) 6 | -------------------------------------------------------------------------------- /questions/identify_fail.md: -------------------------------------------------------------------------------- 1 | # 放行接口提示认证失败 2 | - - - 3 | ## 可能的原因 4 | 接口放行后不需要token即可访问
5 | 但是没有token也就无法获取用户信息与鉴权 6 | 7 | ## 解决方案 8 | 删除接口上的鉴权注解
9 | 删除接口内获取用户信息功能
10 | 删除数据库实体类 自动注入 `createBy` `updateBy` 因为会获取用户数据 -------------------------------------------------------------------------------- /questions/jar_run_fail.md: -------------------------------------------------------------------------------- 1 | # 打包jar运行报错问题 2 | - - - 3 | 4 | **常见于 windows 平台以命令方式启动** 5 | 6 | windows 平台默认编码为 GBK 所以读取到所有的配置都是乱码 7 | 8 | ## 解决方案 9 | 10 | 需要在命令增加 `-Dfile.encoding=utf-8` 指定文件编码 11 | 12 | 例如: `java -Dfile.encoding=utf-8 -jar ruoyi-xxx.jar` -------------------------------------------------------------------------------- /questions/bean_null.md: -------------------------------------------------------------------------------- 1 | # 实体bean为空问题 2 | - - - 3 | ### 问题排查 4 | 5 | 检查是否存在 `链式调用` 注解 `@Accessors(chain = true)` 删除即可 6 | 7 | ### 原因 8 | java 规范 set 返回值为 `void` 链式调用 set 返回值为 `this`
9 | 故多数框架底层使用 jdk 工具导致找不到 set 方法
10 | 例如: `easyexcel` `cglib` `mybatis` 等 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/explain/test.md: -------------------------------------------------------------------------------- 1 | # 单元测试 2 | - - - 3 | ## 参考文章 4 | [SpringBoot 2.X 整合 JUnit5 及全方位使用手册](https://lionli.blog.csdn.net/article/details/127576604) 5 | ## 参考代码(1.4.0新增) 6 | ![输入图片说明](https://foruda.gitee.com/images/1666973151030696086/6d44f4c2_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/explain/test.md: -------------------------------------------------------------------------------- 1 | # 单元测试 2 | - - - 3 | ## 参考文章 4 | [SpringBoot 2.X 整合 JUnit5 及全方位使用手册](https://lionli.blog.csdn.net/article/details/127576604) 5 | ## 参考代码(4.4.0新增) 6 | ![输入图片说明](https://foruda.gitee.com/images/1666973091281055549/6e8f58c3_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /questions/permission_denied.md: -------------------------------------------------------------------------------- 1 | # Redis 报错 Permission denied 2 | - - - 3 | ### 此报错为无权限 4 | 5 | 需确保 redis 数据存储文件夹具有写权限 6 | 7 | ```shell 8 | chmod 777 /docker/redis/data 9 | ``` 10 | 11 | 没有写权限无法对数据进行存储 12 | 13 | ### 关于RDB报错 `/etc` 无权限问题 14 | 15 | 增加redis密码校验 无密码导致配置不安全 16 | -------------------------------------------------------------------------------- /_navbar.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | * [文档导航](/_readme) 4 | * [Vue版本](/ruoyi-vue-plus/home.md) 5 | * [Cloud版本](/ruoyi-cloud-plus/home.md) 6 | * [前端文档](/plus-ui/home.md) 7 | * [常见问题](/questions/domestic_databases.md) 8 | * [视频教程](/common/video.md) 9 | * [演示系统](/common/demo_system.md) 10 | -------------------------------------------------------------------------------- /questions/read_metadata.md: -------------------------------------------------------------------------------- 1 | # unable to read meta-data for class xxx 2 | - - - 3 | ## 问题原因 4 | 5 | 此问题由改包名导致框架内组件 spring 的 spi 配置文件包名被改乱套 6 | 7 | ## 解决方案 8 | 9 | 更正组件包下的 spring spi 配置文件内的类包名 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1668608724503582409/50a77b4b_1766278.jpeg "test.jpg") -------------------------------------------------------------------------------- /common/demo_system.md: -------------------------------------------------------------------------------- 1 | # 系统演示(请大家不要乱改数据 影响他人体验 谢谢配合) 2 | - - - 3 | **感谢 `依依` `天翼云` 贡献的演示服务器** 4 | 5 | **2核4G 小服务器 经不起压测 请理性操作 违者直接封IP** 6 | 7 | > 访问地址: [http://106.119.167.29:90/](http://106.119.167.29:90/) 8 | 9 | > 登录账户 admin/admin123 10 | 11 | > Admin监控中心 ruoyi/123456 12 | 13 | > 任务调度中心 admin/admin 14 | -------------------------------------------------------------------------------- /questions/st_not_support.md: -------------------------------------------------------------------------------- 1 | # 不支持ST请求 2 | - - - 3 | ## 问题原因 4 | **经多人反馈 共同点为全都是做`小程序开发`使用的`uniapp`发送的网络请求而出现这种问题** 5 | 6 | `uniapp` 错误设置 `Content-Type` 将所有请求类型全都设置成了 `json` 导致不该读body的请求也读取了body 最终导致报错 7 | 8 | ## 解决方案 9 | 10 | 方案1: 升级 1.4.0 已经对这种不合规发的请求做了兼容处理(被迫)
11 | 方案2: `uniapp` 内的请求设置正确的 `Content-Type` -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/kafka.md: -------------------------------------------------------------------------------- 1 | # Kafka搭建 2 | - - - 3 | ## 环境搭建 4 | 参考文章: [docker-compose 安装 Kafka 3.X 附带可视化界面](https://lionli.blog.csdn.net/article/details/125855550) 5 | 6 | ## 用法参考 7 | 参考 `ruoyi-stream-mq` 模块内的测试案例 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1660031528265343174/屏幕截图.png "屏幕截图.png") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/rabbitmq.md: -------------------------------------------------------------------------------- 1 | # RabbitMQ搭建 2 | - - - 3 | ## 环境搭建 4 | 5 | 参考文章: [docker-compose 安装 RabbitMQ 3.X 附带延迟队列插件](https://lionli.blog.csdn.net/article/details/125855177) 6 | 7 | ## 用法参考 8 | 参考 `ruoyi-stream-mq` 模块内的测试案例 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1660031371503504748/屏幕截图.png "屏幕截图.png") -------------------------------------------------------------------------------- /plus-ui/devdoc/param_use.md: -------------------------------------------------------------------------------- 1 | # 使用参数 2 | 3 | - - - 4 | 5 | 参数设置是提供开发人员、实施人员的动态系统配置参数,不需要去频繁修改后台配置文件,也无需重启服务器即可生效。 6 | 7 | 1. 使用参数 8 | 9 | ```typescript 10 | // 导入 api 11 | import {getConfigKey} from '@/api/system/config'; 12 | 13 | const res = getConfigKey('参数键名'); 14 | ``` 15 | 16 | res.data 即为数据库中 sys_config 表中 config_key 对应的 config_value 的值 -------------------------------------------------------------------------------- /questions/deploy_vue.md: -------------------------------------------------------------------------------- 1 | # 关于vue与boot整合部署 2 | - - - 3 | * [前端静态资源如何整合到后端访问](https://doc.ruoyi.vip/ruoyi-vue/other/faq.html#前端静态资源如何整合到后端访问) 4 | 5 | 3.X 需在 `pom.xml` 增加资源过滤排除 6 | 7 | ```xml 8 | 9 | src/main/resources/页面目录 10 | 11 | false 12 | 13 | ``` 14 | -------------------------------------------------------------------------------- /questions/use_tomcat.md: -------------------------------------------------------------------------------- 1 | # 关于如何使用Tomcat 2 | - - - 3 | ### 查看ruoyi-framework模块的pom.xml文件,根据注释更改依赖 4 | 5 | ![输入图片说明](https://foruda.gitee.com/images/1678981109106652929/0803004d_1766278.png "屏幕截图") 6 | 7 | ### 查看ruoyi-admin模块中的application.yml文件,根据注释更改配置 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1678981112652965294/dda8df86_1766278.png "屏幕截图") 10 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/rocketmq.md: -------------------------------------------------------------------------------- 1 | # RocketMQ搭建 2 | - - - 3 | ## 环境搭建 4 | 参考文章: [docker-compose 安装 RocketMQ 4.9.X (apache官方镜像) namesrv broker 与可视化控制台 console](https://lionli.blog.csdn.net/article/details/125798865) 5 | 6 | ## 用法参考 7 | 参考 `ruoyi-stream-mq` 模块内的测试案例 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1660031496623275622/屏幕截图.png "屏幕截图.png") -------------------------------------------------------------------------------- /questions/only_one_subscriber.md: -------------------------------------------------------------------------------- 1 | # Only one connection receive subscriber allowed 2 | - - - 3 | ## 问题原因 4 | **经多人反馈 共同点为全都是做`小程序开发`使用的`uniapp`发送的网络请求而出现这种问题** 5 | 6 | `uniapp` 错误设置 `Content-Type` 将所有请求类型全都设置成了 `json` 导致不该读body的请求也读取了body 最终导致报错 7 | 8 | ## 解决方案 9 | 10 | 方案1: 升级 1.4.0 已经对这种不合规发的请求做了兼容处理(被迫)
11 | 方案2: `uniapp` 内的请求设置正确的 `Content-Type` 12 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/mail.md: -------------------------------------------------------------------------------- 1 | # 邮件功能 2 | - - - 3 | ## 配置功能 4 | 5 | 修改配置文件 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1663555260932007318/fabb2bfa_1766278.png "屏幕截图") 8 | 9 | * `enabled` 为邮件功能开关 10 | 11 | ## 功能使用 12 | 13 | 参考 `demo` 模块 `MailController` 邮件演示案例 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1663555374113593089/885b4db2_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /questions/nacos_read_fail.md: -------------------------------------------------------------------------------- 1 | # 无法读取nacos配置 2 | - - - 3 | ### 检查 `group` 与 `namespace` 是否一致 4 | 5 | 如果未使用框架自带 `ry-config.sql` 文件进行配置 会导致 `namespace` 不一致 无法查询配置 6 | 7 | ### 检查 `8848` `9848` `9849` 端口是否开启可用 8 | 9 | ### 检查配置文件名是否一致 例如: "xxx" 与 "xxx.yml" 的区别 10 | 11 | ### 检查是否手动改过 `nacos` 数据库数据 12 | 13 | `nacos` 数据表层层关联 不要自作聪明手动改数据库 14 | 15 | 已经改过的 需要重新导入 `ry-config.sql` 之后在页面进行改数据操作 -------------------------------------------------------------------------------- /questions/dubbo_ip.md: -------------------------------------------------------------------------------- 1 | # 如何指定dubbo注册ip 2 | - - - 3 | ## 重点说明 4 | 以下方法指定IP必须是本地有网卡的自己可以访问的IP 不可以随意乱写
5 | (云服务器公网IP是没有网卡的) 6 | 7 | ## 在`nacos`指定协议IP地址(全局生效) 8 | ```yml 9 | dubbo: 10 | protocol: 11 | # 指定dubbo协议注册ip 12 | host: 192.168.0.100 13 | ``` 14 | 15 | ## docker指定dubbo环境变量(单服务生效) 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1678981332028792584/7eeef9c5_1766278.png "屏幕截图") 18 | 19 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/mail.md: -------------------------------------------------------------------------------- 1 | # 邮件功能 2 | - - - 3 | ## 配置功能 4 | 5 | 版本: v4.2.0 提供邮件功能 6 | 7 | 修改配置文件 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1663555260932007318/fabb2bfa_1766278.png "屏幕截图") 10 | 11 | * `enabled` 为邮件功能开关 12 | 13 | ## 功能使用 14 | 15 | 参考 `demo` 模块 `MailController` 邮件演示案例 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1663555374113593089/885b4db2_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /questions/sentinel_404.md: -------------------------------------------------------------------------------- 1 | # 为什么删除sentinel 2 | - - - 3 | ## 原因 4 | 5 | * 社区已经超过一年不更新代码 社区冰点issue无人回复 6 | * 代码与最新技术栈偏离太大(不适配boot3与jdk17) 7 | * 功能不完善阉割严重达不到生产级别 不支持集群(企业版支持) 不支持规则持久化(企业版支持) 8 | * 问题很多bug很多 兼容适配非常麻烦使用和开发成本都非常高 9 | * 几乎没有几个国内项目能用到sentinel整体服务限流 10 | * 功能颗粒度低 只能支持服务限流 没法更细粒度的支持某些接口的业务限流 11 | 12 | ## 替代方案 13 | 14 | 使用框架自带的限流注解 对业务做限流即可 15 | 16 | ## 依旧想使用sentinel怎么办 17 | 18 | 根据代码提交记录反向操作即可 19 | 20 | https://gitee.com/dromara/RuoYi-Cloud-Plus/commit/e0f68ef605128dde61a0c1566d9c2e5771387dca 21 | 22 | -------------------------------------------------------------------------------- /plus-ui/devdoc/dev_norm.md: -------------------------------------------------------------------------------- 1 | # 开发规范 2 | - - - 3 | 4 | ### 新增view 5 | > 在`@/views`文件下创建对应的文件夹,一般性一个路由对应一个文件, 该模块下的功能就建议在本文件夹下创建一个新文件夹,各个功能模块维护自己的`utils`或`components`组件。 6 | 7 | ### 新增api 8 | > 在`@/api`文件夹下创建本模块对应的api服务。 9 | > 在api服务同级创建`types.ts`类型声明文件。 10 | 11 | ### 新增组件 12 | > 在全局的`@/components`写一些全局的组件,如富文本,各种搜索组件,封装的分页组件等等能被公用的组件。 每个页面或者模块特定的业务组件则会写在当前`@/views`下面。 13 | 如:`@/views/system/user/components/xxx.vue`。这样拆分大大减轻了维护成本。 14 | 15 | ### 新增样式 16 | > 页面的样式和组件是一个道理,全局的`@/style`放置一下全局公用的样式,每一个页面的样式就写在当前 views下面,请记住加上scoped 就只会作用在当前组件内了,避免造成全局的样式污染。 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/nacos.md: -------------------------------------------------------------------------------- 1 | # Nacos集群搭建 2 | - - - 3 | ## 集群搭建两种方式 4 | ### 文件寻址集群 5 | [【RuoYi-Cloud-Plus】学习笔记 02 - Nacos(二)寻址机制之文件寻址分析](https://blog.csdn.net/Michelle_Zhong/article/details/127423521) 6 | 7 | ### 地址服务器寻址集群(推荐) 8 | [【RuoYi-Cloud-Plus】学习笔记 03 - Nacos(三)使用 Nginx 实现地址服务器寻址及其原理分析](https://blog.csdn.net/Michelle_Zhong/article/details/127474238) 9 | 10 | ## 集群路由代理设置 11 | [【RuoYi-Cloud-Plus】学习笔记 04 - Nacos(四)使用 Nginx 简单实现 Nacos 集群负载均衡](https://blog.csdn.net/Michelle_Zhong/article/details/127486350) 12 | 13 | 设置好代理之后 跟单机用法一致 后端nacos地址写代理 `ip:端口` 即可 -------------------------------------------------------------------------------- /plus-ui/devdoc/content_copy.md: -------------------------------------------------------------------------------- 1 | # 内容复制 2 | 3 | - - - 4 | 5 | 如果要使用复制功能可以使用指令`v-copyText`,示例代码如下 6 | 7 | ```html 8 | 9 | 复制 13 | 14 | ``` 15 | 16 | ```typescript 17 | const content = ref('需要复制的内容'); 18 | const handleCopy = (text) => { 19 | proxy?.$modal.msgSuccess('复制成功'); 20 | }; 21 | ``` 22 | 23 | 参数说明: 24 | 25 | | 参数 | 说明 | 26 | |---------------------|----------| 27 | | v-copyText | 需要复制的内容 | 28 | | v-copyText:callback | 复制后的回调函数 | 29 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/explain/about_join.md: -------------------------------------------------------------------------------- 1 | # 关于多表查询 2 | - - - 3 | ## 建议单表查询 4 | 5 | 文章连接: [大连接查询分解好处](https://java.isture.com/db/mysql/mysql-x-optimize-decompose-connection.html) 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678979482724037085/1e74f3e1_1766278.png "屏幕截图") 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1666336728402711844/52788205_1766278.png "屏幕截图")
10 | ![输入图片说明](https://foruda.gitee.com/images/1666336945935088277/f60e3288_1766278.png "屏幕截图")
11 | ![输入图片说明](https://foruda.gitee.com/images/1666336954686520161/c6c83adc_1766278.png "屏幕截图")
12 | **(上图出自 <高性能MySql>)** -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/explain/key.md: -------------------------------------------------------------------------------- 1 | # 主键使用说明 2 | - - - 3 | ## 关于如何使用分布式id或雪花id 4 | 5 | 参考 `MybatisPlusConfig` 如需自定义 修改 `Bean` 实现即可 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678979401707903546/e25f6c06_1766278.png "屏幕截图") 8 | 9 | 框架默认集成 雪花ID 只需全局更改 主键类型即可 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1678979411517764918/1470df04_1766278.png "屏幕截图") 12 | 13 | 如单表使用 可单独配置注解 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1678979416033986923/2a4c3736_1766278.png "屏幕截图") 16 | 17 | ### 重点说明 18 | * 由于雪花id位数过长 `Long` 类型在前端会失真 19 | * 框架已配置序列化方案 超越 `JS` 最大值自动转字符串 参考 `BigNumberSerializer` 类 -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/explain/key.md: -------------------------------------------------------------------------------- 1 | # 主键使用说明 2 | - - - 3 | ## 关于如何使用分布式id或雪花id 4 | 5 | 参考 `MybatisPlusConfig` 如需自定义 修改 `Bean` 实现即可 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678979401707903546/e25f6c06_1766278.png "屏幕截图") 8 | 9 | 框架默认集成 雪花ID 只需全局更改 主键类型即可 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1678979411517764918/1470df04_1766278.png "屏幕截图") 12 | 13 | 如单表使用 可单独配置注解 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1678979416033986923/2a4c3736_1766278.png "屏幕截图") 16 | 17 | ### 重点说明 18 | * 由于雪花id位数过长 `Long` 类型在前端会失真 19 | * 框架已配置序列化方案 超越 `JS` 最大值自动转字符串 参考 `BigNumberSerializer` 类 (3.0.0 及以上新增) -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/maxkey.md: -------------------------------------------------------------------------------- 1 | # 对接 MaxKey 单点登录 2 | - - - 3 | 4 | # 安装 MaxKey 应用服务 5 | 6 | 参考 MaxKey 官方文档安装 [MaxKey安装部署](https://www.maxkey.top/doc/docs/overview/intro) 7 | 8 | # 配置应用 OAuth2.0 认证注册 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1693377802128677240/0927270a_1766278.png "屏幕截图") 11 | 12 | # 配置后端服务 13 | 14 | 找到框架 `application-环境.yml` 配置文件 15 | 16 | 修改 `maxkey` 对应的 `client-id` 与 `client-secret` 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1693378118762354596/2f02c8a3_1766278.png "屏幕截图") 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1693378168538263792/24476d2a_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/maxkey.md: -------------------------------------------------------------------------------- 1 | # 对接 MaxKey 单点登录 2 | - - - 3 | 4 | # 安装 MaxKey 应用服务 5 | 6 | 参考 MaxKey 官方文档安装 [MaxKey安装部署](https://www.maxkey.top/doc/docs/overview/intro) 7 | 8 | # 配置应用 OAuth2.0 认证注册 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1693377802128677240/0927270a_1766278.png "屏幕截图") 11 | 12 | # 配置后端服务 13 | 14 | 找到 `Nacos` 内的 `ruoyi-auth.yml` 配置文件 15 | 16 | 修改 `maxkey` 对应的 `client-id` 与 `client-secret` 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1693378118762354596/2f02c8a3_1766278.png "屏幕截图") 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1693378168538263792/24476d2a_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/skywalking.md: -------------------------------------------------------------------------------- 1 | # Skywalking链路监控 2 | - - - 3 | ## skywalking服务搭建 4 | 5 | 参考文章: https://lionli.blog.csdn.net/article/details/127656534
6 | 多种搭建方式 也可以参考百度 7 | 8 | ## 代码改动 9 | 10 | https://gitee.com/dromara/RuoYi-Vue-Plus/commit/4d02466fed4f3ea012a80c3359cde9af0737141f
11 | 根据上方commit提交记录 开启注释掉的代码 12 | 13 | ## 本地使用 14 | 15 | 参考文章: https://lionli.blog.csdn.net/article/details/127656534 16 | 17 | ## docker部署使用 18 | 19 | 完成上方代码改动 将下载好的 `agent` 探针 放入服务器 `/docker/skywalking/agent/` 目录下 赋予所有权限即可
20 | ![输入图片说明](https://foruda.gitee.com/images/1669032573170837535/d9901f53_1766278.png "屏幕截图") 21 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/inner_authentication.md: -------------------------------------------------------------------------------- 1 | # 内网鉴权 2 | - - - 3 | ## 功能介绍 4 | 5 | 此功能用于防止外部请求访问内部服务应用
6 | 在请求经过 `gateway网关` 会生成一个 `id-token` 携带到后续服务进行校验
7 | 若未经过 `gateway网关` 调用内网服务 会出现 `id-token无效` 异常
8 | 有效防止非法请求直接访问内网服务
9 | 10 | ## 开启/关闭内网鉴权 11 | 12 | 更改 `application-common.yml` 配置文件的 `sa-token.check-id-token` 配置即可 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1678980608778275681/9a2c1054_1766278.png "屏幕截图") 15 | 16 | ## 放行内网鉴权 17 | 进入 `ruoyi-common-security` 模块找到 `SecurityConfiguration` 类 增加排除路径即可 18 | 19 | ![输入图片说明](https://foruda.gitee.com/images/1678980612657326393/cea32a8c_1766278.png "屏幕截图") 20 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/association/new_module.md: -------------------------------------------------------------------------------- 1 | # 关于如何创建新模块 2 | - - - 3 | * 参考ruoyi-demo模块 4 | * 需要改动: 父pom 与 admin模块pom 5 | 6 | ![输入图片说明](https://foruda.gitee.com/images/1719814203987728184/6940ecf8_1766278.png "屏幕截图") 7 | ![输入图片说明](https://foruda.gitee.com/images/1719814254968294155/70fe6d77_1766278.png "屏幕截图") 8 | ![输入图片说明](https://foruda.gitee.com/images/1719814280768521481/14fb11cd_1766278.png "屏幕截图") 9 | 10 | ### 注意事项 11 | 如果是两个不同包名的模块 需要修改如下配置 12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1719813861680271619/82435586_1766278.png "屏幕截图") 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1692006501957936219/059f8526_1766278.png "屏幕截图") 16 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/interface_release.md: -------------------------------------------------------------------------------- 1 | # 接口放行 2 | - - - 3 | ## 使用方式 4 | 5 | 在配置文件填写路径放行
6 | ![输入图片说明](https://foruda.gitee.com/images/1678979039071447990/8b272aba_1766278.png "屏幕截图") 7 | 8 | ### 注解放行 9 | 版本 4.3.1 以上 建议使用 `@SaIgnore` 忽略注解
10 | 11 | 支持在类或方法上放行
12 | **注意: 动态路径会解析成通配符 请设计好接口路径避免问题** 13 | 14 | **例如: `/get/{userId}` 会解析成 `/get/*`**
15 | ![输入图片说明](https://foruda.gitee.com/images/1666595109409104199/5b7d75c7_1766278.png "屏幕截图") 16 | 17 | ## 注意事项 18 | 19 | 接口放行后不需要token即可访问
20 | 但是没有token也就无法获取用户信息与鉴权 21 | 22 | ### 解决方案 23 | 删除接口上的鉴权注解
24 | 删除接口内获取用户信息功能
25 | 删除数据库实体类 自动注入 `createBy` `updateBy` 因为会获取用户数据 -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/explain/about_join.md: -------------------------------------------------------------------------------- 1 | # 关于多表查询 2 | - - - 3 | ## 建议单表查询 4 | 5 | 文章连接: [大连接查询分解好处](https://java.isture.com/db/mysql/mysql-x-optimize-decompose-connection.html) 6 | 文章连接: [如何用mp多表查询性能测试](https://developer.aliyun.com/article/858927) 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1678979482724037085/1e74f3e1_1766278.png "屏幕截图") 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1666336728402711844/52788205_1766278.png "屏幕截图") 11 | ![输入图片说明](https://foruda.gitee.com/images/1666336945935088277/f60e3288_1766278.png "屏幕截图") 12 | ![输入图片说明](https://foruda.gitee.com/images/1666336954686520161/c6c83adc_1766278.png "屏幕截图") 13 | 14 | **(上图出自 <高性能MySql>)** -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/database.md: -------------------------------------------------------------------------------- 1 | # 关于数据库设计 2 | - - - 3 | 4 | ### 表设计必备字段 5 | 6 | 参考框架基础实体类`BaseEntity`内字段 7 | 8 | * create_dept 创建部门 用于标记数据所属部门 为后续数据审计数据权限使用 9 | * create_by 创建人 用于标记数据创建人 为后续数据审计数据权限使用 10 | * create_time 创建时间 用于标记数据创建时间 为后续数据审计 数据排序 问题查找使用 11 | * update_by 修改人 用于标记数据修改人 为后续数据审计 问题查找使用 12 | * update_time 修改时间 用于标记数据修改时间 为后续数据审计 问题查找使用 13 | 14 | ### 可选字段 15 | 16 | * tenant_id 租户ID 标记数据所属租户 如不需要租户可在yml关闭租户功能或者放行单表 17 | * del_flag 删除标记 逻辑删除字段 用于标记数据的逻辑删除状态 如果不加为真实删除 注意必须在数据库设置默认值为0 18 | * version 乐观锁字段 用于标记数据版本 注意标注默认值从什么版本开始 建议标注0 19 | 20 | ### 具体参考官方sql `test_demo` 表结构 21 | 22 | ![输入图片说明](https://foruda.gitee.com/images/1751508893832894882/860f08c2_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/database.md: -------------------------------------------------------------------------------- 1 | # 关于数据库设计 2 | - - - 3 | 4 | ### 表设计必备字段 5 | 6 | 参考框架基础实体类`BaseEntity`内字段 7 | 8 | * create_dept 创建部门 用于标记数据所属部门 为后续数据审计数据权限使用 9 | * create_by 创建人 用于标记数据创建人 为后续数据审计数据权限使用 10 | * create_time 创建时间 用于标记数据创建时间 为后续数据审计 数据排序 问题查找使用 11 | * update_by 修改人 用于标记数据修改人 为后续数据审计 问题查找使用 12 | * update_time 修改时间 用于标记数据修改时间 为后续数据审计 问题查找使用 13 | 14 | ### 可选字段 15 | 16 | * tenant_id 租户ID 标记数据所属租户 如不需要租户可在yml关闭租户功能或者放行单表 17 | * del_flag 删除标记 逻辑删除字段 用于标记数据的逻辑删除状态 如果不加为真实删除 注意必须在数据库设置默认值为0 18 | * version 乐观锁字段 用于标记数据版本 注意标注默认值从什么版本开始 建议标注0 19 | 20 | ### 具体参考官方sql `test_demo` 表结构 21 | 22 | ![输入图片说明](https://foruda.gitee.com/images/1751508893832894882/860f08c2_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /questions/use_druid.md: -------------------------------------------------------------------------------- 1 | # 如何使用druid连接池 2 | - - - 3 | ## 为何移除druid 4 | 5 | 性能低下 bug频发 内含fastjson问题众多 监控不支持集群(鸡肋) 不支持一些高版本数据库 社区活跃度冰点 6 | 7 | ### 性能对比图 8 | ![输入图片说明](https://foruda.gitee.com/images/1667888745256002635/1bbd3481_1766278.png "屏幕截图") 9 | ### 包大小对比图 10 | ![输入图片说明](https://foruda.gitee.com/images/1667888760611300040/87af8d82_1766278.png "屏幕截图") 11 | ![输入图片说明](https://foruda.gitee.com/images/1667888766932068690/7b379298_1766278.png "屏幕截图") 12 | 13 | ## 为何使用hikari(中文: 光) 14 | 15 | spring默认自带 代码量少结构简单 稳定可靠 性能突出(自行百度一堆测评) 16 | 17 | ## 参考提交记录反向操作即可 18 | 19 | https://gitee.com/dromara/RuoYi-Vue-Plus/commit/1f42bd3d22c104aaa2d780c20a555b5e467858bf
20 | https://gitee.com/dromara/RuoYi-Vue-Plus/commit/a63abbf268e4c0a60344f63b5cba828a1347e178 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/es.md: -------------------------------------------------------------------------------- 1 | # ES搜索引擎 2 | - - - 3 | ## 环境搭建(如果已经搭建了ELK则跳过) 4 | 5 | 项目内置 `ELK` 的 `docker-compose` 编排 可查看 `/docker/docker-compose.yml` 文件下方扩展编排 6 | 7 | **注意: `/docker/elk/elasticsearch/` 目录下所有文件夹 均需要写权限** 8 | 9 | `chmod 777 /docker/elk/elasticsearch/data`
10 | `chmod 777 /docker/elk/elasticsearch/logs`
11 | `chmod 777 /docker/elk/elasticsearch/plugins`
12 | **注意: es插件需要解压后放入 `plugins` 目录** 13 | 14 | ## 运行命令 15 | 16 | ```shell 17 | docker-compose up -d elasticsearch 18 | ``` 19 | 20 | ## Easy-ES 文档 21 | [Easy-ES 文档](https://www.easy-es.cn/) 22 | 23 | ## 用法 24 | 25 | 基本配置和用法可参考 `ruoyi-demo` 模块 更多高级用法请参考 Easy-ES 文档
26 | ![输入图片说明](https://foruda.gitee.com/images/1660030085169129908/屏幕截图.png "屏幕截图.png") 27 | -------------------------------------------------------------------------------- /plus-ui/devdoc/icon_use.md: -------------------------------------------------------------------------------- 1 | # 使用图标 2 | 3 | - - - 4 | 5 | ### 在页面中使用 6 | **详情请参考ElementPlus文档** 7 | * 直接使用ElementPlus中的图标 8 | ```html 9 | 10 | 11 | 12 | ``` 13 | 14 | * 通过`:size`属性来调整图标大小(默认单位为px) 15 | ```html 16 | 17 | 18 | 19 | ``` 20 | 21 | * 图标颜色 22 | ```html 23 | 24 | 25 | 26 | ``` 27 | 28 | ### 在按钮中使用 29 | * 可以通过设置`icon`属性来使用图标 30 | ```html 31 | 编辑 32 | ``` 33 | 34 | * 也可以直接使用图标组件 35 | ```html 36 | 37 | 编辑 38 | 39 | 40 | 41 | 42 | ``` 43 | 44 | ### 在菜单中添加自定义的图标 45 | 1. 在阿里巴巴矢量图标库找到你想要的图标 46 | 2. 点击下载`svg`格式 47 | 3. 将下载好的`svg`文件放入 `src/assets/icons/svg`目录下 48 | 4. 在选择菜单图标时,选择你添加的图标即可 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/collaboration.md: -------------------------------------------------------------------------------- 1 | # 多团队开发 2 | - - - 3 | ## 功能介绍 4 | 5 | > 多人员/团队开发往往会出现 调试程序 被负载均衡到别人那里 自己抓不到请求等问题
6 | > 正确团队开发模式 `测试机一台` 公共服务都放到测试机上
7 | > 本地开发人员 需启动 `ruoyi-gateway` 与 其他 调试的业务模块
8 | > 将所有服务都统一指向同一个 Nacos 服务
9 | > 前端连接本机 `ruoyi-gateway` 网关调试程序
10 | 11 | 框架提供了 `ruoyi-common-loadbalancer` 多团队 负载均衡模块 可以将网关的请求锁定到与网关相同的IP服务 12 | 13 | 需要在 `ruoyi-gateway` `ruoyi-auth` `ruoyi-modules` 引入 `ruoyi-common-loadbalancer` 模块 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1678980590168990366/afa2fdf6_1766278.png "屏幕截图") 16 | 17 | 启动前端访问本机 `ruoyi-gateway` 网关在请求转发 和 `dubbo` 进行 RPC 调用时
18 | 会获取与本机IP地址相同的服务优先调用(如未找到 会随机返回) 19 | 20 | # 重点说明 21 | 22 | 请检查本机是否有虚机网卡IP 如有多网卡获取IP地址会不准确 23 | 24 | 可使用如下代码检查本机IP是否正常 25 | ```java 26 | InetAddress.getLocalHost().getHostAddress() 27 | ``` -------------------------------------------------------------------------------- /common/add_group.md: -------------------------------------------------------------------------------- 1 | # 加群方式 2 | - - - 3 | ### 交流群(不提供任何问题解答 纯交流) 4 | 5 | **加 <小助手> 微信备注 <加群>**
6 | **视频课程咨询或其他问题咨询请查看下方信息(小助手是机器人)** 7 | 8 | 9 | 10 | ### VIP群(付费加群 提供问题解答、技术支持、技术分享) 11 | 12 | 首先感谢 `RuoYi` 提供分享开源 框架基于 `RuoYi` 重写大部分功能实现
13 | 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可
14 | VIP群是作者提供的私人服务 不代表着项目收费 15 | 16 | 两种途径: 17 | 1. 购买官方视频进群(技术支持 + 官方视频教程) [官方视频](/common/video.md) 18 | 2. 扫描下方二维码付款进群(技术支持 无视频教程) 19 | 20 | 支付后申请加群即可 QQ群号 : **<637757165>**
21 | 22 | **加群扫码**
23 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/sse.md: -------------------------------------------------------------------------------- 1 | # SSE功能 2 | - - - 3 | 4 | ## 框架版本 >= 5.2.2 5 | 6 | ## 配置说明 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1721986820599622433/1abe5d60_1766278.png "屏幕截图") 9 | 10 | * enabled 是否开启此功能 11 | * path 应用路径 12 | 13 | **重点: 如关闭sse功能需连同前端sse开关一同关闭 不然前端启动会报错** 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1728971445611402828/06519718_1766278.png "屏幕截图") 16 | 17 | ## 使用方法 18 | 19 | 前端连接方式: `http://后端ip:端口/resource/sse?clientid=import.meta.env.VITE_APP_CLIENT_ID&Authorization=Bearer eyJ0eXAiO......` 20 | 21 | 其中 `Authorization` 为请求token需要登录后获取 连接成功之后 与框架内其他获取登录用户方式一致 22 | 23 | `SseMessageUtils.sendMessage` 推送单机消息(特殊需求使用)
24 | `SseMessageUtils.subscribeMessage` 订阅分布式消息(框架初始化已订阅)
25 | `SseMessageUtils.publishMessage` 发布分布式消息(推荐使用 所有集群内寻找到接收人)
26 | `SseMessageUtils.publishAll` 群发消息给所有连接人
-------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Build Tools 3 | 4 | .gradle 5 | /build/ 6 | !gradle/wrapper/gradle-wrapper.jar 7 | 8 | target/ 9 | !.mvn/wrapper/maven-wrapper.jar 10 | 11 | ###################################################################### 12 | # IDE 13 | 14 | ### STS ### 15 | .apt_generated 16 | .classpath 17 | .factorypath 18 | .project 19 | .settings 20 | .springBeans 21 | 22 | ### IntelliJ IDEA ### 23 | .idea 24 | *.iws 25 | *.iml 26 | *.ipr 27 | 28 | ### JRebel ### 29 | rebel.xml 30 | 31 | ### NetBeans ### 32 | nbproject/private/ 33 | build/* 34 | nbbuild/ 35 | nbdist/ 36 | .nb-gradle/ 37 | 38 | ###################################################################### 39 | # Others 40 | *.log 41 | *.xml.versionsBackup 42 | *.swp 43 | 44 | !*/build/*.java 45 | !*/build/*.html 46 | !*/build/*.xml 47 | -------------------------------------------------------------------------------- /questions/https_config.md: -------------------------------------------------------------------------------- 1 | # 关于HTTPS配置 2 | - - - 3 | ### 后端 HTTPS 改造 4 | 5 | 将申请的 `https` 证书放置到 `nginx` 对应目录内
6 | 根据框架 `nginx https` 示例 更改后端代理为 `https`
7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1678981283573122208/87cf19ad_1766278.png "屏幕截图") 9 | 10 | ### 监控中心 与 任务调度中心 改造 11 | 12 | `监控中心` 与 `任务调度中心` 属于系统管控服务
13 | 应在内网使用 不应该暴漏到外网 也无需配置 `https` 14 | 15 | 更改 `系统 -> 菜单管理 -> 监控中心 与 任务调度中心` 菜单配置
16 | 将其改为 `外链访问` 访问路径为 **注意: 如果是外网使用 url需配置为 http://外网ip:端口** 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1738900396160585793/631cdda2_1766278.png "屏幕截图") 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1738900418442852436/a39f1fd2_1766278.png "屏幕截图") 21 | 22 | `nginx` 配置 `独立的端口` 进行反向代理即可访问(代理编写方式参考后端反向代理) 23 | 24 | ### Minio https 改造 25 | 26 | 下方链接包含 minio+nginx 与 minio本身配置https 两种方案
27 | [终极版minio配置https教程](https://blog.csdn.net/Michelle_Zhong/article/details/126484358) -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/sse.md: -------------------------------------------------------------------------------- 1 | # SSE功能 2 | - - - 3 | 4 | ## 框架版本 >= 2.2.1 5 | 6 | ## 配置说明 7 | 8 | 配置在 `ruoyi-resource` 目录下 远程调用可直接使用 `RemoteMessageService` 接口 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1721986989993234455/4214cbbd_1766278.png "屏幕截图") 11 | 12 | * enabled 是否开启此功能 13 | * path 应用路径 14 | 15 | **重点: 如关闭sse功能需连同前端sse开关一同关闭 不然前端启动会报错** 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1728971445611402828/06519718_1766278.png "屏幕截图") 18 | 19 | ## 使用方法 20 | 21 | 前端连接方式: `http://后端ip:端口/resource/sse?clientid=import.meta.env.VITE_APP_CLIENT_ID&Authorization=Bearer eyJ0eXAiO......` 22 | 23 | 其中 `Authorization` 为请求token需要登录后获取 连接成功之后 与框架内其他获取登录用户方式一致 24 | 25 | `SseMessageUtils.sendMessage` 推送单机消息(特殊需求使用)
26 | `SseMessageUtils.subscribeMessage` 订阅分布式消息(框架初始化已订阅)
27 | `SseMessageUtils.publishMessage` 发布分布式消息(推荐使用 所有集群内寻找到接收人)
28 | `SseMessageUtils.publishAll` 群发消息给所有连接人
-------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/idempotent.md: -------------------------------------------------------------------------------- 1 | # 防重幂等 2 | - - - 3 | ## 功能介绍 4 | 5 | 防重功能为防止两条相同的数据重复提交导致脏数据或业务错乱
6 | **注意: 重复提交属于小概率事件 请不要拿并发压测与之相提并论**
7 | 框架防重功能参考 `美团GTIS防重系统` 使用 请求参数与用户Token或URL 生成全局业务ID
8 | 有效防止 `同一个用户` 在 `限制时间` 内对 `同一个业务` 提交 `相同的数据` 9 | 10 | 框架防重处理 `支持业务失败或异常` 快速释放限制
11 | 业务处理成功后 会在设置时间内 限制同一条数据的提交
12 | **注意: 只对同一个用户的同一个接口提交相同的数据有效** 13 | 14 | 15 | 16 | 17 | ### 美团GTIS系统流程图 18 | 19 | [美团 分布式系统互斥性与幂等性问题的分析与解决](https://tech.meituan.com/2016/09/29/distributed-system-mutually-exclusive-idempotence-cerberus-gtis.html) 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1678979231862359032/34f030c5_1766278.png "屏幕截图") 22 | 23 | ### 使用方法 24 | 25 | 在Controller标注 `@RepeatSubmit` 注解即可 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1678979236772683145/9fa27e5b_1766278.png "屏幕截图") 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1678979240831458322/8e1fac4b_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/idempotent.md: -------------------------------------------------------------------------------- 1 | # 防重幂等 2 | - - - 3 | ### 功能介绍 4 | 5 | 防重功能为防止两条相同的数据重复提交导致脏数据或业务错乱
6 | **注意: 重复提交属于小概率事件 请不要拿并发压测与之相提并论**
7 | 框架防重功能参考 `美团GTIS防重系统` 使用 请求参数与用户Token或URL 生成全局业务ID
8 | 有效防止 `同一个用户` 在 `限制时间` 内对 `同一个业务` 提交 `相同的数据` 9 | 10 | 框架防重处理 `支持业务失败或异常` 快速释放限制
11 | 业务处理成功后 会在设置时间内 限制同一条数据的提交
12 | **注意: 只对同一个用户的同一个接口提交相同的数据有效** 13 | 14 | 15 | 16 | 17 | ### 美团GTIS系统流程图 18 | 19 | [美团 分布式系统互斥性与幂等性问题的分析与解决](https://tech.meituan.com/2016/09/29/distributed-system-mutually-exclusive-idempotence-cerberus-gtis.html) 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1678979231862359032/34f030c5_1766278.png "屏幕截图") 22 | 23 | ### 使用方法 24 | 25 | 在Controller标注 `@RepeatSubmit` 注解即可 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1678979236772683145/9fa27e5b_1766278.png "屏幕截图") 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1678979240831458322/8e1fac4b_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/encrypt.md: -------------------------------------------------------------------------------- 1 | # 数据加解密 2 | - - - 3 | ## 框架版本 >= 4.6.0 4 | ## 功能说明 5 | 6 | 数据库 数据存储加密 查询解密功能
7 | 支持加密算法: `BASE64` `AES` `RSA` `SM2` `SM4` 8 | 9 | ## 注解 `@EncryptField` 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1675577493013639395/cd920f15_1766278.png "屏幕截图") 12 | 13 | ## 用法说明 14 | 15 | **详细用法可参考案例 TestEncryptController 测试数据库加解密功能** 16 | 17 | 全局默认加密配置(如果注解不配置则使用全局配置) 18 | 19 | ![输入图片说明](https://foruda.gitee.com/images/1675577674063566357/dee94786_1766278.png "屏幕截图") 20 | 21 | 注解可自定义算法与配置 22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1675577725117970708/7ee7a833_1766278.png "屏幕截图") 24 | 25 | ## 密钥生成说明 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1675577852271308699/9b30258e_1766278.png "屏幕截图") 28 | 29 | ## 注意事项 30 | 31 | 必须使用跟实体类相关的方法 如自定义xml编写sql也应该传入实体类 32 |
33 | 因为注解在实体类上 不使用实体类的话 无法获取加密注解 34 |
35 | 如: `LambdaQueryWrapper`等查询工具无法获取任何实体类详情 会导致加密失效 36 | 37 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/sensitive.md: -------------------------------------------------------------------------------- 1 | # 数据脱敏 2 | - - - 3 | ## 功能说明 4 | 5 | 系统使用 `Jackson` 序列化策略 对标注了 `Sensitive` 注解的属性进行脱敏处理 6 | 7 | ## 使用教程 8 | 9 | > 使用注解标注需要脱敏的字段 选择对应的策略 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1699523591703893602/ffd6dba2_1766278.png "屏幕截图") 12 | 13 | * strategy 脱敏策略 14 | * roleKey 角色code(判断用户是否拥有角色权限) 15 | * perms 权限code(判断用户是否拥有标识符权限) 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1678979315796014155/614adf91_1766278.png "屏幕截图") 18 | 19 | > 可再 `SensitiveStrategy` 内自定义策略 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1678979319996224858/3b3e3c8b_1766278.png "屏幕截图") 22 | 23 | ## 脱敏逻辑修改 24 | 25 | > 系统使用通用接口处理是否需要脱敏 多个系统可以自定义不同的脱敏逻辑实现 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1678979325448998856/b262e425_1766278.png "屏幕截图") 28 | 29 | > 系统默认处理逻辑为 根据角色与标识符或非管理员脱敏 可自行修改默认实现 30 | 31 | ![输入图片说明](https://foruda.gitee.com/images/1699523752627488891/f82f2f50_1766278.png "屏幕截图") 32 | 33 | 34 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/sensitive.md: -------------------------------------------------------------------------------- 1 | # 数据脱敏 2 | - - - 3 | ## 功能说明 4 | 5 | 系统使用 `Jackson` 序列化策略 对标注了 `Sensitive` 注解的属性进行脱敏处理 6 | 7 | ## 使用教程 8 | 9 | > 使用注解标注需要脱敏的字段 选择对应的策略 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1699523591703893602/ffd6dba2_1766278.png "屏幕截图") 12 | 13 | * strategy 脱敏策略 14 | * roleKey 角色code(判断用户是否拥有角色权限) 15 | * perms 权限code(判断用户是否拥有标识符权限) 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1678979315796014155/614adf91_1766278.png "屏幕截图") 18 | 19 | > 可再 `SensitiveStrategy` 内自定义策略 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1678979319996224858/3b3e3c8b_1766278.png "屏幕截图") 22 | 23 | ## 脱敏逻辑修改 24 | 25 | > 系统使用通用接口处理是否需要脱敏 多个系统可以自定义不同的脱敏逻辑实现 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1678979325448998856/b262e425_1766278.png "屏幕截图") 28 | 29 | > 系统默认处理逻辑为 根据角色与标识符或非管理员脱敏 可自行修改默认实现 30 | 31 | ![输入图片说明](https://foruda.gitee.com/images/1699523752627488891/f82f2f50_1766278.png "屏幕截图") 32 | 33 | 34 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/cache.md: -------------------------------------------------------------------------------- 1 | # 缓存说明 2 | - - - 3 | ## 操作Redis缓存 4 | 5 | 框架采用 `redisson` 操作redis相关功能 提供了 `RedisUtils` 工具类 基本满足redis所有功能的使用 6 | 7 | 具体功能查看工具类方法 工具类不存在的方法可 `getClient()` 获取redisson客户端原生使用 8 | 9 | ## 多级缓存注解 10 | 11 | 框架采用spring自带的spring-cache注解体系 基于 Caffeine + Redis 实现多级缓存实现本地与redis双缓存存储 12 | 13 | 注解具体使用方式参考demo `RedisCacheController` 内含所有注解的使用方式 14 | 15 | 注解书写规则 可参考 `CacheNames` 代码注释说明用法 16 | 17 | key 格式为 cacheNames#ttl#maxIdleTime#maxSize#local 18 | 19 | * ttl 过期时间 如果设置为0则不过期 默认为0 20 | * maxIdleTime 最大空闲时间 根据LRU算法清理空闲数据 如果设置为0则不检测 默认为0 21 | * maxSize 组最大长度 根据LRU算法清理溢出数据 如果设置为0则无限长 默认为0 22 | * local 默认开启本地缓存为1 关闭本地缓存为0 23 | 24 | 例子: test#60s、test#0#60s、test#0#1m#1000、test#1h#0#500、test#1h#0#500#0 25 | 26 | **注意: 相同缓存的key必须一致 禁止出现同一个缓存 key与后方的参数不同这样会导致出现异常问题** 27 | 28 | ### 多级缓存工具类说明 29 | 30 | 框架针对注解不方便的接入的需求比较灵活的地方 但又需要使用注解或者与注解联动的需求 提供了 `CacheUtils` 工具类 31 | 32 | 工具类用于与spring-cache注解体系进行联动交互 禁止单独使用该工具当作redis工具类使用 33 | 34 | 35 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/cache.md: -------------------------------------------------------------------------------- 1 | # 缓存说明 2 | - - - 3 | ## 操作Redis缓存 4 | 5 | 框架采用 `redisson` 操作redis相关功能 提供了 `RedisUtils` 工具类 基本满足redis所有功能的使用 6 | 7 | 具体功能查看工具类方法 工具类不存在的方法可 `getClient()` 获取redisson客户端原生使用 8 | 9 | ## 多级缓存注解 10 | 11 | 框架采用spring自带的spring-cache注解体系 基于 Caffeine + Redis 实现多级缓存实现本地与redis双缓存存储 12 | 13 | 注解具体使用方式参考demo `RedisCacheController` 内含所有注解的使用方式 14 | 15 | 注解书写规则 可参考 `CacheNames` 代码注释说明用法 16 | 17 | key 格式为 cacheNames#ttl#maxIdleTime#maxSize#local 18 | 19 | * ttl 过期时间 如果设置为0则不过期 默认为0 20 | * maxIdleTime 最大空闲时间 根据LRU算法清理空闲数据 如果设置为0则不检测 默认为0 21 | * maxSize 组最大长度 根据LRU算法清理溢出数据 如果设置为0则无限长 默认为0 22 | * local 默认开启本地缓存为1 关闭本地缓存为0 23 | 24 | 例子: test#60s、test#0#60s、test#0#1m#1000、test#1h#0#500、test#1h#0#500#0 25 | 26 | **注意: 相同缓存的key必须一致 禁止出现同一个缓存 key与后方的参数不同这样会导致出现异常问题** 27 | 28 | ### 多级缓存工具类说明 29 | 30 | 框架针对注解不方便的接入的需求比较灵活的地方 但又需要使用注解或者与注解联动的需求 提供了 `CacheUtils` 工具类 31 | 32 | 工具类用于与spring-cache注解体系进行联动交互 禁止单独使用该工具当作redis工具类使用 33 | 34 | 35 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/elk.md: -------------------------------------------------------------------------------- 1 | # ELK搭建 2 | - - - 3 | # 环境搭建 4 | 5 | 项目内置 `ELK` 的 `docker-compose` 编排 可查看 `/docker/docker-compose.yml` 文件下方扩展编排 6 | 7 | **注意: `/docker/elk/elasticsearch/` 目录下所有文件夹 均需要写权限** 8 | 9 | `chmod 777 /docker/elk/elasticsearch/data`
10 | `chmod 777 /docker/elk/elasticsearch/logs`
11 | `chmod 777 /docker/elk/elasticsearch/plugins`
12 | **注意: es插件需要解压后放入 `plugins` 目录** 13 | 14 | # 运行命令 15 | 16 | ```shell 17 | docker-compose up -d elasticsearch kibana logstash 18 | ``` 19 | 20 | # 参考文章 21 | [docker-compose 搭建 ELK 7.X 并整合 SpringBoot](https://lionli.blog.csdn.net/article/details/125743132) 22 | 23 | # 项目内配置 24 | 25 | 服务引入依赖项 26 | 27 | ```xml 28 | 29 | 30 | com.ruoyi 31 | ruoyi-common-logstash 32 | 33 | ``` 34 | 35 | 更改主 `pom` 文件 `logstash.address` 地址
36 | 37 | ![输入图片说明](https://foruda.gitee.com/images/1678981534923588112/ba6cb5b7_1766278.png "屏幕截图") 38 | -------------------------------------------------------------------------------- /questions/nacos_naming_instance_metadata.md: -------------------------------------------------------------------------------- 1 | # nacos 报错 The Raft Group [naming_instance_metadata] 2 | - - - 3 | ## Nacos 服务下线报错问题 4 | 5 | 问题描述: 6 | 7 | Nacos 服务管理 > 服务列表 > 详情 > 下线 报错 8 | 9 | 10 | 11 | 报错详情: 12 | 13 | ``` 14 | caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused: The Raft Group [naming_instance_metadata] did not find the Leader node; 15 | ``` 16 | 17 | 18 | 19 | 解决方案: 20 | 21 | **删除 Nacos 根目录下 data 文件夹下的 protocol 文件夹** 22 | 23 | (推荐使用全局搜索软件查询,windows 环境根目录一般在 C:\Users\用户名\nacos) 24 | 25 | 26 | 27 | 问题原因: 28 | 29 | > Nacos 采用 raft 算法来计算 Leader,并且会记录上次启动的集群地址,所以当我们自己的服务器 IP 改变时(网络环境不稳定,如WIFI, IP 地址也经常变化),导致 raft 记录的集群地址失效,导致选 Leader 出现问题。 30 | 31 | 32 | 33 | 参考目录: 34 | 35 | [解决疑难问题之服务下线报:The Raft Group naming_instance_metadata\] did not find the Leader node; - 嘉美祥瑞 - 博客园 (cnblogs.com)](https://www.cnblogs.com/whl-jx911/p/16736625.html) -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/update_url.md: -------------------------------------------------------------------------------- 1 | # 修改应用路径 2 | - - - 3 | # 修改访问后端接口路径 4 | 5 | 更改 前端环境配置文件 `VITE_APP_BASE_API` 代理路径 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1661824572484410642/14265f05_1766278.png "屏幕截图")
8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1724317552931269967/f7515655_1766278.png "屏幕截图") 10 | 11 | `prod` 生产环境需修改 `nginx.conf` 后端代理路径(上述配置文件也要改) 12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1678980501204821424/d3340308_1766278.png "屏幕截图") 14 | 15 | # 修改前端页面访问路径 16 | 修改对应环境的 `.env.环境` 文件内的 `VITE_APP_CONTEXT_PATH` 应用访问路径即可 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1661824572484410642/14265f05_1766278.png "屏幕截图") 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1724317049535973756/0a2cc43b_1766278.png "屏幕截图") 21 | 22 | 生产环境 `nginx.conf` 与之对应修改即可
23 | **注意: 文件真实目录为 `/usr/share/nginx/html/admin/index.html` 此功能一般为多项目部署需要 故会增加一层目录 如不需要可以自行修改**
24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1678976662194341301/2720b7e9_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/admin_init.md: -------------------------------------------------------------------------------- 1 | # 搭建Admin监控 2 | - - - 3 | ### 配置监控客户端 4 | 5 | > 修改主服务配置文件 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678941504260707700/68ab99e5_1766278.png "屏幕截图") 8 | 9 | * `enabled` 可启用或关闭客户端注册 10 | * `url` 为监控中心地址 11 | * `username 与 password` 为监控中心的账号密码 12 | 13 | ### 启用监控中心 14 | 在 `扩展项目 -> 监控模块` 启动 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1678976327174539378/df97e36e_1766278.png "屏幕截图") 17 | 18 | 在监控模块对应的 `yml` 配置文件 可设置登录的账号密码与访问路径 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1678941572583282843/28117457_1766278.png "屏幕截图") 21 | 22 | ### 前端修改admin监控访问路径 23 | `dev`环境 默认使用 `.env.development` 配置文件内地址 24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1678941607472644388/460e8eea_1766278.png "屏幕截图") 26 | 27 | `prod`环境 使用 `.env.production` 本机路由 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1678941644784144830/6293ab1c_1766278.png "屏幕截图") 30 | 故而 `prod` 环境只需更改 `nginx` 反向代理路径即可 31 | 32 | ![输入图片说明](https://foruda.gitee.com/images/1678981483900657668/31fd1aad_1766278.png "屏幕截图") 33 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/router_release.md: -------------------------------------------------------------------------------- 1 | # 网关路由与放行 2 | - - - 3 | 4 | ## 新增路由 5 | `ruoyi-gateway.yml` 配置文件 增加 `routers` 配置
6 | **注意: 路径格式为 `/服务路径/controller路径/接口方法路径` `*代表任意一级 **代表任意所有级`**
7 | 下图代表 `resource/**` 将所有 `resource开头的路径` 都路由到 `ruoyi-resource` 服务
8 | 例如: `/resource/sms/code` `resource路由到ruoyi-resource服务` `sms路由到对应的contrller` `code 路由到对应的接口`
9 | ![输入图片说明](https://foruda.gitee.com/images/1669623462957266512/c282932b_1766278.png "屏幕截图")
10 | ![输入图片说明](https://foruda.gitee.com/images/1669623527799049459/201a52db_1766278.png "屏幕截图") 11 | 12 | ## 放行使用方式 13 | nacos 中 `ruoyi-gateway.yml` 白名单放行
14 | **注意: 放行路径格式为 `/服务路径/controller路径/接口方法路径` `*代表任意一级 **代表任意所有级`**
15 | 示例: `/resource/sms/code` 代表 `ruoyi-resource服务 sms的controller code接口`
16 | ![输入图片说明](https://foruda.gitee.com/images/1660622672461635175/屏幕截图.png "屏幕截图.png") 17 | 18 | ## 注意事项 19 | 20 | 接口放行后不需要token即可访问
21 | 但是没有token也就无法获取用户信息与鉴权 22 | 23 | ### 解决方案 24 | 删除接口上的鉴权注解
25 | 删除接口内获取用户信息功能
26 | 删除数据库实体类 自动注入 `createBy` `updateBy` 因为会获取用户数据 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/power_job_init.md: -------------------------------------------------------------------------------- 1 | # 搭建PowerJob任务调度中心(2.X分支已废弃) 2 | - - - 3 | ### 废弃原因 4 | 5 | 接到大量投诉 使用困难 用法诡异 各种问题等 6 | 7 | ### 配置调度中心客户端 8 | > 查看ruoyi-job配置文件(默认情况下无需做任何更改) 9 | > 10 | ![输入图片说明](https://foruda.gitee.com/images/1688013407489024239/9b619e0d_1766278.png "屏幕截图") 11 | 12 | * `enabled` 可启用或关闭客户端注册 13 | * `server-address` 为调度中心地址 14 | * `server-name` 为调度中心服务名 15 | * `app-name` 为执行器组账户名(需在调度中心注册方可登录查看) 16 | 17 | ### 启用调度中心 18 | **需执行 ry-job.sql 默认账号密码 `ruoyi-worker` `123456` 账号在数据库里 可以在页面修改密码** 19 |
20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1688634898607827011/8853b387_1766278.png "屏幕截图") 22 | 23 | > 在 `ruoyi-visual -> ruoyi-powerjob-server` 启动 24 | > 25 | ![输入图片说明](https://foruda.gitee.com/images/1688013606234848334/cf2028cd_1766278.png "屏幕截图") 26 | 27 | > 需修改配置文件数据库连接地址(**注意: 此处为ruoyi-powerjob-server服务的配置文件**) 28 | > 29 | ![输入图片说明](https://foruda.gitee.com/images/1688013663152608235/6c5d6a9c_1766278.png "屏幕截图") 30 | 31 | > 也可配置邮件发送 钉钉推送 和 mongodb存储 32 | > 33 | ![输入图片说明](https://foruda.gitee.com/images/1687335842722317559/f875c07a_1766278.png "屏幕截图") 34 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/association/update_url.md: -------------------------------------------------------------------------------- 1 | # 修改应用路径 2 | - - - 3 | ## 修改后端路径 4 | 5 | 更改 `application.yml` 的 `server.servlet.context-path` 即可更改后端容器路径 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1724316662536650741/41d534b1_1766278.png "屏幕截图") 8 | 9 | 与之对应前端 `dev`环境 需更改 `vite.config.ts` 的代理路径 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1724316844091667249/9b0badc5_1766278.png "屏幕截图") 12 | 13 | `prod` 生产环境需修改 `nginx.conf` 后端代理路径 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1661823876773225117/f1f912a9_1766278.png "屏幕截图") 16 | 17 | ## 修改前端路径 18 | ### 注意: 3.4.0 提供便捷更改方式 19 | 直接修改对应环境的 `.env.环境` 文件内的 `VITE_APP_CONTEXT_PATH` 应用访问路径即可 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1661824572484410642/14265f05_1766278.png "屏幕截图")
22 | ![输入图片说明](https://foruda.gitee.com/images/1724317049535973756/0a2cc43b_1766278.png "屏幕截图") 23 | 24 | 生产环境 `nginx.conf` 与之对应修改即可
25 | **注意: 文件真实目录为 `/usr/share/nginx/html/admin/index.html` 此功能一般为多项目部署需要 故会增加一层目录 如不需要可以自行修改**
26 | ![输入图片说明](https://foruda.gitee.com/images/1678976662194341301/2720b7e9_1766278.png "屏幕截图") 27 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/websocket.md: -------------------------------------------------------------------------------- 1 | # WebSocket功能 2 | - - - 3 | 4 | ## 框架版本 >= 5.1.0 5 | 6 | ## 配置说明(默认关闭 推送建议使用SSE) 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1688356273985385949/5e4d1de8_1766278.png "屏幕截图") 9 | 10 | * enabled 是否开启此功能 11 | * path 应用路径 12 | * allowedOrigins 设置访问源地址 13 | 14 | **重点: 如关闭ws功能需连同前端ws开关一同关闭 不然前端启动会报错** 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1700644877512019497/052d2f46_1766278.png "屏幕截图") 17 | 18 | ## 使用方法 19 | 20 | 前端连接方式: `ws://后端ip:端口/resource/websocket?clientid=import.meta.env.VITE_APP_CLIENT_ID&Authorization=Bearer eyJ0eXAiO......` 21 | 22 | **由于js不支持请求头传输故而采用参数传输 如支持请求头传输建议使用请求头传输** 23 | 24 | 传输方式: 25 | ```js 26 | headers: { 27 | Authorization: "Bearer " + getToken(), 28 | clientid: import.meta.env.VITE_APP_CLIENT_ID 29 | } 30 | ``` 31 | 32 | 其中 `Authorization` 为请求token需要登录后获取 连接成功之后 与框架内其他获取登录用户方式一致 33 | 34 | `WebSocketUtils.sendMessage` 推送单机消息(特殊需求使用)
35 | `WebSocketUtils.subscribeMessage` 订阅分布式消息(框架初始化已订阅)
36 | `WebSocketUtils.publishMessage` 发布分布式消息(推荐使用 所有集群内寻找到接收人)
37 | `WebSocketUtils.publishAll` 群发消息给所有连接人
-------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/encrypt.md: -------------------------------------------------------------------------------- 1 | # 数据加解密 2 | - - - 3 | ## 框架版本 >= 1.6.0 4 | 5 | ## 引入依赖 6 | 7 | ```xml 8 | 9 | com.ruoyi 10 | ruoyi-common-encrypt 11 | 12 | ``` 13 | 14 | ## 功能说明 15 | 16 | 数据库 数据存储加密 查询解密功能
17 | 支持加密算法: `BASE64` `AES` `RSA` `SM2` `SM4` 18 | 19 | ## 注解 `@EncryptField` 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1675577493013639395/cd920f15_1766278.png "屏幕截图") 22 | 23 | ## 用法说明 24 | 25 | **详细用法可参考案例 TestEncryptController 测试数据库加解密功能** 26 | 27 | 全局默认加密配置(如果注解不配置则使用全局配置) 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1675577674063566357/dee94786_1766278.png "屏幕截图") 30 | 31 | 注解可自定义算法与配置 32 | 33 | ![输入图片说明](https://foruda.gitee.com/images/1675577725117970708/7ee7a833_1766278.png "屏幕截图") 34 | 35 | ## 密钥生成说明 36 | 37 | ![输入图片说明](https://foruda.gitee.com/images/1675577852271308699/9b30258e_1766278.png "屏幕截图") 38 | 39 | ## 注意事项 40 | 41 | 必须使用跟实体类相关的方法 如自定义xml编写sql也应该传入实体类 42 |
43 | 因为注解在实体类上 不使用实体类的话 无法获取加密注解 44 |
45 | 如: `LambdaQueryWrapper`等查询工具无法获取任何实体类详情 会导致加密失效 46 | 47 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/page.md: -------------------------------------------------------------------------------- 1 | # 分页功能 2 | - - - 3 | 4 | ## 重点说明 5 | 6 | > 项目使用 `mybatis-plus` 分页插件 实现分页功能 大致用法与 MP 一致 [MP分页文档](https://baomidou.com/pages/97710a/)
7 | > 项目已配置分页合理化 页数溢出 例如: 一共5页 查了第6页 默认返回第一页
8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1678977804058241635/b5cb362d_1766278.png "屏幕截图") 10 | 11 | ## 代码用法 12 | 13 | > `Controller` 使用 `PageQuery` 接收分页参数 具体参数参考 `PageQuery` 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1678977844048821356/1f994221_1766278.png "屏幕截图") 16 | 17 | > 构建 `Mybatis-Plus` 分页对象
18 | > 使用 `PageQuery#build()` 方法 可快速(基于当前对象数据)构建 `MP` 分页对象 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1678977862816976499/b82c1638_1766278.png "屏幕截图")
21 | ![输入图片说明](https://foruda.gitee.com/images/1678977876194578744/eaa7b854_1766278.png "屏幕截图")
22 | 23 | 具体用法与 `MP` 一致 24 | 25 | > 自定义 `SQL` 方法分页
26 | > 只需在 `Mapper` 方法第一个参数和返回值 重点: 第一个参数 标注分页对象 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1678977898181729571/6e102731_1766278.png "屏幕截图")
29 | ![输入图片说明](https://foruda.gitee.com/images/1678977906788451483/70979292_1766278.png "屏幕截图") 30 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/explain/transaction.md: -------------------------------------------------------------------------------- 1 | # 事务相关 2 | - - - 3 | 若依文档对事务注解的描述 [关于事务](https://doc.ruoyi.vip/ruoyi/document/htsc.html#%E4%BA%8B%E5%8A%A1%E7%AE%A1%E7%90%86) 以下对多数据源事务做补充: 4 | 5 | ## 多后端多数据源事务 6 | 7 | 框架支持对接 `seata` 保证分布式多数据源事务
8 | 详情参考多数据源框架文档连接: https://www.kancloud.cn/tracy5546/dynamic-datasource/2268607 9 | 10 | ## 本地多数据源事务 11 | 请使用 `@DSTransactional` 注解 会代理 `@DS` 注解切换后的数据源事务做回滚处理
12 | 只要 `@DSTransactional` 注解下任一环节发生异常,则全局多数据源事务回滚。
13 | 如果BC上也有 `@DSTransactional` 会有影响吗?答:没有影响的。 14 | 15 | ```java 16 | //如AService调用BService和CService的方法,A,B,C分别对应不同数据源。 17 | 18 | public class AService { 19 | 20 | @DS("a")//如果a是默认数据源则不需要DS注解。 21 | @DSTransactional 22 | public void dosomething(){ 23 | BService.dosomething(); 24 | CService.dosomething(); 25 | } 26 | } 27 | 28 | public class BService { 29 | 30 | @DS("b") 31 | public void dosomething(){ 32 | //dosomething 33 | } 34 | } 35 | 36 | public class CService { 37 | 38 | @DS("c") 39 | public void dosomething(){ 40 | //dosomething 41 | } 42 | } 43 | ``` 44 | 45 | 46 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/websocket.md: -------------------------------------------------------------------------------- 1 | # WebSocket功能 2 | - - - 3 | 4 | ## 框架版本 >= 2.1.0 5 | 6 | ## 配置说明 7 | 8 | 配置在 `ruoyi-resource` 目录下 9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1688356273985385949/5e4d1de8_1766278.png "屏幕截图") 11 | 12 | * enabled 是否开启此功能 13 | * path 应用路径 14 | * allowedOrigins 设置访问源地址 15 | 16 | **重点: 如关闭ws功能需连同前端ws开关一同关闭 不然前端启动会报错** 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1700644877512019497/052d2f46_1766278.png "屏幕截图") 19 | 20 | ## 使用方法 21 | 22 | 前端连接方式: `ws://后端ip:端口/resource/websocket?clientid=import.meta.env.VITE_APP_CLIENT_ID&Authorization=Bearer eyJ0eXAiO......` 23 | 24 | **由于js不支持请求头传输故而采用参数传输 如支持请求头传输建议使用请求头传输** 25 | 26 | 传输方式: 27 | ```js 28 | headers: { 29 | Authorization: "Bearer " + getToken(), 30 | clientid: import.meta.env.VITE_APP_CLIENT_ID 31 | } 32 | ``` 33 | 34 | 其中 `Authorization` 为请求token需要登录后获取 连接成功之后 与框架内其他获取登录用户方式一致 35 | 36 | `WebSocketUtils.sendMessage` 推送单机消息(特殊需求使用)
37 | `WebSocketUtils.subscribeMessage` 订阅分布式消息(框架初始化已订阅)
38 | `WebSocketUtils.publishMessage` 发布分布式消息(推荐使用 所有集群内寻找到接收人)
39 | `WebSocketUtils.publishAll` 群发消息给所有连接人
-------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/explain/transaction.md: -------------------------------------------------------------------------------- 1 | # 事务相关 2 | - - - 3 | 若依文档对事务注解的描述 [关于事务](https://doc.ruoyi.vip/ruoyi/document/htsc.html#%E4%BA%8B%E5%8A%A1%E7%AE%A1%E7%90%86) 以下对多数据源事务做补充: 4 | 5 | 6 | ## 多服务多数据源事务(框架已默认对接 直接使用seata注解即可) 7 | 8 | 框架支持对接 `seata` 保证分布式多数据源事务
9 | 详情参考多数据源框架文档连接: https://www.kancloud.cn/tracy5546/dynamic-datasource/2268607 10 | 11 | ## 本地多数据源事务 12 | 请使用 `@DSTransactional` 注解 会代理 `@DS` 注解切换后的数据源事务做回滚处理
13 | 只要 `@DSTransactional` 注解下任一环节发生异常,则全局多数据源事务回滚。
14 | 如果BC上也有 `@DSTransactional` 会有影响吗?答:没有影响的。 15 | 16 | ```java 17 | //如AService调用BService和CService的方法,A,B,C分别对应不同数据源。 18 | 19 | public class AService { 20 | 21 | @DS("a")//如果a是默认数据源则不需要DS注解。 22 | @DSTransactional 23 | public void dosomething(){ 24 | BService.dosomething(); 25 | CService.dosomething(); 26 | } 27 | } 28 | 29 | public class BService { 30 | 31 | @DS("b") 32 | public void dosomething(){ 33 | //dosomething 34 | } 35 | } 36 | 37 | public class CService { 38 | 39 | @DS("c") 40 | public void dosomething(){ 41 | //dosomething 42 | } 43 | } 44 | ``` 45 | 46 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/page.md: -------------------------------------------------------------------------------- 1 | # 分页功能 2 | - - - 3 | ## 对应版本 4 | 5 | > 3.5.0 版本 6 | 7 | ## 重点说明 8 | 9 | > 项目使用 `mybatis-plus` 分页插件 实现分页功能 大致用法与 MP 一致 [MP分页文档](https://baomidou.com/pages/97710a/)
10 | > 项目已配置分页合理化 页数溢出 例如: 一共5页 查了第6页 默认返回第一页
11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1678977804058241635/b5cb362d_1766278.png "屏幕截图") 13 | 14 | ## 代码用法 15 | 16 | > `Controller` 使用 `PageQuery` 接收分页参数 具体参数参考 `PageQuery` 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1678977844048821356/1f994221_1766278.png "屏幕截图") 19 | 20 | > 构建 `Mybatis-Plus` 分页对象
21 | > 使用 `PageQuery#build()` 方法 可快速(基于当前对象数据)构建 `MP` 分页对象 22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1678977862816976499/b82c1638_1766278.png "屏幕截图")
24 | ![输入图片说明](https://foruda.gitee.com/images/1678977876194578744/eaa7b854_1766278.png "屏幕截图")
25 | 26 | 具体用法与 `MP` 一致 27 | 28 | > 自定义 `SQL` 方法分页
29 | > 只需在 `Mapper` 方法第一个参数和返回值 重点: 第一个参数 标注分页对象 30 | 31 | ![输入图片说明](https://foruda.gitee.com/images/1678977898181729571/6e102731_1766278.png "屏幕截图")
32 | ![输入图片说明](https://foruda.gitee.com/images/1678977906788451483/70979292_1766278.png "屏幕截图") 33 | -------------------------------------------------------------------------------- /questions/parse_exception.md: -------------------------------------------------------------------------------- 1 | # ParseException SQL解析异常 2 | - - - 3 | ## 异常内容 4 | 5 | `net.sf.jsqlparser.parser.ParseException: Encountered unexpected token:` 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678981169309778625/a17ff852_1766278.png "屏幕截图") 8 | 9 | 此异常为 SQL 解析异常, 应检查 SQL 语句内是否包含 SQL 关键字 10 | 11 | 异常通常都会提供坐标 12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1678981173813116217/a6f9ee32_1766278.png "屏幕截图") 14 | 15 | 检查报错 SQL 相关坐标位置 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1678981179153564043/bf4912b4_1766278.png "屏幕截图") 18 | 19 | ## 异常由来 20 | 由 Mybatis-Plus 拦截器进行 SQL 解析导致
21 | 常见拦截器导致问题 `TenantLineInnerInterceptor` `DataPermissionInterceptor` 22 | 23 | ## 解决方案 24 | 25 | > 将关键字增加标识符区别开 26 | 27 | 1.实体类字段处理(以下仅限于mysql 其他数据库方法各不相同) 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1678981183515542682/fccd85ad_1766278.png "屏幕截图") 30 | 31 | 2.自定义 SQL 或 XML 处理 32 | 33 | ![输入图片说明](https://foruda.gitee.com/images/1678981187926917963/38437edb_1766278.png "屏幕截图") 34 | 35 | 3.Mapper排除 36 | > 查看具体使用了哪些拦截器导致问题 使用忽略注解依次进行排除即可 37 | 38 | ![输入图片说明](https://foruda.gitee.com/images/1678981192902044584/fb1c41eb_1766278.png "屏幕截图") 39 | 40 | 41 | -------------------------------------------------------------------------------- /_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | - **满三年大力赞助** 3 | - 4 | - 5 | - 6 | - 7 | - 8 | 9 | - **开始** 10 | - [框架介绍](/_readme) 11 | - [演示系统](/common/demo_system.md) 12 | - [官方视频教程](/common/video.md) 13 | - [粉丝专栏](/common/column.md) 14 | - [参与贡献项目](/common/contribution.md) 15 | - [如何提交PR](/common/pr.md) 16 | - [如何加群](/common/add_group.md) 17 | - [使用者登记](/common/user_register.md) 18 | - [黑名单](/common/blacklist.md) -------------------------------------------------------------------------------- /plus-ui/devdoc/dict_use.md: -------------------------------------------------------------------------------- 1 | # 使用字典 2 | - - - 3 | 4 | ### 在对应页面中导入需要使用的字典 5 | 6 | ``` typescript 7 | const { sys_normal_disable } = toRefs(proxy?.useDict('sys_normal_disable')); 8 | ``` 9 | 10 | ### Form中以`select`形式使用 11 | 12 | ``` html 13 | 14 | 15 | 16 | ``` 17 | 18 | ### 表格中以`switch`形式使用 19 | 20 | ``` html 21 | 25 | ``` 26 | 27 | ### 表格中以`tag`形式使用 28 | 29 | ``` html 30 | 33 | ``` 34 | 35 | 组件详情参考 `src/components/DictTag/index.vue` 36 | 37 | ### Form中以`radio`形式使用 38 | 39 | ``` html 40 | 41 | 42 | {{ dict.label }} 43 | 44 | 45 | ``` 46 | 47 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/translation.md: -------------------------------------------------------------------------------- 1 | # 翻译功能 2 | - - - 3 | ## 框架版本 >= 4.6.0 4 | ## 注解 5 | 6 | ![输入图片说明](https://foruda.gitee.com/images/1675575648043199227/d04b3e21_1766278.png "屏幕截图") 7 | 8 | `@Translation` 翻译注解 用于实体类字段上
9 | `@TranslationType` 翻译类别注解 用于实现类上标注与 `@Translation` 注解相同的 `type` 类型 实现翻译功能 10 | 11 | 12 | ## 用法说明 13 | 14 | **注意:翻译功能基于序列化实现仅限于小数据量使用 不支持excel等大数据量操作 底层处理遍历处理查询实现最好走缓存** 15 | 16 | 默认提供功能 `用户id转账号(用户名)` `部门id转名称` `字典type转label` `ossId转url` 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1675575977860232549/143b74f8_1766278.png "屏幕截图") 19 | 20 | 用户名翻译(映射翻译) 根据另一个映射字段 翻译保存到此字段 21 | 22 | ![输入图片说明](https://foruda.gitee.com/images/1675576044011477847/13eb9f57_1766278.png "屏幕截图") 23 | 24 | ossUrl翻译(直接翻译) 直接根据此字段值翻译后替换此字段值 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1675576265894720924/70792f66_1766278.png "屏幕截图") 27 | 28 | 字典翻译(其他扩展条件翻译) 根据`other`条件 自行定义如何使用 例如字典翻译`other`条件就是字典的唯一值 29 | 30 | ![输入图片说明](https://foruda.gitee.com/images/1675576391012282823/f95c5d78_1766278.png "屏幕截图") 31 | 32 | ## 自定义扩展 33 | 34 | 实现接口 `TranslationInterface` 标注注解 `@TranslationType` 可参考框架默认实现 35 | 36 | ![输入图片说明](https://foruda.gitee.com/images/1676735436673932715/c3caa8d7_1766278.png "屏幕截图") 37 | -------------------------------------------------------------------------------- /plus-ui/devdoc/component_use.md: -------------------------------------------------------------------------------- 1 | # 组件使用 2 | - - - 3 | 4 | vue 注册组件的两种方式 5 | 在 `@/components` 下创建的.vue文件自动为全局组件,可直接在任意位置使用。 6 | 7 | ### 局部注册 8 | 在对应页使用`components`注册组件。 9 | ```typescript 10 | 13 | 14 | 17 | ``` 18 | 19 | ### 全局注册 20 | 我们可以使用[ Vue 应用实例](https://cn.vuejs.org/guide/essentials/application.html)的 `.component()` 方法,让组件在当前 Vue 应用中全局可用。 21 | ```typescript 22 | import { createApp } from 'vue' 23 | 24 | const app = createApp({}) 25 | 26 | app.component( 27 | // 注册的名字 28 | 'MyComponent', 29 | // 组件的实现 30 | { 31 | /* ... */ 32 | } 33 | ) 34 | ``` 35 | 如果使用单文件组件,你可以注册被导入的 `.vue` 文件: 36 | ```typescript 37 | import MyComponent from './App.vue' 38 | 39 | app.component('MyComponent', MyComponent) 40 | ``` 41 | `.component()` 方法可以被链式调用: 42 | ```typescript 43 | app 44 | .component('ComponentA', ComponentA) 45 | .component('ComponentB', ComponentB) 46 | .component('ComponentC', ComponentC) 47 | ``` 48 | 全局注册的组件可以在此应用的任意组件的模板中使用: 49 | ```Typescript 50 | // 这在当前应用的任意组件中都可用 51 | 52 | 53 | 54 | ``` 55 | 所有的子组件也可以使用全局注册的组件,这意味着这三个组件也都可以在彼此内部使用。 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/snail_job_init.md: -------------------------------------------------------------------------------- 1 | # 搭建SnailJob任务调度中心(2.2.0新功能) 2 | - - - 3 | 4 | ### 视频介绍 5 | 6 | [Snail job任务调度中心:轻松掌握任务管理、重试机制和任务编排](https://www.bilibili.com/video/BV19i421m7GL/) 7 | 8 | ### 配置调度中心客户端 9 | > 修改主服务配置文件 10 | > 11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1716175076777941469/db565dc1_1766278.png "屏幕截图") 13 | 14 | * `enabled` 可启用或关闭客户端注册 15 | * `server.server-name` 为调度中心服务名(自动从Nacos获取服务 支持动态扩容调度中心) 16 | * `server.address` 为调度中心地址(服务名优先 ip垫底) 17 | * `server.port` 为调度中心通信端口 18 | * `token` 为组通信校验token(可在调度中心组配置更换) 19 | * `group-name` 为执行器组 20 | * `namespace` 作用域(不同作用域相互隔离请勿填错) 21 | 22 | ### 启用调度中心 23 | **需执行 ruoyi-job.sql 默认账号密码 `admin` `admin` 账号在数据库里 可以在页面修改密码** 24 |
25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1688634898607827011/8853b387_1766278.png "屏幕截图") 27 | 28 | > 在 `ruoyi-visual -> ruoyi-snailjob-server` 模块启动 29 | > 30 | ![输入图片说明](https://foruda.gitee.com/images/1716175119324078438/ca667a0c_1766278.png "屏幕截图") 31 | 32 | > 需修改配置文件数据库连接地址(**注意: 此处为ruoyi-snailjob-server服务的配置文件 支持多种不同数据库**) 33 | > 34 | ![输入图片说明](https://foruda.gitee.com/images/1688013663152608235/6c5d6a9c_1766278.png "屏幕截图") 35 | 36 | ### 快速入门 37 | 38 | [Snailjob快速入门 基本使用介绍](https://juejin.cn/post/7412955032092442675) -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/skywalking.md: -------------------------------------------------------------------------------- 1 | # SkyWalking搭建与集成 2 | - - - 3 | ## 服务搭建 4 | 参考文章: [SpringBoot 整合 SkyWalking 8.X (包含 Logback 日志采集)](https://lionli.blog.csdn.net/article/details/127656534) 5 | 6 | 框架已经包含了 docker-compose 编排 执行如下命令启动容器即可 7 | 8 | ```shell 9 | docker-compose up -d elasticsearch sky-oap sky-ui 10 | ``` 11 | 12 | ### 本地开发使用 13 | 参考上方文章 14 | 15 | ### docker部署使用 16 | 上传探针到服务器 `/docker/skywalking/agent` 目录
17 | **不要使用网上下载的 请使用框架自带的 内含一些官网没有的插件**
18 | ![输入图片说明](https://foruda.gitee.com/images/1667453098143152651/f1b4f492_1766278.png "屏幕截图") 19 | 20 | 在对应服务的`dockerfile`内 打开 `skywalking` 相关参数注释
21 | ![输入图片说明](https://foruda.gitee.com/images/1667452514896786032/f4322fb9_1766278.png "屏幕截图") 22 | 23 | 服务编排增加探针路径映射
24 | ![输入图片说明](https://foruda.gitee.com/images/1667453276389844864/7e139aa9_1766278.png "屏幕截图") 25 | 26 | 27 | ### 对接日志推送(不推荐 建议使用ELK收集日志) 28 | 29 | 框架已经封装好了对应的依赖和配置 在服务内添加如下依赖 30 | 31 | ```xml 32 | 33 | 34 | com.ruoyi 35 | ruoyi-common-skylog 36 | 37 | ``` 38 | 39 | 在 `logback.xml` 日志配置文件内引入 `skylog` 配置文件 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1667452697748002725/a18212cd_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/update_package_name.md: -------------------------------------------------------------------------------- 1 | # 关于修改包名 2 | - - - 3 | 4 | **注意: 老包名为 com.ruoyi** 5 | 6 | ## 1.随便找个地方新建 org.dromara 包 7 | ![输入图片说明](https://foruda.gitee.com/images/1708491220807198688/b95c0c34_1766278.png "屏幕截图") 8 | 9 | ## 2.在包上右键选择 refactor -> rename 选择 All Directories 10 | ![输入图片说明](https://foruda.gitee.com/images/1683276891079076405/79808b22_1766278.png "屏幕截图") 11 | ![输入图片说明](https://foruda.gitee.com/images/1708491697128844860/1e87ad39_1766278.png "屏幕截图") 12 | 13 | **因为dromara组织下有很多依赖导致idea无法识别完整包名** 14 |
15 | ![输入图片说明](https://foruda.gitee.com/images/1708490576909691001/692e5b37_1766278.png "屏幕截图") 16 | 17 | **需要先将dromara修改为 例如: ruoyi 然后重复上述步骤 这样就可以整包修改了** 18 |
19 | ![输入图片说明](https://foruda.gitee.com/images/1708490906933084793/ff104cd7_1766278.png "屏幕截图") 20 | 21 | ## 3.使用IDEA全局替换 org.dromara 替换为 com.xxx 22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1708491055347995519/dedda0d1_1766278.png "屏幕截图") 24 | 25 | **注意: 由于dromara组织下项目很多 非本框架的依赖模块 请勿修改 例如上图中的 org.dromara.sms4j** 26 | 27 | ## 4.如有需要 将所有模块名逐一修改即可 28 | 29 | ## 5.修改完成后需查看所有common包下模块spi文件是否修改正确 30 | 31 | **老版本idea或者未按照教程修改包名可能导致文件丢包问题** 32 | 33 | ![输入图片说明](https://foruda.gitee.com/images/1708491365841192006/8bc337c2_1766278.png "屏幕截图") 34 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/association/update_package_name.md: -------------------------------------------------------------------------------- 1 | # 关于修改包名 2 | - - - 3 | 4 | **注意: 老包名为 com.ruoyi** 5 | 6 | ## 1.随便找个地方新建 org.dromara 包 7 | ![输入图片说明](https://foruda.gitee.com/images/1708491220807198688/b95c0c34_1766278.png "屏幕截图") 8 | 9 | ## 2.在包上右键选择 refactor -> rename 选择 All Directories 10 | ![输入图片说明](https://foruda.gitee.com/images/1683276891079076405/79808b22_1766278.png "屏幕截图") 11 | ![输入图片说明](https://foruda.gitee.com/images/1708491697128844860/1e87ad39_1766278.png "屏幕截图") 12 | 13 | **因为dromara组织下有很多依赖导致idea无法识别完整包名** 14 |
15 | ![输入图片说明](https://foruda.gitee.com/images/1708490576909691001/692e5b37_1766278.png "屏幕截图") 16 | 17 | **需要先将dromara修改为 例如: ruoyi 然后重复上述步骤 这样就可以整包修改了** 18 |
19 | ![输入图片说明](https://foruda.gitee.com/images/1708490906933084793/ff104cd7_1766278.png "屏幕截图") 20 | 21 | ## 3.使用IDEA全局替换 org.dromara 替换为 com.xxx 22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1708491055347995519/dedda0d1_1766278.png "屏幕截图") 24 | 25 | **注意: 由于dromara组织下项目很多 非本框架的依赖模块 请勿修改 例如上图中的 org.dromara.sms4j** 26 | 27 | ## 4.如有需要 将所有模块名逐一修改即可 28 | 29 | ## 5.修改完成后需查看所有common包下模块spi文件是否修改正确 30 | 31 | **老版本idea或者未按照教程修改包名可能导致文件丢包问题** 32 | 33 | ![输入图片说明](https://foruda.gitee.com/images/1708491365841192006/8bc337c2_1766278.png "屏幕截图") 34 | -------------------------------------------------------------------------------- /static/js/prism-typescript.min.js: -------------------------------------------------------------------------------- 1 | !function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var s=e.languages.extend("typescript",{});delete s["class-name"],e.languages.typescript["class-name"].inside=s,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism); -------------------------------------------------------------------------------- /common/column.md: -------------------------------------------------------------------------------- 1 | # 粉丝专栏 2 | - - - 3 | **由上到下 从易到难** 4 | 5 | > 粉丝整理 欢迎投稿 6 | 7 | | 作者 | 文档地址 | 说明 | 8 | |---------------|---------------------------------------------------------------|--------------------| 9 | | 抓蛙师 | https://www.bilibili.com/video/BV1TG41157Ef/ | 学会问问题(小白必看) | 10 | | 抓蛙师 | https://www.bilibili.com/video/BV1mr4y1j75M | Vue框架基础视频专栏(新人必看) | 11 | | 抓蛙师 | https://www.bilibili.com/video/BV1Na411u7eC | Vue框架改造视频专栏(新人必看) | 12 | | 抓蛙师 | https://www.bilibili.com/video/BV1te4y1D7hi | 小程序鉴权与uniapp联动 | 13 | | 抓蛙师 | https://www.bilibili.com/video/BV1zt4y137UP | 公众号集成 | 14 | | mayuanfei | https://note.youdao.com/s/XpvKnxAb | 入门专栏(新人必看) | 15 | | 程序猿一枚_ | https://blog.csdn.net/zhaozhiqiang1981/category_12221291.html | 玩转RuoYi-Cloud-Plus | 16 | | 程序猿一枚_ | https://www.bilibili.com/video/BV1yA411r7ji/ | Cloud环境搭建以及进阶开发 | 17 | | MichelleChung | https://blog.csdn.net/michelle_zhong/category_11109741.html | 源码解析专栏(进阶必看) | 18 | | MichelleChung | https://blog.csdn.net/michelle_zhong/category_12058476.html | Cloud源码解析专栏 | 19 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/sms.md: -------------------------------------------------------------------------------- 1 | # 短信模块 2 | - - - 3 | 4 | # 配置功能 5 | 6 | ### 版本: >= v5.1.0 7 | 8 | 已完成 sms4j 项目整合 文档地址: https://sms4j.com/doc3 9 | 10 | 配置方式 具体厂商配置扩展 可以查看sms4j文档 11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1705573035997239848/2ca8512d_1766278.png "屏幕截图") 13 | 14 | 使用方式 参考文档各种写法 下方为 demo 模块提供示例 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1705573001447394180/2bd726d0_1766278.png "屏幕截图") 17 | 18 | ### 版本: v4.2.0 提供短信模块 19 | 20 | 短信模块采用SPI加载
21 | 使用哪家的短信 引入哪家的依赖 即可动态加载
22 | 目前支持: `阿里云` `腾讯云` 欢迎扩展PR其他 23 | 24 | > 参考 `ruoyi-demo` pom文件写法 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1678979157797419426/cc9b7444_1766278.png "屏幕截图") 27 | 28 | > 修改配置文件 29 | 30 | ![输入图片说明](https://foruda.gitee.com/images/1678979163029635375/e5fd6e20_1766278.png "屏幕截图") 31 | 32 | * `enabled` 为短信功能开关 33 | * `endpoint` 为域名 各厂家域名固定 按照文档配置即可 34 | * `accessKeyId` 密钥id 35 | * `accessKeySecret` 密钥密匙 36 | * `signName` 签名 37 | * `sdkAppId` 应用id 腾讯专用 38 | 39 | ## 功能使用 40 | 41 | 参考 `demo` 模块 `SmsController` 短信演示案例
42 | 功能采用 `模板模式` 动态加载对应厂家的工具模板
43 | 引入 `SmsTemplate` 即可使用 44 | 45 | ![输入图片说明](https://foruda.gitee.com/images/1678979168699323982/e9301e84_1766278.png "屏幕截图") 46 | 47 | ## 重点须知 48 | 49 | 由于各厂家参数解析不一致 请遵守以下规则 50 | 51 | ![输入图片说明](https://foruda.gitee.com/images/1678979172581090456/ac1f10e8_1766278.png "屏幕截图") 52 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/sms.md: -------------------------------------------------------------------------------- 1 | # 短信模块 2 | - - - 3 | 4 | # 配置功能 5 | 6 | ### 版本: >= v2.1.0 7 | 8 | 已完成 sms4j 项目整合 文档地址: https://sms4j.com/doc3 9 | 10 | 配置方式 具体厂商配置扩展 可以查看sms4j文档 11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1705573035997239848/2ca8512d_1766278.png "屏幕截图") 13 | 14 | 使用方式 参考文档各种写法 下方为 demo 模块提供示例 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1705573001447394180/2bd726d0_1766278.png "屏幕截图") 17 | 18 | ### 版本: v1.2.0 提供短信模块 19 | 20 | 短信模块采用SPI加载
21 | 使用哪家的短信 引入哪家的依赖 即可动态加载
22 | 目前支持: `阿里云` `腾讯云` 欢迎扩展PR其他 23 | 24 | > 参考 `ruoyi-demo` pom文件写法 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1678979157797419426/cc9b7444_1766278.png "屏幕截图") 27 | 28 | > 修改配置文件 29 | 30 | ![输入图片说明](https://foruda.gitee.com/images/1678979163029635375/e5fd6e20_1766278.png "屏幕截图") 31 | 32 | * `enabled` 为短信功能开关 33 | * `endpoint` 为域名 各厂家域名固定 按照文档配置即可 34 | * `accessKeyId` 密钥id 35 | * `accessKeySecret` 密钥密匙 36 | * `signName` 签名 37 | * `sdkAppId` 应用id 腾讯专用 38 | 39 | ## 功能使用 40 | 41 | 参考 `demo` 模块 `SmsController` 短信演示案例
42 | 功能采用 `模板模式` 动态加载对应厂家的工具模板
43 | 引入 `SmsTemplate` 即可使用 44 | 45 | ![输入图片说明](https://foruda.gitee.com/images/1678979168699323982/e9301e84_1766278.png "屏幕截图") 46 | 47 | ## 重点须知 48 | 49 | 由于各厂家参数解析不一致 请遵守以下规则 50 | 51 | ![输入图片说明](https://foruda.gitee.com/images/1678979172581090456/ac1f10e8_1766278.png "屏幕截图") 52 | -------------------------------------------------------------------------------- /common/pr.md: -------------------------------------------------------------------------------- 1 | # 如何提交PR贡献代码 2 | - - - 3 | ### 步骤一 Fork项目到自己仓库 4 | 5 | ![输入图片说明](https://foruda.gitee.com/images/1673427084798343408/142a55d0_1766278.png "屏幕截图") 6 | 7 | ### 步骤二 基于dev分支 新建一个此PR功能点的专属分支 8 | 9 | ![输入图片说明](https://foruda.gitee.com/images/1673427220695789412/14c4f4ff_1766278.png "屏幕截图") 10 | ![输入图片说明](https://foruda.gitee.com/images/1673427193964585607/16ea99d9_1766278.png "屏幕截图") 11 | 12 | ### 步骤三 使用Git工具 将自己仓库的项目拉去到本地做代码编写 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1673427313201488937/f2df59bf_1766278.png "屏幕截图") 15 | 16 | ### 步骤四 使用Idea打开项目 切换到新建的功能分支 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1673427394686229310/c479a5a5_1766278.png "屏幕截图") 19 | 20 | ### 步骤五 将编写好的代码 提交到自己的远程仓库 21 | 22 | ![输入图片说明](https://foruda.gitee.com/images/1673427519150795591/d88c2bc9_1766278.png "屏幕截图") 23 | 24 | ### 步骤六 创建PR申请(此操作在自己仓库或者要PR的仓库都可以) 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1673427616155043776/fe2ce097_1766278.png "屏幕截图") 27 | ![输入图片说明](https://foruda.gitee.com/images/1673427865031025513/0f58a137_1766278.png "屏幕截图") 28 | 29 | ### 步骤七 等待作者评审 按要求更改 直到没有问题后被作者合并 30 | 31 | ![输入图片说明](https://foruda.gitee.com/images/1673428029932524584/93234628_1766278.png "屏幕截图") 32 | 33 | ### 评审期间 如需对PR内容做更改 直接在新功能分支提交代码即可 34 | ### 无需重复提交PR申请 这边会自动比对两个分支的差异 35 | 36 | ![输入图片说明](https://foruda.gitee.com/images/1673428054139366497/4ecb6e98_1766278.png "屏幕截图") 37 | 38 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/topiam.md: -------------------------------------------------------------------------------- 1 | # 对接 TOPIAM 单点登录 2 | - - - 3 | 4 | # 安装 TOPIAM 应用服务 5 | 6 | 参考 TOPIAM 官方文档安装 [TOPIAM安装部署](https://eiam.topiam.cn/docs/deployment/) 7 | 8 | # 创建 OIDC 应用 9 | 10 | ![创建 OIDC 应用](https://foruda.gitee.com/images/1734349076820315742/ccc3002d_5601833.png "创建 OIDC 应用") 11 | 12 | # 配置 OIDC 应用 13 | 14 | ![配置 OIDC 应用](https://foruda.gitee.com/images/1734349233857850169/74f96f61_5601833.png "配置 OIDC 应用") 15 | 16 | > 登录 Redirect URI 为 ${justauth.address}/social-callback?source=topiam, 例如 http://localhost:80/social-callback?source=topiam 17 | 18 | # 配置后端服务 19 | 20 | ![OIDC 参数信息](https://foruda.gitee.com/images/1734349496777724682/bd775f79_5601833.png "OIDC 参数信息") 21 | 22 | 找到框架 `application-环境.yml` 配置文件 23 | 24 | 修改 `topiam` 对应的 `client-id` 与 `client-secret` 25 | 26 | ```yaml 27 | justauth: 28 | # 前端外网访问地址 29 | address: http://localhost:80 30 | type: 31 | # topiam 应用配置信息,可在【应用详情】中找到 32 | topiam: 33 | # 应用编码 34 | server-url: http://localhost:1898/api/v1/authorize/nsml9fu7jwlzwkxnrrsrnqesswrq4xua 35 | # 客户端 ID 36 | client-id: 61ff33a6092c91bd1813765f8f42b316 37 | # 客户端秘钥 38 | client-secret: 397676e2fdb7ca8e57abe364267ffcdc 39 | # 登录 Redirect URI 40 | redirect-uri: ${justauth.address}/social-callback?source=topiam 41 | # 用户信息范围 42 | scopes: [openid, email, phone, profile] 43 | ``` 44 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/translation.md: -------------------------------------------------------------------------------- 1 | # 翻译功能 2 | - - - 3 | ## 框架版本 >= 1.6.0 4 | 5 | ## 引入依赖包 6 | 7 | ```xml 8 | 9 | com.ruoyi 10 | ruoyi-common-translation 11 | 12 | ``` 13 | 14 | ## 注解 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1675575648043199227/d04b3e21_1766278.png "屏幕截图") 17 | 18 | `@Translation` 翻译注解 用于实体类字段上
19 | `@TranslationType` 翻译类别注解 用于实现类上标注与 `@Translation` 注解相同的 `type` 类型 实现翻译功能 20 | 21 | 22 | ## 用法说明 23 | 24 | **注意:翻译功能基于序列化实现仅限于小数据量使用 不支持excel等大数据量操作 底层处理遍历处理查询实现最好走缓存** 25 | 26 | 默认提供功能 `用户id转账号(用户名)` `部门id转名称` `字典type转label` `ossId转url` 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1675575977860232549/143b74f8_1766278.png "屏幕截图") 29 | 30 | 用户名翻译(映射翻译) 根据另一个映射字段 翻译保存到此字段 31 | 32 | ![输入图片说明](https://foruda.gitee.com/images/1675576044011477847/13eb9f57_1766278.png "屏幕截图") 33 | 34 | ossUrl翻译(直接翻译) 直接根据此字段值翻译后替换此字段值 35 | 36 | ![输入图片说明](https://foruda.gitee.com/images/1675576265894720924/70792f66_1766278.png "屏幕截图") 37 | 38 | 字典翻译(其他扩展条件翻译) 根据`other`条件 自行定义如何使用 例如字典翻译`other`条件就是字典的唯一值 39 | 40 | ![输入图片说明](https://foruda.gitee.com/images/1675576391012282823/f95c5d78_1766278.png "屏幕截图") 41 | 42 | ## 自定义扩展 43 | 44 | 实现接口 `TranslationInterface` 标注注解 `@TranslationType` 可参考框架默认实现 45 | 46 | ![输入图片说明](https://foruda.gitee.com/images/1676735454308997001/cfcf3590_1766278.png "屏幕截图") 47 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/new_module.md: -------------------------------------------------------------------------------- 1 | # 创建新服务 2 | - - - 3 | ### 最简单的方式 4 | > 找个配置好的 例如 `ruoyi-system` 直接copy一份 5 | 6 | > 将 `pom` 名称改掉
7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1678980168782983123/c717e9ba_1766278.png "屏幕截图") 9 | 10 | > 服务启动类 名称改掉
11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1678980179829877203/f89d5c18_1766278.png "屏幕截图") 13 | 14 | > `application.yml` 配置服务应用名 改掉
15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1678980184047648028/e4c6c6cc_1766278.png "屏幕截图") 17 | 18 | > `nacos` 新建一份新的 对应新模块名称的 配置文件
19 | ![输入图片说明](https://foruda.gitee.com/images/1678980188806372269/cfd9731a_1766278.png "屏幕截图") 20 | 21 | 更改 `nacos` 上的 `ruoyi-gateway.yml` 增加新服务路由
22 | 新服务访问路径 `网关ip:端口/服务路径/controller路径/接口路径`
23 | 例子: `http://localhost:8080/system/user/list`
24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1666861595048863422/9e9755b3_1766278.png "屏幕截图") 26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1666861629037264535/bdfd5484_1766278.png "屏幕截图") 28 | 29 | ### 注意事项 30 | 如果是两个不同包名的模块 需要修改如下配置 31 | 32 | ![输入图片说明](https://foruda.gitee.com/images/1719813861680271619/82435586_1766278.png "屏幕截图") 33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1692006501957936219/059f8526_1766278.png "屏幕截图") 35 | 36 | 如果新服务需要使用 `seata` 分布式事务
37 | 需要在 `nacos` 上的 `seata-server.properties` 文件内增加服务组 38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1692006825427360840/5b9e410c_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/api_encrypt.md: -------------------------------------------------------------------------------- 1 | # API加解密 2 | - - - 3 | 4 | ## 重点声明 5 | 6 | **很多人问我 为啥要在前端放私钥 在这里解答一下** 7 | 8 | 首先 api加密功能主要是为了防止传输过程中拦截的 例如伪基站拦截 代理拦截等
9 | 其次 无论是放公钥 还是放私钥 最终前端都是要解密做展示的 也就是说 无论你放什么钥最终都是可以拿来做解密的这个没有区别
10 | 最主要的原因 是因为js并没有提供 也没有三方工具支持公钥解密 所以只能用私钥做解密(谁有或者知道有什么工具能做 可以告诉作者)
11 | 如果看了上述观点还是觉得作者搞的有问题 那你可以选择不用这个功能了 作者表示也没有办法 如果你有更好的解决方案 希望可以提供给作者共同进步
12 | 13 | ## 1:API 加密注解 `@ApiEncrypt` 14 | 1. 对于标注了 `@ApiEncrypt` 注解的接口,请求参数都必须进行加密。 15 | 2. 注解的参数 `response` 为响应加密标识,默认 `false` 不加密,为 `true` 表示响应加密。 16 | 3. 加密解密逻辑由过滤器实现,详情可参考 `org.dromara.common.encrypt.filter.CryptoFilter`。 17 | 18 | ## 2:API 加密配置 19 | `application.yml` 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1701131796468961065/83c464cd_4959041.png "屏幕截图") 22 | 23 | `.env.development` / `.env.production` 24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1709533252413969800/1d0dff25_1766278.png "屏幕截图") 26 | 27 | > 注: 28 | > 1. 公私钥与前端配置文件互为配对,如果需要更换请一同更换。 29 | > 2. 后端公钥对应前端私钥;后端私钥对应前端公钥。 30 | 31 | ## 3:前端开启加密 32 | 如果需要开启 API 加密,则需要修改 `request` 的 `headers` 内容: 33 | ```Javascript 34 | headers: { 35 | isEncrypt: true 36 | } 37 | ``` 38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1701137141916998346/5e839bbe_4959041.png "屏幕截图") 40 | 41 | ## 4.关于请求响应参数加解密说明 42 | 43 | 如何加解密请求响应参数看这里 -> [关于请求响应参数解密](/questions/api_encrypt.md) 44 | 45 | ## 密钥生成说明 46 | 47 | ![输入图片说明](https://foruda.gitee.com/images/1675577852271308699/9b30258e_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/api_encrypt.md: -------------------------------------------------------------------------------- 1 | # 数据加解密 2 | - - - 3 | 4 | ## 重点声明 5 | 6 | **很多人问我 为啥要在前端放私钥 在这里解答一下** 7 | 8 | 首先 api加密功能主要是为了防止传输过程中拦截的 例如伪基站拦截 代理拦截等
9 | 其次 无论是放公钥 还是放私钥 最终前端都是要解密做展示的 也就是说 无论你放什么钥最终都是可以拿来做解密的这个没有区别
10 | 最主要的原因 是因为js并没有提供 也没有三方工具支持公钥解密 所以只能用私钥做解密(谁有或者知道有什么工具能做 可以告诉作者)
11 | 如果看了上述观点还是觉得作者搞的有问题 那你可以选择不用这个功能了 作者表示也没有办法 如果你有更好的解决方案 希望可以提供给作者共同进步
12 | 13 | ## 1:API 加密注解 `@ApiEncrypt` 14 | 1. 对于标注了 `@ApiEncrypt` 注解的接口,请求参数都必须进行加密。 15 | 2. 注解的参数 `response` 为响应加密标识,默认 `false` 不加密,为 `true` 表示响应加密。 16 | 3. 加密解密逻辑由过滤器实现,详情可参考 `org.dromara.common.encrypt.filter.CryptoFilter`。 17 | 18 | ## 2:API 加密配置 19 | `application-common.yml` 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1701133628809355269/8979704a_4959041.png "屏幕截图") 22 | 23 | `.env.development` / `.env.production` 24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1709533252413969800/1d0dff25_1766278.png "屏幕截图") 26 | 27 | > 注: 28 | > 1. 注意修改 Nacos 配置。 29 | > 2. 公私钥与前端配置文件互为配对,如果需要更换请一同更换。 30 | > 3. 后端公钥对应前端私钥;后端私钥对应前端公钥。 31 | 32 | ## 3:前端开启加密 33 | 如果需要开启 API 加密,则需要修改 `request` 的 `headers` 内容: 34 | ```Javascript 35 | headers: { 36 | isEncrypt: true 37 | } 38 | ``` 39 | 40 | ![输入图片说明](https://foruda.gitee.com/images/1701137141916998346/5e839bbe_4959041.png "屏幕截图") 41 | 42 | ## 4.关于请求响应参数加解密说明 43 | 44 | 如何加解密请求响应参数看这里 -> [关于请求响应参数解密](/questions/api_encrypt.md) 45 | 46 | ## 密钥生成说明 47 | 48 | ![输入图片说明](https://foruda.gitee.com/images/1675577852271308699/9b30258e_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /plus-ui/devdoc/permissions_use.md: -------------------------------------------------------------------------------- 1 | # 权限使用 2 | 3 | - - - 4 | 5 | 封装了一个指令权限,能简单快速的实现按钮级别的权限判断。`v-permission` 6 | 7 | ### 使用权限字符串 `v-hasPermi` 8 | 9 | ```html 10 | 11 | 存在权限字符串才能看到 12 | 包含权限字符串才能看到 13 | ``` 14 | 15 | ### 使用角色字符串 `v-hasRole` 16 | 17 | ```html 18 | 19 | 管理员才能看到 20 | 包含角色才能看到 21 | ``` 22 | 23 | ### 使用自定义权限字符串 `v-hasPermiCustom` 24 | 25 | ```html 26 | 27 | 添加 28 | 删除 29 | ``` 30 | 31 | > **提示**:
32 | > 在某些情况下,它是不适合使用 v-hasPermi
33 | > 如元素标签组件,只能通过手动设置v-if。
34 | > 可以使用全局权限判断函数,用法和指令 v-hasPermi 类似。 35 | 36 | ```html 37 | 38 | 用户管理 39 | 参数管理 40 | 角色管理 41 | 定时任务 42 | 43 | ``` 44 | > **前端有了鉴权后端还需要鉴权吗?**:
45 | > 前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,为保证服务器安全,无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验! -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/extend/dynamic_datasource.md: -------------------------------------------------------------------------------- 1 | # 多数据源 2 | - - - 3 | 4 | ### 框架默认 mysql 其他数据库使用说明 5 | 6 | 找到 `ruoyi-admin` 模块在 pom 文件内增加对应的jdbc依赖 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1721098535176969987/d42870ca_1766278.png "屏幕截图") 9 | 10 | 11 | ### 关于多数据源事务 具体参考 `事务相关` 文档说明 12 | 13 | ### 多数据源框架功能介绍 14 | 多数据源框架官方文档: [dynamic-datasource文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611) 15 | 16 | * 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 17 | * 支持数据库敏感配置信息 加密 ENC()。 18 | * 支持每个数据库独立初始化表结构schema和数据库database。 19 | * 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 20 | * 支持 自定义注解 ,需继承DS(3.2.0+)。 21 | * 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。 22 | * 提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。 23 | * 提供 自定义数据源来源 方案(如全从数据库加载)。 24 | * 提供项目启动后 动态增加移除数据源 方案。 25 | * 提供Mybatis环境下的 纯读写分离 方案。 26 | * 提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。 27 | * 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。 28 | * 提供 基于seata的分布式事务方案。 29 | * 提供 本地多数据源事务方案。 附:不能和原生spring事务混用。 30 | 31 | ### 用法说明 32 | 33 | > 加载顺序 `方法 => 类 => 默认`
34 | 35 | ![输入图片说明](https://foruda.gitee.com/images/1678979069737596299/abe8ae7f_1766278.png "屏幕截图") 36 | 37 | ### 配置方式 38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1678979074000345758/b9238f0b_1766278.png "屏幕截图") 40 | 41 | ### 数据库异构 42 | 43 | 例如: `mysql + oracle` 参考对应多数据源框架文档 [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource) 44 | 45 | ![输入图片说明](https://foruda.gitee.com/images/1678979078387192317/2de94a78_1766278.png "屏幕截图") 46 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/extend/dynamic_datasource.md: -------------------------------------------------------------------------------- 1 | # 多数据源 2 | - - - 3 | 4 | ### 框架默认 mysql 其他数据库使用说明 5 | 6 | 找到 `ruoyi-common-mybatis` 模块在 pom 文件内增加对应的jdbc依赖 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1721098535176969987/d42870ca_1766278.png "屏幕截图") 9 | 10 | 11 | ### 关于多数据源事务 具体参考 `事务相关` 文档说明 12 | 13 | ### 多数据源框架功能介绍 14 | 多数据源框架官方文档: [dynamic-datasource文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611) 15 | 16 | * 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 17 | * 支持数据库敏感配置信息 加密 ENC()。 18 | * 支持每个数据库独立初始化表结构schema和数据库database。 19 | * 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 20 | * 支持 自定义注解 ,需继承DS(3.2.0+)。 21 | * 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。 22 | * 提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。 23 | * 提供 自定义数据源来源 方案(如全从数据库加载)。 24 | * 提供项目启动后 动态增加移除数据源 方案。 25 | * 提供Mybatis环境下的 纯读写分离 方案。 26 | * 提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。 27 | * 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。 28 | * 提供 基于seata的分布式事务方案。 29 | * 提供 本地多数据源事务方案。 附:不能和原生spring事务混用。 30 | 31 | ### 用法说明 32 | 33 | > 加载顺序 `方法 => 类 => 默认`
34 | 35 | ![输入图片说明](https://foruda.gitee.com/images/1678979069737596299/abe8ae7f_1766278.png "屏幕截图") 36 | 37 | ### 配置方式 38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1678979074000345758/b9238f0b_1766278.png "屏幕截图") 40 | 41 | ### 数据库异构 42 | 43 | 例如: `mysql + oracle` 参考对应多数据源框架文档 [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource) 44 | 45 | ![输入图片说明](https://foruda.gitee.com/images/1678979078387192317/2de94a78_1766278.png "屏幕截图") 46 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/prometheus_grafana.md: -------------------------------------------------------------------------------- 1 | # Prometheus+Grafana搭建 2 | - - - 3 | ## 基础搭建 4 | 5 | 参考文章: https://lionli.blog.csdn.net/article/details/127959009 6 | 7 | ## 框架内扩展 8 | 9 | 框架已经包含了 docker-compose 编排 执行如下命令启动容器即可 10 | 11 | ```shell 12 | docker-compose up -d prometheus grafana 13 | ``` 14 | 15 | ## 应用配置 16 | 17 | 各个服务引入 `ruoyi-common-prometheus` 模块 18 | 19 | ![输入图片说明](https://foruda.gitee.com/images/1668998415863943539/413dc560_1766278.png "屏幕截图") 20 | 21 | 修改 `prometheus.yml` 配置采集数据源 22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1668998433756761442/bf31c212_1766278.png "屏幕截图") 24 | 25 | 修改 `Nacos` 地址 与 `SpringBoot-Admin` 监控地址 用于数据采集
26 | 如都为本地应用则无需更改 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1668998317973042740/2d3590ec_1766278.png "屏幕截图") 29 | 30 | ## 导入框架特制模板 31 | **注意: 此处数据源名称必须与图片保持一致 不然会和模板对应不上导致无法读取数据**
32 | ![输入图片说明](https://foruda.gitee.com/images/1669866309495145064/1de987ce_1766278.png "屏幕截图") 33 | 34 | > 找到框架内的特制模板json文件 在grafana点击上传json文件 导入模板
35 | 36 | ![输入图片说明](https://foruda.gitee.com/images/1668998149634542527/f0881c8e_1766278.png "屏幕截图")
37 | ![输入图片说明](https://foruda.gitee.com/images/1668998179391197847/b1d3a630_1766278.png "屏幕截图") 38 | 39 | ## 选择查看监控 40 | 41 | 点击右侧菜单浏览 选择想要查看的监控即可 42 | 43 | ![输入图片说明](https://foruda.gitee.com/images/1668998515814170229/817ac8b0_1766278.png "屏幕截图")
44 | ![输入图片说明](https://foruda.gitee.com/images/1668998567335384306/acdf2833_1766278.png "屏幕截图")
45 | ![输入图片说明](https://foruda.gitee.com/images/1668998616894681785/ac27538b_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /plus-ui/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | - **满三年大力赞助** 3 | - 4 | - 5 | - 6 | - 7 | - 8 | 9 | * **简介** 10 | * [项目简介](/plus-ui/home.md) 11 | * **开发文档** 12 | * [通用方法](/plus-ui/devdoc/common_func.md) 13 | * [开发规范](/plus-ui/devdoc/dev_norm.md) 14 | * [请求流程](/plus-ui/devdoc/request_process.md) 15 | * [路由使用](/plus-ui/devdoc/router_use.md) 16 | * [组件使用](/plus-ui/devdoc/component_use.md) 17 | * [组件文档](/plus-ui/devdoc/component_doc.md) 18 | * [权限使用](/plus-ui/devdoc/permissions_use.md) 19 | * [页签缓存](/plus-ui/devdoc/page_cache.md) 20 | * [使用图标](/plus-ui/devdoc/icon_use.md) 21 | * [使用字典](/plus-ui/devdoc/dict_use.md) 22 | * [使用参数](/plus-ui/devdoc/param_use.md) 23 | * [异常处理](/plus-ui/devdoc/exception_handling.md) 24 | * [内容复制](/plus-ui/devdoc/content_copy.md) 25 | -------------------------------------------------------------------------------- /static/js/docsify-footer.min.js: -------------------------------------------------------------------------------- 1 | parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c 1. 框架采用 mybatis-plus 几乎支持大部分市面上的数据库且框架内几乎没有sql语句存在 4 |
5 | 所以不用担心兼容性问题(顶多就是有一些关键字什么的 对接很简单) 6 |
7 | > 2. 国产数据库大多都兼容主流三大数据库 mysql oracle postgresql 8 |
9 | 例如 达梦兼容oracle 人大金仓兼容mysql oceanbase兼容mysql 等等 10 | 11 | # 对接方式 12 | 13 | ### 这里用 `达梦` 数据库为例 14 | 15 | 1.首先增加 jdbc依赖包 `vue版本在ruoyi-admin模块下` `cloud版本在ruoyi-common-mybatis模块下` 16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1723288594335994875/216ae8e7_1766278.png "屏幕截图") 18 | 19 | 2.在配置文件yml内配置数据库连接 20 | 21 | ![输入图片说明](https://foruda.gitee.com/images/1723288760519808620/3db91ba5_1766278.png "屏幕截图") 22 | 23 | 3.sql脚本使用框架内自带的sql文件根据兼容的数据库模式 例如 达梦用oracle的sql脚本 24 | 25 | ![输入图片说明](https://foruda.gitee.com/images/1723289018873298537/4d95c892_1766278.png "屏幕截图") 26 | 27 | 4.在代码生成器内 增加对应的数据库生成器依赖 代码生成器使用 anyline 支持几百种数据库只需要增加对应的依赖即可 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1723288974693848785/3e8fc61f_1766278.png "屏幕截图") 30 | 31 | 这样基本就完成了所有需要做的事可以尝试启动项目了 32 | 33 | 5.如果项目启或者运行动过程中有sql报错 不要慌基本上都是一些关键字引起的 34 |
35 | 例如 达梦内的`domain`就是关键字 在我们的`SysOssConfig`表内使用`domain`进行自定义的域名存储 36 |
37 | 我们只需要在`SysOssConfig`实体类的`domain`属性增加一个注解即可解决此问题 38 |
39 | **注意: 各种数据库处理关键字的标识符不一样注意替换** 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1723289232470339283/480d5172_1766278.png "屏幕截图") 42 | 43 | 6.人大金仓注意事项 由于此数据库系统表与业务表不隔离(恶心) 表 `sys_user`冲突 44 | 45 | 解决方案1 将表名 `sys_user` 改为 `sys_user_info` 代码实体类 `SysUser` 上的数据库表名注解也改为 `sys_user_info` 即可 46 |
47 | 解决方案2 修改连接串配置 jdbc:kingbase8://localhost:54321/test?currentSchema=ry-cloud,sys,sys_catalog,pg_catalog -------------------------------------------------------------------------------- /plus-ui/devdoc/page_cache.md: -------------------------------------------------------------------------------- 1 | # 页签缓存 2 | 3 | - - - 4 | 5 | 框架的页签缓存机制是利用 Vue 的 `` 组件来实现的。`` 是 Vue 提供的一个抽象组件,用于缓存不活动的组件实例,而不是每次切换时都销毁它们。这样,当用户切换回之前访问过的标签页时,可以避免重新渲染,从而提高应用的性能。 6 | 以下是如何在这个框架中实现页签缓存的步骤: 7 | 1. **路由和组件命名一致**: 8 | - 路由配置和对应的视图组件必须有一个相同的 `name` 属性。这是因为 `` 默认是根据组件的 `name` 来决定哪些组件需要被缓存的。 9 | 2. **路由配置**: 10 | - 在路由配置中,每个路由对象都有一个 `name` 属性,这个属性对应于其视图组件的 `name`。 11 | ```typescript 12 | { 13 | path: 'config', 14 | component: () => import('@/views/system/config/index'), 15 | name: 'Config', 16 | meta: { title: '参数设置', icon: 'edit' } 17 | } 18 | ``` 19 | 3. **视图组件**: 20 | - 视图组件也必须有一个 `name` 属性,且其值必须与路由配置中的 `name` 属性相同。 21 | ```typescript 22 | // system/config/index.vue 23 | export default { 24 | name: 'Config' 25 | } 26 | ``` 27 | 4. **使用 ``**: 28 | - 在应用的根组件或路由视图组件中,使用 `` 包裹 ``,如下所示: 29 | ```html 30 | 35 | ``` 36 | 5. **配置页签缓存**: 37 | - 根据提示,系统管理-菜单管理中可以配置菜单页签是否缓存。这意味着框架可能允许管理员通过配置来决定哪些页签应该被缓存。 38 | 6. **动态缓存**: 39 | - 如果需要更细粒度的控制,可以使用 `` 的 `include` 或 `exclude` 属性来动态指定哪些组件应该被缓存。 40 | ```html 41 | 42 | 43 | 44 | ``` 45 | 在这个例子中,`cachedViews` 是一个包含所有应该被缓存的组件名称的数组。 46 | 总结来说,页签缓存机制依赖于 Vue 的 `` 组件,通过确保路由和组件的 `name` 属性一致,以及通过配置来控制哪些页签应该被缓存。这种方法可以提高用户体验,减少不必要的页面加载时间。
47 | > 具体实现可阅读源码:`src/layout/components/AppMain.vue` -------------------------------------------------------------------------------- /plus-ui/devdoc/request_process.md: -------------------------------------------------------------------------------- 1 | # 请求流程 2 | - - - 3 | 4 | ### 交互流程 5 | 一个完整的前端UI交互到服务器端处理流程是这样的: 6 | 7 | 1. UI 组件交互操作; 8 | 2. 调用统一管理的 api service 请求函数; 9 | 3. 使用封装的 request.js 发送请求; 10 | 4. 获取服务端返回; 11 | 5. 更新 data; 12 | 13 | 为了方便管理维护,统一的请求处理都放在`@/src/api`文件夹中,并且一般按照`model`维度进行拆分文件,如: 14 | ``` 15 | api/ 16 | system/ 17 | user/ 18 | index.ts 19 | types.ts 20 | role/ 21 | index.ts 22 | types.ts 23 | monitor/ 24 | operlog/ 25 | index.ts 26 | types.ts 27 | logininfor/ 28 | index.ts 29 | types.ts 30 | ... 31 | ``` 32 | > **提示** 33 | > 其中`@/src/utils/request.ts`是基于 axios 的封装,便于统一处理 POST,GET 等请求参数,请求头,以及错误提示信息等。 它封装了全局request拦截器、response拦截器、统一的错误处理、统一做了超时处理、baseURL设置等。 34 | 35 | ### 请求示例 36 | ```typescript 37 | // @/api/system/user/index.ts 38 | import request from '@/utils/request'; 39 | import { AxiosPromise } from 'axios'; 40 | import { UserQuery, UserVO } from './types'; 41 | 42 | export const listUser = (query: UserQuery): AxiosPromise => { 43 | return request({ 44 | url: '/system/user/list', 45 | method: 'get', 46 | params: query 47 | }); 48 | }; 49 | 50 | // @/views/system/user/index.vue 51 | import api from '@/api/system/user'; 52 | const res = await api.listUser(proxy?.addDateRange(queryParams.value, dateRange.value)); 53 | ``` 54 | > **提示** 55 | > 如果有不同的`baseURL`,直接通过覆盖的方式,让它具有不同的`baseURL`。 56 | > ```typescript 57 | > export const listUser = (query: UserQuery): AxiosPromise => { 58 | > return request({ 59 | > url: '/system/user/list', 60 | > method: 'get', 61 | > params: query, 62 | > baseURL: process.env.BASE_API 63 | > }); 64 | > }; 65 | > ``` 66 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/association/i18n.md: -------------------------------------------------------------------------------- 1 | # 国际化方案 2 | - - - 3 | * 前端国际化参考 [ruoyi前端国际化文档](http://doc.ruoyi.vip/ruoyi-vue/document/htsc.html#前端国际化流程)
4 | * 参考 `demo` 模块 `TestI18nController` 国际化演示案例 5 | 在 `Header` 请求头 增加上下文语言参数 `content-language` 参数需与国际化配置文件后缀对应 6 | 如 `zh_CN` `en_US` 等
7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1678976722892396585/60917594_1766278.png "屏幕截图") 9 | 10 | ## 获取 `code` 对应国际化内容 11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1678976728533100954/0ab8e36a_1766278.png "屏幕截图")
13 | ![输入图片说明](https://foruda.gitee.com/images/1678976733019209506/a16574d6_1766278.png "屏幕截图")
14 | ![输入图片说明](https://foruda.gitee.com/images/1678976738409745057/a073b425_1766278.png "屏幕截图") 15 | 16 | ## 使用 `Validator` 框架校验 `controller` 参数返回国际化 17 | 18 | `controller` 校验接口参数 需要在类增加 `@Validated` 注解
19 | ![输入图片说明](https://foruda.gitee.com/images/1678976741834729507/6c19b9cc_1766278.png "屏幕截图")
20 | 参数对应校验注解 使用 `{code}` 形式标注使用国际化处理
21 | ![输入图片说明](https://foruda.gitee.com/images/1678976746093285542/ad0989db_1766278.png "屏幕截图")
22 | ![输入图片说明](https://foruda.gitee.com/images/1678976750822808564/56bd60d7_1766278.png "屏幕截图")
23 | ![输入图片说明](https://foruda.gitee.com/images/1678976754755107198/b89bf173_1766278.png "屏幕截图") 24 | 25 | ## 使用 `Validator` 框架校验 `Bean` 返回国际化 26 | 27 | `Bean` 校验需要在接口校验 `Bean` 参数使用 `@Validated` 注解
28 | ![输入图片说明](https://foruda.gitee.com/images/1678976761015767874/729da3bc_1766278.png "屏幕截图")
29 | `Bean` 内属性校验注解 使用 `{code}` 形式标注使用国际化处理
30 | ![输入图片说明](https://foruda.gitee.com/images/1678976765122587920/0b1027af_1766278.png "屏幕截图")
31 | ![输入图片说明](https://foruda.gitee.com/images/1678976769965314387/0c416ede_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/snail_job_init.md: -------------------------------------------------------------------------------- 1 | # 搭建SnailJob任务调度中心(5.2.0新功能) 2 | - - - 3 | 4 | ### 视频介绍 5 | 6 | [Snail job任务调度中心:轻松掌握任务管理、重试机制和任务编排](https://www.bilibili.com/video/BV19i421m7GL/) 7 | 8 | ### 配置调度中心客户端 9 | > 修改主服务配置文件 10 | > 11 | 12 | ![输入图片说明](https://foruda.gitee.com/images/1687656939847353725/951c1af7_1766278.png "屏幕截图") 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1716174758437043952/de28db71_1766278.png "屏幕截图") 15 | 16 | * `enabled` 可启用或关闭客户端注册 17 | * `server.address` 为调度中心地址 18 | * `server.port` 为调度中心通信端口 19 | * `token` 为组通信校验token(可在调度中心组配置更换) 20 | * `group-name` 为执行器组 21 | * `namespace` 作用域(不同作用域相互隔离请勿填错) 22 | 23 | ### 启用调度中心 24 | **需执行 ry_job.sql 默认账号 `admin` 默认密码 `admin` 账号在数据库里 可以在页面修改密码** 25 |
26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1726801238503062021/a030616f_1766278.png "屏幕截图") 28 | 29 | > 在 `ruoyi-extend -> ruoyi-snailjob-server` 模块启动 30 | > 31 | ![输入图片说明](https://foruda.gitee.com/images/1716174842485474283/78cec86d_1766278.png "屏幕截图") 32 | 33 | > 需修改配置文件数据库连接地址(**注意: 此处为ruoyi-snailjob-server服务的配置文件 支持多种不同数据库**) 34 | > 35 | ![输入图片说明](https://foruda.gitee.com/images/1714356048711590477/13289085_1766278.png "屏幕截图") 36 | 37 | ### 快速入门 38 | 39 | [Snailjob快速入门 基本使用介绍](https://juejin.cn/post/7412955032092442675) 40 | 41 | ### 前端修改任务调度中心访问路径 42 | `dev`环境 默认使用 `.env.development` 配置文件内地址 43 | 44 | ![输入图片说明](https://foruda.gitee.com/images/1716174933143893408/58d47bbc_1766278.png "屏幕截图") 45 | 46 | `prod`环境 使用 `.env.production` 本机路由 47 | 48 | ![输入图片说明](https://foruda.gitee.com/images/1716174973454805690/0d6f20fb_1766278.png "屏幕截图") 49 | 50 | 故而 `prod` 环境只需更改 `nginx` 反向代理路径即可 51 | 52 | ![输入图片说明](https://foruda.gitee.com/images/1716174998979181179/2f9e4e4a_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /questions/kinfe4j.md: -------------------------------------------------------------------------------- 1 | # 对接前声明 2 | 3 | 经常有小伙伴希望可以对接 knife4j 4 | 5 | 那么这里将介绍如何使用 框架生成的 openapi 对接 knife4j 6 | 7 | # 如何对接 8 | 9 | **重点声明: 本框架生成标准openapi结构 如对接后遇到不好用等问题 皆与本框架无关** 10 | 11 | knife4j 本身提供了独立的文档中间件 可以零成本的介入 openapi 12 | 13 | 文档地址: https://doc.xiaominfo.com/docs/middleware-sources 14 | 15 | **注意: 此组件应单独搞一个boot项目 不要往框架里做任何代码上的更改** 16 | 17 | 使用文档提供的 Cloud 模式 对接咱们框架的 openapi 地址即可完成对接 18 | 19 | ![输入图片说明](https://foruda.gitee.com/images/1685953873117929554/22dce56e_1766278.png "屏幕截图") 20 | 21 | vue版本对接配置如下: 22 | 23 | ```yml 24 | knife4j: 25 | enable-aggregation: true 26 | cloud: 27 | enable: true 28 | routes: 29 | - name: 演示模块 30 | uri: localhost:8080 31 | location: /v3/api-docs/1.演示模块 32 | - name: 系统模块 33 | uri: localhost:8080 34 | location: /v3/api-docs/2.系统模块 35 | - name: 代码生成模块 36 | uri: localhost:8080 37 | location: /v3/api-docs/3.代码生成模块 38 | ``` 39 | 40 | cloud版本对接配置如下: 41 | 42 | ```yml 43 | knife4j: 44 | enable-aggregation: true 45 | cloud: 46 | enable: true 47 | routes: 48 | - name: 演示模块 49 | uri: localhost:8080 50 | location: /demo/v3/api-docs 51 | - name: 认证服务 52 | uri: localhost:8080 53 | location: /auth/v3/api-docs 54 | - name: 资源服务 55 | uri: localhost:8080 56 | location: /resource/v3/api-docs 57 | - name: 系统服务 58 | uri: localhost:8080 59 | location: /system/v3/api-docs 60 | - name: 监控服务 61 | uri: localhost:8080 62 | location: /monitor/v3/api-docs 63 | - name: 代码生成服务 64 | uri: localhost:8080 65 | location: /gen/v3/api-docs 66 | ``` -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/association/i18n.md: -------------------------------------------------------------------------------- 1 | # 国际化方案 2 | - - - 3 | * 前端国际化参考 [ruoyi前端国际化文档](http://doc.ruoyi.vip/ruoyi-vue/document/htsc.html#前端国际化流程)
4 | * 后端国际化(2.7.0 以上增加) 5 | * 3.4.0 以上支持 `Validator` 校验框架 6 | * 参考 `demo` 模块 `TestI18nController` 国际化演示案例 7 | 在 `Header` 请求头 增加上下文语言参数 `content-language` 参数需与国际化配置文件后缀对应 8 | 如 `zh_CN` `en_US` 等
9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1678976722892396585/60917594_1766278.png "屏幕截图") 11 | 12 | ## 获取 `code` 对应国际化内容 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1678976728533100954/0ab8e36a_1766278.png "屏幕截图")
15 | ![输入图片说明](https://foruda.gitee.com/images/1678976733019209506/a16574d6_1766278.png "屏幕截图")
16 | ![输入图片说明](https://foruda.gitee.com/images/1678976738409745057/a073b425_1766278.png "屏幕截图") 17 | 18 | ## 使用 `Validator` 框架校验 `controller` 参数返回国际化 19 | 20 | `controller` 校验接口参数 需要在类增加 `@Validated` 注解
21 | ![输入图片说明](https://foruda.gitee.com/images/1678976741834729507/6c19b9cc_1766278.png "屏幕截图")
22 | 参数对应校验注解 使用 `{code}` 形式标注使用国际化处理
23 | ![输入图片说明](https://foruda.gitee.com/images/1678976746093285542/ad0989db_1766278.png "屏幕截图")
24 | ![输入图片说明](https://foruda.gitee.com/images/1678976750822808564/56bd60d7_1766278.png "屏幕截图")
25 | ![输入图片说明](https://foruda.gitee.com/images/1678976754755107198/b89bf173_1766278.png "屏幕截图") 26 | 27 | ## 使用 `Validator` 框架校验 `Bean` 返回国际化 28 | 29 | `Bean` 校验需要在接口校验 `Bean` 参数使用 `@Validated` 注解
30 | ![输入图片说明](https://foruda.gitee.com/images/1678976761015767874/729da3bc_1766278.png "屏幕截图")
31 | `Bean` 内属性校验注解 使用 `{code}` 形式标注使用国际化处理
32 | ![输入图片说明](https://foruda.gitee.com/images/1678976765122587920/0b1027af_1766278.png "屏幕截图")
33 | ![输入图片说明](https://foruda.gitee.com/images/1678976769965314387/0c416ede_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /static/js/docsify-scroll-to-top.min.js: -------------------------------------------------------------------------------- 1 | var CONFIG={auto:true,text:"Top",right:15,bottom:15,offset:500};var install=function(hook,vm){var opts=vm.config.scrollToTop||CONFIG;CONFIG.auto=opts.auto&&typeof opts.auto==="boolean"?opts.auto:CONFIG.auto;CONFIG.text=opts.text&&typeof opts.text==="string"?opts.text:CONFIG.text;CONFIG.right=opts.right&&typeof opts.right==="number"?opts.right:CONFIG.right;CONFIG.bottom=opts.bottom&&typeof opts.bottom==="number"?opts.bottom:CONFIG.bottom;CONFIG.offset=opts.offset&&typeof opts.offset==="number"?opts.offset:CONFIG.offset;var onScroll=function(e){if(!CONFIG.auto){return}var offset=window.document.documentElement.scrollTop;var $scrollBtn=Docsify.dom.find("span.scroll-to-top");$scrollBtn.style.display=offset>=CONFIG.offset?"block":"none"};hook.mounted(function(){var scrollBtn=document.createElement("span");scrollBtn.className="scroll-to-top";scrollBtn.style.display=CONFIG.auto?"none":"block";scrollBtn.style.overflow="hidden";scrollBtn.style.position="fixed";scrollBtn.style.right=CONFIG.right+"px";scrollBtn.style.bottom=CONFIG.bottom+"px";scrollBtn.style.width="50px";scrollBtn.style.height="50px";scrollBtn.style.background="white";scrollBtn.style.color="#666";scrollBtn.style.border="1px solid #ddd";scrollBtn.style.borderRadius="4px";scrollBtn.style.lineHeight="42px";scrollBtn.style.fontSize="16px";scrollBtn.style.textAlign="center";scrollBtn.style.boxShadow="0px 0px 6px #eee";scrollBtn.style.cursor="pointer";var textNode=document.createTextNode(CONFIG.text);scrollBtn.appendChild(textNode);document.body.appendChild(scrollBtn);window.addEventListener("scroll",onScroll);scrollBtn.onclick=function(e){e.stopPropagation();var step=window.scrollY/15;var scroll=function(){window.scrollTo(0,window.scrollY-step);if(window.scrollY>0){setTimeout(scroll,15)}};scroll()}})};$docsify.plugins=[].concat(install,$docsify.plugins); -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/user.md: -------------------------------------------------------------------------------- 1 | # 系统用户相关 2 | - - - 3 | 4 | > 框架采用sa-token控制权限 并对sa-token的api做了一定的业务封装
5 | 6 | ## 用户登录 7 | 8 | > 参考自带多种登录实现 不限制用户数据来源 只需要构建 LoginUser 即可完成登录
9 | > 例如: `同表不同类型` `不同表` `同表+扩展表`
10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1699590555824776931/63d493fc_1766278.png "屏幕截图") 12 | 13 | ## 获取用户信息 14 | 15 | > 完成登录后会生成登录token返回给前端 前端需要再请求头携带token 后端方可获取到对应的用户信息 16 | 17 | 请求头传递格式: `Authorization: Bearer token` 18 | 19 | 后端获取用户信息: 20 | ```java 21 | LoginUser user = LoginHelper.getLoginUser(); 22 | ``` 23 | 24 | ## 获取用户信息(基于token) 25 | ```java 26 | LoginUser user = LoginHelper.getLoginUser(token); 27 | ``` 28 | 29 | ## 获取登录用户id 30 | ```java 31 | Long userId = LoginHelper.getUserId(); 32 | ``` 33 | 34 | ## 获取登录用户账户名 35 | ```java 36 | String username = LoginHelper.getUsername(); 37 | ``` 38 | 39 | ## 获取登录用户所属租户id 40 | ```java 41 | String tenantId = LoginHelper.getTenantId(); 42 | ``` 43 | 44 | ## 获取登录用户所属部门id 45 | ```java 46 | Long deptId = LoginHelper.getDeptId(); 47 | ``` 48 | 49 | ## 获取登录用户类型 50 | ```java 51 | UserType userType = LoginHelper.getUserType(); 52 | ``` 53 | 54 | ## 获取登录用户其他扩展属性 55 | ```java 56 | Object obj = LoginHelper.getExtra(key); 57 | ``` 58 | 59 | ## 设置登录用户其他扩展属性 60 | 61 | 参考登录设置 `clientId` 属性 62 | 63 | ![输入图片说明](https://foruda.gitee.com/images/1699591164562734430/42730add_1766278.png "屏幕截图") 64 | 65 | ## 判断用户是否为超级管理员 66 | 67 | ```java 68 | // 判断当前登录用户 69 | boolean b = LoginHelper.isSuperAdmin(); 70 | // 判断用户基于id 71 | boolean b = LoginHelper.isSuperAdmin(userId); 72 | ``` 73 | 74 | ## 判断用户是否为租户管理员 75 | 76 | ```java 77 | // 判断当前登录用户 78 | boolean b = LoginHelper.isTenantAdmin(); 79 | // 判断用户基于角色组 80 | boolean b = LoginHelper.isSuperAdmin(rolePermission); 81 | ``` 82 | 83 | ## 其他更多操作 84 | [Sa-Token 官方文档 - 登录认证](https://sa-token.cc/doc.html#/use/login-auth) 85 | 86 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/user.md: -------------------------------------------------------------------------------- 1 | # 系统用户相关 2 | - - - 3 | 4 | > 框架采用sa-token控制权限 并对sa-token的api做了一定的业务封装
5 | 6 | ## 用户登录 7 | 8 | > 参考自带多种登录实现 不限制用户数据来源 只需要构建 LoginUser 即可完成登录
9 | > 例如: `同表不同类型` `不同表` `同表+扩展表`
10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1699590555824776931/63d493fc_1766278.png "屏幕截图") 12 | 13 | ## 获取用户信息 14 | 15 | > 完成登录后会生成登录token返回给前端 前端需要再请求头携带token 后端方可获取到对应的用户信息 16 | 17 | 请求头传递格式: `Authorization: Bearer token` 18 | 19 | 后端获取用户信息: 20 | ```java 21 | LoginUser user = LoginHelper.getLoginUser(); 22 | ``` 23 | 24 | ## 获取用户信息(基于token) 25 | ```java 26 | LoginUser user = LoginHelper.getLoginUser(token); 27 | ``` 28 | 29 | ## 获取登录用户id 30 | ```java 31 | Long userId = LoginHelper.getUserId(); 32 | ``` 33 | 34 | ## 获取登录用户账户名 35 | ```java 36 | String username = LoginHelper.getUsername(); 37 | ``` 38 | 39 | ## 获取登录用户所属租户id 40 | ```java 41 | String tenantId = LoginHelper.getTenantId(); 42 | ``` 43 | 44 | ## 获取登录用户所属部门id 45 | ```java 46 | Long deptId = LoginHelper.getDeptId(); 47 | ``` 48 | 49 | ## 获取登录用户类型 50 | ```java 51 | UserType userType = LoginHelper.getUserType(); 52 | ``` 53 | 54 | ## 获取登录用户其他扩展属性 55 | ```java 56 | Object obj = LoginHelper.getExtra(key); 57 | ``` 58 | 59 | ## 设置登录用户其他扩展属性 60 | 61 | 参考登录设置 `clientId` 属性 62 | 63 | ![输入图片说明](https://foruda.gitee.com/images/1699591164562734430/42730add_1766278.png "屏幕截图") 64 | 65 | ## 判断用户是否为超级管理员 66 | 67 | ```java 68 | // 判断当前登录用户 69 | boolean b = LoginHelper.isSuperAdmin(); 70 | // 判断用户基于id 71 | boolean b = LoginHelper.isSuperAdmin(userId); 72 | ``` 73 | 74 | ## 判断用户是否为租户管理员 75 | 76 | ```java 77 | // 判断当前登录用户 78 | boolean b = LoginHelper.isTenantAdmin(); 79 | // 判断用户基于角色组 80 | boolean b = LoginHelper.isSuperAdmin(rolePermission); 81 | ``` 82 | 83 | ## 其他更多操作 84 | [Sa-Token 官方文档 - 登录认证](https://sa-token.cc/doc.html#/use/login-auth) 85 | 86 | -------------------------------------------------------------------------------- /questions/login_step.md: -------------------------------------------------------------------------------- 1 | # 关于登录调试步骤 2 | 3 | ## 1:关闭 api 接口加密 4 | 5 | 1. 修改后端配置文件 `application.yml` 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1717037518256330645/c5a9f0fc_4959041.png "屏幕截图") 8 | 9 | 2. 修改前端配置文件 `.env.development` | `.env.production` 10 | 11 | ![输入图片说明](https://foruda.gitee.com/images/1717037555118359683/0e73a369_4959041.png "屏幕截图") 12 | 13 | ## 2:登录参数 14 | 15 | ![输入图片说明](https://foruda.gitee.com/images/1717038201634120005/e02882d3_4959041.png "屏幕截图") 16 | 17 | |参数名|说明| 18 | |---|---| 19 | |tenantId| 租户id | 20 | |username| 用户名 | 21 | |password| 密码 | 22 | |rememberMe| 记住密码 | 23 | |uuid| - | 24 | |code| 验证码结果 | 25 | |clientId| 客户端id(表 sys_client) | 26 | |grantType| 授权类型(表 sys_client) | 27 | 28 | ## 3:使用接口文档调试 29 | 30 | ### 3.1:使用接口文档请求 31 | 32 | 1. 配置接口文档([参考文档](/ruoyi-vue-plus/framework/association/doc)) 33 | 2. 请求接口 `http://localhost:8080/auth/login` 34 | 35 | ![输入图片说明](https://foruda.gitee.com/images/1717039200581756307/97efbc9c_4959041.png "屏幕截图") 36 | 37 | ### 3.2:使用 idea 请求 38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1717039459944753490/040d2b9d_4959041.png "屏幕截图") 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1717039534863944601/df91df67_4959041.png "屏幕截图") 42 | 43 | ![输入图片说明](https://foruda.gitee.com/images/1717039598067298052/cc9fe61b_4959041.png "屏幕截图") 44 | 45 | ### 3.3:获取验证码以及 uuid 46 | 47 | !> 验证码以及 uuid 获取方式: Redis | 控制台 48 | 49 | 方式一、Redis: 50 | 51 | ![输入图片说明](https://foruda.gitee.com/images/1717040260329977942/42f7ed62_4959041.png "屏幕截图") 52 | 53 | > **如果没有验证码相关 key,说明已经过期被清理了,去前端页面刷新一下即可。** 54 | 55 | 方式二、控制台: 56 | 57 | ![输入图片说明](https://foruda.gitee.com/images/1717040428227070908/1ef7562a_4959041.png "屏幕截图") 58 | 59 | ### 3.4:关闭验证码 60 | 61 | 如果嫌验证码太麻烦,可以关闭,修改后端配置文件 `application.yml` 62 | 63 | ![输入图片说明](https://foruda.gitee.com/images/1717040533266608114/054fd984_4959041.png "屏幕截图") 64 | 65 | ![输入图片说明](https://foruda.gitee.com/images/1717040745251872562/374267e8_4959041.png "屏幕截图") 66 | 67 | 请求参数: 68 | 69 | ![输入图片说明](https://foruda.gitee.com/images/1717040762860943102/81c9b44a_4959041.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/idea_environment.md: -------------------------------------------------------------------------------- 1 | # idea环境配置 2 | - - - 3 | ## 配置项目编码 4 | ![输入图片说明](https://foruda.gitee.com/images/1662107706295343419/e27065a9_1766278.png "屏幕截图") 5 | 6 | ## 编译内存(重点注意事项 一旦内存不够会出现各种编译报错 找不到类等等问题) 7 | ![输入图片说明](https://foruda.gitee.com/images/1764139559795286358/197fd546_1766278.png "屏幕截图") 8 | 9 | ## 配置运行看板 10 | ![输入图片说明](https://foruda.gitee.com/images/1662108673306567278/8af97b47_1766278.png "屏幕截图") 11 | ### 配置spring与docker看板 12 | ![输入图片说明](https://foruda.gitee.com/images/1662111392476935892/6b6760fb_1766278.png "屏幕截图") 13 | ![输入图片说明](https://foruda.gitee.com/images/1662108865191892425/3c045999_1766278.png "屏幕截图") 14 | ![输入图片说明](https://foruda.gitee.com/images/1662108877322329668/ddb6d93d_1766278.png "屏幕截图") 15 | ![输入图片说明](https://foruda.gitee.com/images/1662108894122798039/6a53a38c_1766278.png "屏幕截图") 16 | 17 | ## 配置服务器SSH连接 18 | 进入 `Settings -> Tools -> SSH Configurations` 点击加号创建SSH连接配置
19 | 填写 服务器IP 用户名 密码 端口号 点击 Test Connection 测试连接
20 | ![输入图片说明](https://foruda.gitee.com/images/1662107776533098115/bd78467b_1766278.png "屏幕截图") 21 | 使用Terminal 工具 点击箭头找到上方创建的SSH连接配置
22 | 选择即可进入SSH连接界面 在这里可以对服务器进行命令操作
23 | ![输入图片说明](https://foruda.gitee.com/images/1662108010120640495/c70f9f9a_1766278.png "屏幕截图") 24 | 25 | ## 配置服务器FTP连接 26 | 进入 `Settings -> Build-> Deployment` 点击加号 选择SFTP 创建 FTP 连接配置
27 | 选择之前创建好的SSH配置 点击 Test Connection 测试连接
28 | ![输入图片说明](https://foruda.gitee.com/images/1662107899553257979/e2eeb7fd_1766278.png "屏幕截图") 29 | 在IDEA上方工具栏 找到 `Tools -> Deployment -> Browse Remote Host` 打开远程界面
30 | 点击箭头找到我们上方配置的SFTP连接配置 即可连接到服务器的文件目录
31 | ![输入图片说明](https://foruda.gitee.com/images/1662107974682787233/b8a601fd_1766278.png "屏幕截图") 32 | 33 | ## 配置Docker连接 34 | ### 可操作远程docker与构建上传docker镜像(代替原来maven docker插件) 35 | tcp连接需要开放服务器2375端口
36 | ssh需要使用上方的SSH连接配置
37 | 建议使用SSH连接
38 | ![输入图片说明](https://foruda.gitee.com/images/1662108188005932060/75872bf8_1766278.png "屏幕截图") 39 | 配置好之后 在运行窗口会多出一个Docker图标 双击即可连接远程docker
40 | 可以查看容器实时日志 启动 重启 停止 等操作
41 | ![输入图片说明](https://foruda.gitee.com/images/1662108250902891875/b82d022b_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/social.md: -------------------------------------------------------------------------------- 1 | # 第三方授权功能 2 | - - - 3 | ## 版本 >= 2.X 4 | 5 | ## 前置说明 6 | 1. 该功能基于 `JustAuth` 实现,支持多家平台实现第三方授权登录。 7 | 2. 以 `Gitee` 授权登录为例进行本功能的使用说明。 8 | 3. 其他第三方授权配置信息获取方式可参考 `JustAuth` [官方文档](https://www.justauth.cn/guide/)。
9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1690937097426867003/91d80587_4959041.png "屏幕截图") 11 | 12 | ## 第三方授权配置 13 | 14 | ### 申请三方应用(以gitee为例) 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1700641775779304627/1cf1b56f_1766278.png "屏幕截图") 17 | 18 | ### 更改后端配置 `application-dev.yml` 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1690936741844431943/580f8998_4959041.png "屏幕截图") 21 | 22 | **注:内网地址无法回调,请使用外网可以访问的地址。** 23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1690940457570856867/ce22df18_4959041.png "屏幕截图") 25 | 26 | ### 更改前端配置 `login.vue` 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1690937306197173754/5c1ece29_4959041.png "屏幕截图") 29 | 30 | ## 授权登录(未绑定第三方平台) 31 | 32 | ### 步骤一:个人中心授权第三方应用 33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1690938449386201097/ea375106_4959041.png "屏幕截图") 35 | 36 | ### 步骤二:同意授权 37 | 38 | ![输入图片说明](https://foruda.gitee.com/images/1690938522418523183/81b327bf_4959041.png "屏幕截图") 39 | 40 | 顶部出现授权成功,并跳转到系统首页。
41 | 42 | ![输入图片说明](https://foruda.gitee.com/images/1690938559178527841/563168e4_4959041.png "屏幕截图")
43 | 44 | ![输入图片说明](https://foruda.gitee.com/images/1690938636375977741/8ceb77cf_4959041.png "屏幕截图") 45 | 46 | 查看第三方应用可看到授权成功的个人信息。
47 | 48 | ![输入图片说明](https://foruda.gitee.com/images/1690938725512311321/5532a2a9_4959041.png "屏幕截图") 49 | 50 | ## 授权登录(已绑定第三方平台) 51 | 52 | ### 步骤一:点击登录页面图标 53 | 54 | ![输入图片说明](https://foruda.gitee.com/images/1690938908352243992/fd044381_4959041.png "屏幕截图") 55 | 56 | ### 步骤二:同意授权 57 | 58 | ![输入图片说明](https://foruda.gitee.com/images/1690938522418523183/81b327bf_4959041.png "屏幕截图") 59 | 60 | ## 解除授权绑定 61 | 62 | ### 步骤一:个人中心点击解绑第三方应用 63 | 64 | ![输入图片说明](https://foruda.gitee.com/images/1690939087877969002/4ef324e7_4959041.png "屏幕截图") 65 | 66 | ### 步骤二:点击确定完成解绑 67 | 68 | ![输入图片说明](https://foruda.gitee.com/images/1690939108017661775/7236088d_4959041.png "屏幕截图") 69 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/social.md: -------------------------------------------------------------------------------- 1 | # 第三方授权功能 2 | - - - 3 | ## 版本 >= 5.X 4 | 5 | ## 前置说明 6 | 1. 该功能基于 `JustAuth` 实现,支持多家平台实现第三方授权登录。 7 | 2. 以 `Gitee` 授权登录为例进行本功能的使用说明。 8 | 3. 其他第三方授权配置信息获取方式可参考 `JustAuth` [官方文档](https://www.justauth.cn/guide/)。
9 | 10 | ![输入图片说明](https://foruda.gitee.com/images/1690937097426867003/91d80587_4959041.png "屏幕截图") 11 | 12 | ## 第三方授权配置 13 | 14 | ### 申请三方应用(以gitee为例) 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1700641775779304627/1cf1b56f_1766278.png "屏幕截图") 17 | 18 | ### 更改后端配置 `application-dev.yml` 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1690936741844431943/580f8998_4959041.png "屏幕截图") 21 | 22 | **注:内网地址无法回调,请使用外网可以访问的地址。** 23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1690940457570856867/ce22df18_4959041.png "屏幕截图") 25 | 26 | ### 更改前端配置 `login.vue` 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1690937306197173754/5c1ece29_4959041.png "屏幕截图") 29 | 30 | ## 授权登录(未绑定第三方平台) 31 | 32 | ### 步骤一:个人中心授权第三方应用 33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1690938449386201097/ea375106_4959041.png "屏幕截图") 35 | 36 | ### 步骤二:同意授权 37 | 38 | ![输入图片说明](https://foruda.gitee.com/images/1690938522418523183/81b327bf_4959041.png "屏幕截图") 39 | 40 | 顶部出现授权成功,并跳转到系统首页。
41 | 42 | ![输入图片说明](https://foruda.gitee.com/images/1690938559178527841/563168e4_4959041.png "屏幕截图")
43 | 44 | ![输入图片说明](https://foruda.gitee.com/images/1690938636375977741/8ceb77cf_4959041.png "屏幕截图") 45 | 46 | 查看第三方应用可看到授权成功的个人信息。
47 | 48 | ![输入图片说明](https://foruda.gitee.com/images/1690938725512311321/5532a2a9_4959041.png "屏幕截图") 49 | 50 | ## 授权登录(已绑定第三方平台) 51 | 52 | ### 步骤一:点击登录页面图标 53 | 54 | ![输入图片说明](https://foruda.gitee.com/images/1690938908352243992/fd044381_4959041.png "屏幕截图") 55 | 56 | ### 步骤二:同意授权 57 | 58 | ![输入图片说明](https://foruda.gitee.com/images/1690938522418523183/81b327bf_4959041.png "屏幕截图") 59 | 60 | ## 解除授权绑定 61 | 62 | ### 步骤一:个人中心点击解绑第三方应用 63 | 64 | ![输入图片说明](https://foruda.gitee.com/images/1690939087877969002/4ef324e7_4959041.png "屏幕截图") 65 | 66 | ### 步骤二:点击确定完成解绑 67 | 68 | ![输入图片说明](https://foruda.gitee.com/images/1690939108017661775/7236088d_4959041.png "屏幕截图") 69 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/idea_environment.md: -------------------------------------------------------------------------------- 1 | # idea环境配置 2 | - - - 3 | ## 配置项目编码 4 | ![输入图片说明](https://foruda.gitee.com/images/1662107706295343419/e27065a9_1766278.png "屏幕截图") 5 | 6 | ## 编译内存(重点注意事项 一旦内存不够会出现各种编译报错 找不到类等等问题) 7 | ![输入图片说明](https://foruda.gitee.com/images/1764139559795286358/197fd546_1766278.png "屏幕截图") 8 | 9 | ## 配置运行看板 10 | ![输入图片说明](https://foruda.gitee.com/images/1662108673306567278/8af97b47_1766278.png "屏幕截图") 11 | ### 配置spring与docker看板 12 | ![输入图片说明](https://foruda.gitee.com/images/1662111392476935892/6b6760fb_1766278.png "屏幕截图") 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1662108865191892425/3c045999_1766278.png "屏幕截图") 15 | 16 | ![输入图片说明](https://foruda.gitee.com/images/1662108877322329668/ddb6d93d_1766278.png "屏幕截图") 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1662108894122798039/6a53a38c_1766278.png "屏幕截图") 19 | 20 | ## 配置服务器SSH连接 21 | 进入 `Settings -> Tools -> SSH Configurations` 点击加号创建SSH连接配置
22 | 填写 服务器IP 用户名 密码 端口号 点击 Test Connection 测试连接 23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1662107776533098115/bd78467b_1766278.png "屏幕截图") 25 | 26 | 使用Terminal 工具 点击箭头找到上方创建的SSH连接配置
27 | 选择即可进入SSH连接界面 在这里可以对服务器进行命令操作 28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1662108010120640495/c70f9f9a_1766278.png "屏幕截图") 30 | 31 | ## 配置服务器FTP连接 32 | 进入 `Settings -> Build-> Deployment` 点击加号 选择SFTP 创建 FTP 连接配置
33 | 选择之前创建好的SSH配置 点击 Test Connection 测试连接 34 | 35 | ![输入图片说明](https://foruda.gitee.com/images/1662107899553257979/e2eeb7fd_1766278.png "屏幕截图") 36 | 37 | 在IDEA上方工具栏 找到 `Tools -> Deployment -> Browse Remote Host` 打开远程界面
38 | 点击箭头找到我们上方配置的SFTP连接配置 即可连接到服务器的文件目录 39 | 40 | ![输入图片说明](https://foruda.gitee.com/images/1662107974682787233/b8a601fd_1766278.png "屏幕截图") 41 | 42 | ## 配置Docker连接 43 | ### 可操作远程docker与构建上传docker镜像(代替原来maven docker插件) 44 | tcp连接需要开放服务器2375端口
45 | ssh需要使用上方的SSH连接配置
46 | 建议使用SSH连接 47 | 48 | ![输入图片说明](https://foruda.gitee.com/images/1662108188005932060/75872bf8_1766278.png "屏幕截图") 49 | 50 | 配置好之后 在运行窗口会多出一个Docker图标 双击即可连接远程docker
51 | 可以查看容器实时日志 启动 重启 停止 等操作 52 | 53 | ![输入图片说明](https://foruda.gitee.com/images/1662108250902891875/b82d022b_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /common/contribution.md: -------------------------------------------------------------------------------- 1 | # 参与贡献的方式 2 | - - - 3 | 参与贡献开源的方式有很多种 听作者来介绍 4 | 5 | ## 为开源项目点一个Star 6 | 7 | > Star的多少关系到项目能否被更多人看到 8 |
9 | 同时Star也是作者前进的动力(作者每天都在盯着Star 涨了会开心 跌了会失落) 10 |
11 |
12 | > 大家在寻找开源项目的时候, 大多数情况也是会先看Star比较多的项目 13 |
14 | 所以请给您觉得好的开源项目点一个小小的Star, 让好的项目能够被更多人看到 15 |
16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1678934493115487351/0c45121e_1766278.png "屏幕截图") 18 |
19 | Vue版本: [Gitee我要点Star](https://gitee.com/dromara/RuoYi-Vue-Plus/stargazers) [Github我要点Star](https://github.com/dromara/RuoYi-Vue-Plus) 20 |
21 | Cloud版本: [Gitee我要点Star](https://gitee.com/dromara/RuoYi-Cloud-Plus/stargazers) [Github我要点Star](https://github.com/dromara/RuoYi-Cloud-Plus) 22 | 23 | ## 为社区处理问题 24 | 25 | > Issue是社区的交流地 大家会在这里提出自己的问题 或者是项目的功能异常 26 | 27 | > 提问的规范在Issue的模板里已经写好了 按照模板填写有助于作者或者其他社区人员快速有效的回答问题 28 | ![输入图片说明](https://foruda.gitee.com/images/1678935068341532603/4b9d7af9_1766278.png "屏幕截图") 29 | 30 | > 为提出问题的小伙伴答疑 可以有效降的帮助别人
31 | > 而且可以降低社区人员的精力分散 使精力全部投入到项目设计研发中 32 | ![输入图片说明](https://foruda.gitee.com/images/1678935380481365514/dddc9ce9_1766278.png "屏幕截图") 33 | 34 | ## 改进社区文档 35 | 36 | > 大家都知道 我们程序员都不擅长写作
37 | > 有时候作者把文档写完了也不知道用户是什么感觉 是否能看懂
38 | 39 | > 所以参与社区文档建设绝对是一件意义重大的事情
40 | > 大家可以在Issue提出观后感 觉得哪看不懂 觉得哪应该详细说明
41 | > 当然了 大家也可以对文档进行改进后提交PR修改申请 42 | 43 | 文档仓库: [plus-doc](https://gitee.com/JavaLionLi/plus-doc) 👈点他点他 44 | ![输入图片说明](https://foruda.gitee.com/images/1678935992827063291/d7c4dc5b_1766278.png "屏幕截图") 45 | 46 | ## 贡献代码 47 | 48 | > 想参与贡献代码的小伙伴 重点来了: 作者会经常在Issue里发布需求认领
49 | > 觉得自己能做的可以在Issue里跟作者讨论 如需求还不够清晰 或者做的过程中遇到了什么问题 50 | 51 | 52 | 53 | > 需求确定了以后就可以开始专注的写代码了
54 | > 但在开始写代码之前 一定要先看一下如何正确的提交PR 55 | 56 | 一点要仔细看: [如何提交PR](/common/pr.md) 👈点他点他 57 | 58 | ## 如何成为项目成员 59 | 60 | > 1.对框架有重大贡献者(由作者与团队成员判定)
61 | > 2.完成社区发布的两项复杂任务
62 | > 3.持续完成社区发布的简单任务若干(作者会关注到)
63 | > 4.持续为社区优化文档或处理issue若干(作者会关注到)
64 | 65 | ## 项目成员待遇 66 | 67 | > 1.可免费进入vip收费群
68 | > 2.每年还会发放IDEA正版授权
69 | 70 | -------------------------------------------------------------------------------- /_coverpage.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 |
RuoYi-Vue-Plus
7 |
多租户权限管理系统
8 | 9 | [![码云Gitee](https://gitee.com/dromara/RuoYi-Vue-Plus/badge/star.svg?theme=blue)](https://gitee.com/dromara/RuoYi-Vue-Plus) 10 | [![GitHub](https://img.shields.io/github/stars/dromara/RuoYi-Vue-Plus.svg?style=social&label=Stars)](https://github.com/dromara/RuoYi-Vue-Plus) 11 | [![Star](https://gitcode.com/dromara/RuoYi-Vue-Plus/star/badge.svg)](https://gitcode.com/dromara/RuoYi-Vue-Plus) 12 | [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/master/LICENSE) 13 |
14 | [![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-5.5.2-success.svg)](https://gitee.com/dromara/RuoYi-Vue-Plus) 15 | [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5-blue.svg)]() 16 | 17 |
18 |
19 |
RuoYi-Cloud-Plus
20 |
微服务权限管理系统
21 | 22 | [![码云Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus/badge/star.svg?theme=blue)](https://gitee.com/dromara/RuoYi-Cloud-Plus) 23 | [![GitHub](https://img.shields.io/github/stars/dromara/RuoYi-Cloud-Plus.svg?style=social&label=Stars)](https://github.com/dromara/RuoYi-Cloud-Plus) 24 | [![Star](https://gitcode.com/dromara/RuoYi-Cloud-Plus/star/badge.svg)](https://gitcode.com/dromara/RuoYi-Cloud-Plus) 25 | [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/master/LICENSE) 26 |
27 | [![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.5.2-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus) 28 | [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5-blue.svg)]() 29 | 30 |
31 | 32 |
33 | 34 | 35 | > 💪真正面向企业级的应用框架 36 | > 37 | > 组件化 模块化 轻耦合 高扩展 针对企业痛点 业界一流技术栈 38 | 39 | Copyright © 2018-2026 疯狂的狮子Li All Rights Reserved. 40 | 41 | [开始使用 Let's Go](/_readme) -------------------------------------------------------------------------------- /questions/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | - **满三年大力赞助** 3 | - 4 | - 5 | - 6 | - 7 | - 8 | 9 | * **常见问题** 10 | * [如何对接国产数据库](/questions/domestic_databases.md) 11 | * [关于登录调试步骤](/questions/login_step.md) 12 | * [关于请求响应参数解密](/questions/api_encrypt.md) 13 | * [JCE cannot authenticate the provider BC](/questions/jce_cannot.md) 14 | * [Only one connection receive subscriber allowed](/questions/only_one_subscriber.md) 15 | * [nacos 报错 The Raft Group [naming_instance_metadata]](/questions/nacos_naming_instance_metadata.md) 16 | * [unable to read meta-data for class xxx](/questions/read_metadata.md) 17 | * [不支持ST请求](/questions/st_not_support.md) 18 | * [如何指定dubbo注册ip](/questions/dubbo_ip.md) 19 | * [为什么删除sentinel](/questions/sentinel_404.md) 20 | * [无法读取nacos配置](/questions/nacos_read_fail.md) 21 | * [接口文档对接knife4j](/questions/kinfe4j.md) 22 | * [关于HTTPS配置](/questions/https_config.md) 23 | * [放行接口提示认证失败](/questions/identify_fail.md) 24 | * [打包jar运行报错](/questions/jar_run_fail.md) 25 | * [如何同步项目更新](/questions/synchronous_update.md) 26 | * [ParseException SQL解析异常](/questions/parse_exception.md) 27 | * [swagger相关问题](/questions/swagger.md) 28 | * [实体bean为空问题](/questions/bean_null.md) 29 | * [Redis 报错 Permission denied](/questions/permission_denied.md) 30 | * [导入excel实体类为空](/questions/import_excel.md) 31 | * [Lombok注解爆红](/questions/lombok.md) 32 | * [如何使用Tomcat](/questions/use_tomcat.md) 33 | * [如何使用druid连接池](/questions/use_druid.md) 34 | * [vue与boot整合部署](/questions/deploy_vue.md) -------------------------------------------------------------------------------- /plus-ui/devdoc/router_use.md: -------------------------------------------------------------------------------- 1 | # 路由使用 2 | - - - 3 | 4 | 框架的核心是通过路由自动生成对应导航,所以除了路由的基本配置,还需要了解框架提供了哪些配置项。 5 | ### 路由配置 6 | ```typescript 7 | // 当设置 true 的时候该路由不会在侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 8 | hidden: true // (默认 false) 9 | 10 | //当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 11 | redirect: 'noRedirect' 12 | 13 | // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 14 | // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 15 | // 若你想不管路由下面的 children 声明的个数都显示你的根路由 16 | // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 17 | alwaysShow: true 18 | 19 | name: 'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 20 | query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 21 | roles: ['admin', 'common'] // 访问路由的角色权限 22 | permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 23 | 24 | meta: { 25 | title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 26 | icon: 'svg-name' // 设置该路由的图标,支持 svg-class,也支持 el-icon-x element-ui 的 icon 27 | noCache: true // 如果设置为true,则不会被 缓存(默认 false) 28 | breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示(默认 true) 29 | affix: true // 如果设置为true,它则会固定在tags-view中(默认 false) 30 | 31 | // 当路由设置了该属性,则会高亮相对应的侧边栏。 32 | // 这在某些场景非常有用,比如:一个文章的列表页路由为:/article/list 33 | // 点击文章进入文章详情页,这时候路由为/article/1,但你想在侧边栏高亮文章列表的路由,就可以进行如下设置 34 | activeMenu: '/article/list' 35 | } 36 | ``` 37 | **普通示例** 38 | ```json 39 | { 40 | path: '/system/test', 41 | component: Layout, 42 | redirect: 'noRedirect', 43 | hidden: false, 44 | alwaysShow: true, 45 | meta: { title: '系统管理', icon : "system" }, 46 | children: [{ 47 | path: 'index', 48 | component: (resolve) => require(['@/views/index'], resolve), 49 | name: 'Test', 50 | meta: { 51 | title: '测试管理', 52 | icon: 'user' 53 | } 54 | }] 55 | } 56 | ``` 57 | **外链示例** 58 | ```json 59 | { 60 | path: 'http://ruoyi.vip', 61 | meta: { title: '若依官网', icon : "guide" } 62 | } 63 | ``` 64 | ### 静态路由 65 | 代表那些不需要动态判断权限的路由,如登录页、404、等通用页面,在`@/router/index.ts`配置对应的公共路由。 66 | ### 动态路由 67 | 代表那些需要根据用户动态判断权限并通过addRoutes动态添加的页面,在`@/store/modules/permission.ts`加载后端接口路由配置。 68 | > **提示** 69 | > * 动态路由可以在系统管理-菜单管理进行新增和修改操作,前端加载会自动请求接口获取菜单信息并转换成前端对应的路由。 70 | > * 动态路由在生产环境下会默认使用路由懒加载,实现方式参考loadView方法的判断。 71 | ### 常用方法 72 | 想要跳转到不同的页面,使用`router.push`方法 73 | ```Typescript 74 | const router = useRouter(); 75 | router.push({ path: "/system/user" }); 76 | ``` 77 | 跳转页面并设置请求参数,使用`query`属性 78 | ```Typescript 79 | const router = useRouter(); 80 | router.push({ path: "/system/user", query: {id: "1", name: "若依"} }); 81 | ``` 82 | 更多使用可以参考[vue-router](https://router.vuejs.org/zh/)官方文档。 -------------------------------------------------------------------------------- /ruoyi-cloud-plus/extend-function/shardingproxy.md: -------------------------------------------------------------------------------- 1 | # Sharding-Proxy搭建分库分表 2 | - - - 3 | 4 | # 如何使用 5 | 6 | 查看 `ruoyi-demo` 服务 `TestShardingController` 7 | 8 | ![输入图片说明](https://foruda.gitee.com/images/1688014028842337522/cd26026a_1766278.png "屏幕截图") 9 | 10 | ## 首先在 MySQL 创建两个库 11 | 12 | 创建两个库 `data-center_0` `data-center_1` 分别执行如下SQL 13 | 14 | ```sql 15 | CREATE TABLE `t_order_0` ( 16 | `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键ID', 17 | `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户ID', 18 | `total_money` int(10) UNSIGNED NOT NULL COMMENT '订单总金额', 19 | PRIMARY KEY (`order_id`), 20 | KEY `idx_user_id` (`user_id`) USING BTREE 21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单总表'; 22 | 23 | CREATE TABLE `t_order_1` ( 24 | `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键ID', 25 | `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户ID', 26 | `total_money` int(10) UNSIGNED NOT NULL COMMENT '订单总金额', 27 | PRIMARY KEY (`order_id`), 28 | KEY `idx_user_id` (`user_id`) USING BTREE 29 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单总表'; 30 | 31 | CREATE TABLE `t_order_item_0` ( 32 | `order_item_id` bigint(20) UNSIGNED NOT NULL COMMENT '子订单ID', 33 | `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键ID', 34 | `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户ID', 35 | `money` int(10) UNSIGNED NOT NULL COMMENT '子订单金额', 36 | PRIMARY KEY (`order_item_id`), 37 | KEY `idx_order_id` (`order_id`) USING BTREE, 38 | KEY `idx_user_id` (`user_id`) USING BTREE 39 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单子表'; 40 | 41 | CREATE TABLE `t_order_item_1` ( 42 | `order_item_id` bigint(20) UNSIGNED NOT NULL COMMENT '子订单ID', 43 | `order_id` bigint(20) UNSIGNED NOT NULL COMMENT '主键ID', 44 | `user_id` bigint(20) UNSIGNED NOT NULL COMMENT '用户ID', 45 | `money` int(10) UNSIGNED NOT NULL COMMENT '子订单金额', 46 | PRIMARY KEY (`order_item_id`), 47 | KEY `idx_order_id` (`order_id`) USING BTREE, 48 | KEY `idx_user_id` (`user_id`) USING BTREE 49 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单子表'; 50 | 51 | ``` 52 | 53 | ## 然后更改配置文件 54 | 55 | 更改 `config-sharding.yaml` 配置文件内的数据库连接地址与用户名密码 56 | 57 | ## 服务搭建 58 | 59 | 参考部署文档上传 docker 文件夹 内部包含 `shardingproxy` 配置文件 60 | 61 | ![输入图片说明](https://foruda.gitee.com/images/1688013921062151295/89652dda_1766278.png "屏幕截图") 62 | 63 | 框架已经包含了 docker-compose 编排 执行如下命令启动容器即可 64 | 65 | ```shell 66 | docker-compose up -d shardingproxy 67 | ``` 68 | 69 | ## 最后运行 demo 70 | 71 | 运行 demo 提供的 controller 代码查看数据库内数据即可 72 | 73 | ## 用法参考视频(略有不同 理性观看) 74 | 75 | 用法参考视频: https://www.bilibili.com/video/BV1XN411A7Tv/ 76 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/code_generate.md: -------------------------------------------------------------------------------- 1 | # 代码生成 2 | - - - 3 | ## 功能介绍 4 | 5 | ### 数据源配置 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678976867341325193/a2be0608_1766278.png "屏幕截图") 8 | 9 | **项目适配多种类型数据库 可以在代码生成页面切换**
10 | 11 | > 填写对应的数据源名称 点击搜索按钮 即可切换到对应的数据源
12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1678976876081856486/4ef4841c_1766278.png "屏幕截图") 14 | 15 | **>= 2.2.1版本 项目支持100+种数据库适配 在代码生成模块增加对应的数据库依赖即可**
16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1722396530340741054/3914eb72_1766278.png "屏幕截图") 18 | 19 | 20 | ### 导入数据表 21 | 22 | > 点击导入按钮 会加载系统数据库所有的表
23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1678976880393939803/3ecf1dcc_1766278.png "屏幕截图") 25 | 26 | > 选择需要的表 点击确定即可
27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1678976885370716109/4834faa5_1766278.png "屏幕截图")
29 | ![输入图片说明](https://foruda.gitee.com/images/1678976891856866728/853420d9_1766278.png "屏幕截图") 30 | 31 | ### 编辑表生成结构 32 | 33 | > 点击表对应的编辑按钮
34 | 35 | ![输入图片说明](https://foruda.gitee.com/images/1678976899111822310/aeaa33f9_1766278.png "屏幕截图") 36 | 37 | > 更改要生成表的数据
38 | 39 | ![输入图片说明](https://foruda.gitee.com/images/1678976903345795925/4326f6ee_1766278.png "屏幕截图")
40 | ![输入图片说明](https://foruda.gitee.com/images/1678976908897387614/4cdf939b_1766278.png "屏幕截图") 41 | 42 | ### 生成条件影响 43 | 44 | ![输入图片说明](https://foruda.gitee.com/images/1678976913809284051/24da09b0_1766278.png "屏幕截图") 45 | 46 | 47 | * `插入` `编辑` 影响生成 BO 类 与 前端添加编辑页面 是否有该字段 48 | * `列表` 影响生成 VO 类 与 前端列表页面展示 是否有该字段 49 | * `查询` 影响 前端页面是否有该字段的搜索框 与 后端代码是否生成对应的查询条件 50 | * `查询方式` 影响生成查询条件的类型 51 | * `必填` 影响 BO 类 与 页面是否强制校验 52 | * `显示类型` 影响生成页面使用何种展示组件 53 | * `字典类型` 影响页面是否生成与字典的关联 54 | 55 | ### 树表配置 56 | 57 | > 编辑表生成信息 生成模板为 `树表` 填写对应数据即可
58 | 59 | ![输入图片说明](https://foruda.gitee.com/images/1678976917918548901/f5886c5c_1766278.png "屏幕截图") 60 | 61 | ### 主子表说明 62 | 63 | 框架不支持也不推荐使用主子表
64 | 原因一般业务场景 基本都是一对N表 多表关联场景
65 | 还有一些 主 => 子 <= 主 场景 需求很复杂 很少有单纯主子表场景出现
66 | 另外主子表关联 很容易出现 笛卡尔积 或者数据错乱等问题 需要自行sql调优场景
67 | 所以建议大家都按照 单表生成 自行编写业务逻辑 68 | 69 | ### 预览功能 70 | 71 | > 配置好生成信息后 可以点击预览按钮
72 | 73 | ![输入图片说明](https://foruda.gitee.com/images/1678976924411765532/2e9747df_1766278.png "屏幕截图") 74 | 75 | > 系统会根据已经配置好的数据 生成对应的代码预览
76 | > 可以再此处观察代码的生成结构和数据是否正确等
77 | 78 | ![输入图片说明](https://foruda.gitee.com/images/1678976945982406065/ca7383bb_1766278.png "屏幕截图") 79 | 80 | 81 | ### 代码结构同步 82 | 83 | > 实际开发中 难免会有表结构更改的需求
84 | > 这时可以使用 同步功能 点击同步按钮 即可与实时数据库表进行字段同步
85 | 86 | ![输入图片说明](https://foruda.gitee.com/images/1678976952919156537/3c47c078_1766278.png "屏幕截图") 87 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/code_generate.md: -------------------------------------------------------------------------------- 1 | # 代码生成 2 | - - - 3 | ## 功能介绍 4 | 5 | ### 数据源配置 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1678976867341325193/a2be0608_1766278.png "屏幕截图") 8 | 9 | **>= 4.1.0版本 项目适配多种类型数据库 可以在代码生成页面切换**
10 | 11 | > 填写对应的数据源名称 点击搜索按钮 即可切换到对应的数据源
12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1678976876081856486/4ef4841c_1766278.png "屏幕截图") 14 | 15 | **>= 5.2.2版本 项目支持100+种数据库适配 在代码生成模块增加对应的数据库依赖即可**
16 | 17 | ![输入图片说明](https://foruda.gitee.com/images/1722396530340741054/3914eb72_1766278.png "屏幕截图") 18 | 19 | ### 导入数据表 20 | 21 | > 点击导入按钮 会加载系统数据库所有的表
22 | 23 | ![输入图片说明](https://foruda.gitee.com/images/1678976880393939803/3ecf1dcc_1766278.png "屏幕截图") 24 | 25 | > 选择需要的表 点击确定即可
26 | 27 | ![输入图片说明](https://foruda.gitee.com/images/1678976885370716109/4834faa5_1766278.png "屏幕截图")
28 | ![输入图片说明](https://foruda.gitee.com/images/1678976891856866728/853420d9_1766278.png "屏幕截图") 29 | 30 | ### 编辑表生成结构 31 | 32 | > 点击表对应的编辑按钮
33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1678976899111822310/aeaa33f9_1766278.png "屏幕截图") 35 | 36 | > 更改要生成表的数据
37 | 38 | ![输入图片说明](https://foruda.gitee.com/images/1678976903345795925/4326f6ee_1766278.png "屏幕截图")
39 | ![输入图片说明](https://foruda.gitee.com/images/1678976908897387614/4cdf939b_1766278.png "屏幕截图") 40 | 41 | ### 生成条件影响 42 | 43 | ![输入图片说明](https://foruda.gitee.com/images/1678976913809284051/24da09b0_1766278.png "屏幕截图") 44 | 45 | 46 | * `插入` `编辑` 影响生成 BO 类 与 前端添加编辑页面 是否有该字段 47 | * `列表` 影响生成 VO 类 与 前端列表页面展示 是否有该字段 48 | * `查询` 影响 前端页面是否有该字段的搜索框 与 后端代码是否生成对应的查询条件 49 | * `查询方式` 影响生成查询条件的类型 50 | * `必填` 影响 BO 类 与 页面是否强制校验 51 | * `显示类型` 影响生成页面使用何种展示组件 52 | * `字典类型` 影响页面是否生成与字典的关联 53 | 54 | ### 树表配置 55 | 56 | > 编辑表生成信息 生成模板为 `树表` 填写对应数据即可
57 | 58 | ![输入图片说明](https://foruda.gitee.com/images/1678976917918548901/f5886c5c_1766278.png "屏幕截图") 59 | 60 | ### 主子表说明 61 | 62 | 框架不支持也不推荐使用主子表
63 | 原因一般业务场景 基本都是一对N表 多表关联场景
64 | 还有一些 主 => 子 <= 主 场景 需求很复杂 很少有单纯主子表场景出现
65 | 另外主子表关联 很容易出现 笛卡尔积 或者数据错乱等问题 需要自行sql调优场景
66 | 所以建议大家都按照 单表生成 自行编写业务逻辑 67 | 68 | ### 预览功能 69 | 70 | > 配置好生成信息后 可以点击预览按钮
71 | 72 | ![输入图片说明](https://foruda.gitee.com/images/1678976924411765532/2e9747df_1766278.png "屏幕截图") 73 | 74 | > 系统会根据已经配置好的数据 生成对应的代码预览
75 | > 可以再此处观察代码的生成结构和数据是否正确等
76 | 77 | ![输入图片说明](https://foruda.gitee.com/images/1678976945982406065/ca7383bb_1766278.png "屏幕截图") 78 | 79 | 80 | ### 代码结构同步 81 | 82 | > 实际开发中 难免会有表结构更改的需求
83 | > 这时可以使用 同步功能 点击同步按钮 即可与实时数据库表进行字段同步
84 | 85 | ![输入图片说明](https://foruda.gitee.com/images/1678976952919156537/3c47c078_1766278.png "屏幕截图") 86 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/tree.md: -------------------------------------------------------------------------------- 1 | # 目录结构 2 | - - - 3 | v5.2.2 4 | ~~~ 5 | RuoYi-Vue-Plus 6 | ├─ ruoyi-admin // 管理模块 [8080,28080] 7 | │ └─ RuoYiApplication // 启动类 8 | │ └─ RuoYiServletInitializer // 容器部署初始化类 9 | │ └─ resources // 资源文件 10 | │ └─ i18n/messages.properties // 国际化配置文件 11 | │ └─ application.yml // 框架总配置文件 12 | │ └─ application-dev.yml // 开发环境配置文件 13 | │ └─ application-prod.yml // 生产环境配置文件 14 | │ └─ banner.txt // 框架启动图标 15 | │ └─ logback-plus.xml // 日志配置文件 16 | │ └─ ip2region.xdb // IP区域地址库 17 | ├─ ruoyi-extend // 扩展模块 18 | │ └─ ruoyi-monitor-admin // admin监控模块 [9090] 19 | │ └─ ruoyi-snailjob-server // 任务调度中心模块 [8800,17888] 20 | ├─ ruoyi-common // 通用模块 21 | │ └─ ruoyi-common-bom // common依赖包管理 22 | │ └─ ruoyi-common-core // 核心模块 23 | │ └─ ruoyi-common-doc // 系统接口模块 24 | │ └─ ruoyi-common-encrypt // 数据加解密模块 25 | │ └─ ruoyi-common-excel // excel模块 26 | │ └─ ruoyi-common-idempotent // 幂等功能模块 27 | │ └─ ruoyi-common-job // 定时任务模块 28 | │ └─ ruoyi-common-json // 序列化模块 29 | │ └─ ruoyi-common-log // 日志模块 30 | │ └─ ruoyi-common-mail // 邮件模块 31 | │ └─ ruoyi-common-mybatis // 数据库模块 32 | │ └─ ruoyi-common-oss // oss服务模块 33 | │ └─ ruoyi-common-ratelimiter // 限流功能模块 34 | │ └─ ruoyi-common-redis // 缓存服务模块 35 | │ └─ ruoyi-common-satoken // satoken模块 36 | │ └─ ruoyi-common-security // 安全模块 37 | │ └─ ruoyi-common-sensitive // 脱敏模块 38 | │ └─ ruoyi-common-sms // 短信模块 39 | │ └─ ruoyi-common-social // 社交三方模块 40 | │ └─ ruoyi-common-sse // sse流推送模块 41 | │ └─ ruoyi-common-tenant // 租户模块 42 | │ └─ ruoyi-common-translation // 通用翻译模块 43 | │ └─ ruoyi-common-web // web模块 44 | │ └─ ruoyi-common-websocket // websocket服务集成模块 45 | ├─ ruoyi-modules // 模块组 46 | │ └─ ruoyi-demo // 演示模块 47 | │ └─ ruoyi-generator // 代码生成模块 48 | │ └─ ruoyi-job // 任务调度服务 49 | │ └─ ruoyi-system // 业务模块 50 | │ └─ ruoyi-workflow // 工作流模块 51 | ├─ plus-ui // 前端框架 [80] 52 | ├─ script // 系统脚本包 53 | │ └─ bin // 运行脚本包 54 | │ └─ docker // docker相关脚本 55 | │ └─ sql // sql脚本 56 | ├─ .run // 执行脚本文件 57 | ├─ .editorconfig // 编辑器编码格式配置 58 | ├─ LICENSE // 开源协议 59 | ├─ pom.xml // 公共依赖 60 | ├─ README.md // 框架说明文件 61 | ~~~ -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/init.md: -------------------------------------------------------------------------------- 1 | # 5.X项目初始化 2 | - - - 3 | ### 项目分支说明 4 | 5 | `5.X` 主分支 5.X版本 稳定发布分支
6 | `dev` 开发分支 代码随时更新 不推荐使用 经测试后会发布到主分支
7 | `future/*` 新功能预览分支
8 | 9 | ### 项目必备环境 10 | > 推荐使用 `docker` 安装 项目内置 `docker` 编排文件 11 | 12 | **注意: 禁止使用 `oraclejdk`(由于spring的bug导致打包运行会报错)** 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1720080025744223375/0213a652_1766278.png "屏幕截图") 15 | 16 | * Spring官方推荐使用OpenJDK-17/21 [JDK下载地址](https://bell-sw.com/pages/downloads/) 17 | * mysql 5.7 8.0 (其他版本未测试 如其他版本没问题 可以告知咱们) 18 | * oracle >= 12c (其他版本未测试 如其他版本没问题 可以告知咱们) 19 | * postgres 13 14 15 (其他版本未测试 如其他版本没问题 可以告知咱们) 20 | * sqlserver 2017 2019 (其他版本未测试 如其他版本没问题 可以告知咱们) 21 | * redis 6.X 7.X(禁止使用7.4版本) 由于框架大量使用了redis特性 版本必须 >= 6.X ([win redis 下载地址](https://github.com/zkteco-home/redis-windows)) 22 | * minio(RustFS可用于替换minio 比较新需谨慎使用) 本地存储或阿里/腾讯/七牛云等一切支持S3协议的云存储 23 | * (注意 minio最后一个可用版本2025-04-22T22-12-26Z 再往上功能被阉割) 24 | * maven >= 3.8.X 25 | * nodejs >= 18.18 (其他版本未测试 如其他版本没问题 可以告知咱们) 26 | * npm >= 8.X (7.X确认有问题) 27 | * idea 版本避坑指南 看下面: 28 | * 2023(全系列不要用 bug太多说不过来) 29 | * 2024.1/2024.2(maven插件无法刷新依赖) 30 | * 2025.1/2025.2(有一些bug不建议使用) 31 | * 目前推荐使用 2024.3(jdk17) 2025.3(jdk21-25) 32 | 33 | ### 搭建视频 34 | 35 | [RuoYi-Vue-Plus 5.0 搭建与运行](https://www.bilibili.com/video/BV1Fg4y137JK/) 36 | 37 | ### 勾选maven对应环境 38 | ![输入图片说明](https://foruda.gitee.com/images/1678976284045210056/a2f28d33_1766278.png "屏幕截图") 39 | 40 | ### 默认 `JDK17` 如有变动 需更改以下配置 41 | 42 | ![输入图片说明](https://foruda.gitee.com/images/1678941027820943505/c688e01e_1766278.png "屏幕截图") 43 | ![输入图片说明](https://foruda.gitee.com/images/1678941120518807034/4d56fcc9_1766278.png "屏幕截图") 44 | 45 | ### sql导入 46 | 47 | 请按照以下顺序依次导入 默认为 `mysql` 其他数据库需导入对应的sql文件
48 | 如需使用其他数据库 看这里 => [多数据库数据源](/ruoyi-vue-plus/framework/extend/dynamic_datasource.md)
49 | 50 | ![输入图片说明](https://foruda.gitee.com/images/1726304546467780078/b78cabd4_1766278.png "屏幕截图") 51 | 52 | ### 服务启动顺序说明 53 | 54 | 1. 必须启动基础建设: mysql redis admin
55 | 2. 可选启动基础建设: minio(影响文件上传) monitor(影响监控) snailjob(影响定时任务)
56 | 57 | ![输入图片说明](https://foruda.gitee.com/images/1716175484919688429/8b9a79b7_1766278.png "屏幕截图") 58 | 59 | * `MonitorAdminApplication` 为 Admin监控服务(非必要 可参考对应文档关闭 [搭建Admin监控](/ruoyi-vue-plus/quickstart/admin_init.md)) 60 | * `SnailJobServerApplication` 为 任务调度中心服务(非必要 可参考对应文档关闭 [搭建调度中心](/ruoyi-vue-plus/quickstart/snail_job_init.md)) 61 | * `DromaraApplication` 为 主应用服务 62 | > 需优先启动 `MonitorAdminApplication` 与 `SnailJobServerApplication` 具体配置方式参考对应文档
63 | > 最后启动 主服务 `DromaraApplication`
64 | > 工作流相关初始化使用 [工作流初始化](/ruoyi-vue-plus/quickstart/worker_init.md) 65 | 66 | ### 主服务配置方式 67 | 68 | 在勾选对应环境的配置文件内 填写 mysql 与 redis 配置信息 69 | 70 | ![输入图片说明](https://foruda.gitee.com/images/1678941357316005626/70559736_1766278.png "屏幕截图") 71 | 72 | ![输入图片说明](https://foruda.gitee.com/images/1678941405169571070/0d06a955_1766278.png "屏幕截图") 73 | 74 | 其他数据库配置 按照系统自带的配置更改即可 75 | 76 | ![输入图片说明](https://foruda.gitee.com/images/1678941444707120259/b274592a_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/client.md: -------------------------------------------------------------------------------- 1 | # 客户端管理功能 2 | - - - 3 | ## 版本 >= 2.X 4 | 5 | ## 客户端管理页面 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1690961819029076660/c44374ac_4959041.png "屏幕截图") 8 | 9 | ### 客户端管理字段说明 10 | | 字段名称 | 取值说明 | 注意事项 | 11 | |----------------|----------------------------|--------------------------------| 12 | | 客户端id | 由后端生成,用于前端登录校验以及接口数据加密 | 无法修改,不要删除默认数据,否则会报错 | 13 | | 客户端key | 前端自定义 | 无法修改,不要删除默认数据,否则会报错 | 14 | | 客户端秘钥 | 前端自定义 | 无法修改,不要删除默认数据,否则会报错 | 15 | | 授权类型 | 密码认证、短信认证、邮件认证、小程序认证、第三方认证 | 根据授权类型判断当前客户端是否支持该登录方式 | 16 | | 设备类型 | PC端、APP端 | | 17 | | Token活跃超时时间 | 自定义 | 指定时间无操作则过期(单位:秒),默认30分钟(1800秒) | 18 | | Token固定超时时间 | 自定义 | 指定时间必定过期(单位:秒),默认七天(604800秒) | 19 | 20 | ### 前后端使用新的客户端id 21 | 22 | 步骤如下: 23 | 1. 前端管理页面生成新的客户端id。 24 | 2. 将新的客户端id复制到前端配置文件。 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1690962894318847386/133d2f90_4959041.png "屏幕截图") 27 | 28 | ## 新增自定义客户端 29 | 30 | ### 步骤一:新增客户端数据(例如增加小程序端) 31 | 32 | ![输入图片说明](https://foruda.gitee.com/images/1690965463070099188/baeb4441_4959041.png "屏幕截图") 33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1690965508836621042/df06248f_4959041.png "屏幕截图") 35 | 36 | ### 步骤二:配置前端请求头信息 37 | 38 | 需要在全局请求头 header 中增加 clientid
39 | 确保客户端所有请求都携带此id 可参考项目 `request.ts` 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1690965768235114596/980b88d2_4959041.png "屏幕截图") 42 | 43 | `VITE_APP_CLIENT_ID` 即配置文件中的客户端id。 44 | 45 | **重点:不同客户端登录获取到的token不同与其他端不互通(例如: app登录获取到的token无法用于pc端接口查询)** 46 | 47 | ## 新增自定义登录方式授权类型 48 | 49 | **重点说明: 不要单独增加登录接口 系统全局统一只有一个登录接口 只需增加不同的鉴权方式即可** 50 | 51 | 如何调试使用登录看这里 -> [关于登录调试步骤](/questions/login_step.md) 52 | 53 | ### 步骤一:新增字典数据 54 | 55 | ![输入图片说明](https://foruda.gitee.com/images/1690968849418013624/3b28417e_4959041.png "屏幕截图") 56 | 57 | ![输入图片说明](https://foruda.gitee.com/images/1690968865819397010/64529fad_4959041.png "屏幕截图") 58 | 59 | ### 步骤二:新增/修改客户端数据 60 | 61 | ### 步骤三:后端新增认证策略 62 | 63 | 新增策略实现类实现 `IAuthStrategy` 接口。
64 | 65 | ![输入图片说明](https://foruda.gitee.com/images/1690972828588111954/7614a4c5_4959041.png "屏幕截图") 66 | 67 | 参照已有策略实现类实现自定义参数校验登录方法逻辑。
68 | 69 | ![输入图片说明](https://foruda.gitee.com/images/1718951146945578143/789c80e4_1766278.png "屏幕截图") 70 | 71 | **注意修改 `@Service` 名称保证规范性** 72 | 73 | ![输入图片说明](https://foruda.gitee.com/images/1718951179571300385/8db730b9_1766278.png "屏幕截图") 74 | 75 | `LoginBody` 校验参数(可自定义)
76 | 77 | ![输入图片说明](https://foruda.gitee.com/images/1718951237123374392/f7840db2_1766278.png "屏幕截图") 78 | 79 | 例如 扩展小程序登录参数 只需要继承 `LoginBody
80 | 81 | ![输入图片说明](https://foruda.gitee.com/images/1718951283931895761/e6348be5_1766278.png "屏幕截图")` 82 | 83 | 校验分组(可自定义)
84 | 85 | ![输入图片说明](https://foruda.gitee.com/images/1718951343601334215/8ef404b4_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/client.md: -------------------------------------------------------------------------------- 1 | # 客户端管理功能 2 | - - - 3 | ## 版本 >= 5.X 4 | 5 | ## 客户端管理页面 6 | 7 | ![输入图片说明](https://foruda.gitee.com/images/1690961819029076660/c44374ac_4959041.png "屏幕截图") 8 | 9 | ### 客户端管理字段说明 10 | | 字段名称 | 取值说明 | 注意事项 | 11 | |----------------|----------------------------|--------------------------------| 12 | | 客户端id | 由后端生成,用于前端登录校验以及接口数据加密 | 无法修改,不要删除默认数据,否则会报错 | 13 | | 客户端key | 前端自定义 | 无法修改,不要删除默认数据,否则会报错 | 14 | | 客户端秘钥 | 前端自定义 | 无法修改,不要删除默认数据,否则会报错 | 15 | | 授权类型 | 密码认证、短信认证、邮件认证、小程序认证、第三方认证 | 根据授权类型判断当前客户端是否支持该登录方式 | 16 | | 设备类型 | PC端、APP端 | | 17 | | Token活跃超时时间 | 自定义 | 指定时间无操作则过期(单位:秒),默认30分钟(1800秒) | 18 | | Token固定超时时间 | 自定义 | 指定时间必定过期(单位:秒),默认七天(604800秒) | 19 | 20 | ### 前后端使用新的客户端id 21 | 22 | 步骤如下: 23 | 1. 前端管理页面生成新的客户端id。 24 | 2. 将新的客户端id复制到前端配置文件。 25 | 26 | ![输入图片说明](https://foruda.gitee.com/images/1690962894318847386/133d2f90_4959041.png "屏幕截图") 27 | 28 | ## 新增自定义客户端 29 | 30 | ### 步骤一:新增客户端数据(例如增加小程序端) 31 | 32 | ![输入图片说明](https://foruda.gitee.com/images/1690965463070099188/baeb4441_4959041.png "屏幕截图") 33 | 34 | ![输入图片说明](https://foruda.gitee.com/images/1690965508836621042/df06248f_4959041.png "屏幕截图") 35 | 36 | ### 步骤二:配置前端请求头信息 37 | 38 | 需要在全局请求头 header 中增加 clientid
39 | 确保客户端所有请求都携带此id 可参考项目 `request.ts` 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1690965768235114596/980b88d2_4959041.png "屏幕截图") 42 | 43 | `VITE_APP_CLIENT_ID` 即配置文件中的客户端id。 44 | 45 | **重点:不同客户端登录获取到的token不同与其他端不互通(例如: app登录获取到的token无法用于pc端接口查询)** 46 | 47 | ## 新增自定义登录方式授权类型 48 | 49 | **重点说明: 不要单独增加登录接口 系统全局统一只有一个登录接口 只需增加不同的鉴权方式即可** 50 | 51 | 如何调试使用登录看这里 -> [关于登录调试步骤](/questions/login_step.md) 52 | 53 | ### 步骤一:新增字典数据 54 | 55 | ![输入图片说明](https://foruda.gitee.com/images/1690968849418013624/3b28417e_4959041.png "屏幕截图") 56 | 57 | ![输入图片说明](https://foruda.gitee.com/images/1690968865819397010/64529fad_4959041.png "屏幕截图") 58 | 59 | ### 步骤二:新增/修改客户端数据 60 | 61 | ### 步骤三:后端新增认证策略 62 | 63 | 新增策略实现类实现 `IAuthStrategy` 接口。
64 | 65 | ![输入图片说明](https://foruda.gitee.com/images/1690972828588111954/7614a4c5_4959041.png "屏幕截图") 66 | 67 | 参照已有策略实现类实现自定义参数校验登录方法逻辑。
68 | 69 | ![输入图片说明](https://foruda.gitee.com/images/1718951146945578143/789c80e4_1766278.png "屏幕截图") 70 | 71 | **注意修改 `@Service` 名称保证规范性** 72 | 73 | ![输入图片说明](https://foruda.gitee.com/images/1718951179571300385/8db730b9_1766278.png "屏幕截图") 74 | 75 | `LoginBody` 校验参数(可自定义)
76 | 77 | ![输入图片说明](https://foruda.gitee.com/images/1718951237123374392/f7840db2_1766278.png "屏幕截图") 78 | 79 | 例如 扩展小程序登录参数 只需要继承 `LoginBody
80 | 81 | ![输入图片说明](https://foruda.gitee.com/images/1718951283931895761/e6348be5_1766278.png "屏幕截图")` 82 | 83 | 校验分组(可自定义)
84 | 85 | ![输入图片说明](https://foruda.gitee.com/images/1718951343601334215/8ef404b4_1766278.png "屏幕截图") -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/1.Xinit.md: -------------------------------------------------------------------------------- 1 | # 1.X项目初始化 2 | - - - 3 | ### 项目分支说明 4 | `master` 主分支 稳定发布分支
5 | `dev` 开发分支 代码随时更新 不推荐使用 经测试后会发布到主分支
6 | `2.X` 新2.X大版本分支
7 | `future/*` 新功能预览分支 8 | 9 | ### 项目必备环境 10 | > 推荐使用 `docker` 安装 项目内置 `docker` 编排文件 11 | 12 | * oracle jdk 8 11 (暂时不支持 17 不支持大于 jdk8_202 因为202是最后一个免费版本) 13 | * mysql 5.7 8.0 (5.6未适配可能会有问题) 14 | * oracle 11g 12c 15 | * postgres 13 14 16 | * redis 5.X 6.X 7.X 由于框架大量使用了redis特性 版本必须 >= 5.X ([win redis 下载地址](https://github.com/zkteco-home/redis-windows)) 17 | * minio 本地文件存储 或 阿里云 腾讯云 七牛云等一切支持S3协议的云存储 18 | * maven 3.6.3 3.8.X 19 | * nodejs >= 12 20 | * npm 6.X 8.X (7.X确认有问题) 21 | * nacos >= 2.X(框架1.3.0内置nacos) 22 | * sentinel 框架内置 23 | * seata 框架内置 24 | 25 | ### 需勾选 maven 对应环境 26 | ![输入图片说明](https://foruda.gitee.com/images/1678976284045210056/a2f28d33_1766278.png "屏幕截图") 27 | 28 | ### 默认 `JDK8` 如有变动 需更改以下配置 29 | 30 | ![输入图片说明](https://foruda.gitee.com/images/1686813181851830778/2dd7954c_1766278.png "屏幕截图") 31 | ![输入图片说明](https://foruda.gitee.com/images/1686813189749486666/c526486c_1766278.png "屏幕截图") 32 | ![输入图片说明](https://foruda.gitee.com/images/1686813196981178511/cd218705_1766278.png "屏幕截图") 33 | 34 | ### sql导入 35 | 将sql导入到与sql文件名对应的数据库(不要放到一个库下)
36 | 37 | ![输入图片说明](https://foruda.gitee.com/images/1678981513725772842/8097a816_1766278.png "屏幕截图") 38 | 39 | ### 使用内置 `ruoyi-naocs` 服务 从这开始 40 | 41 | > 更改 ruoyi-nacos 数据库地址 42 | 43 | ![输入图片说明](https://foruda.gitee.com/images/1664422006264405180/cac5afc6_1766278.png "屏幕截图") 44 | 45 | **其余流程同下方步骤一致** 46 | 47 | ### 自建 Nacos 从这开始 48 | 49 | **Nacos 数据库指向 ry-config 数据库(此处重点: 此数据库为定制数据 未使用此库会无法读取配置)** 50 | 51 | > 将项目 `config/nacos` 下所有配置 复制到 `nacos` 内(建议手动复制内容 防止编码不一致问题) 52 | 53 | ![输入图片说明](https://foruda.gitee.com/images/1678979826345958752/913142c9_1766278.png "屏幕截图") 54 | ![输入图片说明](https://foruda.gitee.com/images/1678979856705927770/75cc1e8c_1766278.png "屏幕截图") 55 | 56 | > 更改 `主pom文件` 对应环境的 `nacos` 地址 57 | 58 | ![输入图片说明](https://foruda.gitee.com/images/1678979881888833924/7e6a191f_1766278.png "屏幕截图") 59 | 60 | ### 更改 `Nacos` 自定义配置 61 | 62 | **忠告: 微服务配置相当复杂 请勿在不懂原理的情况下乱改** 63 | 64 | > `application-common.yml` 更改 65 | 66 | ![输入图片说明](https://foruda.gitee.com/images/1678979889410167794/100db4ab_1766278.png "屏幕截图") 67 | 68 | > `datasource.yml` 更改 69 | 70 | ![输入图片说明](https://foruda.gitee.com/images/1678979894464784408/0d020c07_1766278.png "屏幕截图") 71 | 72 | > `seata-server.properties` 更改 73 | 74 | ![输入图片说明](https://foruda.gitee.com/images/1678979902433843257/12da2839_1766278.png "屏幕截图") 75 | 76 | ### 使用内置 `ruoyi-seata-server` 服务 从这开始 77 | 78 | 执行 `ry-seata.sql` 文件 初始化服务端数据库
79 | 修改 `nacos` 内的 `seata-server.properties` 的数据库地址
80 | 启动 `ruoyi-seata-server` 服务即可 81 | 82 | ### 服务启动顺序说明 83 | 84 | 1. 必须启动基础建设: mysql redis nacos
85 | 2. 可选启动基础建设: minio(影响文件上传) seata(影响分布式事务 默认开启) sentinel(影响熔断限流) monitor(影响监控) xxljob(影响定时任务)
86 | 3. 必须启动应用服务: gateway auth system
87 | 4. 可选启动应用服务: resource(影响资源使用 文件上传 邮件 短信等) gen(代码生成) job(影响定时任务) demo(影响demo使用) 88 | -------------------------------------------------------------------------------- /plus-ui/home.md: -------------------------------------------------------------------------------- 1 | # 项目简介 2 | 3 | --- 4 | 5 | ## 平台简介 6 | 7 | - 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [TS](https://www.typescriptlang.org/) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。 8 | - 成员项目: 基于 vben5(ant-design-vue) 的前端项目 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5) 9 | - 成员项目: 基于soybean 的前端项目 [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean) 10 | - 配套后端代码仓库地址 11 | - [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus) 12 | - [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus) 13 | 14 | ## 分支说明 15 | 16 | - ts分支(稳定发布主分支 生产可用) 17 | - dev分支(开发分支 开发过程中使用) 18 | 19 | ## 前端运行 20 | 21 | ```bash 22 | # 克隆项目 23 | git clone https://gitee.com/JavaLionLi/plus-ui.git 24 | 25 | # 安装依赖 26 | npm install --registry=https://registry.npmmirror.com 27 | 28 | # 启动服务 29 | npm run dev 30 | 31 | # 构建生产环境 32 | npm run build:prod 33 | 34 | # 前端访问地址 http://localhost:80 35 | ``` 36 | 37 | ## 本框架与RuoYi的业务差异 38 | 39 | | 业务 | 功能说明 | 本框架 | RuoYi | 40 | | ------------ | ------------------------------------------------------------- | ------ | ----------------------------- | 41 | | 租户管理 | 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等 | 支持 | 无 | 42 | | 租户套餐管理 | 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等 | 支持 | 无 | 43 | | 用户管理 | 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等 | 支持 | 支持 | 44 | | 部门管理 | 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限 | 支持 | 支持 | 45 | | 岗位管理 | 配置系统用户所属担任职务 | 支持 | 支持 | 46 | | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等 | 支持 | 支持 | 47 | | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | 支持 | 支持 | 48 | | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | 支持 | 支持 | 49 | | 参数管理 | 对系统动态配置常用参数 | 支持 | 支持 | 50 | | 通知公告 | 系统通知公告信息发布维护 | 支持 | 支持 | 51 | | 操作日志 | 系统正常操作日志记录和查询 系统异常信息日志记录和查询 | 支持 | 支持 | 52 | | 登录日志 | 系统登录日志记录查询包含登录异常 | 支持 | 支持 | 53 | | 文件管理 | 系统文件展示、上传、下载、删除等管理 | 支持 | 无 | 54 | | 文件配置管理 | 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理 | 支持 | 无 | 55 | | 在线用户管理 | 已登录系统的在线用户信息监控与强制踢出操作 | 支持 | 支持 | 56 | | 定时任务 | 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等 | 支持 | 仅支持任务与日志管理 | 57 | | 代码生成 | 多数据源前后端代码的生成(java、html、xml、sql)支持CRUD下载 | 支持 | 仅支持单数据源 | 58 | | 系统接口 | 根据业务代码自动生成相关的api接口文档 | 支持 | 支持 | 59 | | 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等 | 支持 | 仅支持单机CPU、内存、磁盘监控 | 60 | | 缓存监控 | 对系统的缓存信息查询,命令统计等。 | 支持 | 支持 | 61 | | 在线构建器 | 拖动表单元素生成相应的HTML代码。 | 支持 | 支持 | 62 | | 使用案例 | 系统的一些功能案例 | 支持 | 不支持 | 63 | 64 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | plus-doc 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /static/js/docsify-copy-code.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * docsify-copy-code 3 | * v3.0.0 4 | * https://github.com/jperasmus/docsify-copy-code 5 | * (c) 2017-2023 JP Erasmus 6 | * MIT license 7 | */ 8 | !function(){"use strict";function e(o){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(o)}!function(e,o){void 0===o&&(o={});var t=o.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===t&&n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),c.styleSheet?c.styleSheet.cssText=e:c.appendChild(document.createTextNode(e))}}(".docsify-copy-code-button,.docsify-copy-code-button>span{cursor:pointer;transition:all .25s ease}.docsify-copy-code-button{background:grey;background:var(--theme-color,grey);border:0;border-radius:0;color:#fff;font-size:1em;opacity:0;outline:0;overflow:visible;padding:.65em .8em;position:absolute;right:0;top:0;z-index:1}.docsify-copy-code-button>span{background:inherit;border-radius:3px;pointer-events:none}.docsify-copy-code-button>.error,.docsify-copy-code-button>.success{font-size:.825em;opacity:0;padding:.5em .65em;position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:-100}.docsify-copy-code-button.error>.error,.docsify-copy-code-button.success>.success{opacity:1;right:100%;transform:translate(-25%,-50%)}.docsify-copy-code-button:focus,pre:hover .docsify-copy-code-button{opacity:1}.docsify-copy-code-button>[aria-live]{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px}"),document.querySelector('link[href*="docsify-copy-code"]')&&console.warn("[Deprecation] Link to external docsify-copy-code stylesheet is no longer necessary."),window.DocsifyCopyCodePlugin={init:function(){return function(e,o){e.ready((function(){console.warn("[Deprecation] Manually initializing docsify-copy-code using window.DocsifyCopyCodePlugin.init() is no longer necessary.")}))}}},window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(o,t){var n={buttonText:"Copy to clipboard",errorText:"Error",successText:"Copied"};o.doneEach((function(){var o=Array.from(document.querySelectorAll("pre[data-lang]"));t.config.copyCode&&Object.keys(n).forEach((function(o){var c=t.config.copyCode[o];"string"==typeof c?n[o]=c:"object"===e(c)&&Object.keys(c).some((function(e){var t=location.href.indexOf(e)>-1;return n[o]=t?c[e]:n[o],t}))}));var c=['"].join("");o.forEach((function(e){e.insertAdjacentHTML("beforeend",c)}))})),o.mounted((function(){var e=document.querySelector(".content");e&&e.addEventListener("click",(function(e){if(e.target.classList.contains("docsify-copy-code-button")){var o="BUTTON"===e.target.tagName?e.target:e.target.parentNode,t=document.createRange(),c=o.parentNode.querySelector("code"),i=o.querySelector("[aria-live]"),r=window.getSelection();t.selectNode(c),r&&(r.removeAllRanges(),r.addRange(t));try{document.execCommand("copy")&&(o.classList.add("success"),i.innerText=n.successText,setTimeout((function(){o.classList.remove("success"),i.innerText=""}),1e3))}catch(e){console.error("docsify-copy-code: ".concat(e)),o.classList.add("error"),i.innerText=n.errorText,setTimeout((function(){o.classList.remove("error"),i.innerText=""}),1e3)}(r=window.getSelection())&&("function"==typeof r.removeRange?r.removeRange(t):"function"==typeof r.removeAllRanges&&r.removeAllRanges())}}))}))}].concat(window.$docsify.plugins||[])}(); 9 | //# sourceMappingURL=docsify-copy-code.min.js.map -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/deploy.md: -------------------------------------------------------------------------------- 1 | # 应用部署 2 | - - - 3 | ## 版本 >= 1.3.0 4 | 5 | ### 请优先阅读 [idea环境配置](/ruoyi-cloud-plus/quickstart/idea_environment.md) 6 | 7 | ## 手动部署 8 | 9 | 在服务器安装 `mysql` `redis` `nginx` `minio` 等其他组件 10 | 11 | 将项目内 `script/docker/` 文件夹下的文件内容 放到对应的组件内
12 | 例如: 将项目内 `script/docker/nginx/nginx.conf` 配置文件 复制到 `nginx` 配置内
13 | 将项目内 `script/docker/redis/redis.conf` 配置文件 复制到 `redis` 配置内
14 | 15 | 并修改相关参数如 `前端页面存放位置` `后端Ip地址` 等使其生效 16 | 17 | jar包部署后端服务 打包命令如下 18 | ```mvn 19 | mvn clean install -D maven.test.skip=true -P prod 20 | ``` 21 | 22 | 字体文件需要安装到系统内(系统如何安装字体可以百度) 不安装工作流展示会乱码 23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1742975420470404603/55997137_1766278.png "屏幕截图") 25 | 26 | 前端参考下方前端部署章节 27 | 28 | 29 | ## docker 后端部署 30 | 31 | ### 请优先阅读 [idea环境配置](https://gitee.com/dromara/RuoYi-Cloud-Plus/wikis/pages?sort_id=5985190&doc_id=2056143) 32 | 33 | **重点: 一知半解的必看** 34 | > [docker安装](https://lionli.blog.csdn.net/article/details/83153029)
35 | > [docker-compose安装](https://lionli.blog.csdn.net/article/details/111220320)
36 | > [docker网络模式讲解](https://lionli.blog.csdn.net/article/details/109603785)
37 | > [docker 开启端口 2375 供外部程序访问](https://lionli.blog.csdn.net/article/details/92627962) 38 | 39 | ### 将配置使用FTP上传到根目录 40 | idea拖拽文件到远程目录即可上传
41 | ![输入图片说明](https://foruda.gitee.com/images/1662109450908169859/eaac9299_1766278.png "屏幕截图") 42 | 43 | ### 给docker分配文件夹权限 44 | **重点注意: 一定要确保目录 `/docker` 及其所有子目录 具有写权限 如果后续出现权限异常问题 重新执行一遍分配权限** 45 | ![输入图片说明](https://foruda.gitee.com/images/1662109847279259882/3a2202c1_1766278.png "屏幕截图") 46 | ```shell 47 | chmod -R 777 /docker 48 | ``` 49 | ### 构建应用镜像 50 | 51 | **1.需要先使用maven打包成jar包**
52 | ![输入图片说明](https://foruda.gitee.com/images/1662110477410977621/c6931c42_1766278.png "屏幕截图") 53 | 54 | **2.执行构建**
55 | > 项目初始化后会自动生成构建镜像的运行配置
56 | 配置好docker连接之后 运行如下即可构建对应的应用镜像 57 | 58 | **重点注意: idea2024及以上版本要求必须在本地安装docker才可以执行如下操作** 59 | 60 | ![输入图片说明](https://foruda.gitee.com/images/1662110192257483752/0f754b47_1766278.png "屏幕截图") 61 | ![输入图片说明](https://foruda.gitee.com/images/1662120029312793237/89dee3e5_1766278.png "屏幕截图") 62 | 63 | **3.结构讲解**
64 | 右键编辑 即可看到内部配置
65 | 66 | ![输入图片说明](https://foruda.gitee.com/images/1662458355500139498/eaa26036_1766278.png "屏幕截图") 67 | ![输入图片说明](https://foruda.gitee.com/images/1662458446794722159/32c086a7_1766278.png "屏幕截图") 68 | 69 | 70 | ### 创建基础服务 71 | 72 | ```shell 73 | docker-compose up -d mysql nginx-web redis minio 74 | ``` 75 | 76 | ### 创建中心服务(需要先构建服务镜像) 77 | 78 | 1.X 79 | ```shell 80 | docker-compose up -d nacos seata-server sentinel ruoyi-monitor ruoyi-xxl-job-admin 81 | ``` 82 | 83 | 2.X 84 | ```shell 85 | docker-compose up -d nacos seata-server sentinel ruoyi-monitor ruoyi-snailjob-server 86 | ``` 87 | 88 | ### 创建业务服务(需要先构建服务镜像) 89 | 90 | ```shell 91 | docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system ruoyi-resource 92 | ``` 93 | 94 | ### docker其他操作(idea的docker插件 推荐使用) 95 | ![输入图片说明](https://foruda.gitee.com/images/1662458296425228696/90b4b4f8_1766278.png "屏幕截图") 96 | 97 | 98 | ## 前端部署 99 | 100 | 执行打包命令 101 | ```shell 102 | # 打包正式环境 103 | npm run build:prod 104 | ``` 105 | 打包后生成打包文件在 `ruoyi-ui/dist` 目录
106 | 将 `dist` 目录下文件(不包含 `dist` 目录) 上传到部署服务器 `docker/nginx/html` 目录下(手动部署放入自己配置的路径即可)
107 | ![输入图片说明](https://foruda.gitee.com/images/1662110914769648699/07f344c4_1766278.png "屏幕截图")
108 | 重启 `nginx` 服务即可 109 | 110 | 111 | ### 如需更改后端代理路径或者后端ip地址的话往下看 112 | 113 | 更改`nginx.conf`配置文件代理路径(注意: /开头/结尾) 114 | 115 | ![输入图片说明](https://foruda.gitee.com/images/1660185698211067202/屏幕截图.png "屏幕截图.png") 116 | 117 | 更改前端`.env.环境` 文件内的 `VITE_APP_BASE_API` 118 | 119 | ![输入图片说明](https://foruda.gitee.com/images/1724318035232137124/5d035a09_1766278.png "屏幕截图") 120 | 121 | 更改`nginx.conf`配置文件后端ip地址 122 | 123 | ![输入图片说明](https://foruda.gitee.com/images/1660185711265558730/屏幕截图.png "屏幕截图.png") 124 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/quickstart/deploy.md: -------------------------------------------------------------------------------- 1 | # 应用部署 2 | - - - 3 | ## 版本 >= 4.3.0 4 | 5 | ### 请优先阅读 [idea环境配置](/ruoyi-vue-plus/quickstart/idea_environment.md) 6 | 7 | ## 手动部署 8 | 9 | 在服务器安装 `mysql` `redis` `nginx` `minio` 10 | 11 | 将项目内 `script/docker/nginx/nginx.conf` 配置文件 复制到 `nginx` 配置内
12 | 将项目内 `script/docker/redis/redis.conf` 配置文件 复制到 `redis` 配置内 13 | 14 | 并修改相关参数如 `前端页面存放位置` `后端Ip地址` 等使其生效 15 | 16 | jar包部署后端服务 打包命令如下 17 | 18 | 3.2.0及以上 19 | ```mvn 20 | mvn clean package -D maven.test.skip=true -P prod 21 | ``` 22 | 服务器需创建临时文件存储目录与配置文件对应(无此目录上传文件会报错) 23 | 24 | ![输入图片说明](https://foruda.gitee.com/images/1659951373949149804/屏幕截图.png "屏幕截图.png") 25 | 26 | 字体文件需要安装到系统内(系统如何安装字体可以百度) 不安装工作流展示会乱码 27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1742975420470404603/55997137_1766278.png "屏幕截图") 29 | 30 | 前端参考下方前端部署章节 31 | 32 | ## 部署视频 33 | 34 | [RuoYi-Vue-Plus 5.0 生产环境搭建部署](https://www.bilibili.com/video/BV1mL411e7ha/) 35 | 36 | ## docker 后端部署 37 | 38 | ### 请优先阅读 [idea环境配置](/ruoyi-vue-plus/quickstart/idea_environment.md) 39 | 40 | **重点: 一知半解的必看** 41 | > [docker安装](https://lionli.blog.csdn.net/article/details/83153029)
42 | > [docker-compose安装](https://lionli.blog.csdn.net/article/details/111220320)
43 | > [docker网络模式讲解](https://lionli.blog.csdn.net/article/details/109603785)
44 | > [docker 开启端口 2375 供外部程序访问](https://lionli.blog.csdn.net/article/details/92627962) 45 | 46 | ### 将配置使用FTP上传到根目录 47 | idea拖拽文件到远程目录即可上传 48 | 49 | ![输入图片说明](https://foruda.gitee.com/images/1662109450908169859/eaac9299_1766278.png "屏幕截图") 50 | 51 | ### 给docker分配文件夹权限 52 | **重点注意: 一定要确保目录 `/docker` 及其所有子目录 具有写权限 如果后续出现权限异常问题 重新执行一遍分配权限** 53 | 54 | ![输入图片说明](https://foruda.gitee.com/images/1662109847279259882/3a2202c1_1766278.png "屏幕截图") 55 | ```shell 56 | chmod -R 777 /docker 57 | ``` 58 | ### 构建应用镜像 59 | 60 | **1.需要先使用maven打包成jar包** 61 | 62 | ![输入图片说明](https://foruda.gitee.com/images/1662110477410977621/c6931c42_1766278.png "屏幕截图") 63 | 64 | **2.执行构建** 65 | > 项目初始化后会自动生成构建镜像的运行配置
66 | > 配置好docker连接之后 运行如下即可构建对应的应用镜像 67 | 68 | **重点注意: idea2024及以上版本要求必须在本地安装docker才可以执行如下操作** 69 | 70 | ![输入图片说明](https://foruda.gitee.com/images/1662110192257483752/0f754b47_1766278.png "屏幕截图") 71 | 72 | ![输入图片说明](https://foruda.gitee.com/images/1662120004773449909/9fdef59c_1766278.png "屏幕截图") 73 | 74 | **3.结构讲解** 75 | 右键编辑 即可看到内部配置 76 | 77 | ![输入图片说明](https://foruda.gitee.com/images/1662458355500139498/eaa26036_1766278.png "屏幕截图") 78 | 79 | ![输入图片说明](https://foruda.gitee.com/images/1662458446794722159/32c086a7_1766278.png "屏幕截图") 80 | 81 | 82 | ### 创建基础服务 83 | 84 | ```shell 85 | docker-compose up -d mysql nginx-web redis minio 86 | ``` 87 | 88 | ### 创建业务服务(需要先构建服务镜像) 89 | 90 | 4.X 91 | ```shell 92 | docker-compose up -d ruoyi-monitor-admin ruoyi-xxl-job-admin ruoyi-server1 ruoyi-server2 93 | ``` 94 | 95 | 5.X 96 | ```shell 97 | docker-compose up -d ruoyi-monitor-admin ruoyi-snailjob-server ruoyi-server1 ruoyi-server2 98 | ``` 99 | 100 | ### docker其他操作(idea的docker插件 推荐使用) 101 | ![输入图片说明](https://foruda.gitee.com/images/1662458271941863770/cd180a04_1766278.png "屏幕截图") 102 | 103 | ## 前端部署 104 | 105 | 执行打包命令 106 | ```shell 107 | # 打包正式环境 108 | npm run build:prod 109 | ``` 110 | 打包后生成打包文件在 `ruoyi-ui/dist` 目录 111 | 将 `dist` 目录下文件(不包含 `dist` 目录) 上传到部署服务器 `docker/nginx/html` 目录下(手动部署放入自己配置的路径即可) 112 | 113 | ![输入图片说明](https://foruda.gitee.com/images/1662110914769648699/07f344c4_1766278.png "屏幕截图") 114 | 115 | 重启 `nginx` 服务即可 116 | 117 | 118 | ### 如需更改后端代理路径或者后端ip地址的话往下看 119 | 120 | 更改`nginx.conf`配置文件代理路径(注意: /开头/结尾) 121 | 122 | ![输入图片说明](https://foruda.gitee.com/images/1660185698211067202/屏幕截图.png "屏幕截图.png") 123 | 124 | 更改前端`.env.环境` 文件内的 `VITE_APP_BASE_API` 125 | 126 | ![输入图片说明](https://foruda.gitee.com/images/1724318035232137124/5d035a09_1766278.png "屏幕截图") 127 | 128 | 更改`nginx.conf`配置文件后端ip地址 129 | 130 | ![输入图片说明](https://foruda.gitee.com/images/1660185711265558730/屏幕截图.png "屏幕截图.png") 131 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/quickstart/init.md: -------------------------------------------------------------------------------- 1 | # 2.X项目初始化 2 | - - - 3 | ### 项目分支说明 4 | 5 | `2.X` 主分支 新2.X版本 稳定发布分支
6 | `dev` 开发分支 代码随时更新 不推荐使用 经测试后会发布到主分支
7 | `future/*` 新功能预览分支 8 | 9 | ### 项目必备环境 10 | > 推荐使用 `docker` 安装 项目内置 `docker` 编排文件 11 | 12 | **注意: 禁止使用 `oraclejdk`(由于spring的bug导致打包运行会报错)** 13 | 14 | ![输入图片说明](https://foruda.gitee.com/images/1720080025744223375/0213a652_1766278.png "屏幕截图") 15 | 16 | * Spring官方推荐使用OpenJDK-17/21 [JDK下载地址](https://bell-sw.com/pages/downloads/) 17 | * mysql 5.7 8.0 (其他版本未测试 如其他版本没问题 可以告知咱们) 18 | * oracle >= 12c (其他版本未测试 如其他版本没问题 可以告知咱们) 19 | * postgres 13 14 15 (其他版本未测试 如其他版本没问题 可以告知咱们) 20 | * redis 6.X 7.X(禁止使用7.4版本) 由于框架大量使用了redis特性 版本必须 >= 6.X ([win redis 下载地址](https://github.com/zkteco-home/redis-windows)) 21 | * minio(RustFS可用于替换minio 比较新需谨慎使用) 本地存储或阿里/腾讯/七牛云等一切支持S3协议的云存储 22 | * (注意 minio最后一个可用版本2025-04-22T22-12-26Z 再往上功能被阉割) 23 | * maven >= 3.8.X 24 | * nodejs 18.18 (其他版本未测试 如其他版本没问题 可以告知咱们) 25 | * npm >= 8.X (7.X确认有问题) 26 | * nacos >= 2.X(建议使用框架内置的 采用nacos官方jar包 做了监控与安全增强) 27 | * sentinel 框架内置(建议使用框架内置的 采用sentinel官方jar包) 28 | * seata 框架内置(建议使用框架内置的 采用seata官方jar包) 29 | * idea 版本避坑指南 看下面: 30 | * 2023(全系列不要用 bug太多说不过来) 31 | * 2024.1/2024.2(maven插件无法刷新依赖) 32 | * 2025.1/2025.2(有一些bug不建议使用) 33 | * 目前推荐使用 2024.3(jdk17) 2025.3(jdk21-25) 34 | 35 | ### 需勾选 maven 对应环境 36 | 37 | ![输入图片说明](https://foruda.gitee.com/images/1678976284045210056/a2f28d33_1766278.png "屏幕截图") 38 | 39 | ### 默认 `JDK17` 如有变动 需更改以下配置 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1678941027820943505/c688e01e_1766278.png "屏幕截图") 42 | ![输入图片说明](https://foruda.gitee.com/images/1678941120518807034/4d56fcc9_1766278.png "屏幕截图") 43 | 44 | ### sql导入 45 | 46 | 将sql导入到与sql文件名对应的数据库(不要放到一个库下)
47 | 默认数据库为mysql如需使用其他数据库 看这里 => [多数据库数据源](/ruoyi-cloud-plus/framework/extend/dynamic_datasource.md)
48 | 49 | ![输入图片说明](https://foruda.gitee.com/images/1717122730708924506/7f3aaecf_1766278.png "屏幕截图") 50 | 51 | ### 使用内置 `ruoyi-nacos` 服务 从这开始 52 | 53 | > 更改 ruoyi-nacos 数据库地址 54 | 55 | ![输入图片说明](https://foruda.gitee.com/images/1664422006264405180/cac5afc6_1766278.png "屏幕截图") 56 | 57 | **其余流程同下方步骤一致** 58 | 59 | ### 自建 Nacos 从这开始 60 | 61 | **注意:使用自建Nacos必须保证版本与框架一致 因为nacos各个版本兼容性不好 建议最好是先用框架自带的** 62 | 63 | **Nacos 数据库指向 ry-config 数据库(此处重点: 此数据库为定制数据 未使用此库会无法读取配置)** 64 | 65 | > 将项目 `script/config/nacos` 下所有配置 复制到 `nacos` 内(建议手动复制内容 防止编码不一致问题) 66 | 67 | **注意: 不懂就不要乱改配置文件内容 框架内所有功能都是配置好的!!!不要画蛇添足**
68 | **注意: 不懂就不要乱改配置文件内容 框架内所有功能都是配置好的!!!不要画蛇添足**
69 | **注意: 不懂就不要乱改配置文件内容 框架内所有功能都是配置好的!!!不要画蛇添足**
70 | 71 | ![输入图片说明](https://foruda.gitee.com/images/1746693993121928066/26033bb1_1766278.png "屏幕截图") 72 | ![输入图片说明](https://foruda.gitee.com/images/1678979856705927770/75cc1e8c_1766278.png "屏幕截图") 73 | 74 | > 更改 `主pom文件` 对应环境的 `nacos` 地址 75 | 76 | ![输入图片说明](https://foruda.gitee.com/images/1678979881888833924/7e6a191f_1766278.png "屏幕截图") 77 | 78 | ### 更改 `Nacos` 自定义配置 79 | 80 | **忠告: 微服务配置相当复杂 请勿在不懂原理的情况下乱改**
81 | **忠告: 微服务配置相当复杂 请勿在不懂原理的情况下乱改**
82 | **忠告: 微服务配置相当复杂 请勿在不懂原理的情况下乱改**
83 | 84 | > `application-common.yml` 更改 85 | 86 | ![输入图片说明](https://foruda.gitee.com/images/1678979889410167794/100db4ab_1766278.png "屏幕截图") 87 | 88 | > `datasource.yml` 更改 89 | 90 | ![输入图片说明](https://foruda.gitee.com/images/1678979894464784408/0d020c07_1766278.png "屏幕截图") 91 | 92 | > `seata-server.properties` 更改 93 | 94 | ![输入图片说明](https://foruda.gitee.com/images/1678979902433843257/12da2839_1766278.png "屏幕截图") 95 | 96 | ### 使用内置 `ruoyi-seata-server` 服务 从这开始 97 | 98 | 执行 `ry-seata.sql` 文件 初始化服务端数据库
99 | 修改 `nacos` 内的 `seata-server.properties` 的数据库地址
100 | 启动 `ruoyi-seata-server` 服务即可 101 | 102 | ### 服务启动顺序说明 103 | 104 | 1. 必须启动基础建设: mysql redis nacos
105 | 2. 可选启动基础建设: minio(影响文件上传) seata(影响分布式事务 默认开启) sentinel(影响熔断限流) monitor(影响监控) snailjob(影响定时任务)
106 | 3. 必须启动应用服务: gateway auth system
107 | 4. 可选启动应用服务: resource(影响资源使用 websocket 文件上传 邮件 短信等) workflow(工作流) gen(代码生成) job(影响定时任务) demo(影响demo使用) 108 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | - **满三年大力赞助** 3 | - 4 | - 5 | - 6 | - 7 | - 8 | 9 | * **简介** 10 | * [项目简介](/ruoyi-vue-plus/home.md) 11 | * [更新日志](/ruoyi-vue-plus/changlog.md) 12 | * **快速开始** 13 | * [项目初始化](/ruoyi-vue-plus/quickstart/init.md) 14 | * [5.X新功能介绍](/ruoyi-vue-plus/quickstart/5.Xnew.md) 15 | * [工作流初始化](/ruoyi-vue-plus/quickstart/worker_init.md) 16 | * [搭建Admin监控](/ruoyi-vue-plus/quickstart/admin_init.md) 17 | * [搭建SnailJob调度中心](/ruoyi-vue-plus/quickstart/snail_job_init.md) 18 | * [idea环境配置](/ruoyi-vue-plus/quickstart/idea_environment.md) 19 | * [应用部署](/ruoyi-vue-plus/quickstart/deploy.md) 20 | * [扩展项目](/ruoyi-vue-plus/quickstart/extend_project.md) 21 | * **框架功能** 22 | * [项目结构](/ruoyi-vue-plus/framework/tree.md) 23 | * [软件架构图](/ruoyi-vue-plus/framework/architecture_diagram.md) 24 | * 框架相关 25 | * [创建新模块](/ruoyi-vue-plus/framework/association/new_module.md) 26 | * [修改包名](/ruoyi-vue-plus/framework/association/update_package_name.md) 27 | * [接口文档](/ruoyi-vue-plus/framework/association/doc.md) 28 | * [修改应用路径](/ruoyi-vue-plus/framework/association/update_url.md) 29 | * [国际化](/ruoyi-vue-plus/framework/association/i18n.md) 30 | * 基础功能 31 | * [数据库表设计](/ruoyi-vue-plus/framework/basic/database.md) 32 | * [系统用户相关](/ruoyi-vue-plus/framework/basic/user.md) 33 | * [权限控制](/ruoyi-vue-plus/framework/basic/permissions_control.md) 34 | * [导出功能](/ruoyi-vue-plus/framework/basic/export.md) 35 | * [导入功能](/ruoyi-vue-plus/framework/basic/import.md) 36 | * [参数校验](/ruoyi-vue-plus/framework/basic/param_check.md) 37 | * [代码生成](/ruoyi-vue-plus/framework/basic/code_generate.md) 38 | * [分页功能](/ruoyi-vue-plus/framework/basic/page.md) 39 | * [OSS功能](/ruoyi-vue-plus/framework/basic/oss.md) 40 | * [数据权限](/ruoyi-vue-plus/framework/basic/permissions.md) 41 | * [接口放行](/ruoyi-vue-plus/framework/basic/interface_release.md) 42 | * [多租户功能](/ruoyi-vue-plus/framework/basic/tenant.md) 43 | * [第三方授权功能](/ruoyi-vue-plus/framework/basic/social.md) 44 | * [客户端管理功能](/ruoyi-vue-plus/framework/basic/client.md) 45 | * 扩展功能 46 | * [多数据源](/ruoyi-vue-plus/framework/extend/dynamic_datasource.md) 47 | * [短信模块](/ruoyi-vue-plus/framework/extend/sms.md) 48 | * [邮件功能](/ruoyi-vue-plus/framework/extend/mail.md) 49 | * [防重幂等](/ruoyi-vue-plus/framework/extend/idempotent.md) 50 | * [缓存使用](/ruoyi-vue-plus/framework/extend/cache.md) 51 | * [数据脱敏](/ruoyi-vue-plus/framework/extend/sensitive.md) 52 | * [API加解密](/ruoyi-vue-plus/framework/extend/api_encrypt.md) 53 | * [数据加解密](/ruoyi-vue-plus/framework/extend/encrypt.md) 54 | * [翻译功能](/ruoyi-vue-plus/framework/extend/translation.md) 55 | * [WebSocket功能](/ruoyi-vue-plus/framework/extend/websocket.md) 56 | * [SSE功能](/ruoyi-vue-plus/framework/extend/sse.md) 57 | * [Skywalking链路监控](/ruoyi-vue-plus/framework/extend/skywalking.md) 58 | * [对接MaxKey单点登录](/ruoyi-vue-plus/framework/extend/maxkey.md) 59 | * [对接TOPIAM单点登录](/ruoyi-vue-plus/framework/extend/topiam.md) 60 | * 功能说明 61 | * [事务相关](/ruoyi-vue-plus/framework/explain/transaction.md) 62 | * [单元测试](/ruoyi-vue-plus/framework/explain/test.md) 63 | * [主键使用说明](/ruoyi-vue-plus/framework/explain/key.md) 64 | * [关于多表查询](/ruoyi-vue-plus/framework/explain/about_join.md) -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/tenant.md: -------------------------------------------------------------------------------- 1 | # 多租户功能 2 | - - - 3 | ## 版本 >= 5.X 4 | 5 | ## 知识点解释 6 | 7 | 请先了解清楚什么是多租户系统什么是saas系统在考虑要不要用多租户功能
8 | 多租户是为了解决一套软件部署多份问题的 使用共同的服务器 为多家独立的公司服务
9 | 多租户是平台级别 租户与租户之间数据是完全隔离的 属于京东和淘宝的关系 也就是租户和租户之间完全没关系
10 | 不要跑来跟我说什么平台下有多商户 有大小租户 有上下级租户 我只能告诉你这都不是多租户系统
11 | 商户 大小租户 这种业务概念都是平台下的业务 应该使用数据权限结合业务处理 12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1747208232753381691/bb2ab775_1766278.png "屏幕截图") 14 | 15 | 总结: saas系统就是卖软件的 客户与客户之间毫无关系 搞清楚再使用不然后果自负 16 | 17 | ## 前置说明(重要) 18 | 1. 本框架多租户功能的实现是基于 [MyBatis-Plus 多租户插件](https://baomidou.com/pages/aef2f2/#tenantlineinnerinterceptor) 的,只支持最简单的隔离。 19 | 2. 本系统默认开启多租户功能。 20 | 3. 多租户业务表建表需要加上租户id `tenant_id`,可参考其他系统表。 21 | 4. 非多租户表可在配置文件进行配置排除。 22 | 5. 只有超级管理员支持切换租户。 23 | 24 | ## 多租户使用流程(先说结论再展开!) 25 | 0. 开启多租户配置(系统默认已经开启) 26 | 1. 登录界面(可以选择不同租户) 27 | > 注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。 28 | 2. 设置多租户套餐 29 | 3. 新增/修改租户(需要选择套餐) 30 | 4. 切换租户(仅超级管理员可操作) 31 | 32 | ## 多租户配置 33 | `application.yml`
34 | 35 | > 开关 `enable` 节点不用废话。
36 | > 如果不需要过滤租户的表可在 `excludes` 节点下添加。 37 | 38 | **注意: 如果已经基于租户模式启动了程序 关闭租户必须删除mysql与redis内的相关数据重新导入sql** 39 | 40 | ![输入图片说明](https://foruda.gitee.com/images/1680168468127690787/2cd3279e_4959041.png "屏幕截图") 41 | 42 | ## 忽略租户 43 | 44 | 1.如果需要指定单独 SQL 不开启过滤,可在对应的 Mapper 接口添加如下忽略注解: 45 | ``` 46 | @InterceptorIgnore(tenantLine = "true", dataPermission = "false") 47 | ``` 48 | **此处注意事项 使用此注解如果需要开启数据权限 dataPermission = "false" 必须添加 mp的注解默认是忽略数据权限的 会导致数据权限失效** 49 | 50 | 2.如果需要在业务层忽略多租户,可调用以下方法(推荐使用): 51 | ``` 52 | # 无返回值 53 | TenantHelper.ignore(() -> { 业务代码 }); 54 | # 有返回值 55 | Class result = TenantHelper.ignore(() -> { return 业务代码 }); 56 | ``` 57 | 58 | ## 动态切换租户 59 | 60 | **仅适用于特殊需求业务(例如: 创建租户时, 对该租户操作一些数据, 或者需要去其他租户查一些数据等) 禁止乱用后果自负** 61 | 62 | ``` 63 | # 无返回值 64 | TenantHelper.dynamic(租户id, () -> { 业务代码 }); 65 | # 有返回值 66 | Class result = TenantHelper.dynamic(租户id, () -> { return 业务代码 }); 67 | ``` 68 | 69 | ## 登录界面 70 | 71 | ![输入图片说明](https://foruda.gitee.com/images/1680173982933030545/bca146d7_4959041.png "屏幕截图") 72 | 73 | > 注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。 74 | 75 | ## 租户套餐管理 76 | ### 租户套餐新增 77 | ![输入图片说明](https://foruda.gitee.com/images/1680174317475230288/352957a1_4959041.png "屏幕截图") 78 | 79 | ![输入图片说明](https://foruda.gitee.com/images/1680174602877523112/fc194f17_4959041.png "屏幕截图") 80 | 81 | > 注: 82 | > 1、先新增套餐再新增租户,因为租户新增之后无法修改所选套餐。 83 | > 2、租户所关联的套餐如果后续有修改可以进行同步。 84 | 85 | 86 | ## 租户管理 87 | ### 默认租户 88 | > 注:默认租户无法修改 89 | 90 | ![输入图片说明](https://foruda.gitee.com/images/1680174738913576400/b6aca11a_4959041.png "屏幕截图") 91 | 92 | ### 新增租户 93 | #### 填写表单 94 | ![输入图片说明](https://foruda.gitee.com/images/1680174945220618443/f7181b51_4959041.png "屏幕截图") 95 | 96 | #### 选择新增的租户套餐 97 | ![输入图片说明](https://foruda.gitee.com/images/1680174991869792688/0dbaadd6_4959041.png "屏幕截图") 98 | 99 | #### 新增完成 100 | ![输入图片说明](https://foruda.gitee.com/images/1680175033853525725/42e64b4d_4959041.png "屏幕截图") 101 | 102 | #### 登录租户 103 | ![输入图片说明](https://foruda.gitee.com/images/1680176145378931134/e05f347e_4959041.png "屏幕截图") 104 | 105 | ![输入图片说明](https://foruda.gitee.com/images/1680176208161104366/44a935f1_4959041.png "屏幕截图") 106 | 107 | ### 修改租户 108 | #### 配置域名 109 | ![输入图片说明](https://foruda.gitee.com/images/1680175251192690133/141fa6a6_4959041.png "屏幕截图") 110 | 111 | ![输入图片说明](https://foruda.gitee.com/images/1680175431036971650/db522d39_4959041.png "屏幕截图") 112 | 113 | #### 没有配置域名 114 | ![输入图片说明](https://foruda.gitee.com/images/1680175541165540240/95e211f7_4959041.png "屏幕截图") 115 | 116 | #### 强调一下:这不是bug! 117 | > 注:域名的配置就是为了绑定特定租户! 118 | 119 | ### 同步套餐 120 | 应用场景:租户套餐进行了修改,配置的菜单需要同步到特定租户。 121 | (不是所有租户都有更新套餐的权利, 这是跟钱挂钩的) 122 | 123 | > 点一下按钮的事,图略。 124 | 125 | ## 切换租户(仅超级管理员) 126 | > 注:管理员切换租户不是切换用户,切换的只是数据,管理员拥有所有权限。 127 | 128 | ![输入图片说明](https://foruda.gitee.com/images/1680176324802967804/5c5d6fc3_4959041.png "屏幕截图") 129 | 130 | ![输入图片说明](https://foruda.gitee.com/images/1680176431031189788/0c3f924c_4959041.png "屏幕截图") 131 | 132 | ![输入图片说明](https://foruda.gitee.com/images/1680176496555243569/624ec677_4959041.png "屏幕截图") 133 | 134 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/tenant.md: -------------------------------------------------------------------------------- 1 | # 多租户功能 2 | - - - 3 | ## 版本 >= 2.X 4 | 5 | ## 知识点解释 6 | 7 | 请先了解清楚什么是多租户系统什么是saas系统在考虑要不要用多租户功能
8 | 多租户是为了解决一套软件部署多份问题的 使用共同的服务器 为多家独立的公司服务
9 | 多租户是平台级别 租户与租户之间数据是完全隔离的 属于京东和淘宝的关系 也就是租户和租户之间完全没关系
10 | 不要跑来跟我说什么平台下有多商户 有大小租户 有上下级租户 我只能告诉你这都不是多租户系统
11 | 商户 大小租户 这种业务概念都是平台下的业务 应该使用数据权限结合业务处理 12 | 13 | ![输入图片说明](https://foruda.gitee.com/images/1747208232753381691/bb2ab775_1766278.png "屏幕截图") 14 | 15 | 总结: saas系统就是卖软件的 客户与客户之间毫无关系 搞清楚再使用不然后果自负 16 | 17 | ## 前置说明(重要) 18 | 1. 本框架多租户功能的实现是基于 [MyBatis-Plus 多租户插件](https://baomidou.com/pages/aef2f2/#tenantlineinnerinterceptor) 的,只支持最简单的隔离。 19 | 2. 本系统默认开启多租户功能。 20 | 3. 多租户业务表建表需要加上租户id `tenant_id`,可参考其他系统表。 21 | 4. 非多租户表可在配置文件进行配置排除。 22 | 5. 只有超级管理员支持切换租户。 23 | 24 | ## 多租户使用流程(先说结论再展开!) 25 | 0. 开启多租户配置(系统默认已经开启) 26 | 1. 登录界面(可以选择不同租户) 27 | > 注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。 28 | 2. 设置多租户套餐 29 | 3. 新增/修改租户(需要选择套餐) 30 | 4. 切换租户(仅超级管理员可操作) 31 | 32 | ## 多租户配置 33 | `application-common.yml`
34 | 35 | > 开关 `enable` 节点不用废话。
36 | > 如果不需要过滤租户的表可在 `excludes` 节点下添加。 37 | 38 | **注意: 如果已经基于租户模式启动了程序 关闭租户必须删除mysql与redis内的相关数据重新导入sql** 39 | 40 | ![输入图片说明](https://foruda.gitee.com/images/1680168468127690787/2cd3279e_4959041.png "屏幕截图") 41 | 42 | ## 忽略租户 43 | 44 | 1.如果需要指定单独 SQL 不开启过滤,可在对应的 Mapper 接口添加如下忽略注解: 45 | ``` 46 | @InterceptorIgnore(tenantLine = "true", dataPermission = "false") 47 | ``` 48 | **此处注意事项 使用此注解如果需要开启数据权限 dataPermission = "false" 必须添加 mp的注解默认是忽略数据权限的 会导致数据权限失效** 49 | 50 | 2.如果需要在业务层忽略多租户,可调用以下方法(推荐使用): 51 | ``` 52 | # 无返回值 53 | TenantHelper.ignore(() -> { 业务代码 }); 54 | # 有返回值 55 | Class result = TenantHelper.ignore(() -> { return 业务代码 }); 56 | ``` 57 | 58 | ## 动态切换租户 59 | 60 | **仅适用于特殊需求业务(例如: 创建租户时, 对该租户操作一些数据, 或者需要去其他租户查一些数据等) 禁止乱用后果自负** 61 | 62 | ``` 63 | # 无返回值 64 | TenantHelper.dynamic(租户id, () -> { 业务代码 }); 65 | # 有返回值 66 | Class result = TenantHelper.dynamic(租户id, () -> { return 业务代码 }); 67 | ``` 68 | 69 | ## 登录界面 70 | 71 | ![输入图片说明](https://foruda.gitee.com/images/1680173982933030545/bca146d7_4959041.png "屏幕截图") 72 | 73 | > 注:如果为租户设置了绑定域名,则只能选择当前域名相关的租户列表。 74 | 75 | ## 租户套餐管理 76 | ### 租户套餐新增 77 | ![输入图片说明](https://foruda.gitee.com/images/1680174317475230288/352957a1_4959041.png "屏幕截图") 78 | 79 | ![输入图片说明](https://foruda.gitee.com/images/1680174602877523112/fc194f17_4959041.png "屏幕截图") 80 | 81 | > 注: 82 | > 1、先新增套餐再新增租户,因为租户新增之后无法修改所选套餐。 83 | > 2、租户所关联的套餐如果后续有修改可以进行同步。 84 | 85 | 86 | ## 租户管理 87 | ### 默认租户 88 | > 注:默认租户无法修改 89 | 90 | ![输入图片说明](https://foruda.gitee.com/images/1680174738913576400/b6aca11a_4959041.png "屏幕截图") 91 | 92 | ### 新增租户 93 | #### 填写表单 94 | ![输入图片说明](https://foruda.gitee.com/images/1680174945220618443/f7181b51_4959041.png "屏幕截图") 95 | 96 | #### 选择新增的租户套餐 97 | ![输入图片说明](https://foruda.gitee.com/images/1680174991869792688/0dbaadd6_4959041.png "屏幕截图") 98 | 99 | #### 新增完成 100 | ![输入图片说明](https://foruda.gitee.com/images/1680175033853525725/42e64b4d_4959041.png "屏幕截图") 101 | 102 | #### 登录租户 103 | ![输入图片说明](https://foruda.gitee.com/images/1680176145378931134/e05f347e_4959041.png "屏幕截图") 104 | 105 | ![输入图片说明](https://foruda.gitee.com/images/1680176208161104366/44a935f1_4959041.png "屏幕截图") 106 | 107 | ### 修改租户 108 | #### 配置域名 109 | ![输入图片说明](https://foruda.gitee.com/images/1680175251192690133/141fa6a6_4959041.png "屏幕截图") 110 | 111 | ![输入图片说明](https://foruda.gitee.com/images/1680175431036971650/db522d39_4959041.png "屏幕截图") 112 | 113 | #### 没有配置域名 114 | ![输入图片说明](https://foruda.gitee.com/images/1680175541165540240/95e211f7_4959041.png "屏幕截图") 115 | 116 | #### 强调一下:这不是bug! 117 | > 注:域名的配置就是为了绑定特定租户! 118 | 119 | ### 同步套餐 120 | 应用场景:租户套餐进行了修改,配置的菜单需要同步到特定租户。 121 | (不是所有租户都有更新套餐的权利, 这是跟钱挂钩的) 122 | 123 | > 点一下按钮的事,图略。 124 | 125 | ## 切换租户(仅超级管理员) 126 | > 注:管理员切换租户不是切换用户,切换的只是数据,管理员拥有所有权限。 127 | 128 | ![输入图片说明](https://foruda.gitee.com/images/1680176324802967804/5c5d6fc3_4959041.png "屏幕截图") 129 | 130 | ![输入图片说明](https://foruda.gitee.com/images/1680176431031189788/0c3f924c_4959041.png "屏幕截图") 131 | 132 | ![输入图片说明](https://foruda.gitee.com/images/1680176496555243569/624ec677_4959041.png "屏幕截图") 133 | 134 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/permissions_control.md: -------------------------------------------------------------------------------- 1 | # 权限控制 2 | - - - 3 | 4 | 本文采用 `Sa-Token` 框架实现权限控制。[官方文档传送门](https://sa-token.cc/doc.html#/) 5 | 6 | ## 权限校验 7 | 权限校验指的是校验用户是否拥有访问某个 API 的能力。 8 | 9 | 通常情况下,一个 API 对应一个权限码,如果用户具备当前 API 的权限码,即代表有能力访问该 API。 10 | 11 | ### 1:权限标识 12 | 在本系统中,每一个菜单功能都有对应的权限标识,可以在菜单管理中进行设置。 13 | 14 | > 注: 15 | > 1. 前后端的权限标识要保持一致。 16 | > 2. 权限标识可以使用通配符`*`。 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1701086497939145368/133fb327_4959041.png "屏幕截图") 19 | 20 | 21 | ### 2:校验方法 22 | #### 2.1:使用 `@SaCheckPermission` 注解进行校验 23 | `@SaCheckPermission` 注解是由 `Sa-Token` 框架提供的角色校验注解,可以标注在方法上或类上。 24 | 25 | - 单个权限校验: 26 | 27 | ```Java 28 | @SaCheckPermission("system:user:list") 29 | ``` 30 | 31 | - 多个权限校验(或模式,满足任意一个权限即可): 32 | 33 | ```Java 34 | @SaCheckPermission( 35 | value = { 36 | "system:user:list", 37 | "system:user:query" 38 | }, 39 | mode = SaMode.OR 40 | ) 41 | ``` 42 | 43 | - 多个权限校验(与模式,必须满足所有权限): 44 | 45 | ```Java 46 | @SaCheckPermission( 47 | value = { 48 | "system:user:list", 49 | "system:user:query" 50 | }, 51 | mode = SaMode.AND 52 | ) 53 | ``` 54 | 55 | #### 2.2:使用 `StpUtil` 工具类校验 56 | `StpUtil` 工具类是由 `Sa-Token` 框架提供的权限工具类,提供了常用的校验方法。 57 | 58 | - 判断当前用户是否拥有某个权限(返回 `boolean`): 59 | 60 | ```Java 61 | StpUtil.hasPermission("system:user:list"); 62 | ``` 63 | 64 | - 单个权限校验: 65 | 66 | ```Java 67 | StpUtil.checkPermission("system:user:list"); 68 | ``` 69 | 如果验证未通过,则抛出异常: `NotPermissionException` 70 | 71 | - 多个权限校验(或模式,满足任意一个权限即可): 72 | 73 | ```Java 74 | StpUtil.checkPermissionOr("system:user:list", "system:user:query"); 75 | ``` 76 | 如果验证未通过,则抛出异常: `NotPermissionException` 77 | 78 | - 多个权限校验(与模式,必须满足所有权限): 79 | 80 | ```Java 81 | StpUtil.checkPermissionAnd("system:user:list", "system:user:query"); 82 | ``` 83 | 如果验证未通过,则抛出异常: `NotPermissionException` 84 | 85 | ## 角色校验 86 | 角色校验指的是校验用户是否拥有某个指定角色。 87 | 88 | ### 1:权限标识 89 | 在本系统中,每个角色都拥有唯一的权限字符。 90 | 91 | 除了超级管理员角色外,其他角色的权限字符可以通过角色管理进行设置。 92 | 93 | ![输入图片说明](https://foruda.gitee.com/images/1701085080527279823/3255961d_4959041.png "屏幕截图") 94 | 95 | ### 2:校验方法 96 | #### 2.1:使用 `@SaCheckRole` 注解校验 97 | `@SaCheckRole` 注解是由 `Sa-Token` 框架提供的角色校验注解,可以标注在方法上或类上。 98 | 99 | - 单个角色校验 100 | 101 | ```Java 102 | @SaCheckRole("superadmin") 103 | ``` 104 | 105 | - 多个角色校验(或模式,满足任意一个角色即可): 106 | 107 | ```Java 108 | @SaCheckRole( 109 | value = { 110 | "superadmin", 111 | "admin" 112 | }, 113 | mode = SaMode.OR 114 | ) 115 | ``` 116 | 117 | - 多个角色校验(与模式,必须满足所有角色): 118 | 119 | ```Java 120 | @SaCheckRole( 121 | value = { 122 | "superadmin", 123 | "admin" 124 | }, 125 | mode = SaMode.AND 126 | ) 127 | ``` 128 | 129 | #### 2.2:使用 `StpUtil` 工具类校验 130 | `StpUtil` 工具类是由 `Sa-Token` 框架提供的权限工具类,提供了常用的校验方法。 131 | 132 | - 判断当前用户是否拥有某个角色(返回 `boolean`): 133 | 134 | ```Java 135 | StpUtil.hasRole("superadmin") 136 | ``` 137 | 138 | - 单个权限校验: 139 | 140 | ```Java 141 | StpUtil.checkRole("system:user:list"); 142 | ``` 143 | 如果验证未通过,则抛出异常: `NotRoleException` 144 | 145 | - 多个权限校验(或模式,满足任意一个角色即可): 146 | 147 | ```Java 148 | StpUtil.checkRoleOr("system:user:list", "system:user:query"); 149 | ``` 150 | 如果验证未通过,则抛出异常: `NotRoleException` 151 | 152 | - 多个权限校验(与模式,必须满足所有角色): 153 | 154 | ```Java 155 | StpUtil.checkRoleAnd("system:user:list", "system:user:query"); 156 | ``` 157 | 如果验证未通过,则抛出异常: `NotRoleException` 158 | 159 | ## 角色权限双重 `OR` 校验 160 | 除了分开校验以外,权限和角色也可以进行组合,表示备选校验。 161 | 162 | 简单举个例子: 163 | 164 | 假设某个 API 的权限码为 `system:user:list`,角色 `admin` 可以调用,则可以这样写: 165 | 166 | ```Java 167 | @SaCheckPermission(value = "system:user:list", orRole = "admin") 168 | ``` 169 | 170 | 以上权限只需要满足任意一项即可。更多写法可以参考 `Sa-Token` [官方文档](https://sa-token.cc/doc.html#/use/at-check?id=_4%e3%80%81%e8%a7%92%e8%89%b2%e6%9d%83%e9%99%90%e5%8f%8c%e9%87%8d-or%e6%a0%a1%e9%aa%8c)。 171 | 172 | ## 当前用户的所有权限 173 | 本系统中实现了 `StpInterface` 接口,可以对用户的权限以及角色进行管理,并且可以根据不同的用户类型进行设置。 174 | 175 | 具体参考类:`org.dromara.common.satoken.core.service.SaPermissionImpl` 176 | 177 | ## 忽略权限校验 178 | 请参考文档:[网关路由与放行](/ruoyi-cloud-plus/framework/basic/router_release?id=网关路由与放行) 179 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/permissions_control.md: -------------------------------------------------------------------------------- 1 | # 权限控制 2 | - - - 3 | 4 | 本文采用 `Sa-Token` 框架实现权限控制。[官方文档传送门](https://sa-token.cc/doc.html#/) 5 | 6 | ## 权限校验 7 | 权限校验指的是校验用户是否拥有访问某个 API 的能力。 8 | 9 | 通常情况下,一个 API 对应一个权限码,如果用户具备当前 API 的权限码,即代表有能力访问该 API。 10 | 11 | ### 1:权限标识 12 | 在本系统中,每一个菜单功能都有对应的权限标识,可以在菜单管理中进行设置。 13 | 14 | > 注: 15 | > 1. 前后端的权限标识要保持一致。 16 | > 2. 权限标识可以使用通配符`*`。 17 | 18 | ![输入图片说明](https://foruda.gitee.com/images/1701086497939145368/133fb327_4959041.png "屏幕截图") 19 | 20 | 21 | ### 2:校验方法 22 | #### 2.1:使用 `@SaCheckPermission` 注解进行校验 23 | `@SaCheckPermission` 注解是由 `Sa-Token` 框架提供的角色校验注解,可以标注在方法上或类上。 24 | 25 | - 单个权限校验: 26 | 27 | ```Java 28 | @SaCheckPermission("system:user:list") 29 | ``` 30 | 31 | - 多个权限校验(或模式,满足任意一个权限即可): 32 | 33 | ```Java 34 | @SaCheckPermission( 35 | value = { 36 | "system:user:list", 37 | "system:user:query" 38 | }, 39 | mode = SaMode.OR 40 | ) 41 | ``` 42 | 43 | - 多个权限校验(与模式,必须满足所有权限): 44 | 45 | ```Java 46 | @SaCheckPermission( 47 | value = { 48 | "system:user:list", 49 | "system:user:query" 50 | }, 51 | mode = SaMode.AND 52 | ) 53 | ``` 54 | 55 | #### 2.2:使用 `StpUtil` 工具类校验 56 | `StpUtil` 工具类是由 `Sa-Token` 框架提供的权限工具类,提供了常用的校验方法。 57 | 58 | - 判断当前用户是否拥有某个权限(返回 `boolean`): 59 | 60 | ```Java 61 | StpUtil.hasPermission("system:user:list"); 62 | ``` 63 | 64 | - 单个权限校验: 65 | 66 | ```Java 67 | StpUtil.checkPermission("system:user:list"); 68 | ``` 69 | 如果验证未通过,则抛出异常: `NotPermissionException` 70 | 71 | - 多个权限校验(或模式,满足任意一个权限即可): 72 | 73 | ```Java 74 | StpUtil.checkPermissionOr("system:user:list", "system:user:query"); 75 | ``` 76 | 如果验证未通过,则抛出异常: `NotPermissionException` 77 | 78 | - 多个权限校验(与模式,必须满足所有权限): 79 | 80 | ```Java 81 | StpUtil.checkPermissionAnd("system:user:list", "system:user:query"); 82 | ``` 83 | 如果验证未通过,则抛出异常: `NotPermissionException` 84 | 85 | ## 角色校验 86 | 角色校验指的是校验用户是否拥有某个指定角色。 87 | 88 | ### 1:权限标识 89 | 在本系统中,每个角色都拥有唯一的权限字符。 90 | 91 | 除了超级管理员角色外,其他角色的权限字符可以通过角色管理进行设置。 92 | 93 | ![输入图片说明](https://foruda.gitee.com/images/1701085080527279823/3255961d_4959041.png "屏幕截图") 94 | 95 | ### 2:校验方法 96 | #### 2.1:使用 `@SaCheckRole` 注解校验 97 | `@SaCheckRole` 注解是由 `Sa-Token` 框架提供的角色校验注解,可以标注在方法上或类上。 98 | 99 | - 单个角色校验 100 | 101 | ```Java 102 | @SaCheckRole("superadmin") 103 | ``` 104 | 105 | - 多个角色校验(或模式,满足任意一个角色即可): 106 | 107 | ```Java 108 | @SaCheckRole( 109 | value = { 110 | "superadmin", 111 | "admin" 112 | }, 113 | mode = SaMode.OR 114 | ) 115 | ``` 116 | 117 | - 多个角色校验(与模式,必须满足所有角色): 118 | 119 | ```Java 120 | @SaCheckRole( 121 | value = { 122 | "superadmin", 123 | "admin" 124 | }, 125 | mode = SaMode.AND 126 | ) 127 | ``` 128 | 129 | #### 2.2:使用 `StpUtil` 工具类校验 130 | `StpUtil` 工具类是由 `Sa-Token` 框架提供的权限工具类,提供了常用的校验方法。 131 | 132 | - 判断当前用户是否拥有某个角色(返回 `boolean`): 133 | 134 | ```Java 135 | StpUtil.hasRole("superadmin") 136 | ``` 137 | 138 | - 单个权限校验: 139 | 140 | ```Java 141 | StpUtil.checkRole("system:user:list"); 142 | ``` 143 | 如果验证未通过,则抛出异常: `NotRoleException` 144 | 145 | - 多个权限校验(或模式,满足任意一个角色即可): 146 | 147 | ```Java 148 | StpUtil.checkRoleOr("system:user:list", "system:user:query"); 149 | ``` 150 | 如果验证未通过,则抛出异常: `NotRoleException` 151 | 152 | - 多个权限校验(与模式,必须满足所有角色): 153 | 154 | ```Java 155 | StpUtil.checkRoleAnd("system:user:list", "system:user:query"); 156 | ``` 157 | 如果验证未通过,则抛出异常: `NotRoleException` 158 | 159 | ## 角色权限双重 `OR` 校验 160 | 除了分开校验以外,权限和角色也可以进行组合,表示备选校验。 161 | 162 | 简单举个例子: 163 | 164 | 假设某个 API 的权限码为 `system:user:list`,角色 `admin` 可以调用,则可以这样写: 165 | 166 | ```Java 167 | @SaCheckPermission(value = "system:user:list", orRole = "admin") 168 | ``` 169 | 170 | 以上权限只需要满足任意一项即可。更多写法可以参考 `Sa-Token` [官方文档](https://sa-token.cc/doc.html#/use/at-check?id=_4%e3%80%81%e8%a7%92%e8%89%b2%e6%9d%83%e9%99%90%e5%8f%8c%e9%87%8d-or%e6%a0%a1%e9%aa%8c)。 171 | 172 | ## 当前用户的所有权限 173 | 本系统中实现了 `StpInterface` 接口,可以对用户的权限以及角色进行管理,并且可以根据不同的用户类型进行设置。 174 | 175 | 具体参考类:`org.dromara.common.satoken.core.service.SaPermissionImpl` 176 | 177 | ## 忽略权限校验 178 | 请参考文档:[接口放行](/ruoyi-vue-plus/framework/basic/interface_release?id=接口放行) 179 | 180 | 181 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/tree.md: -------------------------------------------------------------------------------- 1 | # 项目结构 2 | - - - 3 | ## 目录结构 4 | v2.2.1 5 | ~~~ 6 | RuoYi-Cloud-Plus 7 | ├─ ruoyi-api // api模块 8 | │ └─ ruoyi-api-bom // api模块依赖管理 9 | │ └─ ruoyi-api-resource // 资源api模块 10 | │ └─ ruoyi-api-system // 系统api模块 11 | │ └─ ruoyi-api-workflow // 工作流api模块 12 | ├─ ruoyi-auth // 认证服务 [9210] 13 | ├─ ruoyi-common // 通用模块 14 | │ └─ ruoyi-common-alibaba-bom // alibaba 依赖管理 15 | │ └─ ruoyi-common-bom // common 依赖管理 16 | │ └─ ruoyi-common-bus // 消息总线模块 17 | │ └─ ruoyi-common-core // 核心功能模块 18 | │ └─ ruoyi-common-dict // 字典集成模块 19 | │ └─ ruoyi-common-doc // 文档集成模块 20 | │ └─ ruoyi-common-dubbo // dubbo集成模块 21 | │ └─ ruoyi-common-elasticsearch // ES集成模块 22 | │ └─ ruoyi-common-encrypt // 数据加解密模块 23 | │ └─ ruoyi-common-excel // excel集成模块 24 | │ └─ ruoyi-common-idempotent // 幂等功能模块 25 | │ └─ ruoyi-common-job // job定时任务集成模块 26 | │ └─ ruoyi-common-json // json集成模块 27 | │ └─ ruoyi-common-loadbalancer // 团队负载均衡集成模块 28 | │ └─ ruoyi-common-log // 日志集成模块 29 | │ └─ ruoyi-common-logstash // elk日志集成模块 30 | │ └─ ruoyi-common-mail // 邮件集成模块 31 | │ └─ ruoyi-common-mybatis // mybatis数据库相关集成模块 32 | │ └─ ruoyi-common-oss // oss相关集成模块 33 | │ └─ ruoyi-common-prometheus // prometheus监控 34 | │ └─ ruoyi-common-redis // redis集成模块 35 | │ └─ ruoyi-common-satoken // satoken集成模块 36 | │ └─ ruoyi-common-seata // seata分布式事务集成模块 37 | │ └─ ruoyi-common-security // 框架权限鉴权集成模块 38 | │ └─ ruoyi-common-sensitive // 脱敏功能模块 39 | │ └─ ruoyi-common-sentinel // sentinel集成模块 40 | │ └─ ruoyi-common-skylog // skywalking日志收集模块 41 | │ └─ ruoyi-common-sms // 短信集成模块 42 | │ └─ ruoyi-common-social // 社交三方功能模块 43 | │ └─ ruoyi-common-sse // sse流推送模块 44 | │ └─ ruoyi-common-tenant // 租户功能模块 45 | │ └─ ruoyi-common-translation // 通用翻译功能 46 | │ └─ ruoyi-common-web // web服务集成模块 47 | │ └─ ruoyi-common-websocket // websocket服务集成模块 48 | ├─ ruoyi-example // 例子模块 49 | │ └─ ruoyi-demo // 演示模块 [9401] 50 | │ └─ ruoyi-test-mq // mq演示模块 [9402] 51 | ├─ ruoyi-gateway // 网关模块 [8080] 52 | ├─ ruoyi-modules // 功能模块 53 | │ └─ ruoyi-gen // 代码生成模块 [9202] 54 | │ └─ ruoyi-job // 任务调度模块 [9203,9901] 55 | │ └─ ruoyi-resource // 资源模块 [9204] 56 | │ └─ ruoyi-system // 系统模块 [9201] 57 | │ └─ ruoyi-workflow // 工作流模块 [9205] 58 | ├─ ruoyi-visual // 可视化模块 59 | │ └─ ruoyi-monitor // 服务监控模块 [9100] 60 | │ └─ ruoyi-nacos // nacos服务模块 [8848,9848,9849] 61 | │ └─ ruoyi-seata-server // seata服务模块 [7091,8091] 62 | │ └─ ruoyi-sentinel-dashboard // sentinel控制台模块 [8718] 63 | │ └─ ruoyi-snailjob-server // 任务调度控制台模块 [8800,17888] 64 | ├─ plus-ui // 前端框架 [80] 65 | ├─ config/nacos // nacos配置文件(需复制到nacos配置中心使用) 66 | │ └─ sentinel-ruoyi-gateway.json // sentinel对接gateway限流配置文件 67 | │ └─ seata-server.properties // seata服务配置文件 68 | │ └─ application-common.yml // 所有应用主共享配置文件 69 | │ └─ datasource.yml // 所有应用共享数据源配置文件 70 | │ └─ ruoyi-auth.yml // auth 模块配置文件 71 | │ └─ ruoyi-gateway.yml // gateway 模块配置文件 72 | │ └─ ruoyi-gen.yml // gen 模块配置文件 73 | │ └─ ruoyi-job.yml // job 模块配置文件 74 | │ └─ ruoyi-monitor.yml // monitor 模块配置文件 75 | │ └─ ruoyi-resource.yml // resource 模块配置文件 76 | │ └─ ruoyi-sentinel-dashboard.yml // sentinel 控制台 模块配置文件 77 | │ └─ ruoyi-snailjob-server.yml // snailjob 控制台 模块配置文件 78 | │ └─ ruoyi-system.yml // systen 模块配置文件 79 | │ └─ ruoyi-workflow.yml // workflow 模块配置文件 80 | ├─ config/grafana // grafana配置文件(需复制到grafana使用) 81 | │ └─ Nacos.json // Nacos监控页面 82 | │ └─ SLS JVM监控大盘.json // JVM监控页面 83 | │ └─ Spring Boot 2.1 Statistics.json // SpringBoot监控页面 84 | ├─ sql // sql脚本 85 | ├─ docker // docker 配置脚本 86 | ├─ .run // 执行脚本文件 87 | ├─ .editorconfig // 编辑器编码格式配置 88 | ├─ LICENSE // 开源协议 89 | ├─ pom.xml // 公共依赖 90 | ├─ README.md // 框架说明文件 91 | ~~~ -------------------------------------------------------------------------------- /ruoyi-cloud-plus/framework/basic/oss.md: -------------------------------------------------------------------------------- 1 | # 关于OSS模块使用 2 | - - - 3 | ## 重点注意事项 4 | 5 | `桶/存储区域` 系统会根据配置自行创建分配权限
6 | ~~如手动配置需要设置 `公有读` 权限 否则文件无法访问~~(`aliyun` 还需开通跨域配置)
7 | 1.4.0 版本支持配置`公有/私有`权限(`aliyun` 还需开通跨域配置)
8 | 访问站点 后严禁携带其他 `url` 例如: `/`, `/ruoyi` 等
9 | **阿里云与腾讯云SDK访问站点中不能包含桶名 系统会自动处理**
10 | **minio 站点不允许使用 localhost 请使用 127.0.0.1**
11 | **访问站点与自定义域名 都不要包含 `http` `https` 前缀 设置`https`请使用选项处理** 12 | 13 | ## 代码使用 14 | 15 | > 参考 `SysOssService.upload` 用法
16 | > 使用 `OssFactory.instance()` 获取当前启用的 `OssClient` 实例
17 | > 进行功能调用 获取返回值后 存储到对应的业务表 18 | 19 | ![输入图片说明](https://foruda.gitee.com/images/1678978345529639839/d350ec0b_1766278.png "屏幕截图") 20 | 21 | 22 | ## 功能配置 23 | 24 | ### 配置OSS 25 | 26 | > 进入 `系统管理 -> 文件管理 -> 配置管理` 填写对应的OSS服务相关配置
27 | 28 | ![输入图片说明](https://foruda.gitee.com/images/1678978349820700551/1f91a237_1766278.png "屏幕截图")
29 | ![输入图片说明](https://foruda.gitee.com/images/1678978354387669856/3a91a3a9_1766278.png "屏幕截图")
**重点说明** 33 | 34 | > 云厂商只需修改 `访问站点`对应的域 切勿乱改(云厂商强烈建议绑定自定义域名使用 七牛云必须绑定[官方规定])
35 | 36 | ![输入图片说明](https://foruda.gitee.com/images/1678978362358100362/5c2c4d20_1766278.png "屏幕截图") 37 | 38 | > 七牛云 访问站点
39 | 40 | 41 | ![输入图片说明](https://foruda.gitee.com/images/1678978366254745764/e93a65ff_1766278.png "屏幕截图")
42 | ![输入图片说明](https://foruda.gitee.com/images/1678978369853348732/79e8950e_1766278.png "屏幕截图") 43 | 44 | > 阿里云 访问站点 45 | 46 | ![输入图片说明](https://foruda.gitee.com/images/1678978373981462025/56a70398_1766278.png "屏幕截图") 47 | 48 | > 腾讯云 访问站点 49 | 50 | ![输入图片说明](https://foruda.gitee.com/images/1678978378697093134/785517f3_1766278.png "屏幕截图") 51 | 52 | ### MinIO 使用 https访问站点 53 | 54 | **注意:S3 API 签名计算算法不支持托管 MinIO Server API 的代理方案** 55 | 56 | [ minio https 配置方式](https://blog.csdn.net/Michelle_Zhong/article/details/126484358) 57 | 58 | ### 切换OSS 59 | 60 | > 再配置列表点击 `状态` 按钮开启即可(注意: 只能开启一个OSS默认配置)
61 | > 手动使用 `OssFactory.instance("configKey")`
62 | 63 | ![输入图片说明](https://foruda.gitee.com/images/1678978383700118702/7f3fa0c5_1766278.png "屏幕截图") 64 | 65 | ### 扩展分类 66 | 67 | > 如有文件分类 建议创建多个 oss配置 进行切换存储
68 | 69 | 例如: 创建一个 图片存储的 oss配置
70 | 指定唯一的 `configKey` 与 `前缀目录` 或 直接使用独立的`桶`
71 | 独立桶的特点 可以自定义访问权限
72 | 例如: 创建一个私有文件存储桶 不对外开放
73 | 74 | ![输入图片说明](https://foruda.gitee.com/images/1678978389139754119/140be1df_1766278.png "屏幕截图") 75 | 76 | > 指定需要使用的配置
77 | > 使用 `OssFactory.instance("image")` 获取的 `OssClient` 会加载上图的配置 从而达到上传不同的目录或桶 78 | 79 | 80 | ![输入图片说明](https://foruda.gitee.com/images/1678978397550123641/1b536881_1766278.png "屏幕截图") 81 | 82 | 83 | ### 上传图片或文件 84 | 85 | > 进入 `系统管理 -> 文件管理` 点击 `上传文件` 或 `上传图片` 根据选项选择即可 会对应上传到配置开启的OSS内
86 | 87 | ![输入图片说明](https://foruda.gitee.com/images/1678978401028132972/445d058e_1766278.png "屏幕截图")
88 | ![输入图片说明](https://foruda.gitee.com/images/1678978404388284503/5459da29_1766278.png "屏幕截图")
89 | ![输入图片说明](https://foruda.gitee.com/images/1678978408761764835/c81651fc_1766278.png "屏幕截图")
90 | ![输入图片说明](https://foruda.gitee.com/images/1678978412748494539/7bae621f_1766278.png "屏幕截图") 91 | 92 | ### 列表展示 93 | 94 | > 默认展示图片(可预览) 文件会展示路径
95 | 96 | ![输入图片说明](https://foruda.gitee.com/images/1678978416327601385/af1ecb3b_1766278.png "屏幕截图")
97 | ![输入图片说明](https://foruda.gitee.com/images/1678978422249633007/19d68eaa_1766278.png "屏幕截图") 98 | 99 | > 可以点击 `预览禁用启用` 按钮对是否展示进行更改 100 | 101 | ![输入图片说明](https://foruda.gitee.com/images/1678978426017014926/4f7fa3f3_1766278.png "屏幕截图") 102 | 103 | > 点击禁用后 图片会变成路径展示 104 | 105 | ![输入图片说明](https://foruda.gitee.com/images/1678978429692592556/0231d778_1766278.png "屏幕截图") 106 | 107 | > 也可再 `参数设置` 更改预览状态 将 `OSS预览列表资源` 改为 `false` 即可关闭预览 108 | 109 | ![输入图片说明](https://foruda.gitee.com/images/1678978433769403801/7d480e76_1766278.png "屏幕截图") 110 | 111 | ### 删除功能 112 | 113 | > 点击列表上方或后方 `删除` 按钮 会根据OSS服务商类型 调用对应的删除(注意: 需确保对应的服务商配置正确)
114 | > 可勾选多服务商类型的文件进行删除 系统会自动判断 115 | 116 | ![输入图片说明](https://foruda.gitee.com/images/1678978438265941745/f32edc72_1766278.png "屏幕截图") 117 | ![输入图片说明](https://foruda.gitee.com/images/1678978441938542080/43ed7c3d_1766278.png "屏幕截图") 118 | 119 | ### 下载功能 120 | 121 | > 点击列表后方对应资源的 `下载` 按钮 根据需求填写文件名 点击确认即可完成下载 122 | 123 | ![输入图片说明](https://foruda.gitee.com/images/1678978448927336261/409af888_1766278.png "屏幕截图") 124 | ![输入图片说明](https://foruda.gitee.com/images/1678978452761792483/ed0a4a72_1766278.png "屏幕截图") 125 | -------------------------------------------------------------------------------- /common/video1.md: -------------------------------------------------------------------------------- 1 | # 视频教程一期(联合出品) 2 | 3 | ### 主讲与后期剪辑: `抓蛙师` 4 | 5 | 抓蛙师简介: B站知名UP主 B站首页: https://space.bilibili.com/520725002 6 | 7 | ### 知识点统筹与内容审核: `疯狂的狮子Li` 8 | 9 | 疯狂的狮子Li简介: RuoYi-Vue-Plus 与 RuoYi-Cloud-Plus 作者 10 | 11 | ## 已完结🎉🎉🎉 优惠价: 598(仅限前500名) ~~原价: 698~~ 12 | 13 | **注意: 视频采用 RuoYi-Vue-Plus 版本 4.X 分支讲解!!! (内容为通用技术与版本关联性不大)**
14 | **内容为框架内所用到的技术与设计原理(打破不知道、不会用、不知应用场景等问题)** 15 | 16 | 课程简介: https://www.bilibili.com/video/BV16j411D7BX/ 17 |
18 | 试看课程: https://www.bilibili.com/video/BV1uS411P7JD/ 19 |
20 | 试看课程: https://www.bilibili.com/video/BV1vLbNeuESn/ 21 |
22 | 试看课程: https://www.bilibili.com/video/BV1xV4y127KM/ 23 |
24 | 试看课程: https://www.bilibili.com/video/BV1W5v8eBEgs/ 25 |
26 | 课程总结: https://www.bilibili.com/video/BV1734y1g7fk/ 27 |
28 | 29 | ## 购买方式 30 | 31 | **小本生意 用心录制 拒绝砍价 已更新到 236 集 课程完结**
32 | > 课程咨询或购买请联系 价格598
33 | > QQ: 906670865 (疯狂的狮子Li)
34 | > QQ: 770492966 (抓蛙师) 35 | 36 | ## 购买前常见问题答疑 37 | > 问题1: 购买后是否有群可以解答问题
38 | > 答: 购买后有专属课程付费群(千人大群)讲师在线答疑 39 | > 40 | > 问题2: 是否持续更新 如新版本功能
41 | > 答: 课程目录即为全部课程内容 以课程目录为准 明年大概会出二期来讲新版本内容
42 | > 因为持续更新会导致前面的技术老旧 新购买的人无法及时学习新技术
43 | > 故而采用分期出课程制度 已经购买过的老客户 再次购买下一次会给力度非常大的折扣 44 | > 45 | > 问题3: 目前视频未全部录制完成 后续更新是否二次收费
46 | > 答: 视频目录即为全部视频内容 一次收费后续更新仍然可看直到视频全部更新完成(明年出二期课程不算在内) 47 | > 48 | > 问题4: 视频如何下载如何观看
49 | > 答: 视频文件已加密 采用专门的播放器(播放器只限制截图录屏等不限制其他软件使用) 由管理员发放授权码观看
50 | > 支持通过 百度云 或者 阿里云 网盘下载视频资源 51 | > 52 | > 问题5: 视频平均时长和总时长大概多久
53 | > 答: 视频每集短的大概10分钟以上 长的大概40个分钟左右 平均时长20多分钟每集
54 | > 目前已经录制了236集总时长为80多个小时 55 | > 56 | > 问题6: 是否有讲解 Cloud 版本相关内容
57 | > 答: 视频主要讲解内容为框架内所用到的技术与设计原理 无论什么版本 功能和设计都是一样的
58 | > Cloud 版本只是多了 alibaba 的几个组件完全可以B站自学 59 | 60 | ## 课程目录 61 | 62 | ![输入图片说明](https://foruda.gitee.com/images/1695105467795304336/58fcd6db_1766278.png "屏幕截图") 63 | ![输入图片说明](https://foruda.gitee.com/images/1695105494170842444/10f98fed_1766278.png "屏幕截图") 64 | ![输入图片说明](https://foruda.gitee.com/images/1695105523526589287/f131c614_1766278.png "屏幕截图") 65 | ![输入图片说明](https://foruda.gitee.com/images/1695105547992880680/9f4137f3_1766278.png "屏幕截图") 66 | ![输入图片说明](https://foruda.gitee.com/images/1695105560849590514/d19fad6a_1766278.png "屏幕截图") 67 | ![输入图片说明](https://foruda.gitee.com/images/1695105586641712428/349a971b_1766278.png "屏幕截图") 68 | ![输入图片说明](https://foruda.gitee.com/images/1695105595501187093/fb819d35_1766278.png "屏幕截图") 69 | ![输入图片说明](https://foruda.gitee.com/images/1695105609163585390/833dd89c_1766278.png "屏幕截图") 70 | ![输入图片说明](https://foruda.gitee.com/images/1695105630469565265/8dbba1d2_1766278.png "屏幕截图") 71 | ![输入图片说明](https://foruda.gitee.com/images/1695105659037093525/09a4f6e1_1766278.png "屏幕截图") 72 | ![输入图片说明](https://foruda.gitee.com/images/1695714493079698007/311980ee_1766278.png "屏幕截图") 73 | ![输入图片说明](https://foruda.gitee.com/images/1697446957351573520/cab3617d_1766278.png "屏幕截图") 74 | 75 | ## 学员观后感 76 | 77 | | | | 78 | |---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| 79 | | ![输入图片说明](https://foruda.gitee.com/images/1691386100129796781/44b69dae_1766278.jpeg "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386076834242484/a6073f7d_1766278.png "屏幕截图") | 80 | | ![输入图片说明](https://foruda.gitee.com/images/1691386089186649583/98ac8b7c_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386108722171132/b937b23a_1766278.jpeg "屏幕截图") | 81 | | ![输入图片说明](https://foruda.gitee.com/images/1695714607596127461/513b6893_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1692804549604261480/09ef12f6_1766278.png "屏幕截图") | 82 | | ![输入图片说明](https://foruda.gitee.com/images/1692804541482477905/578e5448_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1695714614517941469/cac681fb_1766278.png "屏幕截图") | 83 | | ![输入图片说明](https://foruda.gitee.com/images/1698225407961714462/4d271901_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698225416488201339/30572e7f_1766278.png "屏幕截图") | 84 | | ![输入图片说明](https://foruda.gitee.com/images/1698807198508085566/16c37a1b_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807208125772586/ceed632e_1766278.png "屏幕截图") | 85 | | ![输入图片说明](https://foruda.gitee.com/images/1698807214013013096/ad3bc016_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807221010472627/72b10901_1766278.png "屏幕截图") | 86 | -------------------------------------------------------------------------------- /ruoyi-vue-plus/framework/basic/oss.md: -------------------------------------------------------------------------------- 1 | # 关于OSS模块使用 2 | - - - 3 | ## 重点注意事项 4 | 5 | ~~`桶/存储区域` 系统会根据配置自行创建分配权限~~
6 | 由于云厂商限制不再提供桶操作 框架删除自动创建桶逻辑 建议自行创建桶并分配桶权限
7 | ~~如手动配置需要设置 `公有读` 权限 否则文件无法访问~~(`aliyun` 还需开通跨域配置)
8 | 4.4.0 版本支持配置`公有/私有`权限(`aliyun` 还需开通跨域配置)
9 | 访问站点 后严禁携带其他 `url` 例如: `/`, `/ruoyi` 等
10 | **阿里云与腾讯云SDK访问站点中不能包含桶名 系统会自动处理**
11 | **minio 站点不允许使用 localhost 请使用 127.0.0.1**
12 | **访问站点与自定义域名 都不要包含 `http` `https` 前缀 设置`https`请使用选项处理** 13 | 14 | ## 代码使用 15 | 16 | > 参考 `SysOssService.upload` 用法
17 | > 使用 `OssFactory.instance()` 获取当前启用的 `OssClient` 实例
18 | > 进行功能调用 获取返回值后 存储到对应的业务表 19 | 20 | ![输入图片说明](https://foruda.gitee.com/images/1678978345529639839/d350ec0b_1766278.png "屏幕截图") 21 | 22 | 23 | ## 功能配置 24 | 25 | ### 配置OSS 26 | 27 | > 进入 `系统管理 -> 文件管理 -> 配置管理` 填写对应的OSS服务相关配置
28 | 29 | ![输入图片说明](https://foruda.gitee.com/images/1678978349820700551/1f91a237_1766278.png "屏幕截图")
30 | ![输入图片说明](https://foruda.gitee.com/images/1678978354387669856/3a91a3a9_1766278.png "屏幕截图")
31 | ![输入图片说明](https://foruda.gitee.com/images/1678978358019307086/0c2523e4_1766278.png "屏幕截图") 32 | 33 | **重点说明** 34 | 35 | > 云厂商只需修改 `访问站点`对应的域 切勿乱改(云厂商强烈建议绑定自定义域名使用 七牛云必须绑定[官方规定])
36 | 37 | ![输入图片说明](https://foruda.gitee.com/images/1678978362358100362/5c2c4d20_1766278.png "屏幕截图") 38 | 39 | > 七牛云 访问站点
40 | 41 | 42 | ![输入图片说明](https://foruda.gitee.com/images/1678978366254745764/e93a65ff_1766278.png "屏幕截图")
43 | ![输入图片说明](https://foruda.gitee.com/images/1678978369853348732/79e8950e_1766278.png "屏幕截图") 44 | 45 | > 阿里云 访问站点 46 | 47 | ![输入图片说明](https://foruda.gitee.com/images/1678978373981462025/56a70398_1766278.png "屏幕截图") 48 | 49 | > 腾讯云 访问站点 50 | 51 | ![输入图片说明](https://foruda.gitee.com/images/1678978378697093134/785517f3_1766278.png "屏幕截图") 52 | 53 | ### MinIO 使用 https访问站点 54 | 55 | **注意:S3 API 签名计算算法不支持托管 MinIO Server API 的代理方案** 56 | 57 | [ minio https 配置方式](https://blog.csdn.net/Michelle_Zhong/article/details/126484358) 58 | 59 | ### 切换OSS 60 | 61 | > 再配置列表点击 `状态` 按钮开启即可(注意: 只能开启一个OSS默认配置)
62 | > 手动使用 `OssFactory.instance("configKey")`
63 | 64 | ![输入图片说明](https://foruda.gitee.com/images/1678978383700118702/7f3fa0c5_1766278.png "屏幕截图") 65 | 66 | ### 扩展分类 67 | 68 | > 如有文件分类 建议创建多个 oss配置 进行切换存储
69 | 70 | 例如: 创建一个 图片存储的 oss配置
71 | 指定唯一的 `configKey` 与 `前缀目录` 或 直接使用独立的`桶`
72 | 独立桶的特点 可以自定义访问权限
73 | 例如: 创建一个私有文件存储桶 不对外开放
74 | 75 | ![输入图片说明](https://foruda.gitee.com/images/1678978389139754119/140be1df_1766278.png "屏幕截图") 76 | 77 | > 指定需要使用的配置
78 | > 使用 `OssFactory.instance("image")` 获取的 `OssClient` 会加载上图的配置 从而达到上传不同的目录或桶 79 | 80 | 81 | ![输入图片说明](https://foruda.gitee.com/images/1678978397550123641/1b536881_1766278.png "屏幕截图") 82 | 83 | 84 | ### 上传图片或文件 85 | 86 | > 进入 `系统管理 -> 文件管理` 点击 `上传文件` 或 `上传图片` 根据选项选择即可 会对应上传到配置开启的OSS内
87 | 88 | ![输入图片说明](https://foruda.gitee.com/images/1678978401028132972/445d058e_1766278.png "屏幕截图")
89 | ![输入图片说明](https://foruda.gitee.com/images/1678978404388284503/5459da29_1766278.png "屏幕截图")
90 | ![输入图片说明](https://foruda.gitee.com/images/1678978408761764835/c81651fc_1766278.png "屏幕截图")
91 | ![输入图片说明](https://foruda.gitee.com/images/1678978412748494539/7bae621f_1766278.png "屏幕截图") 92 | 93 | ### 列表展示 94 | 95 | > 默认展示图片(可预览) 文件会展示路径
96 | 97 | ![输入图片说明](https://foruda.gitee.com/images/1678978416327601385/af1ecb3b_1766278.png "屏幕截图")
98 | ![输入图片说明](https://foruda.gitee.com/images/1678978422249633007/19d68eaa_1766278.png "屏幕截图") 99 | 100 | > 可以点击 `预览禁用启用` 按钮对是否展示进行更改 101 | 102 | ![输入图片说明](https://foruda.gitee.com/images/1678978426017014926/4f7fa3f3_1766278.png "屏幕截图") 103 | 104 | > 点击禁用后 图片会变成路径展示 105 | 106 | ![输入图片说明](https://foruda.gitee.com/images/1678978429692592556/0231d778_1766278.png "屏幕截图") 107 | 108 | > 也可再 `参数设置` 更改预览状态 将 `OSS预览列表资源` 改为 `false` 即可关闭预览 109 | 110 | ![输入图片说明](https://foruda.gitee.com/images/1678978433769403801/7d480e76_1766278.png "屏幕截图") 111 | 112 | ### 删除功能 113 | 114 | > 点击列表上方或后方 `删除` 按钮 会根据OSS服务商类型 调用对应的删除(注意: 需确保对应的服务商配置正确)
115 | > 可勾选多服务商类型的文件进行删除 系统会自动判断 116 | 117 | ![输入图片说明](https://foruda.gitee.com/images/1678978438265941745/f32edc72_1766278.png "屏幕截图") 118 | ![输入图片说明](https://foruda.gitee.com/images/1678978441938542080/43ed7c3d_1766278.png "屏幕截图") 119 | 120 | ### 下载功能 121 | 122 | > 点击列表后方对应资源的 `下载` 按钮 根据需求填写文件名 点击确认即可完成下载 123 | 124 | ![输入图片说明](https://foruda.gitee.com/images/1678978448927336261/409af888_1766278.png "屏幕截图") 125 | ![输入图片说明](https://foruda.gitee.com/images/1678978452761792483/ed0a4a72_1766278.png "屏幕截图") 126 | -------------------------------------------------------------------------------- /common/video.md: -------------------------------------------------------------------------------- 1 | # 全新视频教程二期(联合出品) 2 | 3 | ### 主讲与后期剪辑: `抓蛙师` 4 | 5 | 抓蛙师简介: B站知名UP主 B站首页: https://space.bilibili.com/520725002 6 | 7 | ### 知识点统筹与内容审核: `疯狂的狮子Li` 8 | 9 | 疯狂的狮子Li简介: RuoYi-Vue-Plus 与 RuoYi-Cloud-Plus 作者 10 | 11 | ### 工作流部分特邀 12 | 13 | warm-flow 工作流作者亲自录制 14 | 15 | ## 课程完结🎉🎉🎉 限时优惠价: 798 ~~原价: 998~~ 16 | 17 | **注意: 视频采用 RuoYi-Vue-Plus 全新版本 5.X 分支讲解!!! (内容为通用技术与版本关联性不大)**
18 | **内容为框架内所用到的技术、设计原理、源码逻辑(打破不知道、不会用、不知应用场景等问题)从前端到后端到数据库表结构全套源码级别讲解** 19 | **从官网以外的地方购买的视频课程均与官方无关 上当受骗自行承担** 20 | 21 | 课程简介: https://www.bilibili.com/video/BV12Tx4eVE2Q/ 22 |
23 | 试看课程: https://www.bilibili.com/video/BV1uS411P7JD/ 24 |
25 | 试看课程: https://www.bilibili.com/video/BV1vLbNeuESn/ 26 |
27 | 试看课程: https://www.bilibili.com/video/BV1xV4y127KM/ 28 |
29 | 试看课程: https://www.bilibili.com/video/BV1W5v8eBEgs/ 30 |
31 | 试看课程: https://www.bilibili.com/video/BV1DPY6eMEpu/ 32 |
33 | 课程完结: https://www.bilibili.com/video/BV1vwM3zFEhd/ 34 |
35 | 36 | ## 购买方式 37 | 38 | **小本生意 用心录制 拒绝砍价 全集332集 共105小时 课程已完结**
39 | > 课程咨询或购买请联系 价格798 建议两个人都加防止一人有事不在
40 | > QQ: 906670865 (疯狂的狮子Li)
41 | > QQ: 770492966 (抓蛙师) 42 | 43 | ## 购买前常见问题答疑 44 | > 问题1: 购买后是否有群可以解答问题
45 | > 答: 购买后有专属课程付费群(千人大群)讲师在线答疑 46 | > 47 | > 问题2: 是否持续更新 如新版本功能
48 | > 答: 课程目录即为全部课程内容 以课程目录为准
49 | > 因为持续更新会导致前面的技术老旧 新购买的人无法及时学习新技术
50 | > 故而采用分期出课程制度 已经购买过的老客户 再次购买一期的人二期半价 51 | > 52 | > 问题3: 目前视频未全部录制完成 后续更新是否二次收费
53 | > 答: 视频目录即为全部视频内容 一次收费后续更新仍然可看直到视频全部更新完成(后续如果出新课程 不算在内) 54 | > 55 | > 问题4: 视频如何下载如何观看
56 | > 答: 视频文件已加密 采用专门的播放器(播放器只限制截图录屏等不限制其他软件使用) 由管理员发放授权码观看
57 | > 支持通过 百度云 网盘下载视频资源 58 | > 59 | > 问题5: 视频平均时长和总时长大概多久
60 | > 答: 视频每集短的大概10分钟以上 长的大概40个分钟左右 平均时长20多分钟每集
61 | > 全集332集 共105小时 课程已完结 62 | > 63 | > 问题6: 是否有讲解 Cloud 版本相关内容
64 | > 答: 视频主要讲解内容为框架内所用到的技术与设计原理 无论什么版本 功能和设计都是一样的
65 | > Cloud 版本只是多了 alibaba 的几个组件完全可以B站自学 66 | 67 | ## 课程目录 68 | 69 | ![输入图片说明](https://foruda.gitee.com/images/1735699902946629462/03fb743d_1766278.png "屏幕截图") 70 | ![输入图片说明](https://foruda.gitee.com/images/1727603697672351164/65c73e29_1766278.png "屏幕截图") 71 | ![输入图片说明](https://foruda.gitee.com/images/1727604635047864742/dfd2664f_1766278.png "屏幕截图") 72 | ![输入图片说明](https://foruda.gitee.com/images/1730118032519913336/f5a0c890_1766278.png "屏幕截图") 73 | ![输入图片说明](https://foruda.gitee.com/images/1732546200700587631/a61afb99_1766278.png "屏幕截图") 74 | ![输入图片说明](https://foruda.gitee.com/images/1733755340537282642/8873ee8a_1766278.png "屏幕截图") 75 | ![输入图片说明](https://foruda.gitee.com/images/1737698503851213234/fde8380a_1766278.png "屏幕截图") 76 | ![输入图片说明](https://foruda.gitee.com/images/1737698514675681518/01ddcbc7_1766278.png "屏幕截图") 77 | ![输入图片说明](https://foruda.gitee.com/images/1742976536707638867/af247867_1766278.png "屏幕截图") 78 | ![输入图片说明](https://foruda.gitee.com/images/1744168940308110551/e7db3755_1766278.png "屏幕截图") 79 | ![输入图片说明](https://foruda.gitee.com/images/1748914300140494053/9ac3bfbb_1766278.png "屏幕截图") 80 | ![输入图片说明](https://foruda.gitee.com/images/1748914197072911145/6bad37f0_1766278.png "屏幕截图") 81 | ![输入图片说明](https://foruda.gitee.com/images/1749435077772796501/35b965a1_1766278.png "屏幕截图") 82 | 83 | ## 学员观后感 84 | 85 | | | | 86 | |---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| 87 | | ![输入图片说明](https://foruda.gitee.com/images/1691386100129796781/44b69dae_1766278.jpeg "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386076834242484/a6073f7d_1766278.png "屏幕截图") | 88 | | ![输入图片说明](https://foruda.gitee.com/images/1691386089186649583/98ac8b7c_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386108722171132/b937b23a_1766278.jpeg "屏幕截图") | 89 | | ![输入图片说明](https://foruda.gitee.com/images/1695714607596127461/513b6893_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1692804549604261480/09ef12f6_1766278.png "屏幕截图") | 90 | | ![输入图片说明](https://foruda.gitee.com/images/1692804541482477905/578e5448_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1695714614517941469/cac681fb_1766278.png "屏幕截图") | 91 | | ![输入图片说明](https://foruda.gitee.com/images/1698807198508085566/16c37a1b_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807208125772586/ceed632e_1766278.png "屏幕截图") | 92 | | ![输入图片说明](https://foruda.gitee.com/images/1698807214013013096/ad3bc016_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807221010472627/72b10901_1766278.png "屏幕截图") | 93 | -------------------------------------------------------------------------------- /ruoyi-cloud-plus/_sidebar.md: -------------------------------------------------------------------------------- 1 | 2 | - **满三年大力赞助** 3 | - 4 | - 5 | - 6 | - 7 | - 8 | 9 | * **简介** 10 | * [项目简介](/ruoyi-cloud-plus/home.md) 11 | * [更新日志](/ruoyi-cloud-plus/changlog.md) 12 | * **快速开始** 13 | * [项目初始化](/ruoyi-cloud-plus/quickstart/init.md) 14 | * [工作流初始化](/ruoyi-cloud-plus/quickstart/worker_init.md) 15 | * [idea环境配置](/ruoyi-cloud-plus/quickstart/idea_environment.md) 16 | * [应用部署](/ruoyi-cloud-plus/quickstart/deploy.md) 17 | * [扩展项目](/ruoyi-cloud-plus/quickstart/extend_project.md) 18 | * [搭建SnailJob调度中心](/ruoyi-cloud-plus/quickstart/snail_job_init.md) 19 | * [(废弃)搭建PowerJob调度中心](/ruoyi-cloud-plus/quickstart/power_job_init.md) 20 | * **框架功能** 21 | * [项目结构](/ruoyi-cloud-plus/framework/tree.md) 22 | * [软件架构图](/ruoyi-cloud-plus/framework/architecture_diagram.md) 23 | * 框架相关 24 | * [创建新服务](/ruoyi-cloud-plus/framework/association/new_module.md) 25 | * [修改包名](/ruoyi-cloud-plus/framework/association/update_package_name.md) 26 | * [接口文档](/ruoyi-cloud-plus/framework/association/doc.md) 27 | * [修改应用路径](/ruoyi-cloud-plus/framework/association/update_url.md) 28 | * [国际化](/ruoyi-cloud-plus/framework/association/i18n.md) 29 | * [多团队开发](/ruoyi-cloud-plus/framework/association/collaboration.md) 30 | * [内网鉴权](/ruoyi-cloud-plus/framework/association/inner_authentication.md) 31 | * 基础功能 32 | * [数据库表设计](/ruoyi-cloud-plus/framework/basic/database.md) 33 | * [系统用户相关](/ruoyi-cloud-plus/framework/basic/user.md) 34 | * [权限控制](/ruoyi-cloud-plus/framework/basic/permissions_control.md) 35 | * [导出功能](/ruoyi-cloud-plus/framework/basic/export.md) 36 | * [导入功能](/ruoyi-cloud-plus/framework/basic/import.md) 37 | * [参数校验](/ruoyi-cloud-plus/framework/basic/param_check.md) 38 | * [代码生成](/ruoyi-cloud-plus/framework/basic/code_generate.md) 39 | * [分页功能](/ruoyi-cloud-plus/framework/basic/page.md) 40 | * [OSS功能](/ruoyi-cloud-plus/framework/basic/oss.md) 41 | * [数据权限](/ruoyi-cloud-plus/framework/basic/permissions.md) 42 | * [网关路由与放行](/ruoyi-cloud-plus/framework/basic/router_release.md) 43 | * [多租户功能](/ruoyi-cloud-plus/framework/basic/tenant.md) 44 | * [第三方授权功能](/ruoyi-cloud-plus/framework/basic/social.md) 45 | * [客户端管理功能](/ruoyi-cloud-plus/framework/basic/client.md) 46 | * 扩展功能 47 | * [多数据源](/ruoyi-cloud-plus/framework/extend/dynamic_datasource.md) 48 | * [短信模块](/ruoyi-cloud-plus/framework/extend/sms.md) 49 | * [邮件功能](/ruoyi-cloud-plus/framework/extend/mail.md) 50 | * [防重幂等](/ruoyi-cloud-plus/framework/extend/idempotent.md) 51 | * [缓存使用](/ruoyi-cloud-plus/framework/extend/cache.md) 52 | * [数据脱敏](/ruoyi-cloud-plus/framework/extend/sensitive.md) 53 | * [API加解密](/ruoyi-cloud-plus/framework/extend/api_encrypt.md) 54 | * [数据加解密](/ruoyi-cloud-plus/framework/extend/encrypt.md) 55 | * [翻译功能](/ruoyi-cloud-plus/framework/extend/translation.md) 56 | * [WebSocket功能](/ruoyi-cloud-plus/framework/extend/websocket.md) 57 | * 功能说明 58 | * [事务相关](/ruoyi-cloud-plus/framework/explain/transaction.md) 59 | * [单元测试](/ruoyi-cloud-plus/framework/explain/test.md) 60 | * [主键使用说明](/ruoyi-cloud-plus/framework/explain/key.md) 61 | * [关于多表查询](/ruoyi-cloud-plus/framework/explain/about_join.md) 62 | * **扩展功能** 63 | * [ELK搭建](/ruoyi-cloud-plus/extend-function/elk.md) 64 | * [ES搜索引擎](/ruoyi-cloud-plus/extend-function/es.md) 65 | * [RabbitMQ搭建](/ruoyi-cloud-plus/extend-function/rabbitmq.md) 66 | * [RocketMQ搭建](/ruoyi-cloud-plus/extend-function/rocketmq.md) 67 | * [Kafka搭建](/ruoyi-cloud-plus/extend-function/kafka.md) 68 | * [Nacos集群搭建](/ruoyi-cloud-plus/extend-function/nacos.md) 69 | * [SkyWalking搭建与集成](/ruoyi-cloud-plus/extend-function/skywalking.md) 70 | * [Prometheus+Grafana搭建](/ruoyi-cloud-plus/extend-function/prometheus_grafana.md) 71 | * [Sharding-Proxy搭建分库分表](/ruoyi-cloud-plus/extend-function/shardingproxy.md) 72 | * [对接MaxKey单点登录](/ruoyi-cloud-plus/extend-function/maxkey.md) --------------------------------------------------------------------------------