Browse Source

修复bug

master
前端-胡立永 1 month ago
parent
commit
5a856cfc62
10 changed files with 12104 additions and 12388 deletions
  1. +0
    -361
      RuoYi-Vue-Plus-SpringAI技术方案.txt
  2. +46
    -8
      admin-pc/package-lock.json
  3. +2
    -2
      admin-pc/src/views/book/check/achievement.vue
  4. +2
    -2
      admin-pc/src/views/book/check/chapter.vue
  5. +1
    -1
      admin-pc/src/views/book/check/modules/AchievementForm.vue
  6. +12018
    -12008
      admin-pc/yarn.lock
  7. +1
    -0
      module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java
  8. +1
    -1
      module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java
  9. +23
    -5
      module-common/src/main/java/org/jeecg/common/sms/service/SmsService.java
  10. +10
    -0
      module-common/src/main/java/org/jeecg/modules/commonBanner/entity/CommonBanner.java

+ 0
- 361
RuoYi-Vue-Plus-SpringAI技术方案.txt View File

@ -1,361 +0,0 @@
RuoYi-Vue-Plus + Spring AI 技术方案
==========================================
1. 项目概述
==========================================
1.1 项目背景
- 基于RuoYi-Vue-Plus框架构建企业级管理系统
- 集成Spring AI提供智能化功能
- 支持AI对话、智能分析、自动化处理等能力
1.2 技术栈
前端技术栈:
- Vue 3 + TypeScript
- Ant Design Vue
- Vite构建工具
- Pinia状态管理
- Vue Router路由管理
后端技术栈:
- Spring Boot 3.x
- Spring AI 0.8.x
- MyBatis Plus
- Redis缓存
- MySQL数据库
- Spring Security安全框架
==========================================
2. 系统架构设计
==========================================
2.1 整体架构
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端层 │ │ 网关层 │ │ 服务层 │
│ Vue3 + TS │───▶│ Gateway │───▶│ Spring Boot │
│ Ant Design │ │ 统一入口 │ │ Spring AI │
└─────────────────┘ └─────────────────┘ └─────────────────┘
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 数据层 │ │ 缓存层 │ │ AI服务层 │
│ MySQL │◀───│ Redis │◀───│ Spring AI │
│ 主从分离 │ │ 分布式缓存 │ │ OpenAI API │
└─────────────────┘ └─────────────────┘ └─────────────────┘
2.2 模块划分
- admin-pc: 管理后台前端
- module-system: 系统管理模块
- module-common: 公共模块
- module-pay: 支付模块
- module-base: 基础模块
==========================================
3. Spring AI集成方案
==========================================
3.1 依赖配置
```xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
```
3.2 配置文件
```yaml
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
base-url: https://api.openai.com/v1
chat:
options:
model: gpt-3.5-turbo
temperature: 0.7
max-tokens: 1000
```
3.3 AI服务层设计
```java
@Service
public class AIService {
@Autowired
private OpenAiChatClient chatClient;
// 智能对话
public String chat(String message) {
return chatClient.call(message);
}
// 智能分析
public AnalysisResult analyzeData(String data) {
// AI数据分析逻辑
}
// 智能推荐
public List<Recommendation> getRecommendations(String context) {
// AI推荐逻辑
}
}
```
==========================================
4. 功能模块设计
==========================================
4.1 智能对话模块
- 集成ChatGPT API
- 支持上下文对话
- 对话历史记录
- 多语言支持
4.2 智能分析模块
- 数据趋势分析
- 异常检测
- 预测分析
- 可视化展示
4.3 智能推荐模块
- 个性化推荐
- 内容推荐
- 用户行为分析
- 推荐算法优化
4.4 自动化处理模块
- 智能审批流程
- 自动分类
- 智能标签
- 自动化报告
==========================================
5. 数据库设计
==========================================
5.1 核心表结构
```sql
-- AI对话记录表
CREATE TABLE ai_chat_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
session_id VARCHAR(64),
message TEXT NOT NULL,
response TEXT,
model VARCHAR(50),
tokens_used INT,
create_time DATETIME,
INDEX idx_user_id (user_id),
INDEX idx_session_id (session_id)
);
-- AI分析结果表
CREATE TABLE ai_analysis_result (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
analysis_type VARCHAR(50),
data_source VARCHAR(100),
result_data JSON,
confidence DECIMAL(5,2),
create_time DATETIME,
INDEX idx_analysis_type (analysis_type)
);
-- 智能推荐表
CREATE TABLE ai_recommendation (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT,
item_type VARCHAR(50),
item_id BIGINT,
score DECIMAL(5,2),
reason TEXT,
create_time DATETIME,
INDEX idx_user_id (user_id),
INDEX idx_item_type (item_type)
);
```
==========================================
6. 前端界面设计
==========================================
6.1 智能对话界面
- 聊天窗口设计
- 消息气泡样式
- 输入框和发送按钮
- 历史记录展示
6.2 数据分析面板
- 图表展示区域
- 筛选条件设置
- 实时数据更新
- 导出功能
6.3 推荐展示页面
- 推荐卡片布局
- 个性化展示
- 交互反馈
- 推荐理由说明
==========================================
7. 安全设计
==========================================
7.1 API安全
- API密钥管理
- 请求频率限制
- 数据加密传输
- 访问权限控制
7.2 数据安全
- 敏感数据脱敏
- 数据备份策略
- 审计日志记录
- 隐私保护措施
==========================================
8. 性能优化
==========================================
8.1 缓存策略
- Redis缓存热点数据
- 本地缓存AI模型
- 缓存更新策略
- 缓存穿透防护
8.2 并发处理
- 异步处理AI请求
- 线程池配置
- 负载均衡
- 限流措施
==========================================
9. 部署方案
==========================================
9.1 开发环境
- Docker容器化
- 本地开发环境
- 热部署配置
- 调试工具集成
9.2 生产环境
- 云服务器部署
- 负载均衡配置
- 监控告警
- 日志管理
==========================================
10. 测试策略
==========================================
10.1 单元测试
- 服务层测试
- 控制器测试
- 数据访问层测试
- AI功能测试
10.2 集成测试
- API接口测试
- 前后端联调
- 性能压力测试
- 安全测试
==========================================
11. 运维监控
==========================================
11.1 系统监控
- 服务器监控
- 应用性能监控
- 数据库监控
- 网络监控
11.2 日志管理
- 统一日志格式
- 日志收集分析
- 错误告警
- 日志归档
==========================================
12. 项目计划
==========================================
12.1 开发阶段
第一阶段(2周):基础框架搭建
- RuoYi-Vue-Plus环境搭建
- Spring AI集成
- 基础功能开发
第二阶段(3周):核心功能开发
- 智能对话模块
- 数据分析功能
- 推荐系统开发
第三阶段(2周):优化测试
- 性能优化
- 功能测试
- 安全加固
第四阶段(1周):部署上线
- 生产环境部署
- 监控配置
- 文档完善
12.2 里程碑
- M1: 基础框架完成
- M2: 核心功能完成
- M3: 测试通过
- M4: 正式上线
==========================================
13. 风险评估
==========================================
13.1 技术风险
- AI API稳定性
- 性能瓶颈
- 数据安全
- 技术债务
13.2 应对措施
- 多AI服务商备选
- 性能监控优化
- 安全审计加固
- 代码重构优化
==========================================
14. 成本估算
==========================================
14.1 开发成本
- 人力成本:8人月
- 服务器成本:月均2000元
- AI API成本:月均1000元
- 其他成本:5000元
14.2 运维成本
- 服务器运维:月均1000元
- 监控服务:月均500元
- 备份存储:月均300元
==========================================
15. 总结
==========================================
本技术方案基于RuoYi-Vue-Plus框架,集成Spring AI提供智能化功能,通过合理的架构设计、安全措施和性能优化,构建一个功能完善、安全可靠的企业级管理系统。
主要优势:
1. 成熟稳定的基础框架
2. 强大的AI能力集成
3. 完善的权限管理
4. 良好的扩展性
5. 丰富的功能模块
通过本方案的实施,可以快速构建一个具有AI能力的现代化管理系统,提升用户体验和业务效率。
==========================================
文档版本:v1.0
创建时间:2025年1月
更新记录:
- v1.0: 初始版本
==========================================

+ 46
- 8
admin-pc/package-lock.json View File

@ -2400,6 +2400,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"co": "^4.6.0", "co": "^4.6.0",
"fast-deep-equal": "^1.0.0", "fast-deep-equal": "^1.0.0",
@ -2412,6 +2413,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
"integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
@ -2442,6 +2444,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ms": "^2.1.1" "ms": "^2.1.1"
} }
@ -2452,6 +2455,7 @@
"integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ajv": "^5.3.0", "ajv": "^5.3.0",
"babel-code-frame": "^6.22.0", "babel-code-frame": "^6.22.0",
@ -2520,6 +2524,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
"integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"esrecurse": "^4.1.0", "esrecurse": "^4.1.0",
"estraverse": "^4.1.1" "estraverse": "^4.1.1"
@ -2532,7 +2537,8 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/@vue/cli-plugin-eslint/node_modules/globby": { "node_modules/@vue/cli-plugin-eslint/node_modules/globby": {
"version": "9.2.0", "version": "9.2.0",
@ -2566,13 +2572,15 @@
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/@vue/cli-plugin-eslint/node_modules/ms": { "node_modules/@vue/cli-plugin-eslint/node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/@vue/cli-plugin-eslint/node_modules/pify": { "node_modules/@vue/cli-plugin-eslint/node_modules/pify": {
"version": "4.0.1", "version": "4.0.1",
@ -2588,6 +2596,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true, "dev": true,
"optional": true,
"bin": { "bin": {
"semver": "bin/semver" "semver": "bin/semver"
} }
@ -2606,6 +2615,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ansi-regex": "^3.0.0" "ansi-regex": "^3.0.0"
}, },
@ -3790,6 +3800,7 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
"integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"acorn": "^3.0.4" "acorn": "^3.0.4"
} }
@ -3799,6 +3810,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
"integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==",
"dev": true, "dev": true,
"optional": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -6153,6 +6165,7 @@
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
"integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"callsites": "^0.2.0" "callsites": "^0.2.0"
}, },
@ -6165,6 +6178,7 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
"integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -6283,7 +6297,8 @@
"version": "0.4.2", "version": "0.4.2",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/charenc": { "node_modules/charenc": {
"version": "0.0.2", "version": "0.0.2",
@ -6396,7 +6411,8 @@
"resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
"integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
"deprecated": "CircularJSON is in maintenance only, flatted is its successor.", "deprecated": "CircularJSON is in maintenance only, flatted is its successor.",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/clap": { "node_modules/clap": {
"version": "1.2.3", "version": "1.2.3",
@ -10322,6 +10338,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
"integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"acorn": "^5.5.0", "acorn": "^5.5.0",
"acorn-jsx": "^3.0.0" "acorn-jsx": "^3.0.0"
@ -10335,6 +10352,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
"integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
"dev": true, "dev": true,
"optional": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -10656,6 +10674,7 @@
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"chardet": "^0.4.0", "chardet": "^0.4.0",
"iconv-lite": "^0.4.17", "iconv-lite": "^0.4.17",
@ -10886,6 +10905,7 @@
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
"integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"flat-cache": "^1.2.1", "flat-cache": "^1.2.1",
"object-assign": "^4.0.1" "object-assign": "^4.0.1"
@ -11020,6 +11040,7 @@
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
"integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"circular-json": "^0.3.1", "circular-json": "^0.3.1",
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
@ -11036,6 +11057,7 @@
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"deprecated": "Rimraf versions prior to v4 are no longer supported", "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"glob": "^7.1.3" "glob": "^7.1.3"
}, },
@ -12246,6 +12268,7 @@
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
"integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ansi-escapes": "^3.0.0", "ansi-escapes": "^3.0.0",
"chalk": "^2.0.0", "chalk": "^2.0.0",
@ -12268,6 +12291,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
"integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
@ -12277,6 +12301,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ansi-regex": "^3.0.0" "ansi-regex": "^3.0.0"
}, },
@ -15250,6 +15275,7 @@
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
"integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
@ -18256,6 +18282,7 @@
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
"integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=4.0.0" "node": ">=4.0.0"
} }
@ -18525,6 +18552,7 @@
"resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
"integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"caller-path": "^0.1.0", "caller-path": "^0.1.0",
"resolve-from": "^1.0.0" "resolve-from": "^1.0.0"
@ -18538,6 +18566,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
"integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==",
"dev": true, "dev": true,
"optional": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -18802,13 +18831,15 @@
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
"integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/rx-lite-aggregates": { "node_modules/rx-lite-aggregates": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
"integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"rx-lite": "*" "rx-lite": "*"
} }
@ -19199,6 +19230,7 @@
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
"integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"is-fullwidth-code-point": "^2.0.0" "is-fullwidth-code-point": "^2.0.0"
}, },
@ -20056,6 +20088,7 @@
"resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
"integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"ajv": "^5.2.3", "ajv": "^5.2.3",
"ajv-keywords": "^2.1.0", "ajv-keywords": "^2.1.0",
@ -20070,6 +20103,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"co": "^4.6.0", "co": "^4.6.0",
"fast-deep-equal": "^1.0.0", "fast-deep-equal": "^1.0.0",
@ -20082,6 +20116,7 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
"integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==",
"dev": true, "dev": true,
"optional": true,
"peerDependencies": { "peerDependencies": {
"ajv": "^5.0.0" "ajv": "^5.0.0"
} }
@ -20090,13 +20125,15 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/table/node_modules/json-schema-traverse": { "node_modules/table/node_modules/json-schema-traverse": {
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
"dev": true
"dev": true,
"optional": true
}, },
"node_modules/tapable": { "node_modules/tapable": {
"version": "1.1.3", "version": "1.1.3",
@ -22480,6 +22517,7 @@
"resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
"integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==",
"dev": true, "dev": true,
"optional": true,
"dependencies": { "dependencies": {
"mkdirp": "^0.5.1" "mkdirp": "^0.5.1"
}, },


+ 2
- 2
admin-pc/src/views/book/check/achievement.vue View File

@ -107,8 +107,8 @@
</template> </template>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<!-- <a @click="handleEdit(record)">编辑</a>-->
<!-- <a-divider type="vertical" />-->
<a @click="handleApprove(record)" v-if="record.status === '0'">通过</a> <a @click="handleApprove(record)" v-if="record.status === '0'">通过</a>
<a-divider type="vertical" v-if="record.status === '0'" /> <a-divider type="vertical" v-if="record.status === '0'" />
<a @click="handleReject(record)" v-if="record.status === '0'">拒绝</a> <a @click="handleReject(record)" v-if="record.status === '0'">拒绝</a>


+ 2
- 2
admin-pc/src/views/book/check/chapter.vue View File

@ -81,8 +81,8 @@
</template> </template>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<!-- <a @click="handleEdit(record)">编辑</a>-->
<!-- <a-divider type="vertical" />-->
<a @click="handleApprove(record)">通过</a> <a @click="handleApprove(record)">通过</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a @click="handleReject(record)">拒绝</a> <a @click="handleReject(record)">拒绝</a>


+ 1
- 1
admin-pc/src/views/book/check/modules/AchievementForm.vue View File

@ -45,7 +45,7 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="审核状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status"> <a-form-model-item label="审核状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status">
<j-dict-select-tag type="list" v-model="model.status" dictCode="achievement_log_status" placeholder="请选择审核状态" />
<j-dict-select-tag type="list" v-model="model.status" dictCode="book_status" placeholder="请选择审核状态" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>


+ 12018
- 12008
admin-pc/yarn.lock
File diff suppressed because it is too large
View File


+ 1
- 0
module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java View File

@ -22,6 +22,7 @@ import org.jeecg.modules.commonMoneyLog.service.ICommonMoneyLogService;
import org.jeecg.modules.commonMyBook.entity.CommonMyBook; import org.jeecg.modules.commonMyBook.entity.CommonMyBook;
import org.jeecg.modules.commonMyBook.service.ICommonMyBookService; import org.jeecg.modules.commonMyBook.service.ICommonMyBookService;
import org.jeecg.modules.commonMyGift.service.ICommonMyGiftService; import org.jeecg.modules.commonMyGift.service.ICommonMyGiftService;
import org.jeecg.modules.commonNotice.entity.CommonNotice;
import org.jeecg.modules.commonNotice.service.ICommonNoticeService; import org.jeecg.modules.commonNotice.service.ICommonNoticeService;
import org.jeecg.modules.commonRanking.service.ICommonRankingService; import org.jeecg.modules.commonRanking.service.ICommonRankingService;
import org.jeecg.modules.commonShop.entity.CommonShop; import org.jeecg.modules.commonShop.entity.CommonShop;


+ 1
- 1
module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java View File

@ -48,7 +48,7 @@ public class AppletMyBookServiceImpl implements AppletMyBookService {
.eq(CommonShop::getUserId,hanHaiMember.getId()) .eq(CommonShop::getUserId,hanHaiMember.getId())
.orderByDesc(CommonShop::getCreateTime) .orderByDesc(CommonShop::getCreateTime)
.page(page); .page(page);
return Result.OK("我的书架",pageList);
return Result.OK("获取我的作品带分页",pageList);
} }


+ 23
- 5
module-common/src/main/java/org/jeecg/common/sms/service/SmsService.java View File

@ -145,14 +145,32 @@ public class SmsService {
/** /**
* MD5加密 * MD5加密
*/ */
private String md5(String input) throws NoSuchAlgorithmException {
// private String md5(String input) throws NoSuchAlgorithmException {
// MessageDigest md = MessageDigest.getInstance("MD5");
// byte[] digest = md.digest(input.getBytes());
// StringBuilder sb = new StringBuilder();
// for (byte b : digest) {
// sb.append(String.format("%02x", b));
// }
// return sb.toString();
// }
private static String md5(String input) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5"); MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(input.getBytes()); byte[] digest = md.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
return bytesToHex(digest);
}
private static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
} }
return sb.toString();
return hexString.toString();
} }
/** /**


+ 10
- 0
module-common/src/main/java/org/jeecg/modules/commonBanner/entity/CommonBanner.java View File

@ -59,4 +59,14 @@ public class CommonBanner implements Serializable {
@Excel(name = "说明", width = 15) @Excel(name = "说明", width = 15)
@ApiModelProperty(value = "说明") @ApiModelProperty(value = "说明")
private java.lang.String details; private java.lang.String details;
/**小程序跳转地址*/
@Excel(name = "小程序跳转地址", width = 15)
@ApiModelProperty(value = "小程序跳转地址")
private java.lang.String appPath;
/**PC跳转地址*/
@Excel(name = "PC跳转地址", width = 15)
@ApiModelProperty(value = "PC跳转地址")
private java.lang.String pcPath;
} }

Loading…
Cancel
Save