2022-03-16 14:39:54 +08:00

217 lines
6.0 KiB
Vue

<template>
<a-card :bordered="false" :loading="loading">
<div class="table-page-search-wrapper">
<SearchCom
:form="queryParam"
:list="queryOptions"
@search="handleRefresh"
@reset="
() => {
queryParam = {};
handleRefresh();
}
"
></SearchCom>
</div>
<br />
<s-table
ref="table"
:pageSize="5"
:columns="columns"
:data="loadData"
:rowKey="record => record.id"
>
<span slot="index" slot-scope="text, record, index">
{{ index + 1 }}
</span>
<template slot="courseName" slot-scope="text, record">
<a-button @click="handlerDetail(record)" type="link">{{ record.courseName }}</a-button>
</template>
<span slot="trainType" slot-scope="text, record">
<a-tag v-if="record.trainType === 1" color="red">必修课</a-tag>
<a-tag v-if="record.trainType === 2" color="blue">选修课</a-tag>
</span>
<span slot="status" slot-scope="text, record">
<a-tag v-if="record.status === 1" color="red">未开始</a-tag>
<a-tag v-if="record.status === 2" color="blue">进行中</a-tag>
<a-tag v-if="record.status === 3" color="green">已完成</a-tag>
</span>
<template slot="schedule" slot-scope="text, record">
<a-progress v-if="record.schedule || record.schedule === 0" :percent="record.schedule" />
</template>
<template slot="learnHours" slot-scope="text, record">{{ record.learnHours }}小时</template>
<span slot="action" slot-scope="text, record">
<a-popconfirm
v-if="record.status === 1"
:title="`确定要添加${record.name}课程吗?`"
ok-text="添加"
cancel-text="取消"
@confirm="handlerAddCourse(record)"
>
<a>添加课程</a>
</a-popconfirm>
<a v-if="record.status === 2" @click="handlerContinue(record)">继续学习</a>
<a v-if="record.status === 3">已完成学习</a>
</span>
</s-table>
<MycourseDetail ref="aycourseDetail"></MycourseDetail>
</a-card>
</template>
<script>
import moment from 'moment'
import { reqMyCourseList } from '@/api/mycourse/index'
import { dictGet } from '@/api/project/project'
import { dictionaryDropDown } from '@/api/sys/dictionaryItem'
import { dictToTree } from '@/utils/util'
import { STable, SearchCom } from '@/components'
import MycourseDetail from './MycourseDetail.vue'
export default {
components: {
STable,
SearchCom,
MycourseDetail
// UserForm,
// UserRoleForm
},
data () {
return {
loading: true,
queryParam: {
name: '', // 课程分类
trainWay: ''
},
queryOptions: [
{ type: 'input', placeholder: '课程名称', key: 'name' },
{ type: 'select', placeholder: '课程类别', key: 'trainWay', options: [] },
{
type: 'select',
placeholder: '课程状态',
key: 'status',
options: [
{ name: '未开始', value: 1, id: 1 },
{ name: '进行中', value: 2, id: 2 },
{ name: '已完成', value: 3, id: 3 },
{ name: '已结束', value: 4, id: 4 }
]
}
],
// 表头
columns: [
{
title: '序号',
width: '80px',
scopedSlots: { customRender: 'index' },
align: 'center'
},
{
title: '课程名称',
dataIndex: 'name',
scopedSlots: { customRender: 'name' }
},
{
title: '课程类别',
dataIndex: 'trainType',
scopedSlots: { customRender: 'trainType' }
},
{
title: '开始时间',
dataIndex: 'startDate',
customRender: text => {
if (!text) return '-'
return moment(text).format('YYYY-MM-DD')
}
},
{
title: '课程状态',
dataIndex: 'status',
scopedSlots: { customRender: 'status' },
width: '120px'
},
{
title: '课程进度',
dataIndex: 'schedule',
scopedSlots: { customRender: 'schedule' },
width: '180px'
},
{
title: '已休学时',
dataIndex: 'learnHours',
scopedSlots: { customRender: 'learnHours' }
}
],
// 加载数据方法 必须为 Promise 对象
loadData: parameter => {
const { person } = this.$store.state.user
const params = { ...parameter, ...this.queryParam, personId: person.id }
return reqMyCourseList(params).then(res => {
return res
})
},
selectedRows: [], // 选中行的数据
options: {}
}
},
created () {
this.dictionaryDropDown()
this.columns.push({
title: '操作',
width: '150px',
dataIndex: 'action',
scopedSlots: { customRender: 'action' }
})
},
methods: {
// 点击详情
handlerDetail () {
this.$refs.aycourseDetail.visible = true
},
// 获取数据词典
dictionaryDropDown () {
dictGet({ type: 1 }).then(res => {
this.queryOptions[1].options = res.data
this.loading = false
})
},
classificationChange (value) {
this.queryParam.classification = value
},
// 获取列表
handleRefresh () {
this.$refs.table.refresh()
},
handleOk () {
this.$refs.table.refresh()
},
// 添加课程
handlerAddCourse (row) {
console.log('row', row)
const _this = this
this.$emit('add', {
row: row,
callback: function () {
_this.$refs.table.refresh()
}
})
},
// 继续学习
handlerContinue (row) {
// this.$emit('continue', { row: row })
this.$router.push({
path: '/mycourse/courseLearn',
query: { courseId: row.id }
})
}
}
}
</script>
<style lang="less" scoped>
.table-operator {
margin-bottom: 18px;
}
button {
margin-right: 8px;
}
</style>