1、 实现课程列表接口
在EduCourseController中添加课程列表查询方法。
java
@ApiOperation(value = "课程列表查询")
@GetMapping("getList")
//TODO 完善条件查询和分页
public R getList(){
List<EduCourse> list = courseService.list(null);
return R.ok().data("list",list);
}
2、前端实现
(1)在api/course.js
页面中添加查询课程列表信息api方法
java
//查询课程列表信息
getList(){
return request({
url: `/eduservice/educourse/getList`,
method: 'get'
})
}
(2)页面实现
在course/list.vue
页面中添加课程列表页面实现代码。
java
<template>
<div class="app-container">
课程列表
<!-- 表格 -->
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="数据加载中"
border
fit
highlight-current-row
row-class-name="myClassList"
>
<el-table-column label="序号" width="70" align="center">
<template slot-scope="scope">{{ (page - 1) * limit + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="课程信息" width="470" align="center">
<template slot-scope="scope">
<div class="info">
<div class="pic">
<img :src="scope.row.cover" alt="scope.row.title" width="150px">
</div>
<div class="title">
<a href>{{ scope.row.title }}</a>
<p>{{ scope.row.lessonNum }}课时</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center">
<template slot-scope="scope">{{ scope.row.gmtCreate.substr(0, 10) }}</template>
</el-table-column>
<el-table-column label="发布时间" align="center">
<template slot-scope="scope">{{ scope.row.gmtModified.substr(0, 10) }}</template>
</el-table-column>
<el-table-column label="价格" width="100" align="center">
<template slot-scope="scope">
{{ Number(scope.row.price) === 0 ? '免费' :
'¥' + scope.row.price.toFixed(2) }}
</template>
</el-table-column>
<el-table-column prop="buyCount" label="付费学员" width="100" align="center">
<template slot-scope="scope">{{ scope.row.buyCount }}人</template>
</el-table-column>
<el-table-column label="操作" width="150" align="center">
<template slot-scope="scope">
<router-link :to="'/course/add/'+scope.row.id">
<el-button type="text" size="mini" icon="el-icon-edit">编辑课程信息</el-button>
</router-link>
<router-link :to="'/course/chapter/'+scope.row.id">
<el-button type="text" size="mini" icon="el-icon-edit">编辑课程大纲</el-button>
</router-link>
<el-button type="text" size="mini" icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
(3)在course/list.vue
实现js方法
java
<script>
import course from "@/api/course";
export default {
data() {
return {
list: [], //数据表格
total: 0,//总记录数
page:1,//页码
limit:10//每页记录数
};
},
created() {
this.getCourseList()
},
methods: {
getCourseList(){
course.getList()
.then(response=>{
this.list=response.data.list
})
}
}
};
</script>
3、课程列表查询(条件、分页)
(1)在EduCourseController中添加课程列表查询(条件、分页)的方法
java
@ApiOperation(value = "条件分页课程列表")
@GetMapping("{page}/{limit}")
public R pageQuery(
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Long limit,
@ApiParam(name = "courseQuery", value = "查询对象", required = false)
CourseQuery courseQuery){
Page<EduCourse> pageParam = new Page<>(page, limit);
courseService.pageQuery(pageParam, courseQuery);
List<EduCourse> records = pageParam.getRecords();
long total = pageParam.getTotal();
return R.ok().data("total", total).data("rows", records);
}
4、前端实现
(1)在api/course.js
页面中条件分页课程列表api方法
java
getPageList(page, limit, searchObj) {
return request({
url: `/eduservice/educourse/${page}/${limit}`,
method: 'get',
params: searchObj
})
},
(2)页面实现
在course/list.vue
页面中添加条件分页课程列表页面实现代码
xml
<!-- 二级分类 -->
<el-select v-model="searchObj.subjectId" placeholder="请选择">
<el-option
v-for="subject in subSubjectList"
:key="subject.id"
:label="subject.title"
:value="subject.id"/>
</el-select>
<el-button type="primary" icon="el-icon-search" @click="fetchData()">查询 <el-button type="default" @click="resetData()">清空
(3)在course/list.vue
实现相应的js方法
java
<script>
import course from '@/api/course'
import teacher from '@/api/teacher'
import subject from '@/api/subject'
export default {
data() {
return {
listLoading: true, // 是否显示loading信息
list: null, // 数据列表
total: 0, // 总记录数
page: 1, // 页码
limit: 10, // 每页记录数
searchObj: {
subjectParentId: '',
subjectId: '',
title: '',
teacherId: ''
}, // 查询条件
teacherList: [], // 讲师列表
subjectNestedList: [], // 一级分类列表
subSubjectList: [] // 二级分类列表,
}
},
created() { // 当页面加载时获取数据
this.fetchData()
// 初始化分类列表
this.initSubjectList()
// 获取讲师列表
this.initTeacherList()
},
methods: {
fetchData(page = 1) { // 调用api层获取数据库中的数据
console.log('加载列表')
// 当点击分页组件的切换按钮的时候,会传输一个当前页码的参数page
// 解决分页无效问题
this.page = page
this.listLoading = true
course.getPageList(this.page, this.limit, this.searchObj).then(response => {
// debugger 设置断点调试
if (response.success === true) {
this.list = response.data.rows
this.total = response.data.total
}
this.listLoading = false
})
},
initTeacherList() {
teacher.getAllTeacher().then(response => {
this.teacherList = response.data.items
})
},
initSubjectList() {
subject.getAllSubject().then(response => {
this.subjectNestedList = response.data.allSubject
})
},
subjectLevelOneChanged(value) {
for (let i = 0; i < this.subjectNestedList.length; i++) {
if (this.subjectNestedList[i].id === value) {
this.subSubjectList = this.subjectNestedList[i].children
this.searchObj.subjectId = ''
}
}
},
resetData() {
this.searchObj = {}
this.subSubjectList = [] // 二级分类列表
this.fetchData()
},
// 删除课程(以及相关信息)
removeCourseId(id) {
this.$confirm('此操作将永久删除该课程, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
// 调用接口删除数据
course.deleteCourse(id).then(response => {
// 提示
this.$message({
type: 'success',
message: '删除成功!'
})
// 刷新表格
this.getCourseList()
})
})
}
}
}
</script>
<style scoped>
.myClassList .info {
width: 450px;
overflow: hidden;
}
.myClassList .info .pic {
width: 150px;
height: 90px;
overflow: hidden;
float: left;
}
.myClassList .info .pic a {
display: block;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
.myClassList .info .pic img {
display: block;
width: 100%;
}
.myClassList td .info .title {
width: 280px;
float: right;
height: 90px;
}
.myClassList td .info .title a {
display: block;
height: 48px;
line-height: 24px;
overflow: hidden;
color: #00baf2;
margin-bottom: 12px;
}
.myClassList td .info .title p {
line-height: 20px;
margin-top: 5px;
color: #818181;
}
</style>