当前位置: 首页 > news >正文

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

目录

  • 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)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    wechat_openidVARCHAR(128)UK微信用户唯一标识 (小程序)
    wechat_unionidVARCHAR(128)IDX微信开放平台唯一标识 (可选)
    nicknameVARCHAR(255)用户昵称
    avatar_urlVARCHAR(512)用户头像URL
    phone_numberVARCHAR(20)IDX用户手机号
    created_atDATETIME创建时间
    updated_atDATETIME更新时间
  • 学员表 (students)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    user_idBIGINTFK关联的家长用户ID (users.id)
    nameVARCHAR(100)学员姓名
    genderTINYINT性别 (0: 未知, 1: 男, 2: 女)
    birthdayDATE出生日期
    statusTINYINT状态 (1: 正常, 0: 禁用)
    created_atDATETIME创建时间
    updated_atDATETIME更新时间
  • 后台管理员表 (admin_users)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    usernameVARCHAR(100)UK登录用户名
    password_hashVARCHAR(255)加密后的密码
    nameVARCHAR(100)真实姓名或昵称
    role_idBIGINTFK角色ID (roles.id)
    statusTINYINT状态 (1: 启用, 0: 禁用)
    last_login_atDATETIME最后登录时间
    created_atDATETIME创建时间
    updated_atDATETIME更新时间
  • 角色表 (roles)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    nameVARCHAR(100)UK角色名称
    descriptionVARCHAR(255)角色描述
    created_atDATETIME创建时间
    updated_atDATETIME更新时间

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

  • 轮播图表 (banners)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    titleVARCHAR(255)标题
    image_urlVARCHAR(512)图片URL
    link_urlVARCHAR(512)跳转链接 (小程序内页面路径)
    sort_orderINT排序值,值越小越靠前
    statusTINYINT状态 (1: 显示, 0: 隐藏)
    created_atDATETIME创建时间
  • 文章/介绍表 (articles)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    typeVARCHAR(50)IDX类型 (e.g., ‘INTRODUCTION’, ‘HONOR’)
    titleVARCHAR(255)标题
    contentLONGTEXT富文本内容
    statusTINYINT状态 (1: 发布, 0: 草稿)
    created_atDATETIME创建时间
  • 校区表 (campuses)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    nameVARCHAR(255)校区名称
    addressVARCHAR(512)详细地址
    phoneVARCHAR(20)联系电话
    latitudeDECIMAL(10, 7)纬度
    longitudeDECIMAL(10, 7)经度
    cover_image_urlVARCHAR(512)封面图
    created_atDATETIME创建时间
  • 教师表 (teachers)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    admin_idBIGINTUK, FK关联后台用户ID (可选)
    nameVARCHAR(100)教师姓名
    avatar_urlVARCHAR(512)教师头像
    bioTEXT教师简介
    statusTINYINT状态 (1: 在职, 0: 离职)
    created_atDATETIME创建时间

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

  • 商品表 (products)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    typeVARCHAR(20)IDX类型 (‘COURSE’, ‘GOODS’, ‘PACKAGE’)
    nameVARCHAR(255)商品/课程名称
    descriptionTEXT详细描述
    cover_image_urlVARCHAR(512)封面图
    priceDECIMAL(10, 2)售价
    original_priceDECIMAL(10, 2)原价/划线价
    statusTINYINT状态 (1: 上架, 0: 下架)
    stock_quantityINT库存数量 (-1表示无限)
    created_atDATETIME创建时间
  • 班级/课时表 (classes)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    product_idBIGINTFK关联的课程ID (products.id)
    teacher_idBIGINTFK授课教师ID (teachers.id)
    campus_idBIGINTFK上课校区ID (campuses.id)
    nameVARCHAR(255)班级名称 (如:周六上午启蒙班)
    start_timeDATETIMEIDX上课开始时间
    end_timeDATETIME上课结束时间
    capacityINT班级容量
    enrolled_countINT已报名人数 (冗余字段,需同步)
    created_atDATETIME创建时间
  • 学员报名表 (student_enrollments)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    student_idBIGINTFK, IDX学员ID (students.id)
    product_idBIGINTFK报名的课程/套餐ID (products.id)
    order_idBIGINTFK关联的订单ID (orders.id)
    contract_idBIGINTFK关联的合同ID (contracts.id) (可选)
    statusTINYINT状态 (1: 在读, 2: 已结课, 0: 已退费)
    start_dateDATE课程开始日期
    end_dateDATE课程结束日期
    created_atDATETIME创建时间

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

  • 作业发布表 (homework_assignments)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    class_idBIGINTFK关联的班级ID (classes.id)
    teacher_idBIGINTFK发布教师ID (teachers.id)
    titleVARCHAR(255)作业标题
    contentTEXT作业内容
    due_dateDATETIME截止日期
    created_atDATETIME发布时间
  • 作业提交表 (homework_submissions)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    assignment_idBIGINTFK作业ID (homework_assignments.id)
    student_idBIGINTFK提交学员ID (students.id)
    contentTEXT文本内容
    attachmentsJSON附件列表 (图片/视频URL)
    statusTINYINT状态 (1: 已提交, 2: 已批改)
    gradeVARCHAR(50)评分 (如: A+, 优秀)
    teacher_commentTEXT教师评语
    submitted_atDATETIME提交时间
  • 考勤记录表 (attendance_records)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    class_idBIGINTFK班级/课时ID (classes.id)
    student_idBIGINTFK, IDX学员ID (students.id)
    check_in_timeDATETIME签到时间
    statusTINYINT状态 (1:出勤, 2:迟到, 3:请假, 4:缺勤)
    notesVARCHAR(512)备注
  • 学员请假表 (leave_requests)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    student_idBIGINTFK学员ID (students.id)
    class_idBIGINTFK申请的课程ID (classes.id)
    reasonTEXT请假事由
    statusTINYINT状态 (0:待审批, 1:已批准, 2:已驳回)
    approved_byBIGINTFK审批人ID (admin_users.id)
    created_atDATETIME申请时间
  • 学员作品集 (student_portfolio)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    student_idBIGINTFK学员ID (students.id)
    titleVARCHAR(255)作品标题
    media_urlVARCHAR(512)媒体文件URL
    media_typeVARCHAR(20)类型 (‘IMAGE’, ‘VIDEO’)
    created_atDATETIME上传时间
  • 预约试听表 (trial_requests)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    student_nameVARCHAR(100)学员姓名
    contact_phoneVARCHAR(20)IDX联系电话
    student_ageINT学员年龄
    statusTINYINT状态 (0:待处理, 1:已联系, 2:已完成)
    notesTEXT管理员备注
    created_atDATETIME预约时间

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

  • 订单表 (orders)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    order_snVARCHAR(64)UK业务订单号
    user_idBIGINTFK下单用户ID (users.id)
    total_amountDECIMAL(10, 2)订单总金额
    coupon_amountDECIMAL(10, 2)优惠券抵扣金额
    pay_amountDECIMAL(10, 2)实际支付金额
    statusTINYINTIDX状态 (0:待支付, 1:已支付, 2:已取消)
    payment_timeDATETIME支付时间
    transaction_idVARCHAR(128)微信支付交易号
    created_atDATETIME创建时间
  • 订单明细表 (order_items)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    order_idBIGINTFK订单ID (orders.id)
    product_idBIGINTFK商品ID (products.id)
    product_nameVARCHAR(255)商品名称 (快照)
    priceDECIMAL(10, 2)单价 (快照)
    quantityINT数量
  • 优惠券模板表 (coupon_templates)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    nameVARCHAR(255)优惠券名称
    typeTINYINT类型 (1:满减, 2:折扣)
    valueDECIMAL(10, 2)面值或折扣率
    min_spendDECIMAL(10, 2)最低消费门槛
    valid_fromDATE有效期开始
    valid_toDATE有效期结束
    total_quantityINT总发行量
    issued_quantityINT已领取数量
  • 用户优惠券表 (user_coupons)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    user_idBIGINTFK用户ID (users.id)
    template_idBIGINTFK优惠券模板ID (coupon_templates.id)
    statusTINYINT状态 (0:未使用, 1:已使用, 2:已过期)
    used_atDATETIME使用时间
    order_idBIGINTFK使用的订单ID (orders.id)
    created_atDATETIME领取时间
  • 合同表 (contracts)

    字段名数据类型主键/索引描述
    idBIGINTPK唯一标识符
    contract_snVARCHAR(64)UK合同编号
    user_idBIGINTFK签署用户ID (users.id)
    student_idBIGINTFK关学员ID (students.id)
    titleVARCHAR(255)合同标题
    contentLONGTEXT合同内容 (HTML或Markdown)
    signed_atDATETIME签署时间
    created_atDATETIME创建时间

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 列表。提供数据看板,通过聚合查询分析用户、销售、出勤等关键数据。
http://www.dtcms.com/a/351134.html

相关文章:

  • Mac中修改Word的Normal.dotm文件
  • 使用Uniapp开发小程序,如何引入插件组件!
  • 三电平buckboost电路出现上下母线不平衡是什么原因
  • Linux驱动开发笔记(八)——按键输入实验
  • 滚珠导轨如何定义半导体制造精度?
  • 【LeetCode 热题 100】75. 颜色分类——双指针
  • 算法题打卡力扣第209题:长度最小的子数组(mid)
  • 计算神经科学数学建模编程深度前沿方向研究(中)
  • AbMole小课堂丨Lenvatinib(E7080):如何通过靶向多靶点抑制VEGFR/FGFR/PDGFRα抑制肿瘤?
  • 【vue eslint】报错:Component name “xxxx“ should always be multi-word
  • LeetCode 100 -- Day6
  • 论文阅读:CIKM 2024 Empowering Private Tutoring by Chaining Large Language Models
  • 低空经济产业白皮书:音视频链路在智能飞行体系中的核心地位
  • 验证码请求与缓存问题解决方案
  • 用无标签语音自我提升音频大模型:SI-SDA 方法详解
  • 【JavaEE】(19) MyBatis-plus
  • 基于SpringBoot的考研资讯平台
  • 没有cpolar:会议记录手忙脚乱;有了cpolar:CapsWriter语音转文字轻松搞定
  • 如何在GitHub找到10k+个stars的仓库
  • USB摄像头驱动完整分析 (从插入到出画)
  • 飞算JavaAI:Java开发新时代的破晓之光
  • 基于印染数据的可视化系统设计与实现
  • 【笔记】大模型业务场景流程综述
  • (论文速读)MBQ:大型视觉语言模型的模态平衡量化
  • 深度学习在金融订单簿分析与短期市场预测中的应用
  • 力扣hot100:搜索旋转排序数组和寻找旋转排序数组中的最小值(33,153)
  • 大语言模型(LLM)基本原理浅析:从“冰箱做菜“到多模型对比实战
  • 理解SSH服务
  • onnx入门教程(七)——如何添加 TensorRT 自定义算子
  • 深度剖析初始化vue项目文件结构!!【前端】