若依框架的使用

文章目录

    • 0,项目介绍
      • 项目架构
      • 项目原型
    • 1,前端
    • 2,后端
    • 3,数据库
    • 4,测试
    • 5,二开
      • 5.1 创建新module
      • 5.2 添加pom依赖
      • 5.3 添加测试代码
      • 5.4 测试
      • 5.5 跳过验证(后期要改回来)
      • 5.6 修改前端路由
      • 5.7 添加前端菜单
        • 5.7.1 一级菜单
        • 5.7.2 二级菜单
        • 5.7.3 测试
      • 5.8 课程列表-后台
        • 5.8.0 项目结构
        • 5.8.1 添加 CourseController
        • 5.8.2 添加 CourseService 接口
        • 5.8.3 添加 CourseServiceImpl 实现类
        • 5.8.4 添加 CourseMapper 接口
        • 5.8.5 添加 TbCourseBase 实体类
        • 5.8.6 添加 CourseMapper.xml映射文件
        • 5.8.7 修改pom依赖
        • 5.8.8 测试
      • 5.9 课程列表-前台
        • 5.9.1 修改course.js
        • 5.9.2 修改course.vue
      • 5.10 课程管理-模糊查询
        • 5.10.1 前台
        • 5.10.2 后台
      • 5.11 课程管理修改--前台
        • 5.11.1 修改course.vue
        • 5.11.2 修改course.js
      • 5.12 课程管理修改--后台
        • 5.12.1 修改CourseController
        • 5.12.2 修改CourseServiceImpl
        • 5.12.3 修改CourseService
        • 5.12.4 修改CourseMapper
        • 5.12.5 修改CourseMapper.xml
      • 5.13 课程管理修改--测试
      • 5.14 课程管理删除-前台
        • 5.14.1 修改course.vue
        • 5.14.2 修改course.js
      • 5.15 课程管理删除-后台
        • 5.15.1 修改CourseController
        • 5.15.2 修改CourseService
        • 5.15.3 修改CourseServiceImpl
        • 5.15.4 修改CourseMapper
        • 5.15.5 修改CourseMapper.xml
      • 5.16 课程删除-测试
      • 5.17 课程新增-前台
        • 5.15.7.1 修改course.vue
        • 5.15.7.2 修改course.js
      • 5.18 课程新增-后台
        • 5.15.8.1 修改CourseController
        • 5.15.8.2 修改CourseService接口
        • 5.15.8.3 修改CourseServiceImpl
        • 5.15.8.4 修改CourseMapper
        • 5.15.8.5 修改CourseMapper.xml
      • 5.19 课程新增-测试
      • 5.20 课程导出
        • 5.20.1 修改course.vue
        • 5.20.2 修改CourseController
        • 5.20.3 测试

0,项目介绍

项目架构

一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。

RuoYi从3.0开始,进行模块拆分,将原先的单应用转变为多模块,如需单应用,请移步 RuoYi-fast (opens new window)(保持同步更新),如需其他版本,请移步 项目扩展 (opens new window)(不定时更新)

如需Vue分离版本,请移步 RuoYi-Vue (opens new window),如需Cloud微服务版本,请移步 RuoYi-Cloud(opens new window)

RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。
在这里插入图片描述

项目原型

在这里插入图片描述

1,前端

在这里插入图片描述

2,后端

在这里插入图片描述

3,数据库

在这里插入图片描述

4,测试

在这里插入图片描述

5,二开

5.1 创建新module

在这里插入图片描述

5.2 添加pom依赖

  1. 本模块的pom文件增加对ruoyi-common的依赖
    在这里插入图片描述
  2. admin模块的pom文件增加对本模块的依赖。
    在这里插入图片描述

5.3 添加测试代码

在这里插入图片描述
在这里插入图片描述

5.4 测试

在这里插入图片描述
若依 要求请求接口需要带上token,没有token,是无法访问对应接口的。这个时候,我们可以简单的绕过验证。

5.5 跳过验证(后期要改回来)

在这里插入图片描述

5.6 修改前端路由

在这里插入图片描述

5.7 添加前端菜单

5.7.1 一级菜单

在这里插入图片描述
在这里插入图片描述

5.7.2 二级菜单

在这里插入图片描述
在这里插入图片描述

5.7.3 测试

在这里插入图片描述

5.8 课程列表-后台

5.8.0 项目结构

在这里插入图片描述

5.8.1 添加 CourseController
package com.ruoyi.controller;import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.domain.TbCourseBase;
import com.ruoyi.service.CourseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;//参考 com.ruoyi.web.controller.system.SysRoleController@Api("课程管理")
@RestController
@RequestMapping("/test/course")
public class CourseController extends BaseController {@Autowiredprivate CourseService courseService;@ApiOperation("测试")@RequestMapping("/hello")public String hello(){return "test...";}@PreAuthorize("@ss.hasPermi('test:course:list')")@ApiOperation("获取课程列表")@GetMapping("/list")public TableDataInfo list(TbCourseBase course){startPage();//分页--只对后面的第一次查询进行分页...List<TbCourseBase> list = courseService.selectCourseList(course);//查库return getDataTable(list);//返回数据并分页}}
5.8.2 添加 CourseService 接口
package com.ruoyi.service;
import com.ruoyi.domain.TbCourseBase;import java.util.List;
//课程业务层
//参考: com.ruoyi.system.service.ISysRoleService
public interface CourseService {/*** 根据条件分页查询课程数据* @param TbCourseBase 课程信息* @return 课程数据集合信息*/public List<TbCourseBase> selectCourseList(TbCourseBase course);
}
5.8.3 添加 CourseServiceImpl 实现类
package com.ruoyi.service.impl;import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.domain.TbCourseBase;
import com.ruoyi.mapper.CourseMapper;
import com.ruoyi.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;//课程 业务处理层
//参考: com.ruoyi.system.service.impl.SysRoleServiceImpl
@Service
public class CourseServiceImpl implements CourseService {@Autowiredprivate CourseMapper courseMapper;/*** 根据条件分页查询课程数据** @param TbCourseBase 课程信息* @return 课程数据集合信息*/@Override@DataScope(deptAlias = "d")public List<TbCourseBase> selectCourseList(TbCourseBase course) {return courseMapper.selectCourseList(course);}
}
5.8.4 添加 CourseMapper 接口
package com.ruoyi.mapper;import com.ruoyi.domain.TbCourseBase;import java.util.List;public interface CourseMapper {/*** 根据条件分页查询课程数据* @param TbCourseBase 课程信息* @return 课程数据集合信息*/public List<TbCourseBase> selectCourseList(TbCourseBase course);}
5.8.5 添加 TbCourseBase 实体类
package com.ruoyi.domain;import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;import java.math.BigDecimal;
import java.util.Date;//参考: com.ruoyi.common.core.domain.entity.SysRole
/*** 课程基本信息对象 tb_course_base** @author ruoyi* @date 2024-03-13*/
public class TbCourseBase  extends BaseEntity
{private static final long serialVersionUID = 1L;/** 主键 */private Long id;/** 机构ID */@Excel(name = "机构ID")private Long companyId;/** 机构名称 */@Excel(name = "机构名称")private String companyName;/** 课程名称 */@Excel(name = "课程名称")private String name;/** 适用人群 */@Excel(name = "适用人群")private String users;/** 课程标签 */@Excel(name = "课程标签")private String tags;/** 大分类 */@Excel(name = "大分类")private String mt;/** 课程大类名称 */@Excel(name = "课程大类名称")private String mtName;/** 小分类 */@Excel(name = "小分类")private String st;/** 课程小类名称 */@Excel(name = "课程小类名称")private String stName;/** 课程等级 */@Excel(name = "课程等级")private String grade;/** 教育模式(common普通,record 录播,live直播等) */@Excel(name = "教育模式(common普通,record 录播,live直播等)")private String teachmode;/** 课程介绍 */@Excel(name = "课程介绍")private String description;/** 课程封面 */@Excel(name = "课程封面")private String pic;/** 审核状态 */@Excel(name = "审核状态")private String auditStatus;/** 审核意见 */@Excel(name = "审核意见")private String auditMind;/** 是否删除:1为未删除,0为删除 */@Excel(name = "是否删除:1为未删除,0为删除")private Long status;/** 课程发布标识 */@Excel(name = "课程发布标识")private Long coursePubId;/** 是否收费 */@Excel(name = "是否收费")private String charge;/** 单价 */@Excel(name = "单价")private BigDecimal price;/** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd")@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")private Date createDate;/** 审核时间 */@JsonFormat(pattern = "yyyy-MM-dd")@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")private Date auditDate;/** 课程计划数量 */@Excel(name = "课程计划数量")private Long planNum;public void setId(Long id){this.id = id;}public Long getId(){return id;}public void setCompanyId(Long companyId){this.companyId = companyId;}public Long getCompanyId(){return companyId;}public void setCompanyName(String companyName){this.companyName = companyName;}public String getCompanyName(){return companyName;}public void setName(String name){this.name = name;}public String getName(){return name;}public void setUsers(String users){this.users = users;}public String getUsers(){return users;}public void setTags(String tags){this.tags = tags;}public String getTags(){return tags;}public void setMt(String mt){this.mt = mt;}public String getMt(){return mt;}public void setMtName(String mtName){this.mtName = mtName;}public String getMtName(){return mtName;}public void setSt(String st){this.st = st;}public String getSt(){return st;}public void setStName(String stName){this.stName = stName;}public String getStName(){return stName;}public void setGrade(String grade){this.grade = grade;}public String getGrade(){return grade;}public void setTeachmode(String teachmode){this.teachmode = teachmode;}public String getTeachmode(){return teachmode;}public void setDescription(String description){this.description = description;}public String getDescription(){return description;}public void setPic(String pic){this.pic = pic;}public String getPic(){return pic;}public void setAuditStatus(String auditStatus){this.auditStatus = auditStatus;}public String getAuditStatus(){return auditStatus;}public void setAuditMind(String auditMind){this.auditMind = auditMind;}public String getAuditMind(){return auditMind;}public void setStatus(Long status){this.status = status;}public Long getStatus(){return status;}public void setCoursePubId(Long coursePubId){this.coursePubId = coursePubId;}public Long getCoursePubId(){return coursePubId;}public void setCharge(String charge){this.charge = charge;}public String getCharge(){return charge;}public void setPrice(BigDecimal price){this.price = price;}public BigDecimal getPrice(){return price;}public void setCreateDate(Date createDate){this.createDate = createDate;}public Date getCreateDate(){return createDate;}public void setAuditDate(Date auditDate){this.auditDate = auditDate;}public Date getAuditDate(){return auditDate;}public void setPlanNum(Long planNum){this.planNum = planNum;}public Long getPlanNum(){return planNum;}@Overridepublic String toString() {return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("companyId", getCompanyId()).append("companyName", getCompanyName()).append("name", getName()).append("users", getUsers()).append("tags", getTags()).append("mt", getMt()).append("mtName", getMtName()).append("st", getSt()).append("stName", getStName()).append("grade", getGrade()).append("teachmode", getTeachmode()).append("description", getDescription()).append("pic", getPic()).append("auditStatus", getAuditStatus()).append("auditMind", getAuditMind()).append("status", getStatus()).append("coursePubId", getCoursePubId()).append("charge", getCharge()).append("price", getPrice()).append("createDate", getCreateDate()).append("auditDate", getAuditDate()).append("planNum", getPlanNum()).toString();}
}
5.8.6 添加 CourseMapper.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.ruoyi.mapper.CourseMapper"><resultMap type="TbCourseBase" id="SysCourseResult"><id     property="id"             	column="id"               /><result property="companyId"        column="company_id"             /><result property="companyName"      column="company_name"              /><result property="name"           	column="name"             /><result property="users"          	column="users"            /><result property="tags"  			column="tags"   /><result property="mt"  				column="mt"   /><result property="mtName"           column="mt_name"                /><result property="st"            	column="st"              /><result property="stName"           column="st_name"             /><result property="grade"         	column="grade"           /><result property="teachmode"        column="teachmode"             /><result property="description"      column="description"           /><result property="pic"             	column="pic"                /><result property="auditStatus"      column="audit_status"                /><result property="auditMind"        column="audit_mind"                /><result property="status"           column="status"                /><result property="coursePubId"      column="course_pub_id"                /><result property="charge"           column="charge"                /><result property="price"            column="price"                /><result property="createDate"      	column="create_date"                /><result property="auditDate"        column="audit_date"                /><result property="planNum"          column="plan_num"                /></resultMap><select id="selectCourseList" resultMap="SysCourseResult">select * from tb_course_base corder by c.create_date desc</select></mapper> 
5.8.7 修改pom依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.ruoyi</groupId><artifactId>ruoyi</artifactId><version>3.8.7</version></parent><artifactId>ruoyi-mytest</artifactId><packaging>jar</packaging><name>ruoyi-mytest</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- swagger3--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId></dependency><!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 --><dependency><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId><version>1.6.2</version></dependency><!--依赖若依工具包--><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common</artifactId></dependency><!--依赖若依pom--><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-framework</artifactId></dependency><!--添加mapper.xml的依赖--><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-system</artifactId></dependency></dependencies>
</project>
5.8.8 测试

在这里插入图片描述

5.9 课程列表-前台

5.9.1 修改course.js
import request from '@/utils/request'// 查询课程列表
export function listCourse(query) {return request({url: '/test/course/list',method: 'get',params: query})
}
5.9.2 修改course.vue
<template><!-- 模糊查询 //     --><div class="app-container"><el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"><el-form-item label="机构名称" prop="companyName"><el-inputv-model="queryParams.companyName"placeholder="请输入机构名称"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="课程名称" prop="name"><el-inputv-model="queryParams.name" placeholder="请输课程名称"clearable style="width: 240px" @keyup.enter.native="handleQuery" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-inputv-model="queryParams.auditStatus"placeholder="请输入审核状态"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="创建时间"><el-date-pickerv-model="createDate" style="width: 200px"value-format="yyyy-MM-dd"  type="daterange"range-separator="-"  start-placeholder="开始日期"  end-placeholder="结束日期" ></el-date-picker></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button><el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button></el-form-item></el-form><!-- 按钮 //     --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"plainicon="el-icon-plus"size="mini"@click="handleAdd"v-hasPermi="['system:role:add']">新增</el-button></el-col><el-col :span="1.5"><el-buttontype="success"plainicon="el-icon-edit"size="mini":disabled="single"@click="handleUpdate"v-hasPermi="['system:role:edit']">修改</el-button></el-col><el-col :span="1.5"><el-buttontype="danger"plainicon="el-icon-delete"size="mini":disabled="multiple"@click="handleDelete"v-hasPermi="['system:role:remove']">删除</el-button></el-col><el-col :span="1.5"><el-buttontype="warning"plainicon="el-icon-download"size="mini"@click="handleExport"v-hasPermi="['system:role:export']">导出</el-button></el-col><right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar></el-row><!-- 列表 //     --><el-table v-loading="loading" :data="courseList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="50" align="center" /><el-table-column label="课程编号" prop="id" width="80" /><el-table-column label="机构ID" prop="companyId" :show-overflow-tooltip="true" width="60" /><el-table-column label="机构名称" prop="companyName" :show-overflow-tooltip="true" width="200" /><el-table-column label="课程名称" prop="name" width="100" /><el-table-column label="适用人群" prop="users" width="100" /><el-table-column label="课程标签" prop="tags" width="100" /><el-table-column label="大分类" prop="mt" width="60" /><el-table-column label="课程大类名称" prop="mtName" width="100" /><el-table-column label="小分类" prop="st" width="60" /><el-table-column label="课程小类名称"  prop="stName" align="center" width="80"/><el-table-column label="审核状态"  prop="auditStatus" align="center" width="80"/><el-table-column label="创建时间" align="center" prop="createDate" width="150"/><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template slot-scope="scope" v-if="scope.row.roleId !== 1"><el-buttonsize="mini" type="text" icon="el-icon-edit"@click="handleUpdate(scope.row)"  v-hasPermi="['system:role:edit']">修改</el-button><el-buttonsize="mini"type="text"icon="el-icon-delete"@click="handleDelete(scope.row)"v-hasPermi="['system:role:remove']">删除</el-button><el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"><el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button><el-dropdown-menu slot="dropdown"><el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item><el-dropdown-item command="handleAuthUser" icon="el-icon-user"v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item></el-dropdown-menu></el-dropdown></template></el-table-column></el-table><paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/><!-- //    添加或修改角色配置对话框    / --><el-dialog :title="title" :visible.sync="open" width="500px" append-to-body><el-form ref="form" :model="form" :rules="rules" label-width="100px"><el-form-item label="机构名称" prop="companyName"><el-input v-model="form.companyName" placeholder="请输入机构名称" /></el-form-item><el-form-item prop="课程名称"><span slot="label"><i class="el-icon-question"></i> 课程名称</span><el-input v-model="form.name" placeholder="请输入课程名称" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-input-number v-model="form.auditStatus" controls-position="right" :min="202000" :max="202008"/></el-form-item><el-form-item label="是否删除"><el-radio-group v-model="form.status"><el-radio :label="1">未删除</el-radio><el-radio :label="0">已删除</el-radio></el-radio-group></el-form-item><el-form-item label="课程标签??"><el-checkbox-group v-model="form.tags" @change="handleCheckedTreeExpand($event, 'menu')"><el-checkbox v-for="(item,index) in form.tags " :key="item" :label="item">{{ item }}</el-checkbox></el-checkbox-group></el-form-item><el-form-item label="适用人群"><el-input v-model="form.users" type="textarea" placeholder="请输入内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog><!-- 分配角色数据权限对话框 --><el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body><el-form :model="form" label-width="80px"><el-form-item label="角色名称"><el-input v-model="form.roleName" :disabled="true" /></el-form-item><el-form-item label="权限字符"><el-input v-model="form.roleKey" :disabled="true" /></el-form-item><el-form-item label="数据权限" v-show="form.dataScope == 2"><el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox><el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox><el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox><el-treeclass="tree-border":data="deptOptions"show-checkboxdefault-expand-allref="dept"node-key="id":check-strictly="!form.deptCheckStrictly"empty-text="加载中,请稍候":props="defaultProps"></el-tree></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitDataScope">确 定</el-button><el-button @click="cancelDataScope">取 消</el-button></div></el-dialog></div>
</template><script>
// import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role";
// import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";import { listCourse,getCourse,updateCourse } from "@/views/course/course.js";
export default {name: "Role",dicts: ['sys_normal_disable'],data() {return {// 遮罩层loading: true,// 选中数组ids: [],// 非单个禁用single: true,// 非多个禁用multiple: true,// 显示搜索条件showSearch: true,// 总条数total: 0,// 角色表格数据courseList: [],// 弹出层标题title: "",// 是否显示弹出层open: false,// 是否显示弹出层(数据权限)openDataScope: false,menuExpand: false,menuNodeAll: false,deptExpand: true,deptNodeAll: false,// 日期范围createDate: [],// 数据范围选项dataScopeOptions: [{value: "1",label: "全部数据权限"},{value: "2",label: "自定数据权限"},{value: "3",label: "本部门数据权限"},{value: "4",label: "本部门及以下数据权限"},{value: "5",label: "仅本人数据权限"}],// 菜单列表menuOptions: [],// 部门列表deptOptions: [],// 查询参数queryParams: {pageNum: 1,pageSize: 10,name: undefined,companyName: undefined,createDate: undefined,auditStatus: undefined},// 表单参数form: {},defaultProps: {children: "children",label: "label"},// 表单校验rules: {roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }],roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }]}};},created() {this.getList();},methods: {/** 查询课程列表 */getList() {this.loading = true;listCourse(this.addDateRange(this.queryParams, this.createDate)).then(response => {this.courseList = response.rows;this.total = response.total;this.loading = false;});},// 取消按钮cancel() {this.open = false;this.reset();},// 取消按钮(数据权限)cancelDataScope() {this.openDataScope = false;this.reset();},// 表单重置reset() {if (this.$refs.menu != undefined) {this.$refs.menu.setCheckedKeys([]);}this.menuExpand = false,this.menuNodeAll = false,this.deptExpand = true,this.deptNodeAll = false,this.form = {roleId: undefined,roleName: undefined,roleKey: undefined,roleSort: 0,status: "0",menuIds: [],deptIds: [],menuCheckStrictly: true,deptCheckStrictly: true,remark: undefined};this.resetForm("form");},/** 搜索按钮操作 */handleQuery() {this.queryParams.pageNum = 1;this.getList();},/** 重置按钮操作 */resetQuery() {this.createDate = [];this.resetForm("queryForm");this.handleQuery();},// 多选框选中数据handleSelectionChange(selection) {this.ids = selection.map(item => item.id)this.single = selection.length!=1this.multiple = !selection.length},// 更多操作触发handleCommand(command, row) {switch (command) {case "handleDataScope":this.handleDataScope(row);break;case "handleAuthUser":this.handleAuthUser(row);break;default:break;}},/** 新增按钮操作 */handleAdd() {this.reset();this.getMenuTreeselect();this.open = true;this.title = "添加角色";},/** 修改按钮操作 */handleUpdate(row) {this.reset();const id = row.id || this.ids// const roleMenu = this.getRoleMenuTreeselect(roleId);getCourse(id).then(response => {this.form = response.data;this.open = true;// 判断是否为空 ,不是则用split分割开   tags=java,分布式架构,微服务this.form.tags = response.data.tags != null ? response.data.tags.split(',') : [],this.title = "修改课程";});},/** 提交按钮 */submitForm: function() {this.$refs["form"].validate(valid => {if (valid) {if (this.form.id != undefined) {// this.form.menuIds = this.getMenuAllCheckedKeys();updateCourse(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.open = false;this.getList();});} else {addRole(this.form).then(response => {this.$modal.msgSuccess("新增成功");this.open = false;this.getList();});}}});},/** 提交按钮(数据权限) */submitDataScope: function() {if (this.form.roleId != undefined) {this.form.deptIds = this.getDeptAllCheckedKeys();dataScope(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.openDataScope = false;this.getList();});}},/** 删除按钮操作 */handleDelete(row) {const roleIds = row.roleId || this.ids;this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function() {return delRole(roleIds);}).then(() => {this.getList();this.$modal.msgSuccess("删除成功");}).catch(() => {});},/** 导出按钮操作 */handleExport() {this.download('system/role/export', {...this.queryParams}, `role_${new Date().getTime()}.xlsx`)}}
};
</script>

5.10 课程管理-模糊查询

5.10.1 前台

参考 ### 5.9

5.10.2 后台
<?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.ruoyi.mapper.CourseMapper"><resultMap type="TbCourseBase" id="SysCourseResult"><id     property="id"             	column="id"               /><result property="companyId"        column="company_id"             /><result property="companyName"      column="company_name"              /><result property="name"           	column="name"             /><result property="users"          	column="users"            /><result property="tags"  			column="tags"   /><result property="mt"  				column="mt"   /><result property="mtName"           column="mt_name"                /><result property="st"            	column="st"              /><result property="stName"           column="st_name"             /><result property="grade"         	column="grade"           /><result property="teachmode"        column="teachmode"             /><result property="description"      column="description"           /><result property="pic"             	column="pic"                /><result property="auditStatus"      column="audit_status"                /><result property="auditMind"        column="audit_mind"                /><result property="status"           column="status"                /><result property="coursePubId"      column="course_pub_id"                /><result property="charge"           column="charge"                /><result property="price"            column="price"                /><result property="createDate"      	column="create_date"                /><result property="auditDate"        column="audit_date"                /><result property="planNum"          column="plan_num"                /></resultMap><!-- 支持模糊查询 --><select id="selectCourseList" resultMap="SysCourseResult">select * from tb_course_base cwhere c.status=1<if test="name != null and name != ''">AND c.name like concat('%', #{name}, '%')</if><if test="companyName != null and companyName != ''">AND c.company_name like concat('%', #{companyName}, '%')</if><if test="auditStatus != null and auditStatus != ''">AND c.audit_status = #{auditStatus}</if><if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->and date_format(c.create_date,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')</if><if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->and date_format(c.create_date,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')</if>order by c.create_date desc</select></mapper>

5.11 课程管理修改–前台

5.11.1 修改course.vue
<template><!-- 模糊查询 //     --><div class="app-container"><el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"><el-form-item label="机构名称" prop="companyName"><el-inputv-model="queryParams.companyName"placeholder="请输入机构名称"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="课程名称" prop="name"><el-inputv-model="queryParams.name" placeholder="请输课程名称"clearable style="width: 240px" @keyup.enter.native="handleQuery" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-inputv-model="queryParams.auditStatus"placeholder="请输入审核状态"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="创建时间"><el-date-pickerv-model="createDate" style="width: 200px"value-format="yyyy-MM-dd"  type="daterange"range-separator="-"  start-placeholder="开始日期"  end-placeholder="结束日期" ></el-date-picker></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button><el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button></el-form-item></el-form><!-- 按钮 //     --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"plainicon="el-icon-plus"size="mini"@click="handleAdd"v-hasPermi="['system:role:add']">新增</el-button></el-col><el-col :span="1.5"><el-buttontype="success"plainicon="el-icon-edit"size="mini":disabled="single"@click="handleUpdate"v-hasPermi="['system:role:edit']">修改</el-button></el-col><el-col :span="1.5"><el-buttontype="danger"plainicon="el-icon-delete"size="mini":disabled="multiple"@click="handleDelete"v-hasPermi="['system:role:remove']">删除</el-button></el-col><el-col :span="1.5"><el-buttontype="warning"plainicon="el-icon-download"size="mini"@click="handleExport"v-hasPermi="['system:role:export']">导出</el-button></el-col><right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar></el-row><!-- 列表 //     --><el-table v-loading="loading" :data="courseList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="50" align="center" /><el-table-column label="课程编号" prop="id" width="80" /><el-table-column label="机构ID" prop="companyId" :show-overflow-tooltip="true" width="60" /><el-table-column label="机构名称" prop="companyName" :show-overflow-tooltip="true" width="200" /><el-table-column label="课程名称" prop="name" width="100" /><el-table-column label="适用人群" prop="users" width="100" /><el-table-column label="课程标签" prop="tags" width="100" /><el-table-column label="大分类" prop="mt" width="60" /><el-table-column label="课程大类名称" prop="mtName" width="100" /><el-table-column label="小分类" prop="st" width="60" /><el-table-column label="课程小类名称"  prop="stName" align="center" width="80"/><el-table-column label="审核状态"  prop="auditStatus" align="center" width="80"/><el-table-column label="创建时间" align="center" prop="createDate" width="150"/><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template slot-scope="scope" v-if="scope.row.roleId !== 1"><el-buttonsize="mini" type="text" icon="el-icon-edit"@click="handleUpdate(scope.row)"  v-hasPermi="['system:role:edit']">修改</el-button><el-buttonsize="mini"type="text"icon="el-icon-delete"@click="handleDelete(scope.row)"v-hasPermi="['system:role:remove']">删除</el-button><el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"><el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button><el-dropdown-menu slot="dropdown"><el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item><el-dropdown-item command="handleAuthUser" icon="el-icon-user"v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item></el-dropdown-menu></el-dropdown></template></el-table-column></el-table><paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/><!-- //    添加或修改角色配置对话框    / --><el-dialog :title="title" :visible.sync="open" width="500px" append-to-body><el-form ref="form" :model="form" :rules="rules" label-width="100px"><el-form-item label="机构名称" prop="companyName"><el-input v-model="form.companyName" placeholder="请输入机构名称" /></el-form-item><el-form-item prop="课程名称"><span slot="label"><i class="el-icon-question"></i> 课程名称</span><el-input v-model="form.name" placeholder="请输入课程名称" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-input-number v-model="form.auditStatus" controls-position="right" :min="202000" :max="202008"/></el-form-item><el-form-item label="是否删除"><el-radio-group v-model="form.status"><el-radio :label="1">未删除</el-radio><el-radio :label="0">已删除</el-radio></el-radio-group></el-form-item><el-form-item label="课程标签??"><el-checkbox-group v-model="form.tags" @change="handleCheckedTreeExpand($event, 'menu')"><el-checkbox v-for="(item,index) in form.tags " :key="item" :label="item">{{ item }}</el-checkbox></el-checkbox-group></el-form-item><el-form-item label="适用人群"><el-input v-model="form.users" type="textarea" placeholder="请输入内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog><!-- 分配角色数据权限对话框 --><el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body><el-form :model="form" label-width="80px"><el-form-item label="角色名称"><el-input v-model="form.roleName" :disabled="true" /></el-form-item><el-form-item label="权限字符"><el-input v-model="form.roleKey" :disabled="true" /></el-form-item><el-form-item label="数据权限" v-show="form.dataScope == 2"><el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox><el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox><el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox><el-treeclass="tree-border":data="deptOptions"show-checkboxdefault-expand-allref="dept"node-key="id":check-strictly="!form.deptCheckStrictly"empty-text="加载中,请稍候":props="defaultProps"></el-tree></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitDataScope">确 定</el-button><el-button @click="cancelDataScope">取 消</el-button></div></el-dialog></div>
</template><script>
// import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role";
// import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";import { listCourse,getCourse,updateCourse } from "@/views/course/course.js";
export default {name: "Role",dicts: ['sys_normal_disable'],data() {return {// 遮罩层loading: true,// 选中数组ids: [],// 非单个禁用single: true,// 非多个禁用multiple: true,// 显示搜索条件showSearch: true,// 总条数total: 0,// 角色表格数据courseList: [],// 弹出层标题title: "",// 是否显示弹出层open: false,// 是否显示弹出层(数据权限)openDataScope: false,menuExpand: false,menuNodeAll: false,deptExpand: true,deptNodeAll: false,// 日期范围createDate: [],// 数据范围选项dataScopeOptions: [{value: "1",label: "全部数据权限"},{value: "2",label: "自定数据权限"},{value: "3",label: "本部门数据权限"},{value: "4",label: "本部门及以下数据权限"},{value: "5",label: "仅本人数据权限"}],// 菜单列表menuOptions: [],// 部门列表deptOptions: [],// 查询参数queryParams: {pageNum: 1,pageSize: 10,name: undefined,companyName: undefined,createDate: undefined,auditStatus: undefined},// 表单参数form: {},defaultProps: {children: "children",label: "label"},// 表单校验rules: {roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }],roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }]}};},created() {this.getList();},methods: {/** 查询课程列表 */getList() {this.loading = true;listCourse(this.addDateRange(this.queryParams, this.createDate)).then(response => {this.courseList = response.rows;this.total = response.total;this.loading = false;});},// 取消按钮cancel() {this.open = false;this.reset();},// 取消按钮(数据权限)cancelDataScope() {this.openDataScope = false;this.reset();},// 表单重置reset() {if (this.$refs.menu != undefined) {this.$refs.menu.setCheckedKeys([]);}this.menuExpand = false,this.menuNodeAll = false,this.deptExpand = true,this.deptNodeAll = false,this.form = {roleId: undefined,roleName: undefined,roleKey: undefined,roleSort: 0,status: "0",menuIds: [],deptIds: [],menuCheckStrictly: true,deptCheckStrictly: true,remark: undefined};this.resetForm("form");},/** 搜索按钮操作 */handleQuery() {this.queryParams.pageNum = 1;this.getList();},/** 重置按钮操作 */resetQuery() {this.createDate = [];this.resetForm("queryForm");this.handleQuery();},// 多选框选中数据handleSelectionChange(selection) {this.ids = selection.map(item => item.id)this.single = selection.length!=1this.multiple = !selection.length},// 更多操作触发handleCommand(command, row) {switch (command) {case "handleDataScope":this.handleDataScope(row);break;case "handleAuthUser":this.handleAuthUser(row);break;default:break;}},/** 新增按钮操作 */handleAdd() {this.reset();this.getMenuTreeselect();this.open = true;this.title = "添加角色";},/** 修改按钮操作 */handleUpdate(row) {this.reset();const id = row.id || this.ids// const roleMenu = this.getRoleMenuTreeselect(roleId);getCourse(id).then(response => {this.form = response.data;this.open = true;// 判断是否为空 ,不是则用split分割开   tags=java,分布式架构,微服务this.form.tags = response.data.tags != null ? response.data.tags.split(',') : [],this.title = "修改课程";});},/** 修改.....提交按钮 */submitForm: function() {this.$refs["form"].validate(valid => {if (valid) {if (this.form.id != undefined) {// this.form.menuIds = this.getMenuAllCheckedKeys();this.form.tags=JSON.stringify(this.form.tags);//多选框的数组转字符串updateCourse(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.open = false;this.getList();});} else {addRole(this.form).then(response => {this.$modal.msgSuccess("新增成功");this.open = false;this.getList();});}}});}};
</script>
5.11.2 修改course.js
import request from '@/utils/request'// 查询课程列表
export function listCourse(query) {return request({url: '/test/course/list',method: 'get',params: query})
}// 查询课程详细
export function getCourse(id) {return request({url: '/test/course/get/' + id,method: 'get'})
}// 修改课程
export function updateCourse(data) {return request({url: '/test/course/update/',method: 'put',data: data})
}

5.12 课程管理修改–后台

5.12.1 修改CourseController
package com.ruoyi.controller;import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.domain.TbCourseBase;
import com.ruoyi.service.CourseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import java.util.List;//参考 com.ruoyi.web.controller.system.SysRoleController@Api("课程管理")
@RestController
@RequestMapping("/test/course")
public class CourseController extends BaseController {@Autowiredprivate CourseService courseService;@ApiOperation("测试")@RequestMapping("/hello")public String hello(){return "test...";}@PreAuthorize("@ss.hasPermi('test:course:list')")@ApiOperation("获取课程列表")@GetMapping("/list")public TableDataInfo list(TbCourseBase course){startPage();//分页--只对后面的第一次查询进行分页...List<TbCourseBase> list = courseService.selectCourseList(course);//查库return getDataTable(list);//返回数据并分页}//修改前的查询....@GetMapping(value = "/get/{id}")public AjaxResult getInfo(@PathVariable Long id){TbCourseBase data = courseService.selectCourseById(id);return success(data);}//修改.....@PutMapping("/update")public AjaxResult udpate(@Validated @RequestBody TbCourseBase course){if (courseService.updateCourse(course) > 0)return success();return error("修改课程'" + course.getName() + "'失败,请联系管理员");}}
5.12.2 修改CourseServiceImpl
package com.ruoyi.service.impl;import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.domain.TbCourseBase;
import com.ruoyi.mapper.CourseMapper;
import com.ruoyi.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;//课程 业务处理层
//参考: com.ruoyi.system.service.impl.SysRoleServiceImpl
@Service
public class CourseServiceImpl implements CourseService {@Autowiredprivate CourseMapper courseMapper;/*** 根据条件分页查询课程数据** @param TbCourseBase 课程信息* @return 课程数据集合信息*/@Override
//    @DataScope(deptAlias = "d")public List<TbCourseBase> selectCourseList(TbCourseBase course) {return courseMapper.selectCourseList(course);}/***修改时 , 通过课程ID查询课程** @param id 课程ID* @return 课程对象信息*/@Overridepublic TbCourseBase selectCourseById(Long id){return courseMapper.selectCourseById(id);}/*** 修改TbCourseBase信息** @param TbCourseBase 课程信息* @return 结果*/@Override@Transactionalpublic int updateCourse(TbCourseBase course){// 修改课程信息return courseMapper.updateCourse(course);}}
5.12.3 修改CourseService
package com.ruoyi.service;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.domain.TbCourseBase;import java.util.List;
//课程业务层
//参考: com.ruoyi.system.service.ISysRoleService
public interface CourseService {/*** 根据条件分页查询课程数据* @param TbCourseBase 课程信息* @return 课程数据集合信息*/public List<TbCourseBase> selectCourseList(TbCourseBase course);/*** 修改时 ,通过课程ID查询课程** @param id 课程ID* @return 课程对象信息*/public TbCourseBase selectCourseById(Long id);/*** 修改TbCourseBase信息** @param TbCourseBase 课程信息* @return 结果*/public int updateCourse(TbCourseBase course);
}
5.12.4 修改CourseMapper
package com.ruoyi.mapper;import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.domain.TbCourseBase;import java.util.List;public interface CourseMapper {/*** 根据条件分页查询课程数据* @param TbCourseBase 课程信息* @return 课程数据集合信息*/public List<TbCourseBase> selectCourseList(TbCourseBase course);/*** 修改时 ,通过课程ID查询课程** @param id 课程ID* @return 课程对象信息*/TbCourseBase selectCourseById(Long id);/*** 修改 TbCourseBase信息** @param TbCourseBase 课程信息* @return 结果*/public int updateCourse(TbCourseBase course);
}
5.12.5 修改CourseMapper.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.ruoyi.mapper.CourseMapper"><resultMap type="TbCourseBase" id="SysCourseResult"><id     property="id"             	column="id"               /><result property="companyId"        column="company_id"             /><result property="companyName"      column="company_name"              /><result property="name"           	column="name"             /><result property="users"          	column="users"            /><result property="tags"  			column="tags"   /><result property="mt"  				column="mt"   /><result property="mtName"           column="mt_name"                /><result property="st"            	column="st"              /><result property="stName"           column="st_name"             /><result property="grade"         	column="grade"           /><result property="teachmode"        column="teachmode"             /><result property="description"      column="description"           /><result property="pic"             	column="pic"                /><result property="auditStatus"      column="audit_status"                /><result property="auditMind"        column="audit_mind"                /><result property="status"           column="status"                /><result property="coursePubId"      column="course_pub_id"                /><result property="charge"           column="charge"                /><result property="price"            column="price"                /><result property="createDate"      	column="create_date"                /><result property="auditDate"        column="audit_date"                /><result property="planNum"          column="plan_num"                /></resultMap><!-- 支持模糊查询 --><select id="selectCourseList" resultMap="SysCourseResult">select * from tb_course_base cwhere c.status=1<if test="name != null and name != ''">AND c.name like concat('%', #{name}, '%')</if><if test="companyName != null and companyName != ''">AND c.company_name like concat('%', #{companyName}, '%')</if><if test="auditStatus != null and auditStatus != ''">AND c.audit_status = #{auditStatus}</if><if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->and date_format(c.create_date,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d')</if><if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->and date_format(c.create_date,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')</if>order by c.create_date desc</select><!--修改时 , 按照id查课程--><select id="selectCourseById" resultMap="SysCourseResult">select * from tb_course_base cwhere c.id = #{id}</select><!--修改时的保存按钮--><update id="updateCourse">update tb_course_base<set><if test="companyName != null and companyName != ''">company_name = #{companyName},</if><if test="name != null and name != ''">name = #{name},</if><if test="auditStatus != null">audit_status = #{auditStatus},</if><if test="status != null and status != ''">status = #{status},</if><if test="users != null">users = #{users},</if><if test="tags != null">tags = #{tags},</if>audit_date = sysdate()</set>where id = #{id}</update></mapper>

5.13 课程管理修改–测试

在这里插入图片描述
在这里插入图片描述

5.14 课程管理删除-前台

5.14.1 修改course.vue
<template><!-- 模糊查询 //     --><div class="app-container"><el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"><el-form-item label="机构名称" prop="companyName"><el-inputv-model="queryParams.companyName"placeholder="请输入机构名称"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="课程名称" prop="name"><el-inputv-model="queryParams.name" placeholder="请输课程名称"clearable style="width: 240px" @keyup.enter.native="handleQuery" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-inputv-model="queryParams.auditStatus"placeholder="请输入审核状态"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="创建时间"><el-date-pickerv-model="createDate" style="width: 200px"value-format="yyyy-MM-dd"  type="daterange"range-separator="-"  start-placeholder="开始日期"  end-placeholder="结束日期" ></el-date-picker></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button><el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button></el-form-item></el-form><!-- 按钮 //     --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"plainicon="el-icon-plus"size="mini"@click="handleAdd"v-hasPermi="['system:role:add']">新增</el-button></el-col><el-col :span="1.5"><el-buttontype="success"plainicon="el-icon-edit"size="mini":disabled="single"@click="handleUpdate"v-hasPermi="['system:role:edit']">修改</el-button></el-col><el-col :span="1.5"><el-buttontype="danger"plainicon="el-icon-delete"size="mini":disabled="multiple"@click="handleDelete"v-hasPermi="['system:role:remove']">删除</el-button></el-col><el-col :span="1.5"><el-buttontype="warning"plainicon="el-icon-download"size="mini"@click="handleExport"v-hasPermi="['system:role:export']">导出</el-button></el-col><right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar></el-row><!-- 列表 //     --><el-table v-loading="loading" :data="courseList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="50" align="center" /><el-table-column label="课程编号" prop="id" width="80" /><el-table-column label="机构ID" prop="companyId" :show-overflow-tooltip="true" width="60" /><el-table-column label="机构名称" prop="companyName" :show-overflow-tooltip="true" width="200" /><el-table-column label="课程名称" prop="name" width="100" /><el-table-column label="适用人群" prop="users" width="100" /><el-table-column label="课程标签" prop="tags" width="100" /><el-table-column label="大分类" prop="mt" width="60" /><el-table-column label="课程大类名称" prop="mtName" width="100" /><el-table-column label="小分类" prop="st" width="60" /><el-table-column label="课程小类名称"  prop="stName" align="center" width="80"/><el-table-column label="审核状态"  prop="auditStatus" align="center" width="80"/><el-table-column label="创建时间" align="center" prop="createDate" width="150"/><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template slot-scope="scope" v-if="scope.row.roleId !== 1"><el-buttonsize="mini" type="text" icon="el-icon-edit"@click="handleUpdate(scope.row)"  v-hasPermi="['system:role:edit']">修改</el-button><el-button size="mini" type="text" icon="el-icon-delete"@click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']" >删除</el-button><el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"><el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button><el-dropdown-menu slot="dropdown"><el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item><el-dropdown-item command="handleAuthUser" icon="el-icon-user"v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item></el-dropdown-menu></el-dropdown></template></el-table-column></el-table><paginationv-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"/><!-- //    添加或修改角色配置对话框    / --><el-dialog :title="title" :visible.sync="open" width="500px" append-to-body><el-form ref="form" :model="form" :rules="rules" label-width="100px"><el-form-item label="机构名称" prop="companyName"><el-input v-model="form.companyName" placeholder="请输入机构名称" /></el-form-item><el-form-item prop="课程名称"><span slot="label"><i class="el-icon-question"></i> 课程名称</span><el-input v-model="form.name" placeholder="请输入课程名称" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-input-number v-model="form.auditStatus" controls-position="right" :min="202000" :max="202008"/></el-form-item><el-form-item label="是否删除"><el-radio-group v-model="form.status"><el-radio :label="1">未删除</el-radio><el-radio :label="0">已删除</el-radio></el-radio-group></el-form-item><el-form-item label="课程标签??"><el-checkbox-group v-model="form.tags" @change="handleCheckedTreeExpand($event, 'menu')"><el-checkbox v-for="(item,index) in form.tags " :key="item" :label="item">{{ item }}</el-checkbox></el-checkbox-group></el-form-item><el-form-item label="适用人群"><el-input v-model="form.users" type="textarea" placeholder="请输入内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog><!-- 分配角色数据权限对话框 --><el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body><el-form :model="form" label-width="80px"><el-form-item label="角色名称"><el-input v-model="form.roleName" :disabled="true" /></el-form-item><el-form-item label="权限字符"><el-input v-model="form.roleKey" :disabled="true" /></el-form-item><el-form-item label="数据权限" v-show="form.dataScope == 2"><el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox><el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox><el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox><el-treeclass="tree-border":data="deptOptions"show-checkboxdefault-expand-allref="dept"node-key="id":check-strictly="!form.deptCheckStrictly"empty-text="加载中,请稍候":props="defaultProps"></el-tree></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitDataScope">确 定</el-button><el-button @click="cancelDataScope">取 消</el-button></div></el-dialog></div>
</template><script>
// import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role";
// import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";import { listCourse,getCourse,updateCourse,delCourse } from "@/views/course/course.js";
export default {name: "Role",dicts: ['sys_normal_disable'],data() {return {// 遮罩层loading: true,// 选中数组ids: [],// 非单个禁用single: true,// 非多个禁用multiple: true,// 显示搜索条件showSearch: true,// 总条数total: 0,// 角色表格数据courseList: [],// 弹出层标题title: "",// 是否显示弹出层open: false,// 是否显示弹出层(数据权限)openDataScope: false,menuExpand: false,menuNodeAll: false,deptExpand: true,deptNodeAll: false,// 日期范围createDate: [],// 数据范围选项dataScopeOptions: [{value: "1",label: "全部数据权限"},{value: "2",label: "自定数据权限"},{value: "3",label: "本部门数据权限"},{value: "4",label: "本部门及以下数据权限"},{value: "5",label: "仅本人数据权限"}],// 菜单列表menuOptions: [],// 部门列表deptOptions: [],// 查询参数queryParams: {pageNum: 1,pageSize: 10,name: undefined,companyName: undefined,createDate: undefined,auditStatus: undefined},// 表单参数form: {},defaultProps: {children: "children",label: "label"},// 表单校验rules: {roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }],roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }]}};},created() {this.getList();},methods: {/** 查询课程列表 */getList() {this.loading = true;listCourse(this.addDateRange(this.queryParams, this.createDate)).then(response => {this.courseList = response.rows;this.total = response.total;this.loading = false;});},// 取消按钮cancel() {this.open = false;this.reset();},// 取消按钮(数据权限)cancelDataScope() {this.openDataScope = false;this.reset();},// 表单重置reset() {if (this.$refs.menu != undefined) {this.$refs.menu.setCheckedKeys([]);}this.menuExpand = false,this.menuNodeAll = false,this.deptExpand = true,this.deptNodeAll = false,this.form = {roleId: undefined,roleName: undefined,roleKey: undefined,roleSort: 0,status: "0",menuIds: [],deptIds: [],menuCheckStrictly: true,deptCheckStrictly: true,remark: undefined};this.resetForm("form");},/** 搜索按钮操作 */handleQuery() {this.queryParams.pageNum = 1;this.getList();},/** 重置按钮操作 */resetQuery() {this.createDate = [];this.resetForm("queryForm");this.handleQuery();},// 多选框选中数据handleSelectionChange(selection) {this.ids = selection.map(item => item.id)this.single = selection.length!=1this.multiple = !selection.length},// 更多操作触发handleCommand(command, row) {switch (command) {case "handleDataScope":this.handleDataScope(row);break;case "handleAuthUser":this.handleAuthUser(row);break;default:break;}},/** 新增按钮操作 */handleAdd() {this.reset();this.getMenuTreeselect();this.open = true;this.title = "添加角色";},/** 修改按钮操作 */handleUpdate(row) {this.reset();const id = row.id || this.ids// const roleMenu = this.getRoleMenuTreeselect(roleId);getCourse(id).then(response => {this.form = response.data;this.open = true;// 判断是否为空 ,不是则用split分割开   tags=java,分布式架构,微服务this.form.tags = response.data.tags != null ? response.data.tags.split(',') : [],this.title = "修改课程";});},/** 提交按钮 */submitForm: function() {this.$refs["form"].validate(valid => {if (valid) {if (this.form.id != undefined) {// this.form.menuIds = this.getMenuAllCheckedKeys();this.form.tags=JSON.stringify(this.form.tags);//多选框的数组转字符串updateCourse(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.open = false;this.getList();});} else {addRole(this.form).then(response => {this.$modal.msgSuccess("新增成功");this.open = false;this.getList();});}}});},/** 提交按钮(数据权限) */submitDataScope: function() {if (this.form.roleId != undefined) {this.form.deptIds = this.getDeptAllCheckedKeys();dataScope(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.openDataScope = false;this.getList();});}},/** 删除按钮操作 */handleDelete(row) {const ids = row.id || this.ids;this.$modal.confirm('是否确认删除课程编号为"' + ids + '"的数据项?').then(function() {return delCourse(ids);}).then(() => {this.getList();this.$modal.msgSuccess("删除成功");}).catch(() => {});},/** 导出按钮操作 */handleExport() {this.download('system/role/export', {...this.queryParams}, `role_${new Date().getTime()}.xlsx`)}}
};
</script>
5.14.2 修改course.js
import request from '@/utils/request'// 查询课程列表
export function listCourse(query) {return request({url: '/test/course/list',method: 'get',params: query})
}// 查询课程详细
export function getCourse(id) {return request({url: '/test/course/get/' + id,method: 'get'})
}// 修改课程
export function updateCourse(data) {return request({url: '/test/course/update/',method: 'put',data: data})
}// 删除角色
export function delCourse(ids) {return request({url: '/test/course/delete/' + ids,method: 'delete'})
}

5.15 课程管理删除-后台

5.15.1 修改CourseController
/*** 删除课程*/
//    @PreAuthorize("@ss.hasPermi('system:role:remove')")@Log(title = "课程管理", businessType = BusinessType.DELETE)@DeleteMapping("/delete/{ids}")public AjaxResult delete(@PathVariable Long[] ids){return toAjax(courseService.deleteCourseByIds(ids));}
5.15.2 修改CourseService
   /*** 批量删除课程信息** @param ids 需要删除的课程ID* @return 结果*/int deleteCourseByIds(Long[] ids);
5.15.3 修改CourseServiceImpl
    /*** 批量删除课程信息** @param ids 需要删除的课程ID* @return 结果*/@Override@Transactionalpublic int deleteCourseByIds(Long[] ids) {return courseMapper.deleteCourseByIds(ids);}
5.15.4 修改CourseMapper
 /*** 批量删除课程信息** @param ids 需要删除的课程ID* @return 结果*/int deleteCourseByIds(Long[] ids);
5.15.5 修改CourseMapper.xml

<delete id="deleteCourseByIds">update tb_course_base set status = 0 where id in<foreach collection="array" item="ids" open="(" separator="," close=")">#{ids}</foreach>
</delete>

5.16 课程删除-测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.17 课程新增-前台

5.15.7.1 修改course.vue
<template><!-- ///  模糊查询 ///     --><div class="app-container"><el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"><el-form-item label="机构名称" prop="companyName"><el-input v-model="queryParams.companyName" placeholder="请输入机构名称"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="课程名称" prop="name"><el-input v-model="queryParams.name" placeholder="请输课程名称"clearable style="width: 240px" @keyup.enter.native="handleQuery" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-input v-model="queryParams.auditStatus" placeholder="请输入审核状态"clearable style="width: 240px" @keyup.enter.native="handleQuery"  /></el-form-item><el-form-item label="创建时间"><el-date-pickerv-model="createDate" style="width: 200px"value-format="yyyy-MM-dd"  type="daterange"range-separator="-"  start-placeholder="开始日期"  end-placeholder="结束日期" ></el-date-picker></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button><el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button></el-form-item></el-form><!-- ///  按钮 ///     --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-button type="primary" plain icon="el-icon-plus" size="mini"@click="handleAdd"  v-hasPermi="['system:role:add']" >新增</el-button></el-col><el-col :span="1.5"><el-button type="danger" plain  icon="el-icon-delete"size="mini" :disabled="multiple" @click="handleDelete"v-hasPermi="['system:role:remove']" >批量删除</el-button></el-col><el-col :span="1.5"><el-button type="warning" plain icon="el-icon-download" size="mini"@click="handleExport" v-hasPermi="['system:role:export']" >导出</el-button></el-col><right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar></el-row><!-- ///   列表    ///     --><el-table v-loading="loading" :data="courseList" @selection-change="handleSelectionChange"><el-table-column type="selection" width="50" align="center" /><el-table-column label="课程编号" prop="id" width="80" /><el-table-column label="机构ID" prop="companyId" :show-overflow-tooltip="true" width="60" /><el-table-column label="机构名称" prop="companyName" :show-overflow-tooltip="true" width="200" /><el-table-column label="课程名称" prop="name" width="100" /><el-table-column label="适用人群" prop="users" width="100" /><el-table-column label="课程标签" prop="tags" width="100" /><el-table-column label="大分类" prop="mt" width="60" /><el-table-column label="课程大类名称" prop="mtName" width="100" /><el-table-column label="小分类" prop="st" width="60" /><el-table-column label="课程小类名称"  prop="stName" align="center" width="80"/><el-table-column label="审核状态"  prop="auditStatus" align="center" width="80"/><el-table-column label="创建时间" align="center" prop="createDate" width="150"/><el-table-column label="操作" align="center" class-name="small-padding fixed-width"><template slot-scope="scope" v-if="scope.row.id !== 0"><el-button size="mini" type="text" icon="el-icon-edit"@click="handleUpdate(scope.row)"  v-hasPermi="['system:role:edit']">修改</el-button><el-button size="mini" type="text" icon="el-icon-delete"@click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']" >删除</el-button><!-- 下拉菜单  --><el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"><el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button><el-dropdown-menu slot="dropdown"><el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item><el-dropdown-item command="handleAuthUser" icon="el-icon-user"v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item></el-dropdown-menu></el-dropdown></template></el-table-column></el-table><!--   分页 /--><pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"@pagination="getList"   /><!--    对话框   添加或修改课程配置   //   / --><el-dialog :title="title" :visible.sync="open" width="500px" append-to-body><el-form ref="form" :model="form" :rules="rules" label-width="100px"><el-form-item label="机构名称" prop="companyName"><el-input v-model="form.companyName" placeholder="请输入机构名称" /></el-form-item><el-form-item  label="课程名称" prop="name"><el-input v-model="form.name" placeholder="请输入课程名称" /></el-form-item><el-form-item label="审核状态" prop="auditStatus"><el-input-number v-model="form.auditStatus" controls-position="right" :min="202000" :max="202008"/></el-form-item><el-form-item label="是否删除"><el-radio-group v-model="form.status"><el-radio :label="1">未删除</el-radio><el-radio :label="0">已删除</el-radio></el-radio-group></el-form-item><el-form-item label="课程标签??"><el-checkbox-group v-model="form.tags" @change="handleCheckedTreeExpand($event, 'menu')"><el-checkbox v-for="(item,index) in form.tags " :key="item" :label="item">{{ item }}</el-checkbox></el-checkbox-group></el-form-item><el-form-item label="适用人群"><el-input v-model="form.users" type="textarea" placeholder="请输入内容..."></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog><!--    对话框  分配课程数据权限    --><el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body><el-form :model="form" label-width="80px"><el-form-item label="课程名称"><el-input v-model="form.roleName" :disabled="true" /></el-form-item><el-form-item label="权限字符"><el-input v-model="form.roleKey" :disabled="true" /></el-form-item><el-form-item label="数据权限" v-show="form.dataScope == 2"><el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox><el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox><el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox><el-treeclass="tree-border":data="deptOptions"show-checkboxdefault-expand-allref="dept"node-key="id":check-strictly="!form.deptCheckStrictly"empty-text="加载中,请稍候":props="defaultProps"></el-tree></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitDataScope">确 定</el-button><el-button @click="cancelDataScope">取 消</el-button></div></el-dialog></div>
</template><script>
import { listCourse,getCourse,updateCourse,delCourse,addCourse } from "@/views/course/course.js";export default {name: "Course",data() {return {// 遮罩层loading: true,// 选中数组ids: [],// 非单个禁用single: true,// 非多个禁用multiple: true,// 显示搜索条件showSearch: true,// 总条数total: 0,// 课程表格数据courseList: [],// 弹出层标题title: "",// 是否显示弹出层open: false,// 是否显示弹出层(数据权限)openDataScope: false,menuExpand: false,menuNodeAll: false,deptExpand: true,deptNodeAll: false,// 日期范围createDate: [],// 数据范围选项dataScopeOptions: [{value: "1",label: "全部数据权限"},{value: "2",label: "自定数据权限"},{value: "3",label: "本部门数据权限"},{value: "4",label: "本部门及以下数据权限"},{value: "5",label: "仅本人数据权限"}],// 菜单列表menuOptions: [],// 部门列表deptOptions: [],// 模糊查询参数queryParams: {pageNum: 1,pageSize: 10,name: undefined,companyName: undefined,createDate: undefined,auditStatus: undefined},// 表单参数form: {},defaultProps: {children: "children",label: "label"},// 表单校验rules: {name: [{ required: true, message: "课程名称不能为空", trigger: "blur" }],roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }]}};},created() {this.getList();},methods: {/** 查询课程列表 */getList() {this.loading = true;listCourse(this.addDateRange(this.queryParams, this.createDate)).then(response => {this.courseList = response.rows;this.total = response.total;this.loading = false;});},// 取消按钮cancel() {this.open = false;this.reset();},// 取消按钮(数据权限)cancelDataScope() {this.openDataScope = false;this.reset();},// 表单重置reset() {this.menuExpand = false,this.menuNodeAll = false,this.deptExpand = true,this.deptNodeAll = false,this.form = {companyName: undefined,name: undefined,auditStatus: undefined,createDate: undefined,status: "0",menuIds: [],deptIds: [],menuCheckStrictly: true,deptCheckStrictly: true,remark: undefined};this.resetForm("form");},/** 搜索按钮操作 */handleQuery() {this.queryParams.pageNum = 1;this.getList();},/** 重置按钮操作 */resetQuery() {this.createDate = [];this.resetForm("queryForm");this.handleQuery();},// 多选框 选中 列表数据handleSelectionChange(selection) {this.ids = selection.map(item => item.id)this.single = selection.length!=1this.multiple = !selection.length},// 列表里的更多  按钮handleCommand(command, row) {switch (command) {case "handleDataScope":this.handleDataScope(row);break;case "handleAuthUser":this.handleAuthUser(row);break;default:break;}},/** 新增按钮   打开对话框的操作 */handleAdd() {this.reset();this.open = true;this.title = "添加课程";},/** 修改 的查询 回显操作 */handleUpdate(row) {this.reset();const id = row.id || this.ids// const roleMenu = this.getRoleMenuTreeselect(roleId);getCourse(id).then(response => {this.form = response.data;this.open = true;// 判断是否为空 ,不是则用split分割开   tags=java,分布式架构,微服务this.form.tags = response.data.tags != null ? response.data.tags.split(',') : [],this.title = "修改课程";});},/** 修改和新增 的提交保存操作 */submitForm: function() {this.$refs["form"].validate(valid => {if (valid) {if (this.form.id != undefined) {this.form.tags=JSON.stringify(this.form.tags);//多选框的数组转字符串updateCourse(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.open = false;this.getList();});} else {addCourse(this.form).then(response => {this.$modal.msgSuccess("新增成功");this.open = false;this.getList();});}}});},/** 提交按钮(数据权限) */submitDataScope: function() {if (this.form.roleId != undefined) {this.form.deptIds = this.getDeptAllCheckedKeys();dataScope(this.form).then(response => {this.$modal.msgSuccess("修改成功");this.openDataScope = false;this.getList();});}},/** 删除按钮操作 */handleDelete(row) {const ids = row.id || this.ids;this.$modal.confirm('是否确认删除课程编号为"' + ids + '"的数据项?').then(function() {return delCourse(ids);}).then(() => {this.getList();this.$modal.msgSuccess("删除成功");}).catch(() => {});},/** 导出按钮操作 */handleExport() {this.download('system/role/export', {...this.queryParams}, `role_${new Date().getTime()}.xlsx`)}}
};
</script>
5.15.7.2 修改course.js
import request from '@/utils/request'// 查询课程列表
export function listCourse(query) {return request({url: '/test/course/list',method: 'get',params: query})
}// 查询课程详细
export function getCourse(id) {return request({url: '/test/course/get/' + id,method: 'get'})
}// 修改课程
export function updateCourse(data) {return request({url: '/test/course/update/',method: 'put',data: data})
}// 删除课程
export function delCourse(ids) {return request({url: '/test/course/delete/' + ids,method: 'delete'})
}// 新增课程
export function addCourse(data) {return request({url: '/test/course/add/',method: 'post',data: data})
}// // 课程数据权限
// export function dataScope(data) {
//   return request({
//     url: '/system/role/dataScope',
//     method: 'put',
//     data: data
//   })
// }// // 课程状态修改
// export function changeRoleStatus(roleId, status) {
//   const data = {
//     roleId,
//     status
//   }
//   return request({
//     url: '/system/role/changeStatus',
//     method: 'put',
//     data: data
//   })
// }// // 查询课程已授权用户列表
// export function allocatedUserList(query) {
//   return request({
//     url: '/system/role/authUser/allocatedList',
//     method: 'get',
//     params: query
//   })
// }// // 查询课程未授权用户列表
// export function unallocatedUserList(query) {
//   return request({
//     url: '/system/role/authUser/unallocatedList',
//     method: 'get',
//     params: query
//   })
// }// // 取消用户授权课程
// export function authUserCancel(data) {
//   return request({
//     url: '/system/role/authUser/cancel',
//     method: 'put',
//     data: data
//   })
// }// // 批量取消用户授权课程
// export function authUserCancelAll(data) {
//   return request({
//     url: '/system/role/authUser/cancelAll',
//     method: 'put',
//     params: data
//   })
// }// // 授权用户选择
// export function authUserSelectAll(data) {
//   return request({
//     url: '/system/role/authUser/selectAll',
//     method: 'put',
//     params: data
//   })
// }// // 根据课程ID查询部门树结构
// export function deptTreeSelect(roleId) {
//   return request({
//     url: '/system/role/deptTree/' + roleId,
//     method: 'get'
//   })
// }

5.18 课程新增-后台

5.15.8.1 修改CourseController
    //新增课程@Log(title = "课程管理", businessType = BusinessType.INSERT)@PostMapping("/add")public AjaxResult add(@RequestBody TbCourseBase course){return success(courseService.add(course));}
5.15.8.2 修改CourseService接口
    //新增课程int add(TbCourseBase course);
5.15.8.3 修改CourseServiceImpl
    //新增课程@Overridepublic int add(TbCourseBase course) {return courseMapper.add(course);}
5.15.8.4 修改CourseMapper
//新增课程
int add(TbCourseBase course);
5.15.8.5 修改CourseMapper.xml
<insert id="add">insert into tb_course_base(company_id,name,mt,st,grade,teachmode,audit_status,create_date,status)values (2,#{name},1,1,204002,200003,#{auditStatus},now(),1)
</insert>

5.19 课程新增-测试

在这里插入图片描述
在这里插入图片描述

5.20 课程导出

5.20.1 修改course.vue
/** 导出按钮操作 */
handleExport() {this.download('/test/course/export', {...this.queryParams}, `course_${new Date().getTime()}.xlsx`)
}
5.20.2 修改CourseController
   @Log(title = "课程管理", businessType = BusinessType.EXPORT)
//    @PreAuthorize("@ss.hasPermi('system:user:export')")@PostMapping("/export")public void export(HttpServletResponse response, TbCourseBase course) {List<TbCourseBase> list = courseService.selectCourseList(course);ExcelUtil<TbCourseBase> util = new ExcelUtil<TbCourseBase>(TbCourseBase.class);util.exportExcel(response, list, "课程管理数据");}
5.20.3 测试

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

VisionPro安装教程

安装 前言: 私信获取软件安装包 一、 关闭电脑管家 关闭防火墙 二、 解压此文件 三、 解压完成 找到DISK1目录 在setup.exe文件 右键 以管理员身份运行 四、 等待 五、 点击 “下一步 六、 点击 下一步 七、 接受条款 点击下一步 八、 填写邮箱 九、 点击下一…

案例分析篇01:软件架构设计考点架构风格及质量属性(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

pytorch(十)循环神经网络

文章目录 卷积神经网络与循环神经网络的区别RNN cell结构构造RNN例子 seq2seq 卷积神经网络与循环神经网络的区别 卷积神经网络&#xff1a;在卷积神经网络中&#xff0c;全连接层的参数占比是最多的。 卷积神经网络主要用语处理图像、语音等空间数据&#xff0c;它的特点是局部…

复现文件上传漏洞

一、搭建upload-labs环境 将下载好的upload-labs的压缩包&#xff0c;将此压缩包解压到WWW中&#xff0c;并将名称修改为upload&#xff0c;同时也要在upload文件中建立一个upload的文件。 然后在浏览器网址栏输入&#xff1a;127.0.0.1/upload进入靶场。 第一关 选择上传文件…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

AI预测福彩3D第9弹【2024年3月15日预测--第2套算法重新开始计算第1次测试】

我有一个彩友交流群&#xff0c;里面有很多热衷研究彩票技术的彩友&#xff0c;经过群里很多彩友的建议&#xff0c;我昨天晚上又设计了一套新的算法&#xff0c;这套算法加入了012路权重&#xff0c;将012路的权重按照开出概率设为不同的权重系数。 然后与第1套算法的进行相乘…

RabbitMq踩坑记录

1、连接报错&#xff1a;Broker not available; cannot force queue declarations during start: java.io.IOException 2.1、原因&#xff1a;端口不对 2.2、解决方案&#xff1a; 检查你的连接配置&#xff0c;很可能是你的yml里面的端口配置的是15672&#xff0c;更改为5672即…

STM32基础--中断应用

本文章里面假设中断就是异常&#xff0c;不做区分。 异常类型 F103 在内核水平上搭载了一个异常响应系统&#xff0c;支持为数众多的系统异常和外部中断。其中系统异常有 8 个&#xff08;如果把 Reset 和 HardFault 也算上的话就是 10 个&#xff09;&#xff0c;外部中断有…

upload-labs 0.1 靶机详解

下载地址https://github.com/c0ny1/upload-labs/releases Pass-01 他让我们上传一张图片&#xff0c;我们先尝试上传一个php文件 发现他只允许上传图片格式的文件&#xff0c;我们来看看源码 我们可以看到它使用js来限制我们可以上传的内容 但是我们的浏览器是可以关闭js功能的…

Linux 大页内存 Huge Pages 虚拟内存

Linux 大页内存 Huge Pages 虚拟内存 - 秋来叶黄 - 博客园 (cnblogs.com) Linux为什么要有大页内存&#xff1f;为什么DPDK必须要设置大页内存&#xff1f;这都是由系统架构决定的。一开始为了解决一个问题&#xff0c;设计了对应的方案&#xff0c;随着事物的发展&#xff0c…

产品必会的7个Axure使用技巧(中阶)

一、格式刷 格式刷可以用来复制样式 先选择需要复制样式的控件&#xff0c;然后在点击钢笔旁边的“更多”&#xff0c;点击选择格式刷 然后选择需要复制样式的目标控件&#xff0c;点击“应用”&#xff0c;就可以将样式复制过来。 不过在Axure9中&#xff0c;可以直接右键复…

2025MEM/MBA学习计划-1

三年大考&#xff0c; 从2022年开始&#xff0c;经历了2022年失败&#xff0c;2023年因为口罩弃考&#xff0c;2024年A线差4分,超B线6分&#xff0c;但我不想调剂&#xff0c;今年继续。英语42分给我了比较大信心&#xff0c;今年的英语我要过65。从今天开始&#xff0c;先从数…