权限修正

This commit is contained in:
2025-11-10 15:22:33 +08:00
parent 95919eb27b
commit 08df5f1e8a
2 changed files with 0 additions and 643 deletions

View File

@@ -1,283 +0,0 @@
# 校园新闻管理系统 - 项目结构说明
## 概述
根据提供的结构图已创建完整的前端页面层级和Vue组件文件。本文档详细说明了创建的所有文件和目录结构。
## 目录结构
```
src/views/
├── home/ # 首页模块
│ ├── HomePage.vue # 首页主组件
│ └── components/ # 首页子组件
│ ├── LearningDataOverview.vue # 个人学习数据概览
│ ├── BookHallSection.vue # 书报馆件
│ ├── TopMusicRecommend.vue # TOP音乐推荐
│ ├── NewsOverview.vue # 新闻概览
│ ├── NavigationBar.vue # 导航栏
│ └── SearchIndex.vue # 搜索索引
├── resource-center/ # 资源中心模块
│ ├── ResourceCenterPage.vue # 资源中心主组件
│ └── components/ # 资源中心子组件
│ ├── MediaArchive.vue # 媒体档案
│ ├── PartyHistoryLearning.vue # 党史学习
│ ├── PolicySpeech.vue # 政策讲话
│ ├── PolicyInterpretation.vue # 政策解读
│ ├── RedClassic.vue # 红色经典
│ ├── SpecialReport.vue # 专题报告
│ └── WorldCase.vue # 世界案例
├── study-plan/ # 学习计划模块
│ ├── StudyPlanPage.vue # 学习计划主组件
│ └── components/ # 学习计划子组件
│ ├── StudyTasks.vue # 学习任务(包含任务列表、任务进度)
│ └── CourseCenter.vue # 课程中心(富文本课程)
├── user-center/ # 个人中心模块
│ ├── UserCenterPage.vue # 个人中心主组件
│ └── components/ # 个人中心子组件
│ ├── LearningRecords.vue # 学习记录
│ ├── MyFavorites.vue # 我的收藏
│ └── MyAchievements.vue # 我的成就
├── profile/ # 我导中心模块(头像进入)
│ ├── ProfilePage.vue # 我导中心主组件
│ └── components/ # 我导中心子组件
│ ├── PersonalInfo.vue # 个人信息
│ └── AccountSettings.vue # 账号设置
├── ai-assistant/ # 智能体模块
│ ├── AIAssistantPage.vue # AI助手主组件包含悬浮球
│ └── components/ # AI助手子组件
│ ├── ChatInterface.vue # 对话功能
│ ├── KnowledgeBase.vue # 知识库
│ ├── DialogHistory.vue # 历史对话记录加载
│ └── FileInterpretation.vue # 文件解读与记录(文件上传、历史文件加载)
└── admin/ # 后端管理模块
├── SystemOverview.vue # 系统总览(总用户数、总资源数、今日访问量、用户活跃度折线图、资源分类统计饼图)
├── ResourceManagement.vue # 资源管理主组件
├── LanguageManagement.vue # 语言管理主组件
├── StudyManagement.vue # 学习管理主组件
├── AIManagement.vue # 智能体管理主组件
├── SystemLogs.vue # 系统日志主组件
└── components/ # 后端管理子组件
├── ArticleManagement.vue # 文章储备(数据采集、新增文章、课程文章)
├── DataRecords.vue # 数据记录(菜单管理)
├── BannerManagement.vue # Banner管理
├── ColumnManagement.vue # 资源栏目管理
├── TagManagement.vue # 标签管理
├── TaskPublish.vue # 学习任务发布(任务名称、描述、周期、关联资源、接受对象)
├── StudyRecords.vue # 学习记录
├── AIConfig.vue # AI基础配置
├── KnowledgeManagement.vue # 知识库管理
├── LoginLogs.vue # 登录日志
├── OperationLogs.vue # 操作日志
└── SystemConfig.vue # 系统配置
```
## 已存在的管理模块
以下管理功能已在 `src/views/manage/system/` 中实现:
- `UserManageView.vue` - 用户管理
- `RoleManageView.vue` - 角色管理
- `PermissionManageView.vue` - 权限管理
- `DeptManageView.vue` - 部门管理(组织结构管理)
- `MenuManageView.vue` - 菜单管理
## 功能模块详细说明
### 前端功能
#### 1. 首页模块
- **个人学习数据概览**: 展示用户学习统计数据
- **书报馆件**: 图书资源展示
- **TOP音乐推荐**: 红色音乐推荐列表
- **新闻概览**: 最新思政新闻展示
- **导航栏**: 快速导航入口
- **搜索索引**: 热门标签和搜索功能
#### 2. 资源中心模块
- **媒体档案**: 视频、音频等媒体资源管理
- **党史学习**: 党史教育文章和资料(支持资源详情,二级文章向读者展示)
- **政策讲话**: 重要政策讲话内容
- **政策解读**: 政策文件解读说明
- **红色经典**: 红色经典作品展示
- **专题报告**: 各类专题报告内容
- **世界案例**: 国际案例学习资料
#### 3. 学习计划模块
- **学习任务**:
- 任务列表展示
- 任务进度跟踪
- 任务状态管理(未开始、进行中、已完成)
- **课程中心**: 富文本课程内容展示
#### 4. 个人中心模块
- **学习记录**: 个人学习历史记录
- **我的收藏**: 收藏的资源管理
- **我的成就**: 获得的成就展示
#### 5. 我导中心模块(头像入口)
- **个人信息**: 用户基本信息管理
- **账号设置**: 密码修改、安全设置
#### 6. 智能体模块
- **悬浮球**: 快速唤起AI助手
- **对话功能**: 智能问答交互
- **知识库**: AI知识库浏览
- **历史对话记录**: 对话历史加载
- **文件解读与记录**:
- 文件上传
- 历史文件加载
- AI文件解读
### 后端管理功能
#### 1. 系统总览
- **统计卡片**: 总用户数、总资源数、今日访问量、活跃用户
- **用户活跃度折线图**: 用户活跃度趋势分析
- **资源分类统计饼图**: 资源分类分布展示
- **今日访问量详情**: UV、PV、平均访问时长、跳出率
#### 2. 用户管理(已存在)
- 组织结构管理
- 用户管理
- 权限配置管理
#### 3. 资源管理
- **文章储备**:
- 数据采集功能
- 新增文章
- 课程文章管理
- **数据记录**: 菜单管理(已在系统管理中实现)
#### 4. 语言管理
- **Banner管理**: 首页轮播图管理
- **资源栏目管理**: 资源分类栏目配置
- **标签管理**: 资源标签维护
#### 5. 学习管理
- **学习任务发布**:
- 任务名称
- 任务描述
- 任务周期
- 关联资源/选择
- 任务接受对象(按部门/按权限/选人员)
- **学习记录**: 用户学习数据查看和导出
#### 6. 智能体管理
- **基础配置**: AI模型、API配置、对话参数设置
- **知识库管理**: AI知识库内容维护
#### 7. 系统日志
- **登录日志**: 用户登录记录
- **操作日志**: 系统操作审计
- **系统配置**: 系统参数设置
## 技术特点
### 1. 组件化设计
- 每个功能模块都有独立的主组件
- 复杂功能拆分为多个子组件
- 组件可复用性高
### 2. 标准化结构
- 统一的目录命名规范
- 一致的文件命名方式
- 清晰的层级关系
### 3. 功能完整性
- 覆盖所有结构图要求的功能点
- 包含完整的CRUD操作
- 支持数据筛选、分页、导出等常用功能
### 4. UI/UX设计
- 使用Element Plus组件库
- 响应式布局设计
- 现代化的UI风格
- 良好的交互体验
## 后续开发建议
### 1. API集成
所有组件中标记了 `TODO` 的地方需要接入实际的后端API
- 数据加载函数
- 表单提交处理
- 文件上传功能
- 实时数据更新
### 2. 状态管理
建议使用Vuex进行全局状态管理
- 用户信息状态
- 权限数据缓存
- 菜单树结构
- AI对话上下文
### 3. 路由配置
需要在 `src/router/` 中配置所有页面的路由:
- 路由路径定义
- 路由守卫配置
- 动态路由加载
- 权限路由过滤
### 4. 权限控制
实现完整的权限控制系统:
- 页面级权限
- 按钮级权限
- 数据级权限
- 角色权限映射
### 5. 数据可视化
系统总览页面需要集成ECharts
- 用户活跃度折线图
- 资源分类饼图
- 其他统计图表
### 6. 富文本编辑器
课程内容需要集成富文本编辑器:
- 推荐使用 TinyMCE 或 Quill
- 支持图片、视频上传
- 支持代码高亮
- 支持数学公式
### 7. 文件管理
完善文件上传和管理功能:
- 文件分片上传
- 断点续传
- 文件预览
- 批量操作
### 8. AI功能增强
智能体模块需要接入AI服务
- 对话流式输出
- 文件解读API
- 知识库检索
- 上下文管理
## 开发注意事项
1. **类型安全**: 所有组件都使用TypeScript需要定义完整的类型接口
2. **错误处理**: 添加适当的错误提示和异常处理
3. **加载状态**: 为异步操作添加loading状态
4. **数据验证**: 表单提交前进行数据验证
5. **性能优化**:
- 列表虚拟滚动
- 图片懒加载
- 组件按需加载
- 路由懒加载
6. **用户体验**:
- 添加骨架屏
- 优化加载动画
- 提供操作反馈
- 支持键盘快捷键
## 文件数量统计
- **主页面组件**: 10个
- **子组件**: 40+个
- **总计Vue文件**: 50+个
所有文件都已创建并包含基础的结构、样式和功能框架可以直接在此基础上进行API集成和功能完善。

View File

@@ -1,360 +0,0 @@
# 前端标签系统类型化改造文档
## 📝 改造概述
前端标签系统已更新支持3种标签类型与后端保持一致
1. **文章分类标签** (tagType=1) - 替代原 `ResourceCategory`
2. **课程分类标签** (tagType=2)
3. **学习任务分类标签** (tagType=3)
### 改造日期
2025-10-27
---
## 🔄 前端变更内容
### 1. 类型定义更新
#### 文件:`src/types/resource/index.ts`
**新增 TagType 枚举:**
```typescript
/**
* 标签类型枚举
*/
export enum TagType {
/** 文章分类标签 */
ARTICLE_CATEGORY = 1,
/** 课程分类标签 */
COURSE_CATEGORY = 2,
/** 学习任务分类标签 */
LEARNING_TASK_CATEGORY = 3
}
```
**Tag 接口更新:**
```typescript
export interface Tag extends BaseDTO {
/** 标签ID */
tagID?: string;
/** 标签名称 */
name?: string;
/** 标签描述 */
description?: string;
/** 标签颜色 */
color?: string;
/** 标签类型1-文章分类标签 2-课程分类标签 3-学习任务分类标签) */
tagType?: number; // ✅ 新增字段
/** 排序号 */
orderNum?: number;
/** 状态0禁用 1启用 */
status?: number;
/** 创建者 */
creator?: string;
/** 更新者 */
updater?: string;
}
```
**ResourceVO 接口更新:**
```typescript
/**
* 资源视图对象已废弃category字段
* @deprecated category字段已废弃请使用tags字段中tagType=1的标签
*/
export interface ResourceVO extends BaseDTO{
resource: Resource;
/** @deprecated 已废弃改用tags字段tagType=1表示文章分类标签 */
category?: ResourceCategory;
tags: Tag[];
}
```
---
### 2. API 接口更新
#### 文件:`src/apis/resource/resourceTag.ts`
**新增方法:**
```typescript
/**
* 根据标签类型获取标签列表
* @param tagType 标签类型1-文章分类标签 2-课程分类标签 3-学习任务分类标签)
* @returns Promise<ResultDomain<Tag>>
*/
async getTagsByType(tagType: number): Promise<ResultDomain<Tag>> {
const response = await api.get<Tag>(`/news/tags/type/${tagType}`);
return response.data;
}
```
**使用示例:**
```typescript
import { resourceTagApi } from '@/apis/resource';
import { TagType } from '@/types/resource';
// 获取文章分类标签
const articleTags = await resourceTagApi.getTagsByType(TagType.ARTICLE_CATEGORY);
// 获取课程分类标签
const courseTags = await resourceTagApi.getTagsByType(TagType.COURSE_CATEGORY);
// 获取学习任务分类标签
const taskTags = await resourceTagApi.getTagsByType(TagType.LEARNING_TASK_CATEGORY);
```
---
### 3. ResourceCategory API 废弃
#### 文件:`src/apis/resource/resourceCategory.ts`
**⚠️ 此 API 已废弃!**
从2025-10-27起资源分类功能已迁移到标签系统Tag中。
**API 迁移对照表:**
| 原 ResourceCategory API | 新 Tag API | 说明 |
|------------------------|-----------|------|
| `resourceCategoryApi.getCategoryList()` | `resourceTagApi.getTagsByType(1)` | 获取文章分类标签列表 |
| `resourceCategoryApi.getCategoryById(id)` | `resourceTagApi.getTagById(id)` | 获取标签详情 |
| `resourceCategoryApi.createCategory(category)` | `resourceTagApi.createTag({...category, tagType: 1})` | 创建文章分类标签 |
| `resourceCategoryApi.updateCategory(category)` | `resourceTagApi.updateTag(category)` | 更新标签 |
| `resourceCategoryApi.deleteCategory(id)` | `resourceTagApi.deleteTag(id)` | 删除标签 |
---
## 📦 已更新的组件
### 1. ArticleManagementView.vue
**文件:** `src/views/admin/manage/resource/ArticleManagementView.vue`
**变更内容:**
```typescript
// 修改前
import { resourceApi, resourceCategoryApi } from '@/apis/resource'
const categoryList = ref<ResourceCategory[]>([]);
const res = await resourceCategoryApi.getCategoryList();
// 修改后
import { resourceApi, resourceTagApi } from '@/apis/resource'
const categoryList = ref<Tag[]>([]); // 改为使用Tag类型tagType=1表示文章分类
const res = await resourceTagApi.getTagsByType(1); // 1 = 文章分类标签
```
---
### 2. ArticleAddView.vue
**文件:** `src/views/article/ArticleAddView.vue`
**变更内容:**
```typescript
// 修改前
import { resourceCategoryApi, resourceTagApi, resourceApi } from '@/apis/resource';
const categoryList = ref<ResourceCategory[]>([]);
const result = await resourceCategoryApi.getCategoryList();
// 修改后
import { resourceTagApi, resourceApi } from '@/apis/resource';
const categoryList = ref<Tag[]>([]); // 改为使用Tag类型tagType=1表示文章分类
const result = await resourceTagApi.getTagsByType(TagType.ARTICLE_CATEGORY);
```
**模板更新:**
```vue
<!-- 修改前 -->
<el-option
v-for="category in categoryList"
:key="category.tagID || category.id"
:label="category.name"
:value="category.tagID || category.id || ''"
/>
<!-- 修改后 -->
<el-option
v-for="category in categoryList"
:key="category.tagID || category.id"
:label="category.name"
:value="category.tagID || category.id || ''"
/>
```
---
### 3. ResourceSideBar.vue
**文件:** `src/views/resource-center/components/ResourceSideBar.vue`
**变更内容:**
```typescript
// 修改前
import { resourceCategoryApi } from '@/apis/resource';
import type { ResourceCategory } from '@/types/resource';
const categories = ref<ResourceCategory[]>([]);
const res = await resourceCategoryApi.getCategoryList();
// 修改后
import { resourceTagApi } from '@/apis/resource';
import type { Tag, TagType } from '@/types/resource';
const categories = ref<Tag[]>([]); // 改为使用Tag类型tagType=1表示文章分类
const res = await resourceTagApi.getTagsByType(1); // 1 = 文章分类标签
```
**模板更新:**
```vue
<!-- 修改前 -->
<div
v-for="category in categories"
:key="category.tagID"
:class="{ active: category.tagID === activeCategoryId }"
>
<!-- 修改后 -->
<div
v-for="category in categories"
:key="category.tagID || category.id"
:class="{ active: (category.tagID || category.id) === activeCategoryId }"
>
```
---
## 🎓 学习任务和课程标签说明
### 课程标签tagType=2
**类型定义:** `src/types/study/index.ts`
课程标签使用统一的标签系统tb_tag表
- 使用 `tagType=2` 表示课程分类标签
- 通过 `resourceTagApi.getTagsByType(TagType.COURSE_CATEGORY)` 获取课程分类标签
**使用示例:**
```typescript
import { resourceTagApi } from '@/apis/resource';
import { TagType } from '@/types/resource';
// 在课程管理页面加载课程分类标签
async function loadCourseTags() {
const result = await resourceTagApi.getTagsByType(TagType.COURSE_CATEGORY);
if (result.success) {
courseTags.value = result.dataList || [];
}
}
```
---
### 学习任务标签tagType=3
**类型定义:** `src/types/study/index.ts`
学习任务分类使用统一的标签系统tb_tag表
- 使用 `tagType=3` 表示学习任务分类标签
- 通过 `resourceTagApi.getTagsByType(TagType.LEARNING_TASK_CATEGORY)` 获取学习任务分类标签
**使用示例:**
```typescript
import { resourceTagApi } from '@/apis/resource';
import { TagType } from '@/types/resource';
// 在学习任务管理页面加载任务分类标签
async function loadTaskTags() {
const result = await resourceTagApi.getTagsByType(TagType.LEARNING_TASK_CATEGORY);
if (result.success) {
taskTags.value = result.dataList || [];
}
}
```
---
## 📋 迁移检查清单
### 开发人员检查清单
- [x] ✅ 更新 Tag 类型定义(添加 tagType 字段)
- [x] ✅ 添加 TagType 枚举
- [x] ✅ 更新 resourceTag API添加 getTagsByType 方法)
- [x] ✅ 废弃 resourceCategory API添加迁移说明
- [x] ✅ 更新 ArticleManagementView 组件
- [x] ✅ 更新 ArticleAddView 组件
- [x] ✅ 更新 ResourceSideBar 组件
- [x] ✅ 添加课程标签说明文档
- [x] ✅ 添加学习任务标签说明文档
### 未来开发任务
当开发课程管理或学习任务管理功能时:
- [ ] 在课程管理页面使用 `resourceTagApi.getTagsByType(2)` 获取课程分类标签
- [ ] 在学习任务管理页面使用 `resourceTagApi.getTagsByType(3)` 获取任务分类标签
- [ ] 为课程添加分类标签选择功能
- [ ] 为学习任务添加分类标签选择功能
---
## ⚠️ 注意事项
### 1. 向后兼容性
- `ResourceCategory` 类型和 `resourceCategoryApi` 暂时保留,但标记为 `@deprecated`
- 建议尽快迁移到新的标签 API
- 旧代码仍可运行,但会在 IDE 中显示废弃警告
### 2. 字段映射变化
| ResourceCategory | Tag | 说明 |
|-----------------|-----|------|
| `tagID` | `tagID` | 唯一标识字段名变更 |
| `name` | `name` | 名称字段保持不变 |
| `description` | `description` | 描述字段保持不变 |
| - | `tagType` | 新增标签类型1/2/3 |
| - | `color` | 新增:标签颜色 |
### 3. 导入路径
所有标签相关的类型和 API 现在统一从以下位置导入:
```typescript
// 类型导入
import { Tag, TagType } from '@/types/resource';
// API 导入
import { resourceTagApi } from '@/apis/resource';
```
---
## 🎯 总结
本次前端标签系统改造:
1.**统一标签管理** - 文章、课程、学习任务使用统一的标签系统
2.**类型化分类** - 通过 tagType 区分不同业务领域的标签
3.**简化架构** - 废弃 ResourceCategory统一使用 Tag
4.**灵活扩展** - 为未来添加新标签类型预留空间
5.**向后兼容** - 旧 API 仍可使用(标记为废弃)
### 迁移前后对比
| 项目 | 迁移前 | 迁移后 |
|------|--------|--------|
| 文章分类 | `resourceCategoryApi.getCategoryList()` | `resourceTagApi.getTagsByType(1)` |
| 课程分类 | 无 | `resourceTagApi.getTagsByType(2)` |
| 学习任务分类 | 无 | `resourceTagApi.getTagsByType(3)` |
| 类型定义 | `ResourceCategory` | `Tag` (with tagType) |
| 字段名 | `tagID` | `tagID` |
改造完成后,系统将具备更清晰的业务边界、更简洁的代码结构和更灵活的扩展能力。
---
## 📚 相关文档
- 后端迁移文档:`schoolNewsServ/.bin/mysql/sql/TAG_TYPE_MIGRATION.md`
- 后端移除清单:`schoolNewsServ/.bin/mysql/sql/RESOURCE_CATEGORY_REMOVAL.md`
- 前端项目结构:`schoolNewsWeb/PROJECT_STRUCTURE.md`