dusenyao 3 gadi atpakaļ
vecāks
revīzija
5ddcaacf1a

+ 9 - 8
package-lock.json

@@ -10142,7 +10142,7 @@
     "node_modules/gcls-book-question-ui": {
       "version": "0.1.0",
       "resolved": "file:../gcls-book-question-ui-0.1.0.tgz",
-      "integrity": "sha512-0to64uRiQz1Qi0DFwxd25KFlq0JMk4oxxgXpsziIyCaA6iCDhNfEYIOymve7Stm7sZR2efNksJGpIPmyikkLzQ==",
+      "integrity": "sha512-7QgPA/RVdKNPndbLPZL/68pex//+1zGTOa9MhomT/ab6ieXRWhnf53iYtjWOuzD6MLDf0DzOKyNqWjaLHCexUw==",
       "dependencies": {
         "awe-dnd": "^0.3.4",
         "axios": "^0.21.1",
@@ -10332,6 +10332,7 @@
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
       "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.",
       "dependencies": {
         "block-stream": "*",
         "fstream": "^1.0.12",
@@ -14095,9 +14096,9 @@
       }
     },
     "node_modules/native-request": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz",
-      "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.9.tgz",
+      "integrity": "sha512-KTRwqMwWCkoLZfjes3yBhK6XHwZ5Q1jPsdVra9hug8HNRbMsfTJm8a8L6/WOYi1h5eWNwlBaYy8V5SpJwkDgKw==",
       "optional": true,
       "peer": true
     },
@@ -30810,7 +30811,7 @@
     },
     "gcls-book-question-ui": {
       "version": "file:..\\gcls-book-question-ui-0.1.0.tgz",
-      "integrity": "sha512-0to64uRiQz1Qi0DFwxd25KFlq0JMk4oxxgXpsziIyCaA6iCDhNfEYIOymve7Stm7sZR2efNksJGpIPmyikkLzQ==",
+      "integrity": "sha512-7QgPA/RVdKNPndbLPZL/68pex//+1zGTOa9MhomT/ab6ieXRWhnf53iYtjWOuzD6MLDf0DzOKyNqWjaLHCexUw==",
       "requires": {
         "awe-dnd": "^0.3.4",
         "axios": "^0.21.1",
@@ -33890,9 +33891,9 @@
       }
     },
     "native-request": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz",
-      "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==",
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.9.tgz",
+      "integrity": "sha512-KTRwqMwWCkoLZfjes3yBhK6XHwZ5Q1jPsdVra9hug8HNRbMsfTJm8a8L6/WOYi1h5eWNwlBaYy8V5SpJwkDgKw==",
       "optional": true,
       "peer": true
     },

+ 34 - 13
src/api/app.js

@@ -1,7 +1,6 @@
 import { request, getRequestParams } from '@/utils/request';
 import { getToken } from '@/utils/auth';
-import store from '@/store';
-import { app } from '@/store/mutation-types';
+import { Loading } from 'element-ui';
 
 /**
  * 得到语言列表
@@ -44,7 +43,13 @@ export function fileUpload(SecurityLevel, file) {
   };
   const formData = new FormData();
   formData.append(file.filename, file.file, file.file.name);
-  store.commit(`app/${app.SHOW_PROGRESS}`, true);
+  // store.commit(`app/${app.SHOW_PROGRESS}`, true);
+  let loadingInstance = Loading.service({
+    lock: true,
+    text: 'Loading',
+    spinner: 'el-icon-loading',
+    background: 'rgba(0, 0, 0, 0.7)'
+  });
 
   return request({
     method: 'post',
@@ -54,23 +59,23 @@ export function fileUpload(SecurityLevel, file) {
     headers: {
       'Content-Type': 'multipart/form-data'
     },
-    data: formData,
-    onUploadProgress: progressEvent => {
-      store.commit(
-        `app/${app.SET_PERCENTAGE}`,
-        ((progressEvent.loaded / progressEvent.total) * 100) | 0
-      );
-    }
+    data: formData
+    // onUploadProgress: progressEvent => {
+    //   store.commit(
+    //     `app/${app.SET_PERCENTAGE}`,
+    //     ((progressEvent.loaded / progressEvent.total) * 100) | 0
+    //   );
+    // }
   }).finally(() => {
-    store.commit(`app/${app.SHOW_PROGRESS}`, false);
-    store.commit(`app/${app.SET_PERCENTAGE}`, 0);
+    loadingInstance.close();
+    // store.commit(`app/${app.SHOW_PROGRESS}`, false);
+    // store.commit(`app/${app.SET_PERCENTAGE}`, 0);
   });
 }
 
 /**
  * 下载文件
  * @param {Object} data {FileID 文件ID}
- * @returns
  */
 export function FileDownload(FileID) {
   const { token, isHas } = getToken();
@@ -105,3 +110,19 @@ export function GetFileStoreInfo(data) {
     data
   });
 }
+
+/**
+ * 通用请求
+ * @param {String} MethodName 方法名
+ * @param {Object} data
+ */
+export function getContentFile(MethodName, data) {
+  let params = getRequestParams(MethodName);
+
+  return request({
+    method: 'post',
+    url: process.env.VUE_APP_FileServer,
+    data,
+    params
+  });
+}

+ 53 - 2
src/components/live/CurMaterial.vue

@@ -51,8 +51,9 @@
 <script>
 import pdf from 'vue-pdf';
 import { GetCoursewareContent_View } from '@/api/course';
-import { GetFileStoreInfo } from '@/api/app';
+import { GetFileStoreInfo, getContentFile } from '@/api/app';
 import { FinishMyMaterial } from '@/api/live';
+import { getToken } from '@/utils/auth';
 
 export default {
   components: {
@@ -122,6 +123,9 @@ export default {
       }
     }
   },
+  created() {
+    this.uploadBookWriteParent();
+  },
   methods: {
     dialogMaterialClose() {
       this.$emit('dialogMaterialClose');
@@ -178,7 +182,7 @@ export default {
     },
 
     finishMyMaterial() {
-      if (this.materialType === 'COURSEWARE' && this.exam_answer.length === 0) {
+      if (this.materialType === 'COURSEWARE' && !this.$refs.courseware.handleBookIsDone()) {
         this.$message.warning('请完成课件');
         return;
       }
@@ -195,6 +199,53 @@ export default {
 
     isImage(type) {
       return ['jpeg', 'gif', 'jpg', 'png', 'bmp', 'pic', 'svg'].includes(type);
+    },
+
+    /**
+     * 课件方法
+     */
+    // 上传文件
+    uploadBookWriteParent() {
+      const { token, isHas } = getToken();
+      let UserCode = isHas ? token.user_code : '';
+      let UserType = isHas ? token.user_type : '';
+      let SessionID = isHas ? token.session_id : '';
+      this.bookuploadUrl = `${process.env.VUE_APP_BASE_API}/GCLSFileServer/WebFileUpload?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}&SecurityLevel=Mid`;
+    },
+
+    // 下载文件zip
+    downloadBookWriteParent(idList) {
+      let MethodName = 'file_store_manager-StartCreateFileCompressPack';
+      let data = {
+        file_id_list: JSON.parse(idList)
+      };
+      getContentFile(MethodName, data).then(res => {
+        let id = res.file_compress_task_id;
+        this.bookDownTimer = setInterval(() => {
+          this.checkTaskProgress(id);
+        }, 2000);
+      });
+    },
+
+    // 成功后调用打包进度
+    checkTaskProgress(taskId) {
+      const { token, isHas } = getToken();
+      let UserCode = isHas ? token.user_code : '';
+      let UserType = isHas ? token.user_type : '';
+      let SessionID = isHas ? token.session_id : '';
+
+      let MethodName = 'file_store_manager-GetFileCompressTaskProgress';
+      let data = {
+        file_compress_task_id: taskId
+      };
+      getContentFile(MethodName, data).then(res => {
+        if (res.is_finish === 'true') {
+          clearInterval(this.bookDownTimer);
+          window.open(
+            `${process.env.VUE_APP_BASE_API}/GCLSFileServer/WebFileDownload?UserCode=${UserCode}&UserType=${UserType}&SessionID=${SessionID}&FileID=${res.compress_pack_file_id}`
+          );
+        }
+      });
     }
   }
 };

+ 15 - 1
src/views/live/teacher/CompleteList.vue

@@ -93,7 +93,7 @@ import {
   GetStudentExamAnswer_FinishMaterial
 } from '@/api/live';
 import { GetCoursewareContent_View } from '@/api/course';
-import { GetFileStoreInfo } from '@/api/app';
+import { GetFileStoreInfo, getContentFile } from '@/api/app';
 
 export default {
   components: {
@@ -252,6 +252,20 @@ export default {
       return ['jpeg', 'gif', 'jpg', 'png', 'bmp', 'pic', 'svg'].includes(type);
     },
 
+    // 下载文件zip
+    downloadBookWriteParent(idList) {
+      let MethodName = 'file_store_manager-StartCreateFileCompressPack';
+      let data = {
+        file_id_list: JSON.parse(idList)
+      };
+      getContentFile(MethodName, data).then(res => {
+        let id = res.file_compress_task_id;
+        this.bookDownTimer = setInterval(() => {
+          this.checkTaskProgress(id);
+        }, 2000);
+      });
+    },
+
     listMove(direction) {
       let w = this.$refs.list.clientWidth - this.$refs.avatar.clientWidth;
       if (w > 60) {

+ 40 - 19
src/views/task_details/student/index.vue

@@ -8,31 +8,52 @@
       <div class="task-require"><span class="label">任务要求</span>{{ content }}</div>
       <div class="task-courseware">
         <span class="label">课件任务</span>
-        <el-tag
-          v-for="item in courseware_list"
-          :key="item.courseware_id"
-          color="#fff"
-          :title="item.courseware_name"
-          @click="finishTask(item.courseware_id, item.is_finished)"
-        >
-          <svg-icon icon-class="courseware" /> <span>{{ item.courseware_name }}</span>
-          <svg-icon v-if="item.is_finished === 'true'" class="check-mark" icon-class="check-mark" />
-        </el-tag>
+        <div>
+          <el-tag
+            v-for="item in courseware_list"
+            :key="item.courseware_id"
+            color="#fff"
+            :title="item.courseware_name"
+            @click="finishTask(item.courseware_id, item.is_finished)"
+          >
+            <svg-icon icon-class="courseware" /> <span>{{ item.courseware_name }}</span>
+            <svg-icon
+              v-if="item.is_finished === 'true'"
+              class="check-mark"
+              icon-class="check-mark"
+            />
+          </el-tag>
+        </div>
       </div>
       <div class="accessory-list">
         <span class="label">文档列表</span>
-        <el-tag
-          v-for="item in accessory_list"
-          :key="item.file_id"
-          color="#fff"
-          :title="item.file_name"
-        >
-          <a :href="item.file_url" target="_blank">{{ item.file_name }}</a>
-        </el-tag>
+        <div>
+          <el-tag
+            v-for="item in accessory_list"
+            :key="item.file_id"
+            color="#fff"
+            :title="item.file_name"
+          >
+            <a :href="item.file_url" target="_blank">{{ item.file_name }}</a>
+          </el-tag>
+        </div>
       </div>
       <!-- 完成评价 -->
       <template v-if="my_execute_info.is_finished === 'true'">
         <div class="teacher-commenting">
+          <div>
+            <span class="label">作业</span>
+            <div>
+              <el-tag
+                v-for="item in my_execute_info.homework_list"
+                :key="item.file_id"
+                color="#fff"
+                :title="item.file_name"
+              >
+                <a :href="item.file_url" target="_blank">{{ item.file_name }}</a>
+              </el-tag>
+            </div>
+          </div>
           <div v-if="teaching_type === 10">
             <span class="label">学员课后评价</span>
             <el-input
@@ -333,7 +354,7 @@ $bor-color: #d9d9d9;
     @include el-tag;
 
     border-radius: 4px;
-    margin-right: 8px;
+    margin: 0 8px 6px 0;
     border-color: $bor-color;
   }
 

+ 16 - 4
src/views/task_details/teacher/index.vue

@@ -5,7 +5,7 @@
     <div class="teacher-task-detail-main">
       <div class="student-finish-situation">
         <div>学员完成情况</div>
-        <div class="student-list">
+        <div class="student-list" :style="{ height: student_list_height + 'px' }">
           <ul>
             <li
               v-for="item in student_list"
@@ -31,7 +31,7 @@
           </div>
           <span class="finish-time">{{ curFinishDetail.finish_time_view_txt }}</span>
         </div>
-        <div class="finish-situation">
+        <div ref="situation" class="finish-situation">
           <div class="title">课件任务</div>
           <div class="courseware-list">
             <el-tag
@@ -54,6 +54,12 @@
           </div>
           <div class="title">文档列表</div>
           <div>
+            <el-tag v-for="item in accessory_list" :key="item.file_id" :title="item.file_name">
+              <a :href="item.file_url" target="_blank">{{ item.file_name }}</a>
+            </el-tag>
+          </div>
+          <div class="title">作业列表</div>
+          <div>
             <el-tag
               v-for="item in curFinishDetail.homework_list"
               :key="item.file_id"
@@ -145,7 +151,8 @@ export default {
       student_score: 0,
       dialogVisible: false,
       curCoursewareId: '',
-      loading: false
+      loading: false,
+      student_list_height: 490
     };
   },
   created() {
@@ -221,6 +228,9 @@ export default {
             student_image_url,
             finish_time_view_txt
           };
+          this.$nextTick(() => {
+            this.student_list_height = this.$refs.situation.clientHeight;
+          });
         }
       );
     },
@@ -281,7 +291,7 @@ $bor-color: #d9d9d9;
     @include el-tag;
 
     border-radius: 4px;
-    margin-right: 8px;
+    margin: 0 8px 6px 0;
     border-color: $bor-color;
   }
 
@@ -303,6 +313,8 @@ $bor-color: #d9d9d9;
       }
       // 学员列表
       .student-list {
+        overflow: auto;
+
         ul {
           cursor: pointer;