dedsudiyu 2 giorni fa
parent
commit
79d9d50999
22 ha cambiato i file con 158 aggiunte e 238 eliminazioni
  1. 8 0
      src/api/safetyEducationExaminationNew/index.js
  2. 27 42
      src/components/fullScreenFileLook/fullScreenFileLook.vue
  3. 0 1
      src/utils/index.js
  4. 35 12
      src/views/safetyEducationExaminationNew/components/coursewareComponent.vue
  5. 6 2
      src/views/safetyEducationExaminationNew/courseManagement/courseManagement/index.vue
  6. 1 1
      src/views/safetyEducationExaminationNew/courseManagement/courseManagement/studyCourses.vue
  7. 7 2
      src/views/safetyEducationExaminationNew/examManagement/examinationArrange/index.vue
  8. 6 6
      src/views/safetyEducationExaminationNew/examManagement/examinationArrange/selectScope.vue
  9. 7 3
      src/views/safetyEducationExaminationNew/examManagement/examinationResult/index.vue
  10. 6 2
      src/views/safetyEducationExaminationNew/examManagement/testPaperManagement/index.vue
  11. 1 68
      src/views/safetyEducationExaminationNew/featurePage/learningCourse/index.vue
  12. 1 68
      src/views/safetyEducationExaminationNew/featurePage/learningMaterials/index.vue
  13. 11 6
      src/views/safetyEducationExaminationNew/featurePage/mockExam/index.vue
  14. 11 6
      src/views/safetyEducationExaminationNew/featurePage/startTheExam/index.vue
  15. 2 1
      src/views/safetyEducationExaminationNew/publicConfiguration/basicConfiguration/index.vue
  16. 9 5
      src/views/safetyEducationExaminationNew/publicConfiguration/knowledgePointManagement/index.vue
  17. 3 2
      src/views/safetyEducationExaminationNew/questionBankManagement/practiceSolvingProblems/index.vue
  18. 6 3
      src/views/safetyEducationExaminationNew/questionBankManagement/questionBankManagement/index.vue
  19. 1 0
      src/views/safetyEducationExaminationNew/workbench/LabBindingApply.vue
  20. 2 2
      src/views/safetyEducationExaminationNew/workbench/TaskCard.vue
  21. 2 2
      src/views/safetyEducationExaminationNew/workbench/UserInfoCard.vue
  22. 6 4
      src/views/safetyEducationExaminationNew/workbench/index.vue

+ 8 - 0
src/api/safetyEducationExaminationNew/index.js

@@ -787,6 +787,14 @@ export function examElConfigMasterInitMinHour(query) {
     params: query
   })
 }
+//获取所有专业(id、name、code)
+export function systemUserMajorAllMajors(query) {
+  return request({
+    url: '/system/user/major/allMajors',
+    method: 'get',
+    params: query
+  })
+}
 //****************************** 统计相关 ******************************/
 //考试统计页面学年-学年列表
 export function examElStatisticsGetAcademicYear(data) {

+ 27 - 42
src/components/fullScreenFileLook/fullScreenFileLook.vue

@@ -27,10 +27,6 @@
         <p class="position-download-p el-icon-download" @click="downloadOffice" v-if="!officeNullType&&officeType!='text'"></p>
         <p class="title-p">{{lookName}}</p>
         <!--关闭按钮-->
-        <div class="top-button-box" v-if="officeType === 'docx'&&!officeNullType">
-          <p :class="pdfType==1?'check-p':''" @click="buttonCheck(1)">纵向预览</p>
-          <p :class="pdfType==2?'check-p':''" @click="buttonCheck(2)">横向预览</p>
-        </div>
         <p class="position-off-p el-icon-circle-close" @click="outButton"></p>
       </div>
       <div class="max-img-box" ref="viewBox">
@@ -51,6 +47,7 @@
           <vue-office-pdf
             v-if="officeType === 'pdf'&&!officeNullType"
             :src="lookUrl"
+            :class="pdfType == 1?'':'vertical'"
             @rendered="renderedHandler"
             @error="errorHandler"/>
           <p v-if="officeNullType" class="office-null-text">加载失败...</p>
@@ -70,6 +67,7 @@
   import '@vue-office/excel/lib/index.css'
   //引入VueOfficePdf组件
   import VueOfficePdf from '@vue-office/pdf'
+  import JSZip from 'jszip'
   export default {
     name: 'fullScreenFileLook',
     components: {
@@ -107,11 +105,36 @@
           this.$set(this,'lookName',name);
           this.$set(this,'lookUrl',url);
           this.$set(this,'officeNullType',false);
+          this.$set(this,'pdfType',1);
           this.$set(this,'showType',true);
+          if(type === 'docx'){
+            this._detectDocxOrientation(url);
+          }
         }else{
           this.msgError('文件参数异常')
         }
       },
+      // 解析 docx XML 自动判断纸张方向,设置 pdfType(1纵向 2横向)
+      async _detectDocxOrientation(url) {
+        try {
+          const res = await fetch(url);
+          const buf = await res.arrayBuffer();
+          const zip = await JSZip.loadAsync(buf);
+          const xmlStr = await zip.file('word/document.xml').async('string');
+          const orientMatch = xmlStr.match(/w:pgSz[^/]*?w:orient="([^"]+)"/);
+          if (orientMatch) {
+            this.$set(this, 'pdfType', orientMatch[1] === 'landscape' ? 2 : 1);
+            return;
+          }
+          // 无 orient 属性时比较 w:w 与 w:h
+          const sizeMatch = xmlStr.match(/w:pgSz[^/]*?w:w="(\d+)"[^/]*?w:h="(\d+)"/);
+          if (sizeMatch) {
+            this.$set(this, 'pdfType', parseInt(sizeMatch[1]) > parseInt(sizeMatch[2]) ? 2 : 1);
+          }
+        } catch (e) {
+          // 解析失败保持默认纵向
+        }
+      },
       //文件加载成功
       renderedHandler() {
         this.$set(this,'officeNullType',false);
@@ -146,20 +169,10 @@
         // 释放 Blob URL
         window.URL.revokeObjectURL(url)
       },
-      //DOCX排版样式切换
-      buttonCheck(val){
-        if(this.pdfType != val){
-          this.$set(this,'pdfType',val);
-        }
-      },
     },
   }
 </script>
 <style scoped lang="scss">
-  //横竖排版
-  .horizontal{
-
-  }
   .vertical{
     ::v-deep .docx{
       padding:0!important;
@@ -195,34 +208,6 @@
         text-align: center;
         line-height:50px;
       }
-      .top-button-box{
-        display: flex;
-        color:#fff;
-        line-height:30px;
-        text-align: center;
-        font-size:14px;
-        cursor: pointer;
-        z-index: 999;
-        margin:10px 40px 0 0;
-        border-radius: 4px;
-        overflow: hidden;
-        height:30px;
-        p{
-          width:100px;
-          height:30px;
-          background-color: #999;
-          color:#fff;
-        }
-        p:nth-child(1){
-
-        }
-        p:nth-child(2){
-        }
-        .check-p{
-          background-color: #0183fa;
-          color:#fff;
-        }
-      }
       .position-off-p{
         color:#fff;
         width:30px;

+ 0 - 1
src/utils/index.js

@@ -432,7 +432,6 @@ export function controlsRestrictVerify(str) {
   userInfo.userId     当前用户userID
 */
 export function itoOrVideoLimits(subAdminId) {
-  console.log('subAdminId',subAdminId)
   let userInfo = JSON.parse(localStorage.getItem('user'));
   let schoolId = process.env.VUE_APP_SCHOOL_ID;
   let collegeId = process.env.VUE_APP_COLLEGE_ID;

+ 35 - 12
src/views/safetyEducationExaminationNew/components/coursewareComponent.vue

@@ -6,6 +6,7 @@
         <vue-office-docx
           v-if="officeType === 'docx'&&!officeNullType"
           :src="lookUrl"
+          :class="pdfType == 1?'':'vertical'"
           @rendered="renderedHandler"
           @error="errorHandler"
         />
@@ -18,6 +19,7 @@
         <vue-office-pdf
           v-if="officeType === 'pdf'&&!officeNullType"
           :src="lookUrl"
+          :class="pdfType == 1?'':'vertical'"
           @rendered="renderedHandler"
           @error="errorHandler"/>
         <p v-if="officeNullType" class="office-null-text">加载失败...</p>
@@ -39,6 +41,7 @@
   import '@vue-office/excel/lib/index.css'
   //引入VueOfficePdf组件
   import VueOfficePdf from '@vue-office/pdf'
+  import JSZip from 'jszip'
   import videoComponent from "@/views/safetyEducationExaminationNew/components/videoComponent.vue";
   export default {
     name: 'addPage',
@@ -64,7 +67,8 @@
         lookUrl:"",
         currentPage: 1,
         totalPages: 1,
-        currentScale: 1.0 // 初始缩放比例
+        currentScale: 1.0, // 初始缩放比例
+        pdfType:1,
       }
     },
     created() {
@@ -85,23 +89,37 @@
             this.$set(this,'lookName',name);
             this.$set(this,'lookUrl',url);
             this.$set(this,'officeNullType',false);
+            this.$set(this,'pdfType',1);
             this.$set(this,'showType',true);
-            // if(type == 'video'){
-            //   this.$nextTick(()=>{
-            //     const video = this.$refs.videoPlayer;
-            //     if (video) {
-            //       video.muted = false;
-            //       video.play().catch(err => {
-            //         console.warn('自动播放被拦截:', err);
-            //       });
-            //     }
-            //   })
-            // }
+            if(type === 'docx'){
+              this._detectDocxOrientation(url);
+            }
           }else{
             this.msgError('文件参数异常')
           }
         })
       },
+      // 解析 docx XML 自动判断纸张方向,设置 pdfType(1纵向 2横向)
+      async _detectDocxOrientation(url) {
+        try {
+          const res = await fetch(url);
+          const buf = await res.arrayBuffer();
+          const zip = await JSZip.loadAsync(buf);
+          const xmlStr = await zip.file('word/document.xml').async('string');
+          const orientMatch = xmlStr.match(/w:pgSz[^/]*?w:orient="([^"]+)"/);
+          if (orientMatch) {
+            this.$set(this, 'pdfType', orientMatch[1] === 'landscape' ? 2 : 1);
+            return;
+          }
+          // 无 orient 属性时比较 w:w 与 w:h
+          const sizeMatch = xmlStr.match(/w:pgSz[^/]*?w:w="(\d+)"[^/]*?w:h="(\d+)"/);
+          if (sizeMatch) {
+            this.$set(this, 'pdfType', parseInt(sizeMatch[1]) > parseInt(sizeMatch[2]) ? 2 : 1);
+          }
+        } catch (e) {
+          // 解析失败保持默认纵向
+        }
+      },
       // 1. 暂停播放
       pauseVideo() {
         const player = this.$refs.videoPlayer;
@@ -126,6 +144,11 @@
 </script>
 
 <style scoped lang="scss">
+  .vertical{
+    ::v-deep .docx{
+      padding:0!important;
+    }
+  }
   .coursewareComponent-addPage {
     flex: 1;
     display: flex;

+ 6 - 2
src/views/safetyEducationExaminationNew/courseManagement/courseManagement/index.vue

@@ -77,6 +77,7 @@
           <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
           <p class="page-submit-common-style-button"
              style="float: right;"
+             v-hasPermiRouter="['exam:course:add']"
              @click="tableButton(1)"
           >新建课程</p>
         </el-form>
@@ -111,17 +112,20 @@
               <span>{{ scope.row.updateTime?parseTime(scope.row.updateTime,"{y}-{m}-{d} {h}:{i}"):parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:course:add']"
                    @click="tableButton(2,scope.row)"
                 >复制</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:course:edit']"
                    @click="tableButton(3,scope.row)"
                 >编辑</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:course:del']"
                    @click="tableButton(4,scope.row)"
                 >删除</p>
                 <p class="table-button-null"></p>
@@ -157,7 +161,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:course:add','exam:course:edit','exam:course:del']),
         //页面状态
         pageType:1,
         //下拉列表数据

+ 1 - 1
src/views/safetyEducationExaminationNew/courseManagement/courseManagement/studyCourses.vue

@@ -29,7 +29,7 @@
 
         <div class="max-big-title-box" v-show="item.showType">
           <div class="big-title-box">
-            <p>课件名称</p><p>来源</p><p>课件类型</p><p>要求时长</p><p>可获学时</p><p>操作</p>
+            <p>课件名称</p><p>来源</p><p>课件类型</p><p>要求时长</p><p>可获学时</p><p v-show="!showType">操作</p>
           </div>
 
           <!-- 小项列表 -->

+ 7 - 2
src/views/safetyEducationExaminationNew/examManagement/examinationArrange/index.vue

@@ -88,6 +88,7 @@
           <p class="page-submit-common-style-button"
              style="float: right;"
              @click="tableButton(1)"
+             v-hasPermiRouter="['exam:elExam:add']"
           >新建考试</p>
         </el-form>
       </div>
@@ -122,21 +123,25 @@
               <span>{{scope.row.status==0?'停用':(scope.row.status==1?'未开始':(scope.row.status==2?'进行中':(scope.row.status==3?'已结束':'')))}}</span>
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="220" show-overflow-tooltip>
+          <el-table-column label="操作" width="220" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
                    v-if="scope.row.showMakeup"
+                   v-hasPermiRouter="['exam:elExam:makeupAdd']"
                    @click="tableButton(2,scope.row)"
                 >补考</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elExam:edit']"
                    @click="tableButton(3,scope.row)"
                 >编辑</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elExam:copy']"
                    @click="tableButton(4,scope.row)"
                 >复制</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elExam:del']"
                    @click="tableButton(5,scope.row)"
                 >删除</p>
                 <p class="table-button-null"></p>
@@ -175,7 +180,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elExam:makeupAdd','exam:elExam:edit','exam:elExam:copy','exam:elExam:del']),
         //页面状态
         pageType:1,
         //下拉列表数据

+ 6 - 6
src/views/safetyEducationExaminationNew/examManagement/examinationArrange/selectScope.vue

@@ -44,11 +44,11 @@
           </el-select>
         </el-form-item>
         <el-form-item label="" prop="majorId">
-          <el-select v-model="queryParams.majorId" collapse-tags multiple placeholder="专业" style="width: 220px">
+          <el-select v-model="queryParams.majorId" filterable collapse-tags multiple placeholder="专业" style="width: 220px">
             <el-option
               v-for="dict in optionListE"
               :key="dict.id"
-              :label="dict.disciplineName"
+              :label="dict.name"
               :value="dict.id"
             />
           </el-select>
@@ -100,7 +100,7 @@
 <script>
   import {
     systemUserGetCategories,systemUserGetAcademicYear,
-    systemUserGetRuleDataByParam,examElDisciplineTypeList,systemDeptCurrentDept,
+    systemUserGetRuleDataByParam,systemUserMajorAllMajors,systemDeptCurrentDept,
   } from "@/api/safetyEducationExaminationNew/index";
   export default {
     name: 'addPage',
@@ -138,7 +138,7 @@
       this.getList();
       this.systemUserGetAcademicYear();
       this.systemUserGetCategories();
-      this.examElDisciplineTypeList();
+      this.systemUserMajorAllMajors();
       this.systemDeptCurrentDept();
     },
     methods: {
@@ -203,8 +203,8 @@
         });
       },
       //查询全部专业类别
-      examElDisciplineTypeList(){
-        examElDisciplineTypeList({}).then(response => {
+      systemUserMajorAllMajors(){
+        systemUserMajorAllMajors({}).then(response => {
           this.$set(this,'optionListE',response.data);
         });
       },

+ 7 - 3
src/views/safetyEducationExaminationNew/examManagement/examinationResult/index.vue

@@ -71,7 +71,9 @@
           </el-form-item>
           <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
           <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
-          <p class="page-add-common-style-button" style="float: right;" @click="exportButton()">导出</p>
+          <p class="page-add-common-style-button"
+             v-hasPermiRouter="['exam:elExamResult:export']"
+             style="float: right;" @click="exportButton()">导出</p>
         </el-form>
       </div>
       <div class="page-content-box">
@@ -87,14 +89,16 @@
           <el-table-column label="合格人数" prop="passedCount" width="140" show-overflow-tooltip/>
           <el-table-column label="缺考人数" prop="absentCount" width="140" show-overflow-tooltip/>
           <el-table-column label="补考人数" prop="makeupCount" width="140" show-overflow-tooltip/>
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elExamResult:scorePage']"
                    @click="tableButton(1,scope.row)"
                 >查看成绩</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elExamResult:rewardPage']"
                    @click="tableButton(2,scope.row)"
                 >学习情况</p>
                 <p class="table-button-null"></p>
@@ -142,7 +146,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elExamResult:scorePage','exam:elExamResult:rewardPage',]),
         //页面状态
         pageType:1,
         //下拉列表数据

+ 6 - 2
src/views/safetyEducationExaminationNew/examManagement/testPaperManagement/index.vue

@@ -73,6 +73,7 @@
           <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
           <p class="page-submit-common-style-button"
              style="float: right;"
+             v-hasPermiRouter="['exam:elPaper:add']"
              @click="tableButton(1)"
           >新建试卷</p>
         </el-form>
@@ -105,17 +106,20 @@
               <span>{{ scope.row.updateTime?parseTime(scope.row.updateTime,"{y}-{m}-{d} {h}:{i}"):parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elPaper:edit']"
                    @click="tableButton(3,scope.row)"
                 >编辑</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elPaper:copy']"
                    @click="tableButton(4,scope.row)"
                 >复制</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elPaper:del']"
                    @click="tableButton(5,scope.row)"
                 >删除</p>
                 <p class="table-button-null"></p>
@@ -151,7 +155,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elPaper:edit','exam:elPaper:copy','exam:elPaper:del',]),
         //页面状态
         pageType:1,
         //下拉列表数据

+ 1 - 68
src/views/safetyEducationExaminationNew/featurePage/learningCourse/index.vue

@@ -81,74 +81,7 @@
           learnedCoursewareCount:0,
           totalCoursewareCount:0,
           progress:0,
-          coursewares:[
-            // {
-            //   coursewareName:'视频课件名称',
-            //   listData2:1,
-            //   learnedDuration:590,
-            //   minLearningDuration:600,
-            //   learnStatus:2,
-            //   attachmentPath:'http://192.168.1.8/statics/bigFile/20260801/0731dbcb-622b-4468-ade2-e20820b122eb.mp4',
-            //   attachmentType:'mp4',
-            //   materialType:'1',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'docx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:0,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/b68f1b1d-99ea-44e0-94b5-4bad4ac3ff1f.docx',
-            //   attachmentType:'.docx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'xlsx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/270eb79e-627b-4fdf-9f1a-397bd9784d39.xlsx',
-            //   attachmentType:'.xlsx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'pdf课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/b251bd69-120c-48d5-b662-c28e308cd61b.pdf',
-            //   attachmentType:'.pdf',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'富文本课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'',
-            //   attachmentType:'',
-            //   materialType:'4',
-            //   articleContent:"<p><img style=\"max-width: 100%;\" src=\"../statics/2026/08/01/e2788e82-745c-4b49-82e0-ebb6f2a30713.jpeg\" alt=\"1.jpeg\">&nbsp;</p>"
-            // },
-            // {
-            //   coursewareName:'xlsx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/270eb79e-627b-4fdf-9f1a-397bd9784d39.xlsx',
-            //   attachmentType:'.xlsx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-          ],
+          coursewares:[],
         },
         //当前选中
         checkLearningIndex:0,

+ 1 - 68
src/views/safetyEducationExaminationNew/featurePage/learningMaterials/index.vue

@@ -64,74 +64,7 @@
           learnedCoursewareCount:0,
           totalCoursewareCount:0,
           progress:0,
-          coursewares:[
-            // {
-            //   coursewareName:'视频课件名称',
-            //   listData2:1,
-            //   learnedDuration:590,
-            //   minLearningDuration:600,
-            //   learnStatus:2,
-            //   attachmentPath:'http://192.168.1.8/statics/bigFile/20260801/0731dbcb-622b-4468-ade2-e20820b122eb.mp4',
-            //   attachmentType:'mp4',
-            //   materialType:'1',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'docx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:0,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/b68f1b1d-99ea-44e0-94b5-4bad4ac3ff1f.docx',
-            //   attachmentType:'.docx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'xlsx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/270eb79e-627b-4fdf-9f1a-397bd9784d39.xlsx',
-            //   attachmentType:'.xlsx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'pdf课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/b251bd69-120c-48d5-b662-c28e308cd61b.pdf',
-            //   attachmentType:'.pdf',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-            // {
-            //   coursewareName:'富文本课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'',
-            //   attachmentType:'',
-            //   materialType:'4',
-            //   articleContent:"<p><img style=\"max-width: 100%;\" src=\"../statics/2026/08/01/e2788e82-745c-4b49-82e0-ebb6f2a30713.jpeg\" alt=\"1.jpeg\">&nbsp;</p>"
-            // },
-            // {
-            //   coursewareName:'xlsx课件名称',
-            //   listData2:1,
-            //   learnedDuration:600,
-            //   minLearningDuration:600,
-            //   learnStatus:1,
-            //   attachmentPath:'http://192.168.1.8/statics/2026/08/01/270eb79e-627b-4fdf-9f1a-397bd9784d39.xlsx',
-            //   attachmentType:'.xlsx',
-            //   materialType:'3',
-            //   articleContent:'',
-            // },
-          ],
+          coursewares:[],
         },
         //当前选中
         checkLearningIndex:0,

+ 11 - 6
src/views/safetyEducationExaminationNew/featurePage/mockExam/index.vue

@@ -161,6 +161,7 @@
         },
         historyOfIncorrectQuestionsPropsData:{},
         viewAnswerShowType:false,
+        submitType:false,
 
       }
     },
@@ -238,6 +239,7 @@
       //左侧数据
       examElExamAttemptReviewSidebar(){
         examElExamAttemptReviewSidebar({ attemptId: this.newData.attemptId, }).then(response => {
+          this.$set(this,'submitType',false);
           this.$set(this,'groupIndex',0);
           this.$set(this,'questionIndex',0);
           this.$set(this, 'examInfo', {
@@ -403,6 +405,7 @@
       //交卷
       examUserExamSubmit(){
         examUserExamSubmit({ attemptId: this.newData.attemptId, }).then(response => {
+          this.$set(this,'submitType',true);
           //清除定时器
           if (this.warningTimer) {
             this.warningTimer.destroy()
@@ -536,12 +539,14 @@
     },
     beforeDestroy() {
       //离开提交
-      if(this.currentQuestion.answerTags[0]){
-        examUserExamAnswerSave({
-          attemptId: this.newData.attemptId,
-          snapshotQuestionId:this.currentQuestion.snapshotQuestionId,
-          userAnswer:this.currentQuestion.answerTags+'',
-        }).then(response => {})
+      if(!this.submitType){
+        if(this.currentQuestion.answerTags[0]){
+          examUserExamAnswerSave({
+            attemptId: this.newData.attemptId,
+            snapshotQuestionId:this.currentQuestion.snapshotQuestionId,
+            userAnswer:this.currentQuestion.answerTags+'',
+          }).then(response => {})
+        }
       }
       //销毁倒计时
       if (this.warningTimer) {

+ 11 - 6
src/views/safetyEducationExaminationNew/featurePage/startTheExam/index.vue

@@ -152,6 +152,7 @@
           canContinueExam:0, //重新考试 0不可以1可以
         },
         historyOfIncorrectQuestionsPropsData:{},
+        submitType:false,
       }
     },
     computed: {
@@ -188,6 +189,7 @@
       //左侧数据
       examElExamAttemptReviewSidebar(){
         examElExamAttemptReviewSidebar({ attemptId: this.newData.attemptId,examKind:this.newData.examKind }).then(response => {
+          this.$set(this,'submitType',false);
           this.$set(this,'groupIndex',0);
           this.$set(this,'questionIndex',0);
           this.$set(this, 'examInfo', {
@@ -352,6 +354,7 @@
       //交卷
       examUserExamSubmit(){
         examUserExamSubmit({ attemptId: this.newData.attemptId, }).then(response => {
+          this.$set(this,'submitType',true);
           //清除定时器
           if (this.warningTimer) {
             this.warningTimer.destroy()
@@ -512,12 +515,14 @@
     },
     beforeDestroy() {
       //离开提交
-      if(this.currentQuestion.answerTags[0]){
-        examUserExamAnswerSave({
-          attemptId: this.newData.attemptId,
-          snapshotQuestionId:this.currentQuestion.snapshotQuestionId,
-          userAnswer:this.currentQuestion.answerTags+'',
-        }).then(response => {})
+      if(!this.submitType){
+        if(this.currentQuestion.answerTags[0]){
+          examUserExamAnswerSave({
+            attemptId: this.newData.attemptId,
+            snapshotQuestionId:this.currentQuestion.snapshotQuestionId,
+            userAnswer:this.currentQuestion.answerTags+'',
+          }).then(response => {})
+        }
       }
       //销毁倒计时
       if (this.warningTimer) {

+ 2 - 1
src/views/safetyEducationExaminationNew/publicConfiguration/basicConfiguration/index.vue

@@ -4,7 +4,8 @@
     <div class="page-container-top-max-big-box-shadow">
       <p class="top-1-p">基础配置</p>
       <p class="top-2-p" @click="resetButton()">重置</p>
-      <p class="top-3-p" @click="submitButton()">保存</p>
+      <p class="top-3-p" @click="submitButton()"
+         v-hasPermiRouter="['exam:elDisciplineType:batchSave']">保存</p>
     </div>
     <div class="bottom-max-big-box">
       <div class="left-max-big-box">

+ 9 - 5
src/views/safetyEducationExaminationNew/publicConfiguration/knowledgePointManagement/index.vue

@@ -26,13 +26,15 @@
           <p class="page-submit-common-style-button"
              style="float: right;"
              @click="tableButton(1)"
+             v-hasPermiRouter="['exam:elKnowledgePoint:add']"
           >添加</p>
           <p class="page-save-common-style-button"
              style="float: right;margin-right:10px;"
              @click="tableButton(2)"
+             v-hasPermiRouter="['exam:elKnowledgePoint:batchAdd']"
           >批量添加</p>
-          <el-form-item
-            style="float: right;">
+          <el-form-item style="float: right;"
+                        v-hasPermiRouter="['exam:elKnowledgePoint:importData']">
             <import-component :importConfig="importConfig"></import-component>
           </el-form-item>
         </el-form>
@@ -54,20 +56,22 @@
               <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
             </template>
           </el-table-column>
-<!--          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">-->
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
                    v-if="scope.row.parentId == 0"
                    @click="tableButton(3,scope.row)"
+                   v-hasPermiRouter="['exam:elKnowledgePoint:add']"
                 >下级</p>
                 <p class="table-button-p"
                    @click="tableButton(4,scope.row)"
+                   v-hasPermiRouter="['exam:elKnowledgePoint:edit']"
                 >编辑</p>
                 <p class="table-button-p"
                    @click="tableButton(5,scope.row)"
+                   v-hasPermiRouter="['exam:elKnowledgePoint:del']"
                 >删除</p>
                 <p class="table-button-null"></p>
               </div>
@@ -139,7 +143,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elKnowledgePoint:add','exam:elKnowledgePoint:edit','exam:elKnowledgePoint:del',]),
         //下拉列表数据
         options:[],
         cascaderProps: {

+ 3 - 2
src/views/safetyEducationExaminationNew/questionBankManagement/practiceSolvingProblems/index.vue

@@ -64,12 +64,13 @@
           <el-table-column label="答题总数" prop="totalAnswerCount" width="200" show-overflow-tooltip/>
           <el-table-column label="答对题数" prop="correctAnswerCount" width="200" show-overflow-tooltip/>
           <el-table-column label="整体正确率%" prop="correctRate" width="200" show-overflow-tooltip/>
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
                    @click="tableButton(2,scope.row)"
+                   v-hasPermiRouter="['exam:elPracticeStat:detail']"
                 >练习统计</p>
                 <p class="table-button-null"></p>
               </div>
@@ -104,7 +105,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elPracticeStat:detail',]),
         //页面状态
         pageType:1,
         //下拉列表数据

+ 6 - 3
src/views/safetyEducationExaminationNew/questionBankManagement/questionBankManagement/index.vue

@@ -64,9 +64,10 @@
           <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
           <p class="page-submit-common-style-button"
              style="float: right;"
+             v-hasPermiRouter="['exam:elQuestionBank:add']"
              @click="tableButton(1)"
           >添加试题</p>
-          <el-form-item style="float: right;">
+          <el-form-item style="float: right;" v-hasPermiRouter="['exam:elQuestionBank:importData']">
             <import-component :importConfig="importConfig"></import-component>
           </el-form-item>
         </el-form>
@@ -95,14 +96,16 @@
               <span style="padding:2px 10px;border:1px solid rgb(245, 154, 35);border-radius:4px;color: rgb(245, 154, 35);background-color:rgba(245, 154, 35,0.2)" v-if="scope.row.shareStatus == 0">不共享</span>
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="200" show-overflow-tooltip>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elQuestionBank:edit']"
                    @click="tableButton(3,scope.row)"
                 >编辑</p>
                 <p class="table-button-p"
+                   v-hasPermiRouter="['exam:elQuestionBank:del']"
                    @click="tableButton(4,scope.row)"
                 >删除</p>
                 <p class="table-button-null"></p>
@@ -149,7 +152,7 @@
     },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['exam:elQuestionBank:edit','exam:elQuestionBank:del',]),
         //页面状态
         pageType:1,
         importConfig:{

+ 1 - 0
src/views/safetyEducationExaminationNew/workbench/LabBindingApply.vue

@@ -180,6 +180,7 @@ export default {
       }
       examElLabEduRelationAudit(obj).then(response => {
         this.msgSuccess(response.message)
+        this.$set(this,'dialogType',false);
         this.getList();
       })
     },

+ 2 - 2
src/views/safetyEducationExaminationNew/workbench/TaskCard.vue

@@ -128,9 +128,9 @@ export default {
     tableButton(type,item){
       let self = this;
       if(type == 1){
-        //刷题
+        //学时要求
         self.$router.push({
-          name: 'practiceQuestions',
+          name: 'knowledgeLearning',
           params: {}
         })
       }else if(type == 2){

+ 2 - 2
src/views/safetyEducationExaminationNew/workbench/UserInfoCard.vue

@@ -134,7 +134,7 @@
                 </div>
                 <div class="shade-sub-box-1">
                   <p>实验室分级</p>
-                  <p :style="'color:'+subData.subData9+';'">{{subData.classLevelName}}</p>
+                  <p :style="'color:'+subData.classLevelColor+';'">{{subData.classLevelName}}</p>
                 </div>
               </div>
               <div class="shade-sub-big-box">
@@ -224,7 +224,7 @@ export default {
       }
     }
     return {
-      textName:'应知应会通识',
+      textName:'测试测试测试,假数据记得改,记得问高部长要',
       userInfo: {
         userType:'',
         userName:'',

+ 6 - 4
src/views/safetyEducationExaminationNew/workbench/index.vue

@@ -11,16 +11,17 @@
       <!-- 实验室绑定申请 -->
       <lab-binding-apply/>
       <!-- 考试情况统计 -->
-      <exam-situation/>
+      <exam-situation v-if="adminType"/>
       <!-- 实验室与人员匹配 -->
-      <lab-person-match/>
+      <lab-person-match v-if="adminType"/>
       <!-- 学时统计 -->
-      <study-hour-stats/>
+      <study-hour-stats v-if="adminType"/>
     </div>
   </div>
 </template>
 
 <script>
+  import { itoOrVideoLimits, } from '@/utils/index'
   import UserInfoCard from './UserInfoCard.vue'
   import TaskCard from './TaskCard.vue'
   import ResourceCard from './ResourceCard.vue'
@@ -43,13 +44,14 @@
     data() {
       return {
         pageType: 1,
+        adminType:false,
       }
     },
     created() {
 
     },
     mounted() {
-
+      this.$set(this,'adminType',itoOrVideoLimits());
     },
     methods: {