学成在线--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;两者使用上差不多但还是…

面向对象方法开发的方法

面向对象分析首要的工作&#xff0c;是建立问题域的对象模型。 这个模型描述了现实世界中的“类与对象”以及它们之间的关系&#xff0c;表示了目标系统的静态数据结构。静态数据结构对应用细节依赖较少&#xff0c;比较容易确定。因此&#xff0c;用面向对象方法开发绝大多数…

程序员编程需要多少个小时?

Michael Arrington曾发表一篇博文说&#xff0c;创业者必须加倍的努力工作&#xff0c;甚至不惜趴在办公桌上睡觉&#xff0c;这样才能成功。对此&#xff0c;我并不赞同其观点&#xff0c;我看了很多评论都是关于这样工作会适得其反&#xff0c;不但没有获得成功&#xff0c;相…

事务以及@Transcational注解

文章目录1.事务的概念2.事务的四个特性3.关于Transcational注解的理解4.使用场景5.举例6.编程式事务管理7.相关知识1.事务的概念 事务&#xff0c;是指作为单个逻辑工作单元执行的一系列操作&#xff0c;结果只有成功和失败两种&#xff0c;要么全部成功(全部提交)&#xff0c…

提高代码复用率

由于现在的互联网企业业务比较繁忙&#xff0c;导致产品狗不停地提需求&#xff0c;还总是改来改去&#xff0c;最后留给程序猿的时间少之又少。程序猿也不是吃素的&#xff0c;干脆直接copy一下代码随便搞一下实现功能就行&#xff0c;也谈不上所谓的精心设计了。这样的确是缩…

java 对 redis 的基本操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、server端安装 1、下载https://github.com/MSOpenTech/redis 可看到当前可下载版本&#xff1a;redis2.6 2、安装 1&#xff09;解压…

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;调…

mac 下的操作

nodejs在Mac下的卸载 在 node 官网上下载的安装包&#xff0c;用安装包安装的node.应该可以用一下命令行卸载&#xff1a; 在终端输入以下命令&#xff1a; sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 删除/usr/local/lib中的…

理解 maven 的核心概念

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

时间跟踪图

事件跟踪图实质上是扩充的脚本&#xff0c;可以认为事件跟踪图是简化的UML顺序图。

1088. [SCOI2005]扫雷Mine【网格DP】

Description 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷&#xff0c;要你根据一些信息找出雷来。万圣节到了 &#xff0c;“余”人国流行起了一种简单的扫雷游戏&#xff0c;这个游戏规则和扫雷一样&#xff0c;如果某个格子没有雷&#xff0c;那么它里面的数…

spring data jpa和mybatis的不同

使用spring data JPA和mybatis都是用来访问数据库&#xff0c;但他们的分工不同&#xff1a; 1.spring data jpa默认使用hibernate作为ORM实现&#xff0c;是spring 提供的一套jpa接口&#xff0c;使用spring data jpa主要完成一些简单的增删改查功能。 2.对于复杂的查询功能会…

函数式编程很难,这正是你要学习它的原因

很奇怪不是&#xff0c;很少有人每天都使用函数式编程语言。如果你用Scala&#xff0c;Haskell&#xff0c;Erlang&#xff0c;F#或某个Lisp方言来编程&#xff0c;很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python&#xff0c;Ruby&#xff0c;Java或C#等面…

函数依赖

设R(U)是一个属性集U上的关系模式&#xff0c;X和Y是U的子集。若对于R(U)的任意一个可能的关系r&#xff0c;r 中不可能存在两个元组在X上的属性值相等&#xff0c; 而在Y上的属性值不等&#xff0c; 则称“X函数确定Y”或“Y函数依赖于X”&#xff0c;记作X→Y。 X→Y&#x…

Java面试——线程池

1、类比介绍 假如有一个工厂&#xff0c;工厂里面有10个工人&#xff0c;每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的&#xff0c;来了任务就分配给空闲的工人做&#xff1b; 当10个工人都有任务在做时&#xff0c;如果还来了任务&#xff0c;就把任务进…

C#关键字的使用

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