Myles Yang/OnlineEdu

发布时间:2024-11-18 06:31

克隆/下载

提示

下载代码请复制以下命令到终端执行

为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置

使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作

Username for 'https://gitee.com': userName

Password for 'https://userName@gitee.com': # 私人令牌


基于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 等等

数据库设计

ER图

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

表格: acl_permission

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 菜单权限表 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: acl_role

备注: 角色

索引:

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

字段:

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

表格: acl_user

备注: 管理员用户表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 用户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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: edu_chapter

备注: 课程章节表

索引:

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

字段:

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

表格: 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: 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 否 <auto_increment> 评论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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: edu_course

备注: 课程表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 课程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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: edu_subject

备注: 课程科目分类表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 课程类别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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: edu_teacher

备注: 讲师表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 讲师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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: edu_video

备注: 课程视频

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 视频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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: hm_banner

备注: 首页banner表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: 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 否 <auto_increment> 主键 course_id int(10) unsigned 否 0 课程Id member_id int(10) unsigned 否 0 学员Id update_time datetime 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: stat_daily

备注: 网站统计日数据

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 主键 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: sys_message

备注: 消息表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 消息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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: 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 否 <auto_increment> 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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

表格: uctr_member

备注: 会员表

索引:

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

字段:

名称 类型 空 默认值 属性 备注 id int(11) unsigned 否 <auto_increment> 会员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 是 <INSERT-TimeStamp> 更新时间 create_time datetime 是 <INSERT-TimeStamp> 创建时间

实现效果

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

管理员端:

admin

讲师端:

teacher

学员端:

app

总结与展望

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

展望:

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

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

MIT License Copyright (c) 2022 Myles Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

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

Myles Yang

马建仓 AI 助手

网址:Myles Yang/OnlineEdu https://www.yuejiaxmz.com/news/view/115486

相关内容

意义感的系列探索:从文化自信到心理健康
烘焙在城市生活垃圾预处理的应用前景
Furniture and household items 家具和居家物品的英语表达
生活阳台的简介生活阳台的特点
卫生间怎样通风效果会好一些
基于夏季小气候效应的杭州街道适应性设计策略研究
复方精油穴位按摩对围绝经期综合征患者生活质量的影响研究
Technical status and trends in animal wastewater treatment
樱语茉莉女装公司简介
樱语茉莉YYMOLI女装品牌招商加盟代理

随便看看