文章目录
本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的解决方案大家可以留言或者私信
前言
教程中讲解了课程计划查询展示以及新增,并没有实现课程计划的修改以及删除,所以本文将实现课程计划的删除
一、解决思路
1.获取课程计划Id
course_plan.vue这个页面中有一个方法renderContent,包含删除,修改按钮可以获取到所要操作的课程计划的对应的课程计划ID
2.传入到后台需要考虑的问题
(1)传入的课程计划是父节点还是子节点
a: 如果是子节点直接删除就ok,
b:如果是父节点先删除对应的所有子节点,然后在删除父节点
(2)如果是子节点,删除对应与视频关联的信息(teachplan_media表)
首先根据课程计划ID查询teachplan_media表是否包含对应的关联信息包含就删除;
不包含对应的关联信息包括两种情况,
第一前台传递的ID为子节点本来就没有选择视频直接调用删除即可;
第二前台传递的ID为父节点查询对应的子节点然后循环去判断是否包含关联信息 包含就删除关联信息,然后在删除对应的课程计划
本人技术小白解释可能会不清楚。如果有任何问题或者更好的解决方案直接私聊或者评论即可
二、代码实现
1.vue前端
(1)course_plan.vue增加删除方法
给删除按钮增加一个点击事件
renderContent(h, { node, data, store }) {
return (
<span style="flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;">
<span>
<span>{node.label}</span>
</span>
<span>
<el-button style="font-size: 12px;" type="text" on-click={ () => this.choosevideo(data) }>{data.mediaFileOriginalName} 选择视频</el-button>
<el-button style="font-size: 12px;" type="text" on-click={ () => this.edit(data) }>修改</el-button>
<el-button style="font-size: 12px;" type="text" on-click={ () => this.remove(node, data) }>删除</el-button>
</span>
</span>);
},
删除按钮触发的方法
//删除章节
remove(node, data) {
if (data.children==null && (data.mediaFileOriginalName==null||data.mediaFileOriginalName=="")){
//删除子章节,章节并没有选择对应的视频
this.$confirm('确认删除这个子章节吗?', '提示', {}).then(() => {
courseApi.deleteTeachPlan(data.id).then(res=>{
if(res.success){
this.$message.success("删除成功,请及时更新发布");
this.findTeachplan();//重新查询下分类信息
}else{
this.$message.error("删除失败");
}
});
});
}else if (data.children==null && (data.mediaFileOriginalName!=null||data.mediaFileOriginalName!="")) {
//删除子章节,并且章节选择了视频
this.$confirm('确认删除这个子章节吗,此章节下已经选择了对应的视频?', '提示', {}).then(() => {
courseApi.deleteTeachPlan(data.id).then(res=>{
if(res.success){
this.$message.success("删除成功,请及时更新发布");
this.findTeachplan();//重新查询下分类信息
}else{
this.$message.error("删除失败");
}
});
});
}else {
console.log(data);
this.$confirm('确认删除这个父章节及其子章节吗,其中部分子章节可能已经选择了对应的视频?', '提示', {}).then(() => {
courseApi.deleteTeachPlan(data.id).then(res => {
if (res.success) {
this.$message.success("删除成功,请及时更新发布");
this.findTeachplan();
} else {
this.$message.error("删除失败");
}
});
});
}
},
(2)course.js删除计划的请求
/*删除一个章节课程计划*/
export const deleteTeachPlan= teachPlanId => {
return http.requestDelete(apiUrl+'/course/teachplan/delete?teachPlanId='+teachPlanId)
}
2.Java服务端
xc-service-manage-course服务
(1)课程管理controller与api
controller
@Override
@DeleteMapping("/teachplan/delete")
public ResponseResult deleteTeachPlan(@RequestParam("teachPlanId") String teachPlanId) {//删除子章节课程计划
return this.courseService.deleteTeachPlan(teachPlanId);
}
api
@ApiOperation("删除子章节课程计划")
public ResponseResult deleteTeachPlan(String teachPlanId);
(2)service处理删除逻辑
//删除子章节课程计划
@Transactional
public ResponseResult deleteTeachPlan(String teachPlanId) {
if (StringUtils.isEmpty(teachPlanId)) {
//传入参数为空抛出异常
return new ResponseResult(CommonCode.INVALID_PARAM);
}
//首先根据ID去查询TeachPlan_media是否选择了对应的视频(选择了就删除media关联信息然后删除对应的课程计划,没有选择就不删除只需要删除对应的课程计划)
//查询TeachPlan_media是否选择了对应的视频,选择了就删除
this.deleteTeachPlanMedia(teachPlanId);
//2.如果选择删除的是父课程计划就需要查询对应的子课程计划判断media关联信息是否存在,存在循环调用方法删除
List<Teachplan> teachPlanList = this.teachPlanRepository.findByParentidEquals(teachPlanId);
if (teachPlanList.size() > 0) {
//包含子节点,首先获取对应子节点的ID循环判断是否包含对应的关联信息,存在就删除
for (Teachplan teachplan : teachPlanList) {
this.deleteTeachPlanMedia(teachplan.getId());
}
//删除完成之后,然后根据parentID(ID)删除子节点
this.teachPlanRepository.deleteByParentidEquals(teachPlanId);
}
//删除完字节点或者没有子节点 根据Id删除对应的父课程计划节点
long result = this.teachPlanRepository.deleteByIdEquals(teachPlanId);//返回删除的记录数
if (result <= 0) {
return new ResponseResult(CommonCode.FAIL);
}
return new ResponseResult(CommonCode.SUCCESS);
}
//删除课程计划与视频的关联信息(参数为课程计划Id)
private void deleteTeachPlanMedia(String teachPlanId){
//查询TeachPlan_media是否选择了对应的视频
Optional<TeachplanMedia> optionalTeachPlanMedia = this.teachPlanMediaRepository.findById(teachPlanId);
if (optionalTeachPlanMedia.isPresent()){
//表示有对应的关联信息,删掉
this.teachPlanMediaRepository.deleteById(teachPlanId);
}
}
(3)TeachPlanRepository
//当返回值大于0删除成功的记录数(删除子章节课程计划单条数据),
long deleteByIdEquals(String teachPlanId);
//查询当前章节是否包含子章节
List<Teachplan> findByParentidEquals(String teachPlanId);
//根据父节点Id删除子节点
long deleteByParentidEquals(String teachPlanId);
三.测试
选择对应的视频,然后删除子课程计划查看数据库teachplan与teachplan_media对应信息也完成删除,然后删除父课程计划查看对应信息已经删除。
最后删除成功之后请及时更新发布以获取最新的课程计划目录
本人技术有限写的不好的地方敬请原谅,如有什么问题或者更好的解决方案大家可以留言或者私信