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">&#45;&#45;</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