提交 19201640 authored 作者: 王鹏飞's avatar 王鹏飞

fix: 修复班级课程列表、教师列表、学员列表没有分页的问题;数据总览代码错误的问题;

上级 be69776e
...@@ -13,19 +13,9 @@ ...@@ -13,19 +13,9 @@
<!-- input --> <!-- input -->
<el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" /> <el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" />
<!-- select --> <!-- select -->
<el-select <el-select v-model="params[item.prop]" clearable v-bind="item" v-if="item.type === 'select'" @change="search">
v-model="params[item.prop]"
clearable
v-bind="item"
v-if="item.type === 'select'"
@change="search"
>
<template v-for="(option, index) in item.options"> <template v-for="(option, index) in item.options">
<el-option <el-option :label="option[item.labelKey] || option.label" :value="option[item.valueKey] || option.value" :key="index"></el-option>
:label="option[item.labelKey] || option.label"
:value="option[item.valueKey] || option.value"
:key="index"
></el-option>
</template> </template>
</el-select> </el-select>
</template> </template>
...@@ -44,14 +34,7 @@ ...@@ -44,14 +34,7 @@
<!-- 主体 --> <!-- 主体 -->
<div class="table-list-bd"> <div class="table-list-bd">
<slot name="body" v-bind="{ data: dataList }"> <slot name="body" v-bind="{ data: dataList }">
<el-table <el-table :data="dataList" v-loading="loading" v-bind="$attrs" v-on="$listeners" style="height: 100%" ref="table">
:data="dataList"
v-loading="loading"
v-bind="$attrs"
v-on="$listeners"
style="height: 100%"
ref="table"
>
<template v-for="item in columns"> <template v-for="item in columns">
<el-table-column v-bind="item" :key="item.prop" v-if="visible(item)"> <el-table-column v-bind="item" :key="item.prop" v-if="visible(item)">
<template v-slot:default="scope" v-if="item.slots || item.computed"> <template v-slot:default="scope" v-if="item.slots || item.computed">
...@@ -96,19 +79,9 @@ ...@@ -96,19 +79,9 @@
<!-- input --> <!-- input -->
<el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" /> <el-input v-model="params[item.prop]" v-bind="item" clearable v-if="item.type === 'input'" />
<!-- select --> <!-- select -->
<el-select <el-select v-model="params[item.prop]" clearable v-bind="item" v-if="item.type === 'select'" style="width: 100%">
v-model="params[item.prop]"
clearable
v-bind="item"
v-if="item.type === 'select'"
style="width: 100%"
>
<template v-for="(option, index) in item.options"> <template v-for="(option, index) in item.options">
<el-option <el-option :label="option[item.labelKey] || option.label" :value="option[item.valueKey] || option.value" :key="index"></el-option>
:label="option[item.labelKey] || option.label"
:value="option[item.valueKey] || option.value"
:key="index"
></el-option>
</template> </template>
</el-select> </el-select>
</template> </template>
...@@ -206,12 +179,13 @@ export default { ...@@ -206,12 +179,13 @@ export default {
this.loading = true this.loading = true
httpRequest(params) httpRequest(params)
.then(res => { .then(res => {
const { data = {} } = res || {} const data = res.data || {}
this.page.total = parseInt(data.total || 0)
if (Array.isArray(data)) { if (Array.isArray(data)) {
this.dataList = callback ? callback(data) : data this.dataList = callback ? callback(data) : data
} else { } else {
this.dataList = callback ? callback(data) : data.list const { list, total } = callback ? callback(data) : data
this.dataList = list
this.page.total = parseInt(total || 0)
} }
}) })
.catch(() => { .catch(() => {
......
...@@ -141,7 +141,7 @@ export default { ...@@ -141,7 +141,7 @@ export default {
align: 'center', align: 'center',
prop: 'expiration_time', prop: 'expiration_time',
computed({ row }) { computed({ row }) {
return row.expiration_time.slice(0, 10) return row.expiration_time?.slice(0, 10)
} }
}, },
{ label: '重修次数', align: 'center', prop: 'study_times' }, { label: '重修次数', align: 'center', prop: 'study_times' },
......
...@@ -13,43 +13,39 @@ ...@@ -13,43 +13,39 @@
<!-- <el-button @click="onEdit(row)" type="primary" size="mini" plain>更新</el-button> <!-- <el-button @click="onEdit(row)" type="primary" size="mini" plain>更新</el-button>
<el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button> --> <el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button> -->
</template> </template>
<AddCourse <AddCourse v-if="isShowDialog" :info="info" :title="info ? '更新课程' : '添加课程'" :visible.sync="isShowDialog" @success="success" />
v-if="isShowDialog"
:info="info"
:title="info ? '更新课程' : '添加课程'"
:visible.sync="isShowDialog"
@success="success"
/>
</app-list> </app-list>
</template> </template>
<script> <script>
import { addCourse } from '../api' import { addCourse, getClassDetail } from '../api'
import AddCourse from './AddCourse.vue' import AddCourse from './AddCourse.vue'
export default { export default {
components: { AddCourse },
props: { id: { type: String } },
data() { data() {
return { return {
isShowDialog: false, isShowDialog: false,
info: {} info: {}
} }
}, },
components: {
AddCourse
},
props: {
detail: {
type: Object
},
id: {
type: String
}
},
computed: { computed: {
// 列表配置 // 列表配置
tableOptions() { tableOptions() {
return { return {
data: this.detail.course.list, remote: {
httpRequest: getClassDetail,
params: { id: this.id },
beforeRequest(params) {
params['course-page'] = params.page
params['course-per-page'] = params.page_size
return params
},
callback(data) {
return data.course
}
},
columns: [ columns: [
{ label: '课程图片', width: '140', slots: 'table-img' }, { label: '课程图片', width: '140', slots: 'table-img' },
{ label: '课程名称', prop: 'course_name' }, { label: '课程名称', prop: 'course_name' },
...@@ -60,10 +56,9 @@ export default { ...@@ -60,10 +56,9 @@ export default {
} }
} }
}, },
created() {},
methods: { methods: {
success() { success() {
this.$parent.$parent.getDetail() this.$refs.list.refetch(true)
this.isShowDialog = false this.isShowDialog = false
}, },
handleAdd() { handleAdd() {
...@@ -96,7 +91,7 @@ export default { ...@@ -96,7 +91,7 @@ export default {
} }
addCourse(params).then(res => { addCourse(params).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$parent.$parent.getDetail() this.$refs.list.refetch(true)
this.$message.success('删除成功') this.$message.success('删除成功')
} }
}) })
......
...@@ -2,17 +2,8 @@ ...@@ -2,17 +2,8 @@
<!-- 学员 --> <!-- 学员 -->
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template #header-aside> <template #header-aside>
<el-button type="primary" icon="el-icon-plus" @click="addStudent" v-permission="'menu_class_add_student'" <el-button type="primary" icon="el-icon-plus" @click="addStudent" v-permission="'menu_class_add_student'">添加</el-button>
>添加</el-button <el-button type="primary" icon="el-icon-upload2" style="margin-left: 20px" @click="importStudent" v-permission="'menu_class_import_student'">导入</el-button>
>
<el-button
type="primary"
icon="el-icon-upload2"
style="margin-left: 20px"
@click="importStudent"
v-permission="'menu_class_import_student'"
>导入</el-button
>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button> <el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button>
...@@ -22,30 +13,34 @@ ...@@ -22,30 +13,34 @@
</template> </template>
<script> <script>
import { addStudents } from '../api' import { addStudents, getClassDetail } from '../api'
import AddStudent from './AddStudent.vue' import AddStudent from './AddStudent.vue'
export default { export default {
data() {
return {
isShowDialog: false
}
},
components: { components: {
AddStudent AddStudent
}, },
props: { props: { id: { type: String } },
id: { data() {
type: String return {
}, isShowDialog: false
detail: {
type: Object
} }
}, },
computed: { computed: {
// 列表配置 // 列表配置
tableOptions() { tableOptions() {
return { return {
data: this.detail.student.list, remote: {
httpRequest: getClassDetail,
params: { id: this.id },
beforeRequest(params) {
params['student-page'] = params.page
params['student-per-page'] = params.page_size
return params
},
callback(data) {
return data.student
}
},
columns: [ columns: [
{ label: '姓名', align: 'center', prop: 'personal_name' }, { label: '姓名', align: 'center', prop: 'personal_name' },
{ label: '学号', align: 'center', prop: 'sno' }, { label: '学号', align: 'center', prop: 'sno' },
...@@ -58,18 +53,13 @@ export default { ...@@ -58,18 +53,13 @@ export default {
}, },
methods: { methods: {
success() { success() {
this.$parent.$parent.getDetail() this.$refs.list.refetch(true)
}, },
addStudent() { addStudent() {
this.isShowDialog = true this.isShowDialog = true
}, },
importStudent() { importStudent() {
this.$router.push({ this.$router.push({ name: 'ImportStudent', query: { id: this.id } })
name: 'ImportStudent',
query: {
id: this.id
}
})
}, },
// 删除 // 删除
onRemove(row) { onRemove(row) {
...@@ -91,7 +81,7 @@ export default { ...@@ -91,7 +81,7 @@ export default {
// 删除学员 // 删除学员
addStudents(params).then(res => { addStudents(params).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$parent.$parent.getDetail() this.success()
this.$message({ type: 'success', message: '删除成功' }) this.$message({ type: 'success', message: '删除成功' })
} }
}) })
......
<template> <template>
<app-list v-bind="tableOptions" ref="list"> <app-list v-bind="tableOptions" ref="list">
<template #header-aside> <template #header-aside>
<el-button type="primary" icon="el-icon-plus" @click="addTeacher" v-permission="'menu_class_add_teacher'" <el-button type="primary" icon="el-icon-plus" @click="addTeacher" v-permission="'menu_class_add_teacher'">添加</el-button>
>添加</el-button
>
</template> </template>
<template v-slot:table-x="{ row }"> <template v-slot:table-x="{ row }">
<el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button> <el-button @click="onRemove(row)" type="danger" size="mini" plain>删除</el-button>
...@@ -13,31 +11,33 @@ ...@@ -13,31 +11,33 @@
</template> </template>
<script> <script>
import { addTeachers } from '../api' import { addTeachers, getClassDetail } from '../api'
import AddTeacher from './AddTeacher.vue' import AddTeacher from './AddTeacher.vue'
export default { export default {
components: { AddTeacher },
props: { id: { type: String } },
data() { data() {
return { return {
isShowDialog: false isShowDialog: false
} }
}, },
components: {
AddTeacher
},
props: {
detail: {
type: Object
},
id: {
type: String
}
},
computed: { computed: {
// 列表配置 // 列表配置
tableOptions() { tableOptions() {
return { return {
data: this.detail.staff.list, remote: {
httpRequest: getClassDetail,
params: { id: this.id },
beforeRequest(params) {
params['staff-page'] = params.page
params['staff-per-page'] = params.page_size
return params
},
callback(data) {
return data.staff
}
},
columns: [ columns: [
{ label: '姓名', align: 'center', prop: 'personal_name' }, { label: '姓名', align: 'center', prop: 'personal_name' },
{ label: '手机号', align: 'center', prop: 'telephone' }, { label: '手机号', align: 'center', prop: 'telephone' },
...@@ -48,7 +48,7 @@ export default { ...@@ -48,7 +48,7 @@ export default {
}, },
methods: { methods: {
success() { success() {
this.$parent.$parent.getDetail() this.$refs.list.refetch(true)
}, },
addTeacher() { addTeacher() {
this.isShowDialog = true this.isShowDialog = true
...@@ -72,7 +72,7 @@ export default { ...@@ -72,7 +72,7 @@ export default {
} }
addTeachers(params).then(res => { addTeachers(params).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$parent.$parent.getDetail() this.success()
this.$message.success('删除成功') this.$message.success('删除成功')
} }
}) })
......
...@@ -4,17 +4,17 @@ ...@@ -4,17 +4,17 @@
<el-tab-pane label="班级信息"> <el-tab-pane label="班级信息">
<ClassForm :detail="detail.info" /> <ClassForm :detail="detail.info" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="课程"> <el-tab-pane label="课程" lazy>
<CourseList :detail="detail" :id="id" /> <CourseList :id="id" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="考试"> <el-tab-pane label="考试">
<class-exam :detail="detail" @update="getDetail"></class-exam> <ClassExam :detail="detail" @update="getDetail"></ClassExam>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="教师"> <el-tab-pane label="教师" lazy>
<TeachList :detail="detail" :id="id" /> <TeachList :id="id" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="学员"> <el-tab-pane label="学员" lazy>
<StudentList :detail="detail" :id="id" /> <StudentList :id="id" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<!-- 班级 --> <!-- 班级 -->
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<CourseList :detail="detail" :id="id" /> <CourseList :detail="detail" :id="id" />
</app-card> --> </app-card> -->
<!-- 考试 --> <!-- 考试 -->
<!-- <class-exam :detail="detail" @update="getDetail"></class-exam> --> <!-- <ClassExam :detail="detail" @update="getDetail"></ClassExam> -->
<!-- 教务 --> <!-- 教务 -->
<!-- <app-card title="教师"> <!-- <app-card title="教师">
<TeachList :detail="detail" :id="id" /> <TeachList :detail="detail" :id="id" />
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论