# dj **Repository Path**: ruixj/dj ## Basic Information - **Project Name**: dj - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-16 - **Last Updated**: 2026-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 党员管理系统 基于 **Spring Boot 3.3 + Vue 3 + Ant Design Vue 4** 的全栈学校党员管理系统。 ## 功能模块 | 模块 | 功能 | |------|------| | 认证 | JWT 无状态登录、权限加载、修改密码 | | 行政组织 | 树形管理行政院系组织 | | 党组织 | 树形管理党委/党支部 | | 人员管理 | 教师/学生人员信息 CRUD | | 党员信息 | 入党/转正/离党,Excel 导出 | | 会议管理 | 联席/党组织/三会一课,Word/PDF 导出 | | 议题管理 | 提交、审批、驳回议题 | | 学习记录 | 富文本学习记录 | | 统计分析 | 趋势图、各院分布饼图 | | 系统用户 | 账号启用/禁用、密码重置 | ## 技术栈 **后端** - Java 21 + Spring Boot 3.3.5 - MyBatis-Plus 3.5.9 - Sa-Token 1.39.0(JWT 无状态模式) - Flyway 数据库版本管理 - knife4j API 文档 - Apache POI(Excel 导出)+ poi-tl(Word)+ Flying Saucer(PDF) - jsoup XSS 过滤 **前端** - Vue 3.5 + Vite 5 + TypeScript - Ant Design Vue 4(含 Design Token 多主题) - Pinia 状态管理 - Vue Router 4(权限守卫) - WangEditor v5(富文本 + 图片上传) - ECharts + vue-echarts(统计图表) **部署** - Docker Compose(mysql + backend + frontend/nginx) - Nginx 反向代理 + 静态资源 ## 快速启动 ### 开发环境 1. **数据库**(本地 MySQL 8.0) ```sql CREATE DATABASE party_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. **后端** ```bash cd backend mvn spring-boot:run # 默认端口 8080,Flyway 自动建表 ``` 3. **前端** ```bash cd frontend npm install npm run dev # 默认端口 5173,代理 /api -> localhost:8080 ``` 默认管理员账号:`admin` / `Admin@1234` API 文档:http://localhost:8080/doc.html ### Docker Compose 部署 ```bash # 配置环境变量(可选,有默认值) cp .env.example .env docker compose up -d --build ``` 访问:http://localhost (前端) ## 项目结构 ``` djapps/ ├── backend/ # Spring Boot 后端 │ ├── src/main/java/com/school/party/ │ │ ├── PartyApplication.java │ │ ├── DataInitializer.java │ │ ├── common/ # Result, PageResult │ │ ├── config/ # MyBatisPlus, SaToken, Web, Knife4j │ │ ├── controller/ # 15 个控制器 │ │ ├── dto/ # DTO/VO │ │ ├── entity/ # 14 个实体 │ │ ├── exception/ # 全局异常处理 │ │ ├── mapper/ # 14 个 Mapper │ │ ├── security/ # StpInterfaceImpl │ │ ├── service/ # 服务接口 + 实现 │ │ └── util/ # HtmlUtil, IpUtil │ └── src/main/resources/ │ ├── application.yml │ └── db/migration/ # Flyway V1 建表 + V2 初始数据 ├── frontend/ # Vue 3 前端 │ ├── src/ │ │ ├── api/ # auth, org, person, party │ │ ├── components/ # ThemeSwitcher, RichTextEditor │ │ ├── layouts/ # BasicLayout(响应式侧边栏) │ │ ├── router/ # 路由 + 权限守卫 │ │ ├── stores/ # auth, permission, theme │ │ ├── types/ # TypeScript 类型定义 │ │ └── views/ # 所有页面 │ ├── nginx.conf # Nginx 配置 │ └── Dockerfile ├── docker-compose.yml └── README.md ``` ## 权限体系 | 角色 | 权限 | |------|------| | 超级管理员 (`isSuperuser=true`) | 所有操作 | | 党组织书记/管理员 | 管理本级及下级党组织数据 | | 院长(`can_approve_topics=true`) | 审批所在学院的会议议题 | | 普通党员 | 查看本党组织数据、提交议题、管理个人学习记录 | ## 主题 支持 5 种党建主题(右上角切换): - 🔴 党旗红(默认) - 🟤 砖石红 - 🔵 政务蓝 - 🟢 廉洁绿 - ⚫ 暗黑主题 ## 联调与最小回归清单 ### 会议签到联调矩阵 | 编号 | 场景 | 前置条件 | 操作 | 预期结果 | |------|------|----------|------|----------| | M1 | 添加参会人 | 会议状态为 `draft/ongoing`,当前用户有组织管理权限 | 在签到管理页搜索并添加人员 | 返回新增/跳过统计,列表出现新增人员 | | M2 | 本人签到 | 当前用户关联人员且在参会名单中,会议非 `completed/cancelled` | 点击“本人签到” | 当前人员状态变为已签到,签到时间更新 | | M3 | 管理员代签/取消 | 当前用户有管理权限,会议非 `completed/cancelled` | 对目标人员执行“代签”或“取消签到” | 状态切换成功,签到时间与状态一致 | | M4 | 移除未签到参会人 | 当前用户有管理权限,会议非 `completed/cancelled`,目标为未签到 | 点击“移除”并确认 | 人员从签到名单移除 | | M5 | 移除已签到参会人受限 | 当前用户有管理权限,目标已签到 | 点击“移除”并确认 | 接口返回业务错误:先取消签到后再移除 | | M6 | 完成/取消会议操作受限 | 会议状态为 `completed` 或 `cancelled` | 执行签到、代签、添加/移除参会人 | 前后端均拦截并提示不可操作 | | M7 | 筛选与排序 | 有签到与未签到混合数据 | 切换“仅已签到/仅未签到”和时间升降序 | 表格数据与筛选、排序条件一致 | | M8 | 导出签到统计(xlsx) | 页面存在可导出数据 | 点击“导出签到统计” | 下载 `.xlsx` 文件,内容与当前筛选/排序一致 | ### 线下课签到联调矩阵 | 编号 | 场景 | 前置条件 | 操作 | 预期结果 | |------|------|----------|------|----------| | O1 | 创建线下课 | 当前用户有管理权限 | 填写课程信息并保存 | 课程创建成功并出现在列表 | | O2 | 添加签到人员 | 课程允许签到编辑 | 添加人员到课程名单 | 参训人员列表更新 | | O3 | 本人签到 | 当前用户在名单中,课程可签到 | 点击本人签到 | 状态变更为已签到,签到时间写入 | | O4 | 管理员代签/取消 | 当前用户有管理权限 | 对指定人员代签或取消 | 状态按操作变化 | | O5 | 异常状态拦截 | 课程已结束或关闭签到 | 执行签到/名单编辑 | 接口拒绝并提示业务错误 | ### 自动化测试覆盖(最小集) - 已新增后端单测:`MeetingControllerTest` - 会议状态拦截:`cancelled/completed` 下签到与名单编辑不可执行 - 正常状态放行:`draft/ongoing` - 导出构建:会议签到 xlsx 结构与关键字段生成 - 已新增后端单测:`OfflineCourseControllerTest` - 线下课签到窗口校验:未开始/已结束拦截、时间窗内放行 - 可见范围解析:超级管理员全量、普通用户管理组织+所属组织、空范围兜底 ## 产品规划图 | 阶段 | 目标 | 主要功能 | |------|------|----------| | 已完成 | 打通核心党建业务闭环 | 认证与权限、组织管理、人员管理、党员信息、会议管理、会议签到、线下课签到、议题审批、学习记录、党费管理、统计分析、导出能力 | | 进行中 | 提升业务联动与可用性 | 会议签到导出优化、线下课签到体验收口、自动化测试补齐、异常场景拦截、菜单分组与导航优化 | | 后续计划 | 扩展监督治理与归档能力 | 更完整的监督台账、组织考核指标、材料归档、通知提醒、批量导入导出增强、图表和报表细化 | ### 规划说明 - 核心思路是先把“组织、人员、党员、会议、课程、党费”这些主链路打通,再逐步补齐监督、统计和归档能力。 - 当前实现重点已经从“功能可用”转向“业务收口、异常处理、测试覆盖和导出质量”。 - 后续扩展会优先围绕党组织管理的实际使用场景,避免引入与主线业务脱节的功能。