少儿舞蹈小程序详细设计文档
目录
- 1. 引言
- 1.1 文档目的
- 1.2 范围
- 2. 系统架构设计
- 2.1 技术选型
- 2.2 系统架构图
- 3. 数据库设计
- 3.1 核心实体关系 (E-R) 图
- 3.2 完整数据表结构
- 3.2.1 用户与权限模块 (User & Permissions)
- 3.2.2 机构与内容模块 (Institution & Content)
- 3.2.3 课程与商城模块 (Courses & Products)
- 3.2.4 教学与互动模块 (Teaching & Interaction)
- 3.2.5 订单与资产模块 (Orders & Assets)
- 4. 模块化功能详细设计
- 通用设计
- 4.1 首页模块 (FE-001 \~ FE-005)
- 4.2 商城模块 (FE-006 \~ FE-007)
- 4.3 服务模块 (FE-008 \~ FE-010)
- 4.4 我的模块 (FE-011 \~ FE-013)
- 5. 非功能需求设计
- 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
: 创建订单,写入orders
和order_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_enrollments
和classes
表。提交作业涉及文件上传至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
列表。提供数据看板,通过聚合查询分析用户、销售、出勤等关键数据。