少儿舞蹈小程序详细设计文档

目录

  • [1. 引言](#1. 引言)
    • [1.1 文档目的](#1.1 文档目的)
    • [1.2 范围](#1.2 范围)
  • [2. 系统架构设计](#2. 系统架构设计)
    • [2.1 技术选型](#2.1 技术选型)
    • [2.2 系统架构图](#2.2 系统架构图)
  • [3. 数据库设计](#3. 数据库设计)
    • [3.1 核心实体关系 (E-R) 图](#3.1 核心实体关系 (E-R) 图)
    • [3.2 完整数据表结构](#3.2 完整数据表结构)
      • [3.2.1 用户与权限模块 (User & Permissions)](#3.2.1 用户与权限模块 (User & Permissions))
      • [3.2.2 机构与内容模块 (Institution & Content)](#3.2.2 机构与内容模块 (Institution & Content))
      • [3.2.3 课程与商城模块 (Courses & Products)](#3.2.3 课程与商城模块 (Courses & Products))
      • [3.2.4 教学与互动模块 (Teaching & Interaction)](#3.2.4 教学与互动模块 (Teaching & Interaction))
      • [3.2.5 订单与资产模块 (Orders & Assets)](#3.2.5 订单与资产模块 (Orders & Assets))
  • [4. 模块化功能详细设计](#4. 模块化功能详细设计)
    • 通用设计
    • [4.1 首页模块 (FE-001 \~ FE-005)](#4.1 首页模块 (FE-001 ~ FE-005))
    • [4.2 商城模块 (FE-006 \~ FE-007)](#4.2 商城模块 (FE-006 ~ FE-007))
    • [4.3 服务模块 (FE-008 \~ FE-010)](#4.3 服务模块 (FE-008 ~ FE-010))
    • [4.4 我的模块 (FE-011 \~ FE-013)](#4.4 我的模块 (FE-011 ~ FE-013))
  • [5. 非功能需求设计](#5. 非功能需求设计)
  • [6. 后台管理系统设计](#6. 后台管理系统设计)

1. 引言

1.1 文档目的

本技术设计文档(TDD)基于《少儿舞蹈小程序项目需求文档 V1.0》,旨在提供一个全面的技术实现蓝图。本文档详细阐述了系统架构、完整的数据库结构、核心功能模块的接口设计和前后端交互逻辑,作为开发、测试和后续维护工作的核心技术依据。

1.2 范围

本文档覆盖了小程序前端(用户端)和后台管理系统(管理端)的所有功能模块,以及相关的非功能性需求实现方案。


2. 系统架构设计

2.1 技术选型

  • 小程序端 (Frontend):

    • 框架: 使用腾讯云开发作为前端页面搭建平台
  • 后台服务端 (Backend):

    • 语言/框架: Node.js 。
    • 数据库: MySQL 8.0 ,作为主业务数据库。
    • 对象存储: 腾讯云COS,用于存储图片、视频等静态资源。
  • 后台管理系统 (Admin Panel):

    • 框架: 使用腾讯云开发作为后端系统搭建平台。

2.2 系统架构图

架构说明:

采用模块化的后端架构,将业务逻辑拆分为独立的服务模块(如用户、课程、订单等),便于独立开发、部署和扩展。API网关统一处理请求路由、认证和限流。


3. 数据库设计

3.1 核心实体关系 (E-R) 图

3.2 完整数据表结构

3.2.1 用户与权限模块 (User & Permissions)

  • 用户表 (users)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    wechat_openid VARCHAR(128) UK 微信用户唯一标识 (小程序)
    wechat_unionid VARCHAR(128) IDX 微信开放平台唯一标识 (可选)
    nickname VARCHAR(255) 用户昵称
    avatar_url VARCHAR(512) 用户头像URL
    phone_number VARCHAR(20) IDX 用户手机号
    created_at DATETIME 创建时间
    updated_at DATETIME 更新时间
  • 学员表 (students)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    user_id BIGINT FK 关联的家长用户ID (users.id)
    name VARCHAR(100) 学员姓名
    gender TINYINT 性别 (0: 未知, 1: 男, 2: 女)
    birthday DATE 出生日期
    status TINYINT 状态 (1: 正常, 0: 禁用)
    created_at DATETIME 创建时间
    updated_at DATETIME 更新时间
  • 后台管理员表 (admin_users)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    username VARCHAR(100) UK 登录用户名
    password_hash VARCHAR(255) 加密后的密码
    name VARCHAR(100) 真实姓名或昵称
    role_id BIGINT FK 角色ID (roles.id)
    status TINYINT 状态 (1: 启用, 0: 禁用)
    last_login_at DATETIME 最后登录时间
    created_at DATETIME 创建时间
    updated_at DATETIME 更新时间
  • 角色表 (roles)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    name VARCHAR(100) UK 角色名称
    description VARCHAR(255) 角色描述
    created_at DATETIME 创建时间
    updated_at DATETIME 更新时间

3.2.2 机构与内容模块 (Institution & Content)

  • 轮播图表 (banners)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    title VARCHAR(255) 标题
    image_url VARCHAR(512) 图片URL
    link_url VARCHAR(512) 跳转链接 (小程序内页面路径)
    sort_order INT 排序值,值越小越靠前
    status TINYINT 状态 (1: 显示, 0: 隐藏)
    created_at DATETIME 创建时间
  • 文章/介绍表 (articles)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    type VARCHAR(50) IDX 类型 (e.g., 'INTRODUCTION', 'HONOR')
    title VARCHAR(255) 标题
    content LONGTEXT 富文本内容
    status TINYINT 状态 (1: 发布, 0: 草稿)
    created_at DATETIME 创建时间
  • 校区表 (campuses)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    name VARCHAR(255) 校区名称
    address VARCHAR(512) 详细地址
    phone VARCHAR(20) 联系电话
    latitude DECIMAL(10, 7) 纬度
    longitude DECIMAL(10, 7) 经度
    cover_image_url VARCHAR(512) 封面图
    created_at DATETIME 创建时间
  • 教师表 (teachers)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    admin_id BIGINT UK, FK 关联后台用户ID (可选)
    name VARCHAR(100) 教师姓名
    avatar_url VARCHAR(512) 教师头像
    bio TEXT 教师简介
    status TINYINT 状态 (1: 在职, 0: 离职)
    created_at DATETIME 创建时间

3.2.3 课程与商城模块 (Courses & Products)

  • 商品表 (products)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    type VARCHAR(20) IDX 类型 ('COURSE', 'GOODS', 'PACKAGE')
    name VARCHAR(255) 商品/课程名称
    description TEXT 详细描述
    cover_image_url VARCHAR(512) 封面图
    price DECIMAL(10, 2) 售价
    original_price DECIMAL(10, 2) 原价/划线价
    status TINYINT 状态 (1: 上架, 0: 下架)
    stock_quantity INT 库存数量 (-1表示无限)
    created_at DATETIME 创建时间
  • 班级/课时表 (classes)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    product_id BIGINT FK 关联的课程ID (products.id)
    teacher_id BIGINT FK 授课教师ID (teachers.id)
    campus_id BIGINT FK 上课校区ID (campuses.id)
    name VARCHAR(255) 班级名称 (如:周六上午启蒙班)
    start_time DATETIME IDX 上课开始时间
    end_time DATETIME 上课结束时间
    capacity INT 班级容量
    enrolled_count INT 已报名人数 (冗余字段,需同步)
    created_at DATETIME 创建时间
  • 学员报名表 (student_enrollments)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    student_id BIGINT FK, IDX 学员ID (students.id)
    product_id BIGINT FK 报名的课程/套餐ID (products.id)
    order_id BIGINT FK 关联的订单ID (orders.id)
    contract_id BIGINT FK 关联的合同ID (contracts.id) (可选)
    status TINYINT 状态 (1: 在读, 2: 已结课, 0: 已退费)
    start_date DATE 课程开始日期
    end_date DATE 课程结束日期
    created_at DATETIME 创建时间

3.2.4 教学与互动模块 (Teaching & Interaction)

  • 作业发布表 (homework_assignments)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    class_id BIGINT FK 关联的班级ID (classes.id)
    teacher_id BIGINT FK 发布教师ID (teachers.id)
    title VARCHAR(255) 作业标题
    content TEXT 作业内容
    due_date DATETIME 截止日期
    created_at DATETIME 发布时间
  • 作业提交表 (homework_submissions)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    assignment_id BIGINT FK 作业ID (homework_assignments.id)
    student_id BIGINT FK 提交学员ID (students.id)
    content TEXT 文本内容
    attachments JSON 附件列表 (图片/视频URL)
    status TINYINT 状态 (1: 已提交, 2: 已批改)
    grade VARCHAR(50) 评分 (如: A+, 优秀)
    teacher_comment TEXT 教师评语
    submitted_at DATETIME 提交时间
  • 考勤记录表 (attendance_records)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    class_id BIGINT FK 班级/课时ID (classes.id)
    student_id BIGINT FK, IDX 学员ID (students.id)
    check_in_time DATETIME 签到时间
    status TINYINT 状态 (1:出勤, 2:迟到, 3:请假, 4:缺勤)
    notes VARCHAR(512) 备注
  • 学员请假表 (leave_requests)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    student_id BIGINT FK 学员ID (students.id)
    class_id BIGINT FK 申请的课程ID (classes.id)
    reason TEXT 请假事由
    status TINYINT 状态 (0:待审批, 1:已批准, 2:已驳回)
    approved_by BIGINT FK 审批人ID (admin_users.id)
    created_at DATETIME 申请时间
  • 学员作品集 (student_portfolio)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    student_id BIGINT FK 学员ID (students.id)
    title VARCHAR(255) 作品标题
    media_url VARCHAR(512) 媒体文件URL
    media_type VARCHAR(20) 类型 ('IMAGE', 'VIDEO')
    created_at DATETIME 上传时间
  • 预约试听表 (trial_requests)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    student_name VARCHAR(100) 学员姓名
    contact_phone VARCHAR(20) IDX 联系电话
    student_age INT 学员年龄
    status TINYINT 状态 (0:待处理, 1:已联系, 2:已完成)
    notes TEXT 管理员备注
    created_at DATETIME 预约时间

3.2.5 订单与资产模块 (Orders & Assets)

  • 订单表 (orders)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    order_sn VARCHAR(64) UK 业务订单号
    user_id BIGINT FK 下单用户ID (users.id)
    total_amount DECIMAL(10, 2) 订单总金额
    coupon_amount DECIMAL(10, 2) 优惠券抵扣金额
    pay_amount DECIMAL(10, 2) 实际支付金额
    status TINYINT IDX 状态 (0:待支付, 1:已支付, 2:已取消)
    payment_time DATETIME 支付时间
    transaction_id VARCHAR(128) 微信支付交易号
    created_at DATETIME 创建时间
  • 订单明细表 (order_items)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    order_id BIGINT FK 订单ID (orders.id)
    product_id BIGINT FK 商品ID (products.id)
    product_name VARCHAR(255) 商品名称 (快照)
    price DECIMAL(10, 2) 单价 (快照)
    quantity INT 数量
  • 优惠券模板表 (coupon_templates)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    name VARCHAR(255) 优惠券名称
    type TINYINT 类型 (1:满减, 2:折扣)
    value DECIMAL(10, 2) 面值或折扣率
    min_spend DECIMAL(10, 2) 最低消费门槛
    valid_from DATE 有效期开始
    valid_to DATE 有效期结束
    total_quantity INT 总发行量
    issued_quantity INT 已领取数量
  • 用户优惠券表 (user_coupons)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    user_id BIGINT FK 用户ID (users.id)
    template_id BIGINT FK 优惠券模板ID (coupon_templates.id)
    status TINYINT 状态 (0:未使用, 1:已使用, 2:已过期)
    used_at DATETIME 使用时间
    order_id BIGINT FK 使用的订单ID (orders.id)
    created_at DATETIME 领取时间
  • 合同表 (contracts)

    字段名 数据类型 主键/索引 描述
    id BIGINT PK 唯一标识符
    contract_sn VARCHAR(64) UK 合同编号
    user_id BIGINT FK 签署用户ID (users.id)
    student_id BIGINT FK 关学员ID (students.id)
    title VARCHAR(255) 合同标题
    content LONGTEXT 合同内容 (HTML或Markdown)
    signed_at DATETIME 签署时间
    created_at DATETIME 创建时间

4. 模块化功能详细设计

通用设计

  • 用户认证:
    • 登录流程: 采用低代码平台自带的登录认证方式。

4.1 首页模块 (FE-001 ~ FE-005)

  • 接口:
    • GET /api/v1/home/banners: 获取轮播图列表。
    • GET /api/v1/home/summary: 聚合获取首页所需内容(机构介绍、师资、作品、校区等)。
    • POST /api/v1/trial/apply: 提交预约试听表单。
  • 后端逻辑: 主要为数据查询,查询 banners, articles, teachers, campuses 等表。预约试听则是在 trial_requests 表中插入新记录。

4.2 商城模块 (FE-006 ~ FE-007)

  • 接口:
    • GET /api/v1/products: 根据类型、关键词分页获取商品列表。
    • POST /api/v1/cart/add: 添加商品到购物车(逻辑在Redis或数据库中实现)。
    • POST /api/v1/orders: 创建订单,写入ordersorder_items表,并调用微信支付API生成预支付订单。
    • POST /api/v1/payment/notify: 接收微信支付回调,更新orders表状态。
  • 后端逻辑: 涉及 products 表的查询,以及 orders, order_items 表的事务性写入。

4.3 服务模块 (FE-008 ~ FE-010)

  • 接口:
    • GET /api/v1/students/{student_id}/schedule?month=YYYY-MM: 获取学员月度课表。
    • GET /api/v1/students/{student_id}/enrollments?status=1: 获取学员报读课程。
    • POST /api/v1/homework/submit: 提交作业。
    • POST /api/v1/leave/apply: 提交请假申请。
  • 后端逻辑: 课表查询需要联结 student_enrollmentsclasses 表。提交作业涉及文件上传至OSS,并在 homework_submissions 表记录信息。

4.4 我的模块 (FE-011 ~ FE-013)

  • 接口:
    • GET /api/v1/user/profile: 获取当前用户信息及其管理的学员列表。
    • GET /api/v1/user/coupons: 获取我的优惠券。
    • GET /api/v1/user/contracts: 获取我的合同。
  • 后端逻辑: 主要根据用户ID查询 users, students, user_coupons, contracts 等关联表。

5. 非功能需求设计

  • 5.1 性能要求
    • 页面加载: 小程序分包加载,图片CDN,骨架屏。数据库查询建立合理索引。
    • 并发支持: 采用套餐的默认并发支持
  • 5.2 可用性
    • UI/UX: 遵循微信官方设计指南,交互流程扁平化。
    • 兼容性: 使用微信开发者工具的多设备模拟器测试,发布前在主流iOS和Android真机上进行测试。
  • 5.3 安全性
    • 数据传输: 全站强制使用HTTPS。
    • 用户认证: 采用平台自带的登录验证机制,设置合理的过期时间。
    • 数据安全: 后端对所有用户输入进行严格校验,防止SQL注入。敏感信息加密存储。
  • 5.4 可扩展性
    • 架构: 后端模块化设计,新功能可作为新服务独立开发。
    • 接口设计: 遵循RESTful风格,接口进行版本管理(如 /api/v1/)。

6. 后台管理系统设计

后台管理系统通过调用为管理员设计的API来操作数据,并基于角色进行权限控制。

  • 6.1 内容管理: 提供对 banners, articles, campuses, teachers 等表的CRUD操作界面。
  • 6.2 课程与学员管理:
    • 课程: 管理 products 表,并为课程类型的商品提供排课功能,操作 classes 表。
    • 学员: 管理 students 表,并能为其创建 student_enrollments 记录(后台报名)。
    • 作业: 教师角色可创建 homework_assignments,并查看和批改 homework_submissions
  • 6.3 订单与数据统计: 查看 orders 列表。提供数据看板,通过聚合查询分析用户、销售、出勤等关键数据。