基于SpringBoot+Vue前后端分离的在线教育平台项目


基于SpringBoot+Vue前后端分离的在线教育平台项目

赠给有缘人,希望能帮助到你!也请不要吝惜你的大拇指,你的Star、点赞将是对我最大的鼓励与支持!

开源传送门:

  • 后台:Gitee | GitHub
  • 管理员前端:Gitee | GitHub
  • 讲师前端:Gitee | GitHub
  • 学员前端(首页):Gitee | GitHub

演示DEMO传送门:

  • 学员端(首页):oeapp
  • 管理员端:oeadmin
  • 讲师端:oeteacher

前言

本项目是笔者毕设作品,肝了一周多时间赶出来的,后台写得比较垃圾,前端界面自我感觉还行,但笔者前端只是打辅助的。总的参考价值因人而言。

  • 随心所欲,只为功能实现,没有规范,没有优化,不谈安全;
  • Service层没有接口,实现直接返回Controller结果,因而造成代码大量耦合,拓展性极差;
  • MyBatis-Plus直接面向对象Dao操作,没有写SQL语句,业务逻辑全部使用JAVA代码完成;
  • 仍存在较多缺陷,但显示到的菜单功能基本都是完整的,除了支付功能。

关于项目演示:出于多种考虑,演示DEMO中关于修改的操作全部禁用。如果需要了解完整的项目演示效果,请本地测试运行项目,自行在配置文件配置阿里云OSS和VoD相关选项。

鸣谢:部分界面设计元素参考腾讯课堂与龙果学院。

项目介绍

基于SpringBoot+Vue前后端分离的在线教育平台项目,单体应用服务架构。

系统共设计三种角色:管理员、讲师和学员,三个角色分别对应一个操作端。也就是本系统1个后台项目,三个前端项目。管理员端没有引入角色和权限管理,只有一个角色。

已实现的功能列表展示:

管理员端:

  • 数据统计
  • 轮播图管理
  • 课程管理
    • 课程列表
    • 课程审核
    • 分类管理
  • 讲师管理
    • 讲师列表
    • 讲师审核
  • 学员管理
  • 用户管理
  • 订单管理

讲师端:

  • 发布课程
  • 课程管理
  • 评论管理
  • 消息接收

学员端(网站首页):

  • 登录注册

  • 分类与轮播图展示

  • 课程列表展示

  • 课程搜索(关键词、分类、讲师)

  • 课程详情(播放器、课程介绍、评论、讲师简介、订阅)

  • 订阅订单

  • 讲师入驻

技术选型

开发环境

  • 工具:IntelliJ IDEA
  • JDK 1.8
  • 数据库:MySQL 8.0.15
  • 项目构建:后端Maven、前端 webpack

后端

  • Web框架:Spring Boot
  • 字段校验:Spring Validation
  • 持久层:MyBatis-Plus
  • 接口文档:Swagger2
  • Lombok:请确保您的 IDE 安装了此插件
  • 缓存:Redis
  • 工具:Hutool
  • 资源存储:阿里云对象存储OSS
  • 课程视频点播:阿里云视频点播VoD

前端

  • Vue.js2 全家桶
  • Element-UI
  • vue-admin-template 后台模板
  • axios
  • 图表:v-charts(ECharts)
  • 富文本编辑器:wangEditor
  • 等等

数据库设计

基于SpringBoot+Vue前后端分离的在线教育平台项目_第1张图片

数据库: online_edu,统一编码:utf8mb4

表格: acl_permission

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 菜单权限表
pid int(11) unsigned 父级id
type tinyint(4) unsigned 1 菜单类型,0顶部菜单、1聚合菜单、2页面菜单、3接口
name varchar(255) 路由名称或接口名称
path varchar(255) 菜单路径(以http开头时,视为打开外部链接) 或 请求接口的地址
component varchar(255) 菜单组件,只有叶子菜单才可配置
meta varchar(1023) <空> 菜单的route.meta配置项,json格式
admin tinyint(1) unsigned 0 0默认,1只有超级管理员才能使用
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

表格: acl_role

备注: 角色

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 角色id
name varchar(31) 角色名称
permission_id varchar(2048) 角色具有的权限ID串
enable tinyint(1) 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

表格: acl_user

备注: 管理员用户表

索引:

名称 类型 属性 备注
主索引 id unique
uk_username username unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 用户id
username varchar(31) 用户名
password varchar(255) 密码
nickname varchar(31) 昵称
avatar varchar(1023) 用户头像
mark varchar(255) 备注
sign varchar(255) 用户签名
roleId int(11) unsigned 角色id
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_chapter

备注: 课程章节表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 章节ID
course_id int(11) unsigned 课程ID
title varchar(63) 章节名称
sort int(11) 0 显示排序
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_chapter_tmp

备注: 课程章节临时表(用于存放二次修改的数据)

索引:

名称 类型 属性 备注
主索引 id unique
idx_id oid

字段:

名称 类型 默认值 属性 备注
id bigint(20) unsigned 0 主键
oid int(11) unsigned 0 原章节ID
course_id int(11) unsigned 课程ID
title varchar(63) 章节名称
sort int(11) 0 显示排序
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_comment

备注: 课程评论表

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id
idx_member_id member_id
idx_member_id_course_id member_id, course_id
idx_teacher_id teacher_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 评论ID
course_id int(11) unsigned 课程id
teacher_id int(11) unsigned 讲师id
member_id int(11) unsigned 会员id
content varchar(1023) 评论内容
mark double unsigned 5 评分(满分5.00)
status tinyint(1) unsigned <空> 评论状态 0审核中 1通过
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_course

备注: 课程表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 课程ID
teacher_id int(11) unsigned 课程讲师ID
subject_id int(11) unsigned 课程科目分类ID
title varchar(63) 课程标题
price double(10,2) unsigned 0.00 课程销售价格,设置为0则可免费观看
lesson_num int(11) unsigned 0 总课时
cover varchar(1023) utf8, utf8_general_ci 课程封面图片路径
description text 课程描述
buy_count int(11) unsigned 0 销售数量
view_count int(11) unsigned 0 浏览数量
sort int(11) 0 显示排序
enable tinyint(1) 1 上架下架,0下架 1上架
status tinyint(4) 0 课程状态,草稿 审核 发表
remarks varchar(511) <空> 备注
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_subject

备注: 课程科目分类表

索引:

名称 类型 属性 备注
主索引 id unique
idx_parent_id parent_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 课程类别ID
title varchar(15) 类别名称
parent_id int(11) unsigned 0 父ID
sort int(11) unsigned 0 排序字段
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_teacher

备注: 讲师表

索引:

名称 类型 属性 备注
主索引 id unique
uk_mobile mobile unique
uk_name name unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 讲师ID
mobile char(11) 手机号
email varchar(127) 邮箱地址
password varchar(255) 密码
name varchar(63) 讲师姓名
intro varchar(1023) 讲师简介
avatar varchar(1023) 讲师头像
resume varchar(1023) 讲师简历链接
division tinyint(4) 80 分成比例,0-100
sort int(11) 0 排序
enable tinyint(1) unsigned 1 是否启用,0否1是
status tinyint(4) 0 讲师状态:审核通过;审核不通过;待审核
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_video

备注: 课程视频

索引:

名称 类型 属性 备注
主索引 id unique
idx_chapter_id chapter_id
idx_course_id course_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 视频ID
course_id int(11) unsigned 课程ID
chapter_id int(11) unsigned 章节ID
title varchar(63) 视频显示名称
video_id varchar(63) 云端视频资源
sort int(11) 0 排序字段
play_count int(11) unsigned 0 播放次数
free tinyint(1) unsigned 1 是否可以试听:0免费 1收费
duration varchar(15) 0 视频时长(秒)
size bigint(20) unsigned 0 视频源文件大小(字节)
update_time datetime 更新时间
create_time datetime 创建时间

表格: edu_video_tmp

备注: 课程视频表(用于存放二次修改的数据)

索引:

名称 类型 属性 备注
主索引 id unique
idx_chapter_id chapter_id
idx_course_id course_id
idx_id oid

字段:

名称 类型 默认值 属性 备注
id bigint(20) unsigned 0 主键(视频ID)
oid int(11) unsigned 0 原视频ID
course_id int(11) unsigned 课程ID
chapter_id bigint(20) unsigned 章节ID
title varchar(63) 视频显示名称
video_id varchar(63) 云端视频资源
sort int(11) 0 排序字段
play_count int(11) unsigned 0 播放次数
free tinyint(1) unsigned 1 是否可以试听:0免费 1收费
duration varchar(15) 0 视频时长(秒)
size bigint(20) unsigned 0 视频源文件大小(字节)
update_time datetime 更新时间
create_time datetime 创建时间

表格: hm_banner

备注: 首页banner表

索引:

名称 类型 属性 备注
主索引 id unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned ID
title varchar(63) 标题
image_url varchar(1023) 图片地址
link_url varchar(1023) 链接地址
sort int(11) unsigned 0 排序
enable tinyint(1) unsigned 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

表格: rel_course_member

备注: 课程订阅-学员关系表

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id unique
idx_member_course member_id, course_id 联合索引(member_id, course_id)
idx_member_id member_id unique

字段:

名称 类型 默认值 属性 备注
id int(10) unsigned 主键
course_id int(10) unsigned 0 课程Id
member_id int(10) unsigned 0 学员Id
update_time datetime 更新时间
create_time datetime 创建时间

表格: stat_daily

备注: 网站统计日数据

索引:

名称 类型 属性 备注
主索引 id unique
statistics_day date

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 主键
date datetime 统计日期
visit_count int(11) unsigned 0 访客数量
register_count int(11) unsigned 0 注册人数
login_count int(11) unsigned 0 活跃人数
video_view_count int(11) unsigned 0 视频播放数
course_buy_count int(11) unsigned 0 购买数量
update_time datetime 更新时间
create_time datetime 创建时间

表格: sys_message

备注: 消息表

索引:

名称 类型 属性 备注
主索引 id unique
idx_to_id to_id

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 消息id
from_id int(11) unsigned 0 发送者Id
from_role tinyint(4) 0 发送者角色(管理员、讲师…)
to_id int(11) unsigned 0 接受者id
to_role tinyint(4) unsigned 0 接受者角色(教师、学员…)
title varchar(127) 消息标题
content varchar(511) 消息内容
has_read tinyint(1) unsigned 0 是否已读(0未读 1已读)
update_time datetime 更新时间
create_time datetime 创建时间

表格: t_order

备注: 订单表

索引:

名称 类型 属性 备注
主索引 id unique
idx_course_id course_id
idx_member_id member_id
idx_member_id_course_id member_id, course_id
ux_order_no order_no unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned
order_no varchar(18) 订单号(datetime+unsigned int)
course_id int(11) unsigned 课程id
member_id int(11) unsigned 会员id
total_fee double(10,2) 0.01 订单金额(分)
pay_type tinyint(4) unsigned 0 支付类型(0 未支付 1:微信 2:支付宝)
transaction_num varchar(31) 交易流水号
pay_time datetime <空> 支付完成时间
update_time datetime 更新时间
create_time datetime 创建时间

表格: uctr_member

备注: 会员表

索引:

名称 类型 属性 备注
主索引 id unique
uk_mobile mobile unique
uk_nickname nickname unique

字段:

名称 类型 默认值 属性 备注
id int(11) unsigned 会员id
mobile char(11) 手机号
email varchar(127) 邮箱地址
password varchar(255) 密码
nickname varchar(31) 昵称
sex tinyint(4) unsigned 0 性别 1 女,2 男
age tinyint(3) unsigned 0 年龄
avatar varchar(1023) 用户头像
sign varchar(127) 用户签名
enable tinyint(1) 1 是否启用,0否1是
update_time datetime 更新时间
create_time datetime 创建时间

实现效果

更多实现效果图请看附件README.assets

管理员端:

基于SpringBoot+Vue前后端分离的在线教育平台项目_第2张图片

讲师端:

基于SpringBoot+Vue前后端分离的在线教育平台项目_第3张图片

学员端:

基于SpringBoot+Vue前后端分离的在线教育平台项目_第4张图片

总结与展望

事实说明,毕设工作量完全超出了答辩的正常范围,这点我是没想到的,因为只演示了系统一小部分功能就拿了答辩优秀。最后也是希望本项目可以给到有需要的人一些帮助。谢谢大家。

展望:

  • 代码重构,解决前言中的问题。
  • 功能完善,完善支付模块、权限管理等功能。
  • 架构升级,微服务拆分,引入前沿技术。

当然,这一切的前提是我心情不错且拥有足够的空闲时间。

你可能感兴趣的:(SpringBoot,Java,Vue,spring,boot,vue.js,java)