소스 검색

Merge branch 'beta'

lsc 4 달 전
부모
커밋
793b29a56f
27개의 변경된 파일522개의 추가작업 그리고 118개의 파일을 삭제
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.d56206c33522b62586d88bcbe3269ed5.css
  3. 0 0
      dist/static/css/app.d56206c33522b62586d88bcbe3269ed5.css.map
  4. 0 0
      dist/static/img/rt-ch_echarts2.91aa11b.svg
  5. 0 0
      dist/static/js/app.b1cd1e09bda233effb09.js
  6. 0 0
      dist/static/js/app.b1cd1e09bda233effb09.js.map
  7. 0 0
      dist/static/js/manifest.161e82026ac2ae03ab6f.js.map
  8. BIN
      src/assets/icon/new/appStore.png
  9. 90 16
      src/components/pages/aiAddCourse/addCourse.vue
  10. 9 3
      src/components/pages/aiAddCourse/evaList.vue
  11. 2 1
      src/components/pages/aiAddCourse/jsmind2.vue
  12. 77 14
      src/components/pages/aiEasy/addCourse.vue
  13. 9 3
      src/components/pages/aiEasy/evaList.vue
  14. 1 0
      src/components/pages/aiEasy/jsmind2.vue
  15. 17 5
      src/components/pages/classroomObservation/components/analysisSpecialItem.vue
  16. 55 36
      src/components/pages/classroomObservation/components/echartsSpectrogram.vue
  17. 16 2
      src/components/pages/components/appDialog.vue
  18. 6 6
      src/components/pages/components/exportWorksDialog.vue
  19. 11 4
      src/components/pages/components/lookWork.vue
  20. 12 1
      src/components/pages/components/studentWorksDetail.vue
  21. 15 0
      src/components/pages/components/worksDetail2.vue
  22. 71 12
      src/components/pages/easy/addCourse.vue
  23. 94 12
      src/components/pages/newCourse/addCourse.vue
  24. 11 0
      src/components/pages/studentManage/student.vue
  25. 14 0
      src/components/pages/synergyCourse/course.vue
  26. 7 0
      src/components/pages/works.vue
  27. 4 2
      src/mixins/mixin.js

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.1db91885f9c15d2c94fdedde5008c927.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.c046dd5e92c8da101466.js></script><script type=text/javascript src=./static/js/app.bc838ed2f3f2ce5f0099.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.d56206c33522b62586d88bcbe3269ed5.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.c046dd5e92c8da101466.js></script><script type=text/javascript src=./static/js/app.b1cd1e09bda233effb09.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.d56206c33522b62586d88bcbe3269ed5.css


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.d56206c33522b62586d88bcbe3269ed5.css.map


+ 0 - 0
dist/static/img/rt-ch_echarts2.5e1c441.svg → dist/static/img/rt-ch_echarts2.91aa11b.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.b1cd1e09bda233effb09.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.b1cd1e09bda233effb09.js.map


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/manifest.161e82026ac2ae03ab6f.js.map


BIN
src/assets/icon/new/appStore.png


+ 90 - 16
src/components/pages/aiAddCourse/addCourse.vue

@@ -3450,6 +3450,11 @@
                                     </div>
                                     <div v-if="item1.type == 13" class="chapter_upload_l_i13" style="margin-left: 1px">
                                     </div>
+                                    <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                   </div>
                                   <div class="chapter_upload_n">
                                     <input readonly="true" v-if="
@@ -3508,6 +3513,22 @@
                                       " readonly="true" @click="
                                         openUpdateSource(itemTaskIndex, index1)
                                       " />
+                                       <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
                                   </div>
                                   <div class="chapter_upload_ic">
                                     <div class="chapter_upload_noSee" v-if="item1.type == 12"></div>
@@ -3557,7 +3578,7 @@
                                       ">
                                       <div></div>
                                     </div>
-                                    <div class="chapter_upload_ic_edit" v-if="item1.type == 8"
+                                    <div class="chapter_upload_ic_edit" v-if="item1.type == 8 || item1.type==15"
                                       @click="selectLine(itemTaskIndex, index1)">
                                       <div></div>
                                     </div>
@@ -3744,6 +3765,11 @@
                                     </div>
                                     <div v-if="item1.type == 13" class="chapter_upload_l_i13" style="margin-left: 1px">
                                     </div>
+                                    <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                   </div>
                                   <div class="chapter_upload_n">
                                     <span style="
@@ -3797,6 +3823,22 @@
                                         overflow: hidden;
                                         text-overflow: ellipsis;
                                       " readonly="true" @click="selectLine(itemTaskIndex, index1)" />
+                                      <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
                                   </div>
                                   <div class="chapter_upload_ic">
                                     <div class="chapter_upload_noSee" v-if="item1.type == 12"></div>
@@ -3841,7 +3883,7 @@
                                       ">
                                       <div></div>
                                     </div>
-                                    <div class="chapter_upload_ic_edit" v-if="item1.type == 8"
+                                    <div class="chapter_upload_ic_edit" v-if="item1.type == 8 || item1.type == 15"
                                       @click="selectLine(itemTaskIndex, index1)">
                                       <div></div>
                                     </div>
@@ -7646,8 +7688,7 @@ const getFile = (url) => {
 };
 
 export default {
-  mixins: [ myMixin ],
-  components: {  
+  components: {
     EditorBar,
     Mind,
     Time,
@@ -18684,7 +18725,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         this.aiText3 = this.aiJson.aiTaskG3
         this.aiCallBack = [callback, index]
       } else if (type == "aiTaskG3") {
-        if (this.taskGLoading[callback] && (this.taskGLoading[callback][0][2])) {
+        if (this.taskGLoading[callback] && this.taskGLoading[callback][0] && (this.taskGLoading[callback][0][2])) {
           this.$message({
             message: "请回答完毕后再次发送",
             type: "warning"
@@ -18695,7 +18736,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         this.aiText = this.aiJson.aiTaskG3
         this.aiCallBack = callback
       } else if (type == "aiTaskG2") {
-        if (this.taskGLoading[callback] && (this.taskGLoading[callback][0][1])) {
+        if (this.taskGLoading[callback] && this.taskGLoading[callback][0] && (this.taskGLoading[callback][0][1])) {
           this.$message({
             message: "请回答完毕后再次发送",
             type: "warning"
@@ -26062,21 +26103,49 @@ ${msg}
     },
     openAddApp(i) {
       this.lineCount = i;
-      this.$refs.appDialog.openG("", "", "", "", 1);
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+
+      let _obj = {}
+
+      if (_index != -1) {
+        _obj = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData[_index]
+      }
+
+      this.$refs.appDialog.openG(_obj, "", "", "", 2);
     },
     selectAppSuccess({ data, type }) {
-      console.log(data);
-      data.forEach(i => {
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+      if (_index != -1) {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.splice(_index, 1);
         this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
           this.lineCount
         ].chapterData.push({
-          name: i.name,
-          title: i.name,
-          url: i.url,
-          type: 8
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
         });
-        this.imgChange1(null, null, 8, this.lineCount);
-      });
+      } else {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.push({
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
+        });
+      }
+      this.imgChange1(null, null, 8, this.lineCount);
       this.dialogVisible7 = false;
     }
   },
@@ -27509,7 +27578,7 @@ ${msg}
 .chapter_upload_l_i6,
 .chapter_upload_l_i12,
 .chapter_upload_l_i14,
-.chapter_upload_l_i13 {
+.chapter_upload_l_i15 {
   width: 15px;
   height: 15px;
   background-size: 100% 100%;
@@ -27531,6 +27600,11 @@ ${msg}
   background-image: url("../../../assets/icon/new/u_source.png");
 }
 
+.chapter_upload_l_i15 {
+  background-image: url("../../../assets/icon/new/appStore.png");
+}
+
+
 .chapter_upload_l_i6 {
   background-image: url("../../../assets/icon/new/u_picture.png");
 }

+ 9 - 3
src/components/pages/aiAddCourse/evaList.vue

@@ -58,13 +58,13 @@
                         </div>
                     </div>
                 </div>
-                <!-- <div class="eva_btn_box">
+                <div class="eva_btn_box" v-if="eList && eList.length">
                     <div class="eva_btn_left_box">
                         <button class="c_pub_button_add pub_btn_eval_img" @click="addEList()">
                             添加
                         </button>
                     </div>
-                </div> -->
+                </div>
             </div>
         </div>
     </div>
@@ -513,7 +513,13 @@ ${this.aiJson['aiRateRule']}
                 });
         },
         addEList() {
-
+            this.eList.push({
+                isai: "1",
+                target: "",
+                value: "",
+                detail: "",
+                rule: ""
+            })
         },
         deletEList(index) {
             this.$confirm('确定删除吗?').then(() => {

+ 2 - 1
src/components/pages/aiAddCourse/jsmind2.vue

@@ -89,7 +89,7 @@ export default {
   watch: {
     mindData: {
       handler: function (cur, old) {
-        console.log(cur.task);
+        console.log('123123123',cur.task);
         let data = this.setMindData(cur)
         this.mind = data;
         this.$forceUpdate()
@@ -257,6 +257,7 @@ export default {
       }
       let _JsonName = Object.keys(_eJson)
       for(var i = 0;i<_JsonName.length;i++){
+        if(!_JsonName[i]) continue; // 如果_JsonName[i]为空,则跳过当前循环
         let item = _eJson[_JsonName[i]]
         data.data.push({
           id: _JsonName[i],

+ 77 - 14
src/components/pages/aiEasy/addCourse.vue

@@ -468,6 +468,9 @@
                                 </div>
                                 <div v-if="item1.type == 13" class="chapter_upload_l_i13" style="margin-left: 1px">
                                 </div>
+
+                                <div v-if="item1.type == 15" class="chapter_upload_l_i15" style="margin-left: 1px">
+                                </div>
                               </div>
                               <div class="chapter_upload_n" :class="{dataTips: !item1.fileid}">
                                 <div v-if="
@@ -491,6 +494,9 @@
                                 <div v-if="item1.type == 14" class="chapter_upload_box" @click="
                                         openUpdateSource(0, index1)
                                         " >{{ item1.title ? item1.title : '链接' }}</div>
+                                   <div v-if="item1.type == 15" class="chapter_upload_box" @click="
+                                        openUpdateSource(0, index1)
+                                        " >{{ item1.title ? item1.title : 'Ai应用' }}</div>
                               </div>
                               <div class="chapter_upload_ic">
                                 <div class="chapter_upload_noSee" v-if="item1.type == 12"></div>
@@ -540,7 +546,7 @@
                                   ">
                                   <div></div>
                                 </div>
-                                <div class="chapter_upload_ic_edit" v-if="item1.type == 8"
+                                <div class="chapter_upload_ic_edit" v-if="item1.type == 8 || item1.type == 15"
                                   @click="selectLine(0, index1)">
                                   <div></div>
                                 </div>
@@ -2938,6 +2944,11 @@
                                       class="chapter_upload_l_i13"
                                       style="margin-left: 1px"
                                     ></div>
+                                    <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                   </div>
                                   <div class="chapter_upload_n">
                                     <input
@@ -3020,6 +3031,22 @@
                                         openUpdateSource(itemTaskIndex, index1)
                                       "
                                     />
+                                    <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
                                   </div>
                                   <div class="chapter_upload_ic">
                                     <div
@@ -3091,7 +3118,7 @@
                                     </div>
                                     <div
                                       class="chapter_upload_ic_edit"
-                                      v-if="item1.type == 8"
+                                      v-if="item1.type == 8 || item1.type == 15"
                                       @click="selectLine(itemTaskIndex, index1)"
                                     >
                                       <div></div>
@@ -7055,6 +7082,7 @@ import MindTask from "./jsmind2";
 import ConvertApi from 'convertapi-js'
 let convertApi = ConvertApi.auth('secret_U1EO5rhgMCnoBnBT')
 import appDialog from '../components/appDialog.vue'
+import { myMixin } from "@/mixins/mixin.js"
 
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
@@ -7106,6 +7134,7 @@ const getFile = (url) => {
 };
 
 export default {
+  mixins: [ myMixin ],
   components: {
     EditorBar,
     Mind,
@@ -17912,7 +17941,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         this.aiText = this.aiJson.aiTaskName
         this.aiCallBack = callback
       } else if (type == "aiTaskG3") {
-        if (this.taskGLoading[callback] && (this.taskGLoading[callback][0][2])) {
+        if (this.taskGLoading[callback] && this.taskGLoading[callback][0] && (this.taskGLoading[callback][0][2])) {
           this.$message({
             message: "请回答完毕后再次发送",
             type: "warning"
@@ -17923,7 +17952,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         this.aiText = this.aiJson.aiTaskG3
         this.aiCallBack = callback
       } else if (type == "aiTaskG2") {
-        if (this.taskGLoading[callback] && (this.taskGLoading[callback][0][1])) {
+        if (this.taskGLoading[callback] && this.taskGLoading[callback][0] && (this.taskGLoading[callback][0][1])) {
           this.$message({
             message: "请回答完毕后再次发送",
             type: "warning"
@@ -25410,21 +25439,49 @@ ${msg}
     },
     openAddApp(i) {
       this.lineCount = i;
-      this.$refs.appDialog.openG("", "", "", "", 1);
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+
+      let _obj = {}
+
+      if (_index != -1) {
+        _obj = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData[_index]
+      }
+
+      this.$refs.appDialog.openG(_obj, "", "", "", 2);
     },
     selectAppSuccess({ data, type }) {
-      console.log(data);
-      data.forEach(i => {
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+      if (_index != -1) {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.splice(_index, 1);
         this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
           this.lineCount
         ].chapterData.push({
-          name: i.name,
-          title: i.name,
-          url: i.url,
-          type: 8
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
         });
-        this.imgChange1(null, null, 8, this.lineCount);
-      });
+      } else {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.push({
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
+        });
+      }
+      this.imgChange1(null, null, 8, this.lineCount);
       this.dialogVisible7 = false;
     }
   },
@@ -26834,7 +26891,8 @@ ${msg}
 .chapter_upload_l_i6,
 .chapter_upload_l_i12,
 .chapter_upload_l_i14,
-.chapter_upload_l_i13 {
+.chapter_upload_l_i13,
+.chapter_upload_l_i15 {
   width: 15px;
   height: 15px;
   background-size: 100% 100%;
@@ -26856,6 +26914,11 @@ ${msg}
   background-image: url("../../../assets/icon/new/u_source.png");
 }
 
+.chapter_upload_l_i15 {
+  background-image: url("../../../assets/icon/new/appStore.png");
+}
+
+
 .chapter_upload_l_i6 {
   background-image: url("../../../assets/icon/new/u_picture.png");
 }

+ 9 - 3
src/components/pages/aiEasy/evaList.vue

@@ -58,13 +58,13 @@
                         </div>
                     </div>
                 </div>
-                <!-- <div class="eva_btn_box">
+                <div class="eva_btn_box" v-if="eList && eList.length">
                     <div class="eva_btn_left_box">
                         <button class="c_pub_button_add pub_btn_eval_img" @click="addEList()">
                             添加
                         </button>
                     </div>
-                </div> -->
+                </div>
             </div>
         </div>
     </div>
@@ -510,7 +510,13 @@ ${this.aiJson['aiRateRule']}
                 });
         },
         addEList() {
-
+            this.eList.push({
+                isai: "1",
+                target: "",
+                value: "",
+                detail: "",
+                rule: ""
+            })
         },
         deletEList(index) {
             this.$confirm('确定删除吗?').then(() => {

+ 1 - 0
src/components/pages/aiEasy/jsmind2.vue

@@ -257,6 +257,7 @@ export default {
       }
       let _JsonName = Object.keys(_eJson)
       for(var i = 0;i<_JsonName.length;i++){
+        if(!_JsonName[i]) continue; // 如果_JsonName[i]为空,则跳过当前循环
         let item = _eJson[_JsonName[i]]
         data.data.push({
           id: _JsonName[i],

+ 17 - 5
src/components/pages/classroomObservation/components/analysisSpecialItem.vue

@@ -921,14 +921,15 @@ CH:${_CH}
           let _tableData = res;
 
 					let _delIndex = _tableData.findIndex(i=>i.includes(this.converter("时间点")))
-
+          console.log("👉===",_dataList,_tableData)
 					_tableData = _tableData.slice(_delIndex+1)
-
+          console.log()
           let _result = [];
           let identity = "老师"; //0:老师 1:学生
           let startTime = "";
           let endTime = "";
           let sumTime = 0;
+          let upTime = '00:00:00';
 
           _dataList.forEach((item, index) => {
             if (index == 0) {
@@ -936,13 +937,17 @@ CH:${_CH}
               identity = item.role;
               startTime = item.startTime;
               endTime = item.endTime;
-              sumTime = this.convertToSeconds(item.time);
+              sumTime = (this.convertToSeconds(item.endTime) - this.convertToSeconds(upTime));
+              upTime = item.endTime
+              // console.log(item.endTime,item.startTime,(this.convertToSeconds(item.endTime) - this.convertToSeconds(item.startTime)))
               return;
             }
             if (item.role == identity) {
               //没更换角色
-              sumTime += this.convertToSeconds(item.time);
+              sumTime += (this.convertToSeconds(item.endTime) - this.convertToSeconds(upTime));
               endTime = item.endTime;
+              upTime = item.endTime
+              // console.log(item.endTime,item.startTime,(this.convertToSeconds(item.endTime) - this.convertToSeconds(item.startTime)))
             } else {
               //更换角色了
               _result.push({
@@ -954,10 +959,17 @@ CH:${_CH}
               identity = item.role;
               startTime = item.startTime;
               endTime = item.endTime;
-              sumTime = this.convertToSeconds(item.time);
+              sumTime = (this.convertToSeconds(item.endTime) - this.convertToSeconds(upTime));
+              upTime = item.endTime
+              // console.log(item.endTime,item.startTime,(this.convertToSeconds(item.endTime) - this.convertToSeconds(item.startTime)))
+            }
+            if(index==_dataList.length-1){
+              console.log("👉???",this.convertToSeconds(item.endTime))
             }
           });
 
+           console.log(_result.reduce((pre,cur)=>{return pre+=cur.sumTime},0))
+          console.log("→xxx",_result)
           let breakpoint = [];
 
 					breakpoint = _tableData.map(i=>this.convertToSeconds(i[0]))

+ 55 - 36
src/components/pages/classroomObservation/components/echartsSpectrogram.vue

@@ -31,7 +31,7 @@ export default {
       ctx.scale(1, 1);
 
       let canvasWidth = this.canvas.width;
-			let canvasWidth2 = canvasWidth - 20
+      let canvasWidth2 = canvasWidth - 20;
       let canvasHeight = this.canvas.height;
       ctx.imageSmoothingEnabled = false;
       ctx.lineWidth = 1;
@@ -55,7 +55,7 @@ export default {
       ctx.font = `${fontSize}px serif`;
       ctx.fillText("学生", 128, canvasHeight - 7);
       let sum = this.data.data.reduce((pre, cur) => (pre += cur.value), 0);
-			console.log(sum)
+      console.log(sum);
       // 当前x位置的起始点
       let currentX = 10;
       // 计算并绘制每个区域
@@ -83,30 +83,43 @@ export default {
       // });
 
       let interval = parseFloat((this.step / (sum / canvasWidth2)).toFixed(2));
+      let _lastI = 0;
       //绘制竖线
       for (let i = 0; i < canvasWidth2; i += interval) {
         ctx.beginPath();
-				ctx.strokeStyle = '#BFBFBF'
-        ctx.moveTo(i==0?10:i, canvasHeight - 70);
-        ctx.lineTo(i==0?10:i, canvasHeight - 55);
+        ctx.strokeStyle = "#BFBFBF";
+        ctx.moveTo(i == 0 ? 10 : i, canvasHeight - 70);
+        ctx.lineTo(i == 0 ? 10 : i, canvasHeight - 55);
         ctx.stroke();
-				ctx.fillStyle = "#868686";
-        let timeLabel = (((i / canvasWidth2) * sum)/60).toFixed(0); // 时间标识计算
-				ctx.font = `${fontSize}px serif`;
-				if(i==0){
-					ctx.fillText(`${timeLabel}min`, i+10, canvasHeight - 40);
-				}else if((i+interval)> canvasWidth2){
-					ctx.fillText(`${timeLabel}min`, i - 20, canvasHeight - 40);
-				}else{
-					ctx.fillText(`${timeLabel}min`, i-15, canvasHeight - 40);
-				}
+        ctx.fillStyle = "#868686";
+        let timeLabel = (((i / canvasWidth2) * sum) / 60).toFixed(0); // 时间标识计算
+        ctx.font = `${fontSize}px serif`;
+        if (i == 0) {
+          ctx.fillText(`${timeLabel}min`, i + 10, canvasHeight - 40);
+        } else if (i + interval >= canvasWidth2) {
+          ctx.fillText(`${timeLabel}min`, i - 20, canvasHeight - 40);
+        } else {
+          ctx.fillText(`${timeLabel}min`, i - 15, canvasHeight - 40);
+        }
+        _lastI = i;
+      }
+      if (canvasWidth2 - _lastI >60) {
+        ctx.beginPath();
+        ctx.strokeStyle = "#BFBFBF";
+        ctx.moveTo(canvasWidth2 + 10, canvasHeight - 70);
+        ctx.lineTo(canvasWidth2 + 10, canvasHeight - 55);
+        ctx.stroke();
+        ctx.fillStyle = "#868686";
+        let timeLabel = (sum / 60).toFixed(0); // 时间标识计算
+        ctx.font = `${fontSize}px serif`;
+        ctx.fillText(`${timeLabel}min`, canvasWidth2 - 20, canvasHeight - 40);
       }
 
-			ctx.beginPath();
-			ctx.strokeStyle = '#BFBFBF'
-			ctx.moveTo(10, canvasHeight - 55);
-			ctx.lineTo(canvasWidth2+10, canvasHeight - 55);
-			ctx.stroke();
+      ctx.beginPath();
+      ctx.strokeStyle = "#BFBFBF";
+      ctx.moveTo(10, canvasHeight - 55);
+      ctx.lineTo(canvasWidth2 + 10, canvasHeight - 55);
+      ctx.stroke();
     },
     drawRoundedRect(ctx, x, y, width, height, radius) {
       // 限制 radius 的最大值,防止它超过矩形的宽度或高度的一半
@@ -130,22 +143,28 @@ export default {
       ctx.closePath();
       ctx.fill(); // 填充颜色
     },
-		formatTime(seconds) {
-  let h = Math.floor(seconds / 3600); // 小时
-  let m = Math.floor((seconds % 3600) / 60); // 分钟
-  let s = Math.floor(seconds % 60); // 秒数
-  
-  // 格式化为两位数
-  let formattedTime;
-  if (h > 0) {
-    // 如果有小时部分,格式化为 hh:mm:ss
-    formattedTime = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
-  } else {
-    // 否则,格式化为 mm:ss
-    formattedTime = `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
-  }
-  return formattedTime;
-}
+    formatTime(seconds) {
+      let h = Math.floor(seconds / 3600); // 小时
+      let m = Math.floor((seconds % 3600) / 60); // 分钟
+      let s = Math.floor(seconds % 60); // 秒数
+
+      // 格式化为两位数
+      let formattedTime;
+      if (h > 0) {
+        // 如果有小时部分,格式化为 hh:mm:ss
+        formattedTime = `${h
+          .toString()
+          .padStart(2, "0")}:${m
+          .toString()
+          .padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
+      } else {
+        // 否则,格式化为 mm:ss
+        formattedTime = `${m
+          .toString()
+          .padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
+      }
+      return formattedTime;
+    }
   },
   mounted() {
     this.init();

+ 16 - 2
src/components/pages/components/appDialog.vue

@@ -92,7 +92,7 @@
           v-if="showType !== '' && !getDataLoading"
           v-for="(item, index) in dataList"
           :key="item.id"
-          :class="{checkActive: appJson.id == item.id}"
+          :class="{checkActive: appJson.id == item.id || selectAppObj.id==item.id || selectAppList.map(i=>i.id).includes(item.id)}"
           @click="checkApp(item)"
         >
           <div class="ac_c_i_top">
@@ -245,7 +245,7 @@
                   i => i.type == item2.id
                 )"
                 :key="item.id"
-                 @click="checkApp(item)" :class="{checkActive: appJson.id == item.id || selectAppList.map(i=>i.id).includes(item.id)}"
+                 @click="checkApp(item)" :class="{checkActive: appJson.id == item.id  || selectAppObj.id == item.id|| selectAppList.map(i=>i.id).includes(item.id)}"
               >
                 <div class="ac_c_i_top">
                   <div class="ac_c_i_t_left">
@@ -454,6 +454,7 @@ export default {
       region: "cn",
       type:0,//0 工具  1学习内容添加
       selectAppList:[],
+      selectAppObj:{},
     };
   },
   watch: {
@@ -489,11 +490,14 @@ export default {
     async openG(appJson, unitIndex, itemTaskIndex, toolIndex,type = 0) {
       this.selectAppList = [];
       this.appJson = {};
+      this.selectAppObj = {};
       if(type == 0){
         this.appJson = appJson;
         this.itemTaskIndex = itemTaskIndex;
         this.toolIndex = toolIndex;
         this.unitIndex = unitIndex;
+      }else if(type==2){
+        this.selectAppObj = appJson;
       }
       console.log(type)
       this.type = type;
@@ -523,6 +527,10 @@ export default {
         this.$emit("success",{data:JSON.parse(JSON.stringify(this.selectAppList)),type:this.type})
         this.dialogVisible = false
         this.selectAppList = [];
+      }else if(this.type==2){
+        this.$emit("success",{data:JSON.parse(JSON.stringify(this.selectAppObj)),type:this.type})
+        this.dialogVisible = false
+        this.selectAppObj = {};
       }
     },
     changeType(newIndex) {
@@ -557,6 +565,12 @@ export default {
         }else{
           this.selectAppList.push(item)
         }
+      }else if(this.type==2){
+        if(this.selectAppObj.id == item.id){
+          this.selectAppObj = {}
+      }else {
+        this.selectAppObj = item
+      }
       }
 
     },

+ 6 - 6
src/components/pages/components/exportWorksDialog.vue

@@ -831,7 +831,7 @@ export default {
       oid: this.$route.query.oid,
       org: this.$route.query.org,
       uid2: this.uid,
-      worksDialogCon2: this.worksDialogCon,
+      worksDialogCon2: JSON.parse(JSON.stringify(this.worksDialogCon)),
       courseName: "",
       loading: false,
       tableData: [],
@@ -905,10 +905,10 @@ export default {
 
         delete valT.content;
         delete valT.comment;
-        console.log("valT", JSON.parse(JSON.stringify(val)));
+        // console.log("valT", JSON.parse(JSON.stringify(val)));
 
         let data = Object.values(valT);
-        console.log("data", JSON.parse(JSON.stringify(data)));
+        // console.log("data", JSON.parse(JSON.stringify(data)));
 
         let new1 = data.reduce(function(pre, next, index) {
           return pre + next * 1;
@@ -930,7 +930,7 @@ export default {
           }
         });
 
-        console.log("TimeList", TimeList);
+        // console.log("TimeList", TimeList);
         TimeList.sort(function(a, b) {
           return a - b; //从小到大排序
         });
@@ -1058,7 +1058,7 @@ export default {
             let framework = [];
             if (res.data[0].length) {
               let elistData = JSON.parse(res.data[0][0].chapters);
-              console.log("elistData", JSON.parse(JSON.stringify(elistData)));
+              // console.log("elistData", JSON.parse(JSON.stringify(elistData)));
 
               elistData.forEach((e, i) => {
                 framework[i] = {
@@ -1267,7 +1267,7 @@ export default {
               });
             });
 
-            console.log("framework", JSON.parse(JSON.stringify(framework)));
+            // console.log("framework", JSON.parse(JSON.stringify(framework)));
 
             this.Kloading = false;
 

+ 11 - 4
src/components/pages/components/lookWork.vue

@@ -817,6 +817,7 @@
 
 <script>
 import MarkdownIt from "markdown-it";
+import { myMixin } from "@/mixins/mixin.js"
 
 const getFile = url => {
   return new Promise((resolve, reject) => {
@@ -858,6 +859,8 @@ const getFile = url => {
   });
 };
 export default {
+  mixins: [ myMixin ],
+
   props: {
     id: {
       type: String
@@ -1136,8 +1139,12 @@ export default {
       // console.log(params);
       this.ajax
         .post(this.$store.state.api + "updateWorksEvaTwo1", params)
-        .then(res => {})
+        .then(res => {
+            this.addOp3('1', "", { courseid: this.cid ,type: "course_homeWorkScore_edit" }, "success")
+        })
         .catch(err => {
+          this.addOp3('1', "", { courseid: this.cid ,type: "course_homeWorkScore_edit" }, err)
+
           this.$message.error("评价失败");
           console.error(err);
         });
@@ -1198,11 +1205,11 @@ export default {
             var wordInfo = res.data[12]; //文档作业
             this.workEvaList = res.data[13];
 
-            // console.log('res.data[0][0]',res.data[0][0]);
-            if (res.data[0] && res.data[0][0] && res.data[0][0].length) {
+            // console.log('res.data[0][0]',res.data[0]);
+            if (res.data[0] && res.data[0].length) {
                 this.resData = JSON.parse(JSON.stringify(res.data[0][0]));
             }else{
-              this.resData=[]
+                this.resData=[]
             }
 
             this.courseName = res.data[0][0].course;

+ 12 - 1
src/components/pages/components/studentWorksDetail.vue

@@ -1515,7 +1515,12 @@
       <div slot="title" class="header-title">
         <div style="color: #fff">导出作业集</div>
       </div>
-      <exportWorksDialog  :key="exportW" :digNum="digNum" :oid="oid" :worksDialog.sync="worksDialog" :worksDialogCon="worksDialogCon" :uid="exportPdfSetUid" :cid="checkCourse"></exportWorksDialog>
+      <exportWorksDialog  
+      :key="exportW" :digNum="digNum" 
+      :oid="oid" :worksDialog.sync="worksDialog" 
+      :worksDialogCon="worksDialogCon" 
+      :uid="exportPdfSetUid" 
+      :cid="checkCourse"></exportWorksDialog>
     </el-dialog>
   </div>
 </template>
@@ -1529,10 +1534,13 @@ import html2canvas from "html2canvas";
 import LookWorks from "./lookWork.vue";
 import exportDataDialog from "./exportDataDialog.vue";
 import exportWorksDialog from "./exportWorksDialog.vue";
+import { myMixin } from "@/mixins/mixin.js"
 
 
 import jspdf from "jspdf";
 export default {
+  mixins: [ myMixin ],
+
   components: {
     StudentData,
     studentReport,
@@ -1833,11 +1841,14 @@ export default {
     },
     // 子元素调用父元素 按任务查看导出作业集
     childExportPdfSetBtn(val) {
+
       this.worksDialog = true;
       this.worksDialogCon = val.con;
       this.exportPdfSetUid = val.uid;
       this.digNum = 0;
       this.exportW++
+      this.addOp3('1', "", { courseid: val.con.id ,type: "course_homeWork_export" }, "success")
+
     },
     backPage(){
       this.$emit("StuCancel");

+ 15 - 0
src/components/pages/components/worksDetail2.vue

@@ -1615,7 +1615,11 @@ import saveAs from "file-saver";
 import html2canvas from "html2canvas";
 import jspdf from "jspdf";
 import LookWork from "./lookWork.vue";
+import { myMixin } from "@/mixins/mixin.js"
+
 export default {
+  mixins: [ myMixin ],
+
   components: {
     StudentData,
     LookWork,
@@ -1966,6 +1970,7 @@ export default {
       })
       .then(() => {
         this.exportPdfSetAllWork()
+
       })
       .catch(() => {
         return;
@@ -2005,12 +2010,14 @@ export default {
     },
     // 按任务查看导出作业集
     exportPdfSetBtn(uid, con) {
+
       this.worksDialog = true;
       this.worksDialogCon = con;
       this.exportPdfSetUid = uid;
       this.digNum = 0
 
       this.exportW++
+      this.addOp3('1', "", { courseid: this.id ,type: "course_homeWork_export" }, "success")
     },
     // 子元素调用父元素 按任务查看导出作业集
     childExportPdfSetBtn(val) {
@@ -2020,19 +2027,27 @@ export default {
       this.digNum = 0
 
       this.exportW++
+      this.addOp3('1', "", { courseid: val.con.id ,type: "course_homeWork_export" }, "success")
+
     },
     // 导出所有作业
     exportPdfSetAllWork(){
+
       this.worksDialog = true;
       this.digNum = 1
       this.exportW++
+      this.addOp3('1', "", { courseid: this.id ,type: "course_homeWork_exportS" }, "success")
+
     },
    // 批量导出作业
    exportPdfSetBatchWork(){
       if (!this.multipleSelection.length) return
+
       this.worksDialog = true;
       this.digNum = 2
       this.exportW++
+      this.addOp3('1', "", { courseid: this.id ,type: "course_homeWork_exportSList" }, "success")
+
     },
    
  

+ 71 - 12
src/components/pages/easy/addCourse.vue

@@ -511,6 +511,11 @@
                                     class="chapter_upload_l_i13"
                                     style="margin-left: 1px"
                                   ></div>
+                                  <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                 </div>
                                 <div class="chapter_upload_n">
                                   <input
@@ -568,6 +573,24 @@
                                     readonly="true"
                                     @click="selectLine(0, index1)"
                                   />
+
+                                  <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
+
                                   <input
                                     :placeholder="
                                       item1.title ? item1.title : '链接'
@@ -643,7 +666,7 @@
                                   </div>
                                   <div
                                     class="chapter_upload_ic_edit"
-                                    v-if="item1.type == 8"
+                                    v-if="item1.type == 8 || item1.type == 15"
                                     @click="selectLine(0, index1)"
                                   >
                                     <div></div>
@@ -8148,6 +8171,7 @@ import interVideo from "../interVideo/index.vue";
 import englishRight from "./commpont/englishRight.vue";
 import EnglishVoice from "../EnglishVoice/index.vue";
 import appDialog from "../components/appDialog.vue";
+import { myMixin } from "@/mixins/mixin.js"
 
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
@@ -8156,6 +8180,7 @@ let converter = OpenCC.Converter({
 });
 
 export default {
+  mixins: [ myMixin ],
   components: {
     EditorBar,
     Mind,
@@ -13902,22 +13927,51 @@ export default {
           });
       });
     },
-    openAddApp() {
-      this.$refs.appDialog.openG("", "", "", "", 1);
+    openAddApp(i) {
+      this.lineCount = i;
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+
+      let _obj = {}
+
+      if (_index != -1) {
+        _obj = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData[_index]
+      }
+
+      this.$refs.appDialog.openG(_obj, "", "", "", 2);
     },
     selectAppSuccess({ data, type }) {
-      console.log(data);
-      data.forEach(i => {
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+      if (_index != -1) {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.splice(_index, 1);
         this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
           this.lineCount
         ].chapterData.push({
-          name: i.name,
-          title: i.name,
-          url: i.url,
-          type: 8
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
         });
-        this.imgChange1(null, null, 8, this.lineCount);
-      });
+      } else {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.push({
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
+        });
+      }
+      this.imgChange1(null, null, 8, this.lineCount);
       this.dialogVisible7 = false;
     }
   },
@@ -15095,7 +15149,8 @@ export default {
 .chapter_upload_l_i6,
 .chapter_upload_l_i12,
 .chapter_upload_l_i14,
-.chapter_upload_l_i13 {
+.chapter_upload_l_i13,
+.chapter_upload_l_i15 {
   width: 15px;
   height: 15px;
   background-size: 100% 100%;
@@ -15117,6 +15172,10 @@ export default {
   background-image: url("../../../assets/icon/new/u_source.png");
 }
 
+.chapter_upload_l_i15 {
+  background-image: url("../../../assets/icon/new/appStore.png");
+}
+
 .chapter_upload_l_i6 {
   background-image: url("../../../assets/icon/new/u_picture.png");
 }

+ 94 - 12
src/components/pages/newCourse/addCourse.vue

@@ -1202,6 +1202,12 @@
                                       class="chapter_upload_l_i13"
                                       style="margin-left: 1px"
                                     ></div>
+
+                                    <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                   </div>
                                   <div class="chapter_upload_n">
                                     <input
@@ -1284,6 +1290,23 @@
                                         openUpdateSource(itemTaskIndex, index1)
                                       "
                                     />
+
+                                    <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
                                   </div>
                                   <div class="chapter_upload_ic">
                                     <div
@@ -1350,7 +1373,7 @@
                                     </div>
                                     <div
                                       class="chapter_upload_ic_edit"
-                                      v-if="item1.type == 8"
+                                      v-if="item1.type == 8 || item1.type == 15"
                                       @click="selectLine(itemTaskIndex, index1)"
                                     >
                                       <div></div>
@@ -1614,6 +1637,12 @@
                                       class="chapter_upload_l_i13"
                                       style="margin-left: 1px"
                                     ></div>
+
+                                    <div
+                                    v-if="item1.type == 15"
+                                    class="chapter_upload_l_i15"
+                                    style="margin-left: 1px"
+                                  ></div>
                                   </div>
                                   <div class="chapter_upload_n">
                                     <span
@@ -1690,6 +1719,23 @@
                                       readonly="true"
                                       @click="selectLine(itemTaskIndex, index1)"
                                     />
+
+                                    <input
+                                    :placeholder="
+                                      item1.title ? item1.title : 'Ai应用'
+                                    "
+                                    v-if="item1.type == 15"
+                                    style="
+                                  border: none;
+                                  outline: none;
+                                  width: 80%;
+                                  white-space: nowrap;
+                                  overflow: hidden;
+                                  text-overflow: ellipsis;
+                                "
+                                    readonly="true"
+                                    @click="selectLine(0, index1)"
+                                  />
                                   </div>
                                   <div class="chapter_upload_ic">
                                     <div
@@ -1756,7 +1802,7 @@
                                     </div>
                                     <div
                                       class="chapter_upload_ic_edit"
-                                      v-if="item1.type == 8"
+                                      v-if="item1.type == 8 || item1.type == 15"
                                       @click="selectLine(itemTaskIndex, index1)"
                                     >
                                       <div></div>
@@ -7425,6 +7471,7 @@ import englishRight from "../components/englishRight.vue";
 import evaBox from "../evaBox/index.vue";
 import EnglishVoice from "../EnglishVoice/index.vue";
 import appDialog from '../components/appDialog.vue'
+import { myMixin } from "@/mixins/mixin.js"
 
 var OpenCC = require("opencc-js");
 let converter = OpenCC.Converter({
@@ -7433,6 +7480,7 @@ let converter = OpenCC.Converter({
 })
 
 export default {
+  mixins: [ myMixin ],
   components: {
     EditorBar,
     Mind,
@@ -10417,6 +10465,7 @@ export default {
           this.addOp3('1', "", { courseid: this.courseId ,type: "course_stageMode_clickUpload" }, "success")
         })
         .catch((err) => {
+          this.addOp3('1', "", { courseid: this.courseId ,type: "course_stageMode_clickUpload" }, err)
           this.$message.error("网络不佳");
           this.addOp3('1', "", { courseid: this.courseId ,type: "course_stageMode_clickUpload" }, err)
           console.error(err);
@@ -14487,21 +14536,49 @@ export default {
     },
     openAddApp(i) {
       this.lineCount = i;
-      this.$refs.appDialog.openG("", "", "", "", 1);
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+
+      let _obj = {}
+
+      if (_index != -1) {
+        _obj = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData[_index]
+      }
+
+      this.$refs.appDialog.openG(_obj, "", "", "", 2);
     },
     selectAppSuccess({ data, type }) {
-      console.log(data);
-      data.forEach(i => {
+      let _index = this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+        this.lineCount
+      ].chapterData.findIndex(i => i.type == 15);
+      if (_index != -1) {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.splice(_index, 1);
         this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
           this.lineCount
         ].chapterData.push({
-          name: i.name,
-          title: i.name,
-          url: i.url,
-          type: 8
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
         });
-        this.imgChange1(null, null, 8, this.lineCount);
-      });
+      } else {
+        this.unitJson[this.unitIndex].chapterInfo[0].taskJson[
+          this.lineCount
+        ].chapterData.push({
+          name: data.name,
+          title: data.name,
+          id:data.id,
+          url: data.url,
+          type: 15
+        });
+      }
+      this.imgChange1(null, null, 8, this.lineCount);
       this.dialogVisible7 = false;
     }
   },
@@ -15731,7 +15808,8 @@ export default {
 .chapter_upload_l_i6,
 .chapter_upload_l_i12,
 .chapter_upload_l_i14,
-.chapter_upload_l_i13 {
+.chapter_upload_l_i13,
+.chapter_upload_l_i15 {
   width: 15px;
   height: 15px;
   background-size: 100% 100%;
@@ -15753,6 +15831,10 @@ export default {
   background-image: url("../../../assets/icon/new/u_source.png");
 }
 
+.chapter_upload_l_i15 {
+  background-image: url("../../../assets/icon/new/appStore.png");
+}
+
 .chapter_upload_l_i6 {
   background-image: url("../../../assets/icon/new/u_picture.png");
 }

+ 11 - 0
src/components/pages/studentManage/student.vue

@@ -254,7 +254,11 @@
 <script>
 import $ from "jquery";
 import pinyin from "../../../../node_modules/js-pinyin/index";
+import { myMixin } from "@/mixins/mixin.js"
+
 export default {
+  mixins: [ myMixin ],
+
   data() {
     return {
       tableHeight: "500px",
@@ -509,6 +513,7 @@ export default {
             message: "新增成功",
             type: "success",
           });
+
           this.dialogVisible = false;
           this.sPhone = "";
           this.sName = "";
@@ -516,9 +521,13 @@ export default {
           this.sByClass = [];
           this.sMail = "";
           this.getStudent();
+          this.addOp3('1', "", { type: "student_user_add" }, "success")
+
         })
         .catch((err) => {
           this.isLoading = false;
+          this.addOp3('1', "", { type: "student_user_add" }, err)
+
           this.$message({
             message: "新增失败",
             type: "error",
@@ -590,7 +599,9 @@ export default {
         ) {
           this.importCount = 1;
           this.importfxx(this.fileTemp);
+          this.addOp3('1', "", { type: "student_user_adds" }, "success")
         } else {
+          this.addOp3('1', "", { type: "student_user_adds" }, "附件格式错误")
           this.$message({
             type: "warning",
             message: "附件格式错误,请删除后重新上传!",

+ 14 - 0
src/components/pages/synergyCourse/course.vue

@@ -298,7 +298,11 @@
 import "../../../common/aws-sdk-2.235.1.min";
 import EditorBar from "../../../components/tools/wangEnduit";
 // import CourseProblem from "./components/courseProblem";
+import { myMixin } from "@/mixins/mixin.js"
+
 export default {
+  mixins: [ myMixin ],
+
   components: { EditorBar },
   data() {
     return {
@@ -485,6 +489,8 @@ export default {
       }
     },
     goToCourse3(courseId) {
+      this.addOp3('1', "", { type: "CocoNote_standard_add" }, "success")
+
       if (courseId) {
         this.$router.push(
           "/synergyCourse/add?cid=" +
@@ -523,6 +529,7 @@ export default {
       return param= param<10?('0'+param):param
     },
     goToCourseSimple(){
+
       let params = [
         {
           uid: this.userid,
@@ -558,10 +565,13 @@ export default {
           });
           this.getCourse();
           this.open(res.data.courseId, this.userid)
+          this.addOp3('1', "", { type: "CocoNote_fast_add" }, "success")
+
         })
         .catch((err) => {
           this.$message.error("网络不佳");
           console.error(err);
+          this.addOp3('1', "", { type: "CocoNote_fast_add" }, err)
         });
     },
     tableRowClassName({ row, rowIndex }) {
@@ -572,6 +582,8 @@ export default {
       }
     },
     open(cid, uid) {
+      this.addOp3('1', "", { courseid: cid , type: "CocoNote_open" }, "success")
+
       if (uid == this.userid ||  window.topU.US.userInfo.role==1) {
          window.topU.postMessage(
           {
@@ -636,6 +648,8 @@ export default {
         .catch((err) => {
           this.$message.error("网络不佳");
           console.error(err);
+          this.addOp3('1', "", { courseid: cid , type: "CocoNote_open" }, err)
+
         });
     },
     jump(cid) {

+ 7 - 0
src/components/pages/works.vue

@@ -525,8 +525,13 @@ import "../../common/aws-sdk-2.235.1.min.js";
 import StudentWorksDetail from "./components/studentWorksDetail.vue";
 import exportDataDialog from "./components/exportDataDialog.vue";
 import lookReport from './components/lookReport'
+import { myMixin } from "@/mixins/mixin.js"
+
+
 
 export default {
+  mixins: [ myMixin ],
+
   components: {
     WorkDate,
     Report,
@@ -762,6 +767,8 @@ export default {
       }
     },
     getWorkData(res) {
+      this.addOp3('1', "", { courseid: res.courseId ,type: "course_homeWork_open" }, "success")
+
       this.dataJson = res;
       this.dialogVisible = true;
     },

+ 4 - 2
src/mixins/mixin.js

@@ -1,7 +1,7 @@
 export const myMixin = {
   data() {
     return {
-        userJson: {}
+        userJson: {},
     };
   },
   methods: {
@@ -43,7 +43,7 @@ export const myMixin = {
         }
       } catch (e) {
         console.log(e);
-        this.addOp3(userTime, loadTime, object, status);
+        return this.addOp3(userTime, loadTime, object, status);
       }
       let _time = new Date()
         .toLocaleString("zh-CN", { hour12: false, timeZone: "Asia/Shanghai" })
@@ -61,6 +61,8 @@ export const myMixin = {
         object: JSON.stringify(object), //执行信息传json
         status: status //成功返回success。失败返回error的信息
       };
+      console.log('params',params);
+      
       this.ajax
         .post(this.$store.state.apiM + "updateUserData2", [params])
         .then(res => {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.