153 Commits

Author SHA1 Message Date
ageerle
bd94a3eae8 Merge remote-tracking branch 'origin/main' 2025-05-27 17:55:44 +08:00
ageerle
fcdcf534f1 fix: 修复脱敏后的apikey也被更新了 2025-05-27 17:55:34 +08:00
lindaxia
deefb6cc0b Merge branch 'main' of https://github.com/ageerle/ruoyi-ai 2025-05-26 22:45:18 +08:00
lindaxia
fa96c3d12f feat: 更新deploy脚本 2025-05-26 22:43:54 +08:00
ageerle
77069fdecd feat: 移除聊天、会话角色校验 2025-05-26 22:41:55 +08:00
ageerle
db4a264a52 Merge remote-tracking branch 'origin/main' 2025-05-26 22:40:17 +08:00
ageerle
70ae7ea8f1 feat: 向量库查询删除逻辑调整 2025-05-26 22:40:01 +08:00
lindaxia
6a93856d90 feat: 更新deploy脚本 2025-05-26 22:24:17 +08:00
lindaxia
71cae94815 Revert "lindaxia"
This reverts commit a2905d08f9.
2025-05-26 22:20:51 +08:00
lindaxia
a2905d08f9 lindaxia
feat: 更新deploy
2025-05-26 22:16:23 +08:00
ageerle
463ad6c583 Merge remote-tracking branch 'origin/main' 2025-05-26 12:56:45 +08:00
ageerle
abcde9e36e refactor: 1. 移除图片附件模块 2. 优化import 2025-05-26 12:56:28 +08:00
ageerle
8e723f5b78 Update README.md 2025-05-26 10:21:09 +08:00
ageerle
2021fb5071 feat: 修改项目介绍 2025-05-26 10:15:19 +08:00
ageerle
ecbab7df7b Update README.md 2025-05-26 10:10:00 +08:00
ageerle
d6fcaa0a11 Update README.md 2025-05-26 10:09:28 +08:00
ageerle
58faded4ff Update README.md 2025-05-26 10:09:02 +08:00
ageerle
7cc7af70f0 Update README.md 2025-05-26 10:07:47 +08:00
ageerle
4312a729a2 feat: 会话管理返回创建时间 2025-05-26 09:32:53 +08:00
ageer
5d972d66f4 fix: 代码优化 2025-05-25 14:42:22 +08:00
ageerle
1bff2791a6 Merge pull request #108 from liudalian/20250520
集成国产大模型 ds、zhipu、qianwen
2025-05-25 14:36:23 +08:00
菩提取一叶
a76769e540 add:集成国产大模型 ds、zhipu、qianwen 2025-05-25 14:30:05 +08:00
ageer
bedffffd86 fix: 修复对话时无法上传文件 2025-05-24 23:59:40 +08:00
ageer
2884c37599 feat: 移除微信支付 2025-05-24 23:07:59 +08:00
ageer
c25749c9ca feat: 更新sql脚本 2025-05-24 23:02:59 +08:00
ageer
147b3fd8f5 feat: 查询ppt apikey 2025-05-24 20:06:19 +08:00
ageerle
373424bd01 feat(更新日志):
更新日志

1. 移除个人微信模块
2. 移除直播模块
3. 移除gpts模块
4. 移除应用商店模块
5. 移除套餐管理模块
6. 移除兑换管理模块

## 微信相关
小程序相关功能迁移至企业版
微信公众号/微信机器人迁移至企业版
微信支付迁移至企业版

## 功能模块
智能体模块迁移至企业版
插件管理改为MCP应用并迁移至企业版

知识库:
excel解析迁移至企业版
pdf图片解析迁移至企业版
milvus qdrant扩展 迁移至企业版
2025-05-24 16:18:18 +08:00
ageerle
287a0b3d70 Update README.md 2025-05-23 10:28:42 +08:00
ageerle
cd7e07bea6 Update README.md 2025-05-23 10:26:48 +08:00
ageerle
7edfae09bc Update README.md 2025-05-23 10:24:32 +08:00
ageer
a1759ddf5a perf(wechat,live): 移除个人/企业微信,直播模块
1. 个人微信移除原因:功能不稳定,且有封号风险 2. 直播模块移除原因:使用频率低
2025-05-22 18:36:35 +08:00
ageerle
5517a5d19b feat: 新增聊天时返回消息id 2025-05-22 17:24:56 +08:00
ageerle
8fb72ba4fe feat: 修改配置 2025-05-22 17:19:00 +08:00
ageerle
24511fac8f refactor: 移除个人微信模块,移除直播模 2025-05-22 17:13:49 +08:00
ageerle
ce9f2a82da feat: 新增会话返回会话id 2025-05-22 17:11:39 +08:00
ageerle
b81fb7cb3f feat: 修改项目介绍 2025-05-22 11:37:45 +08:00
ageerle
676a63c0d6 feat: 修改项目介绍 2025-05-22 11:30:34 +08:00
ageerle
427736271c feat: 修改项目介绍 2025-05-22 11:28:32 +08:00
ageerle
c39dd7a917 feat: 修改项目介绍 2025-05-22 11:24:17 +08:00
ageerle
c491a98dc7 Merge pull request #95 from MuSan-Li/feature_20250520_fix_email_config
修复用户端注册发送邮件报错
2025-05-21 09:40:11 +08:00
MuSan-Li
2a4978c668 修复用户端注册发送邮件报错 2025-05-20 23:10:27 +08:00
lh
5b4eeee756 更新readme.md 2025-05-20 11:00:21 +08:00
ageerle
93ddcd53b1 feat: 对话时记录对话角色 2025-05-19 16:41:55 +08:00
ageerle
0ee47a5c00 feat: 对话时记录对话角色 2025-05-19 16:35:21 +08:00
ageerle
3ceef41ab0 feat: 知识库上传逻辑调整 2025-05-19 16:11:37 +08:00
ageerle
57693059a1 Merge pull request #91 from xingjisen/main
fix: 自动上传向量时间改为三分钟;修复根据条件删除向量数据报错问题;
2025-05-19 09:21:35 +08:00
邢继森
d18e307e10 fix: 自动上传向量时间改为三分钟;修复根据条件删除向量数据报错问题; 2025-05-19 00:45:32 +08:00
ageerle
eed708c6d3 Merge pull request #90 from alanpeng/main
Add one-step auto-deployment script
2025-05-18 22:11:01 +08:00
root
1093888889 fix the deploy-en.sh by dos2unix command 2025-05-18 15:58:34 +08:00
Alan Peng
e58a420f9f Update README.md 2025-05-18 21:48:36 +08:00
root
4a0c3d132a Update README.md 2025-05-18 15:48:47 +08:00
root
0d81aa640e Add one-step auto-deployment script 2025-05-18 15:48:20 +08:00
ageer
951524bff7 Merge remote-tracking branch 'origin/main' 2025-05-17 12:51:54 +08:00
ageer
c7d0e9337a fix: 修复聊天记录保存异常 2025-05-17 12:51:29 +08:00
ageerle
6955f3c7dc Merge pull request #87 from alanpeng/main
Add weaviate database service
2025-05-17 11:20:10 +08:00
root
a52b017e1a Add weaviate database service 2025-05-17 10:11:16 +08:00
ageer
158a0190b5 feat: 优化会话管理查询逻辑 2025-05-16 23:52:43 +08:00
ageerle
096fc11313 Merge pull request #86 from alanpeng/main
Containerized service package/imagese build and deploy
2025-05-16 22:36:21 +08:00
root
e9ac795d23 Add manual 2025-05-16 22:31:14 +08:00
root
32f1a6bab1 Containerized service package/imagese build and deploy 2025-05-16 22:29:36 +08:00
ageerle
052069a2df Merge pull request #85 from MuSan-Li/feature_20250516_fix_auth
修复未登录也可以访问接口
2025-05-16 22:11:41 +08:00
MuSan-Li
e1c997883f 修复未登录也可以访问接口 2025-05-16 21:01:37 +08:00
ageerle
031b7da198 Merge pull request #84 from janzhou123/main
feat:pdf文件解析图片和分析图片,上传向量数据库都修改成 成异步处理
2025-05-16 16:29:21 +08:00
zhouweiyi
931af963b1 feat:pdf文件解析图片和分析图片,上传向量数据库都修改成 成异步处理 2025-05-16 13:50:12 +08:00
Albert
f5fa7d5da8 Merge branch 'ageerle:main' into main 2025-05-15 17:49:09 +08:00
zhouweiyi
c6ffbcb3cf feat:pdf文件解析图片和分析图片,上传向量数据库都修改成 成异步处理 2025-05-15 17:46:38 +08:00
ageerle
05ae200ff5 Merge pull request #82 from chenwei1015/fix-20250514-knowledge_info
fix- 20250514.sql, alter单词错误
2025-05-14 17:42:21 +08:00
weizhangfz
e745f772ef fix- 20250514.sql, alter单词错误 2025-05-14 17:23:34 +08:00
zhouweiyi
584212c569 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java
2025-05-14 16:13:07 +08:00
zhouweiyi
dc9bf3e25d pdf文件解析成异步处理 2025-05-14 15:41:57 +08:00
ageerle
da84a26c47 feat: 更新sql脚本 2025-05-14 13:56:09 +08:00
ageerle
7d3282c347 feat: 修复知识库上传失败 2025-05-14 13:53:49 +08:00
ageerle
4454be44c3 Update README.md 2025-05-13 14:40:27 +08:00
zhouweiyi
52e0feda01 修改方法描述 2025-05-13 13:44:31 +08:00
ageerle
c89f5d07fb Merge pull request #80 from janzhou123/main
Extract the image from the PDF and call the large model to identify the image content and return it
2025-05-13 11:08:20 +08:00
zhouweiyi
778a7bc21b 提取PDF中的图片并调用大模型,识别图片内容并返回 2025-05-13 11:01:33 +08:00
zhouweiyi
50f5f38996 提取PDF中的图片并调用大模型,识别图片内容并返回 2025-05-13 10:56:05 +08:00
zhouweiyi
32da85daab 提取PDF中的图片并调用大模型,识别图片内容并返回 2025-05-13 10:55:39 +08:00
Albert
3666157d14 Merge pull request #1 from ageerle/main
new
2025-05-13 09:59:36 +08:00
ageer
1a178d0ef8 Merge remote-tracking branch 'origin/main' 2025-05-11 21:38:01 +08:00
ageer
b64b758263 feat: 小助手wx 2025-05-11 21:37:55 +08:00
ageerle
a68c6481ba Update README.md 2025-05-11 21:37:09 +08:00
ageerle
3cbacb5ed9 Update README.md 2025-05-11 21:35:53 +08:00
ageerle
38667797d3 Update README.md 2025-05-11 21:34:42 +08:00
ageerle
9a6acb84a4 Update README.md 2025-05-11 21:33:59 +08:00
ageerle
e3c8a84849 Update README.md 2025-05-11 21:32:39 +08:00
ageerle
cc349f5954 Update README.md 2025-05-11 21:31:01 +08:00
ageerle
e4b78e0510 Update README.md 2025-05-11 21:30:08 +08:00
ageerle
15c6cd272e Update README.md 2025-05-11 21:28:59 +08:00
ageerle
1614eff008 Update README.md 2025-05-11 21:27:49 +08:00
ageerle
c86e88ebd1 Update README.md 2025-05-11 21:26:57 +08:00
ageerle
39ebd85f58 Update README.md 2025-05-11 21:25:50 +08:00
ageer
bde82fe516 feat: 忽略README.md 2025-05-11 19:45:57 +08:00
ageer
2ca650db76 feat: 代码优化 2025-05-11 19:37:52 +08:00
ageer
e3da640737 feat: 代码优化 2025-05-11 18:37:51 +08:00
ageer
e1dea1d9e2 Merge remote-tracking branch 'origin/main' 2025-05-11 17:25:08 +08:00
ageer
84b8d6f675 feat: 支持coze,dify,派欧云等三方模型调用 2025-05-11 17:25:02 +08:00
ageerle
8563428bf9 Merge pull request #77 from zhangpengxiang/ExcelFileLader/dev
feat:补充Excel文档加载类
2025-05-11 14:55:44 +08:00
zhangpengxiang
7b3b727c0e 补充Excel文档加载类 2025-05-11 14:50:11 +08:00
ageerle
08098ff3f3 Merge pull request #76 from zhangpengxiang/ExcelFileLader/dev
增加Excel文档加载功能,处理向量库管理createSchema方法报错问题
2025-05-11 14:31:55 +08:00
zhangpengxiang
fb492d41f3 增加Excel文档加载功能,处理向量库管理createSchema方法WeaviateEmbeddingStore.builder().build();直接构建报错问题。 2025-05-11 10:55:33 +08:00
ageerle
9c2586ab43 Update README.md 2025-05-09 17:24:55 +08:00
ageerle
1bddf5df3b feat: 兼容多平台模型 2025-05-09 16:45:41 +08:00
ageer
57b2f833f8 feat: 修复向量库初始化失败导致程序启动失败 2025-05-08 23:56:40 +08:00
ageer
7907cbeb7f feat: 修复向量库初始化失败导致程序启动失败 2025-05-08 19:31:46 +08:00
ageer
9cfcdd2b9b feat: 代码优化 2025-05-08 19:00:48 +08:00
ageerle
980df20752 feat: 支持milvus、qdrant向量库 2025-05-08 16:09:02 +08:00
ageerle
aa92d232bb feat: Weaviate操作向量库功能优化 2025-05-08 10:41:01 +08:00
ageer
81c0bb5738 feat: Weaviate改为langchain4j方式调用 2025-05-07 22:53:21 +08:00
ageerle
1a645c6e10 feat: 接入langchain4j操作向量库 2025-05-07 17:33:22 +08:00
ageer
731f6ceb6e feat: sql脚本 2025-05-05 15:10:53 +08:00
ageer
8e21245348 feat: sql脚本 2025-05-05 15:04:02 +08:00
ageer
936e157e4a feat: sql脚本 2025-05-05 15:02:57 +08:00
ageer
256f72c487 feat: 支付模块引用 2025-05-03 15:37:56 +08:00
ageer
009aa5f1a5 feat: 添加接口说明 2025-05-03 15:27:46 +08:00
ageer
d22d2cb708 fix(接口文档): 修复接口文档/v3/api-docs无法正常访问 2025-05-03 14:31:20 +08:00
ageer
59104028b6 feat: 会话管理 2025-05-03 10:45:29 +08:00
ageer
c2f6a8321a feat: 会话管理 2025-05-03 10:41:50 +08:00
ageer
5476a4b0b7 fix: 公众号登录功能同步 2025-04-30 19:34:09 +08:00
ageerle
cd490aa0e5 feat: 新增wechat模块 2025-04-30 11:29:23 +08:00
ageerle
b1ff44df4b feat: sse对话样式优化 2025-04-29 11:44:47 +08:00
ageerle
dc6d00f0fc feat: 查询gpts无需登录 2025-04-29 11:00:34 +08:00
ageerle
990da8da6f feat: 增加工具调用超时时间配置 2025-04-24 17:09:52 +08:00
ageerle
8fc7ad0359 feat: mcp开启后才执行工具调用 2025-04-24 10:31:58 +08:00
ageer
8a89d9eb9c fix: 1.合并知识库对话接口 2.修复web无法查询套餐信息 2025-04-23 23:10:31 +08:00
ageer
abfa9ae97b fix: 1.合并知识库对话接口 2.修复web无法查询套餐信息 2025-04-23 23:09:56 +08:00
ageer
bde2e8ff8e fix: 1.合并知识库对话接口 2.修复web无法查询套餐信息 2025-04-23 23:09:22 +08:00
ageer
4d8eb1850f feat: 附件上传逻辑调整 2025-04-22 21:43:40 +08:00
ageer
5aaa3a5662 fix: 1. 修复No static resource tool/gen/list. 2. 修复新增数据库校验异常 2025-04-22 21:24:00 +08:00
ageerle
8fec96f5b2 feat: 默认关闭mcp功能 2025-04-22 18:01:40 +08:00
ageerle
15c306eca2 fix: 根据不同的模型构建对话客户端 2025-04-22 11:28:10 +08:00
ageerle
620ea1fc76 fix: 系统提示词非必填 2025-04-22 11:06:38 +08:00
ageerle
c5c375dc6d fix: 扣费时无法获取用户id 2025-04-22 10:43:54 +08:00
ageerle
1b793e822a fix: 扣费时无法获取用户id 2025-04-22 10:40:36 +08:00
ageerle
6281840f36 fix: 修复后台管理系统登录异常 2025-04-22 09:12:56 +08:00
ageer
f5daa7eb78 feat: 设置server-filesystem默认路径为D盘 防止启动报错 2025-04-21 20:34:05 +08:00
ageer
52cb563383 fix(1.修复/store/appList404 2.修复无法查询数据库 3.修复请求地址'/chat/config/configKey/logoImage',发生系统异常): 2025-04-21 20:16:53 +08:00
ageerle
69efc3261e Merge branch 'dev' 2025-04-21 09:44:09 +08:00
ageerle
fb19fb29cc feat: 移除文件 2025-04-21 09:43:09 +08:00
ageer
9f257cf712 feat: mcp升级依赖 2025-04-20 22:52:09 +08:00
ageer
4af26fe4b4 feat: mcp升级依赖 2025-04-20 22:52:00 +08:00
ageerle
ab2a118ee9 feat: 更新项目说明 2025-04-18 11:11:48 +08:00
ageerle
9cd97a4dc5 feat: mcp支持远程调用 2025-04-18 10:55:42 +08:00
ageerle
788b372e32 feat: mcp支持远程调用 2025-04-17 16:23:32 +08:00
lh
744f9b6c7f 更新readme.md 2025-04-17 11:09:00 +08:00
ageer
761d954ef1 feat: mcp 1.0.0 2025-04-16 21:56:05 +08:00
ageerle
d1006f50ad feat: mcp-1.0.0 2025-04-16 10:25:10 +08:00
ageerle
f24ff5bbdd feat: mcp 测试版本 2025-04-15 17:34:21 +08:00
ageer
a4314dbbde feat: mcp测试版 2025-04-14 23:10:17 +08:00
ageerle
188dc1e55e feat: mcp 测试版本 2025-04-14 17:23:33 +08:00
ageer
731352fd04 feat: mcp测试版 2025-04-14 00:22:21 +08:00
lh
b50c15755d 更新readme.md 2025-04-12 14:19:51 +08:00
lh
09abc0b5af 新增讨论群信息 2025-04-08 14:05:05 +08:00
1261 changed files with 13650 additions and 185135 deletions

2
.gitignore vendored
View File

@@ -13,6 +13,8 @@ target/
ruoyi-modules/ruoyi-generator/src/main/resources/vm/vben5
README.md
######################################################################
# IDE

204
README.md
View File

@@ -34,55 +34,127 @@
<a href="https://github.com/ageerle/ruoyi-ai/issues">提出新特性</a>
</p>
## 快速启动
### 拉取镜像(最低配置2H2G):
```bash
script/deploy/deploy目录下执行: docker-compose up -d
```
### 通过脚本启动(最低配置4H4G):
1. 确认系统内已经安装好以下软件
- docker
- docker-compose
- git
- unzip
2. **克隆项目**
```bash
git clone https://github.com/ageerle/ruoyi-ai
cd ruoyi-ai/script/deploy/one-step-script
```
3. **启动部署脚本**
中文界面部署脚本(拉取gitee仓库)
```bash
./deploy-cn.sh
```
按照脚本提示一步步操作,如果是一台新服务器,选择默认配置,直接回车即可。
<img src="image/deploy-01.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
耐心等待安装完成...
英文界面部署脚本(拉取github仓库)
```bash
./deploy-en.sh
```
4. 如果在执行部署脚本过程中不需要在本地重新构建编译服务软件包以及重新封装容器镜像则需要在脚本交互提出以下问题时选择D按键进行直接部署否则就会执行全新的编译构建及容器封装之后再执行部署
```
已将模板文件复制到部署目录。
正在使用您的配置更新 .env 文件...
已使用您的配置更新 .env 文件。
正在使用您的配置更新 docker-compose.yaml 文件...
已使用您的配置更新 docker-compose.yaml 文件。
=== 构建或部署选项 ===
您想构建新镜像 (B) 还是直接使用现有镜像部署 (D)[B/d]:
```
5. **访问应用界面**
- 用户界面:`http://your-server-ip:8081`
- 管理员界面:`http://your-server-ip:8082`
## 目录
- [系统体验](#系统体验)
- [源码地址](#源码地址)
- [特色功能](#特色功能)
- [配套文档](#项目文档)
- [核心功能](#核心功能)
- [项目演示](#项目演示)
- [后台管理](#后台管理)
- [管理](#管理)
- [用户端](#用户端)
- [小程序端](#小程序端)
- [开发前的配置要求](#开发前的配置要求)
- [文件目录说明](#文件目录说明)
- [使用到的框架](#使用到的框架)
- [开发环境](#开发环境)
- [项目结构](#项目结构)
- [ruoyi-ai](#ruoyi-ai)
- [注意事项](#注意事项)
- [vben模板](#vben模板)
- [贡献者](#贡献者)
- [如何参与开源项目](#如何参与开源项目)
- [版本控制](#版本控制)
- [作者](#作者)
- [鸣谢](#鸣谢)
- [技术讨论群](#技术讨论群)
### 系统体验
- 用户端https://web.pandarobot.chat
- 演示账号: demo 密码demo123
- 管理端https://admin.pandarobot.chat
- 演示账号: admin 密码admin123
- 商业版体验商业版请联系下方小助手获取演示地址预计6月份上线
### 源码地址
- 项目文档: https://doc.pandarobot.chat
- 前端-后台管理: https://github.com/ageerle/ruoyi-admin
- 前端-用户端: https://github.com/ageerle/ruoyi-web
- 小程序端: https://github.com/ageerle/ruoyi-uniapp
- 演示地址: https://web.pandarobot.chat
- 后台管理: https://admin.pandarobot.chat
- 用户名: admin 密码admin123
[1]github
- 前端服务-用户端: https://github.com/ageerle/ruoyi-web
- 前端服务-管理端: https://github.com/ageerle/ruoyi-admin
- 后端服务:https://github.com/ageerle/ruoyi-ai
### gitcode源码地址
- https://gitcode.com/ageerle/ruoyi-ai
- https://gitcode.com/ageerle/ruoyi-web
- https://gitcode.com/ageerle/ruoyi-admin
- https://gitcode.com/ageerle/ruoyi-uniapp
[2]gitcode
- 前端服务-用户端:https://gitcode.com/ageerle/ruoyi-web
- 前端服务-管理端: https://gitcode.com/ageerle/ruoyi-admin
- 后端服务:https://gitcode.com/ageerle/ruoyi-ai
### 特色功能
1. 全套开源系统提供完整的前端应用、后台管理以及小程序应用基于MIT协议开箱即用。
2. 本地RAG方案集成Milvus/Weaviate向量库、本地向量化模型与Ollama实现本地化RAG
3. 丰富插件功能支持联网、SQL查询插件及Text2API插件扩展系统能力与应用场景。
4. 内置SSE、websocket等网络协议支持对接多种大语言模型同时还集成了MidJourney和DALLE AI绘画功能
5. 强大的多媒体功能支持AI翻译、PPT制作、语音克隆和翻唱等
6. 扩展功能:支持将大模型接入个人或企业微信
7. 支付功能:支持易支付、微信支付等多种支付方式
### 配套文档
- 配套文档: https://doc.pandarobot.chat
- 项目部署文档https://doc.pandarobot.chat/guide/introduction/
### 核心功能与技术亮点
#### 1. 全栈式开源系统
- 全套开源系统:提供完整的前端应用、后台管理,基于MIT协议开箱即用。
#### 2. 本地化 RAG 方案
- 基于 **Langchain4j** 框架,支持 Milvus/Weaviate/Qdrant 向量库,结合 BGE-large-zh-v1.5 本地向量化模型 实现高效文档检索与知识库构建。
- 支持 本地 LLM 接入,结合私有知识库实现安全可控的问答系统,避免依赖云端服务的隐私风险。
#### 3. 多模态 AI 引擎与工具集成
- 智能对话:支持 OpenAI GPT-4、Azure、ChatGLM 等主流模型,内置 SSE/WebSocket 协议实现低延迟交互,兼容 **扣子**、**DIFY** 等平台 API 调用。
- **Spring AI MCP** 支持:通过注解快速定义本地工具,支持调用 MCP 广场 的海量 MCP Server 服务,扩展模型能力边界。
#### 4. 企业级扩展与商业化支持
- 即时通讯集成:支持对接个人微信、企业微信及微信公众号,实现消息自动回复、用户管理与智能客服。
- 支付系统集成易支付、微信支付、Stripe 国际信用卡支付,满足商业化场景需求。
#### 5. 多媒体处理与创新功能
- AI 绘画:集成 DALL·E-3、MidJourney、Stable Diffusion支持文生图、图生图及风格化创作适用于营销素材生成与创意设计。
- PPT 制作:根据文本输入自动生成结构化幻灯片,支持自定义模板(需要使用三方平台 如:文多多)。
### 项目演示
#### 后台管理
#### mcp支持
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
<img src="image/02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/05.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/mcp-01.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/mcp-02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/mcp-03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/mcp-04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
</div>
@@ -94,13 +166,16 @@
<img src="image/11.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
</div>
#### 小程序
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: flex-start;">
<img src="image/06.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/07.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
#### 管理
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
<img src="image/02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
<img src="image/05.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
</div>
### 开发前的配置要求
### 开发环境
1. jdk 17
2. mysql 5.7、8.0
@@ -108,8 +183,14 @@
4. maven 3.8+
5. nodejs 20+ & pnpm
### 文件目录说明
RuoYi-AI
- 附-部署配套视频https://www.bilibili.com/video/BV1jDXkYWEba
<div>
<img src="image/教程搭建.png" alt="drawing" width="600px" height="300px"/>
</div>
### 项目结构
- RuoYi-AI
```
├─ ruoyi-admin // 管理模块
@@ -158,32 +239,34 @@ RuoYi-AI
```
### 注意事项
- vben模板
Qvben5 的模板默认是没有的吗?
Avben模板是收费的 请联系vben-vue-plus作者获取。
### 版本控制
该项目使用Git进行版本管理。您可以在repository参看当前可用版本。
### 版权说明
该项目使用了MIT授权许可详情请参阅 [LICENSE.txt](https://github.com/ageerle/ruoyi-ai/blob/main/LICENSE)
### 项目现状
目前项目还处于早期阶段距离成熟还有很长的路要走。由于个人精力有限项目的发展速度受到了一定的限制。为了加快项目的进度我真诚地希望更多人能够参与到项目中来。无论是经验丰富的开发者还是刚刚入门的小白我都热烈欢迎你们提交Pull RequestPR。即使代码修改得很少或者存在一些错误都没有关系。我会认真审核每一位贡献者的代码并和大家一起完善项目。
目前项目还处于早期阶段距离成熟还有很长的路要走。由于个人精力有限项目的发展速度受到了一定的限制。为了加快项目的进度我真诚地希望更多人能够参与到项目中来。无论是经验丰富的开发者还是刚刚入门的小白我都热烈欢迎你们提交Pull RequestPR👏👏👏。即使代码修改得很少,或者存在一些错误,都没有关系。我会认真审核每一位贡献者的代码,并和大家一起完善项目⛽️⛽️⛽️
### 开发计划
- 智能体管理
| 主题 | 方向 | 时间节点 |
| --- |-----------------------------------|--------|
| 前端简化版 | 与element-plus-x框架合作推出基于该框架的前端简化版 | 2025.5 |
| agent2agent | Agent2Agent协议支持 | 2025.6 |
| 流程编排 | 通过可视化界面和灵活的配置方式快速构建AI应用 | 2025.7 |
通过设置提示词、插件、知识库等用户可以快速构建一个AI应用。这将极大地简化AI应用的开发流程降低开发门槛使更多企业能够轻松地利用AI技术。
<div>
<img src="image/13.png" alt="drawing" width="600px" height="300px"/>
</div>
- 流程编排
通过流程编排功能,用户可以将不同的模型按照业务逻辑进行有序连接。这将解决单一模型能力不足的问题,充分发挥多个模型的协同作用,从而更好地满足企业的复杂业务需求。
- 感谢
@@ -193,7 +276,7 @@ RuoYi-AI
#### 如何参与开源项目
贡献使开源社区成为一个学习、激励和创造的绝佳场所。你所作的任何贡献都是**非常感谢**的。
贡献使开源社区成为一个学习、激励和创造的绝佳场所。你所作的任何贡献,我们都非常感谢!🙏
1. Fork 这个项目
2. 创建你的功能分支 (`git checkout -b feature/dev`)
@@ -204,7 +287,7 @@ RuoYi-AI
#### 项目文档
1. 项目文档基于vitepress构建
2. 按照[如何参与开源项目](#如何参与开源项目)拉取 https://github.com/ageerle/ruoyi-doc
2. 按照[如何参与开源项目](#如何参与开源项目)拉取https://github.com/ageerle/ruoyi-doc
3. 安装依赖npm install
4. 启动项目npm run docs:dev
5. 主页路径docs/guide/introduction/index.md
@@ -230,5 +313,24 @@ RuoYi-AI
[license-url]: https://github.com/ageerle/ruoyi-ai/blob/master/LICENSE.txt
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555
## 🌿 第三方生态
- [PPIO 派欧云:一键调用高性价比的开源模型 API 和 GPU 容器](https://ppinfra.com/user/register?invited_by=P8QTUY&utm_source=github_ruoyi-ai)
### 附:技术讨论群
#### 技术交流(如需进群请添加小助手)
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
<img src="image/wx.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
</div>
#### 进群学习
🏠 小助手wxruoyi-ai加人备注ruoyi-ai
🏠 小助手qq1603234088 加人备注ruoyi-ai
👏👏👏 ruoyi-ai官方交流群qq区
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
<img src="image/qq.png" alt="drawing" style="width: 400px; height: 400px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 563 KiB

BIN
image/deploy-01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
image/mcp-01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
image/mcp-02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

BIN
image/mcp-03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

BIN
image/mcp-04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
image/qq-msg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

BIN
image/qq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

BIN
image/wx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
image/教程搭建.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

64
pom.xml
View File

@@ -14,26 +14,26 @@
<properties>
<revision>1.0.0</revision>
<spring-boot.version>3.0.6</spring-boot.version>
<spring-boot.version>3.4.4</spring-boot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<mysql.version>8.0.33</mysql.version>
<spring-boot.mybatis>3.0.1</spring-boot.mybatis>
<springdoc.version>2.1.0</springdoc.version>
<mybatis.version>3.5.16</mybatis.version>
<springdoc.version>2.8.5</springdoc.version>
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
<poi.version>5.2.3</poi.version>
<easyexcel.version>3.2.1</easyexcel.version>
<velocity.version>2.3</velocity.version>
<satoken.version>1.34.0</satoken.version>
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
<mybatis-plus.version>3.5.11</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version>
<hutool.version>5.8.18</hutool.version>
<hutool.version>5.8.35</hutool.version>
<okhttp.version>4.10.0</okhttp.version>
<dynamic-ds.version>4.3.1</dynamic-ds.version>
<spring-boot-admin.version>3.0.3</spring-boot-admin.version>
<redisson.version>3.20.1</redisson.version>
<lock4j.version>2.2.4</lock4j.version>
<dynamic-ds.version>3.6.1</dynamic-ds.version>
<alibaba-ttl.version>2.14.2</alibaba-ttl.version>
<xxl-job.version>2.4.0</xxl-job.version>
<mapstruct-plus.version>1.2.1</mapstruct-plus.version>
@@ -42,10 +42,6 @@
<bouncycastle.version>1.72</bouncycastle.version>
<!-- 离线IP地址定位库 -->
<ip2region.version>2.7.0</ip2region.version>
<!-- 临时修复 snakeyaml 漏洞 -->
<snakeyaml.version>1.33</snakeyaml.version>
<!-- OSS 配置 -->
<aws-java-sdk-s3.version>1.12.400</aws-java-sdk-s3.version>
<!-- SMS 配置 -->
@@ -58,10 +54,6 @@
<maven-compiler-plugin.verison>3.11.0</maven-compiler-plugin.verison>
<maven-surefire-plugin.version>3.0.0</maven-surefire-plugin.version>
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
<weixin-java-miniapp.version>4.5.0</weixin-java-miniapp.version>
<weixin-java-pay.version>4.6.0</weixin-java-pay.version>
<weixin-java-cp.version>4.6.0</weixin-java-cp.version>
<weixin-java-cp.version>4.6.0</weixin-java-cp.version>
</properties>
<profiles>
@@ -202,22 +194,22 @@
<version>${satoken.version}</version>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-ds.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${spring-boot.mybatis}</version>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
@@ -227,6 +219,13 @@
<version>${mybatis-plus.version}</version>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>${dynamic-ds.version}</version>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
@@ -277,13 +276,6 @@
<version>${alibaba-ttl.version}</version>
</dependency>
<!-- 临时修复 snakeyaml 漏洞 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
<!-- 加密包引入 -->
<dependency>
<groupId>org.bouncycastle</groupId>
@@ -340,13 +332,6 @@
<artifactId>ruoyi-generator</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-demo</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -354,7 +339,8 @@
<module>ruoyi-common</module>
<module>ruoyi-modules</module>
<module>ruoyi-modules-api</module>
<module>ruoyi-modules/ruoyi-mcp-server</module>
<module>ruoyi-admin</module>
<module>ruoyi-extend</module>
</modules>
<packaging>pom</packaging>

View File

@@ -42,11 +42,6 @@
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
@@ -54,38 +49,12 @@
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-fusion</artifactId>
<artifactId>ruoyi-chat</artifactId>
</dependency>
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-knowledge</artifactId>
</dependency>
<!-- demo模块 -->
<dependency>
<groupId>org.ruoyi</groupId>
<artifactId>ruoyi-demo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 添加thumbnailator依赖 -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.11</version>
</dependency>
<dependency>
<groupId>io.github.ollama4j</groupId>
<artifactId>ollama4j</artifactId>
<version>1.0.79</version>
<scope>compile</scope>
<artifactId>ruoyi-generator</artifactId>
</dependency>
</dependencies>

View File

@@ -3,6 +3,8 @@ package org.ruoyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 启动程序
@@ -10,6 +12,8 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt
* @author Lion Li
*/
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class RuoYiAIApplication {
public static void main(String[] args) {

View File

@@ -2,13 +2,11 @@ package org.ruoyi.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.collection.CollUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.ruoyi.common.core.constant.Constants;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.domain.model.EmailLoginBody;
import org.ruoyi.common.core.domain.model.LoginBody;
import org.ruoyi.common.core.domain.model.RegisterBody;
import org.ruoyi.common.core.domain.model.SmsLoginBody;
import org.ruoyi.common.core.domain.model.VisitorLoginBody;
import org.ruoyi.common.core.domain.model.*;
import org.ruoyi.common.core.utils.MapstructUtils;
import org.ruoyi.common.core.utils.StreamUtils;
import org.ruoyi.common.core.utils.StringUtils;
@@ -16,16 +14,12 @@ import org.ruoyi.common.satoken.utils.LoginHelper;
import org.ruoyi.common.tenant.helper.TenantHelper;
import org.ruoyi.system.domain.bo.SysTenantBo;
import org.ruoyi.system.domain.vo.LoginTenantVo;
import org.ruoyi.system.domain.vo.LoginVo;
import org.ruoyi.system.domain.vo.SysTenantVo;
import org.ruoyi.system.domain.vo.TenantListVo;
import org.ruoyi.system.service.ISysTenantService;
import org.ruoyi.system.service.SysLoginService;
import org.ruoyi.system.service.SysRegisterService;
import org.ruoyi.system.domain.vo.LoginVo;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -64,6 +58,8 @@ public class AuthController {
body.getUsername(), body.getPassword(),
body.getCode(), body.getUuid());
loginVo.setToken(token);
// 兼容后台管理登录
loginVo.setAccess_token(token);
loginVo.setUserInfo(LoginHelper.getLoginUser());
return R.ok(loginVo);
}

View File

@@ -5,10 +5,13 @@ import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.ruoyi.common.core.constant.Constants;
import org.ruoyi.common.core.constant.GlobalConstants;
import org.ruoyi.common.core.domain.R;
import org.ruoyi.common.core.exception.ServiceException;
import org.ruoyi.common.core.service.ConfigService;
import org.ruoyi.common.core.utils.SpringUtils;
import org.ruoyi.common.core.utils.StringUtils;
@@ -22,10 +25,6 @@ import org.ruoyi.common.web.config.properties.CaptchaProperties;
import org.ruoyi.common.web.enums.CaptchaType;
import org.ruoyi.system.domain.request.EmailRequest;
import org.ruoyi.system.domain.vo.CaptchaVo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
@@ -36,7 +35,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.time.Duration;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
/**
* 验证码操作处理
@@ -67,7 +67,7 @@ public class CaptchaController {
String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
// 验证码模板id 自行处理 (查数据库或写死均可)
// 验证码模板id
String templateId = "";
Map<String, String> map = new HashMap<>(1);
map.put("code", code);
@@ -90,18 +90,6 @@ public class CaptchaController {
String key = GlobalConstants.CAPTCHA_CODE_KEY + emailRequest.getUsername();
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
// 检验邮箱后缀
String suffix = configService.getConfigValue("mail", "suffix");
String prompt = configService.getConfigValue("mail", "prompt");
if(StringUtils.isNotEmpty(suffix)){
// 动态的域名列表
String[] invalidDomains = suffix.split(",");
for (String domain : invalidDomains) {
if (emailRequest.getUsername().endsWith(domain)) {
throw new ServiceException(prompt);
}
}
}
// 自定义邮箱模板
String model = configService.getConfigValue("mail", "mailModel");
String mailTitle = configService.getConfigValue("mail", "mailTitle");

View File

@@ -1,9 +1,8 @@
package org.ruoyi.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 首页
@@ -11,8 +10,7 @@ import org.springframework.web.bind.annotation.GetMapping;
* @author Lion Li
*/
@SaIgnore
@RequiredArgsConstructor
@Controller
@RestController
public class IndexController {
/**
@@ -20,17 +18,9 @@ public class IndexController {
*/
@GetMapping("/")
public String index() {
return "index.html";
return "RuoYi AI启动成功";
}
@GetMapping("/success")
public String success(){
return "paySuccess.html";
}
@GetMapping("/cancel")
public String cancel(){
return "cancel";
}
}

View File

@@ -1,12 +1,3 @@
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
username: ruoyi
password: 123456
--- # 数据源配置
spring:
@@ -25,9 +16,9 @@ spring:
master:
type: ${spring.datasource.type}
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://43.139.70.230:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: ry-vue
password: xx
url: jdbc:mysql://127.0.0.1:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: ruoyi-ai
password: ruoyi-ai
hikari:
# 最大连接池数量
@@ -60,9 +51,6 @@ spring.data:
# password: 123456
# 连接超时时间
timeout: 10S
# 是否开启ssl
ssl: false
redisson:
# redis key前缀
keyPrefix:
@@ -97,22 +85,4 @@ sms:
# 腾讯专用
sdkAppId:
spring:
ai:
openai:
api-key: sk-xX
base-url: https://api.pandarobot.chat
ollama:
base-url: http://localhost:11434
init:
pull-model-strategy: always
timeout: 60s
max-retries: 1
mcp:
client:
enabled: true
name: call-mcp-server
sse:
connections:
server1:
url: http://127.0.0.1:8080

View File

@@ -51,6 +51,8 @@ logging:
level:
org.ruoyi: @logging.level@
org.springframework: warn
org.mybatis.spring.mapper: error
org.apache.fury: warn
config: classpath:logback-plus.xml
# 用户配置
@@ -118,6 +120,8 @@ sa-token:
security:
# 排除路径
excludes:
# 获取模型信息
- /system/model/modelList
# 支付回调
- /pay/returnUrl
- /pay/notifyUrl
@@ -126,7 +130,9 @@ security:
# 重置密码
- /auth/reset/password
# 聊天接口
- /chat
- /chat/send
# 文件上传
- /chat/upload
# 静态资源
- /*.html
- /**/*.html
@@ -213,13 +219,18 @@ mybatis-encryptor:
publicKey:
privateKey:
# Swagger配置
swagger:
springdoc:
api-docs:
# 是否开启接口文档
enabled: true
# swagger-ui:
# # 持久化认证数据
# persistAuthorization: true
info:
# 标题
title: '标题:${ruoyi.name}多租户管理系统_接口文档'
title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档'
# 描述
description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
description: ' 用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
# 版本
version: '版本号: ${ruoyi.version}'
# 作者信息
@@ -234,24 +245,10 @@ swagger:
type: APIKEY
in: HEADER
name: ${sa-token.token-name}
springdoc:
api-docs:
# 是否开启接口文档
enabled: true
swagger-ui:
# 持久化认证数据
persistAuthorization: true
#这里定义了两个分组,可定义多个,也可以不定义
group-configs:
- group: 1.演示模块
packages-to-scan: org.ruoyi.demo
- group: 2.通用模块
packages-to-scan: org.ruoyi.web
- group: 3.系统模块
- group: 1.系统模块
packages-to-scan: org.ruoyi.system
- group: 4.代码生成模块
packages-to-scan: org.ruoyi.generator
# 防止XSS攻击
xss:
@@ -298,25 +295,20 @@ websocket:
# 设置访问源地址
allowedOrigins: '*'
# 微信小程序配置信息
wx:
miniapp:
configs:
- appid: # 你的appid
secret: # 你的secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
# 企业微信应用
wechat:
cp:
corpId:
appConfigs:
- agentId:
secret: ''
token: ''
aesKey: ''
spring:
ai:
openai:
api-key: sk-xx
base-url: https://api.pandarobot.chat/
mcp:
client:
enabled: false
name: ruoyi-ai-mcp
sse:
connections:
server:
url: http://127.0.0.1:8081
stdio:
servers-configuration: classpath:mcp-server.json
request-timeout: 300s

View File

@@ -0,0 +1,22 @@
{
"mcpServers": {
"fileSystem": {
"command": "C:\\Program Files\\nodejs\\npx.cmd",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"D:\\"
]
},
"search1api": {
"command": "C:\\Program Files\\nodejs\\npx.cmd",
"args": [
"-y",
"search1api-mcp"
],
"env": {
"SEARCH1API_KEY": "xx"
}
}
}
}

View File

@@ -1,46 +0,0 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml

View File

@@ -1 +0,0 @@
plus-doc.dromara.org

View File

@@ -1,74 +0,0 @@
# 框架介绍
- - -
- `RuoYi-Vue-Plus` 分布式集群框架 [文档跳转](/ruoyi-vue-plus/home.md)
- `RuoYi-Cloud-Plus` 微服务框架 [文档跳转](/ruoyi-cloud-plus/home.md)
- `plus-ui` 统一 Vue3 前端项目 [文档跳转](/plus-ui/home.md)
- `plus-doc` 统一文档项目
## 特别赞助
<a href="https://gitee.com/dromara/MaxKey"><img src="https://foruda.gitee.com/images/1700187453544179968/7342304a_1766278.png" width="400px" height="100px"></a>
<a href="http://ccflow.org/?frm=ryPlus"><img src="https://foruda.gitee.com/images/1704162419429172656/d0521e59_1766278.png" width="400px" height="100px"></a>
<br>
<a href="http://www.shuduokeji.com"><img src="https://foruda.gitee.com/images/1705569347386939952/3f187980_1766278.jpeg" width="400px" height="100px"></a>
<a href="https://www.jnpfsoft.com/index.html?from=plus-doc"><img src="https://foruda.gitee.com/images/1711681233267310022/2ffbcff2_1766278.png" width="400px" height="100px"></a>
<br>
<a href="https://item.jd.com/13928958.html?from=plus-doc"><img src="https://foruda.gitee.com/images/1723791569938403230/769e98da_1766278.jpeg" width="400px" height="100px"></a>
[如何成为赞助商 加群联系作者详谈](/common/add_group.md)
## 代码地址
| 介绍 | 项目名 | 项目地址 | 注意事项 |
|------------|:-----------------|------------------------------------------------------------------------------------------------------------------------|----------------------------|
| 🔥 分布式集群框架 | RuoYi-Vue-Plus | - [Gitee](https://gitee.com/dromara/RuoYi-Vue-Plus)<br> - [GitHub](https://github.com/dromara/RuoYi-Vue-Plus) | 重写RuoYi-Vue全方位升级(不兼容原框架) |
| 🔥 微服务框架 | RuoYi-Cloud-Plus | - [Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus)<br>- [GitHub](https://github.com/dromara/RuoYi-Cloud-Plus) | 重写RuoYi-Cloud全方位升级(不兼容原框架) |
| 🔥 统一前端项目 | plus-ui | - [Gitee](https://gitee.com/JavaLionLi/plus-ui)<br>- [GitHub](https://github.com/JavaLionLi/plus-ui) | Vue与Cloud项目通用前端 |
| 🔥 统一文档项目 | plus-doc | - [Gitee](https://gitee.com/dromara/plus-doc)<br>- [GitHub](https://github.com/dromara/plus-doc) | 通用文档 |
## 业务功能
| 功能 | 介绍 |
|-------|---------------------------------------|
| 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能。 |
| 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置。 |
| 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 |
| 岗位管理 | 配置系统用户所属担任职务。 |
| 菜单管理 | 配置系统菜单,操作权限,按钮权限标识等。 |
| 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分。 |
| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护。 |
| 参数管理 | 对系统动态配置常用参数。 |
| 通知公告 | 系统通知公告信息发布维护。 |
| 操作日志 | 系统正常操作日志记录和查询;系统异常信息日志记录和查询。 |
| 登录日志 | 系统登录日志记录查询包含登录异常。 |
| 文件管理 | 系统文件上传、下载等管理。 |
| 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志。 |
| 代码生成 | 前后端代码的生成java、html、xml、sql支持CRUD下载 。 |
| 系统接口 | 根据业务代码自动生成相关的api接口文档。 |
| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等。 |
| 缓存监控 | 对系统的缓存信息查询,命令统计等。 |
| 在线构建器 | 拖动表单元素生成相应的HTML代码。 |
| 使用案例 | 系统的一些功能案例 |
## 关注作者
作者博客: [https://lionli.blog.csdn.net/?type=blog](https://lionli.blog.csdn.net/?type=blog)
公众号: **<狮子领域 程序圈>**
<br>
![输入图片说明](https://foruda.gitee.com/images/1678975769377570440/507062df_1766278.png "屏幕截图")
## 捐献作者
**作者为兼职做开源,平时还需要工作,如果帮到了您可以请作者吃个盒饭**
<br>
<img src="https://foruda.gitee.com/images/1725259663554875162/bd86a165_1766278.png" width="300px" height="450px" /><img src="https://foruda.gitee.com/images/1725259708005620620/22833e19_1766278.jpeg" width="300px" height="450px" />
## Dromara 全家福
社区仓库地址: [dromara开源社区](https://gitee.com/organizations/dromara/projects)
![输入图片说明](https://foruda.gitee.com/images/1706071866226295002/68cffcf6_1766278.png "屏幕截图")

View File

@@ -1,32 +0,0 @@
<!-- _coverpage.md -->
<html>
<img src="./static/image/logo2.png" width="260px" height="260px">
<div style="display: flex; align-content:center; justify-content: center;">
<div >
<div style="font-weight: bold; font-size: 40px;">百搭AI</div>
<!-- <div style="font-weight: bold; font-size: 40px;margin-bottom: 30px;">多租户权限管理系统</div> -->
[![码云Gitee](https://gitee.com/ageerle/ruoyi-ai/badge/star.svg?theme=blue)](https://gitee.com/ageerle/ruoyi-ai)
[![GitHub](https://img.shields.io/github/stars/ageerle/ruoyi-ai.svg?style=social&label=Stars)](https://github.com/dromara/RuoYi-Vue-Plus)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/ageerle/ruoyi-ai/blob/master/LICENSE)
<br>
[![ruoyi-ai](https://img.shields.io/badge/ruoyi-ai-5.2.2-success.svg)](https://gitee.com/ageerle/ruoyi-ai)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.2-blue.svg)]()
</div>
<div>
</div>
</div>
</html>
> 百搭AI是一个整合了多种大语言模型API的开源平台实现了AI对话、绘图、声音克隆和私有知识库等功能。
>
> 平台配备管理后台支持微信支付、微信公众号、微信多开、Stripe国际支付和百度文本审核等运营功能。
>
> 项目采用Java+Vue+Vben5技术栈构建遵循MIT License允许二次开发并用于商业销售。
Copyright © 2023-2024 版权所有ageerle@163.com 备案号:<a href="https://beian.miit.gov.cn/">鄂ICP备2023007672号</a>
[开始使用 Let's Go](/README.md)

View File

@@ -1,2 +0,0 @@
<!-- _footer.md 页脚配置 -->
对文档有疑问?欢迎您帮助我们 [完善此文档](https://gitee.com/JavaLionLi/plus-doc)

View File

@@ -1,9 +0,0 @@
<!-- _navbar.md -->
* [文档导航](/README.md)
* [Vue版本](/ruoyi-vue-plus/home.md)
* [Cloud版本](/ruoyi-cloud-plus/home.md)
* [前端文档](/plus-ui/home.md)
* [常见问题](/questions/lombok.md)
* [视频教程](/common/video.md)
* [演示系统](/common/demo_system.md)

View File

@@ -1,16 +0,0 @@
<!-- _sidebar.md -->
- **特别赞助**
- [![输入图片说明](https://foruda.gitee.com/images/1704162419429172656/d0521e59_1766278.png "2024-01-02=>2028-01-02")](http://ccflow.org/?frm=ryPlus)
- [![输入图片说明](https://foruda.gitee.com/images/1705569347386939952/3f187980_1766278.jpeg "2024-01-18=>2025-01-18")](http://www.shuduokeji.com)
- [![输入图片说明](https://foruda.gitee.com/images/1711681233267310022/2ffbcff2_1766278.png "2024-03-29=>2025-03-29")](https://www.jnpfsoft.com/index.html?from=plus-doc)
- **开始**
- [框架介绍](/README.md)
- [演示系统](/common/demo_system.md)
- [官方视频教程](/common/video.md)
- [粉丝专栏](/common/column.md)
- [参与贡献项目](/common/contribution.md)
- [如何提交PR](/common/pr.md)
- [如何加群](/common/add_group.md)
- [使用者登记](/common/user_register.md)
- [黑名单](/common/blacklist.md)

View File

@@ -1,27 +0,0 @@
# 加群方式
- - -
### 交流群(不提供任何问题解答 纯交流)
**加 <小助手> 微信备注 <加群>**<br>
**视频课程咨询或其他问题咨询请查看下方信息(小助手是机器人)**
<img src="https://foruda.gitee.com/images/1680762410689884638/60b546ca_1766278.png" width="300" height="300">
### VIP群(付费加群 提供问题解答、技术支持、技术分享)
首先感谢 `RuoYi` 提供分享开源 框架基于 `RuoYi` 重写大部分功能实现<br>
项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可<br>
VIP群是作者提供的私人服务 不代表着项目收费
> 问问题等于做习题 听作者解答问题等于习题讲解<br>
> 一个人接触的问题有限 一群人接触的问题无限 早进群早接触更多的问题(每天99+)<br>
> 承诺: 看见必回复 让你感受作者有多话痨<br>
两种途径:
1. 购买官方视频进群 [官方视频](/common/video.md)
2. 扫描下方二维码付款进群(无视频)
支付后申请加群即可 QQ群号 : **<637757165>**<br>
**加群扫码**<br>
<img src="https://foruda.gitee.com/images/1725259839682556495/2897bc86_1766278.png" width="300px" height="450px" /><img src="https://foruda.gitee.com/images/1725259806547656944/f870a5c7_1766278.jpeg" width="300px" height="450px" />

View File

@@ -1,7 +0,0 @@
# 黑名单
- - -
地址: https://github.com/QNAV/RuoYi-X-Plus
<br>
上榜缘由 使用本框架二次开源并未有任何声明与标注 将所有代码的作者名全都改成了自己 剽窃本框架代码

View File

@@ -1,18 +0,0 @@
# 粉丝专栏
- - -
**由上到下 从易到难**
> 粉丝整理 欢迎投稿
| 作者 | 文档地址 | 说明 |
|---------------|---------------------------------------------------------------|--------------------|
| 抓蛙师 | https://www.bilibili.com/video/BV1TG41157Ef/ | 学会问问题(小白必看) |
| 抓蛙师 | https://www.bilibili.com/video/BV1mr4y1j75M | Vue框架基础视频专栏(新人必看) |
| 抓蛙师 | https://www.bilibili.com/video/BV1Na411u7eC | Vue框架改造视频专栏(新人必看) |
| 抓蛙师 | https://www.bilibili.com/video/BV1te4y1D7hi | 小程序鉴权与uniapp联动 |
| 抓蛙师 | https://www.bilibili.com/video/BV1zt4y137UP | 公众号集成 |
| mayuanfei | https://note.youdao.com/s/XpvKnxAb | 入门专栏(新人必看) |
| 程序猿一枚_ | https://blog.csdn.net/zhaozhiqiang1981/category_12221291.html | 玩转RuoYi-Cloud-Plus |
| 程序猿一枚_ | https://www.bilibili.com/video/BV1yA411r7ji/ | Cloud环境搭建以及进阶开发 |
| MichelleChung | https://blog.csdn.net/michelle_zhong/category_11109741.html | 源码解析专栏(进阶必看) |
| MichelleChung | https://blog.csdn.net/michelle_zhong/category_12058476.html | Cloud源码解析专栏 |

View File

@@ -1,69 +0,0 @@
# 参与贡献的方式
- - -
参与贡献开源的方式有很多种 听作者来介绍
## 为开源项目点一个Star
> Star的多少关系到项目能否被更多人看到
<br>
同时Star也是作者前进的动力(作者每天都在盯着Star 涨了会开心 跌了会失落)
<br>
<br>
> 大家在寻找开源项目的时候, 大多数情况也是会先看Star比较多的项目
<br>
所以请给您觉得好的开源项目点一个小小的Star, 让好的项目能够被更多人看到
<br>
![输入图片说明](https://foruda.gitee.com/images/1678934493115487351/0c45121e_1766278.png "屏幕截图")
<br>
<font size="4">Vue版本: [Gitee我要点Star](https://gitee.com/dromara/RuoYi-Vue-Plus/stargazers) [Github我要点Star](https://github.com/dromara/RuoYi-Vue-Plus)</font>
<br>
<font size="4">Cloud版本: [Gitee我要点Star](https://gitee.com/dromara/RuoYi-Cloud-Plus/stargazers) [Github我要点Star](https://github.com/dromara/RuoYi-Cloud-Plus)</font>
## 为社区处理问题
> Issue是社区的交流地 大家会在这里提出自己的问题 或者是项目的功能异常
> 提问的规范在Issue的模板里已经写好了 按照模板填写有助于作者或者其他社区人员快速有效的回答问题
![输入图片说明](https://foruda.gitee.com/images/1678935068341532603/4b9d7af9_1766278.png "屏幕截图")
> 为提出问题的小伙伴答疑 可以有效降的帮助别人<br>
> 而且可以降低社区人员的精力分散 使精力全部投入到项目设计研发中
![输入图片说明](https://foruda.gitee.com/images/1678935380481365514/dddc9ce9_1766278.png "屏幕截图")
## 改进社区文档
> 大家都知道 我们程序员都不擅长写作<br>
> 有时候作者把文档写完了也不知道用户是什么感觉 是否能看懂<br>
> 所以参与社区文档建设绝对是一件意义重大的事情<br>
> 大家可以在Issue提出观后感 觉得哪看不懂 觉得哪应该详细说明<br>
> 当然了 大家也可以对文档进行改进后提交PR修改申请
<font size="6">文档仓库: [plus-doc](https://gitee.com/JavaLionLi/plus-doc) 👈点他点他</font>
![输入图片说明](https://foruda.gitee.com/images/1678935992827063291/d7c4dc5b_1766278.png "屏幕截图")
## 贡献代码
> 想参与贡献代码的小伙伴 重点来了: 作者会经常在Issue里发布需求认领<br>
> 觉得自己能做的可以在Issue里跟作者讨论 如需求还不够清晰 或者做的过程中遇到了什么问题
<img src="https://foruda.gitee.com/images/1678936513184771725/f26349dd_1766278.png" width="550px" height="450px" />
> 需求确定了以后就可以开始专注的写代码了<br>
> 但在开始写代码之前 一定要先看一下如何正确的提交PR
<font size="4">一点要仔细看: [如何提交PR](/common/pr.md) 👈点他点他</font>
## 如何成为项目成员
> 1.对框架有重大贡献者(由作者与团队成员判定)<br>
> 2.完成社区发布的两项复杂任务<br>
> 3.持续完成社区发布的简单任务若干(作者会关注到)<br>
> 4.持续为社区优化文档或处理issue若干(作者会关注到)<br>
## 项目成员待遇
> 1.可免费进入vip收费群<br>
> 2.每年还会发放IDEA正版授权<br>

View File

@@ -1,13 +0,0 @@
# 系统演示(请大家不要乱改数据 影响他人体验 谢谢配合)
- - -
**感谢 `孤舟烟雨` 贡献的演示服务器**
**1核2G 小服务器 经不起压测 请理性操作 违者直接封IP**
> 访问地址: [http://43.138.9.96/](http://43.138.9.96/)
> 登录账户 admin/admin123
> Admin监控中心 ruoyi/123456
> 任务调度中心 admin/123456

View File

@@ -1,37 +0,0 @@
# 如何提交PR贡献代码
- - -
### 步骤一 Fork项目到自己仓库
![输入图片说明](https://foruda.gitee.com/images/1673427084798343408/142a55d0_1766278.png "屏幕截图")
### 步骤二 基于dev分支 新建一个此PR功能点的专属分支
![输入图片说明](https://foruda.gitee.com/images/1673427220695789412/14c4f4ff_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1673427193964585607/16ea99d9_1766278.png "屏幕截图")
### 步骤三 使用Git工具 将自己仓库的项目拉去到本地做代码编写
![输入图片说明](https://foruda.gitee.com/images/1673427313201488937/f2df59bf_1766278.png "屏幕截图")
### 步骤四 使用Idea打开项目 切换到新建的功能分支
![输入图片说明](https://foruda.gitee.com/images/1673427394686229310/c479a5a5_1766278.png "屏幕截图")
### 步骤五 将编写好的代码 提交到自己的远程仓库
![输入图片说明](https://foruda.gitee.com/images/1673427519150795591/d88c2bc9_1766278.png "屏幕截图")
### 步骤六 创建PR申请(此操作在自己仓库或者要PR的仓库都可以)
![输入图片说明](https://foruda.gitee.com/images/1673427616155043776/fe2ce097_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1673427865031025513/0f58a137_1766278.png "屏幕截图")
### 步骤七 等待作者评审 按要求更改 直到没有问题后被作者合并
![输入图片说明](https://foruda.gitee.com/images/1673428029932524584/93234628_1766278.png "屏幕截图")
### 评审期间 如需对PR内容做更改 直接在新功能分支提交代码即可
### 无需重复提交PR申请 这边会自动比对两个分支的差异
![输入图片说明](https://foruda.gitee.com/images/1673428054139366497/4ecb6e98_1766278.png "屏幕截图")

View File

@@ -1,80 +0,0 @@
# 使用者登记
- - -
**使用此开源项目的公司或者组织**
> Vue版本登记地址: https://gitee.com/dromara/RuoYi-Vue-Plus/issues/I4QP39
> Cloud版本登记地址: https://gitee.com/dromara/RuoYi-Cloud-Plus/issues/I4VJ7G
| 公司名 | 官网 | LOGO |
|-------------------|:-------------------------------|----------------------------------------------------------------------------------------------------------------|
| 中国联通(长春分公司) | http://www.10010.com | <img src="https://foruda.gitee.com/images/1679554727740431371/bd179d0f_1766278.png" width="300" height="200"> |
| 中国电信(湖南分公司) | http://www.189.cn/hn/ | <img src="https://foruda.gitee.com/images/1699838764871886313/61b44b7d_1766278.png" width="300" height="200"> |
| 南京感知信息技术有限公司 | https://njgzxx.cn/ | <img src="https://foruda.gitee.com/images/1725589695335847776/10bb2088_1766278.png" width="400" height="200"> |
| 陕西骏景索道运营管理有限公司 | https://www.junjingsuodao.com/ | <img src="https://foruda.gitee.com/images/1724394959451680041/24ac17ff_7408092.png" width="300" height="200"> |
| 悠码科技有限公司 | https://orise.trytowish.cn/ | <img src="https://foruda.gitee.com/images/1722916054523975884/686ee49e_8929785.png" width="200" height="200"> |
| 苏州龙的信息系统股份有限公司 | http://www.longdayinfo.com/ | <img src="https://foruda.gitee.com/images/1721182313605689705/f676882a_2113976.png" width="400" height="200"> |
| 北京数通智达科技有限公司 | http://www.bzdtech.com/ | <img src="https://foruda.gitee.com/images/1717744899576682096/7d6cf41f_1766278.png" width="400" height="200"> |
| 广州六六七七科技有限公司 | https://artiversehub.ai/ | <img src="https://foruda.gitee.com/images/1716976454631958575/44abbb05_1766278.png" width="300" height="200"> |
| 宁波三品软件科技有限公司 | http://nbsanpin.com/ | <img src="https://foruda.gitee.com/images/1715845257022437822/1a096edc_14415359.png" width="300" height="200"> |
| 北京御一科技信息技术有限公司 | https://www.yudoctor.com | <img src="https://foruda.gitee.com/images/1715157943995574211/09aa2229_1766278.png" width="400" height="200"> |
| 成都卡恩特医疗科技有限公司 | http://www.scknot.com | <img src="https://foruda.gitee.com/images/1711091474880818044/96ddef90_1766278.png" width="400" height="200"> |
| 无锡科艾思科技有限公司 | https://www.kyoeis.com | <img src="https://foruda.gitee.com/images/1710929131545545232/a87f838e_1766278.png" width="400" height="200"> |
| 深圳市海联天下科技有限公司 | www.sealinkin.com | <img src="https://foruda.gitee.com/images/1709870697911145583/453db298_1766278.png" width="400" height="200"> |
| 上海非定义旅游服务有限公司 | http://www.anonymity.love/ | <img src="https://foruda.gitee.com/images/1706165274431234456/f4be93d3_1766278.png" width="400" height="200"> |
| 重庆威爱云科技有限公司 | https://www.51vive.com | <img src="https://foruda.gitee.com/images/1700460635019084607/f073724d_1766278.png" width="400" height="200"> |
| 中城智联(成都)创新科技有限公司 | http://www.zc-zl.com/ | <img src="https://foruda.gitee.com/images/1699841115050735040/0d6893d1_1766278.png" width="300" height="200"> |
| 浙江海亮股份有限公司 | https://www.hailiangstock.com | <img src="https://foruda.gitee.com/images/1699841174631804104/fd3466fd_1766278.png" width="300" height="200"> |
| 河北雄安山禾咨询工程有限公司 | https://shanheqei.club/ | <img src="https://foruda.gitee.com/images/1699855302878416881/6bfdb2d5_1766278.png" width="300" height="200"> |
| 数舵(河北雄安)信息科技有限公司 | http://www.shuduokeji.com | <img src="https://foruda.gitee.com/images/1698888517162767014/8a2840ff_1766278.png" width="400" height="200"> |
| 南昌鼎欣科技股份有限公司 | https://www.openzt.com | <img src="https://foruda.gitee.com/images/1697701810520579719/4da9666e_1766278.png" width="400" height="200"> |
| 东莞市码载网络科技有限公司 | https://www.codeload.top | <img src="https://foruda.gitee.com/images/1697618746817506398/57af2eaa_10583761.png" width="400" height="200"> |
| 北京农信通科技有限责任公司 | http://www.nxt.com.cn | <img src="https://foruda.gitee.com/images/1696428611360166577/72e7f7c4_971517.png" width="400" height="200"> |
| 中康腾华网络科技(重庆)有限公司 | https://www.zkthwlkj.com/ | <img src="https://foruda.gitee.com/images/1695112845600729239/a16e34e2_1766278.png" width="200" height="100"> |
| 杭州码恒信息科技有限公司 | http://www.mh-barcode.com/ | <img src="https://foruda.gitee.com/images/1690881482450489558/2d689bc1_1766278.png" width="400" height="200"> |
| 南京晶益科技有限公司 | https://www.nanjingjingyi.com/ | <img src="https://foruda.gitee.com/images/1689576488369281878/bec504ce_1766278.png" width="400" height="200"> |
| 合肥智享亿云科技有限公司 | http://www.izxyy.com | <img src="https://foruda.gitee.com/images/1685096398913604988/e6c16816_1766278.png" width="300" height="200"> |
| 锡简科技 | https://www.xj-fast.com | <img src="https://foruda.gitee.com/images/1683858424104223718/172f2c2e_1766278.png" width="300" height="200"> |
| 福建亘前科技有限公司 | https://genqian.top | <img src="https://foruda.gitee.com/images/1683170298723703161/891feff4_1766278.png" width="400" height="200"> |
| 北京联宇信通科技有限公司 | http://www.lyxtkj.com/ | <img src="https://foruda.gitee.com/images/1680068618387237935/5e195ad8_1766278.png" width="400" height="200"> |
| 厦门市熵时光科技有限公司 | https://www.xetsoft.com | <img src="https://foruda.gitee.com/images/1672299365177532128/f0e78c26_1766278.png" width="400" height="200"> |
| 广州润沁教育科技有限公司 | https://www.ca163.net | <img src="https://foruda.gitee.com/images/1678976000893686992/1acbda54_1766278.png" width="400" height="200"> |
| 广东乐善智能装备股份有限公司 | https://www.china-leshan.com/ | <img src="https://foruda.gitee.com/images/1672299473733272899/2065e28c_1766278.png" width="400" height="200"> |
| 数字江西科技有限公司 | https://www.digitaljx.com/ | <img src="https://foruda.gitee.com/images/1660527156328976445/屏幕截图.png" width="300" height="200"> |
| 上海极锐星瀚传感技术有限公司 | http://www.jrsensing.com/ | <img src="https://foruda.gitee.com/images/1669694597446652604/6997f99a_1766278.png" width="400" height="100"> |
| 北京数影互联科技有限公司 | http://www.dataflying.top/ | <img src="https://foruda.gitee.com/images/1686118090145603656/46dbe579_1766278.png" width="200" height="100"> |
| 广州创服信息科技有限公司 | https://www.cfkjcloud.com | <img src="https://foruda.gitee.com/images/1678975960889135530/85fa904f_1766278.png" width="400" height="200"> |
| 茂名云智科技有限公司 | http://www.winzkj.com | <img src="https://foruda.gitee.com/images/1678975967691323451/6343e6b7_1766278.png" width="400" height="200"> |
| 成都时光旅迹科技有限公司 | https://www.ttmup.com/ | <img src="https://foruda.gitee.com/images/1678975973935607983/a0f8dce2_1766278.png" width="400" height="200"> |
| 成都炫影全息科技有限公司 | http://xyqxgs.com | <img src="https://foruda.gitee.com/images/1678975979873588062/e34db081_1766278.png" width="400" height="200"> |
| 中山厚德快速模具有限公司 | http://hordrt.com | <img src="https://foruda.gitee.com/images/1678975986213675141/7436dcb9_1766278.png" width="400" height="200"> |
| 深圳市深南夙星科技有限公司 | http://www.szsnsx.com/ | <img src="https://foruda.gitee.com/images/1678975994674685698/a2c05a6e_1766278.png" width="400" height="200"> |
| 陕西华恒军创信息科技有限公司 | http://hhjc.cc | <img src="https://foruda.gitee.com/images/1678976006389002991/3786a1bc_1766278.png" width="400" height="200"> |
| 河南小牛信息科技有限公司 | http://www.hnxn888.com/ | <img src="https://foruda.gitee.com/images/1681106560964010687/d8969ed2_1766278.png" width="200" height="100"> |
| 武汉华智讯网络信息技术有限公司 | http://www.xun188.com | <img src="https://foruda.gitee.com/images/1678975944577016382/93c4541d_1766278.png" width="200" height="100"> |
| 易税信息技术有限公司 | https://www.etax.top | <img src="https://foruda.gitee.com/images/1678975950137235651/211a63c4_1766278.png" width="200" height="100"> |
| 广西华景城建筑设计有限公司 | http://www.hjcadc.com | <img src="https://foruda.gitee.com/images/1678975955216975234/e83c8c6e_1766278.png" width="200" height="100"> |
| 铭创科技有限公司 | https://www.mcck.cn/ | <img src="https://foruda.gitee.com/images/1693967206668467582/8c234a6d_1766278.png" width="200" height="100"> |
| 西安鼎慧网络科技有限公司 | | <img src="https://foruda.gitee.com/images/1721271356660437424/b85c5754_8776295.jpeg" width="400" height="200"> |
| 营口鼎瑞网络科技有限公司 | | <img src="https://foruda.gitee.com/images/1715836865319520119/5dc34a5f_8693506.png" width="400" height="200"> |
| 南昌漫库书店有限公司 | | <img src="https://foruda.gitee.com/images/1687656369793887183/ce1a33f6_1766278.png" width="200" height="100"> |
| 广西文韬智能科技有限公司 | | <img src="https://foruda.gitee.com/images/1678976034543683491/8d8a1ebe_1766278.png" width="200" height="100"> |
| 贵州亿瑞祺科技有限公司 | |
| 贵州新绿视界环保科技有限公司 | |
| 湖南智才伯乐数据科技有限公司 | |
| 德州商储超市有限公司 | |
| 曲沃亿分科技中心 | |
| 南京杰度信息技术有限公司 | |
| 武汉忆秋科技有限公司 | |
| 济南千惠网络科技有限公司 | |
| 江苏泛联科技有限公司 | |
| 沈阳市果冻网络信息科技有限责任公司 | |
| 灵劲科技有限公司 | |
| 亿世达餐饮管理(北京)有限公司 | |
| 深圳市凯帝电子商务有限公司 | |
| 成都数智源蓉卡科技有限公司 | |
| 上海振福信息科技有限公司 | |
| 重庆六客会科技有限公司 | |
| 无限创优(西安)科技有限公司 | |
| 惠族网络科技发展有限公司 | |
| 纳森科技有限公司 | |

View File

@@ -1,85 +0,0 @@
# 视频教程(联合出品)
### 主讲与后期剪辑: `抓蛙师`
抓蛙师简介: B站知名UP主 B站首页: https://space.bilibili.com/520725002
### 知识点统筹与内容审核: `疯狂的狮子Li`
疯狂的狮子Li简介: RuoYi-Vue-Plus 与 RuoYi-Cloud-Plus 作者
## 已完结🎉🎉🎉 优惠价: 598(仅限前500名) ~~原价: 698~~
**注意: 视频采用 RuoYi-Vue-Plus 版本 4.X 分支讲解!!! (内容为通用技术与版本关联性不大)**<br>
**内容为框架内所用到的技术与设计原理(打破不知道、不会用、不知应用场景等问题)**
课程简介: https://www.bilibili.com/video/BV16j411D7BX/
<br>
试看课程: https://www.bilibili.com/video/BV1uS411P7JD/
<br>
试看课程: https://www.bilibili.com/video/BV1vLbNeuESn/
<br>
试看课程: https://www.bilibili.com/video/BV1xV4y127KM/
<br>
试看课程: https://www.bilibili.com/video/BV1W5v8eBEgs/
<br>
课程总结: https://www.bilibili.com/video/BV1734y1g7fk/
<br>
## 购买方式
**小本生意 用心录制 拒绝砍价 已更新到 236 集 课程完结**<br>
> 课程咨询或购买请联系 价格598<br>
> QQ: 906670865 (疯狂的狮子Li)<br>
> QQ: 770492966 (抓蛙师)
## 购买前常见问题答疑
> 问题1: 购买后是否有群可以解答问题<br>
> 答: 购买后有专属课程付费群(千人大群)讲师在线答疑
>
> 问题2: 是否持续更新 如新版本功能<br>
> 答: 课程目录即为全部课程内容 以课程目录为准 明年大概会出二期来讲新版本内容<br>
> 因为持续更新会导致前面的技术老旧 新购买的人无法及时学习新技术<br>
> 故而采用分期出课程制度 已经购买过的老客户 再次购买下一次会给力度非常大的折扣
>
> 问题3: 目前视频未全部录制完成 后续更新是否二次收费<br>
> 答: 视频目录即为全部视频内容 一次收费后续更新仍然可看直到视频全部更新完成(明年出二期课程不算在内)
>
> 问题4: 视频如何下载如何观看<br>
> 答: 视频文件已加密 采用专门的播放器(播放器只限制截图录屏等不限制其他软件使用) 由管理员发放授权码观看<br>
> 支持通过 百度云 或者 阿里云 网盘下载视频资源
>
> 问题5: 视频平均时长和总时长大概多久<br>
> 答: 视频每集短的大概10分钟以上 长的大概40个分钟左右 平均时长20多分钟每集<br>
> 目前已经录制了236集总时长为80多个小时
>
> 问题6: 是否有讲解 Cloud 版本相关内容<br>
> 答: 视频主要讲解内容为框架内所用到的技术与设计原理 无论什么版本 功能和设计都是一样的<br>
> Cloud 版本只是多了 alibaba 的几个组件完全可以B站自学
## 课程目录
![输入图片说明](https://foruda.gitee.com/images/1695105467795304336/58fcd6db_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105494170842444/10f98fed_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105523526589287/f131c614_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105547992880680/9f4137f3_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105560849590514/d19fad6a_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105586641712428/349a971b_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105595501187093/fb819d35_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105609163585390/833dd89c_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105630469565265/8dbba1d2_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695105659037093525/09a4f6e1_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1695714493079698007/311980ee_1766278.png "屏幕截图")
![输入图片说明](https://foruda.gitee.com/images/1697446957351573520/cab3617d_1766278.png "屏幕截图")
## 学员观后感
| | |
|---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|
| ![输入图片说明](https://foruda.gitee.com/images/1691386100129796781/44b69dae_1766278.jpeg "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386076834242484/a6073f7d_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1691386089186649583/98ac8b7c_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1691386108722171132/b937b23a_1766278.jpeg "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1695714607596127461/513b6893_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1692804549604261480/09ef12f6_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1692804541482477905/578e5448_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1695714614517941469/cac681fb_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1698225407961714462/4d271901_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698225416488201339/30572e7f_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1698807198508085566/16c37a1b_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807208125772586/ceed632e_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1698807214013013096/ad3bc016_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1698807221010472627/72b10901_1766278.png "屏幕截图") |

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -1,74 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>plus-doc</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="description" content="Description">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<!-- 设置浏览器图标 -->
<link rel="icon" href="./static/image/favicon.ico" type="image/x-icon"/>
<link rel="shortcut icon" href="./static/image/favicon.ico" type="image/x-icon"/>
<meta charset="UTF-8">
<!-- 默认主题 -->
<link rel="stylesheet" href="./static/css/vue.css">
</head>
<body>
<div id="app"></div>
<script>
window.$docsify = {
// 项目名称
name: 'ruoyi-ai',
// 仓库地址点击右上角的Github章鱼猫头像会跳转到此地址
repo: 'https://gitee.com/ruoyi-ai',
// 侧边栏支持默认加载的是项目根目录下的_sidebar.md文件
loadSidebar: true,
// 导航栏支持默认加载的是项目根目录下的_navbar.md文件
loadNavbar: true,
// 封面支持默认加载的是项目根目录下的_coverpage.md文件
coverpage: true,
// 最大支持渲染的标题层级
maxLevel: 5,
// 自定义侧边栏后默认不会再生成目录设置生成目录的最大层级建议配置为2-4
subMaxLevel: 4,
// 小屏设备下合并导航栏到侧边栏
mergeNavbar: true,
// 页脚支持,默认加载的是 _footer.md
loadFooter: true,
// 首页只展示封面默认为false与README.md进行拼接
onlyCover: true,
search: {
maxAge: 86400000,// 过期时间,单位毫秒,默认一天
paths: 'auto',// 注意:仅适用于 paths: 'auto' 模式
placeholder: '👉👉👉在这里搜索关键字👈👈👈',
noData: '找不到结果',
depth: 4,
hideOtherSidebarContent: false,
namespace: 'Docsify-Guide',
}
}
</script>
<!-- docsify的js依赖 -->
<script src="./static/js/docsify.min.js"></script>
<!-- emoji表情支持 -->
<script src="./static/js/emoji.min.js"></script>
<!-- 图片放大缩小支持 -->
<script src="./static/js/zoom-image.min.js"></script>
<!-- 搜索功能支持 -->
<script src="./static/js/search.min.js"></script>
<!--在所有的代码块上添加一个简单的Click to copy按钮来允许用户从你的文档中轻易地复制代码-->
<script src="./static/js/docsify-copy-code.min.js"></script>
<!-- 回到顶部 -->
<script src="./static/js/docsify-scroll-to-top.min.js"></script>
<!-- 分页导航 -->
<script src="./static/js/docsify-pagination.min.js"></script>
<!-- 页脚-->
<script src="./static/js/docsify-footer.min.js"></script>
<!-- 代码高亮 -->
<script src="./static/js/prism-typescript.min.js"></script>
<script src="./static/js/prism-bash.min.js"></script>
</body>
</html>

View File

@@ -1,22 +0,0 @@
<!-- _sidebar.md -->
- **特别赞助**
- [![输入图片说明](https://foruda.gitee.com/images/1704162419429172656/d0521e59_1766278.png "2024-01-02=>2028-01-02")](http://ccflow.org/?frm=ryPlus)
- [![输入图片说明](https://foruda.gitee.com/images/1705569347386939952/3f187980_1766278.jpeg "2024-01-18=>2025-01-18")](http://www.shuduokeji.com)
- [![输入图片说明](https://foruda.gitee.com/images/1711681233267310022/2ffbcff2_1766278.png "2024-03-29=>2025-03-29")](https://www.jnpfsoft.com/index.html?from=plus-doc)
* **简介**
* [项目简介](/plus-ui/home.md)
* **开发文档**
* [通用方法](/plus-ui/devdoc/common_func.md)
* [开发规范](/plus-ui/devdoc/dev_norm.md)
* [请求流程](/plus-ui/devdoc/request_process.md)
* [路由使用](/plus-ui/devdoc/router_use.md)
* [组件使用](/plus-ui/devdoc/component_use.md)
* [权限使用](/plus-ui/devdoc/permissions_use.md)
* [页签缓存](/plus-ui/devdoc/page_cache.md)
* [使用图标](/plus-ui/devdoc/icon_use.md)
* [使用字典](/plus-ui/devdoc/dict_use.md)
* [使用参数](/plus-ui/devdoc/param_use.md)
* [异常处理](/plus-ui/devdoc/exception_handling.md)
* [内容复制](/plus-ui/devdoc/content_copy.md)

View File

@@ -1,234 +0,0 @@
# 通用方法
- - -
### $tab对象
> `$tab`对象用于做页签操作、刷新页签、关闭页签、打开页签、修改页签等,它定义在`plugins/tab.ts`文件中,它有如下方法
* 打开页签
```typescript
// 打开页签
proxy?.$tab.openPage('/system/user');
// 打开页签并指定页签标题
proxy?.$tab.openPage('/system/user', '用户管理');
proxy?.$tab.openPage('/system/user', '用户管理').then(() => {
// 执行结束的逻辑
})
```
* 修改页签
```typescript
// 修改当前页签
const obj = Object.assign({}, route, { title: '自定义标题' });
proxy?.$tab.updatePage(obj);
```
* 关闭页签
```typescript
// 关闭当前
proxy?.$tab.closePage();
// 关闭指定页签
const obj = { path: "/system/user", name: "User" };
proxy?.$tab.closePage(obj);
proxy?.$tab.closePage(obj).then(() => {
// 执行结束的逻辑
})
```
* 刷新页签
```typescript
// 刷新当前页签
proxy?.$tab.refreshPage();
// 刷新指定页签
const obj = { path: "/system/user", name: "User" };
proxy?.$tab.refreshPage(obj);
proxy?.$tab.refreshPage(obj).then(() => {
// 执行结束的逻辑
})
```
* 关闭所有页签
```typescript
proxy?.$tab.closeAllPage();
proxy?.$tab.closeAllPage().then(() => {
// 执行结束的逻辑
})
```
* 关闭左侧页签
```typescript
// 关闭当前页签的左侧页签
proxy?.$tab.closeLeftPage();
// 关闭指定页签的左侧页签
const obj = { path: "/system/user", name: "User" };
proxy?.$tab.closeLeftPage(obj);
proxy?.$tab.closeLeftPage(obj).then(() => {
// 执行结束的逻辑
})
```
* 关闭右侧页签
```typescript
// 关闭当前页签的右侧页签
proxy?.$tab.closeRightPage();
// 关闭指定页签的右侧页签
const obj = { path: "/system/user", name: "User" };
proxy?.$tab.closeRightPage(obj);
proxy?.$tab.closeRightPage(obj).then(() => {
// 执行结束的逻辑
})
```
* 关闭其他页签
```typescript
proxy?.$tab.closeOtherPage();
const obj = { path: "/system/user", name: "User" };
proxy?.$tab.closeOtherPage(obj);
proxy?.$tab.closeOtherPage(obj).then(() => {
// 执行结束的逻辑
})
```
### $modal对象
> `$modal`对象用于做消息提示、通知提示、对话框提醒、二次确认、遮罩等,它定义在`plugins/modal.ts`文件中,它有如下方法
* 提供成功、警告和错误等反馈信息
```typescript
proxy?.$modal.msg("默认反馈");
proxy?.$modal.msgError("错误反馈");
proxy?.$modal.msgSuccess("成功反馈");
proxy?.$modal.msgWarning("警告反馈");
```
* 提供成功、警告和错误等提示信息
```typescript
proxy?.$modal.alert("默认提示");
proxy?.$modal.alertError("错误提示");
proxy?.$modal.alertSuccess("成功提示");
proxy?.$modal.alertWarning("警告提示");
```
* 提供成功、警告和错误等通知信息
```typescript
proxy?.$modal.notify("默认通知");
proxy?.$modal.notifyError("错误通知");
proxy?.$modal.notifySuccess("成功通知");
proxy?.$modal.notifyWarning("警告通知");
```
* 提供确认窗体信息
```typescript
proxy?.$modal.confirm('确认信息').then(function() {
...
}).then(() => {
...
}).catch(() => {});
```
* 提供遮罩层信息
```typescript
// 打开遮罩层
proxy?.$modal.loading("正在导出数据,请稍后...");
// 关闭遮罩层
proxy?.$modal.closeLoading();
```
### $auth对象
> `$auth`对象用于验证用户是否拥有某(些)权限或角色,它定义在`plugins/auth.ts`文件中,它有如下方法
* 验证用户权限
```typescript
// 验证用户是否具备某权限
proxy?.$auth.hasPermi("system:user:add");
// 验证用户是否含有指定权限,只需包含其中一个
proxy?.$auth.hasPermiOr(["system:user:add", "system:user:update"]);
// 验证用户是否含有指定权限,必须全部拥有
proxy?.$auth.hasPermiAnd(["system:user:add", "system:user:update"]);
```
* 验证用户角色
```typescript
// 验证用户是否具备某角色
proxy?.$auth.hasRole("admin");
// 验证用户是否含有指定角色,只需包含其中一个
proxy?.$auth.hasRoleOr(["admin", "common"]);
// 验证用户是否含有指定角色,必须全部拥有
proxy?.$auth.hasRoleAnd(["admin", "common"]);
```
### $cache对象
> `$cache`对象用于处理缓存。我们并不建议您直接使用`sessionStorage`或`localStorage`(vue3版本推荐使用useStorage),因为项目的缓存策略可能发生变化,通过`$cache`对象做一层调用代理则是一个不错的选择。`$cache`提供`session`和`local`两种级别的缓存,如下:
| 对象名称 | 缓存类型 |
| -------- | ---------------------------------- |
| session | 会话级缓存通过sessionStorage实现 |
| local | 本地级缓存通过localStorage实现 |
**示例**
```typescript
// local 普通值
proxy?.$cache.local.set('key', 'local value')
console.log(proxy?.$cache.local.get('key')) // 输出'local value'
// session 普通值
proxy?.$cache.session.set('key', 'session value')
console.log(proxy?.$cache.session.get('key')) // 输出'session value'
// local JSON值
proxy?.$cache.local.setJSON('jsonKey', { localProp: 1 })
console.log(proxy?.$cache.local.getJSON('jsonKey')) // 输出'{localProp: 1}'
// session JSON值
proxy?.$cache.session.setJSON('jsonKey', { sessionProp: 1 })
console.log(proxy?.$cache.session.getJSON('jsonKey')) // 输出'{sessionProp: 1}'
// 删除值
proxy?.$cache.local.remove('key')
proxy?.$cache.session.remove('key')
```
### $download对象
> `$download`对象用于文件下载,它定义在`plugins/download.ts`文件中,它有如下方法
* 通过ossId从存储中下载文件
``` typescript
// 默认下载方法
proxy?.$download.oss(ossId);
```
* 根据请求地址下载zip包
```typescript
const url = '/tool/gen/batchGenCode?tables=' + tableNames;
const name = 'ruoyi';
// 默认方法
proxy?.$download.zip(url, name);
```

View File

@@ -1,55 +0,0 @@
# 组件使用
- - -
vue 注册组件的两种方式
`@/components` 下创建的.vue文件自动为全局组件可直接在任意位置使用。
### 局部注册
在对应页使用`components`注册组件。
```typescript
<script setup lang=ts>
import ComponentA from './ComponentA.vue'
</script>
<template>
<ComponentA />
</template>
```
### 全局注册
我们可以使用[ Vue 应用实例](https://cn.vuejs.org/guide/essentials/application.html)的 `.component()` 方法,让组件在当前 Vue 应用中全局可用。
```typescript
import { createApp } from 'vue'
const app = createApp({})
app.component(
// 注册的名字
'MyComponent',
// 组件的实现
{
/* ... */
}
)
```
如果使用单文件组件,你可以注册被导入的 `.vue` 文件:
```typescript
import MyComponent from './App.vue'
app.component('MyComponent', MyComponent)
```
`.component()` 方法可以被链式调用:
```typescript
app
.component('ComponentA', ComponentA)
.component('ComponentB', ComponentB)
.component('ComponentC', ComponentC)
```
全局注册的组件可以在此应用的任意组件的模板中使用:
```Typescript
// 这在当前应用的任意组件中都可用
<ComponentA/>
<ComponentB/>
<ComponentC/>
```
所有的子组件也可以使用全局注册的组件,这意味着这三个组件也都可以在彼此内部使用。

View File

@@ -1,4 +0,0 @@
# 内容复制
- - -
文档建设中

View File

@@ -1,16 +0,0 @@
# 开发规范
- - -
### 新增view
> 在`@/views`文件下创建对应的文件夹,一般性一个路由对应一个文件, 该模块下的功能就建议在本文件夹下创建一个新文件夹,各个功能模块维护自己的`utils`或`components`组件。
### 新增api
> 在`@/api`文件夹下创建本模块对应的api服务。
> 在api服务同级创建`types.ts`类型声明文件。
### 新增组件
> 在全局的`@/components`写一些全局的组件,如富文本,各种搜索组件,封装的分页组件等等能被公用的组件。 每个页面或者模块特定的业务组件则会写在当前`@/views`下面。
如:`@/views/system/user/components/xxx.vue`。这样拆分大大减轻了维护成本。
### 新增样式
> 页面的样式和组件是一个道理,全局的`@/style`放置一下全局公用的样式,每一个页面的样式就写在当前 views下面请记住加上scoped 就只会作用在当前组件内了,避免造成全局的样式污染。

View File

@@ -1,4 +0,0 @@
# 使用字典
- - -
文档建设中

View File

@@ -1,4 +0,0 @@
# 异常处理
- - -
文档建设中

View File

@@ -1,4 +0,0 @@
# 使用图标
- - -
文档建设中

Some files were not shown because too many files have changed in this diff Show More