<template>
|
<div class="warp">
|
<div class="search">
|
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
|
<el-form-item label="主题">
|
<el-input v-model="searchForm.introduction" size="small" placeholder="主题内容" clearable
|
@clear="page" @input="page"></el-input>
|
</el-form-item>
|
<el-form-item label="班级">
|
<el-select v-model="searchForm.classId" size="small" clearable @clear="page" @change="page" placeholder="班级">
|
<el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="科目">
|
<el-select v-model="searchForm.subjectId" size="small" clearable @clear="page" @change="page" placeholder="科目">
|
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="文件类型">
|
<el-select v-model="searchForm.contentType" size="small" clearable @clear="page" @change="page" placeholder="文件类型">
|
<el-option
|
v-for="item in contentTypeList"
|
:key="item.value"
|
:label="item.name"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="page" size="small">查询</el-button>
|
</el-form-item>
|
</el-form>
|
<div>
|
<el-button type="primary" @click="handlerAdd" size="small">添加</el-button>
|
<el-popconfirm title="确认批量删除吗?" @confirm="batchRemove">
|
<el-button slot="reference" type="danger" size="small" style="margin-left: 5px">删除</el-button>
|
</el-popconfirm>
|
</div>
|
</div>
|
|
<el-table :data="tableData" border @selection-change="handleSelectionChange" style="width: 100%">
|
<el-table-column type="selection" width="55">
|
</el-table-column>
|
<el-table-column fixed prop="introduction" label="主题简介">
|
</el-table-column>
|
<el-table-column prop="className" label="班级">
|
</el-table-column>
|
<el-table-column prop="typeName" label="科目">
|
</el-table-column>
|
<el-table-column prop="contentType" :formatter="typeFormatter" label="文件类型">
|
</el-table-column>
|
<el-table-column label="文件内容" width="240">
|
<template slot-scope="scope">
|
<video controls v-if="scope.row.contentType === 'video'" :src="'/api/files/' + scope.row.contentUrl.url"
|
class="showContent"/>
|
<el-image v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
|
class="showContent"></el-image>
|
<!-- <img v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
|
class="showContent" /> -->
|
<audio controls v-if="scope.row.contentType === 'audio'"
|
class="showContent">
|
<source :src="'/api/files/' + scope.row.contentUrl.url">
|
</audio>
|
<el-link type="primary"
|
v-if="scope.row.contentType !== 'video' && scope.row.contentType !== 'audio' && scope.row.contentType !== 'img'"
|
class="showContent"
|
@click="check(scope.row)">点击查看
|
</el-link>
|
</template>
|
</el-table-column>
|
<el-table-column prop="attachment" label="附件">
|
<template slot-scope="scope">
|
<div v-for="item in scope.row.attachment" :key="item.url">
|
<el-link type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name">
|
{{ item.name }}
|
</el-link>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="visitUrl" label="访问链接">
|
<template slot-scope="scope">
|
<div v-if="scope.row.contentType === 'video'">
|
{{ scope.row.visitUrl }}
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column fixed="right" label="操作" width="140">
|
<template slot-scope="scope">
|
<el-button @click="handleUpdate(scope.row)" type="primary" size="small"
|
style="margin-right: 5px">修改
|
</el-button>
|
<el-popconfirm :title="getTitle(scope.row.typeName)" @confirm="remove(scope.row.id)">
|
<el-button slot="reference" type="danger" size="small">删除</el-button>
|
</el-popconfirm>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
<pagination v-show="total > 0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
|
@pagination="page"/>
|
|
<el-dialog :title="dialogTitle" :visible.sync="open" width="600px" :close-on-click-modal="false"
|
:before-close="handleClose">
|
<el-form label-position="left" label-width="120px" ref="form" :rules="rules" :model="form">
|
<el-form-item label="主题简介" prop="introduction">
|
<el-input v-model="form.introduction" placeholder="主题内容"></el-input>
|
</el-form-item>
|
<el-form-item label="班级" prop="classId">
|
<el-select
|
v-model="form.classId"
|
placeholder="班级"
|
clearable
|
>
|
<el-option v-for="item in classesIds" :key="item.id" :label="item.className" :value="item.id"/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="科目" prop="subjectId">
|
<el-select v-model="form.subjectId" placeholder="科目">
|
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="文件类型" prop="contentType">
|
<el-select v-model="form.contentType" placeholder="不同类型的文件阅览方式不同,多余文件请以附件形式上传" @change="fileChange">
|
<el-option
|
v-for="item in contentTypeList"
|
:key="item.value"
|
:label="item.name"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="上传文件(一个)" prop="contentUrl">
|
<upload v-show="form.contentType" ref="upload" :fileUrl="form.contentUrl" :fileType="form.contentType"
|
:fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile"/>
|
</el-form-item>
|
<el-form-item label="附件(最多3个)" prop="attachment">
|
<upload :fileSizeLimitM="1024" :uploadNum="3" :fileUrl="form.attachment"
|
@getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile"/>
|
</el-form-item>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="open = false">取 消</el-button>
|
<el-button type="primary" @click="handlerSubmit">保 存</el-button>
|
</span>
|
</el-dialog>
|
|
<el-dialog title="PDF查看" :visible.sync="pdfDialog" width="80%" :before-close="closePdfDialog">
|
<vue-office-pdf :src="pdf" @rendered="rendered" style="min-height: 400px; max-height: 800px;"/>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import Pagination from '@/components/Pagination'
|
import EducationResourceAPI from '@/api/educationResource'
|
import SubjectAPI from '@/api/subject'
|
import Upload from '@/components/UploadC'
|
import { myClasses } from '@/api/classes'
|
|
import VueOfficePdf from '@vue-office/pdf'
|
|
export default {
|
name: 'type',
|
components: { Upload, Pagination, VueOfficePdf },
|
computed: {
|
fileContentUrl: () => {
|
return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : []
|
}
|
},
|
data () {
|
return {
|
pdf: '',
|
dialogTitle: '添加学习内容',
|
ids: [],
|
typeList: [],
|
contentTypeList: [
|
{ name: '视频', value: 'video' },
|
{ name: '图片', value: 'img' },
|
{ name: '音频', value: 'audio' },
|
{ name: 'PDF', value: 'pdf' },
|
{ name: 'EXCEL', value: 'excel' },
|
{ name: 'WORD', value: 'word' },
|
{ name: 'PPT', value: 'ppt' }
|
],
|
classesIds: [],
|
searchForm: {
|
pageNum: 1,
|
pageSize: 5,
|
subjectId: null,
|
introduction: null,
|
contentType: null
|
},
|
total: 0,
|
tableData: [],
|
open: false,
|
pdfDialog: false,
|
form: {
|
contentType: 'video',
|
introduction: '',
|
belongType: 2,
|
classId: null,
|
contentUrl: [],
|
attachment: [],
|
temp: []
|
},
|
rules: {
|
contentUrl: [
|
{ required: true, message: '请上传文件', trigger: 'blur' }
|
],
|
introduction: [
|
{ required: true, message: '请输入主题内容', trigger: 'blur' }
|
],
|
classId: [
|
{ required: true, message: '请选择班级', trigger: 'blur' }
|
],
|
subjectId: [
|
{ required: true, message: '请选择科目', trigger: 'blur' }
|
],
|
belongType: [
|
{ required: true, message: '请选择学习分类', trigger: 'change' }
|
],
|
contentType: [
|
{ required: true, message: '请选择文件类型', trigger: 'change' }
|
]
|
}
|
}
|
},
|
methods: {
|
// 获取我的班级
|
getClasses () {
|
myClasses().then(re => {
|
this.classesIds = re.data.data
|
})
|
},
|
check (row) {
|
// this.pdf = url
|
// this.pdfDialog = true
|
window.open(row.visitUrl)
|
},
|
closePdfDialog () {
|
this.pdfDialog = false
|
},
|
rendered () {
|
|
},
|
fileChange () {
|
this.form.contentUrl = []
|
},
|
handleSelectionChange (val) {
|
this.ids = val.map(item => item.id)
|
},
|
typeFormatter (row) {
|
if (row.contentType === 'video') {
|
return '视频'
|
}
|
if (row.contentType === 'img') {
|
return '图片'
|
}
|
if (row.contentType === 'audio') {
|
return '音频'
|
}
|
if (row.contentType === 'pdf') {
|
return 'PDF'
|
}
|
if (row.contentType === 'excel') {
|
return 'EXCEL'
|
}
|
if (row.contentType === 'word') {
|
return 'WORD'
|
}
|
if (row.contentType === 'ppt') {
|
return 'PPT'
|
}
|
},
|
clearFile () {
|
this.form.contentUrl = []
|
this.$refs.upload.clearFile()
|
},
|
removeFile () {
|
this.form.contentUrl = []
|
},
|
removeAttachmentFile (fileList, fileName) {
|
this.form.attachment = fileList.filter(item => item.name !== fileName)
|
},
|
getUploadAttachmentUrl (uploadData) {
|
this.form.attachment = uploadData
|
},
|
getUploadUrl (uploadData) {
|
this.form.contentUrl = uploadData
|
},
|
remove (id) {
|
EducationResourceAPI.remove([id]).then(res => {
|
if (res.code === 1) {
|
this.$message.success('删除成功')
|
this.page()
|
}
|
})
|
},
|
batchRemove () {
|
if (this.ids.length < 1) {
|
this.$message.warning('请选择要删除的数据')
|
} else {
|
EducationResourceAPI.remove(this.ids).then(res => {
|
if (res.code === 1) {
|
this.$message.success('删除成功')
|
this.ids = []
|
}
|
this.page()
|
})
|
}
|
},
|
getTitle (typeName) {
|
return '确定要删除' + typeName + '这个文件吗?'
|
},
|
handlerSubmit () {
|
this.$refs['form'].validate((valid) => {
|
if (valid) {
|
const temp = JSON.parse(JSON.stringify(this.form))
|
// this.form.contentUrl = this.form.contentUrl[0]
|
temp.contentUrl = temp.contentUrl[0]
|
if (temp.id) {
|
EducationResourceAPI.update(temp).then(res => {
|
if (res.code === 1) {
|
this.$message.success('修改成功')
|
this.open = false
|
this.page()
|
}
|
})
|
} else {
|
EducationResourceAPI.add(temp).then(res => {
|
if (res.code === 1) {
|
this.$message.success('添加成功')
|
this.open = false
|
this.page()
|
}
|
})
|
}
|
}
|
})
|
},
|
resetForm () {
|
this.form = {
|
contentType: 'video',
|
introduction: '',
|
belongType: 2,
|
contentUrl: [],
|
attachment: [],
|
temp: []
|
}
|
},
|
handleClose () {
|
this.open = false
|
this.resetForm()
|
},
|
handlerAdd () {
|
this.resetForm()
|
this.open = true
|
this.dialogTitle = '添加学习内容'
|
},
|
page () {
|
EducationResourceAPI.page(this.searchForm).then(res => {
|
if (res.code === 1) {
|
this.tableData = res.data
|
this.total = res.total
|
}
|
})
|
},
|
handleUpdate (row) {
|
this.form.id = row.id
|
this.form.contentType = row.contentType
|
this.form.classesId = row.classesId
|
this.form.subjectId = row.subjectId
|
this.form.contentUrl = [row.contentUrl] || []
|
this.form.attachment = row.attachment || []
|
this.form.introduction = row.introduction
|
this.form.belongType = row.belongType
|
this.dialogTitle = '修改学习内容'
|
this.open = true
|
}
|
},
|
mounted () {
|
this.page()
|
this.getClasses()
|
SubjectAPI.list().then(res => {
|
if (res.code === 1) {
|
this.typeList = res.data
|
}
|
})
|
}
|
}
|
</script>
|
|
<style scoped>
|
.showContent {
|
width: 100%;
|
min-height: 80px;
|
object-fit: contain;
|
}
|
|
.warp {
|
margin: 40px 10px;
|
}
|
|
.search {
|
margin-top: 10px;
|
}
|
|
::v-deep .el-image__error {
|
position: absolute;
|
top: 0;
|
bottom: 0;
|
}
|
</style>
|