智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

18 KiB

智慧教务系统 API 接口文档

📋 接口概述

基础信息

  • API Base URL: http://localhost:20080
  • 接口版本: v1.0
  • 数据格式: JSON
  • 字符编码: UTF-8
  • 认证方式: JWT Token

接口前缀

  • 管理端接口: /adminapi/*
  • 客户端接口: /api/*

统一响应格式

{
  "code": 1,           // 状态码:1-成功,0-失败
  "msg": "操作成功",    // 响应消息
  "data": {}          // 响应数据
}

状态码说明

状态码 说明 描述
1 成功 请求处理成功
0 失败 请求处理失败
401 未授权 Token无效或已过期
403 禁止访问 权限不足
404 未找到 资源不存在
500 服务器错误 内部服务器错误

🔐 认证机制

JWT Token 认证

所有需要认证的接口都需要在请求头中携带Token:

Authorization: Bearer {token}

Token 获取

通过登录接口获取Token,Token有效期为24小时。

Token 刷新

当Token即将过期时,可通过刷新接口获取新Token。

🔑 管理端接口 (/adminapi)

认证相关

1. 管理员登录

接口地址: POST /adminapi/login/login

请求参数:

{
  "username": "admin",     // 用户名
  "password": "123456"     // 密码
}

响应示例:

{
  "code": 1,
  "msg": "登录成功",
  "data": {
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "expire": 86400,
    "user_info": {
      "uid": 1,
      "username": "admin",
      "nickname": "超级管理员",
      "avatar": "",
      "role_ids": [1],
      "permissions": ["*"]
    }
  }
}

curl 示例:

curl -X POST http://localhost:20080/adminapi/login/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'

2. 获取用户信息

接口地址: GET /adminapi/user/info

请求头:

Authorization: Bearer {token}

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "uid": 1,
    "username": "admin",
    "nickname": "超级管理员",
    "avatar": "",
    "role_ids": [1],
    "permissions": ["*"],
    "campus_ids": [0]  // 0表示所有校区
  }
}

3. 退出登录

接口地址: POST /adminapi/login/logout

请求头:

Authorization: Bearer {token}

响应示例:

{
  "code": 1,
  "msg": "退出成功",
  "data": null
}

校区管理

1. 校区列表

接口地址: GET /adminapi/campus/list

请求参数:

page: 1           // 页码
limit: 20         // 每页数量
keyword: ""       // 搜索关键词
status: ""        // 状态筛选:1-启用,0-禁用

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "campus_name": "总校区",
        "address": "北京市朝阳区xxx路xxx号",
        "phone": "010-12345678",
        "contact_person": "张三",
        "status": 1,
        "created_at": "2025-01-01 10:00:00",
        "updated_at": "2025-01-14 15:30:00"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2. 新增校区

接口地址: POST /adminapi/campus/add

请求参数:

{
  "campus_name": "新校区",
  "address": "北京市海淀区xxx路xxx号",
  "phone": "010-87654321",
  "contact_person": "李四",
  "status": 1,
  "remark": "备注信息"
}

响应示例:

{
  "code": 1,
  "msg": "添加成功",
  "data": {
    "id": 2
  }
}

3. 编辑校区

接口地址: PUT /adminapi/campus/edit/{id}

请求参数:

{
  "campus_name": "更新后的校区名称",
  "address": "更新后的地址",
  "phone": "010-11111111",
  "contact_person": "王五",
  "status": 1,
  "remark": "更新后的备注"
}

4. 删除校区

接口地址: DELETE /adminapi/campus/delete/{id}

响应示例:

{
  "code": 1,
  "msg": "删除成功",
  "data": null
}

人员管理

1. 员工列表

接口地址: GET /adminapi/personnel/list

请求参数:

page: 1
limit: 20
keyword: ""       // 姓名或工号搜索
campus_id: ""     // 校区筛选
dept_id: ""       // 部门筛选
status: ""        // 状态筛选

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 51,
        "name": "花花",
        "employee_id": "EMP001",
        "phone": "13800138000",
        "email": "huahua@example.com",
        "dept_name": "教练部",
        "campus_name": "总校区",
        "role_type": 10,
        "role_name": "校长",
        "status": 1,
        "created_at": "2025-01-01 10:00:00"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2. 新增员工

接口地址: POST /adminapi/personnel/add

请求参数:

{
  "name": "新员工",
  "employee_id": "EMP002",
  "phone": "13900139000",
  "email": "newstaff@example.com",
  "dept_id": 2,
  "campus_ids": [1, 2],
  "role_type": 5,
  "password": "123456",
  "status": 1
}

3. 学员列表

接口地址: GET /adminapi/student/list

请求参数:

page: 1
limit: 20
keyword: ""       // 姓名或学号搜索
campus_id: ""     // 校区筛选
class_id: ""      // 班级筛选
status: ""        // 状态筛选

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "student_name": "小明",
        "student_no": "STU001",
        "gender": 1,
        "age": 8,
        "phone": "13700137000",
        "parent_name": "明爸爸",
        "parent_phone": "13600136000",
        "campus_name": "总校区",
        "class_name": "跳绳初级班",
        "status": 1,
        "created_at": "2025-01-01 10:00:00"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

课程管理

1. 课程列表

接口地址: GET /adminapi/course/list

请求参数:

page: 1
limit: 20
keyword: ""       // 课程名称搜索
course_type: ""   // 课程类型筛选
status: ""        // 状态筛选

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "course_name": "跳绳基础课程",
        "course_type": "跳绳",
        "duration": 60,
        "session_count": 12,
        "single_session_count": 1,
        "price": 1200.00,
        "age_range": "6-12岁",
        "description": "适合初学者的跳绳课程",
        "cover_image": "/uploads/course/cover1.jpg",
        "status": 1,
        "created_at": "2025-01-01 10:00:00"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2. 新增课程

接口地址: POST /adminapi/course/add

请求参数:

{
  "course_name": "新课程",
  "course_type": "篮球",
  "duration": 90,
  "session_count": 16,
  "single_session_count": 1,
  "price": 1600.00,
  "age_range": "8-16岁",
  "description": "篮球基础技能训练",
  "cover_image": "/uploads/course/cover2.jpg",
  "status": 1
}

班级管理

1. 班级列表

接口地址: GET /adminapi/class/list

请求参数:

page: 1
limit: 20
keyword: ""       // 班级名称搜索
campus_id: ""     // 校区筛选
course_id: ""     // 课程筛选
status: ""        // 状态筛选

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "class_name": "跳绳初级班A",
        "campus_name": "总校区",
        "course_name": "跳绳基础课程",
        "head_coach": "张教练",
        "assistant_coach": "李助教",
        "capacity": 15,
        "current_count": 12,
        "status": 1,
        "created_at": "2025-01-01 10:00:00"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2. 新增班级

接口地址: POST /adminapi/class/add

请求参数:

{
  "class_name": "新班级",
  "campus_id": 1,
  "course_id": 1,
  "head_coach": 51,
  "assistant_coach": 52,
  "capacity": 20,
  "status": 1,
  "remark": "备注信息"
}

排课系统

1. 课程安排列表

接口地址: GET /adminapi/schedule/list

请求参数:

page: 1
limit: 20
date_start: "2025-01-01"  // 开始日期
date_end: "2025-01-31"    // 结束日期
campus_id: ""             // 校区筛选
coach_id: ""              // 教练筛选
venue_id: ""              // 场地筛选

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "course_name": "跳绳基础课程",
        "class_name": "跳绳初级班A",
        "coach_name": "张教练",
        "venue_name": "训练场地A",
        "course_date": "2025-01-15",
        "time_slot": "09:00-10:00",
        "available_capacity": 15,
        "booked_count": 12,
        "status": 1,
        "remarks": "正常上课"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20
  }
}

2. 新增课程安排

接口地址: POST /adminapi/schedule/add

请求参数:

{
  "course_id": 1,
  "class_id": 1,
  "coach_id": 51,
  "venue_id": 1,
  "course_date": "2025-01-15",
  "time_slot": "09:00-10:00",
  "available_capacity": 15,
  "remarks": "正常上课"
}

财务管理

1. 收费记录列表

接口地址: GET /adminapi/finance/payment/list

请求参数:

page: 1
limit: 20
date_start: "2025-01-01"
date_end: "2025-01-31"
campus_id: ""
student_id: ""
payment_type: ""  // 支付方式
status: ""        // 状态

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "list": [
      {
        "id": 1,
        "student_name": "小明",
        "course_name": "跳绳基础课程",
        "amount": 1200.00,
        "payment_type": "微信支付",
        "payment_time": "2025-01-15 10:30:00",
        "operator": "收费员",
        "status": 1,
        "remark": "学费"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 20,
    "summary": {
      "total_amount": 1200.00,
      "count": 1
    }
  }
}

2. 新增收费记录

接口地址: POST /adminapi/finance/payment/add

请求参数:

{
  "student_id": 1,
  "course_id": 1,
  "amount": 1200.00,
  "payment_type": "微信支付",
  "payment_time": "2025-01-15 10:30:00",
  "remark": "学费"
}

数据统计

1. 数据看板

接口地址: GET /adminapi/statistics/dashboard

请求参数:

date_start: "2025-01-01"
date_end: "2025-01-31"
campus_id: ""  // 校区筛选,空表示所有校区

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "today": {
      "income": 5600.00,
      "new_students": 3,
      "classes": 12,
      "attendance_rate": 95.5
    },
    "month": {
      "income": 156000.00,
      "new_students": 45,
      "total_students": 320,
      "total_classes": 280
    },
    "trends": {
      "income_trend": [1200, 1500, 1800, 2100, 1900, 2200, 2400],
      "student_trend": [2, 3, 1, 4, 2, 3, 5],
      "attendance_trend": [92.5, 94.2, 96.1, 93.8, 95.5, 97.2, 95.8]
    }
  }
}

2. 收入统计

接口地址: GET /adminapi/statistics/income

请求参数:

date_start: "2025-01-01"
date_end: "2025-01-31"
campus_id: ""
group_by: "day"  // 分组方式:day/week/month

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "total_amount": 156000.00,
    "chart_data": [
      {
        "date": "2025-01-01",
        "amount": 5200.00,
        "count": 4
      },
      {
        "date": "2025-01-02",
        "amount": 6800.00,
        "count": 5
      }
    ],
    "summary": {
      "avg_daily": 5200.00,
      "max_daily": 8900.00,
      "min_daily": 2100.00
    }
  }
}

📱 客户端接口 (/api)

员工端认证

1. 员工登录

接口地址: POST /api/staff/login

请求参数:

{
  "employee_id": "EMP001",  // 工号
  "password": "123456"      // 密码
}

响应示例:

{
  "code": 1,
  "msg": "登录成功",
  "data": {
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "expire": 86400,
    "user_info": {
      "user_id": 51,
      "name": "花花",
      "employee_id": "EMP001",
      "role_type": 10,
      "role_name": "校长",
      "campus_ids": [1, 2],
      "avatar": "/uploads/avatar/51.jpg"
    }
  }
}

2. 获取员工信息

接口地址: GET /api/staff/info

请求头:

Authorization: Bearer {token}

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "user_id": 51,
    "name": "花花",
    "employee_id": "EMP001",
    "phone": "13800138000",
    "email": "huahua@example.com",
    "role_type": 10,
    "role_name": "校长",
    "dept_name": "管理部",
    "campus_ids": [1, 2],
    "campus_names": ["总校区", "分校区A"],
    "avatar": "/uploads/avatar/51.jpg"
  }
}

员工端业务功能

1. 我的课程安排

接口地址: GET /api/staff/schedule

请求参数:

date: "2025-01-15"  // 查询日期,默认今天

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": [
    {
      "id": 1,
      "course_name": "跳绳基础课程",
      "class_name": "跳绳初级班A",
      "venue_name": "训练场地A",
      "time_slot": "09:00-10:00",
      "student_count": 12,
      "status": 1,
      "remarks": "正常上课"
    }
  ]
}

2. 班级学员列表

接口地址: GET /api/staff/class/{class_id}/students

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": {
    "class_info": {
      "id": 1,
      "class_name": "跳绳初级班A",
      "course_name": "跳绳基础课程",
      "capacity": 15,
      "current_count": 12
    },
    "students": [
      {
        "id": 1,
        "student_name": "小明",
        "student_no": "STU001",
        "gender": 1,
        "age": 8,
        "parent_name": "明爸爸",
        "parent_phone": "13600136000",
        "avatar": "/uploads/student/1.jpg",
        "status": 1
      }
    ]
  }
}

3. 考勤打卡

接口地址: POST /api/staff/attendance/checkin

请求参数:

{
  "type": 1,           // 打卡类型:1-上班,2-下班
  "latitude": 39.9042,  // 纬度
  "longitude": 116.4074, // 经度
  "address": "北京市朝阳区xxx路xxx号",
  "remark": "正常打卡"
}

响应示例:

{
  "code": 1,
  "msg": "打卡成功",
  "data": {
    "id": 1,
    "checkin_time": "2025-01-15 08:30:00",
    "type": 1,
    "status": 1
  }
}

学员端功能

1. 学员登录

接口地址: POST /api/student/login

请求参数:

{
  "phone": "13700137000",  // 手机号
  "code": "123456"         // 验证码
}

2. 我的课程

接口地址: GET /api/student/courses

响应示例:

{
  "code": 1,
  "msg": "获取成功",
  "data": [
    {
      "id": 1,
      "course_name": "跳绳基础课程",
      "class_name": "跳绳初级班A",
      "coach_name": "张教练",
      "total_sessions": 12,
      "completed_sessions": 8,
      "remaining_sessions": 4,
      "next_class_time": "2025-01-16 09:00:00",
      "venue_name": "训练场地A"
    }
  ]
}

3. 课程预约

接口地址: POST /api/student/booking

请求参数:

{
  "schedule_id": 1,  // 课程安排ID
  "remark": "正常预约"
}

🔧 开发调试

环境配置

# 启动开发环境
./start.sh

# 查看服务状态
docker ps

# 查看API日志
docker-compose logs -f php

测试工具

Postman 集合

可以导入以下Postman集合进行接口测试:

{
  "info": {
    "name": "智慧教务系统API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "http://localhost:20080"
    },
    {
      "key": "admin_token",
      "value": ""
    },
    {
      "key": "staff_token",
      "value": ""
    }
  ]
}

curl 测试脚本

#!/bin/bash

# 设置基础URL
BASE_URL="http://localhost:20080"

# 管理员登录
echo "=== 管理员登录 ==="
ADMIN_TOKEN=$(curl -s -X POST $BASE_URL/adminapi/login/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}' | \
  jq -r '.data.token')

echo "Admin Token: $ADMIN_TOKEN"

# 获取校区列表
echo "=== 获取校区列表 ==="
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
  "$BASE_URL/adminapi/campus/list" | jq

# 获取员工列表
echo "=== 获取员工列表 ==="
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
  "$BASE_URL/adminapi/personnel/list" | jq

错误处理

常见错误码

错误码 错误信息 解决方案
10001 参数错误 检查请求参数格式和必填字段
10002 Token无效 重新登录获取新Token
10003 权限不足 检查用户角色权限
10004 数据不存在 确认请求的资源ID是否正确
10005 数据库错误 检查数据库连接和SQL语句

调试技巧

  1. 查看详细错误信息

    # 开启调试模式
    echo "APP_DEBUG=true" >> niucloud/.env
    
    # 重启PHP服务
    docker-compose restart php
    
  2. 查看SQL执行日志

    # 进入MySQL容器
    docker exec -it niucloud_mysql mysql -u niucloud -pniucloud123
    
    # 开启查询日志
    SET GLOBAL general_log = 'ON';
    SET GLOBAL general_log_file = '/var/log/mysql/query.log';
    
  3. API响应时间监控

    # 使用curl测试响应时间
    curl -w "@curl-format.txt" -o /dev/null -s "http://localhost:20080/adminapi/user/info"
    

📋 更新日志

v1.0.0 (2025-01-14)

  • 初始版本发布
  • 完成基础认证功能
  • 实现校区管理接口
  • 实现人员管理接口
  • 实现课程管理接口
  • 实现班级管理接口
  • 实现排课系统接口
  • 实现财务管理接口
  • 实现数据统计接口
  • 完成员工端基础功能
  • 完成学员端基础功能

文档维护: 开发团队
最后更新: 2025-01-14
文档版本: v1.0
联系方式: [技术支持邮箱]