145870 1 週間 前
コミット
54ad97dab3

+ 241 - 77
README.md

@@ -8,6 +8,16 @@
 
 
 予书管理系统是一套现代化的企业级后台管理解决方案,采用前后端分离架构,提供完整的权限管理、系统监控、开发工具等基础功能。系统界面采用玻璃拟态(Glassmorphism)设计风格,支持深色/浅色主题切换。
 予书管理系统是一套现代化的企业级后台管理解决方案,采用前后端分离架构,提供完整的权限管理、系统监控、开发工具等基础功能。系统界面采用玻璃拟态(Glassmorphism)设计风格,支持深色/浅色主题切换。
 
 
+### 核心特点
+
+- 前后端分离架构,支持独立部署和扩展
+- 基于RBAC的权限模型,支持角色、菜单、按钮级权限控制
+- 模块化设计,核心系统+可选扩展模块,按需部署
+- 完整的系统监控,实时掌握系统运行状态
+- 强大的代码生成器,快速生成前后端代码
+- 现代化UI设计,支持主题切换和响应式布局
+- 企业级安全防护,JWT认证、密码加密、防注入攻击
+
 ---
 ---
 
 
 ## 系统架构
 ## 系统架构
@@ -35,27 +45,36 @@ yushu/
 
 
 ## 技术栈
 ## 技术栈
 
 
-### 后端
-
-| 技术 | 说明 |
-|------|------|
-| Spring Boot 3.5 | 基础框架 |
-| Spring Security | 安全框架 |
-| MyBatis | ORM 框架 |
-| MySQL | 数据库 |
-| Redis | 缓存 |
-| JWT | 身份认证 |
-| Quartz | 定时任务 |
-
-### 前端
-
-| 技术 | 说明 |
-|------|------|
-| Vue 3 | 前端框架 |
-| Element Plus | UI 组件库 |
-| Vite | 构建工具 |
-| Pinia | 状态管理 |
-| Vue Router | 路由管理 |
+### 后端技术
+
+| 技术 | 版本 | 说明 |
+|------|------|------|
+| Spring Boot | 3.5.4 | 基础框架 |
+| Spring Security | 6.x | 安全框架 |
+| MyBatis-Plus | 3.5.9 | ORM 框架(增强版) |
+| MySQL | 8.2.0 | 关系型数据库 |
+| Redis | 3.0+ | 缓存数据库 |
+| JWT | 0.9.1 | Token生成与验证 |
+| Quartz | - | 定时任务调度 |
+| Druid | 1.2.23 | 数据库连接池 |
+| FastJson2 | 2.0.58 | JSON处理 |
+| Swagger/SpringDoc | 2.8.9 | API文档 |
+| POI | 4.1.2 | Excel导入导出 |
+| Velocity | 2.3 | 代码生成模板 |
+
+### 前端技术
+
+| 技术 | 版本 | 说明 |
+|------|------|------|
+| Vue | 3.5.16 | 渐进式JavaScript框架 |
+| Ant Design Vue | 4.2.0 | 企业级UI组件库 |
+| Vite | 6.3.5 | 下一代前端构建工具 |
+| Pinia | 3.0.2 | Vue状态管理 |
+| Vue Router | 4.5.1 | 路由管理 |
+| Axios | 1.9.0 | HTTP请求库 |
+| ECharts | 5.6.0 | 数据可视化 |
+| CodeMirror | 6.0.2 | 代码编辑器 |
+| Quill | 2.0.2 | 富文本编辑器 |
 
 
 ---
 ---
 
 
@@ -82,36 +101,26 @@ yushu/
 CREATE DATABASE yushu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 CREATE DATABASE yushu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 ```
 ```
 
 
-**必须导入**:
+**核心系统(必需):**
 ```bash
 ```bash
-cd yushu-backend
-
-# 系统核心数据库
-mysql -u root -p yushu < sql/ys_20250522.sql
+cd yushu-backend/sql
 
 
-# 定时任务模块
-mysql -u root -p yushu < sql/quartz.sql
+# 导入核心系统(包含:用户权限+定时任务+文件+消息+待办+错误日志)
+mysql -u root -p yushu < yushu_core.sql
 ```
 ```
 
 
-**可选模块**:
+**扩展模块(可选):**
 ```bash
 ```bash
-# AI模块
-mysql -u root -p yushu < sql/ai.sql
-
-# 邮箱模块
-mysql -u root -p yushu < sql/mail.sql
-
-# 文件模块
-mysql -u root -p yushu < sql/file.sql
-
-# 消息模块
-mysql -u root -p yushu < sql/message.sql
+# AI助手模块
+mysql -u root -p yushu < yushu_module_ai.sql
 
 
-# 错误日志模块
-mysql -u root -p yushu < sql/error-log.sql
+# 邮件系统模块
+mysql -u root -p yushu < yushu_module_mail.sql
 ```
 ```
 
 
-### 2. 后端部署
+详细说明请查看:[SQL脚本文档](./yushu-backend/sql/README.md)
+
+### 2. 后端配置与启动
 
 
 ```bash
 ```bash
 # 进入后端目录
 # 进入后端目录
@@ -210,41 +219,97 @@ docker run -d -p 8080:8080 --name yushu-backend yushu-backend
 
 
 ---
 ---
 
 
-## 内置功能
-
-### 系统管理
-- 用户管理:系统用户配置与权限分配
-- 角色管理:角色权限分配,支持数据权限
-- 菜单管理:配置系统菜单、操作权限、按钮权限
-- 部门管理:组织机构树形结构管理
-- 岗位管理:用户职务配置
-- 字典管理:系统常用固定数据维护
-- 参数管理:系统动态配置参数
-- 通知公告:系统通知信息发布
-- 文件管理:系统文件上传与管理
-- 图标管理:系统图标资源管理
-
-### 系统监控
-- 在线用户:当前活跃用户监控,支持强制下线
-- 定时任务:任务调度管理与执行日志
-- 操作日志:系统操作日志记录与查询
-- 登录日志:用户登录记录与异常查询
-- 服务监控:CPU、内存、磁盘、JVM 信息
-- 缓存监控:Redis 缓存信息与统计
-- 数据源监控:数据库连接池状态监控
-
-### 开发工具
-- 代码生成:根据数据库表生成前后端代码
-- 表单构建:可视化表单设计器
-- 系统接口:Swagger API 接口文档
-
-### 可选模块
-- AI 模块:集成多家 AI 厂商(智谱、Kimi、OpenAI 等),支持流式输出、多轮对话
-- 邮箱模块:系统邮件发送,支持模板配置
-- 文件模块:文件上传与管理,支持本地/云存储
-- 消息模块:站内消息与通知功能
-- 错误日志模块:前端错误日志收集与分析
+## 功能模块
+
+### 核心系统(必需)
+
+#### 1. 系统管理
+- 用户管理:用户信息维护、密码重置、状态管理、数据权限分配
+- 角色管理:角色权限配置、菜单权限、数据权限范围设置
+- 菜单管理:动态菜单配置、按钮权限、图标管理、路由配置
+- 部门管理:组织架构树形管理、部门层级关系维护
+- 岗位管理:岗位信息配置、岗位与用户关联
+- 字典管理:系统字典类型和数据维护、字典缓存管理
+- 参数管理:系统参数动态配置、参数缓存刷新
+- 通知公告:系统公告发布、公告类型管理
+
+#### 2. 系统监控
+- 在线用户:实时在线用户列表、会话信息、强制下线
+- 定时任务:Quartz任务调度、Cron表达式配置、执行日志
+- 操作日志:用户操作记录、请求参数、返回结果、异常信息
+- 登录日志:登录记录、登录地点、浏览器信息、登录状态
+- 服务监控:CPU使用率、内存状态、JVM信息、磁盘空间
+- 缓存监控:Redis连接信息、缓存命中率、键值管理、命令统计
+- 数据源监控:Druid连接池状态、SQL监控、慢SQL分析
+
+#### 3. 开发工具
+- 代码生成:数据库表导入、代码模板配置、一键生成CRUD代码
+- 表单构建:可视化表单设计、组件拖拽、表单代码生成
+- 系统接口:Swagger/SpringDoc接口文档、在线调试
+
+#### 4. 文件管理
+- 文件夹管理:文件夹创建、重命名、删除、树形结构
+- 文件上传:多文件上传、文件预览、下载、删除
+- 文件分享:分享链接生成、访问权限控制、分享记录
+
+#### 5. 消息中心
+- 系统通知:系统消息推送、消息类型分类
+- 消息接收:消息列表、已读未读状态、消息详情
+- 消息管理:消息发送记录、接收统计
+
+#### 6. 待办事项
+- 待办管理:待办创建、编辑、删除、状态更新
+- 优先级设置:紧急、重要、普通等级
+- 完成状态:待办、进行中、已完成
+
+#### 7. 错误日志
+- 前端错误:前端异常捕获、错误堆栈记录
+- 错误统计:错误类型分析、错误趋势图表
+- 错误处理:错误标记、处理记录
+
+### 扩展模块(可选)
+
+#### AI助手模块
+- 多厂商支持:OpenAI、智谱AI、阿里云、百度、Moonshot(Kimi)、Ollama
+- 服务管理:AI服务配置、模型参数设置、API密钥管理
+- 对话功能:流式输出、多轮对话、上下文管理
+- 会话记录:对话历史、会话管理、消息查询
+
+#### 邮件系统模块
+- 邮箱配置:多邮箱管理、SMTP/API配置、阿里云/腾讯企业邮箱
+- 邮件模板:模板管理、变量替换、HTML/纯文本支持
+- 发送邮件:单发/群发、附件支持、发送日志
+- 收件箱:IMAP协议收信、邮件列表、已读/未读、星标标记
+
+---
 
 
+## 系统特性
+
+### 安全特性
+- JWT Token认证机制
+- 密码BCrypt加密存储
+- 接口权限验证
+- 数据权限过滤
+- SQL注入防护
+- XSS攻击防护
+- CSRF防护
+- 接口防重放
+- 敏感操作日志记录
+
+### 性能优化
+- Redis缓存加速
+- 数据库连接池优化
+- 分页查询优化
+- 静态资源CDN加速
+- Gzip压缩
+- 懒加载和按需加载
+
+### 开发体验
+- 热部署支持
+- 代码生成器
+- 统一异常处理
+- 统一返回格式
+- 接口文档自动生成
 ---
 ---
 
 
 ## 目录说明
 ## 目录说明
@@ -256,6 +321,105 @@ docker run -d -p 8080:8080 --name yushu-backend yushu-backend
 
 
 ---
 ---
 
 
+## 未来计划
+
+### 即将推出的功能
+
+- 工作流引擎:可视化流程设计、流程审批、流程监控、流程实例管理
+- 多租户支持:SaaS模式、租户隔离、数据隔离、租户管理
+- 微服务架构:服务拆分、服务治理、分布式事务、服务网关
+- 移动端适配:响应式设计优化、移动端专属界面、H5页面
+- 数据大屏:可视化数据展示、实时监控大屏、图表组件库
+- 报表系统:自定义报表、数据导出、图表分析、报表模板
+- 消息推送:WebSocket实时推送、邮件通知、短信通知
+- 第三方登录:微信、QQ、GitHub等第三方账号登录
+- 国际化支持:多语言切换、语言包管理
+- 数据备份:定时备份、备份恢复、备份管理
+
+---
+
+## 常见问题
+
+### 部署相关
+- Q: 如何修改默认端口?
+  - A: 后端在 application.yml 中修改 server.port,前端在 vite.config.js 中修改 server.port
+
+- Q: 如何配置跨域?
+  - A: 后端已配置CORS,前端开发环境使用代理,生产环境通过Nginx配置
+
+- Q: Redis连接失败怎么办?
+  - A: 检查Redis服务是否启动,配置文件中的连接信息是否正确
+
+### 功能相关
+- Q: 如何添加新的菜单?
+  - A: 在系统管理-菜单管理中添加,配置路由、组件路径、权限标识
+
+- Q: 如何使用代码生成器?
+  - A: 在开发工具-代码生成中导入数据库表,配置生成信息后一键生成
+
+- Q: 如何集成AI功能?
+  - A: 导入 yushu_module_ai.sql,在AI服务管理中配置API密钥
+
+### 开发相关
+- Q: 如何添加新的接口?
+  - A: 在Controller中添加接口,使用@PreAuthorize注解配置权限
+
+- Q: 如何自定义主题?
+  - A: 修改 src/assets/styles/variables.module.scss 中的变量
+
+---
+
+## 更新日志
+
+### v3.9.0 (2025-01-22)
+- 升级 Spring Boot 到 3.5.4
+- 升级 Vue 到 3.5.16
+- 升级 Ant Design Vue 到 4.2.0
+- 重构数据库脚本,采用模块化设计
+- 新增文件管理模块
+- 新增消息中心模块
+- 新增待办事项模块
+- 新增错误日志模块
+- 优化AI助手功能
+- 优化邮件系统功能
+- 修复已知问题
+
+---
+
+## 贡献指南
+
+欢迎提交Issue和Pull Request!
+
+### 开发规范
+- 代码风格遵循阿里巴巴Java开发手册
+- 前端代码遵循Vue官方风格指南
+- 提交信息格式:`[模块] 功能描述`
+- 新功能需要添加单元测试
+- 重要功能需要更新文档
+
+### 提交流程
+1. Fork本项目
+2. 创建特性分支 (git checkout -b feature/AmazingFeature)
+3. 提交更改 (git commit -m '[模块] 添加某某功能')
+4. 推送到分支 (git push origin feature/AmazingFeature)
+5. 提交Pull Request
+
+---
+
+## 开源协议
+
+本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。
+
+---
+
 ## 致谢
 ## 致谢
 
 
 本项目基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 进行二次开发,感谢若依团队的开源贡献。
 本项目基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 进行二次开发,感谢若依团队的开源贡献。
+
+感谢以下开源项目:
+- [Spring Boot](https://spring.io/projects/spring-boot)
+- [Vue.js](https://vuejs.org/)
+- [Ant Design Vue](https://antdv.com/)
+- [MyBatis-Plus](https://baomidou.com/)
+- [Vite](https://vitejs.dev/)
+- 以及所有贡献者

+ 14 - 35
yushu-backend/README.md

@@ -55,13 +55,10 @@
 ```
 ```
 yushu-backend/
 yushu-backend/
 ├── sql/                          # 数据库脚本
 ├── sql/                          # 数据库脚本
-│   ├── ys_20250522.sql          # 系统核心数据库(必须)
-│   ├── quartz.sql               # 定时任务模块(必须)
-│   ├── ai.sql                   # AI模块(可选)
-│   ├── mail.sql                 # 邮箱模块(可选)
-│   ├── file.sql                 # 文件模块(可选)
-│   ├── message.sql              # 消息模块(可选)
-│   └── error-log.sql            # 错误日志模块(可选)
+│   ├── yushu_core.sql           # 核心系统(必需)
+│   ├── yushu_module_ai.sql      # AI助手扩展模块(可选)
+│   ├── yushu_module_mail.sql    # 邮件系统扩展模块(可选)
+│   └── README.md                # SQL脚本说明文档
 ├── yushu-admin/                 # 主应用模块
 ├── yushu-admin/                 # 主应用模块
 │   └── src/main/java/com/yushu/
 │   └── src/main/java/com/yushu/
 │       ├── YuShuApplication.java      # 启动类
 │       ├── YuShuApplication.java      # 启动类
@@ -118,33 +115,23 @@ CREATE DATABASE yushu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
 
 
 ### 3. 执行SQL脚本
 ### 3. 执行SQL脚本
 
 
-**必须导入**:
+**核心系统(必需)**:
 ```bash
 ```bash
-# 系统核心数据库
-mysql -u root -p yushu < sql/ys_20250522.sql
-
-# 定时任务模块
-mysql -u root -p yushu < sql/quartz.sql
+# 导入核心系统(包含:用户权限+定时任务+文件+消息+待办+错误日志)
+mysql -u root -p yushu < sql/yushu_core.sql
 ```
 ```
 
 
-**可选模块**:
+**扩展模块(可选)**:
 ```bash
 ```bash
-# AI模块 - 集成AI聊天功能
-mysql -u root -p yushu < sql/ai.sql
-
-# 邮箱模块 - 系统邮件发送
-mysql -u root -p yushu < sql/mail.sql
-
-# 文件模块 - 文件管理功能
-mysql -u root -p yushu < sql/file.sql
-
-# 消息模块 - 站内消息功能
-mysql -u root -p yushu < sql/message.sql
+# AI助手模块 - 集成多家AI厂商(智谱、Kimi、OpenAI等)
+mysql -u root -p yushu < sql/yushu_module_ai.sql
 
 
-# 错误日志模块 - 前端错误日志收集
-mysql -u root -p yushu < sql/error-log.sql
+# 邮件系统模块 - 企业邮箱配置、模板管理、收发邮件
+mysql -u root -p yushu < sql/yushu_module_mail.sql
 ```
 ```
 
 
+详细说明请查看:[SQL脚本文档](./sql/README.md)
+
 ### 4. 修改配置
 ### 4. 修改配置
 编辑 `yushu-admin/src/main/resources/application-druid.yml`:
 编辑 `yushu-admin/src/main/resources/application-druid.yml`:
 ```yaml
 ```yaml
@@ -338,17 +325,9 @@ docker run -d -p 8080:8080 --name yushu yushu-backend
 
 
 ---
 ---
 
 
-## License
-
-本项目采用 MIT 许可证。
 
 
 ---
 ---
 
 
-## 联系方式
-
-- 项目主页:https://github.com/your-username/yushu-backend
-- 问题反馈:https://github.com/your-username/yushu-backend/issues
-- 邮箱:your-email@example.com
 
 
 ---
 ---
 
 

+ 338 - 0
yushu-backend/sql/README.md

@@ -0,0 +1,338 @@
+# 数据库脚本说明文档
+
+## 脚本分类
+
+### 核心系统脚本(必需)
+系统运行的基础,必须导入:
+
+| 脚本文件 | 说明 | 包含模块 |
+|---------|------|---------|
+| yushu_core.sql | 核心系统数据库 | 用户、角色、权限、菜单、部门、岗位、字典、配置、日志、定时任务(Quartz)、文件管理、消息中心、待办事项、错误日志 |
+
+### 扩展模块脚本(可选)
+根据业务需求选择性导入:
+
+| 脚本文件 | 功能模块 | 说明 |
+|---------|---------|------|
+| yushu_module_ai.sql | AI助手 | 集成多家AI厂商(智谱、Kimi、OpenAI等),支持流式对话、多轮会话 |
+| yushu_module_mail.sql | 邮件系统 | 企业邮箱配置、邮件模板、发送日志、IMAP收信 |
+
+---
+
+## ID分配规则
+
+为了避免模块间ID冲突,系统采用分段ID管理:
+
+### 核心系统
+- 用户ID: 1-99
+- 角色ID: 1-99
+- 部门ID: 100-199
+- 岗位ID: 1-99
+- 菜单ID: 1-2999
+  - 一级菜单: 1-10
+  - 二级菜单: 100-199
+  - 三级菜单: 500-599
+  - 按钮权限: 1000-1999
+  - 文件管理: 200, 1200-1299
+  - 消息中心: 2100-2299
+  - 待办事项: 2300-2399
+  - 错误日志: 2400-2499
+
+### AI扩展模块
+- 菜单ID: 3000-3999
+  - 一级菜单: 3000
+  - 二级菜单: 3001-3099
+  - 按钮权限: 3100-3399
+- AI服务ID: 10001-19999
+- 会话ID: 自动增长(100001起)
+- 消息ID: 自动增长
+
+### 邮件扩展模块
+- 菜单ID: 4000-4999
+  - 一级菜单: 4000
+  - 二级菜单: 4001-4099
+  - 按钮权限: 4100-4599
+- 邮箱配置ID: 20001-29999
+- 邮件模板ID: 30001-39999
+- 发送日志ID: 自动增长
+- 收件箱ID: 自动增长
+
+---
+
+## 快速导入
+
+### 方式一:命令行导入(推荐)
+
+```bash
+# 1. 创建数据库
+mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS yushu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
+
+# 2. 进入SQL目录
+cd yushu-backend/sql
+
+# 3. 导入核心系统(必需)
+mysql -u root -p yushu < yushu_core.sql
+
+# 4. 根据需要导入扩展模块
+mysql -u root -p yushu < yushu_module_ai.sql
+mysql -u root -p yushu < yushu_module_mail.sql
+```
+
+### 方式二:一键导入所有模块
+
+```bash
+cd yushu-backend/sql
+
+# Windows
+for %f in (yushu_core.sql yushu_module_ai.sql yushu_module_mail.sql) do mysql -u root -p yushu < %f
+
+# Linux/Mac
+for file in yushu_core.sql yushu_module_ai.sql yushu_module_mail.sql; do
+  echo "正在导入 $file ..."
+  mysql -u root -p yushu < $file
+done
+```
+
+### 方式三:使用数据库工具
+使用 Navicat、DBeaver、MySQL Workbench 等工具:
+1. 连接到 MySQL 服务器
+2. 创建数据库 yushu(字符集utf8mb4)
+3. 依次执行 SQL 脚本文件
+
+---
+
+## 模块依赖关系
+
+```
+yushu_core.sql (核心系统 - 必需)
+    |
+    +-- 包含:系统核心 + 定时任务 + 文件 + 消息 + 待办 + 错误日志
+    |
+    v
+[扩展模块 - 可选,无依赖关系]
+    |
+    +-- yushu_module_ai.sql (AI助手)
+    +-- yushu_module_mail.sql (邮件系统)
+```
+
+---
+
+## 脚本详细说明
+
+### 1. yushu_core.sql - 核心系统(必需)
+
+**包含模块:**
+
+**系统核心:**
+- sys_user - 用户信息表
+- sys_role - 角色信息表
+- sys_menu - 菜单权限表
+- sys_dept - 部门表
+- sys_post - 岗位表
+- sys_dict_type / sys_dict_data - 字典表
+- sys_config - 参数配置表
+- sys_notice - 通知公告表
+- sys_oper_log - 操作日志表
+- sys_logininfor - 登录日志表
+- sys_user_role - 用户角色关联表
+- sys_role_menu - 角色菜单关联表
+- sys_role_dept - 角色部门关联表
+- sys_user_post - 用户岗位关联表
+
+**定时任务(Quartz):**
+- QRTZ_JOB_DETAILS - 任务详情
+- QRTZ_TRIGGERS - 触发器
+- QRTZ_CRON_TRIGGERS - Cron触发器
+- QRTZ_SIMPLE_TRIGGERS - 简单触发器
+- QRTZ_SIMPROP_TRIGGERS - 属性触发器
+- QRTZ_BLOB_TRIGGERS - Blob触发器
+- QRTZ_CALENDARS - 日历信息
+- QRTZ_PAUSED_TRIGGER_GRPS - 暂停的触发器组
+- QRTZ_FIRED_TRIGGERS - 已触发的触发器
+- QRTZ_SCHEDULER_STATE - 调度器状态
+- QRTZ_LOCKS - 锁信息
+
+**文件管理:**
+- sys_folder - 文件夹表
+- sys_file - 文件信息表
+- sys_file_share - 文件分享表
+
+**消息中心:**
+- sys_notification - 系统通知表
+- sys_notification_receiver - 通知接收记录表
+
+**待办事项:**
+- sys_todo - 待办事项表
+
+**错误日志:**
+- sys_error_log - 错误日志表
+
+**初始数据:**
+- 管理员账号:admin / admin123
+- 测试账号:ry / admin123
+- 默认角色:超级管理员、普通角色
+- 系统菜单结构(包含文件、消息、待办、错误日志菜单)
+- 基础部门和岗位数据
+- 字典类型和数据
+- 系统参数配置
+
+### 2. yushu_module_ai.sql - AI助手模块(可选)
+
+**包含表:**
+- ai_service - AI服务配置表(厂商、模型、API配置)
+- ai_chat_session - 对话会话表
+- ai_chat_message - 对话消息表
+
+**包含菜单:**
+- AI管理(一级菜单)
+- 服务管理、对话测试、会话记录(二级菜单)
+- 完整的按钮权限
+
+**支持的AI厂商:**
+- OpenAI (GPT-4, GPT-3.5-turbo)
+- 智谱AI (GLM-4, GLM-3-turbo)
+- 阿里云 (Qwen-Max, Qwen-Plus)
+- 百度 (ERNIE-Bot-4, ERNIE-Bot-turbo)
+- Moonshot (Kimi)
+- Ollama (本地部署)
+
+**功能特性:**
+- 多厂商统一接口
+- 流式输出支持
+- 多轮对话上下文管理
+- 模型参数配置
+- 对话历史记录
+
+**初始数据:**
+- 5个预配置的AI服务(需配置API密钥)
+
+### 3. yushu_module_mail.sql - 邮件系统模块(可选)
+
+**包含表:**
+- sys_mail_config - 邮箱配置表
+- sys_mail_template - 邮件模板表
+- sys_mail_log - 邮件发送日志表
+- sys_mail_inbox - 收件箱表
+
+**包含菜单:**
+- 邮件管理(一级菜单)
+- 邮箱配置、邮件模板、发送邮件、发送日志、收件箱(二级菜单)
+- 完整的按钮权限
+
+**支持的邮箱类型:**
+- 阿里云企业邮箱(SMTP/API)
+- 腾讯企业邮箱(SMTP/API)
+- 网易企业邮箱(SMTP)
+- 自定义SMTP服务器
+
+**功能特性:**
+- 多邮箱配置管理
+- 邮件模板管理
+- 变量替换
+- 发送日志记录
+- 支持HTML/纯文本
+- IMAP协议收信
+- 邮件列表管理
+- 附件信息记录
+- 已读/未读状态
+- 星标标记
+
+**初始数据:**
+- 1个阿里云邮箱配置示例
+- 3个邮件模板(用户注册、密码重置、系统通知)
+
+---
+
+## 注意事项
+
+### 导入顺序
+1. 必须先导入 yushu_core.sql(核心系统)
+2. 扩展模块可以任意顺序导入
+3. 扩展模块之间无依赖关系
+
+### 字符集要求
+- 数据库字符集:utf8mb4
+- 排序规则:utf8mb4_general_ci
+- 确保支持中文和emoji表情
+
+### ID冲突避免
+- 各模块使用独立的ID范围
+- 核心系统使用明确的ID(不使用AUTO_INCREMENT)
+- 扩展模块的主要实体使用明确的ID范围
+- 日志类表使用AUTO_INCREMENT
+
+### 重复导入
+- 所有脚本包含 DROP TABLE IF EXISTS
+- 可以安全地重复执行
+- 注意:重复导入会清空现有数据
+
+### 生产环境
+- 导入前务必备份数据库
+- 建议先在测试环境验证
+- 检查MySQL版本兼容性(>= 5.7)
+
+---
+
+## 数据库清理
+
+如需重新初始化数据库:
+
+```sql
+-- 删除数据库
+DROP DATABASE IF EXISTS yushu;
+
+-- 重新创建数据库
+CREATE DATABASE yushu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
+
+-- 使用数据库
+USE yushu;
+```
+
+---
+
+## 常见问题
+
+### Q: 导入时报字符集错误?
+A: 确保数据库使用utf8mb4字符集:
+```sql
+ALTER DATABASE yushu CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
+```
+
+### Q: 导入时报权限错误?
+A: 确保MySQL用户有足够权限:
+```sql
+GRANT ALL PRIVILEGES ON yushu.* TO 'your_user'@'localhost';
+FLUSH PRIVILEGES;
+```
+
+### Q: 如何只导入部分模块?
+A: 只导入需要的SQL文件即可,但必须先导入核心脚本(yushu_core.sql)
+
+### Q: 如何卸载某个扩展模块?
+A: 删除对应的表和菜单:
+```sql
+-- 示例:卸载AI模块
+DROP TABLE IF EXISTS ai_service;
+DROP TABLE IF EXISTS ai_chat_session;
+DROP TABLE IF EXISTS ai_chat_message;
+DELETE FROM sys_menu WHERE menu_id >= 3000 AND menu_id < 4000;
+```
+
+### Q: 旧版本如何升级到新版本?
+A: 
+1. 备份现有数据库
+2. 导出重要业务数据
+3. 删除旧数据库
+4. 导入新版本SQL脚本
+5. 恢复业务数据
+
+---
+
+## 技术支持
+
+如遇到导入问题,请检查:
+1. MySQL版本是否 >= 5.7
+2. 数据库字符集是否为 utf8mb4
+3. 用户权限是否足够
+4. SQL文件编码是否为 UTF-8
+5. 磁盘空间是否充足

+ 0 - 167
yushu-backend/sql/ai.sql

@@ -1,167 +0,0 @@
--- =========================================
--- AI助手模块 (ai.sql)
--- 功能:AI对话、多模型支持
--- 设计:服务注册表模式,新增AI只需插入一行数据
--- =========================================
-
--- ----------------------------
--- 1. AI服务表(合并 厂商+模型+配置)
--- ----------------------------
-DROP TABLE IF EXISTS ai_service;
-CREATE TABLE ai_service (
-  service_id      BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '服务ID',
-  service_name    VARCHAR(100)  NOT NULL                 COMMENT '服务名称(显示用)',
-  service_code    VARCHAR(50)   NOT NULL                 COMMENT '服务代码(唯一标识)',
-  
-  -- 厂商信息(内嵌,无需单独表)
-  provider        VARCHAR(50)   NOT NULL                 COMMENT '厂商标识: openai/zhipu/alibaba/baidu/moonshot/ollama',
-  provider_name   VARCHAR(50)   DEFAULT NULL             COMMENT '厂商名称',
-  
-  -- 模型信息(内嵌,无需单独表)
-  model_code      VARCHAR(100)  NOT NULL                 COMMENT '模型代码: gpt-4/glm-4/qwen-max',
-  
-  -- API配置
-  api_url         VARCHAR(500)  NOT NULL                 COMMENT 'API地址',
-  api_key         VARCHAR(500)  DEFAULT NULL             COMMENT 'API密钥(加密存储)',
-  api_secret      VARCHAR(500)  DEFAULT NULL             COMMENT 'API Secret(部分厂商需要)',
-  
-  -- 模型参数(带默认值)
-  temperature     DECIMAL(3,2)  DEFAULT 0.70             COMMENT '温度参数(0-2)',
-  top_p           DECIMAL(3,2)  DEFAULT 0.95             COMMENT 'Top P参数(0-1)',
-  max_tokens      INT(11)       DEFAULT 4096             COMMENT '最大Token数',
-  system_prompt   TEXT          DEFAULT NULL             COMMENT '系统提示词',
-  
-  -- 高级配置
-  context_window  INT(11)       DEFAULT 8192             COMMENT '上下文窗口大小',
-  supports_stream CHAR(1)       DEFAULT '1'              COMMENT '支持流式: 0=否 1=是',
-  supports_vision   CHAR(1)       DEFAULT '0'              COMMENT '支持视觉: 0=否 1=是',
-  supports_tools    CHAR(1)       DEFAULT '0'              COMMENT '支持工具调用: 0=否 1=是',
-  supports_thinking CHAR(1)       DEFAULT '0'              COMMENT '支持深度思考: 0=否 1=是',
-  supports_search   CHAR(1)       DEFAULT '0'              COMMENT '支持联网搜索: 0=否 1=是',
-  supports_files    CHAR(1)       DEFAULT '0'              COMMENT '支持文件解析: 0=否 1=是',
-  extra_params      JSON          DEFAULT NULL             COMMENT '额外参数(JSON格式)',
-  
-  -- 状态控制
-  enabled         CHAR(1)       DEFAULT '1'              COMMENT '是否启用: 0=否 1=是',
-  is_default      CHAR(1)       DEFAULT '0'              COMMENT '是否默认: 0=否 1=是',
-  sort_order      INT(4)        DEFAULT 0                COMMENT '排序',
-  
-  -- 使用限制
-  rate_limit      INT(11)       DEFAULT 60               COMMENT '速率限制(次/分钟)',
-  daily_limit     INT(11)       DEFAULT 1000             COMMENT '每日限制(次)',
-  
-  -- 基础字段
-  remark          VARCHAR(500)  DEFAULT NULL             COMMENT '备注',
-  create_by       VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
-  create_time     DATETIME      DEFAULT NULL             COMMENT '创建时间',
-  update_by       VARCHAR(64)   DEFAULT ''               COMMENT '更新者',
-  update_time     DATETIME      DEFAULT NULL             COMMENT '更新时间',
-  
-  PRIMARY KEY (service_id),
-  UNIQUE KEY uk_service_code (service_code),
-  KEY idx_provider (provider),
-  KEY idx_enabled (enabled)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI服务表';
-
--- ----------------------------
--- 2. AI对话会话表(简化版)
--- ----------------------------
-DROP TABLE IF EXISTS ai_conversation;
-CREATE TABLE ai_conversation (
-  conversation_id   BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '会话ID',
-  user_id           BIGINT(20)    NOT NULL                 COMMENT '用户ID',
-  service_id        BIGINT(20)    NOT NULL                 COMMENT 'AI服务ID',
-  title             VARCHAR(200)  DEFAULT '新对话'          COMMENT '会话标题',
-  system_prompt     TEXT          DEFAULT NULL             COMMENT '自定义系统提示词',
-  message_count     INT(11)       DEFAULT 0                COMMENT '消息数量',
-  total_tokens      INT(11)       DEFAULT 0                COMMENT '总Token数',
-  last_message_time DATETIME      DEFAULT NULL             COMMENT '最后消息时间',
-  is_pinned         CHAR(1)       DEFAULT '0'              COMMENT '是否置顶',
-  status            CHAR(1)       DEFAULT '0'              COMMENT '状态: 0=正常 1=归档 2=删除',
-  create_time       DATETIME      DEFAULT NULL             COMMENT '创建时间',
-  update_time       DATETIME      DEFAULT NULL             COMMENT '更新时间',
-  
-  PRIMARY KEY (conversation_id),
-  KEY idx_user_id (user_id),
-  KEY idx_service_id (service_id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话会话表';
-
--- ----------------------------
--- 3. AI对话消息表(保持不变)
--- ----------------------------
-DROP TABLE IF EXISTS ai_message;
-CREATE TABLE ai_message (
-  message_id        BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '消息ID',
-  conversation_id   BIGINT(20)    NOT NULL                 COMMENT '会话ID',
-  role              VARCHAR(20)   NOT NULL                 COMMENT '角色: user/assistant/system',
-  content           LONGTEXT      NOT NULL                 COMMENT '消息内容',
-  reasoning         TEXT          DEFAULT NULL             COMMENT '思考过程',
-  tokens            INT(11)       DEFAULT 0                COMMENT 'Token数量',
-  response_time     INT(11)       DEFAULT NULL             COMMENT '响应时间(ms)',
-  is_error          CHAR(1)       DEFAULT '0'              COMMENT '是否错误',
-  create_time       DATETIME      DEFAULT NULL             COMMENT '创建时间',
-  
-  PRIMARY KEY (message_id),
-  KEY idx_conversation_id (conversation_id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话消息表';
-
--- =========================================
--- 预置AI服务数据(开箱即用)
--- 只需填入API Key即可使用
--- =========================================
-INSERT INTO ai_service (service_name, service_code, provider, provider_name, model_code, api_url, temperature, max_tokens, context_window, supports_stream, supports_vision, remark, create_time) VALUES
-
--- OpenAI 系列
-('GPT-4o',        'openai-gpt4o',      'openai',   'OpenAI',    'gpt-4o',           'https://api.openai.com/v1/chat/completions',           0.7, 4096, 128000, '1', '1', 'OpenAI最新多模态模型', NOW()),
-('GPT-4o Mini',   'openai-gpt4o-mini', 'openai',   'OpenAI',    'gpt-4o-mini',      'https://api.openai.com/v1/chat/completions',           0.7, 4096, 128000, '1', '1', 'GPT-4o轻量版', NOW()),
-('GPT-3.5 Turbo', 'openai-gpt35',      'openai',   'OpenAI',    'gpt-3.5-turbo',    'https://api.openai.com/v1/chat/completions',           0.7, 4096, 16385,  '1', '0', '经济实惠的选择', NOW()),
-
--- 智谱AI 系列
-('GLM-4',         'zhipu-glm4',        'zhipu',    '智谱AI',    'glm-4',            'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '0', '智谱AI旗舰模型', NOW()),
-('GLM-4-Flash',   'zhipu-glm4-flash',  'zhipu',    '智谱AI',    'glm-4-flash',      'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '0', '快速响应版本', NOW()),
-('GLM-4V',        'zhipu-glm4v',       'zhipu',    '智谱AI',    'glm-4v',           'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '1', '视觉理解模型', NOW()),
-
--- 阿里云通义千问
-('通义千问-Max',   'alibaba-qwen-max',  'alibaba',  '阿里云',    'qwen-max',         'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 32000, '1', '0', '通义千问旗舰版', NOW()),
-('通义千问-Plus',  'alibaba-qwen-plus', 'alibaba',  '阿里云',    'qwen-plus',        'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 32000, '1', '0', '通义千问增强版', NOW()),
-('通义千问-Turbo', 'alibaba-qwen-turbo','alibaba',  '阿里云',    'qwen-turbo',       'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 8000,  '1', '0', '通义千问快速版', NOW()),
-
--- 月之暗面 Kimi
-('Kimi 128K',     'moonshot-128k',     'moonshot', '月之暗面',   'moonshot-v1-128k', 'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 128000, '1', '0', '超长上下文模型', NOW()),
-('Kimi 32K',      'moonshot-32k',      'moonshot', '月之暗面',   'moonshot-v1-32k',  'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 32000,  '1', '0', '长上下文模型', NOW()),
-('Kimi 8K',       'moonshot-8k',       'moonshot', '月之暗面',   'moonshot-v1-8k',   'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 8000,   '1', '0', '标准模型', NOW()),
-
--- 百度文心一言
-('文心一言 4.0',   'baidu-ernie4',      'baidu',    '百度',      'ernie-4.0-8k',     'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro', 0.7, 4096, 8000, '1', '0', '文心一言旗舰版', NOW()),
-('文心一言 3.5',   'baidu-ernie35',     'baidu',    '百度',      'ernie-3.5-8k',     'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant',       0.7, 4096, 8000, '1', '0', '文心一言标准版', NOW()),
-
--- DeepSeek
-('DeepSeek Chat', 'deepseek-chat',     'deepseek', 'DeepSeek',  'deepseek-chat',    'https://api.deepseek.com/v1/chat/completions',         0.7, 4096, 64000,  '1', '0', 'DeepSeek对话模型', NOW()),
-('DeepSeek Coder','deepseek-coder',    'deepseek', 'DeepSeek',  'deepseek-coder',   'https://api.deepseek.com/v1/chat/completions',         0.7, 4096, 64000,  '1', '0', 'DeepSeek代码模型', NOW()),
-
--- Claude (Anthropic)
-('Claude 3.5 Sonnet', 'claude-sonnet', 'anthropic', 'Anthropic', 'claude-3-5-sonnet-20241022', 'https://api.anthropic.com/v1/messages', 0.7, 4096, 200000, '1', '1', 'Claude最新模型', NOW()),
-
--- 本地部署 Ollama
-('Ollama Llama3', 'ollama-llama3',     'ollama',   '本地部署',   'llama3',           'http://localhost:11434/v1/chat/completions',           0.7, 4096, 8000,   '1', '0', '本地Llama3模型', NOW()),
-('Ollama Qwen',   'ollama-qwen',       'ollama',   '本地部署',   'qwen:7b',          'http://localhost:11434/v1/chat/completions',           0.7, 4096, 8000,   '1', '0', '本地Qwen模型', NOW());
-
--- =========================================
--- 菜单配置(简化版)
--- =========================================
--- 删除旧的AI管理菜单
-DELETE FROM sys_menu WHERE menu_id IN (2010, 2011, 2012, 2013, 2014, 2015, 2016);
-
--- 添加简化版菜单
-INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-(2010, 'AI助手',        0,     10, 'ai',            NULL,                          NULL, NULL, 1, 0, 'M', '0', '0', '',                    'robot',    'admin', NOW(), 'AI功能模块'),
-(2011, 'AI对话',        2010,  1,  'chat',          'system/ai/chat/index',        NULL, NULL, 1, 0, 'C', '0', '0', 'ai:chat:list',        'message',  'admin', NOW(), 'AI对话界面'),
-(2012, '服务配置',      2010,  2,  'service',       'system/ai/service/index',     NULL, NULL, 1, 0, 'C', '0', '0', 'ai:service:list',     'setting',  'admin', NOW(), 'AI服务配置');
-
--- 服务配置权限按钮
-INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-(201201, '服务查询',    2012,  1,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:query',    '',         'admin', NOW(), ''),
-(201202, '服务新增',    2012,  2,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:add',      '',         'admin', NOW(), ''),
-(201203, '服务修改',    2012,  3,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:edit',     '',         'admin', NOW(), ''),
-(201204, '服务删除',    2012,  4,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:remove',   '',         'admin', NOW(), ''),
-(201205, '查看密钥',    2012,  5,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:viewkey',  '',         'admin', NOW(), '查看完整API Key(敏感操作)');

+ 0 - 68
yushu-backend/sql/error-log.sql

@@ -1,68 +0,0 @@
--- =========================================
--- 错误日志模块 (error-log.sql)
--- 用于收集、查看和解决系统错误
--- =========================================
-
--- 错误日志表
-DROP TABLE IF EXISTS sys_error_log;
-CREATE TABLE sys_error_log (
-  error_id        BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '错误ID',
-  error_code      VARCHAR(50)   DEFAULT NULL             COMMENT '错误代码',
-  error_type      VARCHAR(50)   DEFAULT 'SYSTEM'         COMMENT '错误类型: SYSTEM/BUSINESS/API/SQL/AUTH',
-  error_level     VARCHAR(20)   DEFAULT 'ERROR'          COMMENT '错误级别: ERROR/WARN/FATAL',
-  error_message   TEXT          DEFAULT NULL             COMMENT '错误消息',
-  error_detail    TEXT          DEFAULT NULL             COMMENT '错误详情(堆栈信息)',
-  
-  -- 请求信息
-  request_url     VARCHAR(500)  DEFAULT NULL             COMMENT '请求URL',
-  request_method  VARCHAR(20)   DEFAULT NULL             COMMENT '请求方法',
-  request_params  TEXT          DEFAULT NULL             COMMENT '请求参数',
-  request_ip      VARCHAR(50)   DEFAULT NULL             COMMENT '请求IP',
-  user_agent      VARCHAR(500)  DEFAULT NULL             COMMENT '用户代理',
-  
-  -- 用户信息
-  user_id         BIGINT(20)    DEFAULT NULL             COMMENT '用户ID',
-  user_name       VARCHAR(50)   DEFAULT NULL             COMMENT '用户名',
-  
-  -- 来源信息
-  source_class    VARCHAR(200)  DEFAULT NULL             COMMENT '来源类',
-  source_method   VARCHAR(100)  DEFAULT NULL             COMMENT '来源方法',
-  source_line     INT(11)       DEFAULT NULL             COMMENT '来源行号',
-  
-  -- 状态管理
-  status          CHAR(1)       DEFAULT '0'              COMMENT '状态: 0=未处理 1=已处理 2=忽略',
-  resolve_by      VARCHAR(50)   DEFAULT NULL             COMMENT '处理人',
-  resolve_time    DATETIME      DEFAULT NULL             COMMENT '处理时间',
-  resolve_remark  VARCHAR(500)  DEFAULT NULL             COMMENT '处理备注',
-  
-  -- 统计字段
-  occur_count     INT(11)       DEFAULT 1                COMMENT '发生次数',
-  first_time      DATETIME      DEFAULT NULL             COMMENT '首次发生时间',
-  last_time       DATETIME      DEFAULT NULL             COMMENT '最近发生时间',
-  
-  create_time     DATETIME      DEFAULT NULL             COMMENT '创建时间',
-  
-  PRIMARY KEY (error_id),
-  KEY idx_error_type (error_type),
-  KEY idx_error_level (error_level),
-  KEY idx_status (status),
-  KEY idx_create_time (create_time)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='错误日志表';
-
--- =========================================
--- 菜单配置
--- =========================================
--- 在日志管理(108)下添加错误日志菜单
-INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-(503, '错误日志', 108, 3, 'errorLog', 'monitor/errorLog/index', NULL, NULL, 1, 0, 'C', '0', '0', 'monitor:errorLog:list', 'bug', 'admin', NOW(), '错误日志管理');
-
--- 错误日志权限按钮
-INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-(50301, '错误查询', 503, 1, '', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:errorLog:query',   '', 'admin', NOW(), ''),
-(50302, '错误处理', 503, 2, '', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:errorLog:resolve', '', 'admin', NOW(), ''),
-(50303, '错误删除', 503, 3, '', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:errorLog:remove',  '', 'admin', NOW(), ''),
-(50304, '错误清空', 503, 4, '', NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'monitor:errorLog:clean',   '', 'admin', NOW(), '');
-
--- 错误测试页面(开发调试用)
-INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-(504, '错误测试', 108, 4, 'errorTest', 'monitor/errorLog/test', NULL, NULL, 1, 0, 'C', '0', '0', 'monitor:errorLog:query', 'warning', 'admin', NOW(), '错误日志测试页面');

+ 0 - 76
yushu-backend/sql/file.sql

@@ -1,76 +0,0 @@
--- =========================================
--- 文件管理模块 (file.sql)
--- 功能:文件/文件夹管理、分享功能
--- =========================================
-
--- 1. 文件夹表(简化版)
-DROP TABLE IF EXISTS `sys_folder`;
-CREATE TABLE `sys_folder` (
-  `folder_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件夹ID',
-  `parent_id` bigint(20) DEFAULT 0 COMMENT '父文件夹ID(0表示根目录)',
-  `folder_name` varchar(100) NOT NULL COMMENT '文件夹名称',
-  `user_id` bigint(20) NOT NULL COMMENT '创建人ID',
-  `sort_order` int(4) DEFAULT 0 COMMENT '排序',
-  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
-  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
-  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
-  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
-  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (`folder_id`),
-  KEY `idx_parent_id` (`parent_id`),
-  KEY `idx_user_id` (`user_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='文件夹表';
-
--- 2. 文件表(简化版)
-DROP TABLE IF EXISTS `sys_file`;
-CREATE TABLE `sys_file` (
-  `file_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件ID',
-  `folder_id` bigint(20) DEFAULT 0 COMMENT '所属文件夹ID(0表示根目录)',
-  `file_name` varchar(200) NOT NULL COMMENT '文件名称(用户自定义)',
-  `original_name` varchar(200) DEFAULT NULL COMMENT '原始文件名',
-  `file_path` varchar(500) NOT NULL COMMENT '文件存储路径(相对路径)',
-  `file_size` bigint(20) DEFAULT 0 COMMENT '文件大小(字节)',
-  `file_type` varchar(50) DEFAULT NULL COMMENT '文件类型(扩展名)',
-  `mime_type` varchar(100) DEFAULT NULL COMMENT 'MIME类型',
-  `user_id` bigint(20) NOT NULL COMMENT '上传人ID',
-  `user_name` varchar(64) DEFAULT NULL COMMENT '上传人昵称',
-  `download_count` int(11) DEFAULT 0 COMMENT '下载次数',
-  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
-  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
-  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
-  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
-  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (`file_id`),
-  KEY `idx_folder_id` (`folder_id`),
-  KEY `idx_user_id` (`user_id`),
-  KEY `idx_create_time` (`create_time`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='文件表';
-
--- 3. 文件分享表
-DROP TABLE IF EXISTS `sys_file_share`;
-CREATE TABLE `sys_file_share` (
-  `share_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分享ID',
-  `file_id` bigint(20) NULL DEFAULT NULL COMMENT '文件ID',
-  `folder_id` bigint(20) NULL DEFAULT NULL COMMENT '文件夹ID',
-  `share_code` varchar(32) NOT NULL COMMENT '分享码',
-  `share_password` varchar(20) DEFAULT NULL COMMENT '提取码',
-  `share_type` char(1) DEFAULT '0' COMMENT '分享类型(0公开 1需要密码)',
-  `resource_type` char(1) DEFAULT '0' COMMENT '资源类型(0文件 1文件夹)',
-  `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
-  `view_count` int(11) DEFAULT 0 COMMENT '查看次数',
-  `download_count` int(11) DEFAULT 0 COMMENT '下载次数',
-  `max_download` int(11) DEFAULT -1 COMMENT '最大下载次数(-1不限制)',
-  `user_id` bigint(20) NOT NULL COMMENT '分享人ID',
-  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1禁用)',
-  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
-  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
-  PRIMARY KEY (`share_id`),
-  UNIQUE KEY `uk_share_code` (`share_code`),
-  KEY `idx_file_id` (`file_id`),
-  KEY `idx_folder_id` (`folder_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='文件分享表';
-
--- 插入菜单
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-VALUES 
-('文件管理', 0, 6, 'file', 'system/file/index', 1, 0, 'C', '0', '0', 'system:file:list', 'folder', 'admin', sysdate(), '', NULL, '文件管理菜单');

+ 0 - 127
yushu-backend/sql/mail.sql

@@ -1,127 +0,0 @@
--- ----------------------------
--- 企业邮箱配置表
--- ----------------------------
-DROP TABLE IF EXISTS sys_mail_config;
-CREATE TABLE sys_mail_config (
-  config_id          BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '配置ID',
-  config_name        VARCHAR(100)  NOT NULL COMMENT '配置名称',
-  mail_type          VARCHAR(20)   NOT NULL COMMENT '邮箱类型(aliyun/tencent/netease/custom)',
-  host               VARCHAR(100)  DEFAULT NULL COMMENT 'SMTP服务器地址',
-  port               INT           DEFAULT NULL COMMENT '端口号',
-  username           VARCHAR(100)  DEFAULT NULL COMMENT '用户名/发件人邮箱',
-  password           VARCHAR(200)  DEFAULT NULL COMMENT '密码/授权码(加密存储)',
-  api_key            VARCHAR(200)  DEFAULT NULL COMMENT 'API密钥(加密存储)',
-  api_secret         VARCHAR(200)  DEFAULT NULL COMMENT 'API密钥Secret(加密存储)',
-  region_id          VARCHAR(50)   DEFAULT NULL COMMENT '区域ID(阿里云等需要)',
-  sender_name        VARCHAR(100)  DEFAULT NULL COMMENT '发件人名称',
-  sender_email       VARCHAR(100)  NOT NULL COMMENT '发件人邮箱地址',
-  encryption         VARCHAR(20)   DEFAULT 'ssl' COMMENT '加密方式(none/ssl/tls)',
-  use_api            CHAR(1)       DEFAULT '0' COMMENT '使用API发送(0=SMTP 1=API)',
-  is_default         CHAR(1)       DEFAULT '0' COMMENT '是否默认(0否 1是)',
-  status             CHAR(1)       DEFAULT '0' COMMENT '状态(0正常 1停用)',
-  extra_params       TEXT          COMMENT '额外参数(JSON)',
-  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
-  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
-  create_time        DATETIME      COMMENT '创建时间',
-  update_by          VARCHAR(64)   DEFAULT '' COMMENT '更新者',
-  update_time        DATETIME      COMMENT '更新时间',
-  remark             VARCHAR(500)  DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (config_id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='企业邮箱配置表';
-
--- ----------------------------
--- 邮件模板表
--- ----------------------------
-DROP TABLE IF EXISTS sys_mail_template;
-CREATE TABLE sys_mail_template (
-  template_id        BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '模板ID',
-  template_name      VARCHAR(100)  NOT NULL COMMENT '模板名称',
-  template_code      VARCHAR(100)  NOT NULL COMMENT '模板代码(唯一)',
-  subject            VARCHAR(200)  NOT NULL COMMENT '邮件主题',
-  content            TEXT          NOT NULL COMMENT '模板内容',
-  content_type       VARCHAR(20)   DEFAULT 'html' COMMENT '内容类型(html/text)',
-  variables          VARCHAR(500)  DEFAULT NULL COMMENT '变量列表(JSON数组)',
-  status             CHAR(1)       DEFAULT '0' COMMENT '状态(0正常 1停用)',
-  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
-  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
-  create_time        DATETIME      COMMENT '创建时间',
-  update_by          VARCHAR(64)   DEFAULT '' COMMENT '更新者',
-  update_time        DATETIME      COMMENT '更新时间',
-  remark             VARCHAR(500)  DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (template_id),
-  UNIQUE KEY uk_template_code (template_code)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='邮件模板表';
-
--- ----------------------------
--- 邮件发送记录表
--- ----------------------------
-DROP TABLE IF EXISTS sys_mail_log;
-CREATE TABLE sys_mail_log (
-  log_id             BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '日志ID',
-  config_id          BIGINT(20)    DEFAULT NULL COMMENT '配置ID',
-  template_id        BIGINT(20)    DEFAULT NULL COMMENT '模板ID',
-  sender             VARCHAR(100)  NOT NULL COMMENT '发件人邮箱',
-  receiver           VARCHAR(1000) NOT NULL COMMENT '收件人(多个逗号分隔)',
-  cc                 VARCHAR(1000) DEFAULT NULL COMMENT '抄送(多个逗号分隔)',
-  bcc                VARCHAR(1000) DEFAULT NULL COMMENT '密送(多个逗号分隔)',
-  subject            VARCHAR(200)  NOT NULL COMMENT '邮件主题',
-  content            TEXT          COMMENT '邮件内容',
-  content_type       VARCHAR(20)   DEFAULT 'html' COMMENT '内容类型(html/text)',
-  attachments        VARCHAR(1000) DEFAULT NULL COMMENT '附件路径(JSON数组)',
-  status             CHAR(1)       NOT NULL COMMENT '发送状态(0成功 1失败 2发送中)',
-  error_msg          VARCHAR(1000) DEFAULT NULL COMMENT '错误信息',
-  send_time          DATETIME      COMMENT '发送时间',
-  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
-  create_time        DATETIME      COMMENT '创建时间',
-  PRIMARY KEY (log_id),
-  KEY idx_config_id (config_id),
-  KEY idx_send_time (send_time),
-  KEY idx_status (status)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='邮件发送记录表';
-
--- ----------------------------
--- 插入默认邮件模板
--- ----------------------------
-INSERT INTO sys_mail_template (template_name, template_code, subject, content, content_type, variables, status, create_time, remark) VALUES
-('验证码邮件', 'verify_code', '【${siteName}】验证码', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">验证码</h2><p>尊敬的用户:</p><p>您的验证码是:<strong style="font-size: 24px; color: #409EFF;">${code}</strong></p><p>验证码有效期为 ${expireMinutes} 分钟,请勿泄露给他人。</p><p style="color: #999; font-size: 12px;">如非本人操作,请忽略此邮件。</p></div></body></html>', 'html', '["siteName", "code", "expireMinutes"]', '0', NOW(), '验证码发送模板'),
-('欢迎注册', 'welcome', '欢迎注册 ${siteName}', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">欢迎加入 ${siteName}</h2><p>尊敬的 ${username}:</p><p>恭喜您成功注册账号!</p><p>您可以使用此邮箱登录系统。</p><p style="color: #999; font-size: 12px;">此邮件由系统自动发送,请勿回复。</p></div></body></html>', 'html', '["siteName", "username"]', '0', NOW(), '用户注册欢迎邮件'),
-('密码重置', 'reset_password', '【${siteName}】密码重置', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">密码重置</h2><p>尊敬的 ${username}:</p><p>您正在重置密码,点击下方链接完成重置:</p><p><a href="${resetLink}" style="display: inline-block; padding: 10px 20px; background-color: #409EFF; color: white; text-decoration: none; border-radius: 4px;">重置密码</a></p><p>链接有效期为 ${expireMinutes} 分钟。</p><p style="color: #999; font-size: 12px;">如非本人操作,请忽略此邮件。</p></div></body></html>', 'html', '["siteName", "username", "resetLink", "expireMinutes"]', '0', NOW(), '密码重置邮件模板'),
-('系统通知', 'system_notice', '【${siteName}】系统通知', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">${title}</h2><p>尊敬的 ${username}:</p><div>${content}</div><p style="color: #999; font-size: 12px;">此邮件由系统自动发送,请勿回复。</p></div></body></html>', 'html', '["siteName", "title", "username", "content"]', '0', NOW(), '系统通知邮件模板');
-
--- ----------------------------
--- 邮箱配置菜单
--- ----------------------------
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-('邮件管理', 1, 10, 'mail', '', 1, 0, 'M', '0', '0', '', 'email-service', 'admin', NOW(), '邮件管理目录');
-
-SET @parentId = LAST_INSERT_ID();
-
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-('邮箱配置', @parentId, 1, 'config', 'system/mail/config/index', 1, 0, 'C', '0', '0', 'system:mail:config:list', 'smtp-config', 'admin', NOW(), '邮箱配置菜单'),
-('邮件模板', @parentId, 2, 'template', 'system/mail/template/index', 1, 0, 'C', '0', '0', 'system:mail:template:list', 'mail-template', 'admin', NOW(), '邮件模板菜单'),
-('发送记录', @parentId, 3, 'log', 'system/mail/log/index', 1, 0, 'C', '0', '0', 'system:mail:log:list', 'log', 'admin', NOW(), '发送记录菜单');
-
--- 邮箱配置按钮
-SET @configMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '邮箱配置' AND parent_id = @parentId);
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
-('配置查询', @configMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:query', '#', 'admin', NOW()),
-('配置新增', @configMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:add', '#', 'admin', NOW()),
-('配置修改', @configMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:edit', '#', 'admin', NOW()),
-('配置删除', @configMenuId, 4, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:remove', '#', 'admin', NOW()),
-('发送测试', @configMenuId, 5, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:test', '#', 'admin', NOW());
-
--- 邮件模板按钮
-SET @templateMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '邮件模板' AND parent_id = @parentId);
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
-('模板查询', @templateMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:query', '#', 'admin', NOW()),
-('模板新增', @templateMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:add', '#', 'admin', NOW()),
-('模板修改', @templateMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:edit', '#', 'admin', NOW()),
-('模板删除', @templateMenuId, 4, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:remove', '#', 'admin', NOW()),
-('模板预览', @templateMenuId, 5, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:preview', '#', 'admin', NOW());
-
--- 发送记录按钮
-SET @logMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '发送记录' AND parent_id = @parentId);
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
-('记录查询', @logMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:query', '#', 'admin', NOW()),
-('记录删除', @logMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:remove', '#', 'admin', NOW()),
-('重新发送', @logMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:resend', '#', 'admin', NOW());

+ 0 - 61
yushu-backend/sql/mail_update.sql

@@ -1,61 +0,0 @@
--- ----------------------------
--- 邮箱配置表补充IMAP字段
--- ----------------------------
-ALTER TABLE sys_mail_config 
-ADD COLUMN imap_host VARCHAR(100) DEFAULT NULL COMMENT 'IMAP服务器地址' AFTER encryption,
-ADD COLUMN imap_port INT DEFAULT NULL COMMENT 'IMAP端口号' AFTER imap_host,
-ADD COLUMN imap_encryption VARCHAR(20) DEFAULT 'ssl' COMMENT 'IMAP加密方式(none/ssl/tls)' AFTER imap_port,
-ADD COLUMN enable_receive CHAR(1) DEFAULT '0' COMMENT '启用收信(0否 1是)' AFTER imap_encryption;
-
-
--- ----------------------------
--- 收件箱表
--- ----------------------------
-DROP TABLE IF EXISTS sys_mail_inbox;
-CREATE TABLE sys_mail_inbox (
-  inbox_id           BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '收件ID',
-  config_id          BIGINT(20)    NOT NULL COMMENT '配置ID',
-  message_id         VARCHAR(200)  DEFAULT NULL COMMENT '邮件消息ID',
-  from_address       VARCHAR(200)  NOT NULL COMMENT '发件人地址',
-  from_name          VARCHAR(100)  DEFAULT NULL COMMENT '发件人名称',
-  to_address         VARCHAR(1000) NOT NULL COMMENT '收件人地址',
-  cc_address         VARCHAR(1000) DEFAULT NULL COMMENT '抄送地址',
-  subject            VARCHAR(500)  NOT NULL COMMENT '邮件主题',
-  content            LONGTEXT      COMMENT '邮件内容',
-  content_type       VARCHAR(20)   DEFAULT 'html' COMMENT '内容类型(html/text)',
-  attachments        TEXT          COMMENT '附件信息(JSON)',
-  has_attachment     CHAR(1)       DEFAULT '0' COMMENT '是否有附件(0否 1是)',
-  is_read            CHAR(1)       DEFAULT '0' COMMENT '是否已读(0未读 1已读)',
-  is_starred         CHAR(1)       DEFAULT '0' COMMENT '是否星标(0否 1是)',
-  folder             VARCHAR(50)   DEFAULT 'INBOX' COMMENT '文件夹(INBOX/SENT/TRASH等)',
-  receive_time       DATETIME      NOT NULL COMMENT '接收时间',
-  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
-  create_time        DATETIME      COMMENT '创建时间',
-  PRIMARY KEY (inbox_id),
-  KEY idx_config_id (config_id),
-  KEY idx_receive_time (receive_time),
-  KEY idx_is_read (is_read),
-  UNIQUE KEY uk_message_id (config_id, message_id)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='收件箱表';
-
-
--- ----------------------------
--- 添加菜单
--- ----------------------------
--- 获取邮件管理的ID
-SET @mailParentId = (SELECT menu_id FROM sys_menu WHERE menu_name = '邮件管理' AND menu_type = 'M');
-
--- 发送邮件菜单
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-('发送邮件', @mailParentId, 4, 'send', 'system/mail/send/index', 1, 0, 'C', '0', '0', 'system:mail:send', 'email', 'admin', NOW(), '发送邮件菜单');
-
--- 收件箱菜单
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-('收件箱', @mailParentId, 5, 'inbox', 'system/mail/inbox/index', 1, 0, 'C', '0', '0', 'system:mail:inbox:list', 'email-service', 'admin', NOW(), '收件箱菜单');
-
--- 收件箱按钮权限
-SET @inboxMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '收件箱' AND parent_id = @mailParentId);
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
-('收件查询', @inboxMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:inbox:query', '#', 'admin', NOW()),
-('收件删除', @inboxMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:inbox:remove', '#', 'admin', NOW()),
-('同步邮件', @inboxMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:inbox:sync', '#', 'admin', NOW());

+ 0 - 213
yushu-backend/sql/message.sql

@@ -1,213 +0,0 @@
--- =========================================
--- 消息中心模块 (message.sql)
--- 功能:用户私聊、系统通知
--- =========================================
-
--- ========================================
--- 清除旧表
--- ========================================
-DROP TABLE IF EXISTS `sys_chat_message`;
-DROP TABLE IF EXISTS `sys_conversation_member`;
-DROP TABLE IF EXISTS `sys_conversation`;
-DROP TABLE IF EXISTS `sys_notification_receiver`;
-DROP TABLE IF EXISTS `sys_notification`;
-DROP TABLE IF EXISTS `sys_message_receiver`;
-DROP TABLE IF EXISTS `sys_message`;
-DROP TABLE IF EXISTS `sys_message_remark`;
-DROP VIEW IF EXISTS `v_user_conversations`;
-
--- ========================================
--- 1. 系统通知相关表(用于 /system/message 页面)
--- ========================================
-
--- 系统通知表
-DROP TABLE IF EXISTS `sys_notification`;
-CREATE TABLE `sys_notification` (
-  `notification_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '通知ID',
-  `title` varchar(255) NOT NULL COMMENT '通知标题',
-  `content` text NOT NULL COMMENT '通知内容',
-  `notification_type` varchar(50) DEFAULT 'system' COMMENT '通知类型(system系统通知 maintenance维护通知 announcement公告)',
-  `priority` char(1) DEFAULT '0' COMMENT '优先级(0普通 1重要 2紧急)',
-  `sender_id` bigint(20) DEFAULT NULL COMMENT '发送者ID(系统通知为NULL)',
-  `sender_name` varchar(100) DEFAULT '系统' COMMENT '发送者名称',
-  `target_type` char(1) DEFAULT '1' COMMENT '目标类型(1全部用户 2指定用户 3指定角色)',
-  `target_users` text COMMENT '目标用户ID列表(JSON格式)',
-  `target_roles` text COMMENT '目标角色ID列表(JSON格式)',
-  `status` char(1) DEFAULT '1' COMMENT '状态(0草稿 1已发布 2已撤回)',
-  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
-  `expire_time` datetime DEFAULT NULL COMMENT '过期时间',
-  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-  PRIMARY KEY (`notification_id`),
-  KEY `idx_sender_id` (`sender_id`),
-  KEY `idx_status` (`status`),
-  KEY `idx_publish_time` (`publish_time`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统通知表';
-
--- 通知接收记录表
-DROP TABLE IF EXISTS `sys_notification_receiver`;
-CREATE TABLE `sys_notification_receiver` (
-  `receiver_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '接收记录ID',
-  `notification_id` bigint(20) NOT NULL COMMENT '通知ID',
-  `user_id` bigint(20) NOT NULL COMMENT '接收者用户ID',
-  `user_name` varchar(100) DEFAULT NULL COMMENT '接收者用户名',
-  `is_read` char(1) DEFAULT '0' COMMENT '是否已读(0未读 1已读)',
-  `read_time` datetime DEFAULT NULL COMMENT '阅读时间',
-  `is_deleted` char(1) DEFAULT '0' COMMENT '是否删除(0未删除 1已删除)',
-  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
-  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  PRIMARY KEY (`receiver_id`),
-  UNIQUE KEY `uk_notification_user` (`notification_id`, `user_id`),
-  KEY `idx_user_id` (`user_id`),
-  KEY `idx_is_read` (`is_read`),
-  KEY `idx_user_read` (`user_id`, `is_read`, `is_deleted`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知接收记录表';
-
--- ========================================
--- 2. 用户对话相关表(用于 /message 页面)
--- ========================================
-
--- 会话表
-DROP TABLE IF EXISTS `sys_conversation`;
-CREATE TABLE `sys_conversation` (
-  `conversation_id` varchar(100) NOT NULL COMMENT '会话ID',
-  `conversation_type` char(1) DEFAULT '1' COMMENT '会话类型(1私聊 2群聊)',
-  `conversation_name` varchar(255) DEFAULT NULL COMMENT '会话名称(群聊使用)',
-  `creator_id` bigint(20) DEFAULT NULL COMMENT '创建者ID',
-  `creator_name` varchar(100) DEFAULT NULL COMMENT '创建者名称',
-  `last_message_id` bigint(20) DEFAULT NULL COMMENT '最后一条消息ID',
-  `last_message_time` datetime DEFAULT NULL COMMENT '最后消息时间',
-  `status` char(1) DEFAULT '1' COMMENT '状态(0禁用 1正常)',
-  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-  PRIMARY KEY (`conversation_id`),
-  KEY `idx_creator_id` (`creator_id`),
-  KEY `idx_last_message_time` (`last_message_time`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会话表';
-
--- 会话参与者表
-DROP TABLE IF EXISTS `sys_conversation_member`;
-CREATE TABLE `sys_conversation_member` (
-  `member_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '成员ID',
-  `conversation_id` varchar(100) NOT NULL COMMENT '会话ID',
-  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
-  `user_name` varchar(100) DEFAULT NULL COMMENT '用户名',
-  `nick_name` varchar(100) DEFAULT NULL COMMENT '用户昵称',
-  `remark_name` varchar(100) DEFAULT NULL COMMENT '备注名称',
-  `role` char(1) DEFAULT '1' COMMENT '角色(1普通成员 2管理员 3群主)',
-  `join_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
-  `last_read_message_id` bigint(20) DEFAULT NULL COMMENT '最后已读消息ID',
-  `unread_count` int(11) DEFAULT 0 COMMENT '未读消息数',
-  `is_muted` char(1) DEFAULT '0' COMMENT '是否免打扰(0否 1是)',
-  `is_deleted` char(1) DEFAULT '0' COMMENT '是否删除(0否 1是)',
-  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  PRIMARY KEY (`member_id`),
-  UNIQUE KEY `uk_conversation_user` (`conversation_id`, `user_id`),
-  KEY `idx_user_id` (`user_id`),
-  KEY `idx_conversation_id` (`conversation_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='会话参与者表';
-
--- 对话消息表
-DROP TABLE IF EXISTS `sys_chat_message`;
-CREATE TABLE `sys_chat_message` (
-  `message_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息ID',
-  `conversation_id` varchar(100) NOT NULL COMMENT '会话ID',
-  `sender_id` bigint(20) NOT NULL COMMENT '发送者ID',
-  `sender_name` varchar(100) NOT NULL COMMENT '发送者名称',
-  `message_type` varchar(20) DEFAULT 'text' COMMENT '消息类型(text文本 image图片 file文件 voice语音)',
-  `content` text NOT NULL COMMENT '消息内容',
-  `reply_to_message_id` bigint(20) DEFAULT NULL COMMENT '回复的消息ID',
-  `status` char(1) DEFAULT '1' COMMENT '状态(0已删除 1正常 2已撤回)',
-  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-  PRIMARY KEY (`message_id`),
-  KEY `idx_conversation_id` (`conversation_id`),
-  KEY `idx_sender_id` (`sender_id`),
-  KEY `idx_create_time` (`create_time`)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='对话消息表';
-
--- ========================================
--- 3. 插入测试数据
--- ========================================
-
--- 系统通知测试数据
-INSERT INTO `sys_notification` (`notification_id`, `title`, `content`, `notification_type`, `priority`, `status`, `publish_time`) VALUES
-(1, '欢迎使用YuShu管理系统', '欢迎您使用YuShu管理系统!这是一条系统欢迎消息。', 'system', '1', '1', NOW()),
-(2, '系统维护通知', '系统将于今晚22:00-23:00进行维护,请提前保存工作内容。', 'maintenance', '2', '1', NOW());
-
--- 给admin用户发送通知
-INSERT INTO `sys_notification_receiver` (`notification_id`, `user_id`, `user_name`, `is_read`) VALUES
-(1, 1, 'admin', '0'),
-(2, 1, 'admin', '0');
-
--- 会话测试数据(只为实际存在的用户创建)
--- admin(用户ID=1) 和 ry(用户ID=2) 的对话
-INSERT INTO `sys_conversation` (`conversation_id`, `conversation_type`, `creator_id`, `creator_name`, `last_message_time`) VALUES
-('conv_admin_ry', '1', 1, 'admin', NOW());
-
--- 会话参与者(只包含系统已有的两个用户)
-INSERT INTO `sys_conversation_member` (`conversation_id`, `user_id`, `user_name`, `nick_name`, `unread_count`) VALUES
-('conv_admin_ry', 1, 'admin', 'admin', 0),
-('conv_admin_ry', 2, 'ry', 'ry', 0);
-
--- 对话消息测试数据(可选,如果需要初始消息)
--- INSERT INTO `sys_chat_message` (`message_id`, `conversation_id`, `sender_id`, `sender_name`, `content`) VALUES
--- (1, 'conv_admin_ry', 2, 'ry', '你好'),
--- (2, 'conv_admin_ry', 1, 'admin', '你好!');
-
--- 更新会话的最后消息ID(如果有初始消息)
--- UPDATE `sys_conversation` SET `last_message_id` = 2 WHERE `conversation_id` = 'conv_admin_ry';
-
--- ========================================
--- 4. 创建视图简化查询
--- ========================================
-
--- 会话列表视图(用户视角)
-DROP VIEW IF EXISTS `v_user_conversations`;
-CREATE VIEW `v_user_conversations` AS
-SELECT 
-    c.conversation_id,
-    c.conversation_type,
-    c.conversation_name,
-    c.last_message_time,
-    cm.user_id as current_user_id,
-    cm.unread_count,
-    cm.is_muted,
-    cm.remark_name,
-    -- 获取对方用户信息(私聊)
-    (SELECT GROUP_CONCAT(
-        CASE 
-            WHEN cm2.remark_name IS NOT NULL THEN cm2.remark_name
-            WHEN cm2.nick_name IS NOT NULL THEN cm2.nick_name
-            ELSE cm2.user_name
-        END
-        SEPARATOR ', '
-    ) 
-     FROM sys_conversation_member cm2 
-     WHERE cm2.conversation_id = c.conversation_id 
-     AND cm2.user_id != cm.user_id 
-     AND cm2.is_deleted = '0') as other_members,
-    -- 获取最后一条消息
-    (SELECT content FROM sys_chat_message WHERE message_id = c.last_message_id) as last_message
-FROM sys_conversation c
-INNER JOIN sys_conversation_member cm ON c.conversation_id = cm.conversation_id
-WHERE cm.is_deleted = '0' AND c.status = '1';
-
--- 查看测试结果
-SELECT '=== 系统通知 ===' as info;
-SELECT * FROM sys_notification;
-
-SELECT '=== 通知接收记录 ===' as info;
-SELECT * FROM sys_notification_receiver;
-
-SELECT '=== 会话列表 ===' as info;
-SELECT * FROM sys_conversation;
-
-SELECT '=== 会话成员 ===' as info;
-SELECT * FROM sys_conversation_member;
-
-SELECT '=== 对话消息 ===' as info;
-SELECT * FROM sys_chat_message;
-
-SELECT '=== 用户会话视图(admin用户) ===' as info;
-SELECT * FROM v_user_conversations WHERE current_user_id = 1 ORDER BY last_message_time DESC;

+ 0 - 174
yushu-backend/sql/quartz.sql

@@ -1,174 +0,0 @@
-DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
-DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
-DROP TABLE IF EXISTS QRTZ_LOCKS;
-DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_TRIGGERS;
-DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
-DROP TABLE IF EXISTS QRTZ_CALENDARS;
-
--- ----------------------------
--- 1、存储每一个已配置的 jobDetail 的详细信息
--- ----------------------------
-create table QRTZ_JOB_DETAILS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    job_name             varchar(200)    not null            comment '任务名称',
-    job_group            varchar(200)    not null            comment '任务组名',
-    description          varchar(250)    null                comment '相关介绍',
-    job_class_name       varchar(250)    not null            comment '执行任务类名称',
-    is_durable           varchar(1)      not null            comment '是否持久化',
-    is_nonconcurrent     varchar(1)      not null            comment '是否并发',
-    is_update_data       varchar(1)      not null            comment '是否更新数据',
-    requests_recovery    varchar(1)      not null            comment '是否接受恢复执行',
-    job_data             blob            null                comment '存放持久化job对象',
-    primary key (sched_name, job_name, job_group)
-) engine=innodb comment = '任务详细信息表';
-
--- ----------------------------
--- 2、 存储已配置的 Trigger 的信息
--- ----------------------------
-create table QRTZ_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_name         varchar(200)    not null            comment '触发器的名字',
-    trigger_group        varchar(200)    not null            comment '触发器所属组的名字',
-    job_name             varchar(200)    not null            comment 'qrtz_job_details表job_name的外键',
-    job_group            varchar(200)    not null            comment 'qrtz_job_details表job_group的外键',
-    description          varchar(250)    null                comment '相关介绍',
-    next_fire_time       bigint(13)      null                comment '上一次触发时间(毫秒)',
-    prev_fire_time       bigint(13)      null                comment '下一次触发时间(默认为-1表示不触发)',
-    priority             integer         null                comment '优先级',
-    trigger_state        varchar(16)     not null            comment '触发器状态',
-    trigger_type         varchar(8)      not null            comment '触发器的类型',
-    start_time           bigint(13)      not null            comment '开始时间',
-    end_time             bigint(13)      null                comment '结束时间',
-    calendar_name        varchar(200)    null                comment '日程表名称',
-    misfire_instr        smallint(2)     null                comment '补偿执行的策略',
-    job_data             blob            null                comment '存放持久化job对象',
-    primary key (sched_name, trigger_name, trigger_group),
-    foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group)
-) engine=innodb comment = '触发器详细信息表';
-
--- ----------------------------
--- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
--- ----------------------------
-create table QRTZ_SIMPLE_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    repeat_count         bigint(7)       not null            comment '重复的次数统计',
-    repeat_interval      bigint(12)      not null            comment '重复的间隔时间',
-    times_triggered      bigint(10)      not null            comment '已经触发的次数',
-    primary key (sched_name, trigger_name, trigger_group),
-    foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
-) engine=innodb comment = '简单触发器的信息表';
-
--- ----------------------------
--- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
--- ---------------------------- 
-create table QRTZ_CRON_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    cron_expression      varchar(200)    not null            comment 'cron表达式',
-    time_zone_id         varchar(80)                         comment '时区',
-    primary key (sched_name, trigger_name, trigger_group),
-    foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
-) engine=innodb comment = 'Cron类型的触发器表';
-
--- ----------------------------
--- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
--- ---------------------------- 
-create table QRTZ_BLOB_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    blob_data            blob            null                comment '存放持久化Trigger对象',
-    primary key (sched_name, trigger_name, trigger_group),
-    foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
-) engine=innodb comment = 'Blob类型的触发器表';
-
--- ----------------------------
--- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
--- ---------------------------- 
-create table QRTZ_CALENDARS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    calendar_name        varchar(200)    not null            comment '日历名称',
-    calendar             blob            not null            comment '存放持久化calendar对象',
-    primary key (sched_name, calendar_name)
-) engine=innodb comment = '日历信息表';
-
--- ----------------------------
--- 7、 存储已暂停的 Trigger 组的信息
--- ---------------------------- 
-create table QRTZ_PAUSED_TRIGGER_GRPS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    primary key (sched_name, trigger_group)
-) engine=innodb comment = '暂停的触发器表';
-
--- ----------------------------
--- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
--- ---------------------------- 
-create table QRTZ_FIRED_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    entry_id             varchar(95)     not null            comment '调度器实例id',
-    trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    instance_name        varchar(200)    not null            comment '调度器实例名',
-    fired_time           bigint(13)      not null            comment '触发的时间',
-    sched_time           bigint(13)      not null            comment '定时器制定的时间',
-    priority             integer         not null            comment '优先级',
-    state                varchar(16)     not null            comment '状态',
-    job_name             varchar(200)    null                comment '任务名称',
-    job_group            varchar(200)    null                comment '任务组名',
-    is_nonconcurrent     varchar(1)      null                comment '是否并发',
-    requests_recovery    varchar(1)      null                comment '是否接受恢复执行',
-    primary key (sched_name, entry_id)
-) engine=innodb comment = '已触发的触发器表';
-
--- ----------------------------
--- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
--- ---------------------------- 
-create table QRTZ_SCHEDULER_STATE (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    instance_name        varchar(200)    not null            comment '实例名称',
-    last_checkin_time    bigint(13)      not null            comment '上次检查时间',
-    checkin_interval     bigint(13)      not null            comment '检查间隔时间',
-    primary key (sched_name, instance_name)
-) engine=innodb comment = '调度器状态表';
-
--- ----------------------------
--- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
--- ---------------------------- 
-create table QRTZ_LOCKS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    lock_name            varchar(40)     not null            comment '悲观锁名称',
-    primary key (sched_name, lock_name)
-) engine=innodb comment = '存储的悲观锁信息表';
-
--- ----------------------------
--- 11、 Quartz集群实现同步机制的行锁表
--- ---------------------------- 
-create table QRTZ_SIMPROP_TRIGGERS (
-    sched_name           varchar(120)    not null            comment '调度名称',
-    trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
-    trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
-    str_prop_1           varchar(512)    null                comment 'String类型的trigger的第一个参数',
-    str_prop_2           varchar(512)    null                comment 'String类型的trigger的第二个参数',
-    str_prop_3           varchar(512)    null                comment 'String类型的trigger的第三个参数',
-    int_prop_1           int             null                comment 'int类型的trigger的第一个参数',
-    int_prop_2           int             null                comment 'int类型的trigger的第二个参数',
-    long_prop_1          bigint          null                comment 'long类型的trigger的第一个参数',
-    long_prop_2          bigint          null                comment 'long类型的trigger的第二个参数',
-    dec_prop_1           numeric(13,4)   null                comment 'decimal类型的trigger的第一个参数',
-    dec_prop_2           numeric(13,4)   null                comment 'decimal类型的trigger的第二个参数',
-    bool_prop_1          varchar(1)      null                comment 'Boolean类型的trigger的第一个参数',
-    bool_prop_2          varchar(1)      null                comment 'Boolean类型的trigger的第二个参数',
-    primary key (sched_name, trigger_name, trigger_group),
-    foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
-) engine=innodb comment = '同步机制的行锁表';
-
-commit;

+ 0 - 49
yushu-backend/sql/todo.sql

@@ -1,49 +0,0 @@
--- ----------------------------
--- 待办事项表
--- ----------------------------
-DROP TABLE IF EXISTS sys_todo;
-CREATE TABLE sys_todo (
-  todo_id            BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '待办ID',
-  title              VARCHAR(200)  NOT NULL COMMENT '待办标题',
-  content            TEXT          COMMENT '待办内容',
-  priority           CHAR(1)       DEFAULT '1' COMMENT '优先级(0低 1中 2高 3紧急)',
-  status             CHAR(1)       DEFAULT '0' COMMENT '状态(0待处理 1进行中 2已完成 3已取消)',
-  due_date           DATETIME      COMMENT '截止日期',
-  complete_time      DATETIME      COMMENT '完成时间',
-  user_id            BIGINT(20)    NOT NULL COMMENT '所属用户ID',
-  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
-  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
-  create_time        DATETIME      COMMENT '创建时间',
-  update_by          VARCHAR(64)   DEFAULT '' COMMENT '更新者',
-  update_time        DATETIME      COMMENT '更新时间',
-  remark             VARCHAR(500)  DEFAULT NULL COMMENT '备注',
-  PRIMARY KEY (todo_id),
-  KEY idx_user_id (user_id),
-  KEY idx_status (status),
-  KEY idx_due_date (due_date)
-) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='待办事项表';
-
--- ----------------------------
--- 待办菜单
--- ----------------------------
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
-('待办事项', 1, 11, 'todo', 'system/todo/index', 1, 0, 'C', '0', '0', 'system:todo:list', 'checkbox', 'admin', NOW(), '待办事项菜单');
-
-SET @todoMenuId = LAST_INSERT_ID();
-
--- 待办按钮权限
-INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
-('待办查询', @todoMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:todo:query', '#', 'admin', NOW()),
-('待办新增', @todoMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:todo:add', '#', 'admin', NOW()),
-('待办修改', @todoMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:todo:edit', '#', 'admin', NOW()),
-('待办删除', @todoMenuId, 4, '', '', 1, 0, 'F', '0', '0', 'system:todo:remove', '#', 'admin', NOW());
-
--- ----------------------------
--- 插入测试数据
--- ----------------------------
-INSERT INTO sys_todo (title, content, priority, status, due_date, user_id, create_by, create_time, remark) VALUES
-('完成项目文档编写', '编写项目需求文档和技术方案文档', '2', '0', DATE_ADD(NOW(), INTERVAL 3 DAY), 1, 'admin', NOW(), '重要任务'),
-('代码审查', '审查本周提交的代码,确保代码质量', '1', '1', DATE_ADD(NOW(), INTERVAL 1 DAY), 1, 'admin', NOW(), NULL),
-('周报提交', '提交本周工作周报', '1', '0', DATE_ADD(NOW(), INTERVAL 2 DAY), 1, 'admin', NOW(), NULL),
-('系统测试', '完成系统功能测试和性能测试', '3', '0', NOW(), 1, 'admin', NOW(), '紧急任务'),
-('会议准备', '准备下周项目评审会议材料', '0', '2', DATE_SUB(NOW(), INTERVAL 1 DAY), 1, 'admin', DATE_SUB(NOW(), INTERVAL 3 DAY), '已完成');

+ 0 - 724
yushu-backend/sql/ys_20250522.sql

@@ -1,724 +0,0 @@
--- ----------------------------
--- 1、部门表
--- ----------------------------
-drop table if exists sys_dept;
-create table sys_dept (
-  dept_id           bigint(20)      not null auto_increment    comment '部门id',
-  parent_id         bigint(20)      default 0                  comment '父部门id',
-  ancestors         varchar(50)     default ''                 comment '祖级列表',
-  dept_name         varchar(30)     default ''                 comment '部门名称',
-  order_num         int(4)          default 0                  comment '显示顺序',
-  leader            varchar(20)     default null               comment '负责人',
-  phone             varchar(11)     default null               comment '联系电话',
-  email             varchar(50)     default null               comment '邮箱',
-  status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
-  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time 	    datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  primary key (dept_id)
-) engine=innodb auto_increment=200 comment = '部门表';
-
--- ----------------------------
--- 初始化-部门表数据
--- ----------------------------
-insert into sys_dept values(100,  0,   '0',          '予书科技',   0, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(102,  100, '0,100',      '长沙分公司', 2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(103,  101, '0,100,101',  '研发部门',   1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(104,  101, '0,100,101',  '市场部门',   2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(105,  101, '0,100,101',  '测试部门',   3, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(106,  101, '0,100,101',  '财务部门',   4, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(107,  101, '0,100,101',  '运维部门',   5, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(108,  102, '0,100,102',  '市场部门',   1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-insert into sys_dept values(109,  102, '0,100,102',  '财务部门',   2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
-
-
--- ----------------------------
--- 2、用户信息表
--- ----------------------------
-drop table if exists sys_user;
-create table sys_user (
-  user_id           bigint(20)      not null auto_increment    comment '用户ID',
-  dept_id           bigint(20)      default null               comment '部门ID',
-  user_name         varchar(30)     not null                   comment '用户账号',
-  nick_name         varchar(30)     not null                   comment '用户昵称',
-  user_type         varchar(2)      default '00'               comment '用户类型(00系统用户)',
-  email             varchar(50)     default ''                 comment '用户邮箱',
-  phonenumber       varchar(11)     default ''                 comment '手机号码',
-  sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
-  avatar            varchar(100)    default ''                 comment '头像地址',
-  password          varchar(100)    default ''                 comment '密码',
-  status            char(1)         default '0'                comment '账号状态(0正常 1停用)',
-  del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
-  login_ip          varchar(128)    default ''                 comment '最后登录IP',
-  login_date        datetime                                   comment '最后登录时间',
-  pwd_update_date   datetime                                   comment '密码最后更新时间',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time       datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  remark            varchar(500)    default null               comment '备注',
-  primary key (user_id)
-) engine=innodb auto_increment=100 comment = '用户信息表';
-
--- ----------------------------
--- 初始化-用户信息表数据
--- ----------------------------
-insert into sys_user values(1,  103, 'admin', '予书', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', null, '管理员');
-insert into sys_user values(2,  105, 'ry',    '予书', '00', 'ry@qq.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', null, '测试员');
-
-
--- ----------------------------
--- 3、岗位信息表
--- ----------------------------
-drop table if exists sys_post;
-create table sys_post
-(
-  post_id       bigint(20)      not null auto_increment    comment '岗位ID',
-  post_code     varchar(64)     not null                   comment '岗位编码',
-  post_name     varchar(50)     not null                   comment '岗位名称',
-  post_sort     int(4)          not null                   comment '显示顺序',
-  status        char(1)         not null                   comment '状态(0正常 1停用)',
-  create_by     varchar(64)     default ''                 comment '创建者',
-  create_time   datetime                                   comment '创建时间',
-  update_by     varchar(64)     default ''			       comment '更新者',
-  update_time   datetime                                   comment '更新时间',
-  remark        varchar(500)    default null               comment '备注',
-  primary key (post_id)
-) engine=innodb comment = '岗位信息表';
-
--- ----------------------------
--- 初始化-岗位信息表数据
--- ----------------------------
-insert into sys_post values(1, 'ceo',  '董事长',    1, '0', 'admin', sysdate(), '', null, '');
-insert into sys_post values(2, 'se',   '项目经理',  2, '0', 'admin', sysdate(), '', null, '');
-insert into sys_post values(3, 'hr',   '人力资源',  3, '0', 'admin', sysdate(), '', null, '');
-insert into sys_post values(4, 'user', '普通员工',  4, '0', 'admin', sysdate(), '', null, '');
-
-
--- ----------------------------
--- 4、角色信息表
--- ----------------------------
-drop table if exists sys_role;
-create table sys_role (
-  role_id              bigint(20)      not null auto_increment    comment '角色ID',
-  role_name            varchar(30)     not null                   comment '角色名称',
-  role_key             varchar(100)    not null                   comment '角色权限字符串',
-  role_sort            int(4)          not null                   comment '显示顺序',
-  data_scope           char(1)         default '1'                comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
-  menu_check_strictly  tinyint(1)      default 1                  comment '菜单树选择项是否关联显示',
-  dept_check_strictly  tinyint(1)      default 1                  comment '部门树选择项是否关联显示',
-  status               char(1)         not null                   comment '角色状态(0正常 1停用)',
-  del_flag             char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
-  create_by            varchar(64)     default ''                 comment '创建者',
-  create_time          datetime                                   comment '创建时间',
-  update_by            varchar(64)     default ''                 comment '更新者',
-  update_time          datetime                                   comment '更新时间',
-  remark               varchar(500)    default null               comment '备注',
-  primary key (role_id)
-) engine=innodb auto_increment=100 comment = '角色信息表';
-
--- ----------------------------
--- 初始化-角色信息表数据
--- ----------------------------
-insert into sys_role values('1', '超级管理员',  'admin',  1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员');
-insert into sys_role values('2', '普通角色',    'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通角色');
-
-
--- ----------------------------
--- 5、菜单权限表
--- ----------------------------
-drop table if exists sys_menu;
-create table sys_menu (
-  menu_id           bigint(20)      not null auto_increment    comment '菜单ID',
-  menu_name         varchar(50)     not null                   comment '菜单名称',
-  parent_id         bigint(20)      default 0                  comment '父菜单ID',
-  order_num         int(4)          default 0                  comment '显示顺序',
-  path              varchar(200)    default ''                 comment '路由地址',
-  component         varchar(255)    default null               comment '组件路径',
-  query             varchar(255)    default null               comment '路由参数',
-  route_name        varchar(50)     default ''                 comment '路由名称',
-  is_frame          int(1)          default 1                  comment '是否为外链(0是 1否)',
-  is_cache          int(1)          default 0                  comment '是否缓存(0缓存 1不缓存)',
-  menu_type         char(1)         default ''                 comment '菜单类型(M目录 C菜单 F按钮)',
-  visible           char(1)         default 0                  comment '菜单状态(0显示 1隐藏)',
-  status            char(1)         default 0                  comment '菜单状态(0正常 1停用)',
-  perms             varchar(100)    default null               comment '权限标识',
-  icon              varchar(100)    default '#'                comment '菜单图标',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time       datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  remark            varchar(500)    default ''                 comment '备注',
-  primary key (menu_id)
-) engine=innodb auto_increment=2000 comment = '菜单权限表';
-
--- ----------------------------
--- 初始化-菜单信息表数据
--- ----------------------------
--- 一级菜单
-insert into sys_menu values('1', '系统管理', '0', '1', 'system',           null, '', '', 1, 0, 'M', '0', '0', '', 'system',   'admin', sysdate(), '', null, '系统管理目录');
-insert into sys_menu values('2', '系统监控', '0', '2', 'monitor',          null, '', '', 1, 0, 'M', '0', '0', '', 'monitor',  'admin', sysdate(), '', null, '系统监控目录');
-insert into sys_menu values('3', '系统工具', '0', '3', 'tool',             null, '', '', 1, 0, 'M', '0', '0', '', 'tool',     'admin', sysdate(), '', null, '系统工具目录');
--- 二级菜单
-insert into sys_menu values('100',  '用户管理', '1',   '1', 'user',       'system/user/index',        '', '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',          'admin', sysdate(), '', null, '用户管理菜单');
-insert into sys_menu values('101',  '角色管理', '1',   '2', 'role',       'system/role/index',        '', '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',       'admin', sysdate(), '', null, '角色管理菜单');
-insert into sys_menu values('102',  '菜单管理', '1',   '3', 'menu',       'system/menu/index',        '', '', 1, 0, 'C', '0', '0', 'system:menu:list',        'tree-table',    'admin', sysdate(), '', null, '菜单管理菜单');
-insert into sys_menu values('103',  '部门管理', '1',   '4', 'dept',       'system/dept/index',        '', '', 1, 0, 'C', '0', '0', 'system:dept:list',        'tree',          'admin', sysdate(), '', null, '部门管理菜单');
-insert into sys_menu values('104',  '岗位管理', '1',   '5', 'post',       'system/post/index',        '', '', 1, 0, 'C', '0', '0', 'system:post:list',        'post',          'admin', sysdate(), '', null, '岗位管理菜单');
-insert into sys_menu values('105',  '字典管理', '1',   '6', 'dict',       'system/dict/index',        '', '', 1, 0, 'C', '0', '0', 'system:dict:list',        'dict',          'admin', sysdate(), '', null, '字典管理菜单');
-insert into sys_menu values('106',  '参数设置', '1',   '7', 'param',      'system/param/index',      '', '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', sysdate(), '', null, '参数设置菜单');
-insert into sys_menu values('107',  '通知公告', '1',   '8', 'notice',     'system/notice/index',      '', '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', sysdate(), '', null, '通知公告菜单');
-insert into sys_menu values('108',  '日志管理', '1',   '9', 'log',        '',                         '', '', 1, 0, 'M', '0', '0', '',                        'log',           'admin', sysdate(), '', null, '日志管理菜单');
-insert into sys_menu values('109',  '在线用户', '2',   '1', 'online',     'monitor/online/index',     '', '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', sysdate(), '', null, '在线用户菜单');
-insert into sys_menu values('110',  '定时任务', '2',   '2', 'job',        'monitor/job/index',        '', '', 1, 0, 'C', '0', '0', 'monitor:job:list',        'job',           'admin', sysdate(), '', null, '定时任务菜单');
-insert into sys_menu values('111',  '数据监控', '2',   '3', 'druid',      'monitor/druid/index',      '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',         'admin', sysdate(), '', null, '数据监控菜单');
-insert into sys_menu values('112',  '服务监控', '2',   '4', 'server',     'monitor/server/index',     '', '', 1, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', sysdate(), '', null, '服务监控菜单');
-insert into sys_menu values('113',  '缓存监控', '2',   '5', 'cache',      'monitor/cache/index',      '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',         'admin', sysdate(), '', null, '缓存监控菜单');
-insert into sys_menu values('114',  '缓存列表', '2',   '6', 'cacheList',  'monitor/cache/list',       '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis-list',    'admin', sysdate(), '', null, '缓存列表菜单');
-insert into sys_menu values('115',  '表单构建', '3',   '1', 'build',      'tool/build/index',         '', '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
-insert into sys_menu values('116',  '代码生成', '3',   '2', 'gen',        'tool/gen/index',           '', '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
-insert into sys_menu values('117',  '系统接口', '3',   '3', 'swagger',    'tool/swagger/index',       '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
-insert into sys_menu values('118',  '图标管理', '3',   '4', 'icon',       'system/icon/index',        '', '', 1, 0, 'C', '0', '0', 'tool:icon:list',          'icon',          'admin', sysdate(), '', null, '图标管理菜单');
--- 三级菜单
-insert into sys_menu values('500',  '操作日志', '108', '1', 'operlog',    'monitor/operlog/index',    '', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list',    'form',          'admin', sysdate(), '', null, '操作日志菜单');
-insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
--- 用户管理按钮
-insert into sys_menu values('1000', '用户查询', '100', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1001', '用户新增', '100', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1002', '用户修改', '100', '3',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1003', '用户删除', '100', '4',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1004', '用户导出', '100', '5',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1005', '用户导入', '100', '6',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1006', '重置密码', '100', '7',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd',       '#', 'admin', sysdate(), '', null, '');
--- 角色管理按钮
-insert into sys_menu values('1007', '角色查询', '101', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1008', '角色新增', '101', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1009', '角色修改', '101', '3',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1010', '角色删除', '101', '4',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1011', '角色导出', '101', '5',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export',         '#', 'admin', sysdate(), '', null, '');
--- 菜单管理按钮
-insert into sys_menu values('1012', '菜单查询', '102', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1013', '菜单新增', '102', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1014', '菜单修改', '102', '3',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1015', '菜单删除', '102', '4',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove',         '#', 'admin', sysdate(), '', null, '');
--- 部门管理按钮
-insert into sys_menu values('1016', '部门查询', '103', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1017', '部门新增', '103', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1018', '部门修改', '103', '3',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1019', '部门删除', '103', '4',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove',         '#', 'admin', sysdate(), '', null, '');
--- 岗位管理按钮
-insert into sys_menu values('1020', '岗位查询', '104', '1',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1021', '岗位新增', '104', '2',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1022', '岗位修改', '104', '3',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1023', '岗位删除', '104', '4',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1024', '岗位导出', '104', '5',  '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export',         '#', 'admin', sysdate(), '', null, '');
--- 字典管理按钮
-insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export',         '#', 'admin', sysdate(), '', null, '');
--- 参数设置按钮
-insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query',        '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove',       '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export',       '#', 'admin', sysdate(), '', null, '');
--- 通知公告按钮
-insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',        '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove',       '#', 'admin', sysdate(), '', null, '');
--- 操作日志按钮
-insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query',      '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove',     '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1041', '日志导出', '500', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export',     '#', 'admin', sysdate(), '', null, '');
--- 登录日志按钮
-insert into sys_menu values('1042', '登录查询', '501', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query',   '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1043', '登录删除', '501', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove',  '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1044', '日志导出', '501', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export',  '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1045', '账户解锁', '501', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock',  '#', 'admin', sysdate(), '', null, '');
--- 在线用户按钮
-insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, '');
--- 定时任务按钮
-insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query',          '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',         '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus',   '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1054', '任务导出', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export',         '#', 'admin', sysdate(), '', null, '');
--- 代码生成按钮
-insert into sys_menu values('1055', '生成查询', '116', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1056', '生成修改', '116', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1057', '生成删除', '116', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1058', '导入代码', '116', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1059', '预览代码', '116', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1060', '生成代码', '116', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', sysdate(), '', null, '');
--- 图标管理按钮
-insert into sys_menu values('1061', '图标查询', '118', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:query',            '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1062', '图标新增', '118', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:add',              '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('1063', '图标删除', '118', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:remove',           '#', 'admin', sysdate(), '', null, '');
-
--- 站内消息菜单
-insert into sys_menu values('2100', '站内消息', '1', '7', 'message', null, '', '', 1, 0, 'M', '0', '0', '', 'email', 'admin', sysdate(), '', null, '站内消息管理');
-insert into sys_menu values('2101', '消息查询', '2100', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:message:query', '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('2102', '消息发送', '2100', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:message:send', '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('2103', '消息删除', '2100', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:message:remove', '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('2104', '标记已读', '2100', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:message:read', '#', 'admin', sysdate(), '', null, '');
-insert into sys_menu values('2200', '消息中心', '0', '8', 'message', 'message/index', '', '', 1, 0, 'C', '0', '0', 'system:message:list', 'message', 'admin', sysdate(), '', null, '消息中心页面');
-
--- AI管理菜单
-insert into sys_menu values('3000', 'AI管理', '0', '9', 'ai', null, '', '', 1, 0, 'M', '0', '0', '', 'robot', 'admin', sysdate(), '', null, 'AI智能管理');
-insert into sys_menu values('3001', '厂商管理', '3000', '1', 'provider', 'system/ai/provider/index', '', '', 1, 0, 'C', '0', '0', 'ai:provider:list', 'international', 'admin', sysdate(), '', null, 'AI厂商管理');
-insert into sys_menu values('3002', '模型管理', '3000', '2', 'model', 'system/ai/model/index', '', '', 1, 0, 'C', '0', '0', 'ai:model:list', 'component', 'admin', sysdate(), '', null, 'AI模型管理');
-insert into sys_menu values('3003', '配置管理', '3000', '3', 'config', 'system/ai/config/index', '', '', 1, 0, 'C', '0', '0', 'ai:config:list', 'edit', 'admin', sysdate(), '', null, 'AI配置管理');
-insert into sys_menu values('3004', '对话测试', '3000', '4', 'chat', 'system/ai/chat/index', '', '', 1, 0, 'C', '0', '0', 'ai:chat:list', 'message', 'admin', sysdate(), '', null, 'AI对话测试');
-
-
--- ----------------------------
--- 6、用户和角色关联表  用户N-1角色
--- ----------------------------
-drop table if exists sys_user_role;
-create table sys_user_role (
-  user_id   bigint(20) not null comment '用户ID',
-  role_id   bigint(20) not null comment '角色ID',
-  primary key(user_id, role_id)
-) engine=innodb comment = '用户和角色关联表';
-
--- ----------------------------
--- 初始化-用户和角色关联表数据
--- ----------------------------
-insert into sys_user_role values ('1', '1');
-insert into sys_user_role values ('2', '2');
-
-
--- ----------------------------
--- 7、角色和菜单关联表  角色1-N菜单
--- ----------------------------
-drop table if exists sys_role_menu;
-create table sys_role_menu (
-  role_id   bigint(20) not null comment '角色ID',
-  menu_id   bigint(20) not null comment '菜单ID',
-  primary key(role_id, menu_id)
-) engine=innodb comment = '角色和菜单关联表';
-
--- ----------------------------
--- 初始化-角色和菜单关联表数据
--- ----------------------------
-insert into sys_role_menu values ('2', '1');
-insert into sys_role_menu values ('2', '2');
-insert into sys_role_menu values ('2', '3');
-insert into sys_role_menu values ('2', '4');
-insert into sys_role_menu values ('2', '100');
-insert into sys_role_menu values ('2', '101');
-insert into sys_role_menu values ('2', '102');
-insert into sys_role_menu values ('2', '103');
-insert into sys_role_menu values ('2', '104');
-insert into sys_role_menu values ('2', '105');
-insert into sys_role_menu values ('2', '106');
-insert into sys_role_menu values ('2', '107');
-insert into sys_role_menu values ('2', '108');
-insert into sys_role_menu values ('2', '109');
-insert into sys_role_menu values ('2', '110');
-insert into sys_role_menu values ('2', '111');
-insert into sys_role_menu values ('2', '112');
-insert into sys_role_menu values ('2', '113');
-insert into sys_role_menu values ('2', '114');
-insert into sys_role_menu values ('2', '115');
-insert into sys_role_menu values ('2', '116');
-insert into sys_role_menu values ('2', '117');
-insert into sys_role_menu values ('2', '500');
-insert into sys_role_menu values ('2', '501');
-insert into sys_role_menu values ('2', '1000');
-insert into sys_role_menu values ('2', '1001');
-insert into sys_role_menu values ('2', '1002');
-insert into sys_role_menu values ('2', '1003');
-insert into sys_role_menu values ('2', '1004');
-insert into sys_role_menu values ('2', '1005');
-insert into sys_role_menu values ('2', '1006');
-insert into sys_role_menu values ('2', '1007');
-insert into sys_role_menu values ('2', '1008');
-insert into sys_role_menu values ('2', '1009');
-insert into sys_role_menu values ('2', '1010');
-insert into sys_role_menu values ('2', '1011');
-insert into sys_role_menu values ('2', '1012');
-insert into sys_role_menu values ('2', '1013');
-insert into sys_role_menu values ('2', '1014');
-insert into sys_role_menu values ('2', '1015');
-insert into sys_role_menu values ('2', '1016');
-insert into sys_role_menu values ('2', '1017');
-insert into sys_role_menu values ('2', '1018');
-insert into sys_role_menu values ('2', '1019');
-insert into sys_role_menu values ('2', '1020');
-insert into sys_role_menu values ('2', '1021');
-insert into sys_role_menu values ('2', '1022');
-insert into sys_role_menu values ('2', '1023');
-insert into sys_role_menu values ('2', '1024');
-insert into sys_role_menu values ('2', '1025');
-insert into sys_role_menu values ('2', '1026');
-insert into sys_role_menu values ('2', '1027');
-insert into sys_role_menu values ('2', '1028');
-insert into sys_role_menu values ('2', '1029');
-insert into sys_role_menu values ('2', '1030');
-insert into sys_role_menu values ('2', '1031');
-insert into sys_role_menu values ('2', '1032');
-insert into sys_role_menu values ('2', '1033');
-insert into sys_role_menu values ('2', '1034');
-insert into sys_role_menu values ('2', '1035');
-insert into sys_role_menu values ('2', '1036');
-insert into sys_role_menu values ('2', '1037');
-insert into sys_role_menu values ('2', '1038');
-insert into sys_role_menu values ('2', '1039');
-insert into sys_role_menu values ('2', '1040');
-insert into sys_role_menu values ('2', '1041');
-insert into sys_role_menu values ('2', '1042');
-insert into sys_role_menu values ('2', '1043');
-insert into sys_role_menu values ('2', '1044');
-insert into sys_role_menu values ('2', '1045');
-insert into sys_role_menu values ('2', '1046');
-insert into sys_role_menu values ('2', '1047');
-insert into sys_role_menu values ('2', '1048');
-insert into sys_role_menu values ('2', '1049');
-insert into sys_role_menu values ('2', '1050');
-insert into sys_role_menu values ('2', '1051');
-insert into sys_role_menu values ('2', '1052');
-insert into sys_role_menu values ('2', '1053');
-insert into sys_role_menu values ('2', '1054');
-insert into sys_role_menu values ('2', '1055');
-insert into sys_role_menu values ('2', '1056');
-insert into sys_role_menu values ('2', '1057');
-insert into sys_role_menu values ('2', '1058');
-insert into sys_role_menu values ('2', '1059');
-insert into sys_role_menu values ('2', '1060');
-
--- ----------------------------
--- 8、角色和部门关联表  角色1-N部门
--- ----------------------------
-drop table if exists sys_role_dept;
-create table sys_role_dept (
-  role_id   bigint(20) not null comment '角色ID',
-  dept_id   bigint(20) not null comment '部门ID',
-  primary key(role_id, dept_id)
-) engine=innodb comment = '角色和部门关联表';
-
--- ----------------------------
--- 初始化-角色和部门关联表数据
--- ----------------------------
-insert into sys_role_dept values ('2', '100');
-insert into sys_role_dept values ('2', '101');
-insert into sys_role_dept values ('2', '105');
-
-
--- ----------------------------
--- 9、用户与岗位关联表  用户1-N岗位
--- ----------------------------
-drop table if exists sys_user_post;
-create table sys_user_post
-(
-  user_id   bigint(20) not null comment '用户ID',
-  post_id   bigint(20) not null comment '岗位ID',
-  primary key (user_id, post_id)
-) engine=innodb comment = '用户与岗位关联表';
-
--- ----------------------------
--- 初始化-用户与岗位关联表数据
--- ----------------------------
-insert into sys_user_post values ('1', '1');
-insert into sys_user_post values ('2', '2');
-
-
--- ----------------------------
--- 10、操作日志记录
--- ----------------------------
-drop table if exists sys_oper_log;
-create table sys_oper_log (
-  oper_id           bigint(20)      not null auto_increment    comment '日志主键',
-  title             varchar(50)     default ''                 comment '模块标题',
-  business_type     int(2)          default 0                  comment '业务类型(0其它 1新增 2修改 3删除)',
-  method            varchar(200)    default ''                 comment '方法名称',
-  request_method    varchar(10)     default ''                 comment '请求方式',
-  operator_type     int(1)          default 0                  comment '操作类别(0其它 1后台用户 2手机端用户)',
-  oper_name         varchar(50)     default ''                 comment '操作人员',
-  dept_name         varchar(50)     default ''                 comment '部门名称',
-  oper_url          varchar(255)    default ''                 comment '请求URL',
-  oper_ip           varchar(128)    default ''                 comment '主机地址',
-  oper_location     varchar(255)    default ''                 comment '操作地点',
-  oper_param        varchar(2000)   default ''                 comment '请求参数',
-  json_result       varchar(2000)   default ''                 comment '返回参数',
-  status            int(1)          default 0                  comment '操作状态(0正常 1异常)',
-  error_msg         varchar(2000)   default ''                 comment '错误消息',
-  oper_time         datetime                                   comment '操作时间',
-  cost_time         bigint(20)      default 0                  comment '消耗时间',
-  primary key (oper_id),
-  key idx_sys_oper_log_bt (business_type),
-  key idx_sys_oper_log_s  (status),
-  key idx_sys_oper_log_ot (oper_time)
-) engine=innodb auto_increment=100 comment = '操作日志记录';
-
-
--- ----------------------------
--- 11、字典类型表
--- ----------------------------
-drop table if exists sys_dict_type;
-create table sys_dict_type
-(
-  dict_id          bigint(20)      not null auto_increment    comment '字典主键',
-  dict_name        varchar(100)    default ''                 comment '字典名称',
-  dict_type        varchar(100)    default ''                 comment '字典类型',
-  status           char(1)         default '0'                comment '状态(0正常 1停用)',
-  create_by        varchar(64)     default ''                 comment '创建者',
-  create_time      datetime                                   comment '创建时间',
-  update_by        varchar(64)     default ''                 comment '更新者',
-  update_time      datetime                                   comment '更新时间',
-  remark           varchar(500)    default null               comment '备注',
-  primary key (dict_id),
-  unique (dict_type)
-) engine=innodb auto_increment=100 comment = '字典类型表';
-
-insert into sys_dict_type values(1,  '用户性别', 'sys_user_sex',        '0', 'admin', sysdate(), '', null, '用户性别列表');
-insert into sys_dict_type values(2,  '菜单状态', 'sys_show_hide',       '0', 'admin', sysdate(), '', null, '菜单状态列表');
-insert into sys_dict_type values(3,  '系统开关', 'sys_normal_disable',  '0', 'admin', sysdate(), '', null, '系统开关列表');
-insert into sys_dict_type values(4,  '任务状态', 'sys_job_status',      '0', 'admin', sysdate(), '', null, '任务状态列表');
-insert into sys_dict_type values(5,  '任务分组', 'sys_job_group',       '0', 'admin', sysdate(), '', null, '任务分组列表');
-insert into sys_dict_type values(6,  '系统是否', 'sys_yes_no',          '0', 'admin', sysdate(), '', null, '系统是否列表');
-insert into sys_dict_type values(7,  '通知类型', 'sys_notice_type',     '0', 'admin', sysdate(), '', null, '通知类型列表');
-insert into sys_dict_type values(8,  '通知状态', 'sys_notice_status',   '0', 'admin', sysdate(), '', null, '通知状态列表');
-insert into sys_dict_type values(9,  '操作类型', 'sys_oper_type',       '0', 'admin', sysdate(), '', null, '操作类型列表');
-insert into sys_dict_type values(10, '系统状态', 'sys_common_status',   '0', 'admin', sysdate(), '', null, '登录状态列表');
-
-
--- ----------------------------
--- 12、字典数据表
--- ----------------------------
-drop table if exists sys_dict_data;
-create table sys_dict_data
-(
-  dict_code        bigint(20)      not null auto_increment    comment '字典编码',
-  dict_sort        int(4)          default 0                  comment '字典排序',
-  dict_label       varchar(100)    default ''                 comment '字典标签',
-  dict_value       varchar(100)    default ''                 comment '字典键值',
-  dict_type        varchar(100)    default ''                 comment '字典类型',
-  css_class        varchar(100)    default null               comment '样式属性(其他样式扩展)',
-  list_class       varchar(100)    default null               comment '表格回显样式',
-  is_default       char(1)         default 'N'                comment '是否默认(Y是 N否)',
-  status           char(1)         default '0'                comment '状态(0正常 1停用)',
-  create_by        varchar(64)     default ''                 comment '创建者',
-  create_time      datetime                                   comment '创建时间',
-  update_by        varchar(64)     default ''                 comment '更新者',
-  update_time      datetime                                   comment '更新时间',
-  remark           varchar(500)    default null               comment '备注',
-  primary key (dict_code)
-) engine=innodb auto_increment=100 comment = '字典数据表';
-
-insert into sys_dict_data values(1,  1,  '男',       '0',       'sys_user_sex',        '',   '',        'Y', '0', 'admin', sysdate(), '', null, '性别男');
-insert into sys_dict_data values(2,  2,  '女',       '1',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别女');
-insert into sys_dict_data values(3,  3,  '未知',     '2',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别未知');
-insert into sys_dict_data values(4,  1,  '显示',     '0',       'sys_show_hide',       '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单');
-insert into sys_dict_data values(5,  2,  '隐藏',     '1',       'sys_show_hide',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '隐藏菜单');
-insert into sys_dict_data values(6,  1,  '正常',     '0',       'sys_normal_disable',  '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
-insert into sys_dict_data values(7,  2,  '停用',     '1',       'sys_normal_disable',  '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
-insert into sys_dict_data values(8,  1,  '正常',     '0',       'sys_job_status',      '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
-insert into sys_dict_data values(9,  2,  '暂停',     '1',       'sys_job_status',      '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
-insert into sys_dict_data values(10, 1,  '默认',     'DEFAULT', 'sys_job_group',       '',   '',        'Y', '0', 'admin', sysdate(), '', null, '默认分组');
-insert into sys_dict_data values(11, 2,  '系统',     'SYSTEM',  'sys_job_group',       '',   '',        'N', '0', 'admin', sysdate(), '', null, '系统分组');
-insert into sys_dict_data values(12, 1,  '是',       'Y',       'sys_yes_no',          '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是');
-insert into sys_dict_data values(13, 2,  '否',       'N',       'sys_yes_no',          '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '系统默认否');
-insert into sys_dict_data values(14, 1,  '通知',     '1',       'sys_notice_type',     '',   'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知');
-insert into sys_dict_data values(15, 2,  '公告',     '2',       'sys_notice_type',     '',   'success', 'N', '0', 'admin', sysdate(), '', null, '公告');
-insert into sys_dict_data values(16, 1,  '正常',     '0',       'sys_notice_status',   '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
-insert into sys_dict_data values(17, 2,  '关闭',     '1',       'sys_notice_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '关闭状态');
-insert into sys_dict_data values(18, 99, '其他',     '0',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '其他操作');
-insert into sys_dict_data values(19, 1,  '新增',     '1',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '新增操作');
-insert into sys_dict_data values(20, 2,  '修改',     '2',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '修改操作');
-insert into sys_dict_data values(21, 3,  '删除',     '3',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '删除操作');
-insert into sys_dict_data values(22, 4,  '授权',     '4',       'sys_oper_type',       '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作');
-insert into sys_dict_data values(23, 5,  '导出',     '5',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作');
-insert into sys_dict_data values(24, 6,  '导入',     '6',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作');
-insert into sys_dict_data values(25, 7,  '强退',     '7',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '强退操作');
-insert into sys_dict_data values(26, 8,  '生成代码', '8',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作');
-insert into sys_dict_data values(27, 9,  '清空数据', '9',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '清空操作');
-insert into sys_dict_data values(28, 1,  '成功',     '0',       'sys_common_status',   '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态');
-insert into sys_dict_data values(29, 2,  '失败',     '1',       'sys_common_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
-
-
--- ----------------------------
--- 13、参数配置表
--- ----------------------------
-drop table if exists sys_config;
-create table sys_config (
-  config_id         int(5)          not null auto_increment    comment '参数主键',
-  config_name       varchar(100)    default ''                 comment '参数名称',
-  config_key        varchar(100)    default ''                 comment '参数键名',
-  config_value      varchar(500)    default ''                 comment '参数键值',
-  config_type       char(1)         default 'N'                comment '系统内置(Y是 N否)',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time       datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  remark            varchar(500)    default null               comment '备注',
-  primary key (config_id)
-) engine=innodb auto_increment=100 comment = '参数配置表';
-
-insert into sys_config values(1, '主框架页-默认皮肤样式名称',     'sys.index.skinName',               'skin-blue',     'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
-insert into sys_config values(2, '用户管理-账号初始密码',         'sys.user.initPassword',            '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码 123456' );
-insert into sys_config values(3, '主框架页-侧边栏主题',           'sys.index.sideTheme',              'theme-dark',    'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' );
-insert into sys_config values(4, '账号自助-验证码开关',           'sys.account.captchaEnabled',       'true',          'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,false关闭)');
-insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser',         'false',         'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
-insert into sys_config values(6, '用户登录-黑名单列表',           'sys.login.blackIPList',            '',              'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
-insert into sys_config values(7, '用户管理-初始密码修改策略',     'sys.account.initPasswordModify',   '1',             'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
-insert into sys_config values(8, '用户管理-账号密码更新周期',     'sys.account.passwordValidateDays', '0',             'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
-insert into sys_config values(9, '账号自助-邮箱登录开关',         'sys.account.emailLoginEnabled',    'false',         'Y', 'admin', sysdate(), '', null, '是否开启邮箱验证码登录功能(true开启,false关闭)');
-
-
--- ----------------------------
--- 14、系统访问记录
--- ----------------------------
-drop table if exists sys_logininfor;
-create table sys_logininfor (
-  info_id        bigint(20)     not null auto_increment   comment '访问ID',
-  user_name      varchar(50)    default ''                comment '用户账号',
-  ipaddr         varchar(128)   default ''                comment '登录IP地址',
-  login_location varchar(255)   default ''                comment '登录地点',
-  browser        varchar(50)    default ''                comment '浏览器类型',
-  os             varchar(50)    default ''                comment '操作系统',
-  status         char(1)        default '0'               comment '登录状态(0成功 1失败)',
-  msg            varchar(255)   default ''                comment '提示消息',
-  login_time     datetime                                 comment '访问时间',
-  primary key (info_id),
-  key idx_sys_logininfor_s  (status),
-  key idx_sys_logininfor_lt (login_time)
-) engine=innodb auto_increment=100 comment = '系统访问记录';
-
-
--- ----------------------------
--- 15、定时任务调度表
--- ----------------------------
-drop table if exists sys_job;
-create table sys_job (
-  job_id              bigint(20)    not null auto_increment    comment '任务ID',
-  job_name            varchar(64)   default ''                 comment '任务名称',
-  job_group           varchar(64)   default 'DEFAULT'          comment '任务组名',
-  invoke_target       varchar(500)  not null                   comment '调用目标字符串',
-  cron_expression     varchar(255)  default ''                 comment 'cron执行表达式',
-  misfire_policy      varchar(20)   default '3'                comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
-  concurrent          char(1)       default '1'                comment '是否并发执行(0允许 1禁止)',
-  status              char(1)       default '0'                comment '状态(0正常 1暂停)',
-  create_by           varchar(64)   default ''                 comment '创建者',
-  create_time         datetime                                 comment '创建时间',
-  update_by           varchar(64)   default ''                 comment '更新者',
-  update_time         datetime                                 comment '更新时间',
-  remark              varchar(500)  default ''                 comment '备注信息',
-  primary key (job_id, job_name, job_group)
-) engine=innodb auto_increment=100 comment = '定时任务调度表';
-
-insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams',        '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
-insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')',  '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
-insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)',  '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
-
-
--- ----------------------------
--- 16、定时任务调度日志表
--- ----------------------------
-drop table if exists sys_job_log;
-create table sys_job_log (
-  job_log_id          bigint(20)     not null auto_increment    comment '任务日志ID',
-  job_name            varchar(64)    not null                   comment '任务名称',
-  job_group           varchar(64)    not null                   comment '任务组名',
-  invoke_target       varchar(500)   not null                   comment '调用目标字符串',
-  job_message         varchar(500)                              comment '日志信息',
-  status              char(1)        default '0'                comment '执行状态(0正常 1失败)',
-  exception_info      varchar(2000)  default ''                 comment '异常信息',
-  create_time         datetime                                  comment '创建时间',
-  primary key (job_log_id)
-) engine=innodb comment = '定时任务调度日志表';
-
-
--- ----------------------------
--- 17、通知公告表
--- ----------------------------
-drop table if exists sys_notice;
-create table sys_notice (
-  notice_id         int(4)          not null auto_increment    comment '公告ID',
-  notice_title      varchar(50)     not null                   comment '公告标题',
-  notice_type       char(1)         not null                   comment '公告类型(1通知 2公告)',
-  notice_content    longblob        default null               comment '公告内容',
-  status            char(1)         default '0'                comment '公告状态(0正常 1关闭)',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time       datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  remark            varchar(255)    default null               comment '备注',
-  primary key (notice_id)
-) engine=innodb auto_increment=10 comment = '通知公告表';
-
--- ----------------------------
--- 初始化-公告信息表数据
--- ----------------------------
-insert into sys_notice values('1', '温馨提醒:2018-07-01 予书新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员');
-insert into sys_notice values('2', '维护通知:2018-07-01 予书系统凌晨维护', '1', '维护内容',   '0', 'admin', sysdate(), '', null, '管理员');
-
-
--- ----------------------------
--- 18、代码生成业务表
--- ----------------------------
-drop table if exists gen_table;
-create table gen_table (
-  table_id          bigint(20)      not null auto_increment    comment '编号',
-  table_name        varchar(200)    default ''                 comment '表名称',
-  table_comment     varchar(500)    default ''                 comment '表描述',
-  sub_table_name    varchar(64)     default null               comment '关联子表的表名',
-  sub_table_fk_name varchar(64)     default null               comment '子表关联的外键名',
-  class_name        varchar(100)    default ''                 comment '实体类名称',
-  tpl_category      varchar(200)    default 'crud'             comment '使用的模板(crud单表操作 tree树表操作)',
-  tpl_web_type      varchar(30)     default ''                 comment '前端模板类型(element-ui模版 element-plus模版)',
-  package_name      varchar(100)                               comment '生成包路径',
-  module_name       varchar(30)                                comment '生成模块名',
-  business_name     varchar(30)                                comment '生成业务名',
-  function_name     varchar(50)                                comment '生成功能名',
-  function_author   varchar(50)                                comment '生成功能作者',
-  gen_type          char(1)         default '0'                comment '生成代码方式(0zip压缩包 1自定义路径)',
-  gen_path          varchar(200)    default '/'                comment '生成路径(不填默认项目路径)',
-  options           varchar(1000)                              comment '其它生成选项',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time 	    datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  remark            varchar(500)    default null               comment '备注',
-  primary key (table_id)
-) engine=innodb auto_increment=1 comment = '代码生成业务表';
-
-
--- ----------------------------
--- 19、代码生成业务表字段
--- ----------------------------
-drop table if exists gen_table_column;
-create table gen_table_column (
-  column_id         bigint(20)      not null auto_increment    comment '编号',
-  table_id          bigint(20)                                 comment '归属表编号',
-  column_name       varchar(200)                               comment '列名称',
-  column_comment    varchar(500)                               comment '列描述',
-  column_type       varchar(100)                               comment '列类型',
-  java_type         varchar(500)                               comment 'JAVA类型',
-  java_field        varchar(200)                               comment 'JAVA字段名',
-  is_pk             char(1)                                    comment '是否主键(1是)',
-  is_increment      char(1)                                    comment '是否自增(1是)',
-  is_required       char(1)                                    comment '是否必填(1是)',
-  is_insert         char(1)                                    comment '是否为插入字段(1是)',
-  is_edit           char(1)                                    comment '是否编辑字段(1是)',
-  is_list           char(1)                                    comment '是否列表字段(1是)',
-  is_query          char(1)                                    comment '是否查询字段(1是)',
-  query_type        varchar(200)    default 'EQ'               comment '查询方式(等于、不等于、大于、小于、范围)',
-  html_type         varchar(200)                               comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
-  dict_type         varchar(200)    default ''                 comment '字典类型',
-  sort              int                                        comment '排序',
-  create_by         varchar(64)     default ''                 comment '创建者',
-  create_time 	    datetime                                   comment '创建时间',
-  update_by         varchar(64)     default ''                 comment '更新者',
-  update_time       datetime                                   comment '更新时间',
-  primary key (column_id)
-) engine=innodb auto_increment=1 comment = '代码生成业务表字段';

+ 812 - 0
yushu-backend/sql/yushu_core.sql

@@ -0,0 +1,812 @@
+-- =========================================
+-- 予书管理系统 - 核心系统数据库
+-- 版本: 2.0.0
+-- 日期: 2025-01-21
+-- 说明: 包含系统核心+定时任务+文件+消息+错误日志+待办事项
+-- ID范围: 菜单1-2999, 用户1-99, 角色1-99, 部门100-199
+-- =========================================
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- =========================================
+-- 第一部分: 系统核心表
+-- =========================================
+
+-- 1. 部门表
+DROP TABLE IF EXISTS sys_dept;
+CREATE TABLE sys_dept (
+  dept_id           BIGINT(20)      NOT NULL                   COMMENT '部门ID',
+  parent_id         BIGINT(20)      DEFAULT 0                  COMMENT '父部门ID',
+  ancestors         VARCHAR(50)     DEFAULT ''                 COMMENT '祖级列表',
+  dept_name         VARCHAR(30)     DEFAULT ''                 COMMENT '部门名称',
+  order_num         INT(4)          DEFAULT 0                  COMMENT '显示顺序',
+  leader            VARCHAR(20)     DEFAULT NULL               COMMENT '负责人',
+  phone             VARCHAR(11)     DEFAULT NULL               COMMENT '联系电话',
+  email             VARCHAR(50)     DEFAULT NULL               COMMENT '邮箱',
+  status            CHAR(1)         DEFAULT '0'                COMMENT '部门状态(0正常 1停用)',
+  del_flag          CHAR(1)         DEFAULT '0'                COMMENT '删除标志(0存在 2删除)',
+  create_by         VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time       DATETIME                                   COMMENT '创建时间',
+  update_by         VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time       DATETIME                                   COMMENT '更新时间',
+  PRIMARY KEY (dept_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
+
+INSERT INTO sys_dept VALUES(100, 0,   '0',          '予书科技',   0, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(101, 100, '0,100',      '深圳总公司', 1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(102, 100, '0,100',      '长沙分公司', 2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(103, 101, '0,100,101',  '研发部门',   1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(104, 101, '0,100,101',  '市场部门',   2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(105, 101, '0,100,101',  '测试部门',   3, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(106, 101, '0,100,101',  '财务部门',   4, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(107, 101, '0,100,101',  '运维部门',   5, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(108, 102, '0,100,102',  '市场部门',   1, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+INSERT INTO sys_dept VALUES(109, 102, '0,100,102',  '财务部门',   2, '予书', '15888888888', 'ry@qq.com', '0', '0', 'admin', NOW(), '', NULL);
+
+-- 2. 用户信息表
+DROP TABLE IF EXISTS sys_user;
+CREATE TABLE sys_user (
+  user_id           BIGINT(20)      NOT NULL                   COMMENT '用户ID',
+  dept_id           BIGINT(20)      DEFAULT NULL               COMMENT '部门ID',
+  user_name         VARCHAR(30)     NOT NULL                   COMMENT '用户账号',
+  nick_name         VARCHAR(30)     NOT NULL                   COMMENT '用户昵称',
+  user_type         VARCHAR(2)      DEFAULT '00'               COMMENT '用户类型(00系统用户)',
+  email             VARCHAR(50)     DEFAULT ''                 COMMENT '用户邮箱',
+  phonenumber       VARCHAR(11)     DEFAULT ''                 COMMENT '手机号码',
+  sex               CHAR(1)         DEFAULT '0'                COMMENT '用户性别(0男 1女 2未知)',
+  avatar            VARCHAR(100)    DEFAULT ''                 COMMENT '头像地址',
+  password          VARCHAR(100)    DEFAULT ''                 COMMENT '密码',
+  status            CHAR(1)         DEFAULT '0'                COMMENT '账号状态(0正常 1停用)',
+  del_flag          CHAR(1)         DEFAULT '0'                COMMENT '删除标志(0存在 2删除)',
+  login_ip          VARCHAR(128)    DEFAULT ''                 COMMENT '最后登录IP',
+  login_date        DATETIME                                   COMMENT '最后登录时间',
+  pwd_update_date   DATETIME                                   COMMENT '密码最后更新时间',
+  create_by         VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time       DATETIME                                   COMMENT '创建时间',
+  update_by         VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time       DATETIME                                   COMMENT '更新时间',
+  remark            VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (user_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
+
+INSERT INTO sys_user VALUES(1, 103, 'admin', '予书', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', NOW(), NOW(), 'admin', NOW(), '', NULL, '管理员');
+INSERT INTO sys_user VALUES(2, 105, 'ry', '予书', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', NOW(), NOW(), 'admin', NOW(), '', NULL, '测试员');
+
+-- 3. 岗位信息表
+DROP TABLE IF EXISTS sys_post;
+CREATE TABLE sys_post (
+  post_id       BIGINT(20)      NOT NULL                   COMMENT '岗位ID',
+  post_code     VARCHAR(64)     NOT NULL                   COMMENT '岗位编码',
+  post_name     VARCHAR(50)     NOT NULL                   COMMENT '岗位名称',
+  post_sort     INT(4)          NOT NULL                   COMMENT '显示顺序',
+  status        CHAR(1)         NOT NULL                   COMMENT '状态(0正常 1停用)',
+  create_by     VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time   DATETIME                                   COMMENT '创建时间',
+  update_by     VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time   DATETIME                                   COMMENT '更新时间',
+  remark        VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (post_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='岗位信息表';
+
+INSERT INTO sys_post VALUES(1, 'ceo',  '董事长',    1, '0', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_post VALUES(2, 'se',   '项目经理',  2, '0', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_post VALUES(3, 'hr',   '人力资源',  3, '0', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_post VALUES(4, 'user', '普通员工',  4, '0', 'admin', NOW(), '', NULL, '');
+
+-- 4. 角色信息表
+DROP TABLE IF EXISTS sys_role;
+CREATE TABLE sys_role (
+  role_id              BIGINT(20)      NOT NULL                   COMMENT '角色ID',
+  role_name            VARCHAR(30)     NOT NULL                   COMMENT '角色名称',
+  role_key             VARCHAR(100)    NOT NULL                   COMMENT '角色权限字符串',
+  role_sort            INT(4)          NOT NULL                   COMMENT '显示顺序',
+  data_scope           CHAR(1)         DEFAULT '1'                COMMENT '数据范围(1全部 2自定 3本部门 4本部门及以下)',
+  menu_check_strictly  TINYINT(1)      DEFAULT 1                  COMMENT '菜单树选择项是否关联显示',
+  dept_check_strictly  TINYINT(1)      DEFAULT 1                  COMMENT '部门树选择项是否关联显示',
+  status               CHAR(1)         NOT NULL                   COMMENT '角色状态(0正常 1停用)',
+  del_flag             CHAR(1)         DEFAULT '0'                COMMENT '删除标志(0存在 2删除)',
+  create_by            VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time          DATETIME                                   COMMENT '创建时间',
+  update_by            VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time          DATETIME                                   COMMENT '更新时间',
+  remark               VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (role_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='角色信息表';
+
+INSERT INTO sys_role VALUES(1, '超级管理员', 'admin',  1, 1, 1, 1, '0', '0', 'admin', NOW(), '', NULL, '超级管理员');
+INSERT INTO sys_role VALUES(2, '普通角色',   'common', 2, 2, 1, 1, '0', '0', 'admin', NOW(), '', NULL, '普通角色');
+
+-- 5. 菜单权限表 (ID范围: 1-2999)
+DROP TABLE IF EXISTS sys_menu;
+CREATE TABLE sys_menu (
+  menu_id           BIGINT(20)      NOT NULL                   COMMENT '菜单ID',
+  menu_name         VARCHAR(50)     NOT NULL                   COMMENT '菜单名称',
+  parent_id         BIGINT(20)      DEFAULT 0                  COMMENT '父菜单ID',
+  order_num         INT(4)          DEFAULT 0                  COMMENT '显示顺序',
+  path              VARCHAR(200)    DEFAULT ''                 COMMENT '路由地址',
+  component         VARCHAR(255)    DEFAULT NULL               COMMENT '组件路径',
+  query             VARCHAR(255)    DEFAULT NULL               COMMENT '路由参数',
+  route_name        VARCHAR(50)     DEFAULT ''                 COMMENT '路由名称',
+  is_frame          INT(1)          DEFAULT 1                  COMMENT '是否为外链(0是 1否)',
+  is_cache          INT(1)          DEFAULT 0                  COMMENT '是否缓存(0缓存 1不缓存)',
+  menu_type         CHAR(1)         DEFAULT ''                 COMMENT '菜单类型(M目录 C菜单 F按钮)',
+  visible           CHAR(1)         DEFAULT 0                  COMMENT '菜单状态(0显示 1隐藏)',
+  status            CHAR(1)         DEFAULT 0                  COMMENT '菜单状态(0正常 1停用)',
+  perms             VARCHAR(100)    DEFAULT NULL               COMMENT '权限标识',
+  icon              VARCHAR(100)    DEFAULT '#'                COMMENT '菜单图标',
+  create_by         VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time       DATETIME                                   COMMENT '创建时间',
+  update_by         VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time       DATETIME                                   COMMENT '更新时间',
+  remark            VARCHAR(500)    DEFAULT ''                 COMMENT '备注',
+  PRIMARY KEY (menu_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表';
+
+-- 一级菜单 (1-10)
+INSERT INTO sys_menu VALUES(1, '系统管理', 0, 1, 'system',  NULL, '', '', 1, 0, 'M', '0', '0', '', 'system',  'admin', NOW(), '', NULL, '系统管理目录');
+INSERT INTO sys_menu VALUES(2, '系统监控', 0, 2, 'monitor', NULL, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', NOW(), '', NULL, '系统监控目录');
+INSERT INTO sys_menu VALUES(3, '系统工具', 0, 3, 'tool',    NULL, '', '', 1, 0, 'M', '0', '0', '', 'tool',    'admin', NOW(), '', NULL, '系统工具目录');
+
+-- 二级菜单 (100-199)
+INSERT INTO sys_menu VALUES(100, '用户管理', 1, 1, 'user',       'system/user/index',        '', '', 1, 0, 'C', '0', '0', 'system:user:list',        'user',       'admin', NOW(), '', NULL, '用户管理菜单');
+INSERT INTO sys_menu VALUES(101, '角色管理', 1, 2, 'role',       'system/role/index',        '', '', 1, 0, 'C', '0', '0', 'system:role:list',        'peoples',    'admin', NOW(), '', NULL, '角色管理菜单');
+INSERT INTO sys_menu VALUES(102, '菜单管理', 1, 3, 'menu',       'system/menu/index',        '', '', 1, 0, 'C', '0', '0', 'system:menu:list',        'tree-table', 'admin', NOW(), '', NULL, '菜单管理菜单');
+INSERT INTO sys_menu VALUES(103, '部门管理', 1, 4, 'dept',       'system/dept/index',        '', '', 1, 0, 'C', '0', '0', 'system:dept:list',        'tree',       'admin', NOW(), '', NULL, '部门管理菜单');
+INSERT INTO sys_menu VALUES(104, '岗位管理', 1, 5, 'post',       'system/post/index',        '', '', 1, 0, 'C', '0', '0', 'system:post:list',        'post',       'admin', NOW(), '', NULL, '岗位管理菜单');
+INSERT INTO sys_menu VALUES(105, '字典管理', 1, 6, 'dict',       'system/dict/index',        '', '', 1, 0, 'C', '0', '0', 'system:dict:list',        'dict',       'admin', NOW(), '', NULL, '字典管理菜单');
+INSERT INTO sys_menu VALUES(106, '参数设置', 1, 7, 'param',      'system/param/index',       '', '', 1, 0, 'C', '0', '0', 'system:config:list',      'edit',       'admin', NOW(), '', NULL, '参数设置菜单');
+INSERT INTO sys_menu VALUES(107, '通知公告', 1, 8, 'notice',     'system/notice/index',      '', '', 1, 0, 'C', '0', '0', 'system:notice:list',      'message',    'admin', NOW(), '', NULL, '通知公告菜单');
+INSERT INTO sys_menu VALUES(108, '日志管理', 1, 9, 'log',        '',                         '', '', 1, 0, 'M', '0', '0', '',                        'log',        'admin', NOW(), '', NULL, '日志管理菜单');
+INSERT INTO sys_menu VALUES(109, '在线用户', 2, 1, 'online',     'monitor/online/index',     '', '', 1, 0, 'C', '0', '0', 'monitor:online:list',     'online',     'admin', NOW(), '', NULL, '在线用户菜单');
+INSERT INTO sys_menu VALUES(110, '定时任务', 2, 2, 'job',        'monitor/job/index',        '', '', 1, 0, 'C', '0', '0', 'monitor:job:list',        'job',        'admin', NOW(), '', NULL, '定时任务菜单');
+INSERT INTO sys_menu VALUES(111, '数据监控', 2, 3, 'druid',      'monitor/druid/index',      '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',      'admin', NOW(), '', NULL, '数据监控菜单');
+INSERT INTO sys_menu VALUES(112, '服务监控', 2, 4, 'server',     'monitor/server/index',     '', '', 1, 0, 'C', '0', '0', 'monitor:server:list',     'server',     'admin', NOW(), '', NULL, '服务监控菜单');
+INSERT INTO sys_menu VALUES(113, '缓存监控', 2, 5, 'cache',      'monitor/cache/index',      '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',      'admin', NOW(), '', NULL, '缓存监控菜单');
+INSERT INTO sys_menu VALUES(114, '缓存列表', 2, 6, 'cacheList',  'monitor/cache/list',       '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis-list', 'admin', NOW(), '', NULL, '缓存列表菜单');
+INSERT INTO sys_menu VALUES(115, '表单构建', 3, 1, 'build',      'tool/build/index',         '', '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',      'admin', NOW(), '', NULL, '表单构建菜单');
+INSERT INTO sys_menu VALUES(116, '代码生成', 3, 2, 'gen',        'tool/gen/index',           '', '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',       'admin', NOW(), '', NULL, '代码生成菜单');
+INSERT INTO sys_menu VALUES(117, '系统接口', 3, 3, 'swagger',    'tool/swagger/index',       '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',    'admin', NOW(), '', NULL, '系统接口菜单');
+INSERT INTO sys_menu VALUES(118, '图标管理', 3, 4, 'icon',       'system/icon/index',        '', '', 1, 0, 'C', '0', '0', 'tool:icon:list',          'icon',       'admin', NOW(), '', NULL, '图标管理菜单');
+
+-- 三级菜单 (500-599)
+INSERT INTO sys_menu VALUES(500, '操作日志', 108, 1, 'operlog',    'monitor/operlog/index',    '', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list',    'form',       'admin', NOW(), '', NULL, '操作日志菜单');
+INSERT INTO sys_menu VALUES(501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', NOW(), '', NULL, '登录日志菜单');
+
+-- 按钮权限 (1000-1999)
+-- 用户管理按钮
+INSERT INTO sys_menu VALUES(1000, '用户查询', 100, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1001, '用户新增', 100, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add',      '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1002, '用户修改', 100, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit',     '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1003, '用户删除', 100, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1004, '用户导出', 100, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1005, '用户导入', 100, 6, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1006, '重置密码', 100, 7, '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', NOW(), '', NULL, '');
+-- 角色管理按钮
+INSERT INTO sys_menu VALUES(1007, '角色查询', 101, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1008, '角色新增', 101, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1009, '角色修改', 101, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1010, '角色删除', 101, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1011, '角色导出', 101, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', NOW(), '', NULL, '');
+-- 菜单管理按钮
+INSERT INTO sys_menu VALUES(1012, '菜单查询', 102, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1013, '菜单新增', 102, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1014, '菜单修改', 102, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1015, '菜单删除', 102, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', NOW(), '', NULL, '');
+-- 部门管理按钮
+INSERT INTO sys_menu VALUES(1016, '部门查询', 103, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1017, '部门新增', 103, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1018, '部门修改', 103, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1019, '部门删除', 103, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', NOW(), '', NULL, '');
+-- 岗位管理按钮
+INSERT INTO sys_menu VALUES(1020, '岗位查询', 104, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1021, '岗位新增', 104, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1022, '岗位修改', 104, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1023, '岗位删除', 104, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1024, '岗位导出', 104, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', NOW(), '', NULL, '');
+-- 字典管理按钮
+INSERT INTO sys_menu VALUES(1025, '字典查询', 105, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1026, '字典新增', 105, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1027, '字典修改', 105, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1028, '字典删除', 105, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1029, '字典导出', 105, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', NOW(), '', NULL, '');
+-- 参数设置按钮
+INSERT INTO sys_menu VALUES(1030, '参数查询', 106, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1031, '参数新增', 106, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1032, '参数修改', 106, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1033, '参数删除', 106, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1034, '参数导出', 106, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', NOW(), '', NULL, '');
+-- 通知公告按钮
+INSERT INTO sys_menu VALUES(1035, '公告查询', 107, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1036, '公告新增', 107, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1037, '公告修改', 107, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1038, '公告删除', 107, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', NOW(), '', NULL, '');
+-- 操作日志按钮
+INSERT INTO sys_menu VALUES(1039, '操作查询', 500, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1040, '操作删除', 500, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1041, '日志导出', 500, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', NOW(), '', NULL, '');
+-- 登录日志按钮
+INSERT INTO sys_menu VALUES(1042, '登录查询', 501, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1043, '登录删除', 501, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1044, '日志导出', 501, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1045, '账户解锁', 501, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', NOW(), '', NULL, '');
+-- 在线用户按钮
+INSERT INTO sys_menu VALUES(1046, '在线查询', 109, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1047, '批量强退', 109, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1048, '单条强退', 109, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', NOW(), '', NULL, '');
+-- 定时任务按钮
+INSERT INTO sys_menu VALUES(1049, '任务查询', 110, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query',        '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1050, '任务新增', 110, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add',          '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1051, '任务修改', 110, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',         '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1052, '任务删除', 110, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',       '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1053, '状态修改', 110, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1054, '任务导出', 110, 6, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export',       '#', 'admin', NOW(), '', NULL, '');
+-- 代码生成按钮
+INSERT INTO sys_menu VALUES(1055, '生成查询', 116, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1056, '生成修改', 116, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1057, '生成删除', 116, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1058, '导入代码', 116, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1059, '预览代码', 116, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1060, '生成代码', 116, 6, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code',    '#', 'admin', NOW(), '', NULL, '');
+-- 图标管理按钮
+INSERT INTO sys_menu VALUES(1061, '图标查询', 118, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1062, '图标新增', 118, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1063, '图标删除', 118, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'tool:icon:remove', '#', 'admin', NOW(), '', NULL, '');
+
+-- 文件管理菜单 (ID: 200-299)
+INSERT INTO sys_menu VALUES(200, '文件管理', 1, 10, 'file', 'system/file/index', '', '', 1, 0, 'C', '0', '0', 'system:file:list', 'upload', 'admin', NOW(), '', NULL, '文件管理菜单');
+INSERT INTO sys_menu VALUES(1200, '文件查询', 200, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:file:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1201, '文件上传', 200, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:file:upload', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1202, '文件删除', 200, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:file:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1203, '文件下载', 200, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:file:download', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(1204, '文件分享', 200, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'system:file:share', '#', 'admin', NOW(), '', NULL, '');
+
+-- 消息中心菜单 (ID: 2100-2299)
+INSERT INTO sys_menu VALUES(2100, '消息中心', 0, 4, 'message', 'message/index', '', '', 1, 0, 'C', '0', '0', 'system:message:list', 'message', 'admin', NOW(), '', NULL, '消息中心');
+INSERT INTO sys_menu VALUES(2101, '消息查询', 2100, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:message:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2102, '消息发送', 2100, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:message:send',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2103, '消息删除', 2100, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:message:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2104, '标记已读', 2100, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:message:read',   '#', 'admin', NOW(), '', NULL, '');
+
+-- 待办事项菜单 (ID: 2300-2399)
+INSERT INTO sys_menu VALUES(2300, '待办事项', 1, 11, 'todo', 'system/todo/index', '', '', 1, 0, 'C', '0', '0', 'system:todo:list', 'checkbox', 'admin', NOW(), '', NULL, '待办事项菜单');
+INSERT INTO sys_menu VALUES(2301, '待办查询', 2300, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'system:todo:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2302, '待办新增', 2300, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'system:todo:add',    '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2303, '待办修改', 2300, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'system:todo:edit',   '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2304, '待办删除', 2300, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'system:todo:remove', '#', 'admin', NOW(), '', NULL, '');
+
+-- 错误日志菜单 (ID: 2400-2499)
+INSERT INTO sys_menu VALUES(2400, '错误日志', 2, 7, 'errorLog', 'monitor/errorLog/index', '', '', 1, 0, 'C', '0', '0', 'monitor:errorLog:list', 'bug', 'admin', NOW(), '', NULL, '错误日志菜单');
+INSERT INTO sys_menu VALUES(2401, '错误查询', 2400, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:errorLog:query',  '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2402, '错误删除', 2400, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:errorLog:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(2403, '错误处理', 2400, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'monitor:errorLog:resolve', '#', 'admin', NOW(), '', NULL, '');
+
+-- 6. 用户和角色关联表
+DROP TABLE IF EXISTS sys_user_role;
+CREATE TABLE sys_user_role (
+  user_id   BIGINT(20) NOT NULL COMMENT '用户ID',
+  role_id   BIGINT(20) NOT NULL COMMENT '角色ID',
+  PRIMARY KEY(user_id, role_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户和角色关联表';
+
+INSERT INTO sys_user_role VALUES(1, 1);
+INSERT INTO sys_user_role VALUES(2, 2);
+
+-- 7. 角色和菜单关联表
+DROP TABLE IF EXISTS sys_role_menu;
+CREATE TABLE sys_role_menu (
+  role_id   BIGINT(20) NOT NULL COMMENT '角色ID',
+  menu_id   BIGINT(20) NOT NULL COMMENT '菜单ID',
+  PRIMARY KEY(role_id, menu_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='角色和菜单关联表';
+
+INSERT INTO sys_role_menu VALUES(2, 1);
+INSERT INTO sys_role_menu VALUES(2, 2);
+INSERT INTO sys_role_menu VALUES(2, 3);
+INSERT INTO sys_role_menu VALUES(2, 100);
+INSERT INTO sys_role_menu VALUES(2, 101);
+INSERT INTO sys_role_menu VALUES(2, 102);
+INSERT INTO sys_role_menu VALUES(2, 103);
+INSERT INTO sys_role_menu VALUES(2, 104);
+INSERT INTO sys_role_menu VALUES(2, 105);
+INSERT INTO sys_role_menu VALUES(2, 106);
+INSERT INTO sys_role_menu VALUES(2, 107);
+INSERT INTO sys_role_menu VALUES(2, 108);
+INSERT INTO sys_role_menu VALUES(2, 109);
+INSERT INTO sys_role_menu VALUES(2, 110);
+INSERT INTO sys_role_menu VALUES(2, 111);
+INSERT INTO sys_role_menu VALUES(2, 112);
+INSERT INTO sys_role_menu VALUES(2, 113);
+INSERT INTO sys_role_menu VALUES(2, 114);
+INSERT INTO sys_role_menu VALUES(2, 115);
+INSERT INTO sys_role_menu VALUES(2, 116);
+INSERT INTO sys_role_menu VALUES(2, 117);
+INSERT INTO sys_role_menu VALUES(2, 118);
+INSERT INTO sys_role_menu VALUES(2, 500);
+INSERT INTO sys_role_menu VALUES(2, 501);
+
+-- 8. 角色和部门关联表
+DROP TABLE IF EXISTS sys_role_dept;
+CREATE TABLE sys_role_dept (
+  role_id   BIGINT(20) NOT NULL COMMENT '角色ID',
+  dept_id   BIGINT(20) NOT NULL COMMENT '部门ID',
+  PRIMARY KEY(role_id, dept_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='角色和部门关联表';
+
+-- 9. 用户与岗位关联表
+DROP TABLE IF EXISTS sys_user_post;
+CREATE TABLE sys_user_post (
+  user_id   BIGINT(20) NOT NULL COMMENT '用户ID',
+  post_id   BIGINT(20) NOT NULL COMMENT '岗位ID',
+  PRIMARY KEY(user_id, post_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户与岗位关联表';
+
+INSERT INTO sys_user_post VALUES(1, 1);
+INSERT INTO sys_user_post VALUES(2, 2);
+
+-- 10. 字典类型表
+DROP TABLE IF EXISTS sys_dict_type;
+CREATE TABLE sys_dict_type (
+  dict_id       BIGINT(20)      NOT NULL                   COMMENT '字典主键',
+  dict_name     VARCHAR(100)    DEFAULT ''                 COMMENT '字典名称',
+  dict_type     VARCHAR(100)    DEFAULT ''                 COMMENT '字典类型',
+  status        CHAR(1)         DEFAULT '0'                COMMENT '状态(0正常 1停用)',
+  create_by     VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time   DATETIME                                   COMMENT '创建时间',
+  update_by     VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time   DATETIME                                   COMMENT '更新时间',
+  remark        VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (dict_id),
+  UNIQUE (dict_type)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
+
+INSERT INTO sys_dict_type VALUES(1,  '用户性别', 'sys_user_sex',        '0', 'admin', NOW(), '', NULL, '用户性别列表');
+INSERT INTO sys_dict_type VALUES(2,  '菜单状态', 'sys_show_hide',       '0', 'admin', NOW(), '', NULL, '菜单状态列表');
+INSERT INTO sys_dict_type VALUES(3,  '系统开关', 'sys_normal_disable',  '0', 'admin', NOW(), '', NULL, '系统开关列表');
+INSERT INTO sys_dict_type VALUES(4,  '任务状态', 'sys_job_status',      '0', 'admin', NOW(), '', NULL, '任务状态列表');
+INSERT INTO sys_dict_type VALUES(5,  '任务分组', 'sys_job_group',       '0', 'admin', NOW(), '', NULL, '任务分组列表');
+INSERT INTO sys_dict_type VALUES(6,  '系统是否', 'sys_yes_no',          '0', 'admin', NOW(), '', NULL, '系统是否列表');
+INSERT INTO sys_dict_type VALUES(7,  '通知类型', 'sys_notice_type',     '0', 'admin', NOW(), '', NULL, '通知类型列表');
+INSERT INTO sys_dict_type VALUES(8,  '通知状态', 'sys_notice_status',   '0', 'admin', NOW(), '', NULL, '通知状态列表');
+INSERT INTO sys_dict_type VALUES(9,  '操作类型', 'sys_oper_type',       '0', 'admin', NOW(), '', NULL, '操作类型列表');
+INSERT INTO sys_dict_type VALUES(10, '系统状态', 'sys_common_status',   '0', 'admin', NOW(), '', NULL, '登录状态列表');
+
+-- 11. 字典数据表
+DROP TABLE IF EXISTS sys_dict_data;
+CREATE TABLE sys_dict_data (
+  dict_code     BIGINT(20)      NOT NULL                   COMMENT '字典编码',
+  dict_sort     INT(4)          DEFAULT 0                  COMMENT '字典排序',
+  dict_label    VARCHAR(100)    DEFAULT ''                 COMMENT '字典标签',
+  dict_value    VARCHAR(100)    DEFAULT ''                 COMMENT '字典键值',
+  dict_type     VARCHAR(100)    DEFAULT ''                 COMMENT '字典类型',
+  css_class     VARCHAR(100)    DEFAULT NULL               COMMENT '样式属性',
+  list_class    VARCHAR(100)    DEFAULT NULL               COMMENT '表格回显样式',
+  is_default    CHAR(1)         DEFAULT 'N'                COMMENT '是否默认(Y是 N否)',
+  status        CHAR(1)         DEFAULT '0'                COMMENT '状态(0正常 1停用)',
+  create_by     VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time   DATETIME                                   COMMENT '创建时间',
+  update_by     VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time   DATETIME                                   COMMENT '更新时间',
+  remark        VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (dict_code)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表';
+
+INSERT INTO sys_dict_data VALUES(1,  1, '男',   '0', 'sys_user_sex',        '', '', 'Y', '0', 'admin', NOW(), '', NULL, '性别男');
+INSERT INTO sys_dict_data VALUES(2,  2, '女',   '1', 'sys_user_sex',        '', '', 'N', '0', 'admin', NOW(), '', NULL, '性别女');
+INSERT INTO sys_dict_data VALUES(3,  3, '未知', '2', 'sys_user_sex',        '', '', 'N', '0', 'admin', NOW(), '', NULL, '性别未知');
+INSERT INTO sys_dict_data VALUES(4,  1, '显示', '0', 'sys_show_hide',       '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '显示菜单');
+INSERT INTO sys_dict_data VALUES(5,  2, '隐藏', '1', 'sys_show_hide',       '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '隐藏菜单');
+INSERT INTO sys_dict_data VALUES(6,  1, '正常', '0', 'sys_normal_disable',  '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '正常状态');
+INSERT INTO sys_dict_data VALUES(7,  2, '停用', '1', 'sys_normal_disable',  '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '停用状态');
+INSERT INTO sys_dict_data VALUES(8,  1, '正常', '0', 'sys_job_status',      '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '正常状态');
+INSERT INTO sys_dict_data VALUES(9,  2, '暂停', '1', 'sys_job_status',      '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '停用状态');
+INSERT INTO sys_dict_data VALUES(10, 1, '是',   'Y', 'sys_yes_no',          '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '系统默认是');
+INSERT INTO sys_dict_data VALUES(11, 2, '否',   'N', 'sys_yes_no',          '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '系统默认否');
+
+-- 12. 参数配置表
+DROP TABLE IF EXISTS sys_config;
+CREATE TABLE sys_config (
+  config_id     BIGINT(20)      NOT NULL                   COMMENT '参数主键',
+  config_name   VARCHAR(100)    DEFAULT ''                 COMMENT '参数名称',
+  config_key    VARCHAR(100)    DEFAULT ''                 COMMENT '参数键名',
+  config_value  VARCHAR(500)    DEFAULT ''                 COMMENT '参数键值',
+  config_type   CHAR(1)         DEFAULT 'N'                COMMENT '系统内置(Y是 N否)',
+  create_by     VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time   DATETIME                                   COMMENT '创建时间',
+  update_by     VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time   DATETIME                                   COMMENT '更新时间',
+  remark        VARCHAR(500)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (config_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='参数配置表';
+
+INSERT INTO sys_config VALUES(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName',     'skin-blue',     'Y', 'admin', NOW(), '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
+INSERT INTO sys_config VALUES(2, '用户管理-账号初始密码',     'sys.user.initPassword',  '123456',        'Y', 'admin', NOW(), '', NULL, '初始化密码 123456');
+INSERT INTO sys_config VALUES(3, '主框架页-侧边栏主题',       'sys.index.sideTheme',    'theme-dark',    'Y', 'admin', NOW(), '', NULL, '深色主题theme-dark,浅色主题theme-light');
+INSERT INTO sys_config VALUES(4, '账号自助-验证码开关',       'sys.account.captchaEnabled', 'true',     'Y', 'admin', NOW(), '', NULL, '是否开启验证码功能(true开启,false关闭)');
+INSERT INTO sys_config VALUES(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false',  'Y', 'admin', NOW(), '', NULL, '是否开启注册用户功能(true开启,false关闭)');
+INSERT INTO sys_config VALUES(6, '用户登录-黑名单列表',       'sys.login.blackIPList',  '',              'Y', 'admin', NOW(), '', NULL, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
+
+-- 13. 系统访问记录
+DROP TABLE IF EXISTS sys_logininfor;
+CREATE TABLE sys_logininfor (
+  info_id        BIGINT(20)      NOT NULL                   COMMENT '访问ID',
+  user_name      VARCHAR(50)     DEFAULT ''                 COMMENT '用户账号',
+  ipaddr         VARCHAR(128)    DEFAULT ''                 COMMENT '登录IP地址',
+  login_location VARCHAR(255)    DEFAULT ''                 COMMENT '登录地点',
+  browser        VARCHAR(50)     DEFAULT ''                 COMMENT '浏览器类型',
+  os             VARCHAR(50)     DEFAULT ''                 COMMENT '操作系统',
+  status         CHAR(1)         DEFAULT '0'                COMMENT '登录状态(0成功 1失败)',
+  msg            VARCHAR(255)    DEFAULT ''                 COMMENT '提示消息',
+  login_time     DATETIME                                   COMMENT '访问时间',
+  PRIMARY KEY (info_id),
+  KEY idx_sys_logininfor_s  (status),
+  KEY idx_sys_logininfor_lt (login_time)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录';
+
+-- 14. 操作日志记录
+DROP TABLE IF EXISTS sys_oper_log;
+CREATE TABLE sys_oper_log (
+  oper_id        BIGINT(20)      NOT NULL                   COMMENT '日志主键',
+  title          VARCHAR(50)     DEFAULT ''                 COMMENT '模块标题',
+  business_type  INT(2)          DEFAULT 0                  COMMENT '业务类型(0其它 1新增 2修改 3删除)',
+  method         VARCHAR(100)    DEFAULT ''                 COMMENT '方法名称',
+  request_method VARCHAR(10)     DEFAULT ''                 COMMENT '请求方式',
+  operator_type  INT(1)          DEFAULT 0                  COMMENT '操作类别(0其它 1后台用户 2手机端用户)',
+  oper_name      VARCHAR(50)     DEFAULT ''                 COMMENT '操作人员',
+  dept_name      VARCHAR(50)     DEFAULT ''                 COMMENT '部门名称',
+  oper_url       VARCHAR(255)    DEFAULT ''                 COMMENT '请求URL',
+  oper_ip        VARCHAR(128)    DEFAULT ''                 COMMENT '主机地址',
+  oper_location  VARCHAR(255)    DEFAULT ''                 COMMENT '操作地点',
+  oper_param     VARCHAR(2000)   DEFAULT ''                 COMMENT '请求参数',
+  json_result    VARCHAR(2000)   DEFAULT ''                 COMMENT '返回参数',
+  status         INT(1)          DEFAULT 0                  COMMENT '操作状态(0正常 1异常)',
+  error_msg      VARCHAR(2000)   DEFAULT ''                 COMMENT '错误消息',
+  oper_time      DATETIME                                   COMMENT '操作时间',
+  cost_time      BIGINT(20)      DEFAULT 0                  COMMENT '消耗时间',
+  PRIMARY KEY (oper_id),
+  KEY idx_sys_oper_log_bt (business_type),
+  KEY idx_sys_oper_log_s  (status),
+  KEY idx_sys_oper_log_ot (oper_time)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志记录';
+
+-- 15. 通知公告表
+DROP TABLE IF EXISTS sys_notice;
+CREATE TABLE sys_notice (
+  notice_id      BIGINT(20)      NOT NULL                   COMMENT '公告ID',
+  notice_title   VARCHAR(50)     NOT NULL                   COMMENT '公告标题',
+  notice_type    CHAR(1)         NOT NULL                   COMMENT '公告类型(1通知 2公告)',
+  notice_content LONGBLOB        DEFAULT NULL               COMMENT '公告内容',
+  status         CHAR(1)         DEFAULT '0'                COMMENT '公告状态(0正常 1关闭)',
+  create_by      VARCHAR(64)     DEFAULT ''                 COMMENT '创建者',
+  create_time    DATETIME                                   COMMENT '创建时间',
+  update_by      VARCHAR(64)     DEFAULT ''                 COMMENT '更新者',
+  update_time    DATETIME                                   COMMENT '更新时间',
+  remark         VARCHAR(255)    DEFAULT NULL               COMMENT '备注',
+  PRIMARY KEY (notice_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';
+
+INSERT INTO sys_notice VALUES(1, '温馨提醒:2025-01-21 予书新版本发布啦', '2', '新版本内容', '0', 'admin', NOW(), '', NULL, '管理员');
+INSERT INTO sys_notice VALUES(2, '维护通知:2025-01-21 予书系统凌晨维护', '1', '维护内容', '0', 'admin', NOW(), '', NULL, '管理员');
+
+-- =========================================
+-- 第二部分: 定时任务模块 (Quartz)
+-- =========================================
+
+DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
+DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
+DROP TABLE IF EXISTS QRTZ_LOCKS;
+DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_TRIGGERS;
+DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
+DROP TABLE IF EXISTS QRTZ_CALENDARS;
+
+CREATE TABLE QRTZ_JOB_DETAILS (
+  sched_name        VARCHAR(120) NOT NULL COMMENT '调度名称',
+  job_name          VARCHAR(200) NOT NULL COMMENT '任务名称',
+  job_group         VARCHAR(200) NOT NULL COMMENT '任务组名',
+  description       VARCHAR(250) NULL COMMENT '相关介绍',
+  job_class_name    VARCHAR(250) NOT NULL COMMENT '执行任务类名称',
+  is_durable        VARCHAR(1) NOT NULL COMMENT '是否持久化',
+  is_nonconcurrent  VARCHAR(1) NOT NULL COMMENT '是否并发',
+  is_update_data    VARCHAR(1) NOT NULL COMMENT '是否更新数据',
+  requests_recovery VARCHAR(1) NOT NULL COMMENT '是否接受恢复执行',
+  job_data          BLOB NULL COMMENT '存放持久化job对象',
+  PRIMARY KEY (sched_name, job_name, job_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='任务详细信息表';
+
+CREATE TABLE QRTZ_TRIGGERS (
+  sched_name     VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_name   VARCHAR(200) NOT NULL COMMENT '触发器的名字',
+  trigger_group  VARCHAR(200) NOT NULL COMMENT '触发器所属组的名字',
+  job_name       VARCHAR(200) NOT NULL COMMENT 'qrtz_job_details表job_name的外键',
+  job_group      VARCHAR(200) NOT NULL COMMENT 'qrtz_job_details表job_group的外键',
+  description    VARCHAR(250) NULL COMMENT '相关介绍',
+  next_fire_time BIGINT(13) NULL COMMENT '上一次触发时间(毫秒)',
+  prev_fire_time BIGINT(13) NULL COMMENT '下一次触发时间(默认为-1表示不触发)',
+  priority       INTEGER NULL COMMENT '优先级',
+  trigger_state  VARCHAR(16) NOT NULL COMMENT '触发器状态',
+  trigger_type   VARCHAR(8) NOT NULL COMMENT '触发器的类型',
+  start_time     BIGINT(13) NOT NULL COMMENT '开始时间',
+  end_time       BIGINT(13) NULL COMMENT '结束时间',
+  calendar_name  VARCHAR(200) NULL COMMENT '日程表名称',
+  misfire_instr  SMALLINT(2) NULL COMMENT '补偿执行的策略',
+  job_data       BLOB NULL COMMENT '存放持久化job对象',
+  PRIMARY KEY (sched_name, trigger_name, trigger_group),
+  FOREIGN KEY (sched_name, job_name, job_group) REFERENCES QRTZ_JOB_DETAILS(sched_name, job_name, job_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='触发器详细信息表';
+
+CREATE TABLE QRTZ_CRON_TRIGGERS (
+  sched_name      VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_name    VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',
+  trigger_group   VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  cron_expression VARCHAR(200) NOT NULL COMMENT 'cron表达式',
+  time_zone_id    VARCHAR(80) COMMENT '时区',
+  PRIMARY KEY (sched_name, trigger_name, trigger_group),
+  FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='Cron类型的触发器表';
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
+  sched_name      VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_name    VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',
+  trigger_group   VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  repeat_count    BIGINT(7) NOT NULL COMMENT '重复的次数统计',
+  repeat_interval BIGINT(12) NOT NULL COMMENT '重复的间隔时间',
+  times_triggered BIGINT(10) NOT NULL COMMENT '已经触发的次数',
+  PRIMARY KEY (sched_name, trigger_name, trigger_group),
+  FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='简单触发器的信息表';
+
+CREATE TABLE QRTZ_SIMPROP_TRIGGERS (
+  sched_name    VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_name  VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',
+  trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  str_prop_1    VARCHAR(512) NULL COMMENT 'String类型的trigger的第一个参数',
+  str_prop_2    VARCHAR(512) NULL COMMENT 'String类型的trigger的第二个参数',
+  str_prop_3    VARCHAR(512) NULL COMMENT 'String类型的trigger的第三个参数',
+  int_prop_1    INT NULL COMMENT 'int类型的trigger的第一个参数',
+  int_prop_2    INT NULL COMMENT 'int类型的trigger的第二个参数',
+  long_prop_1   BIGINT NULL COMMENT 'long类型的trigger的第一个参数',
+  long_prop_2   BIGINT NULL COMMENT 'long类型的trigger的第二个参数',
+  dec_prop_1    NUMERIC(13,4) NULL COMMENT 'decimal类型的trigger的第一个参数',
+  dec_prop_2    NUMERIC(13,4) NULL COMMENT 'decimal类型的trigger的第二个参数',
+  bool_prop_1   VARCHAR(1) NULL COMMENT 'Boolean类型的trigger的第一个参数',
+  bool_prop_2   VARCHAR(1) NULL COMMENT 'Boolean类型的trigger的第二个参数',
+  PRIMARY KEY (sched_name, trigger_name, trigger_group),
+  FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='同步机制的行锁表';
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS (
+  sched_name    VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_name  VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',
+  trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  blob_data     BLOB NULL COMMENT '存放持久化Trigger对象',
+  PRIMARY KEY (sched_name, trigger_name, trigger_group),
+  FOREIGN KEY (sched_name, trigger_name, trigger_group) REFERENCES QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='Blob类型的触发器表';
+
+CREATE TABLE QRTZ_CALENDARS (
+  sched_name    VARCHAR(120) NOT NULL COMMENT '调度名称',
+  calendar_name VARCHAR(200) NOT NULL COMMENT '日历名称',
+  calendar      BLOB NOT NULL COMMENT '存放持久化calendar对象',
+  PRIMARY KEY (sched_name, calendar_name)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='日历信息表';
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
+  sched_name    VARCHAR(120) NOT NULL COMMENT '调度名称',
+  trigger_group VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  PRIMARY KEY (sched_name, trigger_group)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='暂停的触发器表';
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS (
+  sched_name        VARCHAR(120) NOT NULL COMMENT '调度名称',
+  entry_id          VARCHAR(95) NOT NULL COMMENT '调度器实例id',
+  trigger_name      VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_name的外键',
+  trigger_group     VARCHAR(200) NOT NULL COMMENT 'qrtz_triggers表trigger_group的外键',
+  instance_name     VARCHAR(200) NOT NULL COMMENT '调度器实例名',
+  fired_time        BIGINT(13) NOT NULL COMMENT '触发的时间',
+  sched_time        BIGINT(13) NOT NULL COMMENT '定时器制定的时间',
+  priority          INTEGER NOT NULL COMMENT '优先级',
+  state             VARCHAR(16) NOT NULL COMMENT '状态',
+  job_name          VARCHAR(200) NULL COMMENT '任务名称',
+  job_group         VARCHAR(200) NULL COMMENT '任务组名',
+  is_nonconcurrent  VARCHAR(1) NULL COMMENT '是否并发',
+  requests_recovery VARCHAR(1) NULL COMMENT '是否接受恢复执行',
+  PRIMARY KEY (sched_name, entry_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='已触发的触发器表';
+
+CREATE TABLE QRTZ_SCHEDULER_STATE (
+  sched_name        VARCHAR(120) NOT NULL COMMENT '调度名称',
+  instance_name     VARCHAR(200) NOT NULL COMMENT '实例名称',
+  last_checkin_time BIGINT(13) NOT NULL COMMENT '上次检查时间',
+  checkin_interval  BIGINT(13) NOT NULL COMMENT '检查间隔时间',
+  PRIMARY KEY (sched_name, instance_name)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='调度器状态表';
+
+CREATE TABLE QRTZ_LOCKS (
+  sched_name VARCHAR(120) NOT NULL COMMENT '调度名称',
+  lock_name  VARCHAR(40) NOT NULL COMMENT '悲观锁名称',
+  PRIMARY KEY (sched_name, lock_name)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='存储的悲观锁信息表';
+
+-- =========================================
+-- 第三部分: 文件管理模块
+-- =========================================
+
+DROP TABLE IF EXISTS sys_folder;
+CREATE TABLE sys_folder (
+  folder_id    BIGINT(20)   NOT NULL COMMENT '文件夹ID',
+  parent_id    BIGINT(20)   DEFAULT 0 COMMENT '父文件夹ID(0表示根目录)',
+  folder_name  VARCHAR(100) NOT NULL COMMENT '文件夹名称',
+  user_id      BIGINT(20)   NOT NULL COMMENT '创建人ID',
+  sort_order   INT(4)       DEFAULT 0 COMMENT '排序',
+  create_by    VARCHAR(64)  DEFAULT '' COMMENT '创建者',
+  create_time  DATETIME     DEFAULT NULL COMMENT '创建时间',
+  update_by    VARCHAR(64)  DEFAULT '' COMMENT '更新者',
+  update_time  DATETIME     DEFAULT NULL COMMENT '更新时间',
+  remark       VARCHAR(500) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (folder_id),
+  KEY idx_parent_id (parent_id),
+  KEY idx_user_id (user_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文件夹表';
+
+DROP TABLE IF EXISTS sys_file;
+CREATE TABLE sys_file (
+  file_id        BIGINT(20)   NOT NULL COMMENT '文件ID',
+  folder_id      BIGINT(20)   DEFAULT 0 COMMENT '所属文件夹ID(0表示根目录)',
+  file_name      VARCHAR(200) NOT NULL COMMENT '文件名称(用户自定义)',
+  original_name  VARCHAR(200) DEFAULT NULL COMMENT '原始文件名',
+  file_path      VARCHAR(500) NOT NULL COMMENT '文件存储路径(相对路径)',
+  file_size      BIGINT(20)   DEFAULT 0 COMMENT '文件大小(字节)',
+  file_type      VARCHAR(50)  DEFAULT NULL COMMENT '文件类型(扩展名)',
+  mime_type      VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型',
+  user_id        BIGINT(20)   NOT NULL COMMENT '上传人ID',
+  user_name      VARCHAR(64)  DEFAULT NULL COMMENT '上传人昵称',
+  download_count INT(11)      DEFAULT 0 COMMENT '下载次数',
+  create_by      VARCHAR(64)  DEFAULT '' COMMENT '创建者',
+  create_time    DATETIME     DEFAULT NULL COMMENT '创建时间',
+  update_by      VARCHAR(64)  DEFAULT '' COMMENT '更新者',
+  update_time    DATETIME     DEFAULT NULL COMMENT '更新时间',
+  remark         VARCHAR(500) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (file_id),
+  KEY idx_folder_id (folder_id),
+  KEY idx_user_id (user_id),
+  KEY idx_create_time (create_time)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文件表';
+
+DROP TABLE IF EXISTS sys_file_share;
+CREATE TABLE sys_file_share (
+  share_id     BIGINT(20)   NOT NULL COMMENT '分享ID',
+  file_id      BIGINT(20)   NOT NULL COMMENT '文件ID',
+  share_code   VARCHAR(50)  NOT NULL COMMENT '分享码',
+  share_pwd    VARCHAR(20)  DEFAULT NULL COMMENT '提取密码',
+  expire_time  DATETIME     DEFAULT NULL COMMENT '过期时间',
+  download_limit INT(11)    DEFAULT 0 COMMENT '下载次数限制(0不限制)',
+  download_count INT(11)    DEFAULT 0 COMMENT '已下载次数',
+  status       CHAR(1)      DEFAULT '0' COMMENT '状态(0正常 1失效)',
+  create_by    VARCHAR(64)  DEFAULT '' COMMENT '创建者',
+  create_time  DATETIME     DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (share_id),
+  UNIQUE KEY uk_share_code (share_code),
+  KEY idx_file_id (file_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='文件分享表';
+
+-- =========================================
+-- 第四部分: 消息中心模块
+-- =========================================
+
+DROP TABLE IF EXISTS sys_notification;
+CREATE TABLE sys_notification (
+  notification_id BIGINT(20)   NOT NULL COMMENT '通知ID',
+  title           VARCHAR(255) NOT NULL COMMENT '通知标题',
+  content         TEXT         NOT NULL COMMENT '通知内容',
+  notification_type VARCHAR(50) DEFAULT 'system' COMMENT '通知类型(system系统通知 maintenance维护通知 announcement公告)',
+  priority        CHAR(1)      DEFAULT '0' COMMENT '优先级(0普通 1重要 2紧急)',
+  sender_id       BIGINT(20)   DEFAULT NULL COMMENT '发送者ID(系统通知为NULL)',
+  sender_name     VARCHAR(100) DEFAULT '系统' COMMENT '发送者名称',
+  target_type     CHAR(1)      DEFAULT '1' COMMENT '目标类型(1全部用户 2指定用户 3指定角色)',
+  target_users    TEXT         COMMENT '目标用户ID列表(JSON格式)',
+  target_roles    TEXT         COMMENT '目标角色ID列表(JSON格式)',
+  status          CHAR(1)      DEFAULT '1' COMMENT '状态(0草稿 1已发布 2已撤回)',
+  publish_time    DATETIME     DEFAULT NULL COMMENT '发布时间',
+  expire_time     DATETIME     DEFAULT NULL COMMENT '过期时间',
+  create_time     DATETIME     DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  update_time     DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (notification_id),
+  KEY idx_sender_id (sender_id),
+  KEY idx_status (status),
+  KEY idx_publish_time (publish_time)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='系统通知表';
+
+DROP TABLE IF EXISTS sys_notification_receiver;
+CREATE TABLE sys_notification_receiver (
+  receiver_id     BIGINT(20) NOT NULL COMMENT '接收记录ID',
+  notification_id BIGINT(20) NOT NULL COMMENT '通知ID',
+  user_id         BIGINT(20) NOT NULL COMMENT '接收用户ID',
+  is_read         CHAR(1)    DEFAULT '0' COMMENT '是否已读(0未读 1已读)',
+  read_time       DATETIME   DEFAULT NULL COMMENT '阅读时间',
+  create_time     DATETIME   DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (receiver_id),
+  KEY idx_notification_id (notification_id),
+  KEY idx_user_id (user_id),
+  KEY idx_is_read (is_read)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='通知接收记录表';
+
+-- =========================================
+-- 第五部分: 待办事项模块
+-- =========================================
+
+DROP TABLE IF EXISTS sys_todo;
+CREATE TABLE sys_todo (
+  todo_id       BIGINT(20)   NOT NULL COMMENT '待办ID',
+  title         VARCHAR(200) NOT NULL COMMENT '待办标题',
+  content       TEXT         COMMENT '待办内容',
+  priority      CHAR(1)      DEFAULT '1' COMMENT '优先级(0低 1中 2高 3紧急)',
+  status        CHAR(1)      DEFAULT '0' COMMENT '状态(0待处理 1进行中 2已完成 3已取消)',
+  due_date      DATETIME     COMMENT '截止日期',
+  complete_time DATETIME     COMMENT '完成时间',
+  user_id       BIGINT(20)   NOT NULL COMMENT '所属用户ID',
+  del_flag      CHAR(1)      DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
+  create_by     VARCHAR(64)  DEFAULT '' COMMENT '创建者',
+  create_time   DATETIME     COMMENT '创建时间',
+  update_by     VARCHAR(64)  DEFAULT '' COMMENT '更新者',
+  update_time   DATETIME     COMMENT '更新时间',
+  remark        VARCHAR(500) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (todo_id),
+  KEY idx_user_id (user_id),
+  KEY idx_status (status),
+  KEY idx_due_date (due_date)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='待办事项表';
+
+-- 初始化待办数据
+INSERT INTO sys_todo VALUES(1, '完成项目文档编写', '编写项目需求文档和技术方案文档', '2', '0', DATE_ADD(NOW(), INTERVAL 3 DAY), NULL, 1, '0', 'admin', NOW(), '', NULL, '重要任务');
+INSERT INTO sys_todo VALUES(2, '代码审查', '审查本周提交的代码,确保代码质量', '1', '1', DATE_ADD(NOW(), INTERVAL 1 DAY), NULL, 1, '0', 'admin', NOW(), '', NULL, NULL);
+INSERT INTO sys_todo VALUES(3, '周报提交', '提交本周工作周报', '1', '0', DATE_ADD(NOW(), INTERVAL 2 DAY), NULL, 1, '0', 'admin', NOW(), '', NULL, NULL);
+
+-- =========================================
+-- 第六部分: 错误日志模块
+-- =========================================
+
+DROP TABLE IF EXISTS sys_error_log;
+CREATE TABLE sys_error_log (
+  error_id       BIGINT(20)   NOT NULL COMMENT '错误ID',
+  error_code     VARCHAR(50)  DEFAULT NULL COMMENT '错误代码',
+  error_type     VARCHAR(50)  DEFAULT 'SYSTEM' COMMENT '错误类型: SYSTEM/BUSINESS/API/SQL/AUTH',
+  error_level    VARCHAR(20)  DEFAULT 'ERROR' COMMENT '错误级别: ERROR/WARN/FATAL',
+  error_message  TEXT         DEFAULT NULL COMMENT '错误消息',
+  error_detail   TEXT         DEFAULT NULL COMMENT '错误详情(堆栈信息)',
+  request_url    VARCHAR(500) DEFAULT NULL COMMENT '请求URL',
+  request_method VARCHAR(20)  DEFAULT NULL COMMENT '请求方法',
+  request_params TEXT         DEFAULT NULL COMMENT '请求参数',
+  request_ip     VARCHAR(50)  DEFAULT NULL COMMENT '请求IP',
+  user_agent     VARCHAR(500) DEFAULT NULL COMMENT '用户代理',
+  user_id        BIGINT(20)   DEFAULT NULL COMMENT '用户ID',
+  user_name      VARCHAR(50)  DEFAULT NULL COMMENT '用户名',
+  source_class   VARCHAR(200) DEFAULT NULL COMMENT '来源类',
+  source_method  VARCHAR(100) DEFAULT NULL COMMENT '来源方法',
+  source_line    INT(11)      DEFAULT NULL COMMENT '来源行号',
+  status         CHAR(1)      DEFAULT '0' COMMENT '状态: 0=未处理 1=已处理 2=忽略',
+  resolve_by     VARCHAR(50)  DEFAULT NULL COMMENT '处理人',
+  resolve_time   DATETIME     DEFAULT NULL COMMENT '处理时间',
+  resolve_remark VARCHAR(500) DEFAULT NULL COMMENT '处理备注',
+  occur_count    INT(11)      DEFAULT 1 COMMENT '发生次数',
+  first_time     DATETIME     DEFAULT NULL COMMENT '首次发生时间',
+  last_time      DATETIME     DEFAULT NULL COMMENT '最近发生时间',
+  create_time    DATETIME     DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (error_id),
+  KEY idx_error_type (error_type),
+  KEY idx_error_level (error_level),
+  KEY idx_status (status),
+  KEY idx_create_time (create_time)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='错误日志表';
+
+-- =========================================
+-- 完成
+-- =========================================
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+SELECT '核心系统数据库初始化完成!' AS message;

+ 128 - 0
yushu-backend/sql/yushu_module_ai.sql

@@ -0,0 +1,128 @@
+-- =========================================
+-- 予书管理系统 - AI助手扩展模块
+-- 版本: 2.0.0
+-- 日期: 2025-01-21
+-- 说明: AI助手功能,支持多厂商AI集成
+-- ID范围: 
+--   菜单ID: 3000-3999
+--   服务ID: 10001-19999
+--   会话ID: 自动增长
+--   消息ID: 自动增长
+-- =========================================
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- =========================================
+-- AI模块菜单
+-- =========================================
+
+-- AI管理一级菜单 (ID: 3000)
+INSERT INTO sys_menu VALUES(3000, 'AI管理', 0, 5, 'ai', NULL, '', '', 1, 0, 'M', '0', '0', '', 'robot', 'admin', NOW(), '', NULL, 'AI智能管理');
+
+-- AI管理二级菜单 (ID: 3001-3099)
+INSERT INTO sys_menu VALUES(3001, '服务管理', 3000, 1, 'service', 'system/ai/service/index', '', '', 1, 0, 'C', '0', '0', 'ai:service:list', 'cloud-service', 'admin', NOW(), '', NULL, 'AI服务管理');
+INSERT INTO sys_menu VALUES(3002, '对话测试', 3000, 2, 'chat', 'system/ai/chat/index', '', '', 1, 0, 'C', '0', '0', 'ai:chat:list', 'chat-bubble', 'admin', NOW(), '', NULL, 'AI对话测试');
+INSERT INTO sys_menu VALUES(3003, '会话记录', 3000, 3, 'session', 'system/ai/session/index', '', '', 1, 0, 'C', '0', '0', 'ai:session:list', 'list', 'admin', NOW(), '', NULL, 'AI会话记录');
+
+-- AI服务管理按钮 (ID: 3100-3199)
+INSERT INTO sys_menu VALUES(3100, '服务查询', 3001, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3101, '服务新增', 3001, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:add', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3102, '服务修改', 3001, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:edit', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3103, '服务删除', 3001, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3104, '服务导出', 3001, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:export', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3105, '服务测试', 3001, 6, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:service:test', '#', 'admin', NOW(), '', NULL, '');
+
+-- AI对话按钮 (ID: 3200-3299)
+INSERT INTO sys_menu VALUES(3200, '对话查询', 3002, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:chat:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3201, '发送消息', 3002, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:chat:send', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3202, '清空对话', 3002, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:chat:clear', '#', 'admin', NOW(), '', NULL, '');
+
+-- AI会话记录按钮 (ID: 3300-3399)
+INSERT INTO sys_menu VALUES(3300, '会话查询', 3003, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:session:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3301, '会话删除', 3003, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:session:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(3302, '会话导出', 3003, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'ai:session:export', '#', 'admin', NOW(), '', NULL, '');
+
+-- =========================================
+-- AI模块数据表
+-- =========================================
+
+-- 1. AI服务配置表 (ID: 10001-19999)
+DROP TABLE IF EXISTS ai_service;
+CREATE TABLE ai_service (
+  service_id        BIGINT(20)    NOT NULL                 COMMENT '服务ID (10001-19999)',
+  service_name      VARCHAR(100)  NOT NULL                 COMMENT '服务名称',
+  service_code      VARCHAR(50)   NOT NULL                 COMMENT '服务代码(唯一标识)',
+  provider          VARCHAR(50)   NOT NULL                 COMMENT '厂商标识: openai/zhipu/alibaba/baidu/moonshot/ollama',
+  provider_name     VARCHAR(50)   DEFAULT NULL             COMMENT '厂商名称',
+  model_code        VARCHAR(100)  NOT NULL                 COMMENT '模型代码: gpt-4/glm-4/qwen-max',
+  api_url           VARCHAR(500)  NOT NULL                 COMMENT 'API地址',
+  api_key           VARCHAR(500)  DEFAULT NULL             COMMENT 'API密钥(加密存储)',
+  api_secret        VARCHAR(500)  DEFAULT NULL             COMMENT 'API Secret(部分厂商需要)',
+  temperature       DECIMAL(3,2)  DEFAULT 0.70             COMMENT '温度参数(0-2)',
+  top_p             DECIMAL(3,2)  DEFAULT 0.95             COMMENT 'Top P参数(0-1)',
+  max_tokens        INT(11)       DEFAULT 4096             COMMENT '最大Token数',
+  system_prompt     TEXT          DEFAULT NULL             COMMENT '系统提示词',
+  context_window    INT(11)       DEFAULT 8192             COMMENT '上下文窗口大小',
+  supports_stream   CHAR(1)       DEFAULT '1'              COMMENT '支持流式: 0=否 1=是',
+  supports_vision   CHAR(1)       DEFAULT '0'              COMMENT '支持视觉: 0=否 1=是',
+  supports_tools    CHAR(1)       DEFAULT '0'              COMMENT '支持工具调用: 0=否 1=是',
+  enabled           CHAR(1)       DEFAULT '1'              COMMENT '是否启用: 0=否 1=是',
+  is_default        CHAR(1)       DEFAULT '0'              COMMENT '是否默认: 0=否 1=是',
+  sort_order        INT(4)        DEFAULT 0                COMMENT '排序',
+  create_by         VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
+  create_time       DATETIME      DEFAULT NULL             COMMENT '创建时间',
+  update_by         VARCHAR(64)   DEFAULT ''               COMMENT '更新者',
+  update_time       DATETIME      DEFAULT NULL             COMMENT '更新时间',
+  remark            VARCHAR(500)  DEFAULT NULL             COMMENT '备注',
+  PRIMARY KEY (service_id),
+  UNIQUE KEY uk_service_code (service_code)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='AI服务配置表';
+
+-- 初始化AI服务数据
+INSERT INTO ai_service VALUES(10001, 'OpenAI GPT-4', 'openai-gpt4', 'openai', 'OpenAI', 'gpt-4', 'https://api.openai.com/v1/chat/completions', NULL, NULL, 0.70, 0.95, 4096, NULL, 8192, '1', '1', '1', '0', '0', 1, 'admin', NOW(), '', NULL, 'OpenAI GPT-4模型');
+INSERT INTO ai_service VALUES(10002, '智谱 GLM-4', 'zhipu-glm4', 'zhipu', '智谱AI', 'glm-4', 'https://open.bigmodel.cn/api/paas/v4/chat/completions', NULL, NULL, 0.70, 0.95, 4096, NULL, 8192, '1', '1', '1', '1', '1', 2, 'admin', NOW(), '', NULL, '智谱GLM-4模型');
+INSERT INTO ai_service VALUES(10003, '阿里云 Qwen-Max', 'alibaba-qwen-max', 'alibaba', '阿里云', 'qwen-max', 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation', NULL, NULL, 0.70, 0.95, 6000, NULL, 8192, '1', '0', '0', '0', '0', 3, 'admin', NOW(), '', NULL, '阿里云通义千问Max');
+INSERT INTO ai_service VALUES(10004, 'Moonshot Kimi', 'moonshot-kimi', 'moonshot', 'Moonshot', 'moonshot-v1-8k', 'https://api.moonshot.cn/v1/chat/completions', NULL, NULL, 0.70, 0.95, 4096, NULL, 8192, '1', '0', '0', '0', '0', 4, 'admin', NOW(), '', NULL, 'Moonshot Kimi模型');
+INSERT INTO ai_service VALUES(10005, '百度文心一言', 'baidu-ernie', 'baidu', '百度', 'ERNIE-Bot-4', 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro', NULL, NULL, 0.70, 0.95, 4096, NULL, 8192, '1', '0', '0', '0', '0', 5, 'admin', NOW(), '', NULL, '百度文心一言4.0');
+
+-- 2. AI对话会话表
+DROP TABLE IF EXISTS ai_chat_session;
+CREATE TABLE ai_chat_session (
+  session_id    BIGINT(20)    NOT NULL AUTO_INCREMENT    COMMENT '会话ID',
+  session_name  VARCHAR(200)  DEFAULT NULL               COMMENT '会话名称',
+  service_id    BIGINT(20)    NOT NULL                   COMMENT 'AI服务ID',
+  user_id       BIGINT(20)    NOT NULL                   COMMENT '用户ID',
+  user_name     VARCHAR(64)   DEFAULT NULL               COMMENT '用户名',
+  message_count INT(11)       DEFAULT 0                  COMMENT '消息数量',
+  token_count   INT(11)       DEFAULT 0                  COMMENT 'Token消耗',
+  status        CHAR(1)       DEFAULT '0'                COMMENT '状态(0进行中 1已结束)',
+  create_time   DATETIME      DEFAULT NULL               COMMENT '创建时间',
+  update_time   DATETIME      DEFAULT NULL               COMMENT '更新时间',
+  PRIMARY KEY (session_id),
+  KEY idx_service_id (service_id),
+  KEY idx_user_id (user_id),
+  KEY idx_create_time (create_time)
+) ENGINE=INNODB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话会话表';
+
+-- 3. AI对话消息表
+DROP TABLE IF EXISTS ai_chat_message;
+CREATE TABLE ai_chat_message (
+  message_id    BIGINT(20)    NOT NULL AUTO_INCREMENT    COMMENT '消息ID',
+  session_id    BIGINT(20)    NOT NULL                   COMMENT '会话ID',
+  role          VARCHAR(20)   NOT NULL                   COMMENT '角色: user/assistant/system',
+  content       TEXT          NOT NULL                   COMMENT '消息内容',
+  token_count   INT(11)       DEFAULT 0                  COMMENT 'Token数量',
+  create_time   DATETIME      DEFAULT NULL               COMMENT '创建时间',
+  PRIMARY KEY (message_id),
+  KEY idx_session_id (session_id),
+  KEY idx_create_time (create_time)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话消息表';
+
+-- =========================================
+-- 完成
+-- =========================================
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+SELECT 'AI扩展模块初始化完成!' AS message;

+ 184 - 0
yushu-backend/sql/yushu_module_mail.sql

@@ -0,0 +1,184 @@
+-- =========================================
+-- 予书管理系统 - 邮件系统扩展模块
+-- 版本: 2.0.0
+-- 日期: 2025-01-21
+-- 说明: 企业邮件系统,支持SMTP/API发送和IMAP收信
+-- ID范围:
+--   菜单ID: 4000-4999
+--   配置ID: 20001-29999
+--   模板ID: 30001-39999
+--   日志ID: 自动增长
+--   收件ID: 自动增长
+-- =========================================
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- =========================================
+-- 邮件模块菜单
+-- =========================================
+
+-- 邮件管理一级菜单 (ID: 4000)
+INSERT INTO sys_menu VALUES(4000, '邮件管理', 0, 6, 'mail', NULL, '', '', 1, 0, 'M', '0', '0', '', 'email', 'admin', NOW(), '', NULL, '邮件管理');
+
+-- 邮件管理二级菜单 (ID: 4001-4099)
+INSERT INTO sys_menu VALUES(4001, '邮箱配置', 4000, 1, 'config', 'system/mail/config/index', '', '', 1, 0, 'C', '0', '0', 'mail:config:list', 'smtp-config', 'admin', NOW(), '', NULL, '邮箱配置管理');
+INSERT INTO sys_menu VALUES(4002, '邮件模板', 4000, 2, 'template', 'system/mail/template/index', '', '', 1, 0, 'C', '0', '0', 'mail:template:list', 'mail-template', 'admin', NOW(), '', NULL, '邮件模板管理');
+INSERT INTO sys_menu VALUES(4003, '发送邮件', 4000, 3, 'send', 'system/mail/send/index', '', '', 1, 0, 'C', '0', '0', 'mail:send:page', 'email-service', 'admin', NOW(), '', NULL, '发送邮件');
+INSERT INTO sys_menu VALUES(4004, '发送日志', 4000, 4, 'log', 'system/mail/log/index', '', '', 1, 0, 'C', '0', '0', 'mail:log:list', 'log', 'admin', NOW(), '', NULL, '邮件发送日志');
+INSERT INTO sys_menu VALUES(4005, '收件箱', 4000, 5, 'inbox', 'system/mail/inbox/index', '', '', 1, 0, 'C', '0', '0', 'mail:inbox:list', 'download', 'admin', NOW(), '', NULL, '邮件收件箱');
+
+-- 邮箱配置按钮 (ID: 4100-4199)
+INSERT INTO sys_menu VALUES(4100, '配置查询', 4001, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:config:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4101, '配置新增', 4001, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:config:add', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4102, '配置修改', 4001, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:config:edit', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4103, '配置删除', 4001, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:config:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4104, '配置测试', 4001, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:config:test', '#', 'admin', NOW(), '', NULL, '');
+
+-- 邮件模板按钮 (ID: 4200-4299)
+INSERT INTO sys_menu VALUES(4200, '模板查询', 4002, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:template:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4201, '模板新增', 4002, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:template:add', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4202, '模板修改', 4002, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:template:edit', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4203, '模板删除', 4002, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:template:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4204, '模板预览', 4002, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:template:preview', '#', 'admin', NOW(), '', NULL, '');
+
+-- 发送邮件按钮 (ID: 4300-4399)
+INSERT INTO sys_menu VALUES(4300, '发送邮件', 4003, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:send:send', '#', 'admin', NOW(), '', NULL, '');
+
+-- 发送日志按钮 (ID: 4400-4499)
+INSERT INTO sys_menu VALUES(4400, '日志查询', 4004, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:log:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4401, '日志删除', 4004, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:log:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4402, '日志导出', 4004, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:log:export', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4403, '重新发送', 4004, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:log:resend', '#', 'admin', NOW(), '', NULL, '');
+
+-- 收件箱按钮 (ID: 4500-4599)
+INSERT INTO sys_menu VALUES(4500, '收件查询', 4005, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:inbox:query', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4501, '收件删除', 4005, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:inbox:remove', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4502, '标记已读', 4005, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:inbox:read', '#', 'admin', NOW(), '', NULL, '');
+INSERT INTO sys_menu VALUES(4503, '同步邮件', 4005, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'mail:inbox:sync', '#', 'admin', NOW(), '', NULL, '');
+
+-- =========================================
+-- 邮件模块数据表
+-- =========================================
+
+-- 1. 企业邮箱配置表 (ID: 20001-29999)
+DROP TABLE IF EXISTS sys_mail_config;
+CREATE TABLE sys_mail_config (
+  config_id      BIGINT(20)    NOT NULL                 COMMENT '配置ID (20001-29999)',
+  config_name    VARCHAR(100)  NOT NULL                 COMMENT '配置名称',
+  mail_type      VARCHAR(20)   NOT NULL                 COMMENT '邮箱类型(aliyun/tencent/netease/custom)',
+  host           VARCHAR(100)  DEFAULT NULL             COMMENT 'SMTP服务器地址',
+  port           INT           DEFAULT NULL             COMMENT '端口号',
+  username       VARCHAR(100)  DEFAULT NULL             COMMENT '用户名/发件人邮箱',
+  password       VARCHAR(200)  DEFAULT NULL             COMMENT '密码/授权码(加密存储)',
+  api_key        VARCHAR(200)  DEFAULT NULL             COMMENT 'API密钥(加密存储)',
+  api_secret     VARCHAR(200)  DEFAULT NULL             COMMENT 'API密钥Secret(加密存储)',
+  region_id      VARCHAR(50)   DEFAULT NULL             COMMENT '区域ID(阿里云等需要)',
+  sender_name    VARCHAR(100)  DEFAULT NULL             COMMENT '发件人名称',
+  sender_email   VARCHAR(100)  NOT NULL                 COMMENT '发件人邮箱地址',
+  encryption     VARCHAR(20)   DEFAULT 'ssl'            COMMENT '加密方式(none/ssl/tls)',
+  use_api        CHAR(1)       DEFAULT '0'              COMMENT '使用API发送(0=SMTP 1=API)',
+  imap_host      VARCHAR(100)  DEFAULT NULL             COMMENT 'IMAP服务器地址',
+  imap_port      INT           DEFAULT NULL             COMMENT 'IMAP端口号',
+  imap_encryption VARCHAR(20)  DEFAULT 'ssl'            COMMENT 'IMAP加密方式(none/ssl/tls)',
+  enable_receive CHAR(1)       DEFAULT '0'              COMMENT '启用收信(0否 1是)',
+  is_default     CHAR(1)       DEFAULT '0'              COMMENT '是否默认(0否 1是)',
+  status         CHAR(1)       DEFAULT '0'              COMMENT '状态(0正常 1停用)',
+  extra_params   TEXT          COMMENT '额外参数(JSON)',
+  del_flag       CHAR(1)       DEFAULT '0'              COMMENT '删除标志(0存在 2删除)',
+  create_by      VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
+  create_time    DATETIME      COMMENT '创建时间',
+  update_by      VARCHAR(64)   DEFAULT ''               COMMENT '更新者',
+  update_time    DATETIME      COMMENT '更新时间',
+  remark         VARCHAR(500)  DEFAULT NULL             COMMENT '备注',
+  PRIMARY KEY (config_id)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='企业邮箱配置表';
+
+-- 初始化邮箱配置示例
+INSERT INTO sys_mail_config VALUES(20001, '阿里云企业邮箱', 'aliyun', 'smtp.qiye.aliyun.com', 465, NULL, NULL, NULL, NULL, NULL, '予书科技', 'noreply@yushu.com', 'ssl', '0', 'imap.qiye.aliyun.com', 993, 'ssl', '0', '1', '0', NULL, '0', 'admin', NOW(), '', NULL, '阿里云企业邮箱配置');
+
+-- 2. 邮件模板表 (ID: 30001-39999)
+DROP TABLE IF EXISTS sys_mail_template;
+CREATE TABLE sys_mail_template (
+  template_id    BIGINT(20)    NOT NULL                 COMMENT '模板ID (30001-39999)',
+  template_name  VARCHAR(100)  NOT NULL                 COMMENT '模板名称',
+  template_code  VARCHAR(100)  NOT NULL                 COMMENT '模板代码(唯一)',
+  subject        VARCHAR(200)  NOT NULL                 COMMENT '邮件主题',
+  content        TEXT          NOT NULL                 COMMENT '模板内容',
+  content_type   VARCHAR(20)   DEFAULT 'html'           COMMENT '内容类型(html/text)',
+  variables      VARCHAR(500)  DEFAULT NULL             COMMENT '变量列表(JSON数组)',
+  status         CHAR(1)       DEFAULT '0'              COMMENT '状态(0正常 1停用)',
+  del_flag       CHAR(1)       DEFAULT '0'              COMMENT '删除标志(0存在 2删除)',
+  create_by      VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
+  create_time    DATETIME      COMMENT '创建时间',
+  update_by      VARCHAR(64)   DEFAULT ''               COMMENT '更新者',
+  update_time    DATETIME      COMMENT '更新时间',
+  remark         VARCHAR(500)  DEFAULT NULL             COMMENT '备注',
+  PRIMARY KEY (template_id),
+  UNIQUE KEY uk_template_code (template_code)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='邮件模板表';
+
+-- 初始化邮件模板
+INSERT INTO sys_mail_template VALUES(30001, '用户注册通知', 'user_register', '欢迎注册予书管理系统', '<h1>欢迎 {{username}}</h1><p>您已成功注册予书管理系统!</p><p>您的账号:{{account}}</p><p>初始密码:{{password}}</p>', 'html', '["username","account","password"]', '0', '0', 'admin', NOW(), '', NULL, '用户注册通知模板');
+INSERT INTO sys_mail_template VALUES(30002, '密码重置通知', 'password_reset', '密码重置通知', '<h1>密码重置</h1><p>尊敬的 {{username}}:</p><p>您的密码已重置,新密码为:{{password}}</p><p>请及时登录修改密码。</p>', 'html', '["username","password"]', '0', '0', 'admin', NOW(), '', NULL, '密码重置通知模板');
+INSERT INTO sys_mail_template VALUES(30003, '系统通知', 'system_notice', '系统通知', '<h1>系统通知</h1><p>{{content}}</p>', 'html', '["content"]', '0', '0', 'admin', NOW(), '', NULL, '系统通知模板');
+
+-- 3. 邮件发送日志表
+DROP TABLE IF EXISTS sys_mail_log;
+CREATE TABLE sys_mail_log (
+  log_id         BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '日志ID',
+  config_id      BIGINT(20)    NOT NULL                 COMMENT '配置ID',
+  template_id    BIGINT(20)    DEFAULT NULL             COMMENT '模板ID',
+  to_address     VARCHAR(1000) NOT NULL                 COMMENT '收件人地址',
+  cc_address     VARCHAR(1000) DEFAULT NULL             COMMENT '抄送地址',
+  bcc_address    VARCHAR(1000) DEFAULT NULL             COMMENT '密送地址',
+  subject        VARCHAR(500)  NOT NULL                 COMMENT '邮件主题',
+  content        LONGTEXT      COMMENT '邮件内容',
+  content_type   VARCHAR(20)   DEFAULT 'html'           COMMENT '内容类型(html/text)',
+  attachments    TEXT          COMMENT '附件信息(JSON)',
+  send_status    CHAR(1)       DEFAULT '0'              COMMENT '发送状态(0待发送 1成功 2失败)',
+  error_msg      VARCHAR(500)  DEFAULT NULL             COMMENT '错误信息',
+  send_time      DATETIME      DEFAULT NULL             COMMENT '发送时间',
+  create_by      VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
+  create_time    DATETIME      COMMENT '创建时间',
+  PRIMARY KEY (log_id),
+  KEY idx_config_id (config_id),
+  KEY idx_send_status (send_status),
+  KEY idx_send_time (send_time)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='邮件发送日志表';
+
+-- 4. 收件箱表
+DROP TABLE IF EXISTS sys_mail_inbox;
+CREATE TABLE sys_mail_inbox (
+  inbox_id       BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '收件ID',
+  config_id      BIGINT(20)    NOT NULL                 COMMENT '配置ID',
+  message_id     VARCHAR(200)  DEFAULT NULL             COMMENT '邮件消息ID',
+  from_address   VARCHAR(200)  NOT NULL                 COMMENT '发件人地址',
+  from_name      VARCHAR(100)  DEFAULT NULL             COMMENT '发件人名称',
+  to_address     VARCHAR(1000) NOT NULL                 COMMENT '收件人地址',
+  cc_address     VARCHAR(1000) DEFAULT NULL             COMMENT '抄送地址',
+  subject        VARCHAR(500)  NOT NULL                 COMMENT '邮件主题',
+  content        LONGTEXT      COMMENT '邮件内容',
+  content_type   VARCHAR(20)   DEFAULT 'html'           COMMENT '内容类型(html/text)',
+  attachments    TEXT          COMMENT '附件信息(JSON)',
+  has_attachment CHAR(1)       DEFAULT '0'              COMMENT '是否有附件(0否 1是)',
+  is_read        CHAR(1)       DEFAULT '0'              COMMENT '是否已读(0未读 1已读)',
+  is_starred     CHAR(1)       DEFAULT '0'              COMMENT '是否星标(0否 1是)',
+  folder         VARCHAR(50)   DEFAULT 'INBOX'          COMMENT '文件夹(INBOX/SENT/TRASH等)',
+  receive_time   DATETIME      NOT NULL                 COMMENT '接收时间',
+  del_flag       CHAR(1)       DEFAULT '0'              COMMENT '删除标志(0存在 2删除)',
+  create_time    DATETIME      COMMENT '创建时间',
+  PRIMARY KEY (inbox_id),
+  KEY idx_config_id (config_id),
+  KEY idx_receive_time (receive_time),
+  KEY idx_is_read (is_read),
+  UNIQUE KEY uk_message_id (config_id, message_id)
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='收件箱表';
+
+-- =========================================
+-- 完成
+-- =========================================
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+SELECT '邮件扩展模块初始化完成!' AS message;

+ 9 - 9
yushu-uivue3/README.md

@@ -1,12 +1,12 @@
 # 予书管理系统 - 前端
 # 予书管理系统 - 前端
 
 
-基于 Vue3 + Element Plus + Vite 的企业级管理系统前端
+基于 Vue3 + Ant Design Vue + Vite 的企业级管理系统前端
 
 
 ---
 ---
 
 
 ## 简介
 ## 简介
 
 
-予书管理系统前端采用最新的 Vue3 技术栈,配合 Element Plus 组件库,实现现代化的企业级后台管理界面。
+予书管理系统前端采用最新的 Vue3 技术栈,配合 Ant Design Vue 组件库,实现现代化的企业级后台管理界面。
 
 
 ---
 ---
 
 
@@ -14,12 +14,12 @@
 
 
 | 技术 | 说明 | 版本 |
 | 技术 | 说明 | 版本 |
 |------|------|------|
 |------|------|------|
-| Vue | 渐进式 JavaScript 框架 | 3.x |
-| Element Plus | Vue3 组件库 | 2.x |
-| Vite | 下一代前端构建工具 | 4.x |
-| Pinia | Vue 状态管理 | 2.x |
+| Vue | 渐进式 JavaScript 框架 | 3.5.x |
+| Ant Design Vue | Vue3 企业级 UI 组件库 | 4.2.x |
+| Vite | 下一代前端构建工具 | 6.x |
+| Pinia | Vue 状态管理 | 3.x |
 | Vue Router | 路由管理 | 4.x |
 | Vue Router | 路由管理 | 4.x |
-| Axios | HTTP 请求库 | 0.27.x |
+| Axios | HTTP 请求库 | 1.9.x |
 | Sass | CSS 预处理器 | 1.x |
 | Sass | CSS 预处理器 | 1.x |
 
 
 ---
 ---
@@ -30,7 +30,7 @@
 - 深色/浅色主题切换
 - 深色/浅色主题切换
 - 动态光效与流畅动画
 - 动态光效与流畅动画
 - 响应式布局适配
 - 响应式布局适配
-- 自定义 Element Plus 组件样式
+- 自定义 Ant Design Vue 组件样式
 
 
 ---
 ---
 
 
@@ -111,7 +111,7 @@ yushu-uivue3/
 │   │   ├── images/             # 图片资源
 │   │   ├── images/             # 图片资源
 │   │   └── styles/             # 全局样式
 │   │   └── styles/             # 全局样式
 │   │       ├── index.scss      # 样式入口
 │   │       ├── index.scss      # 样式入口
-│   │       ├── element-ui.scss # Element Plus 样式覆盖
+│   │       ├── ant-design-vue.scss # Ant Design Vue 样式覆盖
 │   │       ├── sidebar.scss    # 侧边栏样式
 │   │       ├── sidebar.scss    # 侧边栏样式
 │   │       └── variables.module.scss
 │   │       └── variables.module.scss
 │   ├── components/             # 公共组件
 │   ├── components/             # 公共组件