This commit is contained in:
BianLzhaoMin 2025-05-23 09:31:34 +08:00
parent 3d22070bfa
commit fae098d826
1 changed files with 93 additions and 48 deletions

View File

@ -7,7 +7,8 @@
placeholder="请输入关键字" placeholder="请输入关键字"
maxlength="100" maxlength="100"
show-word-limit show-word-limit
clearable v-no-whitespace clearable
v-no-whitespace
@keyup.enter.native="handleSearch" @keyup.enter.native="handleSearch"
/> />
</el-form-item> </el-form-item>
@ -22,7 +23,9 @@
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新建文件夹</el-button> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新建文件夹</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleDownload(null)">批量下载</el-button> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleDownload(null)">
批量下载
</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -38,12 +41,13 @@
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
@select-all="handleSelectAll" @select-all="handleSelectAll"
> >
<el-table-column <el-table-column type="selection" :selectable="isSelectable" width="55"></el-table-column>
type="selection" <el-table-column label="课件库名称" show-overflow-tooltip align="left">
:selectable="isSelectable" <template slot-scope="{ row }">
width="55"> <i class="el-icon-folder-opened" v-if="row.fileType == 1"></i>
{{ row.coursewareName }}
</template>
</el-table-column> </el-table-column>
<el-table-column label="课件库名称" prop="coursewareName" show-overflow-tooltip align="left" />
<el-table-column label="类型" prop="fileType" align="center"> <el-table-column label="类型" prop="fileType" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.fileType == 1">{{ '文件夹' }}</div> <div v-if="scope.row.fileType == 1">{{ '文件夹' }}</div>
@ -80,6 +84,7 @@
<el-button type="text" size="mini" @click="handleDownload(scope.row)" :loading="downLoading"> <el-button type="text" size="mini" @click="handleDownload(scope.row)" :loading="downLoading">
下载 下载
</el-button> </el-button>
<el-button type="text" size="mini" @click="handlePreview(scope.row)">预览</el-button>
<el-button type="text" size="mini" @click="handleMove(scope.row)">移动</el-button> <el-button type="text" size="mini" @click="handleMove(scope.row)">移动</el-button>
<el-button type="text" size="mini" @click="handleEdit(scope.row)">重命名</el-button> <el-button type="text" size="mini" @click="handleEdit(scope.row)">重命名</el-button>
<el-button type="text" size="mini" @click="handleRemark(scope.row)">备注</el-button> <el-button type="text" size="mini" @click="handleRemark(scope.row)">备注</el-button>
@ -98,7 +103,13 @@
<el-form :model="questionForm" ref="questionForm" size="small" label-width="80px" :rules="questionRules"> <el-form :model="questionForm" ref="questionForm" size="small" label-width="80px" :rules="questionRules">
<el-form-item :label="questionLabel"> <el-form-item :label="questionLabel">
<!-- 使用树下拉 --> <!-- 使用树下拉 -->
<el-input v-model="questionForm.selectedTree" placeholder="请选择位置" @focus="showTree = true" readonly v-no-whitespace/> <el-input
v-model="questionForm.selectedTree"
placeholder="请选择位置"
@focus="showTree = true"
readonly
v-no-whitespace
/>
<el-tree <el-tree
v-show="showTree" v-show="showTree"
:data="treeData" :data="treeData"
@ -113,7 +124,8 @@
<el-form-item label="课件名称" prop="coursewareName" v-if="!isMove"> <el-form-item label="课件名称" prop="coursewareName" v-if="!isMove">
<el-input <el-input
v-model="questionForm.coursewareName" v-model="questionForm.coursewareName"
maxlength="100" v-no-whitespace maxlength="100"
v-no-whitespace
show-word-limit show-word-limit
placeholder="请输入课件名称" placeholder="请输入课件名称"
clearable clearable
@ -130,26 +142,28 @@
<el-dialog :title="editAndRemark" :visible.sync="dialogVisible" width="25%"> <el-dialog :title="editAndRemark" :visible.sync="dialogVisible" width="25%">
<el-form :model="dialogForm" ref="dialogForm" size="small" label-width="80px" :rules="rules"> <el-form :model="dialogForm" ref="dialogForm" size="small" label-width="80px" :rules="rules">
<el-form-item label="旧的名称" prop="oldCoursewareName" v-if="isEdit"> <el-form-item label="旧的名称" prop="oldCoursewareName" v-if="isEdit">
<el-input v-model="dialogForm.oldCoursewareName" disabled v-no-whitespace/> <el-input v-model="dialogForm.oldCoursewareName" disabled v-no-whitespace />
</el-form-item> </el-form-item>
<el-form-item label="新的名称" prop="coursewareName" v-if="isEdit"> <el-form-item label="新的名称" prop="coursewareName" v-if="isEdit">
<el-input <el-input
v-model="dialogForm.coursewareName" v-model="dialogForm.coursewareName"
maxlength="100" maxlength="100"
show-word-limit v-no-whitespace show-word-limit
v-no-whitespace
placeholder="请输入文件名" placeholder="请输入文件名"
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item label="文件名称" prop="oldCoursewareName" v-if="isRemark"> <el-form-item label="文件名称" prop="oldCoursewareName" v-if="isRemark">
<el-input v-model="dialogForm.oldCoursewareName" disabled v-no-whitespace/> <el-input v-model="dialogForm.oldCoursewareName" disabled v-no-whitespace />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="marl" v-if="isRemark"> <el-form-item label="备注" prop="marl" v-if="isRemark">
<el-input <el-input
type="textarea" type="textarea"
v-model="dialogForm.marl" v-model="dialogForm.marl"
placeholder="请输入备注" placeholder="请输入备注"
clearable v-no-whitespace clearable
v-no-whitespace
maxlength="255" maxlength="255"
show-word-limit show-word-limit
rows="5" rows="5"
@ -163,12 +177,23 @@
</el-dialog> </el-dialog>
<!-- 上传弹框 --> <!-- 上传弹框 -->
<el-dialog ref="upload" title="上传文件" :visible.sync="uploadVisible" width="55%" style="height: 75vh" <el-dialog
:destroy-on-close="true" ref="upload"
title="上传文件"
:visible.sync="uploadVisible"
width="55%"
style="height: 75vh"
:destroy-on-close="true"
> >
<div style="height: 50vh"> <div style="height: 50vh">
<mini-file-upload file-url="" ref="miniUpload" parent-id="" :params-data="row" v-on:uploadSuccess="uploadSuccess" /> <mini-file-upload
<div style="height: 5vh; position: absolute;left: 82%;top: 87%"> file-url=""
ref="miniUpload"
parent-id=""
:params-data="row"
v-on:uploadSuccess="uploadSuccess"
/>
<div style="height: 5vh; position: absolute; left: 82%; top: 87%">
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="startUpload" v-preventReClick="5000"> </el-button> <el-button size="small" type="primary" @click="startUpload" v-preventReClick="5000"> </el-button>
<el-button size="small" @click="uploadVisible = false"> </el-button> <el-button size="small" @click="uploadVisible = false"> </el-button>
@ -176,6 +201,12 @@
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="文件查看" :visible.sync="documentPreview" width="80%" top="5vh" append-to-body>
<div style="width: 100%; height: 720px">
<bns-kkFile-preview :items="kkFilePreview"></bns-kkFile-preview>
</div>
</el-dialog>
</div> </div>
</template> </template>
@ -187,17 +218,25 @@ import {
operFolderOrFile, operFolderOrFile,
uploadFiles, uploadFiles,
downLoadFile, downLoadFile,
downLoadCoursewareFile downLoadCoursewareFile,
} from '@/api/educationalTraining/resourceAdministration' } from '@/api/educationalTraining/resourceAdministration'
import axios from 'axios' import axios from 'axios'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import { download } from '@/utils/request' import { download } from '@/utils/request'
import MiniFileUpload from '@/views/educationalTraining/resourceAdministration/coursewareStore/miniFileUpload.vue' import MiniFileUpload from '@/views/educationalTraining/resourceAdministration/coursewareStore/miniFileUpload.vue'
import bnsKkFilePreview from '@/components/pro-tabs/bns-kkFile-preview.vue'
export default { export default {
components: { MiniFileUpload }, components: { MiniFileUpload, bnsKkFilePreview },
data() { data() {
return { return {
documentPreview: false, //
kkFilePreview: {
filePreviewUrl: '',
fileName: '',
showDownloadButton: false,
}, //
fullscreenLoading: false, // loading fullscreenLoading: false, // loading
uploadVisible: false, // uploadVisible: false, //
fileList: [], // fileList: [], //
@ -206,7 +245,7 @@ export default {
// //
queryParams: { queryParams: {
// //
keyWord: '' keyWord: '',
}, },
// //
tableData: [], tableData: [],
@ -216,20 +255,20 @@ export default {
dialogForm: { dialogForm: {
coursewareName: '', // coursewareName: '', //
oldCoursewareName: '', // oldCoursewareName: '', //
marl: '' // marl: '', //
}, },
isEdit: false, // isEdit: false, //
isRemark: false, // isRemark: false, //
isMove: false, // isMove: false, //
// //
rules: { rules: {
coursewareName: [{ required: true, message: '请输入课件名', trigger: 'blur' }] coursewareName: [{ required: true, message: '请输入课件名', trigger: 'blur' }],
}, },
showTree: false, // showTree: false, //
treeData: [], // treeData: [], //
defaultProps: { defaultProps: {
children: 'children', children: 'children',
label: 'coursewareName' label: 'coursewareName',
}, },
// //
questionTitle: '新建题库', // questionTitle: '新建题库', //
@ -237,52 +276,51 @@ export default {
questionForm: { questionForm: {
coursewareName: '', // coursewareName: '', //
selectedTree: '', // selectedTree: '', //
parentId: 0 // id parentId: 0, // id
}, },
questionRules: { questionRules: {
coursewareName: [{ required: true, message: '请输入题库名称', trigger: 'blur' }] coursewareName: [{ required: true, message: '请输入题库名称', trigger: 'blur' }],
}, },
questionLabel: '位置', questionLabel: '位置',
row: {}, // row: {}, //
editAndRemark: '重命名', // editAndRemark: '重命名', //
downLoading: false, // loading downLoading: false, // loading
coursewareIds: [], // id coursewareIds: [], // id
isSelect:false isSelect: false,
} }
}, },
created() { created() {
this.getList() this.getList()
}, },
mounted() { mounted() {},
},
methods: { methods: {
isSelectable(row, index) { isSelectable(row, index) {
return ![1, 2].includes(Number(row.fileType)); return ![1, 2].includes(Number(row.fileType))
}, },
handleSelectAll() { handleSelectAll() {
if (!this.isSelect){ if (!this.isSelect) {
this.coursewareIds = this.getCoursewareIds(this.tableData); this.coursewareIds = this.getCoursewareIds(this.tableData)
// //
this.isSelect = true this.isSelect = true
}else{ } else {
this.$refs.table.clearSelection() this.$refs.table.clearSelection()
this.coursewareIds = [] this.coursewareIds = []
this.isSelect = false this.isSelect = false
} }
}, },
getCoursewareIds(data) { getCoursewareIds(data) {
let ids = []; let ids = []
data.forEach(node => { data.forEach(node => {
console.log('🚀 ~ getCoursewareIds ~ node:', node) console.log('🚀 ~ getCoursewareIds ~ node:', node)
if (node.coursewareId && Number(node.fileType) !== 1 && Number(node.fileType) !== 2) { if (node.coursewareId && Number(node.fileType) !== 1 && Number(node.fileType) !== 2) {
this.$refs.table.toggleRowSelection(node, true); this.$refs.table.toggleRowSelection(node, true)
ids.push(node.coursewareId); ids.push(node.coursewareId)
} }
if (node.children && node.children.length > 0) { if (node.children && node.children.length > 0) {
ids = ids.concat(this.getCoursewareIds(node.children)); ids = ids.concat(this.getCoursewareIds(node.children))
} }
}); })
return ids; return ids
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
this.coursewareIds = val.map(item => item.coursewareId).join(',') this.coursewareIds = val.map(item => item.coursewareId).join(',')
@ -408,7 +446,7 @@ export default {
// //
const params = { const params = {
coursewareId: this.coursewareIds, coursewareId: this.coursewareIds,
fileType: 1 fileType: 1,
} }
console.log('🚀 ~ handleDownload ~ params:', params) console.log('🚀 ~ handleDownload ~ params:', params)
download('/exam/coursewareLibrary/downLoadFile', params, '课件库.zip').then(res => { download('/exam/coursewareLibrary/downLoadFile', params, '课件库.zip').then(res => {
@ -421,7 +459,7 @@ export default {
} }
const params = { const params = {
coursewareId: row.coursewareId, coursewareId: row.coursewareId,
fileType: row.fileType fileType: row.fileType,
} }
// dev-api/exam/coursewareLibrary/downLoadFile // dev-api/exam/coursewareLibrary/downLoadFile
// location.origin // location.origin
@ -534,14 +572,14 @@ export default {
this.$confirm('是否确认删除?', '提示', { this.$confirm('是否确认删除?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning',
}).then(() => { }).then(() => {
// //
operFolderOrFile({ operFolderOrFile({
operType: 3, operType: 3,
coursewareId: row.coursewareId, coursewareId: row.coursewareId,
fileType: row.fileType, fileType: row.fileType,
parentId: row.parentId parentId: row.parentId,
}).then(res => { }).then(res => {
console.log('🚀 ~ handleDelete ~ res:', res) console.log('🚀 ~ handleDelete ~ res:', res)
// //
@ -564,7 +602,7 @@ export default {
coursewareId: this.row.coursewareId, coursewareId: this.row.coursewareId,
fileType: this.row.fileType, fileType: this.row.fileType,
coursewareName: this.dialogForm.coursewareName, coursewareName: this.dialogForm.coursewareName,
parentId: this.row.parentId parentId: this.row.parentId,
}).then(res => { }).then(res => {
console.log('🚀 ~ handleSave ~ res:', res) console.log('🚀 ~ handleSave ~ res:', res)
// //
@ -578,7 +616,7 @@ export default {
operType: 2, operType: 2,
coursewareId: this.row.coursewareId, coursewareId: this.row.coursewareId,
fileType: this.row.fileType, fileType: this.row.fileType,
marl: this.dialogForm.marl marl: this.dialogForm.marl,
}).then(res => { }).then(res => {
console.log('🚀 ~ handleSave ~ res:', res) console.log('🚀 ~ handleSave ~ res:', res)
// //
@ -595,7 +633,7 @@ export default {
const params = { const params = {
coursewareId: item.coursewareId, coursewareId: item.coursewareId,
fileType: item.fileType, fileType: item.fileType,
type: item.type type: item.type,
} }
const res = await getCoursewareLibraryTree(params) const res = await getCoursewareLibraryTree(params)
console.log('🚀 ~ getCoursewareLibraryTree ~ res-位置树:', res) console.log('🚀 ~ getCoursewareLibraryTree ~ res-位置树:', res)
@ -637,7 +675,7 @@ export default {
operType: 4, operType: 4,
coursewareId: this.row.coursewareId, coursewareId: this.row.coursewareId,
fileType: this.row.fileType, fileType: this.row.fileType,
parentId: this.questionForm.parentId parentId: this.questionForm.parentId,
}).then(res => { }).then(res => {
console.log('🚀 ~ handleQuestion ~ res:', res) console.log('🚀 ~ handleQuestion ~ res:', res)
// //
@ -664,8 +702,15 @@ export default {
uploadSuccess() { uploadSuccess() {
this.uploadVisible = false this.uploadVisible = false
this.getList() this.getList()
} },
}
//
handlePreview(row) {
this.kkFilePreview.filePreviewUrl = row.filePath
this.kkFilePreview.fileName = row.coursewareName
this.documentPreview = true
},
},
} }
</script> </script>