學成在線--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.pswp.cn/news/452203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452203.shtml
英文地址,請注明出處:http://en.pswp.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…