From 6522a9cf051f3a6dd4239b3a1b398cd692ad42aa Mon Sep 17 00:00:00 2001 From: bruce Date: Mon, 24 Mar 2025 14:30:47 +0800 Subject: [PATCH] =?UTF-8?q?v0.2.14=20=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/README.md | 20 + doc/api.md | 961 +++++++++++++++++++++++++++ sams-ui/src/api/activity/activity.js | 53 ++ sams-ui/src/api/club/club.js | 69 ++ sams-ui/src/api/system/user.js | 48 ++ sams-ui/src/config/env.js | 10 + sams-ui/src/config/index.js | 9 + sams-ui/src/config/settings.js | 83 +++ sams-ui/src/utils/auth.js | 26 + sams-ui/src/utils/request.js | 73 +- sams-ui/src/views/activity/list.vue | 277 ++++++++ sams-ui/src/views/club/list.vue | 310 +++++++++ sams-ui/src/views/home/index.vue | 169 +++++ sams-ui/src/views/login/index.vue | 35 +- 14 files changed, 2101 insertions(+), 42 deletions(-) create mode 100644 doc/README.md create mode 100644 doc/api.md create mode 100644 sams-ui/src/api/activity/activity.js create mode 100644 sams-ui/src/api/club/club.js create mode 100644 sams-ui/src/api/system/user.js create mode 100644 sams-ui/src/config/env.js create mode 100644 sams-ui/src/config/index.js create mode 100644 sams-ui/src/config/settings.js create mode 100644 sams-ui/src/utils/auth.js create mode 100644 sams-ui/src/views/activity/list.vue create mode 100644 sams-ui/src/views/club/list.vue create mode 100644 sams-ui/src/views/home/index.vue diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 00000000..c749844f --- /dev/null +++ b/doc/README.md @@ -0,0 +1,20 @@ +# SAMS系统文档 + +本目录包含SAMS系统的相关文档。 + +## 文档结构 + +- `api.md`: API接口文档,包含所有后端接口的详细说明 + - 认证接口 + - 系统管理接口 + - 活动管理接口 + - 社团管理接口 + - 通用说明 + +## 文档更新 + +本文档会随着系统开发持续更新。如果您发现文档中的任何问题或有改进建议,请及时反馈。 + +## 文档格式 + +所有文档均使用Markdown格式编写,可以使用任何支持Markdown的编辑器或查看器阅读。 \ No newline at end of file diff --git a/doc/api.md b/doc/api.md new file mode 100644 index 00000000..0a1224d6 --- /dev/null +++ b/doc/api.md @@ -0,0 +1,961 @@ +# SAMS系统接口文档 + +## 1. 认证接口 (AuthController) + +### 1.1 用户登录 +- **接口路径**: `/login` +- **请求方式**: POST +- **请求参数**: +```json +{ + "username": "string", // 用户名/学号/邮箱 + "password": "string" // 密码 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "登录成功", + "data": "JWT令牌" +} +``` + +## 2. 系统管理接口 (sys) + +### 2.1 用户管理 (UserController) +- **接口路径**: `/api/user` +- **功能**: 普通用户管理相关接口 + +#### 2.1.1 修改密码 +- **接口路径**: `/api/user/change-password` +- **请求方式**: PUT +- **请求参数**: +```json +{ + "userId": "number", // 用户ID + "oldPassword": "string", // 旧密码 + "newPassword": "string" // 新密码 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "密码修改成功", + "data": null +} +``` + +#### 2.1.2 更新个人信息 +- **接口路径**: `/api/user/profile` +- **请求方式**: PUT +- **请求参数**: +```json +{ + "userId": "number", // 用户ID + "nickname": "string", // 昵称 + "email": "string", // 邮箱 + "avatar": "string" // 头像URL +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "个人信息更新成功", + "data": null +} +``` + +#### 2.1.3 获取用户详情 +- **接口路径**: `/api/user/{userId}` +- **请求方式**: GET +- **路径参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "userId": "number", + "username": "string", + "nickname": "string", + "email": "string", + "avatar": "string" + } +} +``` + +#### 2.1.4 上传头像 +- **接口路径**: `/api/user/avatar` +- **请求方式**: POST +- **请求参数**: + - file: 头像文件(MultipartFile) +- **响应结果**: 返回上传后的头像URL字符串 + +### 2.2 管理员用户管理 (AdminUserController) +- **接口路径**: `/api/admin/user` +- **功能**: 管理员用户管理相关接口 + +#### 2.2.1 批量导入用户 +- **接口路径**: `/api/admin/user/import` +- **请求方式**: POST +- **请求参数**: +```json +[ + { + "username": "string", + "password": "string", + "email": "string", + "role": "string" + } +] +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "用户导入成功", + "data": null +} +``` + +#### 2.2.2 查询用户列表 +- **接口路径**: `/api/admin/user/list` +- **请求方式**: GET +- **请求参数**: + - keyword: 关键字(可选,用于搜索用户名、学号、邮箱) +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "userId": "number", + "username": "string", + "email": "string", + "role": "string", + "status": "string" + } + ] +} +``` + +#### 2.2.3 更新用户信息 +- **接口路径**: `/api/admin/user/update` +- **请求方式**: PUT +- **请求参数**: +```json +{ + "userId": "number", + "role": "string", + "status": "string", + "password": "string" +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "用户信息更新成功", + "data": null +} +``` + +#### 2.2.4 重置用户密码 +- **接口路径**: `/api/admin/user/reset-password/{userId}` +- **请求方式**: PUT +- **路径参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "密码已重置为 123456", + "data": null +} +``` + +#### 2.2.5 封禁用户 +- **接口路径**: `/api/admin/user/ban/{userId}` +- **请求方式**: PUT +- **路径参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "用户已封禁", + "data": null +} +``` + +#### 2.2.6 删除用户 +- **接口路径**: `/api/admin/user/{userId}` +- **请求方式**: DELETE +- **路径参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "用户已删除", + "data": null +} +``` + +### 2.3 文件管理 (FileController) +- **接口路径**: `/api/file` +- **功能**: 文件上传下载相关接口 +- **说明**: 该模块目前为空,待实现 + +## 3. 活动管理接口 (ams) + +### 3.1 活动管理 (ActivityController) +- **接口路径**: `/api/admin/activity` +- **功能**: 活动创建、修改、查询等 +- **权限要求**: 需要相应角色权限 + +#### 3.1.1 创建活动 +- **接口路径**: `/api/admin/activity/create` +- **请求方式**: POST +- **权限要求**: USER, CLUB_ADMIN +- **请求参数**: +```json +{ + "title": "string", // 活动标题 + "description": "string", // 活动描述 + "startTime": "string", // 开始时间 + "endTime": "string", // 结束时间 + "location": "string", // 活动地点 + "maxParticipants": "number", // 最大参与人数 + "clubId": "number" // 主办社团ID +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "活动创建成功,等待审批", + "data": null +} +``` + +#### 3.1.2 取消活动 +- **接口路径**: `/api/admin/activity/cancel` +- **请求方式**: PUT +- **权限要求**: CLUB_ADMIN +- **请求参数**: + - actId: 活动ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "活动已取消", + "data": null +} +``` + +### 3.2 审批管理 (ApprovalController) +- **接口路径**: `/api/admin/approval` +- **功能**: 活动审批相关接口 +- **权限要求**: 需要相应角色权限 + +#### 3.2.1 审批通过 +- **接口路径**: `/api/admin/approval/approve` +- **请求方式**: POST +- **权限要求**: CLUB_ADMIN, DEPARTMENT_ADMIN, COLLEGE_ADMIN +- **请求参数**: + - apprId: 审批ID + - approverId: 审批人ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "审批已通过", + "data": null +} +``` + +#### 3.2.2 审批拒绝 +- **接口路径**: `/api/admin/approval/reject` +- **请求方式**: POST +- **权限要求**: CLUB_ADMIN, DEPARTMENT_ADMIN, COLLEGE_ADMIN +- **请求参数**: + - apprId: 审批ID + - reason: 拒绝原因 + - approverId: 审批人ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "审批已拒绝", + "data": null +} +``` + +### 3.3 评论管理 (CommentController) +- **接口路径**: `/api/comment` +- **功能**: 活动评论相关接口 +- **权限要求**: 需要相应角色权限 + +#### 3.3.1 发表评论 +- **接口路径**: `/api/comment/add` +- **请求方式**: POST +- **权限要求**: USER +- **请求参数**: + - userId: 用户ID + - actId: 活动ID + - content: 评论内容 + - parentCommentId: 父评论ID(可选,用于回复) +- **响应结果**: +```json +{ + "code": 200, + "msg": "评论成功", + "data": null +} +``` + +#### 3.3.2 删除评论 +- **接口路径**: `/api/comment/delete` +- **请求方式**: DELETE +- **权限要求**: USER, ADMIN +- **请求参数**: + - commentId: 评论ID + - userId: 用户ID + - isAdmin: 是否为管理员 +- **响应结果**: +```json +{ + "code": 200, + "msg": "评论已删除", + "data": null +} +``` + +#### 3.3.3 获取活动评论列表 +- **接口路径**: `/api/comment/list` +- **请求方式**: GET +- **请求参数**: + - actId: 活动ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "commentId": "number", + "userId": "number", + "content": "string", + "createTime": "string" + } + ] +} +``` + +#### 3.3.4 获取评论回复 +- **接口路径**: `/api/comment/replies` +- **请求方式**: GET +- **请求参数**: + - parentCommentId: 父评论ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "commentId": "number", + "userId": "number", + "content": "string", + "createTime": "string" + } + ] +} +``` + +### 3.4 反应管理 (ReactionController) +- **接口路径**: `/api/reaction` +- **功能**: 活动反应(点赞等)相关接口 +- **权限要求**: 需要相应角色权限 + +#### 3.4.1 添加反应 +- **接口路径**: `/api/reaction/add` +- **请求方式**: POST +- **权限要求**: USER +- **请求参数**: + - actId: 活动ID + - userId: 用户ID + - reactionType: 反应类型(LIKE/DISLIKE) +- **响应结果**: +```json +{ + "code": 200, + "msg": "操作成功", + "data": null +} +``` + +#### 3.4.2 取消反应 +- **接口路径**: `/api/reaction/remove` +- **请求方式**: DELETE +- **权限要求**: USER +- **请求参数**: + - actId: 活动ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "已取消点赞/点踩", + "data": null +} +``` + +#### 3.4.3 获取反应统计 +- **接口路径**: `/api/reaction/stats` +- **请求方式**: GET +- **请求参数**: + - actId: 活动ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "likes": "number", + "dislikes": "number" + } +} +``` + +#### 3.4.4 获取活动反应列表 +- **接口路径**: `/api/reaction/list` +- **请求方式**: GET +- **权限要求**: ADMIN +- **请求参数**: + - actId: 活动ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "reactionId": "number", + "userId": "number", + "reactionType": "string", + "createTime": "string" + } + ] +} +``` + +### 3.5 报名管理 (RegistrationController) +- **接口路径**: `/api/registration` +- **功能**: 活动报名相关接口 +- **权限要求**: 需要相应角色权限 + +#### 3.5.1 报名活动 +- **接口路径**: `/api/registration/register` +- **请求方式**: POST +- **权限要求**: USER +- **请求参数**: + - actId: 活动ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "报名成功", + "data": null +} +``` + +#### 3.5.2 取消报名 +- **接口路径**: `/api/registration/cancel` +- **请求方式**: PUT +- **权限要求**: USER +- **请求参数**: + - actId: 活动ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "报名已取消", + "data": null +} +``` + +#### 3.5.3 活动签到 +- **接口路径**: `/api/registration/attend` +- **请求方式**: PUT +- **权限要求**: USER +- **请求参数**: + - actId: 活动ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "签到成功", + "data": null +} +``` + +#### 3.5.4 获取我的报名列表 +- **接口路径**: `/api/registration/my-registrations` +- **请求方式**: GET +- **权限要求**: USER +- **请求参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "registrationId": "number", + "actId": "number", + "userId": "number", + "status": "string", + "createTime": "string" + } + ] +} +``` + +#### 3.5.5 获取活动报名列表 +- **接口路径**: `/api/registration/list` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **请求参数**: + - actId: 活动ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "registrationId": "number", + "actId": "number", + "userId": "number", + "status": "string", + "createTime": "string" + } + ] +} +``` + +## 4. 社团管理接口 (sms) + +### 4.1 社团管理 (ClubController) +- **接口路径**: `/api/admin/club` +- **功能**: 社团基本信息管理 +- **权限要求**: 需要相应角色权限 + +#### 4.1.1 添加社团 +- **接口路径**: `/api/admin/club/add` +- **请求方式**: POST +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **请求参数**: +```json +{ + "name": "string", // 社团名称 + "description": "string", // 社团描述 + "collegeId": "number", // 所属学院ID + "type": "string" // 社团类型 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "社团添加成功", + "data": null +} +``` + +#### 4.1.2 更新社团信息 +- **接口路径**: `/api/admin/club/update` +- **请求方式**: PUT +- **权限要求**: ADMIN, CLUB_ADMIN +- **请求参数**: +```json +{ + "clubId": "number", // 社团ID + "name": "string", // 社团名称 + "description": "string", // 社团描述 + "type": "string" // 社团类型 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "社团信息更新成功", + "data": null +} +``` + +#### 4.1.3 删除社团 +- **接口路径**: `/api/admin/club/delete/{clubId}` +- **请求方式**: DELETE +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **路径参数**: + - clubId: 社团ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "社团删除成功", + "data": null +} +``` + +#### 4.1.4 获取社团详情 +- **接口路径**: `/api/admin/club/{clubId}` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN, CLUB_ADMIN +- **路径参数**: + - clubId: 社团ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "clubId": "number", + "name": "string", + "description": "string", + "collegeId": "number", + "type": "string" + } +} +``` + +#### 4.1.5 查询社团列表 +- **接口路径**: `/api/admin/club/list` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN, CLUB_ADMIN +- **请求参数**: + - keyword: 关键字(可选,用于搜索) + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "clubId": "number", + "name": "string", + "description": "string", + "collegeId": "number", + "type": "string" + } + ] +} +``` + +### 4.2 社团成员管理 (ClubUserController) +- **接口路径**: `/api/admin/club/user` +- **功能**: 社团成员管理相关接口 +- **权限要求**: 需要相应角色权限 + +#### 4.2.1 添加社团成员 +- **接口路径**: `/api/admin/club/user/add` +- **请求方式**: POST +- **权限要求**: CLUB_ADMIN +- **请求参数**: + - clubId: 社团ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "成员已加入社团", + "data": null +} +``` + +#### 4.2.2 移除社团成员 +- **接口路径**: `/api/admin/club/user/remove` +- **请求方式**: DELETE +- **权限要求**: CLUB_ADMIN, COLLEGE_ADMIN +- **请求参数**: + - clubId: 社团ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "成员已移除", + "data": null +} +``` + +#### 4.2.3 查询社团成员列表 +- **接口路径**: `/api/admin/club/user/list` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **请求参数**: + - clubId: 社团ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "userId": "number", + "username": "string", + "role": "string" + } + ] +} +``` + +#### 4.2.4 查看我的社团成员 +- **接口路径**: `/api/admin/club/user/my-club-members` +- **请求方式**: GET +- **权限要求**: CLUB_ADMIN +- **请求参数**: + - clubId: 社团ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "userId": "number", + "username": "string", + "role": "string" + } + ] +} +``` + +### 4.3 学院管理 (CollegeController) +- **接口路径**: `/api/admin/college` +- **功能**: 学院信息管理相关接口 +- **权限要求**: 需要相应角色权限 + +#### 4.3.1 添加学院 +- **接口路径**: `/api/admin/college/add` +- **请求方式**: POST +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **请求参数**: +```json +{ + "name": "string", // 学院名称 + "description": "string", // 学院描述 + "code": "string" // 学院代码 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "学院添加成功", + "data": null +} +``` + +#### 4.3.2 更新学院信息 +- **接口路径**: `/api/admin/college/update` +- **请求方式**: PUT +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **请求参数**: +```json +{ + "collegeId": "number", // 学院ID + "name": "string", // 学院名称 + "description": "string", // 学院描述 + "code": "string" // 学院代码 +} +``` +- **响应结果**: +```json +{ + "code": 200, + "msg": "学院更新成功", + "data": null +} +``` + +#### 4.3.3 删除学院 +- **接口路径**: `/api/admin/college/delete/{collegeId}` +- **请求方式**: DELETE +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **路径参数**: + - collegeId: 学院ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "学院删除成功", + "data": null +} +``` + +#### 4.3.4 获取学院详情 +- **接口路径**: `/api/admin/college/{collegeId}` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **路径参数**: + - collegeId: 学院ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "collegeId": "number", + "name": "string", + "description": "string", + "code": "string" + } +} +``` + +#### 4.3.5 获取我的学院信息 +- **接口路径**: `/api/admin/college/my-college` +- **请求方式**: GET +- **权限要求**: DEPARTMENT_ADMIN +- **请求参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "collegeId": "number", + "name": "string", + "description": "string", + "code": "string" + } +} +``` + +#### 4.3.6 查询学院列表 +- **接口路径**: `/api/admin/college/list` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **请求参数**: + - keyword: 关键字(可选,用于搜索) + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": [ + { + "collegeId": "number", + "name": "string", + "description": "string", + "code": "string" + } + ] +} +``` + +#### 4.3.7 指派学院负责人 +- **接口路径**: `/api/admin/college/assign` +- **请求方式**: POST +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **请求参数**: + - collegeId: 学院ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "负责人指派成功", + "data": null +} +``` + +#### 4.3.8 移除学院负责人 +- **接口路径**: `/api/admin/college/remove` +- **请求方式**: DELETE +- **权限要求**: ADMIN, COLLEGE_ADMIN +- **请求参数**: + - collegeId: 学院ID + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "负责人移除成功", + "data": null +} +``` + +#### 4.3.9 获取学院负责人 +- **接口路径**: `/api/admin/college/getleader/{collegeId}` +- **请求方式**: GET +- **权限要求**: ADMIN, COLLEGE_ADMIN, DEPARTMENT_ADMIN +- **路径参数**: + - collegeId: 学院ID +- **请求参数**: + - userId: 用户ID +- **响应结果**: +```json +{ + "code": 200, + "msg": "success", + "data": { + "userId": "number", + "username": "string", + "role": "string" + } +} +``` + +## 通用说明 + +1. **认证方式**: + - 除登录接口外,所有接口都需要在请求头中携带 JWT Token + - Token 格式:`Authorization: Bearer ` + +2. **响应格式**: + - 所有接口统一使用 `AjaxResult` 封装响应 + - 成功响应示例: + ```json + { + "code": 200, + "msg": "操作成功", + "data": {} + } + ``` + - 失败响应示例: + ```json + { + "code": 500, + "msg": "操作失败", + "data": null + } + ``` + +3. **请求方式**: + - 查询类接口使用 GET + - 创建类接口使用 POST + - 更新类接口使用 PUT + - 删除类接口使用 DELETE + +4. **数据格式**: + - 请求和响应均使用 JSON 格式 + - 日期时间格式统一使用 ISO 8601 标准 \ No newline at end of file diff --git a/sams-ui/src/api/activity/activity.js b/sams-ui/src/api/activity/activity.js new file mode 100644 index 00000000..995591e6 --- /dev/null +++ b/sams-ui/src/api/activity/activity.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 创建活动 +export function createActivity(data) { + return request({ + url: '/api/admin/activity/create', + method: 'post', + data + }) +} + +// 取消活动 +export function cancelActivity(data) { + return request({ + url: '/api/admin/activity/cancel', + method: 'put', + data + }) +} + +// 获取活动列表 +export function getActivityList(params) { + return request({ + url: '/api/admin/activity/list', + method: 'get', + params + }) +} + +// 获取活动详情 +export function getActivityDetail(actId) { + return request({ + url: `/api/admin/activity/${actId}`, + method: 'get' + }) +} + +// 更新活动信息 +export function updateActivity(data) { + return request({ + url: '/api/admin/activity/update', + method: 'put', + data + }) +} + +// 删除活动 +export function deleteActivity(actId) { + return request({ + url: `/api/admin/activity/delete/${actId}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/sams-ui/src/api/club/club.js b/sams-ui/src/api/club/club.js new file mode 100644 index 00000000..44e07026 --- /dev/null +++ b/sams-ui/src/api/club/club.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + +// 添加社团 +export function addClub(data) { + return request({ + url: '/api/admin/club/add', + method: 'post', + data + }) +} + +// 更新社团信息 +export function updateClub(data) { + return request({ + url: '/api/admin/club/update', + method: 'put', + data + }) +} + +// 删除社团 +export function deleteClub(clubId) { + return request({ + url: `/api/admin/club/delete/${clubId}`, + method: 'delete' + }) +} + +// 获取社团详情 +export function getClubDetail(clubId) { + return request({ + url: `/api/admin/club/${clubId}`, + method: 'get' + }) +} + +// 获取社团列表 +export function getClubList(params) { + return request({ + url: '/api/admin/club/list', + method: 'get', + params + }) +} + +// 获取社团成员列表 +export function getClubMembers(clubId) { + return request({ + url: `/api/admin/club/${clubId}/members`, + method: 'get' + }) +} + +// 添加社团成员 +export function addClubMember(data) { + return request({ + url: '/api/admin/club/member/add', + method: 'post', + data + }) +} + +// 移除社团成员 +export function removeClubMember(clubId, userId) { + return request({ + url: `/api/admin/club/${clubId}/member/${userId}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/sams-ui/src/api/system/user.js b/sams-ui/src/api/system/user.js new file mode 100644 index 00000000..1d467986 --- /dev/null +++ b/sams-ui/src/api/system/user.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 用户登录 +export function login(data) { + return request({ + url: '/api/login', + method: 'post', + data + }) +} + +// 获取用户信息 +export function getUserInfo(userId) { + return request({ + url: `/api/user/${userId}`, + method: 'get' + }) +} + +// 修改密码 +export function changePassword(data) { + return request({ + url: '/api/user/change-password', + method: 'put', + data + }) +} + +// 更新用户信息 +export function updateProfile(data) { + return request({ + url: '/api/user/profile', + method: 'put', + data + }) +} + +// 上传头像 +export function uploadAvatar(data) { + return request({ + url: '/api/user/avatar', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data + }) +} \ No newline at end of file diff --git a/sams-ui/src/config/env.js b/sams-ui/src/config/env.js new file mode 100644 index 00000000..bbdf32ce --- /dev/null +++ b/sams-ui/src/config/env.js @@ -0,0 +1,10 @@ +export default { + development: { + baseUrl: 'http://localhost:8080', + uploadUrl: 'http://localhost:8080/api/file/upload' + }, + production: { + baseUrl: 'http://your-production-domain', + uploadUrl: 'http://your-production-domain/api/file/upload' + } +} \ No newline at end of file diff --git a/sams-ui/src/config/index.js b/sams-ui/src/config/index.js new file mode 100644 index 00000000..d3d9cb15 --- /dev/null +++ b/sams-ui/src/config/index.js @@ -0,0 +1,9 @@ +import env from './env' +import settings from './settings' + +const config = { + ...env[process.env.NODE_ENV || 'development'], + ...settings +} + +export default config \ No newline at end of file diff --git a/sams-ui/src/config/settings.js b/sams-ui/src/config/settings.js new file mode 100644 index 00000000..9a5e769e --- /dev/null +++ b/sams-ui/src/config/settings.js @@ -0,0 +1,83 @@ +export default { + /** + * 系统标题 + */ + title: 'SAMS学生社团管理系统', + + /** + * 系统logo + */ + logo: '/logo.png', + + /** + * 是否显示设置右面板 + */ + showSettings: true, + + /** + * 是否显示标签视图 + */ + tagsView: true, + + /** + * 是否固定头部 + */ + fixedHeader: true, + + /** + * 是否显示侧边栏Logo + */ + sidebarLogo: true, + + /** + * 是否显示动态标题 + */ + dynamicTitle: true, + + /** + * 主题色 + */ + theme: '#409EFF', + + /** + * 导航模式 vertical / horizontal + */ + navMode: 'vertical', + + /** + * 内容区域宽度 fluid / fixed + */ + contentWidth: 'fluid', + + /** + * 侧边栏主题 dark / light + */ + sidebarTheme: 'dark', + + /** + * 侧边栏折叠 + */ + sidebarCollapse: false, + + /** + * 布局模式 + * default / classic / transverse / columns + */ + layout: 'default', + + /** + * 是否开启水印 + */ + watermark: false, + + /** + * 水印配置 + */ + watermarkConfig: { + text: 'SAMS', + fontColor: '#333', + fontSize: 16, + rotate: -30, + zIndex: 1000 + } +} \ No newline at end of file diff --git a/sams-ui/src/utils/auth.js b/sams-ui/src/utils/auth.js new file mode 100644 index 00000000..1983ca58 --- /dev/null +++ b/sams-ui/src/utils/auth.js @@ -0,0 +1,26 @@ +const TokenKey = 'Admin-Token' + +export function getToken() { + return localStorage.getItem(TokenKey) +} + +export function setToken(token) { + return localStorage.setItem(TokenKey, token) +} + +export function removeToken() { + return localStorage.removeItem(TokenKey) +} + +export function getUserInfo() { + const userInfo = localStorage.getItem('userInfo') + return userInfo ? JSON.parse(userInfo) : null +} + +export function setUserInfo(userInfo) { + return localStorage.setItem('userInfo', JSON.stringify(userInfo)) +} + +export function removeUserInfo() { + return localStorage.removeItem('userInfo') +} \ No newline at end of file diff --git a/sams-ui/src/utils/request.js b/sams-ui/src/utils/request.js index d4eeb547..2287e701 100644 --- a/sams-ui/src/utils/request.js +++ b/sams-ui/src/utils/request.js @@ -1,31 +1,62 @@ import axios from 'axios' -import { ElMessage } from 'element-plus' +import { ElMessage, ElMessageBox } from 'element-plus' +import { getToken } from '@/utils/auth' +import config from '@/config' +// 创建axios实例 const service = axios.create({ - baseURL: '/api', - timeout: 5000 + baseURL: config.baseUrl, + timeout: 10000 }) -service.interceptors.request.use(config => { - const token = localStorage.getItem('token') - - // 只给非登录接口加 token - if (token && config.url !== '/login') { - config.headers.Authorization = `Bearer ${token}` - } - - return config -}) - - -service.interceptors.response.use( - res => { - if (res.data.code === 200) return res.data - ElMessage.error(res.data.message || '请求出错') - return Promise.reject(new Error(res.data.message || 'Error')) +// 请求拦截器 +service.interceptors.request.use( + config => { + const token = getToken() + if (token && config.url !== '/login') { + config.headers.Authorization = `Bearer ${token}` + } + return config }, error => { - ElMessage.error(error.response?.data?.message || '服务器异常') + console.log(error) + return Promise.reject(error) + } +) + +// 响应拦截器 +service.interceptors.response.use( + response => { + const res = response.data + if (res.code !== 200) { + ElMessage({ + message: res.message || '系统错误', + type: 'error', + duration: 5 * 1000 + }) + + // 401: 未登录或token过期 + if (res.code === 401) { + ElMessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + location.reload() + }) + } + return Promise.reject(new Error(res.message || '系统错误')) + } else { + return res + } + }, + error => { + console.log('err' + error) + ElMessage({ + message: error.message, + type: 'error', + duration: 5 * 1000 + }) return Promise.reject(error) } ) diff --git a/sams-ui/src/views/activity/list.vue b/sams-ui/src/views/activity/list.vue new file mode 100644 index 00000000..49cff10d --- /dev/null +++ b/sams-ui/src/views/activity/list.vue @@ -0,0 +1,277 @@ + + + + + \ No newline at end of file diff --git a/sams-ui/src/views/club/list.vue b/sams-ui/src/views/club/list.vue new file mode 100644 index 00000000..f243c66e --- /dev/null +++ b/sams-ui/src/views/club/list.vue @@ -0,0 +1,310 @@ + + + + + \ No newline at end of file diff --git a/sams-ui/src/views/home/index.vue b/sams-ui/src/views/home/index.vue new file mode 100644 index 00000000..f98ec0c0 --- /dev/null +++ b/sams-ui/src/views/home/index.vue @@ -0,0 +1,169 @@ + + + + + \ No newline at end of file diff --git a/sams-ui/src/views/login/index.vue b/sams-ui/src/views/login/index.vue index 91ebdedd..e206518f 100644 --- a/sams-ui/src/views/login/index.vue +++ b/sams-ui/src/views/login/index.vue @@ -2,10 +2,10 @@