config挂载
This commit is contained in:
@@ -6,8 +6,10 @@ FROM mysql:8.0
|
|||||||
ENV LANG=C.UTF-8 \
|
ENV LANG=C.UTF-8 \
|
||||||
TZ=Asia/Shanghai
|
TZ=Asia/Shanghai
|
||||||
|
|
||||||
# 复制MySQL配置文件
|
# 注意:MySQL配置有两种方式
|
||||||
COPY docker/mysql/my.cnf /etc/mysql/conf.d/my.cnf
|
# 1. 通过docker-compose.yml的command参数(基础配置)
|
||||||
|
# 2. 通过挂载my.cnf文件(高级配置,可选)
|
||||||
|
# docker-compose.yml中可以取消注释: ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
|
||||||
|
|
||||||
# 创建SQL目录
|
# 创建SQL目录
|
||||||
RUN mkdir -p /docker-entrypoint-initdb.d /opt/sql
|
RUN mkdir -p /docker-entrypoint-initdb.d /opt/sql
|
||||||
@@ -61,7 +63,7 @@ source reInit.sh
|
|||||||
# 调用reInit.sh的核心函数(跳过备份和删除)
|
# 调用reInit.sh的核心函数(跳过备份和删除)
|
||||||
execute_init_script # 执行initAll.sql
|
execute_init_script # 执行initAll.sql
|
||||||
import_sensitive_words # 导入敏感词
|
import_sensitive_words # 导入敏感词
|
||||||
|
|
||||||
# Docker环境特定配置:更新爬虫路径
|
# Docker环境特定配置:更新爬虫路径
|
||||||
echo "更新Docker环境配置..."
|
echo "更新Docker环境配置..."
|
||||||
mysql -uroot "${MYSQL_DATABASE}" <<EOSQL
|
mysql -uroot "${MYSQL_DATABASE}" <<EOSQL
|
||||||
|
|||||||
@@ -1,516 +0,0 @@
|
|||||||
# Docker构建流程检查报告
|
|
||||||
|
|
||||||
## 📋 检查项目清单
|
|
||||||
|
|
||||||
### ✅ 1. build.sh 构建流程
|
|
||||||
|
|
||||||
#### 1.1 Git更新代码
|
|
||||||
```bash
|
|
||||||
# 第59-81行
|
|
||||||
log_step "步骤1: 拉取最新代码"
|
|
||||||
git pull origin main || git pull origin master
|
|
||||||
```
|
|
||||||
**状态**: ✅ 已实现
|
|
||||||
- 检查未提交更改
|
|
||||||
- 支持main/master分支
|
|
||||||
- 错误处理
|
|
||||||
|
|
||||||
#### 1.2 编译后端
|
|
||||||
```bash
|
|
||||||
# 第84-111行
|
|
||||||
cd "${SERV_PATH}"
|
|
||||||
mvn clean
|
|
||||||
mvn package -DskipTests -pl admin -am
|
|
||||||
```
|
|
||||||
**状态**: ✅ 已实现
|
|
||||||
- 清理旧构建
|
|
||||||
- 编译admin模块
|
|
||||||
- 验证jar包存在
|
|
||||||
- 显示文件大小
|
|
||||||
|
|
||||||
**产物**: `schoolNewsServ/admin/target/admin-1.0.0.jar`
|
|
||||||
|
|
||||||
#### 1.3 构建前端
|
|
||||||
```bash
|
|
||||||
# 第113-148行
|
|
||||||
cd "${WEB_PATH}"
|
|
||||||
npm install # 如果需要
|
|
||||||
rm -rf dist
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
**状态**: ✅ 已实现
|
|
||||||
- 检查依赖
|
|
||||||
- 清理旧构建
|
|
||||||
- 构建dist目录
|
|
||||||
- 验证文件数量
|
|
||||||
|
|
||||||
**产物**: `schoolNewsWeb/dist/`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🐳 2. Docker镜像构建
|
|
||||||
|
|
||||||
### 2.1 镜像版本命名
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 第45行
|
|
||||||
IMAGE_VERSION=$(date +%Y%m%d_%H%M%S)
|
|
||||||
```
|
|
||||||
|
|
||||||
**格式**: `yyyymmdd_HHMMSS`
|
|
||||||
**示例**: `20251124_143025`
|
|
||||||
**状态**: ✅ 符合要求
|
|
||||||
|
|
||||||
### 2.2 后端镜像(school-news-serv)
|
|
||||||
|
|
||||||
**Dockerfile.serv 检查**:
|
|
||||||
|
|
||||||
```dockerfile
|
|
||||||
FROM eclipse-temurin:21-jre
|
|
||||||
|
|
||||||
# ✅ 包含jar包
|
|
||||||
COPY schoolNewsServ/admin/target/admin-1.0.0.jar /app/app.jar
|
|
||||||
|
|
||||||
# ✅ 包含爬虫
|
|
||||||
COPY schoolNewsCrawler/ /app/crawler/
|
|
||||||
|
|
||||||
# ✅ 安装爬虫依赖
|
|
||||||
RUN pip install -r /app/crawler/requirements.txt
|
|
||||||
|
|
||||||
# ✅ 配置文件模板(可挂载)
|
|
||||||
COPY application.yml /app/config/application.yml.template
|
|
||||||
COPY log4j2-spring.xml /app/config/log4j2-spring.xml.template
|
|
||||||
|
|
||||||
# ✅ 安装MySQL客户端(用于配置更新)
|
|
||||||
RUN apt-get install -y default-mysql-client
|
|
||||||
```
|
|
||||||
|
|
||||||
**挂载点**:
|
|
||||||
- ✅ `/app/config/application.yml` - 配置文件
|
|
||||||
- ✅ `/app/config/log4j2-spring.xml` - 日志配置
|
|
||||||
- ✅ `/app/logs` - 日志目录
|
|
||||||
- ✅ `/app/uploads` - 上传文件
|
|
||||||
- ✅ `/app/crawler` - 爬虫脚本
|
|
||||||
|
|
||||||
**结论**: ✅ **完全符合要求**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2.3 前端镜像(school-news-web)
|
|
||||||
|
|
||||||
**Dockerfile.web 检查**:
|
|
||||||
|
|
||||||
```dockerfile
|
|
||||||
FROM nginx:alpine
|
|
||||||
|
|
||||||
# ✅ 包含构建结果
|
|
||||||
COPY schoolNewsWeb/dist/ /usr/share/nginx/html/schoolNewsWeb/
|
|
||||||
|
|
||||||
# ✅ 配置文件(可外挂)
|
|
||||||
COPY schoolNewsWeb/public/app-config.js /app/config/app-config.js.template
|
|
||||||
|
|
||||||
# ✅ 启动时处理配置替换
|
|
||||||
COPY schoolNewsWeb/docker/start.sh /app/start.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**配置外挂机制**:
|
|
||||||
```bash
|
|
||||||
# start.sh
|
|
||||||
if [ -f /app/config/app-config.js ]; then
|
|
||||||
cp /app/config/app-config.js /usr/share/nginx/html/schoolNewsWeb/app-config.js
|
|
||||||
fi
|
|
||||||
```
|
|
||||||
|
|
||||||
**挂载点**:
|
|
||||||
- ✅ `/app/config/app-config.js` - 运行时配置(可整个替换)
|
|
||||||
- ✅ `/app/logs` - 日志目录
|
|
||||||
|
|
||||||
**配置加载流程**:
|
|
||||||
```
|
|
||||||
1. HTML引用 <script src="/schoolNewsWeb/app-config.js">
|
|
||||||
2. 设置 window.APP_RUNTIME_CONFIG
|
|
||||||
3. src/config/index.ts 读取 window.APP_RUNTIME_CONFIG
|
|
||||||
4. 应用使用配置
|
|
||||||
```
|
|
||||||
|
|
||||||
**结论**: ✅ **完全符合要求** - 可外挂配置
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2.4 MySQL镜像(school-news-mysql)
|
|
||||||
|
|
||||||
**Dockerfile.mysql 检查**:
|
|
||||||
|
|
||||||
```dockerfile
|
|
||||||
FROM mysql:8.0
|
|
||||||
|
|
||||||
# ✅ 包含所有SQL文件
|
|
||||||
COPY schoolNewsServ/.bin/mysql/sql/ /opt/sql/
|
|
||||||
|
|
||||||
# ✅ 复用reInit.sh
|
|
||||||
COPY schoolNewsServ/.bin/mysql/sql/reInit.sh /opt/sql/
|
|
||||||
|
|
||||||
# ✅ 创建初始化脚本
|
|
||||||
RUN cat > /docker-entrypoint-initdb.d/01-init-database.sh <<'EOF'
|
|
||||||
# Source reInit.sh
|
|
||||||
source reInit.sh
|
|
||||||
# 调用核心函数
|
|
||||||
execute_init_script # 执行initAll.sql
|
|
||||||
import_sensitive_words # 导入敏感词
|
|
||||||
# UPDATE Docker特定配置
|
|
||||||
UPDATE tb_sys_config SET config_value='/usr/bin/python3' WHERE config_key='crawler.pythonPath';
|
|
||||||
EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
**初始化流程**:
|
|
||||||
```
|
|
||||||
容器启动
|
|
||||||
↓
|
|
||||||
执行 01-init-database.sh
|
|
||||||
↓
|
|
||||||
source reInit.sh(加载函数)
|
|
||||||
↓
|
|
||||||
execute_init_script()
|
|
||||||
└─ mysql < initAll.sql
|
|
||||||
├─ SOURCE createDB.sql
|
|
||||||
├─ SOURCE createTableUser.sql
|
|
||||||
├─ SOURCE createTableNews.sql
|
|
||||||
├─ ... (13个createTable)
|
|
||||||
├─ SOURCE initMenuData.sql
|
|
||||||
└─ SOURCE initAllData.sql
|
|
||||||
↓
|
|
||||||
import_sensitive_words()
|
|
||||||
└─ bash importSensitiveWords.sh -y
|
|
||||||
└─ 导入1.2万个敏感词
|
|
||||||
↓
|
|
||||||
UPDATE Docker配置
|
|
||||||
├─ crawler.pythonPath = /usr/bin/python3
|
|
||||||
└─ crawler.basePath = /app/crawler
|
|
||||||
↓
|
|
||||||
完成 ✅
|
|
||||||
```
|
|
||||||
|
|
||||||
**优势**:
|
|
||||||
- ✅ 完全复用reInit.sh逻辑
|
|
||||||
- ✅ 自动同步(修改reInit.sh,Docker自动更新)
|
|
||||||
- ✅ 环境变量可覆盖默认配置
|
|
||||||
|
|
||||||
**结论**: ✅ **完全符合要求** - 通过reInit.sh构建数据库
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 3. 镜像导出
|
|
||||||
|
|
||||||
### 3.1 导出格式
|
|
||||||
|
|
||||||
**检查 build.sh 导出逻辑**:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 预期位置:第208-250行
|
|
||||||
docker save -o "${BUILD_OUTPUT}/school-news-mysql_${IMAGE_VERSION}.tar" school-news-mysql:${IMAGE_VERSION}
|
|
||||||
docker save -o "${BUILD_OUTPUT}/school-news-serv_${IMAGE_VERSION}.tar" school-news-serv:${IMAGE_VERSION}
|
|
||||||
docker save -o "${BUILD_OUTPUT}/school-news-web_${IMAGE_VERSION}.tar" school-news-web:${IMAGE_VERSION}
|
|
||||||
```
|
|
||||||
|
|
||||||
**导出文件**:
|
|
||||||
- `school-news-mysql_20251124_143025.tar`
|
|
||||||
- `school-news-serv_20251124_143025.tar`
|
|
||||||
- `school-news-web_20251124_143025.tar`
|
|
||||||
|
|
||||||
**状态**: ⏳ 需要确认build.sh中是否实现
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔍 4. docker-compose.yml 检查
|
|
||||||
|
|
||||||
### 4.1 MySQL服务
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
mysql:
|
|
||||||
image: school-news-mysql:latest
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
|
|
||||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-school_news}
|
|
||||||
volumes:
|
|
||||||
- mysql-data:/var/lib/mysql # ✅ 数据持久化
|
|
||||||
healthcheck:
|
|
||||||
test: mysqladmin ping # ✅ 健康检查
|
|
||||||
```
|
|
||||||
|
|
||||||
**状态**: ✅ 已配置
|
|
||||||
|
|
||||||
### 4.2 后端服务
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
school-news-serv:
|
|
||||||
image: school-news-serv:latest
|
|
||||||
depends_on:
|
|
||||||
mysql:
|
|
||||||
condition: service_healthy # ✅ 等待MySQL就绪
|
|
||||||
volumes:
|
|
||||||
- ./config/application.yml:/app/config/application.yml # ✅ 配置挂载
|
|
||||||
- ./config/log4j2-spring.xml:/app/config/log4j2-spring.xml # ✅ 日志配置
|
|
||||||
- ./logs/serv:/app/logs # ✅ 日志目录
|
|
||||||
- ./uploads:/app/uploads # ✅ 上传文件
|
|
||||||
- ../schoolNewsCrawler:/app/crawler # ✅ 爬虫脚本
|
|
||||||
```
|
|
||||||
|
|
||||||
**状态**: ✅ 已配置,可挂载配置
|
|
||||||
|
|
||||||
### 4.3 前端服务
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
school-news-web:
|
|
||||||
image: school-news-web:latest
|
|
||||||
depends_on:
|
|
||||||
- school-news-serv
|
|
||||||
volumes:
|
|
||||||
- ./config/web-app-config.js:/app/config/app-config.js # ✅ 配置挂载
|
|
||||||
- ./logs/web:/app/logs # ✅ 日志目录
|
|
||||||
```
|
|
||||||
|
|
||||||
**状态**: ✅ 已配置,可外挂配置
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📊 5. 整体流程总结
|
|
||||||
|
|
||||||
### 构建流程
|
|
||||||
|
|
||||||
```
|
|
||||||
./build.sh build save serv web
|
|
||||||
↓
|
|
||||||
1. Git Pull
|
|
||||||
└─ 拉取最新代码
|
|
||||||
↓
|
|
||||||
2. 编译后端
|
|
||||||
├─ mvn clean
|
|
||||||
├─ mvn package
|
|
||||||
└─ 产物: admin-1.0.0.jar
|
|
||||||
↓
|
|
||||||
3. 构建前端
|
|
||||||
├─ npm install
|
|
||||||
├─ npm run build
|
|
||||||
└─ 产物: dist/
|
|
||||||
↓
|
|
||||||
4. 构建Docker镜像
|
|
||||||
├─ docker build -t school-news-mysql:${IMAGE_VERSION}
|
|
||||||
├─ docker build -t school-news-serv:${IMAGE_VERSION}
|
|
||||||
├─ docker build -t school-news-web:${IMAGE_VERSION}
|
|
||||||
└─ 同时打 latest 标签
|
|
||||||
↓
|
|
||||||
5. 导出镜像
|
|
||||||
├─ docker save school-news-mysql_${IMAGE_VERSION}.tar
|
|
||||||
├─ docker save school-news-serv_${IMAGE_VERSION}.tar
|
|
||||||
└─ docker save school-news-web_${IMAGE_VERSION}.tar
|
|
||||||
```
|
|
||||||
|
|
||||||
### 部署流程
|
|
||||||
|
|
||||||
```
|
|
||||||
cd docker
|
|
||||||
docker-compose up -d
|
|
||||||
↓
|
|
||||||
MySQL容器启动
|
|
||||||
├─ 执行01-init-database.sh
|
|
||||||
├─ source reInit.sh
|
|
||||||
├─ execute_init_script
|
|
||||||
├─ import_sensitive_words
|
|
||||||
└─ UPDATE Docker配置
|
|
||||||
↓
|
|
||||||
后端容器启动
|
|
||||||
├─ start.sh 更新数据库配置
|
|
||||||
├─ 启动Spring Boot应用
|
|
||||||
└─ 健康检查通过
|
|
||||||
↓
|
|
||||||
前端容器启动
|
|
||||||
├─ start.sh 处理app-config.js
|
|
||||||
├─ 启动Nginx
|
|
||||||
└─ 提供服务
|
|
||||||
↓
|
|
||||||
完成 ✅
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ 检查结论
|
|
||||||
|
|
||||||
### 完全符合要求
|
|
||||||
|
|
||||||
| 检查项 | 要求 | 实际情况 | 状态 |
|
|
||||||
|--------|------|---------|------|
|
|
||||||
| 1.1 Git更新 | 拉取最新代码 | ✅ 支持main/master | ✅ |
|
|
||||||
| 1.2 编译后端 | 生成jar包 | ✅ admin-1.0.0.jar | ✅ |
|
|
||||||
| 1.3 构建前端 | 生成dist | ✅ dist目录 | ✅ |
|
|
||||||
| 1.4 镜像版本 | yyyymmddHHmmss | ✅ `date +%Y%m%d_%H%M%S` | ✅ |
|
|
||||||
| 1.4.1 后端镜像 | jar+爬虫+可挂载配置 | ✅ 完整实现 | ✅ |
|
|
||||||
| 1.4.2 前端镜像 | dist+可外挂配置 | ✅ 完整实现 | ✅ |
|
|
||||||
| 1.4.3 MySQL镜像 | SQL+reInit.sh | ✅ 完整实现 | ✅ |
|
|
||||||
| 2. docker-compose | 运行项目 | ✅ 完整配置 | ✅ |
|
|
||||||
|
|
||||||
### ✅ 镜像构建详情(已确认)
|
|
||||||
|
|
||||||
#### 步骤4: 构建Docker镜像(第150-203行)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# MySQL镜像
|
|
||||||
docker build -t school-news-mysql:${IMAGE_VERSION} -f docker/Dockerfile.mysql .
|
|
||||||
docker tag school-news-mysql:${IMAGE_VERSION} school-news-mysql:latest
|
|
||||||
|
|
||||||
# 后端镜像
|
|
||||||
docker build -t school-news-serv:${IMAGE_VERSION} -f docker/Dockerfile.serv .
|
|
||||||
docker tag school-news-serv:${IMAGE_VERSION} school-news-serv:latest
|
|
||||||
|
|
||||||
# 前端镜像
|
|
||||||
docker build -t school-news-web:${IMAGE_VERSION} -f docker/Dockerfile.web .
|
|
||||||
docker tag school-news-web:${IMAGE_VERSION} school-news-web:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
**标签策略**: ✅ 每个镜像同时打两个标签
|
|
||||||
- `school-news-xxx:20251124_143025` - 版本标签
|
|
||||||
- `school-news-xxx:latest` - 最新标签
|
|
||||||
|
|
||||||
#### 步骤5: 导出镜像(第206-251行)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# MySQL镜像
|
|
||||||
docker save -o school-news-mysql_${IMAGE_VERSION}.tar school-news-mysql:${IMAGE_VERSION}
|
|
||||||
|
|
||||||
# 后端镜像
|
|
||||||
docker save -o school-news-serv_${IMAGE_VERSION}.tar school-news-serv:${IMAGE_VERSION}
|
|
||||||
|
|
||||||
# 前端镜像
|
|
||||||
docker save -o school-news-web_${IMAGE_VERSION}.tar school-news-web:${IMAGE_VERSION}
|
|
||||||
```
|
|
||||||
|
|
||||||
**导出位置**: `build-output/`
|
|
||||||
**文件命名**: ✅ 符合要求
|
|
||||||
- `school-news-mysql_20251124_143025.tar`
|
|
||||||
- `school-news-serv_20251124_143025.tar`
|
|
||||||
- `school-news-web_20251124_143025.tar`
|
|
||||||
|
|
||||||
**可选压缩**: ✅ 支持gzip压缩(可选)
|
|
||||||
|
|
||||||
#### 部署说明文件(第277-343行)
|
|
||||||
|
|
||||||
自动生成 `部署说明_${IMAGE_VERSION}.txt`,包含:
|
|
||||||
- ✅ 构建信息(时间、版本、Git信息)
|
|
||||||
- ✅ 镜像文件列表
|
|
||||||
- ✅ 部署步骤(6个步骤)
|
|
||||||
- ✅ 访问地址
|
|
||||||
- ✅ 注意事项
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✅ 最终检查结论
|
|
||||||
|
|
||||||
### 所有要求已完全实现
|
|
||||||
|
|
||||||
| 检查项 | 要求 | 实际情况 | 状态 |
|
|
||||||
|--------|------|---------|------|
|
|
||||||
| **1.1 Git更新** | 拉取最新代码 | git pull origin main/master | ✅ |
|
|
||||||
| **1.2 编译后端** | 生成jar包 | mvn package → admin-1.0.0.jar | ✅ |
|
|
||||||
| **1.3 构建前端** | 生成dist | npm run build → dist/ | ✅ |
|
|
||||||
| **1.4 镜像版本** | yyyymmddHHmmss | `date +%Y%m%d_%H%M%S` | ✅ |
|
|
||||||
| **1.4.1 后端镜像** | jar+爬虫+可挂载配置 | ✅ 完整实现 | ✅ |
|
|
||||||
| **1.4.2 前端镜像** | dist+可外挂配置 | ✅ app-config.js外挂 | ✅ |
|
|
||||||
| **1.4.3 MySQL镜像** | SQL+reInit.sh构建 | ✅ 复用reInit.sh | ✅ |
|
|
||||||
| **导出镜像** | 以版本号命名 | school-news-xxx_${IMAGE_VERSION}.tar | ✅ |
|
|
||||||
| **2. docker-compose** | 运行项目 | ✅ 完整配置,服务依赖正确 | ✅ |
|
|
||||||
|
|
||||||
### 额外实现的功能
|
|
||||||
|
|
||||||
| 功能 | 说明 | 价值 |
|
|
||||||
|------|------|------|
|
|
||||||
| 镜像双标签 | VERSION + latest | ✅ 便于部署 |
|
|
||||||
| 可选压缩 | gzip压缩镜像文件 | ✅ 减少传输大小 |
|
|
||||||
| 部署说明 | 自动生成详细说明 | ✅ 降低部署难度 |
|
|
||||||
| 构建验证 | 验证jar/dist存在 | ✅ 提前发现问题 |
|
|
||||||
| 文件大小显示 | 显示各产物大小 | ✅ 便于监控 |
|
|
||||||
|
|
||||||
### 完整构建流程
|
|
||||||
|
|
||||||
```
|
|
||||||
./build.sh build save serv web
|
|
||||||
↓
|
|
||||||
【步骤1】Git Pull
|
|
||||||
└─ 检查未提交更改 → 拉取代码 → 验证
|
|
||||||
↓
|
|
||||||
【步骤2】编译后端
|
|
||||||
└─ mvn clean → mvn package → 验证jar包(45MB)
|
|
||||||
↓
|
|
||||||
【步骤3】构建前端
|
|
||||||
└─ npm install → npm run build → 验证dist(120个文件, 5MB)
|
|
||||||
↓
|
|
||||||
【步骤4】构建镜像
|
|
||||||
├─ MySQL镜像: school-news-mysql:20251124_143025 + latest
|
|
||||||
├─ 后端镜像: school-news-serv:20251124_143025 + latest
|
|
||||||
└─ 前端镜像: school-news-web:20251124_143025 + latest
|
|
||||||
↓
|
|
||||||
【步骤5】导出镜像
|
|
||||||
├─ school-news-mysql_20251124_143025.tar (650MB)
|
|
||||||
├─ school-news-serv_20251124_143025.tar (850MB)
|
|
||||||
├─ school-news-web_20251124_143025.tar (45MB)
|
|
||||||
└─ 可选gzip压缩(节省60%空间)
|
|
||||||
↓
|
|
||||||
【生成文档】
|
|
||||||
└─ 部署说明_20251124_143025.txt
|
|
||||||
↓
|
|
||||||
【构建摘要】
|
|
||||||
└─ 显示所有产物、大小、位置
|
|
||||||
```
|
|
||||||
|
|
||||||
### 部署流程
|
|
||||||
|
|
||||||
```
|
|
||||||
目标服务器
|
|
||||||
↓
|
|
||||||
1. 加载镜像
|
|
||||||
docker load -i school-news-mysql_xxx.tar
|
|
||||||
docker load -i school-news-serv_xxx.tar
|
|
||||||
docker load -i school-news-web_xxx.tar
|
|
||||||
↓
|
|
||||||
2. 验证镜像
|
|
||||||
docker images | grep school-news
|
|
||||||
↓
|
|
||||||
3. 启动服务
|
|
||||||
cd docker
|
|
||||||
docker-compose up -d
|
|
||||||
↓
|
|
||||||
4. 验证服务
|
|
||||||
├─ MySQL: 执行01-init-database.sh → reInit.sh → 初始化完成
|
|
||||||
├─ 后端: start.sh → 更新配置 → Spring Boot启动 → 健康检查
|
|
||||||
└─ 前端: start.sh → 处理app-config.js → Nginx启动
|
|
||||||
↓
|
|
||||||
5. 访问系统
|
|
||||||
http://localhost:8080/schoolNewsWeb/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎉 总体评价
|
|
||||||
|
|
||||||
**状态**: ✅✅✅ **完全符合所有要求**
|
|
||||||
|
|
||||||
### 优势
|
|
||||||
|
|
||||||
1. **完整性** - 所有要求项已100%实现
|
|
||||||
2. **自动化** - 一键构建、导出、生成说明
|
|
||||||
3. **可维护性** - 复用reInit.sh,单一数据源
|
|
||||||
4. **灵活性** - 配置可外挂,无需重建镜像
|
|
||||||
5. **健壮性** - 完善的错误处理和验证
|
|
||||||
6. **文档化** - 自动生成部署说明
|
|
||||||
|
|
||||||
### 设计亮点
|
|
||||||
|
|
||||||
1. **前端配置外挂** - app-config.js方案,真正实现运行时配置
|
|
||||||
2. **MySQL初始化** - 完全复用reInit.sh,避免代码重复
|
|
||||||
3. **环境变量覆盖** - `${VAR:-default}`语法,兼容多环境
|
|
||||||
4. **双标签策略** - VERSION + latest,便于版本管理
|
|
||||||
5. **构建验证** - 每步验证产物,及时发现问题
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**检查时间**: 2025-11-24
|
|
||||||
**检查人员**: Cascade
|
|
||||||
**最终状态**: ✅ **所有检查项通过** 🎉
|
|
||||||
@@ -17,7 +17,8 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
# 数据持久化
|
# 数据持久化
|
||||||
- mysql-data:/var/lib/mysql
|
- mysql-data:/var/lib/mysql
|
||||||
# 配置文件(可选覆盖)
|
# 自定义配置文件(可选,取消注释以启用)
|
||||||
|
# 如需自定义MySQL配置,取消下面的注释并修改mysql/my.cnf
|
||||||
# - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
|
# - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
|
||||||
command:
|
command:
|
||||||
- --character-set-server=utf8mb4
|
- --character-set-server=utf8mb4
|
||||||
|
|||||||
@@ -1,372 +0,0 @@
|
|||||||
# Docker环境数据库初始化指南
|
|
||||||
|
|
||||||
## 📋 概述
|
|
||||||
|
|
||||||
本指南说明如何为Docker环境准备数据库初始化脚本,参考 `schoolNewsServ/.bin/mysql/sql/reInit.sh` 的实现。
|
|
||||||
|
|
||||||
## 🎯 初始化流程
|
|
||||||
|
|
||||||
### MySQL容器启动流程
|
|
||||||
|
|
||||||
```
|
|
||||||
Docker容器启动
|
|
||||||
↓
|
|
||||||
执行 /docker-entrypoint-initdb.d/ 中的脚本(按字母顺序)
|
|
||||||
↓
|
|
||||||
01-init-database.sql → 创建数据库和初始化标记表
|
|
||||||
↓
|
|
||||||
02-create-tables.sql → 创建所有业务表
|
|
||||||
↓
|
|
||||||
03-init-data.sql → 导入初始数据
|
|
||||||
↓
|
|
||||||
数据库就绪
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📂 文件说明
|
|
||||||
|
|
||||||
### 现有文件
|
|
||||||
|
|
||||||
| 文件 | 说明 | 状态 |
|
|
||||||
|------|------|------|
|
|
||||||
| `01-init-database.sql` | 创建数据库和_db_init_status表 | ✅ 已存在 |
|
|
||||||
| `README.md` | 数据库初始化说明 | ✅ 已存在 |
|
|
||||||
|
|
||||||
### 需要准备的文件
|
|
||||||
|
|
||||||
| 文件 | 说明 | 来源 |
|
|
||||||
|------|------|------|
|
|
||||||
| `02-create-tables.sql` | 所有表结构 | 从 createTable*.sql 合并 |
|
|
||||||
| `03-init-data.sql` | 初始数据 | 从 init*.sql 合并 |
|
|
||||||
|
|
||||||
## 🔧 准备方法
|
|
||||||
|
|
||||||
### 方式1: 使用自动脚本(推荐)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd docker/init-db
|
|
||||||
chmod +x prepare-sql.sh
|
|
||||||
./prepare-sql.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
脚本会自动:
|
|
||||||
1. 备份现有SQL文件
|
|
||||||
2. 合并所有createTable*.sql到02-create-tables.sql
|
|
||||||
3. 合并所有init*.sql到03-init-data.sql
|
|
||||||
4. 添加Docker特定配置(爬虫路径等)
|
|
||||||
5. 生成统计信息
|
|
||||||
|
|
||||||
### 方式2: 手动复制
|
|
||||||
|
|
||||||
#### 步骤1: 准备表结构
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd schoolNewsServ/.bin/mysql/sql
|
|
||||||
|
|
||||||
# 合并所有createTable*.sql
|
|
||||||
cat createTableUser.sql \
|
|
||||||
createTablePermission.sql \
|
|
||||||
createTablePermissionControl.sql \
|
|
||||||
createTableResource.sql \
|
|
||||||
createTableCourse.sql \
|
|
||||||
createTableLearning.sql \
|
|
||||||
createTableUserCenter.sql \
|
|
||||||
createTableAI.sql \
|
|
||||||
createTableSystem.sql \
|
|
||||||
createTableAchievement.sql \
|
|
||||||
createTableCrontab.sql \
|
|
||||||
createTableMessage.sql \
|
|
||||||
createTableSensitive.sql \
|
|
||||||
> ../../docker/init-db/02-create-tables.sql
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 步骤2: 准备初始数据
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 合并所有init*.sql
|
|
||||||
cat initMenuData.sql \
|
|
||||||
initAllData.sql \
|
|
||||||
initCrontabMetaData.sql \
|
|
||||||
> ../../docker/init-db/03-init-data.sql
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 步骤3: 添加Docker配置
|
|
||||||
|
|
||||||
在 `03-init-data.sql` 末尾添加:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- Docker环境爬虫配置
|
|
||||||
INSERT IGNORE INTO tb_sys_config (config_key, config_value, config_desc, created_at)
|
|
||||||
VALUES
|
|
||||||
('crawler.pythonPath', '/usr/bin/python3', 'Docker容器内Python路径', NOW()),
|
|
||||||
('crawler.basePath', '/app/crawler', 'Docker容器内爬虫脚本路径', NOW());
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔍 脚本内容说明
|
|
||||||
|
|
||||||
### initAll.sql 结构
|
|
||||||
|
|
||||||
基于 `schoolNewsServ/.bin/mysql/sql/initAll.sql`:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- 1. 创建数据库
|
|
||||||
SOURCE createDB.sql;
|
|
||||||
|
|
||||||
-- 2-14. 创建各模块表
|
|
||||||
SOURCE createTableUser.sql;
|
|
||||||
SOURCE createTablePermission.sql;
|
|
||||||
SOURCE createTablePermissionControl.sql;
|
|
||||||
SOURCE createTableResource.sql;
|
|
||||||
SOURCE createTableCourse.sql;
|
|
||||||
SOURCE createTableLearning.sql;
|
|
||||||
SOURCE createTableUserCenter.sql;
|
|
||||||
SOURCE createTableAI.sql;
|
|
||||||
SOURCE createTableSystem.sql;
|
|
||||||
SOURCE createTableAchievement.sql;
|
|
||||||
SOURCE createTableCrontab.sql;
|
|
||||||
SOURCE createTableMessage.sql;
|
|
||||||
SOURCE createTableSensitive.sql;
|
|
||||||
|
|
||||||
-- 15-17. 插入初始数据
|
|
||||||
SOURCE initMenuData.sql;
|
|
||||||
SOURCE initAllData.sql;
|
|
||||||
SOURCE initCrontabMetaData.sql;
|
|
||||||
```
|
|
||||||
|
|
||||||
### 各模块说明
|
|
||||||
|
|
||||||
| 模块 | 表数量 | 说明 |
|
|
||||||
|------|--------|------|
|
|
||||||
| User | 3+ | 用户、部门、角色 |
|
|
||||||
| Permission | 10+ | 菜单、权限、角色权限 |
|
|
||||||
| Resource | 5+ | 资源、标签、分类 |
|
|
||||||
| Course | 3+ | 课程、章节、课件 |
|
|
||||||
| Learning | 5+ | 学习记录、笔记 |
|
|
||||||
| UserCenter | 3+ | 个人中心、收藏、评论 |
|
|
||||||
| AI | 5+ | AI智能体、对话 |
|
|
||||||
| System | 5+ | 系统配置、日志 |
|
|
||||||
| Achievement | 5+ | 成就系统 |
|
|
||||||
| Crontab | 3+ | 定时任务 |
|
|
||||||
| Message | 3+ | 消息通知 |
|
|
||||||
| Sensitive | 1+ | 敏感词 |
|
|
||||||
|
|
||||||
## ⚠️ 重要注意事项
|
|
||||||
|
|
||||||
### 1. SOURCE语句不支持
|
|
||||||
|
|
||||||
Docker的mysql镜像初始化**不支持** `SOURCE` 语句:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- ❌ 不支持
|
|
||||||
SOURCE createTableUser.sql;
|
|
||||||
|
|
||||||
-- ✅ 需要合并成一个文件
|
|
||||||
-- 将所有SQL内容直接写入
|
|
||||||
CREATE TABLE tb_user (...);
|
|
||||||
CREATE TABLE tb_role (...);
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 幂等性设计
|
|
||||||
|
|
||||||
确保脚本可以重复执行:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- 使用IF NOT EXISTS
|
|
||||||
CREATE TABLE IF NOT EXISTS tb_user (...);
|
|
||||||
|
|
||||||
-- 使用INSERT IGNORE
|
|
||||||
INSERT IGNORE INTO tb_sys_config VALUES (...);
|
|
||||||
|
|
||||||
-- 检查执行状态
|
|
||||||
SET @executed = (SELECT COUNT(*) FROM _db_init_status WHERE script_name = '02-create-tables.sql');
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 执行顺序
|
|
||||||
|
|
||||||
文件按字母顺序执行,因此命名很重要:
|
|
||||||
|
|
||||||
```
|
|
||||||
01-init-database.sql (首先执行)
|
|
||||||
02-create-tables.sql (其次执行)
|
|
||||||
03-init-data.sql (最后执行)
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 字符集配置
|
|
||||||
|
|
||||||
确保使用UTF-8MB4:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
CREATE TABLE tb_xxx (
|
|
||||||
...
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🧪 测试验证
|
|
||||||
|
|
||||||
### 1. 检查SQL文件
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 查看文件大小
|
|
||||||
ls -lh docker/init-db/*.sql
|
|
||||||
|
|
||||||
# 检查SQL语法
|
|
||||||
cd docker/init-db
|
|
||||||
mysql --help | grep "Default options"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 本地测试
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 在本地MySQL测试
|
|
||||||
mysql -uroot -p123456 < docker/init-db/01-init-database.sql
|
|
||||||
mysql -uroot -p123456 < docker/init-db/02-create-tables.sql
|
|
||||||
mysql -uroot -p123456 < docker/init-db/03-init-data.sql
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Docker环境测试
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 删除旧数据
|
|
||||||
docker-compose down -v
|
|
||||||
|
|
||||||
# 启动MySQL
|
|
||||||
docker-compose up -d mysql
|
|
||||||
|
|
||||||
# 查看初始化日志
|
|
||||||
docker logs school-news-mysql 2>&1 | grep -E "init|sql"
|
|
||||||
|
|
||||||
# 检查数据库
|
|
||||||
docker exec school-news-mysql mysql -uroot -p123456 -e "SHOW DATABASES;"
|
|
||||||
docker exec school-news-mysql mysql -uroot -p123456 school_news -e "SHOW TABLES;"
|
|
||||||
|
|
||||||
# 检查默认用户
|
|
||||||
docker exec school-news-mysql mysql -uroot -p123456 school_news -e \
|
|
||||||
"SELECT username, nickname FROM tb_sys_user WHERE username='admin';"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 验证初始化状态
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 查看初始化记录
|
|
||||||
docker exec school-news-mysql mysql -uroot -p123456 school_news -e \
|
|
||||||
"SELECT * FROM _db_init_status ORDER BY executed_at;"
|
|
||||||
|
|
||||||
# 统计表数量
|
|
||||||
docker exec school-news-mysql mysql -uroot -p123456 school_news -e \
|
|
||||||
"SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='school_news';"
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔄 更新数据库结构
|
|
||||||
|
|
||||||
### 场景1: 本地开发添加了新表
|
|
||||||
|
|
||||||
1. 在 `schoolNewsServ/.bin/mysql/sql/` 中创建SQL文件
|
|
||||||
2. 更新 `initAll.sql` 添加SOURCE语句
|
|
||||||
3. 重新运行 `prepare-sql.sh`
|
|
||||||
4. 重新构建Docker镜像
|
|
||||||
|
|
||||||
### 场景2: 修改现有表结构
|
|
||||||
|
|
||||||
1. 创建迁移脚本 `04-migration-xxx.sql`
|
|
||||||
2. 放入 `docker/init-db/` 目录
|
|
||||||
3. 脚本会自动执行(按字母顺序)
|
|
||||||
|
|
||||||
示例迁移脚本:
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- 04-migration-add-column.sql
|
|
||||||
USE school_news;
|
|
||||||
|
|
||||||
-- 检查是否已执行
|
|
||||||
SET @executed = (SELECT COUNT(*) FROM _db_init_status WHERE script_name = '04-migration-add-column.sql');
|
|
||||||
|
|
||||||
-- 添加新列
|
|
||||||
ALTER TABLE tb_user ADD COLUMN IF NOT EXISTS new_column VARCHAR(255);
|
|
||||||
|
|
||||||
-- 记录执行
|
|
||||||
INSERT IGNORE INTO _db_init_status (script_name) VALUES ('04-migration-add-column.sql');
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📊 默认数据说明
|
|
||||||
|
|
||||||
### 默认用户
|
|
||||||
|
|
||||||
| 用户名 | 密码 | 角色 | 说明 |
|
|
||||||
|--------|------|------|------|
|
|
||||||
| admin | admin123 | 管理员 | 超级管理员账号 |
|
|
||||||
|
|
||||||
### 默认角色
|
|
||||||
|
|
||||||
| 角色 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| admin | 管理员,拥有所有权限 |
|
|
||||||
| freedom | 自由角色,基础权限 |
|
|
||||||
|
|
||||||
### 默认部门
|
|
||||||
|
|
||||||
| 部门 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| root_department | 超级部门 |
|
|
||||||
| default_department | 默认部门 |
|
|
||||||
|
|
||||||
### 系统配置
|
|
||||||
|
|
||||||
| 配置项 | 值 | 说明 |
|
|
||||||
|--------|-----|------|
|
|
||||||
| crawler.pythonPath | /usr/bin/python3 | Python路径 |
|
|
||||||
| crawler.basePath | /app/crawler | 爬虫脚本路径 |
|
|
||||||
|
|
||||||
## 🛠️ 故障排查
|
|
||||||
|
|
||||||
### 问题1: 初始化脚本未执行
|
|
||||||
|
|
||||||
**症状**: 数据库创建了但表不存在
|
|
||||||
|
|
||||||
**排查**:
|
|
||||||
```bash
|
|
||||||
# 查看MySQL日志
|
|
||||||
docker logs school-news-mysql
|
|
||||||
|
|
||||||
# 检查脚本权限
|
|
||||||
ls -l docker/init-db/*.sql
|
|
||||||
```
|
|
||||||
|
|
||||||
**解决**: 确保SQL文件有读权限
|
|
||||||
|
|
||||||
### 问题2: SQL语法错误
|
|
||||||
|
|
||||||
**症状**: 容器启动失败
|
|
||||||
|
|
||||||
**排查**:
|
|
||||||
```bash
|
|
||||||
# 查看详细错误
|
|
||||||
docker logs school-news-mysql 2>&1 | grep ERROR
|
|
||||||
```
|
|
||||||
|
|
||||||
**解决**: 检查SQL语法,在本地测试
|
|
||||||
|
|
||||||
### 问题3: 重复执行导致错误
|
|
||||||
|
|
||||||
**症状**: 主键冲突等错误
|
|
||||||
|
|
||||||
**解决**: 使用幂等设计
|
|
||||||
```sql
|
|
||||||
-- 使用INSERT IGNORE
|
|
||||||
INSERT IGNORE INTO ...
|
|
||||||
|
|
||||||
-- 使用ON DUPLICATE KEY UPDATE
|
|
||||||
INSERT INTO ... ON DUPLICATE KEY UPDATE ...
|
|
||||||
|
|
||||||
-- 检查执行状态
|
|
||||||
IF NOT EXISTS (SELECT ...)
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📚 相关文档
|
|
||||||
|
|
||||||
- [数据库初始化README](README.md)
|
|
||||||
- [reInit.sh源文件](../../schoolNewsServ/.bin/mysql/sql/reInit.sh)
|
|
||||||
- [MySQL Docker文档](https://hub.docker.com/_/mysql)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**更新时间**: 2025-11-24
|
|
||||||
**基于**: schoolNewsServ/.bin/mysql/sql/reInit.sh
|
|
||||||
113
消息中心调试步骤.md
113
消息中心调试步骤.md
@@ -1,113 +0,0 @@
|
|||||||
# 消息中心前端加载问题调试步骤
|
|
||||||
|
|
||||||
## 问题描述
|
|
||||||
- 用户端消息中心页面空白(白屏)
|
|
||||||
- 消息详情页可以正常渲染
|
|
||||||
- 管理端消息管理页可以正常渲染
|
|
||||||
|
|
||||||
## 已完成的修改
|
|
||||||
|
|
||||||
### 1. 路由生成器添加调试日志
|
|
||||||
文件:`schoolNewsWeb/src/utils/route-generator.ts`
|
|
||||||
- 在 `generateRoutes()` 函数中添加了路由生成日志
|
|
||||||
- 在 `getComponent()` 函数中添加了组件加载日志
|
|
||||||
|
|
||||||
### 2. 添加分页容器样式
|
|
||||||
文件:`schoolNewsWeb/src/views/user/message/MyMessageListView.vue`
|
|
||||||
- 添加了 `.pagination-container` 样式
|
|
||||||
|
|
||||||
## 调试步骤
|
|
||||||
|
|
||||||
### 步骤1:重启前端开发服务器
|
|
||||||
```bash
|
|
||||||
cd f:\Project\schoolNews\schoolNewsWeb
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### 步骤2:打开浏览器控制台
|
|
||||||
1. 打开浏览器(Chrome/Edge)
|
|
||||||
2. 按 F12 打开开发者工具
|
|
||||||
3. 切换到 Console(控制台)标签页
|
|
||||||
|
|
||||||
### 步骤3:访问消息中心页面
|
|
||||||
访问: `http://localhost:8080/schoolNewsWeb/user/message`
|
|
||||||
|
|
||||||
### 步骤4:查看控制台输出
|
|
||||||
查找以下日志:
|
|
||||||
- `[路由生成] 生成路由:` - 确认消息中心路由是否被生成
|
|
||||||
- `[路由生成] 尝试加载组件:` - 查看组件路径是否正确
|
|
||||||
- `[路由生成] 组件加载成功:` - 确认组件是否加载成功
|
|
||||||
- `[路由生成] 组件加载失败:` - 如果失败,查看详细错误信息
|
|
||||||
|
|
||||||
### 步骤5:检查网络请求
|
|
||||||
1. 切换到 Network(网络)标签页
|
|
||||||
2. 刷新页面
|
|
||||||
3. 查看是否有失败的请求
|
|
||||||
4. 特别关注 `/api/message/my/page` 接口的响应
|
|
||||||
|
|
||||||
## 可能的问题和解决方案
|
|
||||||
|
|
||||||
### 问题1:组件路径错误
|
|
||||||
**症状**:控制台显示 `[路由生成] 组件加载失败`
|
|
||||||
|
|
||||||
**解决方案**:
|
|
||||||
检查数据库中 `tb_sys_menu` 表的 `component` 字段:
|
|
||||||
```sql
|
|
||||||
SELECT menu_id, name, url, component
|
|
||||||
FROM tb_sys_menu
|
|
||||||
WHERE menu_id = 'menu_user_message_center';
|
|
||||||
```
|
|
||||||
|
|
||||||
应该是:`user/message/MyMessageListView`
|
|
||||||
|
|
||||||
### 问题2:API接口返回错误
|
|
||||||
**症状**:网络请求返回 4xx 或 5xx 错误
|
|
||||||
|
|
||||||
**解决方案**:
|
|
||||||
1. 检查后端服务是否正常运行
|
|
||||||
2. 检查用户是否已登录
|
|
||||||
3. 检查权限配置
|
|
||||||
|
|
||||||
### 问题3:组件导入错误
|
|
||||||
**症状**:控制台显示 `Cannot find module` 或类似错误
|
|
||||||
|
|
||||||
**解决方案**:
|
|
||||||
检查 `MessagePriorityBadge` 组件是否正确导出:
|
|
||||||
```typescript
|
|
||||||
// src/components/message/index.ts
|
|
||||||
export { default as MessagePriorityBadge } from './MessagePriorityBadge.vue';
|
|
||||||
```
|
|
||||||
|
|
||||||
### 问题4:数据为空但没有错误
|
|
||||||
**症状**:页面显示"暂无消息",但实际数据库中有数据
|
|
||||||
|
|
||||||
**解决方案**:
|
|
||||||
1. 检查API返回的数据结构
|
|
||||||
2. 在 `MyMessageListView.vue` 的 `loadMessages()` 函数中添加 console.log
|
|
||||||
|
|
||||||
## 常见错误代码对照
|
|
||||||
|
|
||||||
### 路径转换示例
|
|
||||||
数据库配置:`user/message/MyMessageListView`
|
|
||||||
↓
|
|
||||||
添加前缀:`@/views/user/message/MyMessageListView`
|
|
||||||
↓
|
|
||||||
转换别名:`../views/user/message/MyMessageListView.vue`
|
|
||||||
↓
|
|
||||||
最终解析:`src/views/user/message/MyMessageListView.vue`
|
|
||||||
|
|
||||||
### 路由配置示例
|
|
||||||
```javascript
|
|
||||||
{
|
|
||||||
path: '/user/message',
|
|
||||||
name: 'menu_user_message_center',
|
|
||||||
component: () => import('../views/user/message/MyMessageListView.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '消息中心',
|
|
||||||
requiresAuth: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 下一步操作
|
|
||||||
根据控制台输出的错误信息,确定具体问题后再进行针对性修复。
|
|
||||||
188
消息通知模块集成说明.md
188
消息通知模块集成说明.md
@@ -1,188 +0,0 @@
|
|||||||
# 消息通知模块 - 集成说明
|
|
||||||
|
|
||||||
## 模块概述
|
|
||||||
|
|
||||||
消息通知模块已经完成开发,包含完整的前后端功能。该模块支持系统消息、邮件和短信通知,具有定时发送、重试机制、权限控制等特性。
|
|
||||||
|
|
||||||
## 已完成的文件
|
|
||||||
|
|
||||||
### 后端(Java)
|
|
||||||
- 24个Java文件(DTO、Mapper、Service、Controller、Scheduler、配置类)
|
|
||||||
- 位置:`schoolNewsServ/message/` 和 `schoolNewsServ/api/api-message/`
|
|
||||||
- SQL文件:`schoolNewsServ/.bin/mysql/sql/createTableMessage.sql` 和 `initMenuData.sql`
|
|
||||||
|
|
||||||
### 前端(Vue)
|
|
||||||
1. **类型定义**
|
|
||||||
- `schoolNewsWeb/src/types/message/index.ts`
|
|
||||||
|
|
||||||
2. **API接口**
|
|
||||||
- `schoolNewsWeb/src/apis/message/message.ts`
|
|
||||||
- `schoolNewsWeb/src/apis/message/index.ts`
|
|
||||||
|
|
||||||
3. **通用组件**(4个)
|
|
||||||
- `schoolNewsWeb/src/components/message/MessagePriorityBadge.vue`
|
|
||||||
- `schoolNewsWeb/src/components/message/MessageStatusBadge.vue`
|
|
||||||
- `schoolNewsWeb/src/components/message/MessageSendMethodSelector.vue`
|
|
||||||
- `schoolNewsWeb/src/components/message/MessageTargetSelector.vue` (已删除,功能集成到列表页)
|
|
||||||
- `schoolNewsWeb/src/components/message/index.ts`
|
|
||||||
|
|
||||||
4. **管理端页面**(2个)
|
|
||||||
- `schoolNewsWeb/src/views/admin/manage/message/MessageListView.vue` (集成创建功能)
|
|
||||||
- `schoolNewsWeb/src/views/admin/manage/message/MessageDetailView.vue`
|
|
||||||
- `schoolNewsWeb/src/views/admin/manage/message/index.ts`
|
|
||||||
|
|
||||||
5. **用户端页面**(2个)
|
|
||||||
- `schoolNewsWeb/src/views/user/message/MyMessageListView.vue`
|
|
||||||
- `schoolNewsWeb/src/views/user/message/MyMessageDetailView.vue`
|
|
||||||
- `schoolNewsWeb/src/views/user/message/index.ts`
|
|
||||||
|
|
||||||
## 需要配置的内容
|
|
||||||
|
|
||||||
### 1. 前端路由配置
|
|
||||||
|
|
||||||
在 Vue Router 配置文件中添加以下路由:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// 管理端路由
|
|
||||||
{
|
|
||||||
path: '/admin/manage/message',
|
|
||||||
component: AdminLayout, // 或您的布局组件
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'list',
|
|
||||||
name: 'MessageManagement',
|
|
||||||
component: () => import('@/views/admin/manage/message/MessageListView.vue'),
|
|
||||||
meta: { title: '消息管理', requiresAuth: true, permission: 'message:manage' }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'detail/:id',
|
|
||||||
name: 'MessageDetail',
|
|
||||||
component: () => import('@/views/admin/manage/message/MessageDetailView.vue'),
|
|
||||||
meta: { title: '消息详情', requiresAuth: true, permission: 'message:manage' }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
// 用户端路由
|
|
||||||
{
|
|
||||||
path: '/user/message',
|
|
||||||
component: UserLayout, // 或您的用户布局组件
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'list',
|
|
||||||
name: 'MyMessages',
|
|
||||||
component: () => import('@/views/user/message/MyMessageListView.vue'),
|
|
||||||
meta: { title: '我的消息', requiresAuth: true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'detail/:id',
|
|
||||||
name: 'MyMessageDetail',
|
|
||||||
component: () => import('@/views/user/message/MyMessageDetailView.vue'),
|
|
||||||
meta: { title: '消息详情', requiresAuth: true }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 后端配置
|
|
||||||
|
|
||||||
确保以下配置已添加到 `application.yml`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
spring:
|
|
||||||
task:
|
|
||||||
scheduling:
|
|
||||||
enabled: true
|
|
||||||
execution:
|
|
||||||
pool:
|
|
||||||
core-size: 10
|
|
||||||
max-size: 20
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. 数据库初始化
|
|
||||||
|
|
||||||
执行以下SQL文件:
|
|
||||||
1. `schoolNewsServ/.bin/mysql/sql/createTableMessage.sql` - 创建表结构
|
|
||||||
2. `schoolNewsServ/.bin/mysql/sql/initMenuData.sql` - 初始化菜单和权限数据
|
|
||||||
|
|
||||||
### 4. Maven依赖
|
|
||||||
|
|
||||||
确保父pom.xml中的modules包含:
|
|
||||||
```xml
|
|
||||||
<modules>
|
|
||||||
<module>message</module>
|
|
||||||
</modules>
|
|
||||||
```
|
|
||||||
|
|
||||||
确保api/pom.xml中的modules包含:
|
|
||||||
```xml
|
|
||||||
<modules>
|
|
||||||
<module>api-message</module>
|
|
||||||
</modules>
|
|
||||||
```
|
|
||||||
|
|
||||||
## 功能说明
|
|
||||||
|
|
||||||
### 管理端功能
|
|
||||||
1. **消息列表**
|
|
||||||
- 筛选(标题、类型、状态、优先级)
|
|
||||||
- 分页展示
|
|
||||||
- 创建消息(对话框模式)
|
|
||||||
- 立即发送、重试、改期、取消、删除
|
|
||||||
|
|
||||||
2. **消息详情**
|
|
||||||
- 完整信息展示
|
|
||||||
- 发送统计(进度、成功率、已读率)
|
|
||||||
- 接收对象列表
|
|
||||||
- 用户接收详情
|
|
||||||
|
|
||||||
### 用户端功能
|
|
||||||
1. **我的消息**
|
|
||||||
- 卡片式列表
|
|
||||||
- 未读标识
|
|
||||||
- 批量标记已读
|
|
||||||
- 筛选功能
|
|
||||||
|
|
||||||
2. **消息详情**
|
|
||||||
- 自动标记已读
|
|
||||||
- 精美展示
|
|
||||||
- 响应式设计
|
|
||||||
|
|
||||||
## 权限说明
|
|
||||||
|
|
||||||
数据库中已配置以下权限:
|
|
||||||
- `message:manage` - 消息管理权限(管理端)
|
|
||||||
- `message:send` - 消息发送权限
|
|
||||||
- `message:view` - 消息查看权限(用户端)
|
|
||||||
|
|
||||||
默认绑定到:
|
|
||||||
- superadmin - 所有权限
|
|
||||||
- admin - 管理和发送权限
|
|
||||||
- freedom - 查看权限
|
|
||||||
|
|
||||||
## 注意事项
|
|
||||||
|
|
||||||
1. **EmailUtils和SmsUtils**:确保这两个工具类在common模块中存在且可用
|
|
||||||
2. **定时任务**:消息定时发送由`MessageScheduler`处理,每分钟扫描一次
|
|
||||||
3. **权限控制**:用户只能向当前部门及子部门发送消息
|
|
||||||
4. **重试机制**:发送失败后会自动重试,默认最多3次,间隔5分钟
|
|
||||||
|
|
||||||
## 测试建议
|
|
||||||
|
|
||||||
1. 先测试立即发送功能
|
|
||||||
2. 测试定时发送功能(设置1-2分钟后的时间)
|
|
||||||
3. 测试权限控制(不同角色的访问)
|
|
||||||
4. 测试用户端的消息查看和已读标记
|
|
||||||
|
|
||||||
## 已知问题
|
|
||||||
|
|
||||||
1. MessageDetailView中的用户接收详情列表需要后端补充接口:`GET /message/users/{messageID}`
|
|
||||||
2. 如果EmailUtils或SmsUtils不存在,需要先实现这两个工具类
|
|
||||||
|
|
||||||
## 后续优化建议
|
|
||||||
|
|
||||||
1. 添加富文本编辑器支持
|
|
||||||
2. 添加消息模板功能
|
|
||||||
3. 添加消息统计报表
|
|
||||||
4. 添加消息分类功能
|
|
||||||
5. 支持附件上传
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
crawler:
|
|
||||||
# Python 可执行文件路径(Windows 建议指向 python.exe;如已在 PATH,可直接用 "python")
|
|
||||||
pythonPath: F:/Environment/Conda/envs/schoolNewsCrawler/python.exe
|
|
||||||
# 爬虫脚本根目录(NewsCrawlerTask 的工作目录)
|
|
||||||
basePath: F:/Project/schoolNews/schoolNewsCrawler
|
|
||||||
|
|
||||||
# 下面为原有的定时任务清单(保持不变,仅修正到正确文件)
|
|
||||||
crontab:
|
|
||||||
items:
|
|
||||||
- name: 人民日报新闻爬取
|
|
||||||
methods:
|
|
||||||
- name: 关键字搜索爬取
|
|
||||||
clazz: newsCrewerTask
|
|
||||||
excuete_method: execute
|
|
||||||
path: crawler/RmrbSearch.py
|
|
||||||
params:
|
|
||||||
- name: query
|
|
||||||
description: 搜索关键字
|
|
||||||
type: String
|
|
||||||
value: ""
|
|
||||||
required: true
|
|
||||||
- name: total
|
|
||||||
description: 总新闻数量
|
|
||||||
type: Integer
|
|
||||||
value: 10
|
|
||||||
required: true
|
|
||||||
- name: 排行榜爬取
|
|
||||||
clazz: newsCrewerTask
|
|
||||||
excuete_method: execute
|
|
||||||
path: crawler/RmrbHotPoint.py
|
|
||||||
- name: 往日精彩头条爬取
|
|
||||||
clazz: newsCrewerTask
|
|
||||||
excuete_method: execute
|
|
||||||
path: crawler/RmrbTrending.py
|
|
||||||
params:
|
|
||||||
- name: startDate
|
|
||||||
description: 开始日期
|
|
||||||
type: String
|
|
||||||
value: ""
|
|
||||||
required: false
|
|
||||||
- name: endDate
|
|
||||||
description: 结束日期
|
|
||||||
type: String
|
|
||||||
value: ""
|
|
||||||
required: false
|
|
||||||
- name: yesterday
|
|
||||||
description: 是否是昨天
|
|
||||||
type: Boolean
|
|
||||||
value: true
|
|
||||||
|
|
||||||
|
|
||||||
1. 改成系统表配置。
|
|
||||||
2. 通过system模块的config配置crawler的基本信息
|
|
||||||
3. 创建定时任务meta表存放定时任务的元数据
|
|
||||||
4. 创建定时任务meta邮件人员模板表,存放定时任务的邮件人员模板
|
|
||||||
5. 创建定时任务邮件接收人员表,存放定时任务的邮件接收人员
|
|
||||||
6. 修改dto、service、mapper、controller等,实现定时任务meta的查询。定时任务meta邮件人员模板的增删改查。定时任务邮件接收人员的增删改查。
|
|
||||||
7. 修改定时任务的param等内容,实现定时任务的执行。
|
|
||||||
8. 修改前端接口请求逻辑,实现定时任务和邮件人员的增删改查。
|
|
||||||
246
视图结构树.md
246
视图结构树.md
@@ -1,246 +0,0 @@
|
|||||||
# 学校新闻系统 - 视图结构树
|
|
||||||
|
|
||||||
## 前端视图结构
|
|
||||||
|
|
||||||
### 1. 首页 (Home)
|
|
||||||
- **路径**: `/`
|
|
||||||
- **视图**: `Home.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `NavigationBar.vue` - 导航栏
|
|
||||||
- `SearchIndex.vue` - 模糊检索
|
|
||||||
- `LearningDataOverview.vue` - 个人学习数据记录
|
|
||||||
- `TopMusicRecommend.vue` - TOP资源推荐
|
|
||||||
- `NewsOverview.vue` - 新闻概览
|
|
||||||
- `BookHallSection.vue` - 轮播组件
|
|
||||||
|
|
||||||
### 2. 资源中心 (Resource Center)
|
|
||||||
- **路径**: `/resource-center`
|
|
||||||
- **视图**: `ResourceCenterPage.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `NavigationBar.vue` - 导航栏
|
|
||||||
- `SearchIndex.vue` - 模糊检索
|
|
||||||
- `PartyHistoryLearning.vue` - 党史学习组件
|
|
||||||
- `PolicySpeech.vue` - 领导讲话组件
|
|
||||||
- `PolicyInterpretation.vue` - 政策解读组件
|
|
||||||
- `RedClassic.vue` - 红色经典组件
|
|
||||||
- `SpecialReport.vue` - 专题报告组件
|
|
||||||
- `WorldCase.vue` - 思政案例组件
|
|
||||||
- `MediaArchive.vue` - 资源详情组件(二级文章阅读页面)
|
|
||||||
|
|
||||||
### 3. 学习计划 (Study Plan)
|
|
||||||
- **路径**: `/study-plan`
|
|
||||||
- **视图**: `StudyPlanPage.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `StudyTasks.vue` - 学习任务组件
|
|
||||||
- 任务列表
|
|
||||||
- 任务进度
|
|
||||||
- `CourseCenter.vue` - 课程中心组件
|
|
||||||
- 富文本课程
|
|
||||||
|
|
||||||
### 4. 个人中心 (Personal Center)
|
|
||||||
- **路径**: `/user-center`
|
|
||||||
- **视图**: `UserCenterPage.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `LearningRecords.vue` - 学习记录组件
|
|
||||||
- `MyFavorites.vue` - 我的收藏组件
|
|
||||||
- `MyAchievements.vue` - 我的成就组件
|
|
||||||
|
|
||||||
### 5. 账号中心 (Account Center)
|
|
||||||
- **路径**: `/profile`
|
|
||||||
- **视图**: `ProfilePage.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `PersonalInfo.vue` - 个人信息组件
|
|
||||||
- `AccountSettings.vue` - 账号设置组件
|
|
||||||
|
|
||||||
### 6. 智能体模块 (AI Assistant)
|
|
||||||
- **路径**: `/ai-assistant`
|
|
||||||
- **视图**: `AIAssistantPage.vue`
|
|
||||||
- **子组件**:
|
|
||||||
- `ChatInterface.vue` - 对话功能组件
|
|
||||||
- `DialogHistory.vue` - 对话记录组件
|
|
||||||
- `FileInterpretation.vue` - 文件解读与记录组件
|
|
||||||
- `KnowledgeBase.vue` - 知识库管理组件
|
|
||||||
- **状态**: 悬浮球
|
|
||||||
|
|
||||||
### 7. 工作台 (Dashboard)
|
|
||||||
- **路径**: `/dashboard`
|
|
||||||
- **视图**: `Workplace.vue`
|
|
||||||
|
|
||||||
### 8. 登录模块 (Login)
|
|
||||||
- **路径**: `/login`
|
|
||||||
- **视图**: `Login.vue`
|
|
||||||
- **路径**: `/register`
|
|
||||||
- **视图**: `Register.vue`
|
|
||||||
- **路径**: `/forgot-password`
|
|
||||||
- **视图**: `ForgotPassword.vue`
|
|
||||||
|
|
||||||
### 9. 错误页面 (Error)
|
|
||||||
- **路径**: `/error/403`
|
|
||||||
- **视图**: `403.vue`
|
|
||||||
- **路径**: `/error/404`
|
|
||||||
- **视图**: `404.vue`
|
|
||||||
- **路径**: `/error/500`
|
|
||||||
- **视图**: `500.vue`
|
|
||||||
|
|
||||||
## 后端管理视图结构
|
|
||||||
|
|
||||||
### 1. 系统总览 (System Overview)
|
|
||||||
- **路径**: `/admin/overview`
|
|
||||||
- **视图**: `SystemOverview.vue`
|
|
||||||
- **功能组件**:
|
|
||||||
- 总用户数统计组件
|
|
||||||
- 总资源数统计组件
|
|
||||||
- 今日访问量统计组件
|
|
||||||
- 用户活跃度折线图组件
|
|
||||||
- 资源分类统计占比饼图组件
|
|
||||||
|
|
||||||
### 2. 用户管理 (User Management)
|
|
||||||
- **路径**: `/admin/manage/system/user`
|
|
||||||
- **视图**: `UserManageView.vue`
|
|
||||||
- **路径**: `/admin/manage/system/dept`
|
|
||||||
- **视图**: `DeptManageView.vue` - 组织结构管理
|
|
||||||
- **路径**: `/admin/manage/system/role`
|
|
||||||
- **视图**: `RoleManageView.vue` - 角色管理
|
|
||||||
- **路径**: `/admin/manage/system/permission`
|
|
||||||
- **视图**: `PermissionManageView.vue` - 权限配置管理
|
|
||||||
- **路径**: `/admin/manage/system/menu`
|
|
||||||
- **视图**: `MenuManageView.vue` - 菜单管理
|
|
||||||
|
|
||||||
### 3. 资源管理 (Resource Management)
|
|
||||||
- **路径**: `/admin/manage/resource/resource`
|
|
||||||
- **视图**: `ResourceManagement.vue` - 资源管理
|
|
||||||
- **路径**: `/admin/manage/resource/article`
|
|
||||||
- **视图**: `ArticleManagement.vue` - 新闻文章管理
|
|
||||||
- **路径**: `/admin/manage/resource/data-records`
|
|
||||||
- **视图**: `DataRecords.vue` - 数据记录
|
|
||||||
|
|
||||||
### 4. 运营管理 (Operations Management)
|
|
||||||
- **路径**: `/admin/manage/content/banner`
|
|
||||||
- **视图**: `BannerManagement.vue` - Banner管理
|
|
||||||
- **路径**: `/admin/manage/content/tag`
|
|
||||||
- **视图**: `TagManagement.vue` - 标签管理
|
|
||||||
- **路径**: `/admin/manage/content/column`
|
|
||||||
- **视图**: `ColumnManagement.vue` - 栏目管理
|
|
||||||
- **路径**: `/admin/manage/content/content`
|
|
||||||
- **视图**: `ContentManagement.vue` - 内容管理
|
|
||||||
|
|
||||||
### 5. 学习管理 (Learning Management)
|
|
||||||
- **路径**: `/admin/manage/study/study`
|
|
||||||
- **视图**: `StudyManagement.vue` - 学习管理
|
|
||||||
- **路径**: `/admin/manage/study/task-publish`
|
|
||||||
- **视图**: `TaskPublish.vue` - 学习任务发布
|
|
||||||
- **路径**: `/admin/manage/study/study-records`
|
|
||||||
- **视图**: `StudyRecords.vue` - 学习记录
|
|
||||||
|
|
||||||
### 6. 智能体管理 (AI Management)
|
|
||||||
- **路径**: `/admin/manage/ai/ai`
|
|
||||||
- **视图**: `AIManagement.vue` - AI管理
|
|
||||||
- **路径**: `/admin/manage/ai/config`
|
|
||||||
- **视图**: `AIConfig.vue` - 基础配置
|
|
||||||
- **路径**: `/admin/manage/ai/knowledge`
|
|
||||||
- **视图**: `KnowledgeManagement.vue` - 知识库管理
|
|
||||||
|
|
||||||
### 7. 系统日志 (System Logs)
|
|
||||||
- **路径**: `/admin/manage/logs/system`
|
|
||||||
- **视图**: `SystemLogs.vue` - 系统日志
|
|
||||||
- **路径**: `/admin/manage/logs/login`
|
|
||||||
- **视图**: `LoginLogs.vue` - 登录日志
|
|
||||||
- **路径**: `/admin/manage/logs/operation`
|
|
||||||
- **视图**: `OperationLogs.vue` - 操作日志
|
|
||||||
- **路径**: `/admin/manage/logs/config`
|
|
||||||
- **视图**: `SystemConfig.vue` - 系统配置
|
|
||||||
|
|
||||||
## 路由结构
|
|
||||||
|
|
||||||
### 前端路由
|
|
||||||
```
|
|
||||||
/ (首页)
|
|
||||||
├── /resource-center (资源中心)
|
|
||||||
├── /study-plan (学习计划)
|
|
||||||
├── /user-center (个人中心)
|
|
||||||
├── /profile (账号中心)
|
|
||||||
├── /ai-assistant (智能体模块)
|
|
||||||
├── /dashboard (工作台)
|
|
||||||
├── /login (登录)
|
|
||||||
├── /register (注册)
|
|
||||||
├── /forgot-password (忘记密码)
|
|
||||||
└── /error (错误页面)
|
|
||||||
├── /error/403
|
|
||||||
├── /error/404
|
|
||||||
└── /error/500
|
|
||||||
```
|
|
||||||
|
|
||||||
### 后端管理路由
|
|
||||||
```
|
|
||||||
/admin
|
|
||||||
├── /overview (系统总览)
|
|
||||||
└── /manage
|
|
||||||
├── /system (系统管理)
|
|
||||||
│ ├── /user (用户管理)
|
|
||||||
│ ├── /dept (部门管理)
|
|
||||||
│ ├── /role (角色管理)
|
|
||||||
│ ├── /permission (权限管理)
|
|
||||||
│ └── /menu (菜单管理)
|
|
||||||
├── /resource (资源管理)
|
|
||||||
│ ├── /resource (资源管理)
|
|
||||||
│ ├── /article (文章管理)
|
|
||||||
│ └── /data-records (数据记录)
|
|
||||||
├── /content (运营管理)
|
|
||||||
│ ├── /banner (Banner管理)
|
|
||||||
│ ├── /tag (标签管理)
|
|
||||||
│ ├── /column (栏目管理)
|
|
||||||
│ └── /content (内容管理)
|
|
||||||
├── /study (学习管理)
|
|
||||||
│ ├── /study (学习管理)
|
|
||||||
│ ├── /task-publish (任务发布)
|
|
||||||
│ └── /study-records (学习记录)
|
|
||||||
├── /ai (智能体管理)
|
|
||||||
│ ├── /ai (AI管理)
|
|
||||||
│ ├── /config (AI配置)
|
|
||||||
│ └── /knowledge (知识库管理)
|
|
||||||
└── /logs (系统日志)
|
|
||||||
├── /system (系统日志)
|
|
||||||
├── /login (登录日志)
|
|
||||||
├── /operation (操作日志)
|
|
||||||
└── /config (系统配置)
|
|
||||||
```
|
|
||||||
|
|
||||||
## 组件层级关系
|
|
||||||
|
|
||||||
### 布局组件
|
|
||||||
- `BasicLayout` - 基础布局
|
|
||||||
- `NavigationLayout` - 导航布局
|
|
||||||
- `BlankLayout` - 空白布局
|
|
||||||
- `PageLayout` - 页面布局
|
|
||||||
|
|
||||||
### 通用组件
|
|
||||||
- `NavigationBar` - 导航栏组件
|
|
||||||
- `SearchIndex` - 搜索组件
|
|
||||||
- `DialogHistory` - 对话历史组件
|
|
||||||
- `FileInterpretation` - 文件解读组件
|
|
||||||
|
|
||||||
## 视图与组件区别
|
|
||||||
|
|
||||||
### 视图 (Views)
|
|
||||||
- 有独立的URL路径
|
|
||||||
- 可以直接通过路由访问
|
|
||||||
- 通常包含完整的页面功能
|
|
||||||
- 使用布局组件进行包装
|
|
||||||
|
|
||||||
### 组件 (Components)
|
|
||||||
- 没有独立的URL路径
|
|
||||||
- 只能被其他视图或组件引用
|
|
||||||
- 通常实现特定的功能模块
|
|
||||||
- 可复用的UI单元
|
|
||||||
|
|
||||||
## 权限控制
|
|
||||||
|
|
||||||
### 前端权限
|
|
||||||
- 根据用户角色显示不同的菜单和功能
|
|
||||||
- 路由级别的权限控制
|
|
||||||
- 组件级别的权限控制
|
|
||||||
|
|
||||||
### 后端权限
|
|
||||||
- 基于RBAC的权限模型
|
|
||||||
- 部门-角色-权限关联
|
|
||||||
- 菜单-权限关联
|
|
||||||
Reference in New Issue
Block a user