From 246f7b6fd81cf2ba620b8f9bf7cf24b61d7cf521 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期三, 17 七月 2024 16:38:54 +0800 Subject: [PATCH] bug修改 --- src/views/onlineEducation/offlineEducation/components/recordDialog.vue | 2 src/views/onlineEducation/courseManage/components/courseManageDialog.vue | 2 src/views/onlineEducation/groupExams/components/examChooseStudent.vue | 2 src/views/onlineEducation/courseManage/courseResource/index.vue | 44 +++ src/views/onlineEducation/systemManage/user/index.vue | 7 src/views/onlineEducation/systemManage/banner/components/bannerDialog.vue | 2 src/views/onlineEducation/classHourBatch/components/batchDialog.vue | 2 src/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue | 14 src/views/onlineEducation/systemManage/company/components/companyDialog.vue | 34 ++- src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue | 30 ++ src/views/onlineEducation/systemManage/user/components/userDialog.vue | 161 +++++++++++---- src/views/onlineEducation/classHourBatch/components/classHourChange.vue | 2 src/views/onlineEducation/classHourBatch/components/chooseStudent.vue | 2 src/components/scrollSelect/index.vue | 8 src/views/onlineEducation/questionBankManagement/components/questionBankDialog.vue | 6 src/views/onlineEducation/people/components/stuDialog.vue | 2 src/views/onlineEducation/systemManage/company/index.vue | 9 src/views/onlineEducation/courseManage/index.vue | 78 +++++-- src/views/onlineEducation/courseManage/courseChapters/components/chapterDialog.vue | 4 src/views/onlineEducation/courseManage/courseChapters/index.vue | 22 ++ src/views/onlineEducation/courseManage/courseResource/componets/viewVideo.vue | 135 +++++++++++++ src/views/onlineEducation/groupExams/components/examDialog.vue | 5 src/views/onlineEducation/courseManage/courseChapters/components/chooseResource.vue | 11 + src/views/onlineEducation/groupExams/index.vue | 4 src/views/components/upload.vue | 7 src/views/onlineEducation/systemManage/courseClassification/components/courseClassDialog.vue | 5 26 files changed, 485 insertions(+), 115 deletions(-) diff --git a/src/components/scrollSelect/index.vue b/src/components/scrollSelect/index.vue index 2be32c7..496a084 100644 --- a/src/components/scrollSelect/index.vue +++ b/src/components/scrollSelect/index.vue @@ -1,7 +1,7 @@ <template> <el-select v-if="isMounted" v-bind="$attrs" :remote-method="remoteMethod" @change="selectValueUser"> <div v-infinite-scroll="loadMore" style="overflow: hidden"> - <el-option v-for="dict in list" :key="dict.id" :label="dict.name" :value="dict.name" /> + <el-option v-for="dict in list" :key="dict.id" :label="dict.username" :value="dict.username" /> </div> </el-select> </template> @@ -27,7 +27,7 @@ const list = ref([ { id: '', - name: '无上级账号' + username: '无上级账号' } ]) const queryFrom = ref({ @@ -46,7 +46,7 @@ const emit = defineEmits(["getval"]); const selectValueUser = (val) => { list.value.forEach(item => { - if(item.name === val){ + if(item.username === val){ emit('getval',item.id) } }) @@ -69,7 +69,7 @@ props.methods(queryFrom.value).then(res => { const obj = { id: '', - name: '无上级账号' + username: '无上级账号' } if(type === 'change'){ list.value = res.data.list diff --git a/src/views/components/upload.vue b/src/views/components/upload.vue index efb2c60..e1563e6 100644 --- a/src/views/components/upload.vue +++ b/src/views/components/upload.vue @@ -1,6 +1,6 @@ <template> - <div class="greetings"> + <div class="greetings" v-loading="loading"> <el-upload accept=".mp4, .mp3, .xls, .xlsx, .doc, .docx, .ppt, .pptx, .pdf" :on-change="handleFileChange" :on-preview="view" :auto-upload="false" ref="uploadfileComponent" :limit="1" :on-exceed="handleExceed" v-model:file-list="fileList"> <template #trigger> <el-button type="primary">选择文件</el-button> @@ -39,6 +39,7 @@ const fileList=ref([]) const uploadfileComponent=ref(null) const emit = defineEmits(["getFile"]); +const loading = ref(false) const props = defineProps({ responseType: { type: Number, @@ -290,6 +291,7 @@ }); return false } + const filetype = container.file.raw.name.split(".").pop(); const extension = (filetype === "mp4" || filetype ==="mp3" || filetype ==="xls" || filetype === "xlsx" || filetype ==="doc" || filetype ==="docx" || filetype === "ppt" || filetype ==="pptx" || filetype ==="pdf"); if (!extension ) { @@ -317,7 +319,7 @@ return false; } } - + loading.value = true //文件分片 const chunkList=createFileChunk(container.file.raw) console.log('文件分了多少片:',chunkList.length) @@ -339,6 +341,7 @@ })) uploadChunks(fileChunkList) + loading.value = false } //文件分片 diff --git a/src/views/onlineEducation/classHourBatch/components/batchDialog.vue b/src/views/onlineEducation/classHourBatch/components/batchDialog.vue index 1ae956a..0359406 100644 --- a/src/views/onlineEducation/classHourBatch/components/batchDialog.vue +++ b/src/views/onlineEducation/classHourBatch/components/batchDialog.vue @@ -5,6 +5,8 @@ :title="title" width="500px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="所属公司:" prop="companyName" v-if="!state.isAdmin"> diff --git a/src/views/onlineEducation/classHourBatch/components/chooseStudent.vue b/src/views/onlineEducation/classHourBatch/components/chooseStudent.vue index f7752af..eaa7300 100644 --- a/src/views/onlineEducation/classHourBatch/components/chooseStudent.vue +++ b/src/views/onlineEducation/classHourBatch/components/chooseStudent.vue @@ -5,6 +5,8 @@ :title="title" width="50%" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <!-- 表格数据 --> <el-table diff --git a/src/views/onlineEducation/classHourBatch/components/classHourChange.vue b/src/views/onlineEducation/classHourBatch/components/classHourChange.vue index 8d2c5fe..dacbaa9 100644 --- a/src/views/onlineEducation/classHourBatch/components/classHourChange.vue +++ b/src/views/onlineEducation/classHourBatch/components/classHourChange.vue @@ -5,6 +5,8 @@ :title="state.title" width="50%" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-table v-loading="state.loading" :data="state.dataList" :border="true"> <el-table-column label="创建时间" prop="createTime" align="center" width="180" /> diff --git a/src/views/onlineEducation/courseManage/components/courseManageDialog.vue b/src/views/onlineEducation/courseManage/components/courseManageDialog.vue index 6b78067..b679102 100644 --- a/src/views/onlineEducation/courseManage/components/courseManageDialog.vue +++ b/src/views/onlineEducation/courseManage/components/courseManageDialog.vue @@ -5,6 +5,8 @@ :title="title" width="500px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="课程名称:" prop="name"> diff --git a/src/views/onlineEducation/courseManage/courseChapters/components/chapterDialog.vue b/src/views/onlineEducation/courseManage/courseChapters/components/chapterDialog.vue index 3bc2552..ae5c0f5 100644 --- a/src/views/onlineEducation/courseManage/courseChapters/components/chapterDialog.vue +++ b/src/views/onlineEducation/courseManage/courseChapters/components/chapterDialog.vue @@ -5,6 +5,8 @@ :title="title" width="550px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="100px" > <el-form-item label="章名称:" prop="name"> @@ -147,6 +149,7 @@ if(title.value === '新增'){ if(state.chapter.chapterId){ const {id, ...data} = JSON.parse(JSON.stringify(state.chapter)) + data.sort = state.form.sort const res = await addChapterPeriod(data) if(res.code === 200){ ElMessage({ @@ -176,6 +179,7 @@ }else if(title.value === '编辑'){ if(state.chapter.chapterId){ const {...data} = JSON.parse(JSON.stringify(state.chapter)) + data.sort = state.form.sort const res = await editChapterPeriod(data) if(res.code === 200){ ElMessage({ diff --git a/src/views/onlineEducation/courseManage/courseChapters/components/chooseResource.vue b/src/views/onlineEducation/courseManage/courseChapters/components/chooseResource.vue index b67ed2c..cc2b561 100644 --- a/src/views/onlineEducation/courseManage/courseChapters/components/chooseResource.vue +++ b/src/views/onlineEducation/courseManage/courseChapters/components/chooseResource.vue @@ -5,6 +5,8 @@ title="选择资源" width="600px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <div style="margin-bottom: 10px"> <el-form> @@ -12,8 +14,8 @@ <el-input style="width: 20%" v-model="data.queryParams.name "></el-input> <el-button type="primary" style="margin-left: 30px" @click="getList">查询</el-button> <el-button plain @click="reset">重置</el-button> + <el-button type="primary" @click="openResource">资源上传</el-button> </el-form-item> - </el-form> </div> <!-- 表格数据 --> @@ -40,18 +42,21 @@ @pagination="getList" /> </el-dialog> + <resource-dialog ref="resourceRef" @getList="getList"></resource-dialog> </div> </template> <script setup> import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; import {ElMessage, ElMessageBox} from "element-plus"; +import resourceDialog from '@/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue' import {checkResourceName, delResource, getResource} from "@/api/onlineEducation/courseResource"; import {checkName} from "@/api/onlineEducation/company"; const { proxy } = getCurrentInstance(); const loading = ref(false); const emit = defineEmits(["chooseRes"]); const dialogRef = ref(); +const resourceRef = ref() const data = reactive({ queryParams: { pageNum: 1, @@ -99,6 +104,10 @@ loading.value = false } +const openResource = () => { + resourceRef.value.openDialog('add',{}) +} + const choose = (value) => { console.log("co",value) emit('chooseRes',value) diff --git a/src/views/onlineEducation/courseManage/courseChapters/index.vue b/src/views/onlineEducation/courseManage/courseChapters/index.vue index 1ce31f6..b938ed8 100644 --- a/src/views/onlineEducation/courseManage/courseChapters/index.vue +++ b/src/views/onlineEducation/courseManage/courseChapters/index.vue @@ -10,6 +10,7 @@ <el-table-column label="章节名称" > <template #default="scope"> <span>{{scope.row.name}}</span> + <span v-if="scope.row.chapterId" style="font-size: 14px;margin-left: 5px">【{{scope.row.resource.resourceType === 1 ? '视频:':scope.row.resource.resourceType === 2 ? '音频:':'文档:'}}{{scope.row.resource.name}}】| {{scope.row.timeFormat}}</span> </template> </el-table-column> <el-table-column label="排序" prop="sort" align="center" width="80" /> @@ -66,13 +67,32 @@ } const res = await getChapters(param); if(res.code === 200){ - dataList.value = res.data + dataList.value = res.data.map(item => { + return { + ...item, + timeFormat: item.resourceType === 1 || item.resourceType === 2 ? secondsToTime(item.resourceLength) : item.docPage + '页' + } + }) }else{ ElMessage.warning(res.message) } loading.value = false; console.log('dataList.value',dataList.value) } +const secondsToTime = (seconds) => { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = seconds % 60; + + return [ + hours, + hours > 0 ? pad(minutes) : minutes, + pad(secs) + ].join(':'); +} +const pad = (number) => { + return (number < 10 ? '0' : '') + number; +} const openDialog = (type, value) => { dataList.value.forEach(item => { diff --git a/src/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue b/src/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue index d1cbdd4..aa99e98 100644 --- a/src/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue +++ b/src/views/onlineEducation/courseManage/courseResource/componets/resourceDialog.vue @@ -5,6 +5,8 @@ :title="title" width="550px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="130px" > <el-form-item label="资源名称:" prop="name" > @@ -89,15 +91,15 @@ const validateName = (rule, value, callback)=>{ if(value === ''){ callback(new Error('请输入资源名称')) - }else if(title.value === '编辑' && value === startUsername.value){ + }else if(title.value === '资源编辑' && value === startUsername.value){ callback() }else{ let param = {} - if(title.value === '新增') { + if(title.value === '资源新增') { param = { name:value, } - }else if(title.value === '编辑'){ + }else if(title.value === '资源编辑'){ param = { name:value, id: state.form.id @@ -211,7 +213,7 @@ const openDialog = async (type, value) => { length.value = value.listLength - title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '' ; + title.value = type === 'add' ? '资源新增' : type ==='edit' ? '资源编辑' : '' ; if(type === 'edit') { const res = await getResourceById(value.id); if(res.code === 200){ @@ -261,7 +263,7 @@ const onSubmit = async () => { const valid = await busRef.value.validate(); if(valid){ - if(title.value === '新增'){ + if(title.value === '资源新增'){ const {id,...data} = JSON.parse(JSON.stringify(state.form)) const res = await addResource(data) if(res.code === 200){ @@ -279,7 +281,7 @@ reset(); - }else if(title.value === '编辑'){ + }else if(title.value === '资源编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) const res = await editResource(data) if(res.code === 200){ diff --git a/src/views/onlineEducation/courseManage/courseResource/componets/viewVideo.vue b/src/views/onlineEducation/courseManage/courseResource/componets/viewVideo.vue new file mode 100644 index 0000000..1d06082 --- /dev/null +++ b/src/views/onlineEducation/courseManage/courseResource/componets/viewVideo.vue @@ -0,0 +1,135 @@ +<template> + <div class="notice"> + <el-dialog + v-model="dialogVisible" + :title="title" + width="50%" + :before-close="handleClose" + center + :close-on-press-escape="false" + :close-on-click-modal="false" + > + <div style="text-align: center"> + <video v-if="showVideo" ref="videoPlayer" class="video-js" style="margin: auto auto"></video> + </div> + </el-dialog> + </div> +</template> +<script setup> +import { ElMessage } from "element-plus"; +import videojs from "video.js" +import { computed, nextTick, onMounted, onUnmounted,ref,reactive,watch } from "vue"; +import SparkMD5 from "spark-md5"; +import pLimit from 'p-limit' +const emit = defineEmits(["getFile"]); + +const dialogVisible = ref(false); +const title = ref(""); +const state = reactive({ + +}) +const videoPlayer = ref(null) +const myPlayer = ref(null) +const resourcePath = ref() +const showVideo = ref(false) + +const getVideo = () => { + nextTick(() => { + console.log("111111",videoPlayer.value) + myPlayer.value = videojs(videoPlayer.value, { + poster: "",//视频封面 + controls: true,//视频控件 + autoplay:true,//自动播放 + sources: [ + { + src: resourcePath.value ? "http://192.168.2.16:9000/trainexam/" + resourcePath.value : '', + // src:'', + type: 'application/x-mpegURL', + } + ], + controlBar: { + remainingTimeDisplay: { + displayNegative: false + } + }, + playbackRates: [0.5, 1, 1.5, 2]//设置播放速度 + }, onPlayerReady) + }); +} +const onPlayerReady = () => { + myPlayer.value.log("play.....") + bindVideoEvents() +} +// 绑定事件 +const bindVideoEvents = () => { + if (!myPlayer.value) return + myPlayer.value.on('play', onPlay) + myPlayer.value.on('pause', onPause) + myPlayer.value.on('ended', onEnded) + myPlayer.value.on('timeupdate', onTimeupdate) + myPlayer.value.on('loadedmetadata', onLoadedmetadata) + myPlayer.value.on('fullscreenchange', onFullscreenchange) + myPlayer.value.on('error', err => { + console.log('视频加载发生错误', err) + }) +} +const openDialog = async (value) => { + dialogVisible.value = true; + showVideo.value = true; + resourcePath.value = value.resourcePath + title.value = value.name + getVideo(); +} + + +const handleClose = () => { + showVideo.value = false; + dialogVisible.value = false; + emit("getList") + +} +const onPlay = () => { + console.log('播放视频') +} +const onPause = () => { + console.log('暂停播放') +} +const onEnded = () => {} +const onTimeupdate = () => { + console.log('播放位置已更改时,播放时间更新') +} +// 全屏切换 +const onFullscreenchange = () => { + console.log('全屏状态改变') +} +// 元数据加载完成 +const onLoadedmetadata = () => { + console.log('元数据加载完成') + +} +const dispose = () => { + resourcePath.value = '' +} + +defineExpose({ + openDialog +}); + +</script> + +<style scoped lang="scss"> +.notice{ + :deep(.video-js) { + width: 500px; + height: 500px; + } + :deep(.el-form .el-form-item__label) { + font-size: 15px; + } + .file { + display: flex; + flex-direction: column; + align-items: flex-start; + } +} +</style> diff --git a/src/views/onlineEducation/courseManage/courseResource/index.vue b/src/views/onlineEducation/courseManage/courseResource/index.vue index e0b3274..c4c5968 100644 --- a/src/views/onlineEducation/courseManage/courseResource/index.vue +++ b/src/views/onlineEducation/courseManage/courseResource/index.vue @@ -11,12 +11,23 @@ <!-- 表格数据 --> <el-table v-loading="loading" :data="dataList" :border="true"> <el-table-column label="序号" type="index" align="center" width="80" /> - <el-table-column label="资源名称" prop="name" align="center" /> + <el-table-column label="资源名称" prop="name" align="center" > + <template #default="scope"> + <div style="display:flex;align-items: center;justify-content: center"> + <span >{{scope.row.name}}</span> + <VideoPlay v-if="scope.row.resourceType === 1" style="width: 1em; height: 1em; margin-left: 3px;cursor: pointer" @click="openVideo(scope.row)" /> + </div> + </template> + </el-table-column> <el-table-column label="资源大小" prop="sizeMB" align="center" > </el-table-column> <el-table-column label="资源类型" prop="resourceType" align="center" > <template #default="scope"> - <span>{{scope.row.resourceType == 1 ? '视频':scope.row.resourceType == 2 ? '音频':'文档'}}</span> + <div style="display: flex;flex-direction: column"> + <span>{{scope.row.resourceType == 1 ? '视频':scope.row.resourceType == 2 ? '音频':'文档'}}</span> + <span style="font-size: 14px">{{scope.row.timeFormat}}</span> + </div> + </template> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > @@ -34,19 +45,24 @@ v-model:limit="queryParams.pageSize" @pagination="getList" /> -<resource-dialog ref="dialogRef" @getList="getList"></resource-dialog> + <resource-dialog ref="dialogRef" @getList="getList"></resource-dialog> + <viewVideo ref="videoRef" @getList="getList"></viewVideo> </div> </template> <script setup> -import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; +import {getCurrentInstance, nextTick, onMounted, onUnmounted, reactive, ref, toRefs} from "vue"; import {ElMessage, ElMessageBox} from "element-plus"; import resourceDialog from './componets/resourceDialog.vue' +import viewVideo from './componets/viewVideo.vue' import {checkResourceName, delResource, getResource} from "@/api/onlineEducation/courseResource"; import {checkName} from "@/api/onlineEducation/company"; +import {VideoPlay} from "@element-plus/icons-vue"; const { proxy } = getCurrentInstance(); const loading = ref(false); const dialogRef = ref(); +const videoRef = ref(); + const data = reactive({ queryParams: { pageNum: 1, @@ -73,7 +89,8 @@ data.dataList = res.data.list.map(item => { return{ ...item, - sizeMB: Number((item.resourceSize /1024 /1024).toFixed(2))+'MB' + sizeMB: Number((item.resourceSize /1024 /1024).toFixed(2))+'MB', + timeFormat: item.resourceType === 1 || item.resourceType === 2 ? secondsToTime(item.resourceLength) : item.docPage + '页' } }) console.log("ddd",data.dataList) @@ -87,7 +104,24 @@ const openDialog = (type, value) => { dialogRef.value.openDialog(type, value); } +const openVideo = (value) => { + videoRef.value.openDialog(value); +} +const secondsToTime = (seconds) => { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = seconds % 60; + + return [ + hours, + hours > 0 ? pad(minutes) : minutes, + pad(secs) + ].join(':'); +} +const pad = (number) => { + return (number < 10 ? '0' : '') + number; +} /** 重置新增的表单以及其他数据 */ function reset() { proxy.resetForm("roleRef"); diff --git a/src/views/onlineEducation/courseManage/index.vue b/src/views/onlineEducation/courseManage/index.vue index b191239..f15a508 100644 --- a/src/views/onlineEducation/courseManage/index.vue +++ b/src/views/onlineEducation/courseManage/index.vue @@ -30,11 +30,15 @@ </el-table-column> <el-table-column label="课程名称" prop="name" align="center" /> <el-table-column label="课程分类" prop="categoryName" align="center" /> - <el-table-column label="要求课时" prop="period" align="center" /> + <el-table-column label="要求课时" prop="period" align="center" > + <template #default="scope"> + <span>{{ scope.row.period?(scope.row.period/60).toFixed(2).replace(/\.00$/, '') + '分钟':'' }}</span> + </template> + </el-table-column> <el-table-column label="提交单位" prop="companyName" align="center" /> <el-table-column label="审核状态" prop="state" align="center" > <template #default="scope"> - <span>{{scope.row.state == 1?'待审核':scope.row.state == 2?'审批通过':'审批不通过'}}</span> + <span>{{scope.row.state == 0?'待提交':scope.row.state == 1?'待审核':scope.row.state == 2?'审批通过':'审批不通过'}}</span> </template> </el-table-column> <el-table-column label="创建时间" prop="createTime" align="center" width="180" /> @@ -58,31 +62,51 @@ <span v-else>--</span> </template> </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180"> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="240"> <template #default="scope"> - <div v-if="scope.row.state == 2"> - <div v-if="data.isAdmin"> + <div v-if="data.isAdmin"> + <div v-if="scope.row.state !== 3"> + <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> + <el-button link type="primary" v-if="scope.row.state == 1" @click="openApprove(scope.row)">审核</el-button> + <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> + </div> + <div v-else>--</div> + </div> + <div v-else-if="!data.isAdmin"> + <div v-if="scope.row.state !== 2"> + <el-button link type="primary" v-if="scope.row.state == 0 || scope.row.state == 3" @click="submitApprove(scope.row)">提交审核</el-button> + <el-button link type="primary" v-if="scope.row.state == 1" @click="submitApprove(scope.row)">取消审批</el-button> <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button> <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> </div> - <div v-else><el-button link type="primary" @click="toChapters(scope.row)">章节</el-button></div> + <div v-else>--</div> + </div> - <div v-else-if="scope.row.state == 1" > - <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> - <el-button link type="primary" v-if="data.isAdmin" @click="openApprove(scope.row)">审核</el-button> - <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button> - <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> - </div> - <div v-else-if="scope.row.state == 3" > - <div v-if="data.isAdmin">--</div> - <div v-else> - <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> - <el-button link type="primary" @click="submitApprove(scope.row)">提交审核</el-button> - <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button> - <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button> - </div> - </div> +<!-- <div v-if="scope.row.state == 2">--> +<!-- <div v-if="data.isAdmin">--> +<!-- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>--> +<!-- <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button>--> +<!-- <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>--> +<!-- </div>--> +<!-- <div v-else><el-button link type="primary" @click="toChapters(scope.row)">章节</el-button></div>--> +<!-- </div>--> +<!-- <div v-else-if="scope.row.state == 1" >--> +<!-- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>--> +<!-- <el-button link type="primary" v-if="data.isAdmin" @click="openApprove(scope.row)">审核</el-button>--> +<!-- <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button>--> +<!-- <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>--> +<!-- </div>--> +<!-- <div v-else-if="scope.row.state == 3" >--> +<!-- <div v-if="data.isAdmin">--</div>--> +<!-- <div v-else>--> +<!-- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>--> +<!-- <el-button link type="primary" @click="submitApprove(scope.row)">提交审核</el-button>--> +<!-- <el-button link type="primary" @click="toChapters(scope.row)">章节</el-button>--> +<!-- <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>--> +<!-- </div>--> +<!-- </div>--> </template> </el-table-column> </el-table> @@ -244,13 +268,19 @@ } } const submitApprove = async (val) => { - const param = { + let param = { id: val.id, - state: 1 + state: null + } + //取消审批 + if(val.state == 1){ + param.state = 0 + }else { + param.state = 1 } const res = await doCourse(param) if(res.code == 200){ - ElMessage.success('提交成功') + ElMessage.success('操作成功') await getList() }else{ ElMessage.warning(res.message) diff --git a/src/views/onlineEducation/groupExams/components/examChooseStudent.vue b/src/views/onlineEducation/groupExams/components/examChooseStudent.vue index 698b1c6..1fc37d4 100644 --- a/src/views/onlineEducation/groupExams/components/examChooseStudent.vue +++ b/src/views/onlineEducation/groupExams/components/examChooseStudent.vue @@ -5,6 +5,8 @@ :title="title" width="50%" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <div style="margin-bottom: 20px"> <el-checkbox v-model="state.bindBatchStu" @change="changeBind">绑定批次人员</el-checkbox> diff --git a/src/views/onlineEducation/groupExams/components/examDialog.vue b/src/views/onlineEducation/groupExams/components/examDialog.vue index 6f12c6d..6a49a22 100644 --- a/src/views/onlineEducation/groupExams/components/examDialog.vue +++ b/src/views/onlineEducation/groupExams/components/examDialog.vue @@ -5,6 +5,8 @@ width="800px" :before-close="handleClose" destroy-on-close + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <span style="font-size: 20px;font-weight: 800;margin-left: 20px">考试配置</span> @@ -368,6 +370,9 @@ console.log("label====",classifyRef.value.getCheckedNodes()[0].value) state.form.categoryId = classifyRef.value.getCheckedNodes()[0].value // 我这里只是打印了一下label的值哦,需要赋值的话自己去赋值哦 + if (classifyRef.value.popperVisible) { + classifyRef.value.togglePopperVisible() + } } const handleClose = () => { diff --git a/src/views/onlineEducation/groupExams/index.vue b/src/views/onlineEducation/groupExams/index.vue index 3a305d3..90f95b5 100644 --- a/src/views/onlineEducation/groupExams/index.vue +++ b/src/views/onlineEducation/groupExams/index.vue @@ -14,9 +14,9 @@ <el-table-column label="企业名称" prop="companyName" align="center" /> <el-table-column label="创建账户" prop="createBy" align="center" /> <el-table-column label="科目/类别" prop="categoryName" align="center" /> - <el-table-column label="考生人数" prop="" align="center"> + <el-table-column label="完成人数/总人数" prop="" align="center" width="135"> <template #default="scope"> - <span>{{scope.row.paperStudentInfoVO.studentCount}}</span> + <span>{{scope.row.paperStudentInfoVO.finishCount}}/{{scope.row.paperStudentInfoVO.studentCount}}</span> </template> </el-table-column> <el-table-column label="合格人数" prop="" align="center"> diff --git a/src/views/onlineEducation/offlineEducation/components/recordDialog.vue b/src/views/onlineEducation/offlineEducation/components/recordDialog.vue index 3dc57a0..b887e2a 100644 --- a/src/views/onlineEducation/offlineEducation/components/recordDialog.vue +++ b/src/views/onlineEducation/offlineEducation/components/recordDialog.vue @@ -5,6 +5,8 @@ :title="state.title" width="550px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="180px" > <el-form-item label="企业名称:" prop="companyName" > diff --git a/src/views/onlineEducation/people/components/stuDialog.vue b/src/views/onlineEducation/people/components/stuDialog.vue index 3b92dd1..bdd17dd 100644 --- a/src/views/onlineEducation/people/components/stuDialog.vue +++ b/src/views/onlineEducation/people/components/stuDialog.vue @@ -5,6 +5,8 @@ :title="state.title" width="550px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="180px" > <el-form-item label="企业:" prop="companyName" v-if="state.title !== '修改密码'"> diff --git a/src/views/onlineEducation/questionBankManagement/components/questionBankDialog.vue b/src/views/onlineEducation/questionBankManagement/components/questionBankDialog.vue index 2144454..c5bd8d6 100644 --- a/src/views/onlineEducation/questionBankManagement/components/questionBankDialog.vue +++ b/src/views/onlineEducation/questionBankManagement/components/questionBankDialog.vue @@ -5,6 +5,8 @@ :title="title" width="500px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="所属公司:" prop="companyName" v-if="!state.isAdmin"> @@ -155,10 +157,14 @@ return tmp; } +const CascaderRef = ref() const handleChange = ()=> { console.log("label====",classifyRef.value.getCheckedNodes()[0].value) state.form.categoryId = classifyRef.value.getCheckedNodes()[0].value // 我这里只是打印了一下label的值哦,需要赋值的话自己去赋值哦 + if (classifyRef.value.popperVisible) { + classifyRef.value.togglePopperVisible() + } } const onSubmit = async () => { diff --git a/src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue b/src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue index a4a5ab9..96c48aa 100644 --- a/src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue +++ b/src/views/onlineEducation/questionBankManagement/questionManage/components/questionDialog.vue @@ -5,10 +5,12 @@ :title="title" width="50%" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="题目类型:" prop="questionType"> - <el-select v-model="state.form.questionType" placeholder="请选择题型" style="width: 100%"> + <el-select v-model="state.form.questionType" placeholder="请选择题型" style="width: 100%" @change="changeType"> <el-option v-for="item in state.questionTypeList" :key="item.id" @@ -41,17 +43,17 @@ </el-form-item> <el-form-item label="选项:" prop="content"> <div style="display: flex;flex-direction: column;width: 100%"> - <el-button type="primary" @click="addOption" size="default" style="width: 65px;margin-bottom: 15px">添加</el-button> + <el-button :disabled="state.form.questionType ===3" type="primary" @click="addOption" size="default" style="width: 65px;margin-bottom: 15px">添加</el-button> <div v-for="(item,index) in state.optionItem.items" :key="index" style="width: 100%"> <div style="display: flex;align-items: center"> <span>{{String.fromCharCode(index + 65)}}</span> - <el-input type="textarea" v-model="state.optionItem.items[index].content" placeholder="请输入选项内容" style="width: 100%;margin-left: 20px;margin-bottom: 10px"></el-input> - <Delete style="width: 15px; height: 15px; margin-left: 8px;color: #ed5565" @click="delOption(index)" /> + <el-input :disabled="state.form.questionType ===3" type="textarea" v-model="state.optionItem.items[index].content" placeholder="请输入选项内容" style="width: 100%;margin-left: 20px;margin-bottom: 10px"></el-input> + <Delete v-if="state.form.questionType !==3" style="width: 15px; height: 15px; margin-left: 8px;color: #ed5565" @click="delOption(index)" /> </div> </div> </div> </el-form-item> - <el-form-item label="解析:" prop="answer"> + <el-form-item label="解析:" > <el-input type="textarea" v-model="state.optionItem.analyze" placeholder="请输入题目解析" style="width: 100%;margin-bottom: 10px"></el-input> </el-form-item> <el-form-item label="正确答案:" prop="answer"> @@ -117,7 +119,7 @@ questionType: [{required: true, trigger: "blur", message: '请选择题目类型'}], bankName: [{required: true, trigger: "blur", message: '请选择归属题库'}], title: [{required: true, trigger: "blur", message: '请输入题目内容'}], - // answer: [{required: true, trigger: "blur", message: '请选择正确答案'}], + answer: [{required: true, trigger: "blur", message: '请选择正确答案'}], }, classifyList: [], isAdmin: false, @@ -171,6 +173,7 @@ } const delOption = (val) => { state.optionItem.items.splice(val,1) + state.form.answer = '' console.log(" state.optionItem.items.", state.optionItem.items) } const openDialog = async (type, value) => { @@ -289,7 +292,22 @@ } } } +const changeType = () => { + if(state.form.questionType === 3) { + state.optionItem.items = [ + { + prefix: 'A', + content: '是' + }, + { + prefix: 'B', + content: '否' + } + ] + } + +} const handleClose = () => { busRef.value.clearValidate(); reset(); diff --git a/src/views/onlineEducation/systemManage/banner/components/bannerDialog.vue b/src/views/onlineEducation/systemManage/banner/components/bannerDialog.vue index bd7f546..58310ba 100644 --- a/src/views/onlineEducation/systemManage/banner/components/bannerDialog.vue +++ b/src/views/onlineEducation/systemManage/banner/components/bannerDialog.vue @@ -5,6 +5,8 @@ :title="title" width="550px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="100px" > <el-form-item label="标题:" prop="title" > diff --git a/src/views/onlineEducation/systemManage/company/components/companyDialog.vue b/src/views/onlineEducation/systemManage/company/components/companyDialog.vue index 51a91d4..e1f4c63 100644 --- a/src/views/onlineEducation/systemManage/company/components/companyDialog.vue +++ b/src/views/onlineEducation/systemManage/company/components/companyDialog.vue @@ -5,6 +5,8 @@ :title="title" width="500px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="企业信用代码:" prop="creditCode" v-if="title!=='分配课时'"> @@ -19,28 +21,29 @@ <el-form-item label="联系电话:" prop="phone" v-if="title!=='分配课时'"> <el-input v-model.trim="state.form.phone" placeholder="请输入联系电话"></el-input> </el-form-item> - <el-form-item label="当前剩余课时(秒):" prop="remainPeriod" v-if="title!=='分配课时'"> + <el-form-item label="当前剩余课时:" prop="remainPeriod" v-if="title!=='分配课时' && title==='编辑'"> <el-input placeholder="请输入剩余课时" v-model.trim="state.form.remainPeriod" @input="state.form.remainPeriod= state.form.remainPeriod.replace(/[^0-9]/g,'')"> - <template #append v-if="state.form.remainPeriod"><span>{{(state.form.remainPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟'}}</span></template> + <template #append >分钟</template> </el-input> </el-form-item> - <el-form-item label="累计已用课时(秒):" prop="spendPeriod" v-if="title!=='分配课时'"> +<!-- <el-form-item label="累计已用课时(秒):" prop="spendPeriod" v-if="title!=='分配课时'">--> +<!-- <el-input--> +<!-- placeholder="请输入已用课时"--> +<!-- v-model.trim="state.form.spendPeriod"--> +<!-- @input="state.form.spendPeriod= state.form.spendPeriod.replace(/[^0-9]/g,'')">--> +<!-- <template #append v-if="state.form.spendPeriod"><span>{{(state.form.spendPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟'}}</span></template>--> +<!-- </el-input>--> +<!-- </el-form-item>--> + <el-form-item label="总课时:" prop="totalPeriod"> <el-input - placeholder="请输入已用课时" - v-model.trim="state.form.spendPeriod" - @input="state.form.spendPeriod= state.form.spendPeriod.replace(/[^0-9]/g,'')"> - <template #append v-if="state.form.spendPeriod"><span>{{(state.form.spendPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟'}}</span></template> - </el-input> - </el-form-item> - <el-form-item label="总课时(秒):" prop="totalPeriod"> - <el-input + :disabled="title === '编辑'" placeholder="请输入总课时" v-model.trim="state.form.totalPeriod" @input="state.form.totalPeriod = state.form.totalPeriod.replace(/[^0-9]/g,'')"> - <template #append v-if="state.form.totalPeriod"><span>{{(state.form.totalPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟'}}</span></template> + <template #append >分钟</template> </el-input> </el-form-item> </el-form> @@ -137,6 +140,8 @@ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '分配课时' ; if(type === 'edit' || type === 'distribute') { state.form = value; + state.form.totalPeriod = value.totalPeriod / 60; + state.form.remainPeriod = value.remainPeriod/60; startUsername.value = value.username startPhone.value = value.phone } @@ -148,6 +153,8 @@ if(valid){ if(title.value === '新增'){ const {id, ...data} = JSON.parse(JSON.stringify(state.form)) + data.totalPeriod = data.totalPeriod * 60 + data.remainPeriod = data.remainPeriod * 60 const res = await addCompany(data) if(res.code === 200){ ElMessage({ @@ -163,6 +170,8 @@ dialogVisible.value = false; }else if(title.value === '编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) + data.totalPeriod = data.totalPeriod * 60 + data.remainPeriod = data.remainPeriod * 60 const res = await editCompany(data) if(res.code === 200){ ElMessage({ @@ -178,6 +187,7 @@ dialogVisible.value = false; }else if(title.value === '分配课时') { const {creditCode,name,major,phone,remainPeriod,spendPeriod,...data} = JSON.parse(JSON.stringify(state.form)) + data.totalPeriod = data.totalPeriod * 60 const res = await distributeCompany(data) if(res.code === 200){ ElMessage({ diff --git a/src/views/onlineEducation/systemManage/company/index.vue b/src/views/onlineEducation/systemManage/company/index.vue index 13f6aaf..57153c0 100644 --- a/src/views/onlineEducation/systemManage/company/index.vue +++ b/src/views/onlineEducation/systemManage/company/index.vue @@ -15,8 +15,12 @@ <el-table-column label="企业名称" prop="name" align="center" /> <el-table-column label="负责人" prop="major" align="center" /> <el-table-column label="联系电话" prop="phone" align="center"/> - <el-table-column label="当前剩余课时(分)" prop="remainPeriodMin" align="center" width="150"/> - <el-table-column label="累计已用课时(分)" prop="spendPeriodMin" align="center" width="150"/> + <el-table-column label="当前剩余课时(分)" prop="remainPeriodMin" align="center" width="150" /> + <el-table-column label="累计已用课时(分)" prop="spendPeriodMin" align="center" width="150"> + <template #default="scope"> + <span>{{((scope.row.totalPeriod -scope.row.remainPeriod)/60).toFixed(2).replace(/\.00$/, '') + '分钟' }}</span> + </template> + </el-table-column> <el-table-column label="总课时(分)" prop="totalPeriodMin" align="center"/> <el-table-column label="课时变动详情" align="center" class-name="small-padding fixed-width" > <template #default="scope"> @@ -82,7 +86,6 @@ return{ ...item, remainPeriodMin: item.remainPeriod ?(item.remainPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟':'', - spendPeriodMin:item.spendPeriod ?(item.spendPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟':'', totalPeriodMin:item.totalPeriod ?(item.totalPeriod /60).toFixed(2).replace(/\.00$/, '') + '分钟':'', } }) diff --git a/src/views/onlineEducation/systemManage/courseClassification/components/courseClassDialog.vue b/src/views/onlineEducation/systemManage/courseClassification/components/courseClassDialog.vue index 7b29ada..6f12434 100644 --- a/src/views/onlineEducation/systemManage/courseClassification/components/courseClassDialog.vue +++ b/src/views/onlineEducation/systemManage/courseClassification/components/courseClassDialog.vue @@ -5,6 +5,8 @@ :title="title" width="500px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="150px" > <el-form-item label="上级分类:" prop="name" v-if="!state.isFirst"> @@ -94,9 +96,12 @@ length.value = value.listLength title.value = type === 'addFirst' || type === 'add' ? '新增' : type ==='edit' ? '编辑' : '' ; if(type === 'edit') { + state.isFirst = true; state.form = value; state.form.status = value.status == 0; state.form.sort = value.sort; + state.form.parentId = value.parentId; + state.form.parentName = value.name; startUsername.value = value.username; }else if(type === 'add' && value ){ state.isFirst = false; diff --git a/src/views/onlineEducation/systemManage/user/components/userDialog.vue b/src/views/onlineEducation/systemManage/user/components/userDialog.vue index aa3512e..ec226fe 100644 --- a/src/views/onlineEducation/systemManage/user/components/userDialog.vue +++ b/src/views/onlineEducation/systemManage/user/components/userDialog.vue @@ -5,6 +5,8 @@ :title="state.title" width="700px" :before-close="handleClose" + :close-on-press-escape="false" + :close-on-click-modal="false" > <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" > <el-form-item label="用户名:" prop="username" v-if="state.title !== '修改密码'"> @@ -28,20 +30,30 @@ <el-form-item label="手机号:" prop="phone" v-if="state.title !== '修改密码'" > <el-input v-model.trim="state.form.phone" :maxlength="11" :disabled="disabled" placeholder="请输入手机号"></el-input> </el-form-item> - <el-form-item label="用户类型:" v-if="state.title !== '修改密码'"> - <el-radio-group v-model="state.form.userType" :disabled="disabled" @change="changeType"> - <el-radio :label="0" v-if="state.isAdmin">管理员</el-radio> - <el-radio :label="1" v-if="state.isAdmin">企业级</el-radio> - <el-radio :label="2" v-if="!state.isAdmin">部门级</el-radio> + <el-form-item label="用户类型:" v-if="state.title !== '修改密码'" prop="userType"> + <el-radio-group v-model="state.form.userType" :disabled="disabled" @change="changeType" v-if="state.title == '新增'"> + <el-radio :label="0" v-if="state.currentUserType == 0">管理员</el-radio> + <el-radio :label="1" v-if="state.currentUserType == 0 ">企业级</el-radio> + <el-radio :label="2" v-if="state.currentUserType == 1 ">部门级</el-radio> <el-radio :label="3" v-if="!state.isAdmin">车间(岗位)级</el-radio> - <el-radio :label="4" v-if="state.isAdmin">其他</el-radio> + <el-radio :label="4" v-if="state.currentUserType == 0">其他</el-radio> </el-radio-group> + <span v-else-if="state.title == '查看'">{{state.currentUserType === 0 ? '管理员' : state.currentUserType === 1 ? '企业级' : state.currentUserType === 2 ? '部门级' : state.currentUserType === 3 ? '车间级' :'其他'}}</span> + <span v-else-if="state.title == '编辑'">{{state.form.userType === 0 ? '管理员' : state.form.userType === 1 ? '企业级' : state.form.userType === 2 ? '部门级' : state.form.userType === 3 ? '车间级' :'其他'}}</span> + <!-- <el-radio-group v-model="state.form.userType" :disabled="disabled" @change="changeType" v-else-if="state.title == '编辑'">--> +<!-- <el-radio :label="0" v-if="state.currentUserType == 0">管理员</el-radio>--> +<!-- <el-radio :label="1" >企业级</el-radio>--> +<!-- <el-radio :label="2" >部门级</el-radio>--> +<!-- <el-radio :label="3" >车间(岗位)级</el-radio>--> +<!-- <el-radio :label="4" >其他</el-radio>--> +<!-- </el-radio-group>--> </el-form-item> - <el-form-item label="选择上级企业:" prop="companyName" v-if="state.title !== '修改密码' && state.form.userType !== 0"> + <el-form-item label="所属企业:" prop="companyName" v-if="state.title !== '修改密码' && showCompany"> <el-select v-if="state.isAdmin" v-model="state.form.companyName" filterable + :disabled="disabled || state.title =='编辑'" remote @change="selectValue" reserve-keyword @@ -58,6 +70,7 @@ :value="item.name" /> </el-select> + <el-input v-else disabled style="width: 45%" v-model="state.form.companyName"></el-input> <!-- <el-select--> <!-- v-if="state.isAdmin"--> <!-- v-model="state.form.companyName"--> @@ -75,21 +88,23 @@ <!-- :value="item.name"--> <!-- />--> <!-- </el-select>--> - <el-input v-else disabled style="width: 45%" v-model="state.form.companyName"></el-input> - <scorllSelect - :disabled="disabled" - ref="scrollRef" - v-if="UisMounted && (state.form.userType === 2 || state.form.userType === 3)" - v-model="state.form.parentName" - @getval = "getSelectUser" - placeholder="请选择" - clearable - style="width: 45%;margin-left: 10px" - filterable - remote - searchKey="name" - :methods="getUser"> - </scorllSelect> + + + </el-form-item> + <el-form-item label="所属上级账号:" prop="companyName" v-if="showChild"> + <scorllSelect + :disabled="disabled || state.title =='编辑'" + ref="scrollRef" + v-model="state.form.parentName" + @getval = "getSelectUser" + placeholder="请选择" + clearable + style="width: 45%;" + filterable + remote + searchKey="name" + :methods="getUser"> + </scorllSelect> </el-form-item> </el-form> <template #footer v-if="state.title !='查看'"> @@ -197,7 +212,7 @@ password: '', confirmPassword: '', username: '', - userType: 0, + userType: null, sex: 0, companyId: null, parentId: null @@ -209,6 +224,7 @@ password: [{ required: true, validator: validatePwd, trigger: 'blur' }], confirmPassword: [{ required: true, validator: equalToPassword, trigger: 'blur' }], phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }], + userType: [{ required: true, message: '请选择用户类型', trigger: 'blur' }], }, companyList: [], userList: [ @@ -221,7 +237,8 @@ cloading:false, totlePage: 0, userParam: {}, - isAdmin: false + isAdmin: false, + currentUserType: null }) const UisMounted = ref(false); @@ -229,19 +246,20 @@ UisMounted.value = true; }); - +const showCompany = ref(false) +const showChild = ref(false) const disabled = ref(false); +const userInfo = ref() const openDialog = async (type, value) => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - console.log("userInfo",userInfo) - if(userInfo.userType === 0){ + userInfo.value = JSON.parse(Cookies.get('userInfo')) + console.log("userInfo",userInfo.value) + state.currentUserType = userInfo.value.userType + if(state.currentUserType === 0){ state.isAdmin = true; - state.form.userType = 0; }else { state.isAdmin = false; - state.form.companyId = userInfo.companyId; - state.form.companyName = userInfo.companyName; - state.form.userType = 1; + state.form.companyId = userInfo.value.companyId; + state.form.companyName = userInfo.value.companyName; } if(type !== 'view' && type !== 'pwd'){ @@ -258,7 +276,14 @@ const res = await getUserById(value.id); if(res.code === 200){ state.form = res.data - if(res.data.userType === 2|| res.data.userType === 3){ + if(res.data.userType === 3){ + showCompany.value = true; + showChild.value = true + }else if(res.data.userType === 2 || res.data.userType === 1 || res.data.userType === 4){ + showCompany.value = true; + showChild.value = false; + } + if(res.data.userType === 3){ if(!res.data.parentId){ state.form.parentId = '' state.form.parentName = '无上级账号' @@ -279,6 +304,7 @@ const finshed = ref(false) const loading = ref(false) + const getCompanyList = async (val)=>{ if(val != ""){ loading.value = true; @@ -374,19 +400,63 @@ } const changeType = () => { state.companyList = []; - if(state.isAdmin){ - state.form.companyId = null; - state.form.companyName = ''; - } state.form.parentId = null; state.form.parentName = ''; - if(state.form.userType === 2 || state.form.userType === 3 ){ + state.form.companyId = null; + state.form.companyName = ''; + //当前是管理员级用户 + if(state.currentUserType === 0){ + if(state.form.userType === 0){ + showCompany.value = false; + showChild.value = false; + }else { + showCompany.value = true; + showChild.value = false; + } + } + //当前是企业级/其他用户选择部门 + if((state.currentUserType === 1 && state.form.userType === 2) || (state.currentUserType === 4 && state.form.userType === 2)){ + state.form.parentId = userInfo.value.id; + state.form.companyName = userInfo.value.companyName + state.form.companyId = userInfo.value.companyId; + showChild.value = false; + showCompany.value = true; + + } //当前是企业级/其他用户选择车间 + else if((state.currentUserType === 1 && state.form.userType === 3) || (state.currentUserType === 4 && state.form.userType === 3)){ + state.form.companyName = userInfo.value.companyName + state.form.companyId = userInfo.value.companyId; + showCompany.value = true; + showChild.value = true; const param = { - userType: state.form.userType-1, + userType: 2, companyId: state.form.companyId, } - scrollRef.value.getList(param,'change'); + nextTick(() => { + scrollRef.value.getList(param,'change'); + }) } + //当前是部门级选择车间 + if((state.currentUserType === 2 && state.form.userType === 3)){ + state.form.parentId = userInfo.value.id; + state.form.companyName = userInfo.value.companyName + state.form.companyId = userInfo.value.companyId; + showCompany.value = true; + showChild.value = false; + } + // if(state.isAdmin){ + // state.form.companyId = null; + // state.form.companyName = ''; + // } + // state.form.parentId = null; + // state.form.parentName = ''; + // if(state.form.userType === 2 || state.form.userType === 3 ){ + // const param = { + // userType: state.form.userType-1, + // companyId: state.form.companyId, + // } + // scrollRef.value.getList(param,'change'); + // } } const handleClose = () => { @@ -397,11 +467,13 @@ password: '', confirmPassword: '', username: '', - userType: 0, + userType: null, sex: 0, companyId: null, parentId: null } + showCompany.value = false; + showChild.value = false; state.userList = []; state.companyList = []; state.pageNum = 1; @@ -427,13 +499,6 @@ state.companyList.forEach(item => { if(item.name === val){ state.form.companyId = item.id - if(state.form.userType === 2 || state.form.userType === 3 ){ - const param = { - userType: state.form.userType-1, - companyId: state.form.companyId, - } - scrollRef.value.getList(param,'change'); - } } }) } diff --git a/src/views/onlineEducation/systemManage/user/index.vue b/src/views/onlineEducation/systemManage/user/index.vue index 5649baf..2b62458 100644 --- a/src/views/onlineEducation/systemManage/user/index.vue +++ b/src/views/onlineEducation/systemManage/user/index.vue @@ -59,8 +59,9 @@ }); const { queryParams, total, dataList } = toRefs(data); - +const userInfo = ref() onMounted(()=>{ + userInfo.value = JSON.parse(Cookies.get('userInfo')) getList() }) @@ -86,6 +87,10 @@ } const openDialog = (type, value) => { + if(userInfo.value.userType === 3){ + ElMessage.warning('车间级用户不能新增') + return; + } dialogRef.value.openDialog(type, value); } -- Gitblit v1.9.2