欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用SpringBoot构建在线教育平台(5):课程分类功能详解

最编程 2024-07-23 11:34:21
...

左侧我们需要做一个菜单,还是用elementUI,container容器有一个aside可以用,稍微改一下代码:

<el-container>
    <el-aside width="200px">Aside</el-aside>
     <el-main>Main</el-main>
</el-container>

效果:

0120e1ed342a2de68521183bc805e1bc.png

左侧边界,放置一个菜单,作为一类课程。

改造一下aside:

<el-aside width="200px">
  <el-menu
   default-active="2"
   class="el-menu-vertical-demo"
   >
   <el-submenu index="1">
     <template slot="title">
       <span>Java基础</span>
     </template>
    </el-submenu>
    <el-submenu index="1">
     <template slot="title">
       <span>Java中级</span>
     </template>
    </el-submenu>
    <el-submenu index="1">
     <template slot="title">
       <span>Spring框架</span>
     </template>
    </el-submenu>
 </el-menu>

467342cd78b128a7e52c322c8688c485.png

不要那个箭头,因为二级菜单我打算显示在右边,于是手动加一段css:

.el-submenu i {
    display:none;
  }


39fbf0220a0b29049b7d866c1e578922.png

好了,接下来就该去设计Type表了。

##2. 三级分类

我们的课程是三级(不是三级片的那个三级),分别为一级课程,二级课程,三级课程。

二话不说,咱直接建表。

package com.edu.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

@Entity
public class Type {

  @Id
  @GenericGenerator(name="idGenerator", strategy="uuid") //这个是hibernate的注解/生成32位UUID
    @GeneratedValue(generator="idGenerator")
  private String id;
  
  private Integer level; //课程等级
  
  private String pid; //父节点
  
  private String typeName;//课程名称

  public String getId() {
    return id;
  }

  // 省略 getters 和 setters

然后,需要在原来的TypeController里面完善add方法,先去弄一个Dao。

23f4f07b915ef905259eaca16be6e54e.png

代码:

package com.edu.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import com.edu.entity.Type;

public interface TypeDao  extends JpaRepository<Type, String> {

}

注入Controller

@Autowired
TypeDao typeDao;


野路子了,不用service,直接用dao了,大家不要学我啊。

重写后的add方法:

    @RequestMapping("/add")
  @ResponseBody
  public Map<String,Object> add(Type type){
    Map<String,Object> result = new HashMap<>();
    result.put("code",0);
    
    System.out.println("本次新增的类型是" + type);
    typeDao.save(type);
    
    return result;
  }

然后做测试类:

a1b9c321f24a5c13311d704cd83702fb.png

package com.edu.test;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.edu.controller.TypeController;
import com.edu.entity.Type;

public class TypeTest extends BaseTest{

  @Autowired
  TypeController typeController;
  
  @Test
  public void addType(){
    Type type = new Type();
    type.setLevel(1); //一级课程
    type.setPid("0");
    type.setTypeName("Java基础课程");
    
    typeController.add(type);
  }
}

没想到吧,Controller也可以注入,哈哈,我也是突发奇想,毕竟以前咱都没这么干过不是。

测试通过,数据进去了。

f12ed0c7cd92a01185e4ac3314b96790.png

ID生成策略改成了UUID。

接下来,我们要在前端搞事情了。


3. 用layui做个弹窗

直接在页面上加一个新增按钮,其实也就是一个菜单。

<el-submenu  index="999">
  <template slot="title">
  <span>新增</span>
  </template>
</el-submenu>

ad923d3b6605debe1d406f24bc7e2ab1.png

index设置为999,为什么呢?

因为我仍性啊!没想到吧~~

。。。。。。

开玩笑,是因为这个新增,我们打算当做按钮的,是一个业务上的东西,所以就取一个大点的值,999挺好的,当然998也不错。

接下来,我们需要给menu添加一个open事件:

 @open="addMenu"

然后在vue里面编写对应的函数:

methods:{
  addMenu: function(index){
    alert(index);
  }
 }


index就是submenu的index,比如,刚才的999,哈哈哈哈哈。

如果点的菜单是999,我们就去做增加操作,嗯,就酱。

5a1d4bb5ad37d2f6ceb8fdd6061f2b00.png


点击新增,我们应该弹出一个窗口,让我们输入菜单的名字,这个窗口,私以为用layui更好一些。。。

导入资源:


<link rel="stylesheet" href="${basePath}/layui/css/layui.css"  media="all">
<script src="${basePath}/layui/layui.all.js" charset="utf-8"></script>

接下来,我们需要专门做一个div,作为这个新增页面,里面放一个form。

    <div id="typebox" style="display:none;margin:20px;">
    <el-form :model="typeForm" status-icon :rules="rules" ref="typeForm" label-width="100px" class="demo-ruleForm">
      
      <el-form-item label="类型名称" prop="typeName">
        <el-input type="text" v-model="typeForm.typeName" autocomplete="off"></el-input>
      </el-form-item>
      
      <el-form-item>
        <el-button type="primary" @click="submitForm('typeForm')">提交</el-button>
        <el-button @click="resetForm('typeForm')">重置</el-button>
      </el-form-item>
    </el-form>
    
    </div>

代码有点多,为了防止截屏遗漏,干脆全部贴上来:

上一篇: 内部爆料:串讲常见面试难题,必看系列(第一部分)

下一篇: 分享一点移动网页动画设计经验:利用CSS3模拟跑步效果的心得体会