学成在线--15.课程计划查询

文章目录

  • 一.需求分析
  • 二.页面原型
    • 1.tree组件介绍
    • 2.webstorm配置jsx
  • 三.API接口
    • 1.数据模型
    • 2.自定义模型类
    • 3.接口定义
  • 四.sql语句
  • 五.服务器端
    • 1.Dao
      • 1)Mapper接口
      • 2)Mapper映射文件
    • 2.Service
    • 3.Controller
    • 4.测试
  • 六.前端
    • 1.Api方法
    • 2.Api调用
      • 1)定义查询课程计划的方法,赋值给数据对象teachplanList
      • 2)在mounted钩子中查询课程计划
      • 3)修改树结点的标签属性
      • 4)测试

一.需求分析

什么是课程计划?
课程计划定义了课程的章节内容,相当于目录,学生通过课程计划进行在线学习,前端页面展示如下图中右侧显示。课程计划包括两级,第一级是课程的大章节、第二级是大章节下属的小章节,每个小章节通常是一段视频,学生点击小章节在线学习。
在这里插入图片描述
课程计划查询是将某个课程的课程计划内容完整的显示出来,如下图所示,左侧显示的就是课程计划,课程计划是一个树型结构,方便扩展课程计划的级别。
在这里插入图片描述教学管理人员对课程计划如何管理?功能包括:添加课程计划、删除课程计划、修改课程计划等。
添加:在上边页面中,点击“添加课程计划”即可对课程计划进行添加操作。
修改:点击修改可对某个章节内容进行修改。
删除:点击删除可删除某个章节。

二.页面原型

1.tree组件介绍

本功能使用element-ui 的tree组件来完成
组件标签:

<el‐tree:data="data"show‐checkboxnode‐key="id"default‐expand‐all:expand‐on‐click‐node="false":render‐content="renderContent">
</el‐tree>

数据对象:

export default {data() {return {data: [{id: 1,pname: '一级 1',children: [{id: 4,pname: '二级 1-1',children: [{id: 9,pname: '三级 1-1-1'}, {id: 10,pname: '三级 1-1-2'}]}]}],

在这里插入图片描述

2.webstorm配置jsx

本组件用到了JSX语法,如下所示:

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}&nbsp;&nbsp;&nbsp;&nbsp; 选择视频</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>);},

JSX 是Javascript和XML结合的一种格式,它是React的核心组成部分,JSX和XML语法类似,可以定义属性以及子元
素。唯一特殊的是可以用大括号来加入JavaScript表达式。遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;
遇到代码块(以 { 开头),就用 JavaScript 规则解析。设置方法如下:
1、Javascript version 选择 React JSX (如果没有就选择JSX Harmony)
在这里插入图片描述2、HTML 类型文件中增加vue
preferences -> Editor -> File Types 中找到上边框中HTML 在下边加一个 *.vue
在这里插入图片描述如果已经在vue template 中已存在.vue 则把它改为.vue2(因为要在Html中添加.vue)
在这里插入图片描述

三.API接口

1.数据模型

1、表结构
在这里插入图片描述
2、模型类
课程计划为树型结构,由树根(课程)和树枝(章节)组成,为了保证系统的可扩展性,在系统设计时将课程计划设置为树型结构。
文件位置:xcEduService01\xc-framework-model\src\main\java\com\xuecheng\framework\domain\course\Teachplan.java

package com.xuecheng.framework.domain.course;import lombok.Data;
import lombok.ToString;
import org.hibernate.annotations.GenericGenerator;import javax.persistence.*;
import java.io.Serializable;@Data
@ToString
@Entity
@Table(name="teachplan")
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
public class Teachplan implements Serializable {private static final long serialVersionUID = -916357110051689485L;@Id@GeneratedValue(generator = "jpa-uuid")@Column(length = 32)private String id;private String pname;private String parentid;private String grade;private String ptype;private String description;private String courseid;private String status;private Integer orderby;private Double timelength;private String trylearn;}

2.自定义模型类

前端页面需要树型结构的数据来展示Tree组件,如下:

[{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1‐1'
}]
}]

自定义课程计划结点类如下:
文件位置:xcEduService01\xc-framework-model\src\main\java\com\xuecheng\framework\domain\course\ext\TeachplanNode.java

@Data
@ToString
public class TeachplanNode extends Teachplan {
List<TeachplanNode> children;
}

3.接口定义

根据课程id查询课程的计划接口如下,在api工程创建course包,创建CourseControllerApi接口类并定义接口方法如下:
文件位置:xcEduService01\xc-service-api\src\main\java\com\xuecheng\api\course\CourseControllerApi.java

public interface CourseControllerApi {
@ApiOperation("课程计划查询")
public TeachplanNode findTeachplanList(String courseId);
}

四.sql语句

课程计划是树型结构,采用表的自连接方式进行查询,sql语句如下

SELECTa.id one_id,a.pname one_pname,b.id two_id,b.pname two_pname,c.id three_id,c.pname three_pname
FROMteachplan aLEFT JOIN teachplan bON a.id = b.parentidLEFT JOIN teachplan cON b.id = c.parentid
WHERE a.parentid = '0'AND a.courseid = '402885816243d2dd016243f24c030002'
ORDER BY a.orderby,b.orderby,c.orderby

五.服务器端

1.Dao

1)Mapper接口

文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\dao\TeachplanMapper.java

package com.xuecheng.manage_course.dao;import com.xuecheng.framework.domain.course.ext.TeachplanNode;
import org.apache.ibatis.annotations.Mapper;/*** 课程计划mapper* Created by Administrator.*/
@Mapper
public interface TeachplanMapper {//课程计划查询public TeachplanNode selectList(String courseId);
}

2)Mapper映射文件

文件接口:xcEduService01\xc-service-manage-course\src\main\resources\com\xuecheng\manage_course\dao\TeachplanMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xuecheng.manage_course.dao.TeachplanMapper"><resultMap id="teachplanMap" type="com.xuecheng.framework.domain.course.ext.TeachplanNode"><id column="one_id" property="id"></id><result column="one_pname" property="pname"></result><collection property="children" ofType="com.xuecheng.framework.domain.course.ext.TeachplanNode"><id column="two_id" property="id"></id><result column="two_pname" property="pname"></result><collection property="children" ofType="com.xuecheng.framework.domain.course.ext.TeachplanNode"><id column="three_id" property="id"></id><result column="three_pname" property="pname"></result></collection></collection></resultMap><select id="selectList" parameterType="java.lang.String"resultMap="teachplanMap">SELECTa.id one_id,a.pname one_pname,b.id two_id,b.pname two_pname,c.id three_id,c.pname three_pname
FROMteachplan aLEFT JOIN teachplan bON b.parentid = a.idLEFT JOIN teachplan cON c.parentid = b.id
WHERE a.parentid = '0'
<if test="_parameter !=null and _parameter!=''">AND a.courseid = #{courseId}
</if>ORDER BY a.orderby,b.orderby,c.orderby</select>
</mapper>

说明:针对输入参数为简单类型#{}中可以是任意类型,判断参数是否为空要用 _parameter(它属于mybatis的内置参数)

2.Service

创建CourseService类,定义查询课程计划方法。
文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\service\CourseService.java

@Service
public class CourseService {@AutowiredTeachplanMapper teachplanMapper;@AutowiredTeachplanRepository teachplanRepository;@AutowiredCourseBaseRepository courseBaseRepository;//查询课程计划public TeachplanNode findTeachplanList(String courseId){return teachplanMapper.selectList(courseId);}}

3.Controller

文件位置:xcEduService01\xc-service-manage-course\src\main\java\com\xuecheng\manage_course\controller\CourseController.java

@RestController
@RequestMapping("/course")
public class CourseController implements CourseControllerApi {@AutowiredCourseService courseService;@Override@GetMapping("/teachplan/list/{courseId}")public TeachplanNode findTeachplanList(@PathVariable("courseId") String courseId) {return courseService.findTeachplanList(courseId);}}

4.测试

使用postman或swagger-ui测试查询接口:

Get 请求:http://localhost:31200/course/teachplan/list/402885816243d2dd016243f24c030002

六.前端

1.Api方法

定义课程计划查询的api方法:
文件位置:xc-ui-pc-teach\xc-ui-pc-teach\src\module\course\api\course.js

/*查询课程计划*/
export const findTeachplanList = courseid => {
return http.requestQuickGet(apiUrl+'/course/teachplan/list/'+courseid)
}

2.Api调用

1)定义查询课程计划的方法,赋值给数据对象teachplanList

文件位置:xc-ui-pc-teach\xc-ui-pc-teach\src\module\course\page\course_manage\course_plan.vue

findTeachplan(){this.teachplanList = []//查询课程计划courseApi.findTeachplanList(this.courseid).then(res=>{if(res && res.children){this.teachplanList = res.children;}})
}

2)在mounted钩子中查询课程计划

mounted(){//课程idthis.courseid = this.$route.params.courseid;//查询课程计划this.findTeachplan()
}

3)修改树结点的标签属性

课程计划信息中pname为结点的名称,需要修改树结点的标签属性方可正常显示课程计划名称,如下:

defaultProps:{children: 'children',label: 'pname'
},

4)测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队作业-项目答辩

1. 王书磊 1600802063 http://www.cnblogs.com/wsl-1117/ 刘令斌 1600802017 http://www.cnblogs.com/liulingbin/ 许浩然 1600802066 https://www.cnblogs.com/xuhaoran1/ 成明龙 1600802038 http://www.cnblogs.com/CMLCML/ 2这是我们的效果图. 3.&#xff08;1&#xff09;修…

Java构造和解析Json数据的两种方法详解一

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在www.json.org上公布了很多JAVA下的json构造和解析工具&#xff0c;其中org.json和json-lib比较简单&#xff0c;两者使用上差不多但还是…

JsRender 前端渲染模板常用API学习

JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的&#xff0c;使用的情况有以下几种。 把html字符串编译编译成模板获取使用script标签声明的模板&#xff0c;并返回一个模板对象把html字符串或者在script标签中声明的模板注册成命名模板获取之前就…

状态图

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的&#xff1a;研究类、角色、子系统、或组件的复杂行为。

我身边的手机应用开发者

手机应用火了&#xff0c;我身边的一位朋友(A君)也投身到开发者行列&#xff0c;不过他还算聪明并没有辞掉工作专做手机应用软件开发。 其原因在于他们领导打算做一款自己的应用软件&#xff0c;正当A君愁到底是做IOS平台还是Android平台的时候&#xff0c;领导说&#xff1a;…

学成在线--16.添加课程计划

文章目录一.需求分析二.API接口三.后端1.Dao2.Service3.Controller4.测试四.前端1.页面原型说明1&#xff09;添加按钮2&#xff09;视图部分3&#xff09;在数据模型中添加如下变量4&#xff09;定义表单提交方法和重置方法2.Api调用1&#xff09;定义 api方法2&#xff09;调…

理解 maven 的核心概念

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 本文以类图的方式&#xff0c;介绍 maven 核心的 12 个概念及相互之间的关系。 Table of Contents 1 maven管理的目标&#xff1a;工程…

C#关键字的使用

params object[] 用于函数多参数的定义public static void Write(string format, params object[] arg);explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如&#xff0c;在下面的示例中&#xff0c;此运算符将名为 Fahrenheit 的类转换为名为 Ce…

maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 参考&#xff1a;http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 还有一篇转载文章…

学成在线--17.我的课程

文章目录一.需求分析二.API接口三.PageHelper1.PageHelper介绍2.添加依赖3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.测试Dao五.Service六.Controller七.前端1.创建course_list.vue2.路由3.定义API方法4.前端视图course_list.vue详解1&#xff09;API调用--在视…

学成在线--18.新增课程(课程分类查询)

文章目录一.需求分析二.课程分类查询介绍三.数据结构四.数据格式五.数据模型六.Api接口七.服务器端1.Dao1&#xff09;定义mapper2&#xff09;定义mapper映射文件2.Service3.Controller八.接口测试一.需求分析 用户操作流程如下&#xff1a; 1、用户进入“我的课程”页面&…

POI 方式-excle 表格导出实现-java-poi

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; jsp 页面 用的Bootstrap &#xff1a; <li class"dropdown"> <a href"javascript:void(0)…

学成在线--19.新增课程(数据字典)

文章目录一.介绍二.数据模型三.数据模型类四.字典查询API接口五.服务器端1.Dao2.Service3.Controller一.介绍 在新增课程界面需要选择课程等级、课程状态等&#xff0c;这些信息统一采用数据字典管理的方式。 本项目对一些业务的分类配置信息&#xff0c;比如&#xff1a;课程…

程序员的进化

对于很多同学来说&#xff0c;他们对程序员的职业生涯非常关注。而这本质上是一个进化的过程。我们将如何进化&#xff1f;在每个进化阶段我们应该如何提高自己&#xff1f;下面的文章根据我自己的切身经历和阅读过的书&#xff0c;为程序员每个阶段的进化提供了不同的学习思路…

学成在线--20.新增课程(最后完善)

文章目录一.效果展示二.服务端1.Api接口2.Dao3.Service4.Controller三.前端1.页面完善1&#xff09;创建course_add.vue页面2&#xff09;course_add.vue页面路由3&#xff09;course_list.vue中添加链接2.查询数据字典1&#xff09;视图中代码2&#xff09;定义Api方法3&#…

html里面表格问题

表格问题汇总&#xff1a; 现代网站中表格的用武之地已经很少了&#xff0c;但是一些框架&#xff0c;如bootstorp还是会用到的&#xff0c;所以还是需要了解掌握。本随笔只涉及开发过程中遇到的表格问题&#xff0c;不做其他拓展。 1、caption代表的是表格元素的标题。至于标题…

RT-Thread简介

RT-Thread简介 RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统&#xff08;RTOS&#xff09;&#xff0c;具有完全的自主知识产权。 经过16个年头的沉淀&#xff0c;伴随着物联网的兴起&#xff0c;它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thre…

学成在线--21.课程信息修改

文章目录一.需求分析二.课程管理导航页面1.定义course_manage.vue为课程管理页面2.创建各个信息管理页面3.创建路由三.服务端1.Api接口1&#xff09;根据课程ID查询课程信息2&#xff09;修改课程信息2.Dao3.Service4.Controller四.前端1. 完成course_baseinfo.vue页面2.API方法…

C#曲线分析平台的制作(四,highcharts+ajax加载后台数据)

在上一篇博客&#xff1a;C#曲线分析平台的制作&#xff08;三&#xff0c;三层构架echarts显示&#xff09;中已经完成了后台的三层构架的简单搭建&#xff0c;为实现后面的拓展应用开发和review 改写提供了方便。而在曲线分析平台中&#xff0c;往往有要求时间轴联动功能&…

国际C语言混乱代码大赛结果公布

国际C语言混乱代码大赛&#xff08;IOCCC, The International Obfuscated C Code Contest&#xff09;是一项国际编程赛事&#xff0c;从1984年开始&#xff0c;每年举办一次&#xff08;1997年、1999年、2002年、2003年和2006年例外&#xff09;。目的是写出最有创意的最让人难…