课程管理-添加小节 | 学习笔记

简介: 简介:快速学习课程管理-添加小节

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-添加小节】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/667/detail/11387


课程管理-添加小节

 

内容介绍

一、思路分析

二、接口部分

三、前端部分

四、效果测试

 

一、思路分析

要实现章节添加小节,首先一个章节中有许多小节,并不能单独存在,即要添加小节一定要使用章节。

在页面的章节部分,有编辑和删除两个按钮,在两个之前添加一个新按钮,叫做添加小节。添加此按钮后要实现,点击之后也可以出现弹窗(形如添加章节)输入小节的相关数据,最终点击确定,将小节数据添加至数据库中。

image.png

在edu_video 小节表中含有以下字段:title(小节名称) id(小节的id),其中还有 chapter_id (章节 id )和 course_id (课程 id),因为一个章节有很多小节,而一个课程又含有多个章节。

同时在后续添加视频时,还会用到 video_source_id(视频 id),因为视频并非直接存在数据库中,而是通过阿里云的视频点播进行管理,而它返回的就是一个 id值。

image.png

 

二、接口部分

下面开始进行添加小节的功能实现。首先右键点击 close all 关闭多余页面。将添加小节实现的接口代码放入新的 Controller 中,即 EduVideoController。

l chapter.vue 中 method 部分代码如下:

@RestController

//首先删除edu,更改名字为video

@RequestMapping("/eduservice/video")

//添加注解,解决跨域问题

@CrossOrigin

public class EduVideoController {

//注入EduVideoService类型的变量

@Autowired

private EduVideoService videoService;

//添加小节

//将提交方式命名为addVideo

@PostMapping(" addVideo")

//在其中将数据得到,传入参数eduVideo

public R addVideo(@RequestBody EduVideo eduVideo){

//调用videoService中的save()添加方法

videoService.save(eduVideo) ;

//最后返回一个值

return R.ok() ;

}

//删除小节

//ToDo后面这个方法需要完善:删除小节时候,同时把里面视频删除

//提交删除方式,同时传入小节id

@DeleteMapping(" {id}")

//编写方法,方法名为deleteVideo,同时在方法中传入参数id将其得到。

public R deleteVideo(@PathVariable String id){

//调用videoService中的remove方法作删除

videoService.removeById(id) ;

//返回一个值

return R. ok() ;

}

//修改小节 TODO,留给同学自行完成

}

TODO 表示自行完成,仅对添加和删除效果作详细详解。到此就完成了基本的删除小节和添加小节两个接口,修改小节留给各位自行实现,与章节的修改方法一致,包括一个 id 查询和一个修改。

 

三、前端部分

1.添加课时按钮设置

接口实现之后,对前端进行实现。因为章节小节的实现代码都写在前端代码中,所以在 chapter.vue 前端代码中88行的 method 中添加注释以便区分章节和小节的操作。

首先我们要添加小节,在每个章节后面加上一个按钮。在<span class = “acts”>的按钮代码中添加小节的代码:<el-button style="" type="text" @click="openVideo(chapter.id)">添加小节< /el-button>。

之后再在添加小节中绑定事件,使其和添加章节一样,点击添加小节之后可以出现弹窗。

l 添加代码如下:

<span class="acts">

//更改按键名为:添加小节,同时改为openVideo绑定表示添加小节的方法,因为添加小节需要章节id,所以传入参数chapter.id给添加小节的方法。

<el-button style="" type="text" @click="openVideo(chapter.id)">添加小节< /el-button>

<el-button style="" type="text" ac lick="openEditchatper(chapter.id)">编辑</el-button>

<el-button type="text” aclick="removeChapter(chapter.id)">删除</el-button>

< /span>

</p>

2. 添加小节弹窗

(1)思路

添加完按钮后,在 methods 中实现添加小节弹框的方法-openVideo()方法。首先要使得点击添加小节能够弹出弹框,不能够再使用章节的弹窗,因为其中有些内容并不相同,应新建一个添加小节的弹窗。

l 添加章节弹窗代码:

<!--添加和修改章节表单-->

<l-dialog :visible.sync="dialogChapterFormVisibletitle="添加章节">

<e1-form :mode1="chapter" label-width="120px">

<el-form-item label="章节标题">

<el-input v-model="chapter.title"/>

</el-form-item>

<el-form-item label="章节排序">

<el-input-number v-model="chapter.sort" :min="0" controls-position="right"/>

</el-form-item>

</el-form>

<div slot="footer" class="dialog-footer">

<el-button aclick="dialogChapterFormVisible = false">取消</el-button>

<el-button type="primary" aclick="saveorUpdate">确定</el-button>

</div>

< /el-dialog>

< /div>

</template>

(2)添加弹窗代码

从课件(03-章节管理前端页面实现)中找到弹框显示的代码添加在chapter.vue代码的62行。

其中上传视频的功能暂时不做使用。在弹框的代码中只要使得dialogVideoFormvisible变量为 ture 时,弹窗就会出现。

l Chapter.vue 中62行添加代码如下:

<--添加和修改课时表单-->

<el-dialog :visible.syncm"dialogVideoFormvisible” titlem"添加课时">

<el-form :model="video” label-width="120px”>

<el-fonm-item label-"课时标题">

<el-input v-model="video.title" />

</el-form-item>

<el-fonm-item label=”课时排序">

<el-input-number v-model="video.sort” :minm"e" controls-positionm"right" />

</el-fonm-item>

<el-fonm-item labelm"是否免费">

<el-radio-group v-model="video.free">

<el-radio :label="true">免费</el-radio>

<el-radio :label="false”>默认</el-radio>

</el-radio-group>

</el-form-item>

<el-fonm-item label-”上传视频">

<! -- T000 -->

< /el-form-item></el-form>

<div slot="footer" class="dialog-footer">

<el-button @clickm"dialogVideoFormisible - false">取消</el-button>

<el-button :disabled="saveVidecBtnDisabled”type "primary”Gclick= "saveOrUpdateVideo">确定</el-button></div>

</el-dialog>

3. 设置初始值

添加弹窗代码后,在代码92行 export default 的 data()中设置小节弹窗dialogVideoFormvisible 的初始值为 false。包括设置小节中 video 的初始值定义,在课件新增课时页面功能中定义 data 数据里面可得到。

l 定义 data 数据

savevideoBtnDisabled: false,//课时按钮是否禁用

dialogvideoFormVisible: false,//是否显示课时表单

chapterId: "",//课时所在的长节id

video: {//课时对象

title:’ ’ ,

sort: 0,

free: 0,

videoSourceId:’ ’

}, 

l Chapter.vue 中92行代码 data 部分如下(红色为添加代码):

export default {

data( ) {

return {

saveBtnDisabled:false,

courseId: "",//课程id

chaptervideoList:[],chapter:{ //封装章节数据

title: ‘ ’,

sort: 0

},

//设置小节中video的一些变量初始值,之后章节会作使用

video:{

title: ‘ ’,

sort: 0,

free: 0,

videoSourceId:’ ’

},

dialogChapterFormvisible:false,//章节弹框

dialogvideoFormvisible:false //小节弹框,设定初始值为false

}

},

4.添加小节实现方法

设置初始值后,要在 methods 中实现 openVideo()方法。做到点击添加小节时出现对于小节弹框,只用将 dialogvideoFormvisible 的值变为 true,就会出现添加小节的弹框。

l 89行 methods 中添加的代码

methods:{

//===========================小节操作=================

//添加小节弹框的方法

openvideo(chapterId) {

//弹框

dialogvideoFormvisible = true

},

//============================章节操作================

//删除章节

removechapter( chapterId){

this.$confirm("此操作将删除章节,是否继续?","提示',{

confirmButtonText:‘确定",

cancelButtonText: ‘取消",type: "warning"

}).then(() => {//点击确定,执行then方法

 

四、效果测试

测试效果:点击添加小节,会弹出一个框。弹框后能输入小节的数据,最后实现小节的数据添加。将前端和接口重启,打开页面进行测试。

重新登录进去

image.png

点击添加课程部分,任意添加数据。来到第二步:创建课程大纲部分

,点击添加章节,将章节名为第一章1010的章节成功添加后。

点击第一章1010后显示的添加小节,可以看到成功显示弹框-添加课时,课时即小节,并且可在弹窗中输入课时标题(小节标题)和排序,选择是否免费等等。同时其中的小节部分中的上传视频部分会在之后进行讲解,到此弹窗成功实现。

image.png

任意设置课程标题为1,课时排序10,设为免费,最后点击确认就会调接口存到数据库中。

1.api 中小节的接口

首先,在 api 中定义小节的接口。将 chapter.js复制然后重命名为 video.js。 

之后打开重命名后的 video.js 删除3-9行代码。video.js 中有最基本的几种方法:添加小节,根据 id 查询小节。

代码结构和复制的章节接口一致,将其中的章节变量chapter更改为小节变量video。在下面写上添加小节的接口名称,之后加上addVideo,之后是post提交传对象。而删除小节只需要将章节的chapter改为video代表小节,最后更改为小节的id即可。同时修改和查询的更改不做讲解,留给同学自行完善。

l video.js代码

import request from "@/utils/ request'

export default {

//添加小节

//将其中的章节变量chapter更改为小节变量video

addVideo(video){

return request({

//写上添加小节的接口名称: eduservice/video,之后加上add Video

url: ’/ eduservice/video/ addVideo' ,

//post提交传入对象video

method: ‘post‘,

data: video

})

},

//根据id查询章节,留作同学自行修改为小节

getchapter(chapterId){

return request({

url: ‘ /eduservice/chapter/ getchapterInfo/ ‘ +chapterId,

method: ‘get’

})

},

//修改章节,留作同学自行修改为小节

updatechapter(chapter) {

return request({

ur1: ‘ /eduservice/chapter/updateChapter ‘,

method: "post',

data: chapter

})

},

//删除小节

//将删除章节的Chapter改为Video

deleteChapter( chapterId){

return request({

//章节的chapter改为video,同时将chapterId章节id改为小节的id

url: ‘ / eduservice/video/ '+id,

method: "delete'

}

},

2.接口调用

在页面中进行一个接口调用,首先在 chapter.vue91行代码中引入 video 接口:import video from ‘@/api/deu/video’。

最后做添加,使得点击添加小节弹框中的确认后能够调用接口将数据存入数据库中,与之前章节做法一致。

相关文章
|
消息中间件 监控 Linux
手把手教你 centos 7 安装RabbitMQ
手把手教你 centos 7 安装RabbitMQ
1230 1
|
存储 开发工具 git
【软考学习16】用位示图法,轻松解决空闲存储空间的管理难题
【软考学习16】用位示图法,轻松解决空闲存储空间的管理难题
795 0
|
Kubernetes 监控 网络性能优化
Kubernetes Pod 驱逐详解
QoS 等级为 Guaranteed 的 Pod 会在 QoS 等级为 Burstable 的 Pod 之前被驱逐吗?
2378 0
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
9月前
|
机器学习/深度学习 人工智能 运维
CodeFuse团队2024年10篇论文总结
CodeFuse 是蚂蚁集团开发的多语言代码大型语言模型(LLM),基于海量高质量代码数据和多任务微调技术,已在内部研发人员的编码、测试、运维等场景中广泛应用。2024年,CodeFuse 在国际顶会如ICSE、ICDE、KDD等发表多篇论文,涵盖CodeLLM、机器学习、AI等领域,并开源多个自研大模型,总下载量近200万。项目持续迭代,欢迎贡献和建议。
377 11
|
人工智能 数据安全/隐私保护 虚拟化
Docker部署MaxKB详细步骤(window系统)
这篇文章详细介绍了如何在Windows系统上使用Docker部署MaxKB,并提供了从安装Docker到运行MaxKB容器的详细步骤,以及如何通过浏览器访问和配置MaxKB来使用ollama和llama3模型进行问答。
3174 1
Docker部署MaxKB详细步骤(window系统)
|
11月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
334 3
|
前端开发 JavaScript
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
该文章教授了如何使用Promise和async/await来解决异步编程问题,从而避免回调地狱,使代码更加清晰和易于管理。
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
|
SQL druid Java
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
解决 ‘The last packet successfully received from the server was xxx milliseconds ago‘ 问题
6744 0
Element UI【详解】el-scrollbar 滚动条组件 —— 监听滚动条的滚动,跟随页面一起滚动,获取滚动距离,隐藏水平滚动条等
Element UI【详解】el-scrollbar 滚动条组件 —— 监听滚动条的滚动,跟随页面一起滚动,获取滚动距离,隐藏水平滚动条等
2123 0