lsc 1 سال پیش
والد
کامیت
c15e24428c
23فایلهای تغییر یافته به همراه537 افزوده شده و 263 حذف شده
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.0df776707e9fea7ab64cef191cf81bd7.css
  3. 0 0
      dist/static/css/app.0df776707e9fea7ab64cef191cf81bd7.css.map
  4. 0 0
      dist/static/css/app.f910c5a860f537345603ce3703afbc98.css
  5. 0 0
      dist/static/css/app.f910c5a860f537345603ce3703afbc98.css.map
  6. 0 0
      dist/static/js/app.369431198cac05e3b4d8.js
  7. 0 0
      dist/static/js/app.369431198cac05e3b4d8.js.map
  8. 0 0
      dist/static/js/app.8cc2265ab5b37fa8132a.js
  9. 0 0
      dist/static/js/manifest.3512a67a6213c2df4180.js.map
  10. 41 8
      src/components/pages/addCourse.vue
  11. 126 71
      src/components/pages/dataBoardNew/course/chartList/cateRank.vue
  12. 18 1
      src/components/pages/dataBoardNew/course/chartList/courseNum.vue
  13. 9 8
      src/components/pages/dataBoardNew/course/index.vue
  14. 18 1
      src/components/pages/dataBoardNew/project/chartList/courseNum.vue
  15. 5 3
      src/components/pages/dataBoardNew/project/index.vue
  16. 17 14
      src/components/pages/dataBoardNew/school/courseNum/index.vue
  17. 3 2
      src/components/pages/dataBoardNew/school/index.vue
  18. 127 72
      src/components/pages/dataBoardNew/school/teacherInfo/index.vue
  19. 3 2
      src/components/pages/dataBoardNew/student/index.vue
  20. 126 70
      src/components/pages/dataBoardNew/teacher/chartList/teaData.vue
  21. 3 2
      src/components/pages/dataBoardNew/teacher/index.vue
  22. 20 5
      src/components/pages/easy/addCourse.vue
  23. 20 3
      src/components/pages/task/addCourse.vue

+ 1 - 1
dist/index.html

@@ -25,7 +25,7 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.f910c5a860f537345603ce3703afbc98.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.8cc2265ab5b37fa8132a.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.0df776707e9fea7ab64cef191cf81bd7.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.369431198cac05e3b4d8.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.0df776707e9fea7ab64cef191cf81bd7.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.0df776707e9fea7ab64cef191cf81bd7.css.map


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.f910c5a860f537345603ce3703afbc98.css


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/css/app.f910c5a860f537345603ce3703afbc98.css.map


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/app.369431198cac05e3b4d8.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/app.369431198cac05e3b4d8.js.map


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/app.8cc2265ab5b37fa8132a.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/static/js/manifest.3512a67a6213c2df4180.js.map


+ 41 - 8
src/components/pages/addCourse.vue

@@ -500,13 +500,15 @@
                           dragOverBottom: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex < tIndex && dragType == 'task',
                         }">
                       <div @dragstart="dragTaskStart(t, tIndex, 0)" @dragover.prevent="dragTaskOver(tIndex, 0)"
-                          @dragend="dragTaskEnd()" draggable @click="goToTask(tIndex)" class="navTask" :class="{
+                          @dragend="dragTaskEnd()" :draggable="isdrag == 'task-'+tIndex" @click="goToTask(tIndex)" class="navTask" :class="{
                         isNavTask:
                           isClickColor > 0 && isClickColor == tIndex + 1,
                         isNavOpen: t.toolOpen
                       }">
                           <div @click.stop="taskOpen(tIndex)" class="chapter_upload_open"></div>
                         <div
+                        @mousedown="isdrag = 'task-'+tIndex" @mouseup="isdrag = ''"
+                        @touchstart="isdrag = 'task-'+tIndex" @touchend="isdrag = ''"
                         style="left: 8px;"
                           class="chapter_upload_drag"
                         ></div>
@@ -544,11 +546,13 @@
                           dragOverBottom: newIndex === stageIndex && typeIndex == 'Unit-'+stageIndex && oldIndex < stageIndex && dragType == 'Unit',
                         }">
                       <div  @dragstart="dragUnitStart(stage, stageIndex)" @dragover.prevent="dragUnitOver(stageIndex)"
-                          @dragend="dragUnitEnd()" draggable @click="unitSet2(stageIndex)" class="navStage" :class="{
+                          @dragend="dragUnitEnd()" :draggable="isdrag == 'unit-'+stageIndex" @click="unitSet2(stageIndex)" class="navStage" :class="{
                           isNavStage: stageIndex == unitIndex,
                           isNavStageOpen: stage.toolOpen
                       }">
                           <div
+                          @mousedown="isdrag = 'unit-'+stageIndex" @mouseup="isdrag = ''"
+                          @touchstart="isdrag = 'unit-'+stageIndex" @touchend="isdrag = ''"
                           style="left: 8px;"
                             class="chapter_upload_drag"
                           ></div>
@@ -568,13 +572,15 @@
                             dragOverBottom: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex < tIndex && stageIndex == checkUnitIndex && dragType == 'task',
                           }" :style="{display:stage.toolOpen ? 'block' : 'none'}">
                         <div @dragstart="dragTaskStart(t, tIndex, stageIndex)" @dragover.prevent="dragTaskOver(tIndex, stageIndex)"
-                            @dragend="dragTaskEnd()" draggable @click="goToTask2(tIndex, stageIndex)" class="navTask" style="padding-left: 12px;" :class="{
+                            @dragend="dragTaskEnd()" :draggable="isdrag == 'task-'+stageIndex+'-'+tIndex" @click="goToTask2(tIndex, stageIndex)" class="navTask" style="padding-left: 12px;" :class="{
                           isNavTask:
                             isClickColor > 0 && isClickColor == tIndex + 1 && stageIndex == unitIndex,
                           isNavOpen: t.toolOpen
                         }">
                           <div @click.stop="taskOpen(tIndex)" class="chapter_upload_open"></div>
                           <div
+                          @mousedown="isdrag = 'task-'+stageIndex+'-'+tIndex" @mouseup="isdrag = ''"
+                          @touchstart="isdrag = 'task-'+stageIndex+'-'+tIndex" @touchend="isdrag = ''"
                           style="left: 20px;"
                             class="chapter_upload_drag"
                           ></div>
@@ -778,7 +784,7 @@
                               "><img src="../../assets/icon/new/c_none.png" alt /><span>请添加学习内容</span></div>
                             <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
                               <div @dragstart="dragStart(item1, index1, itemTaskIndex)" @dragover.prevent="dragOver(index1, itemTaskIndex)"
-                                @dragend="dragEnd()" draggable class="chapter_upload"
+                                @dragend="dragEnd()" :draggable="isdrag == 'chapter-'+itemTaskIndex+'-'+index1" class="chapter_upload"
                                 v-for="(item1, index1) in itemTask.chapterData" :key="item1.id" @click="
                                   getChapterData(
                                     $event,
@@ -791,7 +797,8 @@
                                 dragOverTop2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex > index1 && dragType == 'drag',
                                 dragOverBottom2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex < index1 && dragType == 'drag',
                               }">
-                                <div class="chapter_upload_drag"></div>
+                                <div @mousedown="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @mouseup="isdrag = ''"
+                                     @touchstart="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @touchend="isdrag = ''" class="chapter_upload_drag"></div>
                                 <div class="chapter_upload_o" style="
                               position: relative;
                               display: flex;
@@ -995,7 +1002,7 @@
                               "><img src="../../assets/icon/new/c_none.png" alt /></div>
                             <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
                               <div @dragstart="dragStart(item1, index1, index)" @dragover.prevent="dragOver(index1, itemTaskIndex)"
-                                @dragend="dragEnd()" draggable class="chapter_upload"
+                                @dragend="dragEnd()" :draggable="isdrag == 'chapter-'+itemTaskIndex+'-'+index1" class="chapter_upload"
                                 v-for="(item1, index1) in itemTask.chapterData" :key="item1.id" @click="
                                   getChapterData(
                                     $event,
@@ -1008,7 +1015,8 @@
                                 dragOverTop2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex > index1,
                                 dragOverBottom2: newIndex === index1 && typeIndex == 'chapter-'+itemTaskIndex+'-'+index1 && oldIndex < index1,
                               }">
-                                <div class="chapter_upload_drag"></div>
+                                <div @mousedown="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @mouseup="isdrag = ''"
+                                     @touchstart="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @touchend="isdrag = ''" class="chapter_upload_drag"></div>
                                 <div class="chapter_upload_t" style="width: 100%"></div>
                                 <div class="chapter_upload_o" style="
                                 position: relative;
@@ -4178,7 +4186,7 @@ export default {
                     },
                   ],
         checkUnitIndex: 0,
-      
+        isdrag: '',
     };
   },
   directives: {
@@ -9943,6 +9951,7 @@ export default {
         this.typeIndex = "";
         this.newIndex = "";
         this.dragType = "";
+        this.isdrag = "";
         return;
       }
       console.log(this.taskCount);
@@ -9956,6 +9965,7 @@ export default {
       this.typeIndex = "";
       this.newIndex = "";
       this.dragType = "";
+      this.isdrag = "";
       this.$forceUpdate()
     },
     dragTaskStart(val, i, j) {
@@ -9975,6 +9985,7 @@ export default {
         this.dragType = "";
         this.typeIndex = "";
         this.checkUnitIndex = "";
+        this.isdrag = "";
         return;
       }
       if((this.newIndex == this.oldIndex && this.oldUnitIndex == this.checkUnitIndex)){
@@ -9982,6 +9993,7 @@ export default {
         this.dragType = "";
         this.typeIndex = "";
         this.checkUnitIndex = "";
+        this.isdrag = "";
         return;
       }
       let count1 = await this.getWorksCount(2, this.checkUnitIndex, this.newIndex, 0)
@@ -10018,6 +10030,7 @@ export default {
           this.newIndex = "";
           this.dragType = "";
           this.checkUnitIndex = "";
+          this.isdrag = "";
           this.updateWork();
           this.$forceUpdate()
         })
@@ -10026,6 +10039,7 @@ export default {
           this.dragType = "";
           this.typeIndex = "";
           this.checkUnitIndex = "";
+          this.isdrag = "";
           return;
         });
       }else{
@@ -10050,6 +10064,7 @@ export default {
           this.newIndex = "";
           this.dragType = "";
           this.checkUnitIndex = "";
+          this.isdrag = "";
           this.updateWork();
           this.$forceUpdate()
       }
@@ -10074,12 +10089,14 @@ export default {
         this.newIndex = "";
         this.dragType = "";
         this.typeIndex = "";
+        this.isdrag = "";
         return;
       }
       if(this.newIndex == this.oldIndex){
         this.newIndex = "";
         this.dragType = "";
         this.typeIndex = "";
+        this.isdrag = "";
         return;
       }
       let count1 = await this.getWorksCount(1, this.newIndex, 0, 0)
@@ -10105,6 +10122,7 @@ export default {
           this.typeIndex = "";
           this.newIndex = "";
           this.dragType = "";
+          this.isdrag = "";
           this.updateWork();
           this.$forceUpdate()
         })
@@ -10112,6 +10130,7 @@ export default {
           this.newIndex = "";
           this.dragType = "";
           this.typeIndex = "";
+          this.isdrag = "";
           return;
         });
       }else{
@@ -10124,6 +10143,7 @@ export default {
           this.typeIndex = "";
           this.newIndex = "";
           this.dragType = "";
+          this.isdrag = "";
           this.updateWork();
           this.$forceUpdate()
       }
@@ -11279,6 +11299,7 @@ export default {
   background-image: url("../../assets/icon/new/icon_course_drag.png");
   background-size: 100% 100%;
   z-index: 10;
+  display: none;
 }
 
 .isNavStage > .chapter_upload_drag{
@@ -13499,6 +13520,18 @@ ol {
   position: relative;
 }
 
+.navStage:hover > .chapter_upload_drag{
+  display: block;
+}
+
+.navTask:hover > .chapter_upload_drag{
+  display: block;
+}
+
+.chapter_upload:hover > .chapter_upload_drag{
+  display: block;
+}
+
 .navStage::before {
   content: '';
   display: block;

+ 126 - 71
src/components/pages/dataBoardNew/course/chartList/cateRank.vue

@@ -26,13 +26,59 @@ export default {
                     position: 'top',
                     formatter: function (params) {
                         // console.log(params);
-                        return params.marker + params.name + ' ' + params.data[1];//params.seriesName + '<br>' + params.
+                        return params.marker + params.name + ' ' + params.data[2];//params.seriesName + '<br>' + params.
 
                     }
                 },
-                title: [],
-                singleAxis: [],
-                series: []
+                grid: {
+                    top: '5%',
+                    left: 0,
+                    bottom: '5%',
+                    right: '5%',
+                    containLabel: true
+                },
+                xAxis: {
+                    type: 'category',
+                    data: [],
+                    boundaryGap: false,
+                    splitLine: {
+                        show: true
+                    },
+                    axisLine: {
+                        show: false
+                    }
+                },
+                yAxis: {
+                    type: 'category',
+                    data: [],
+                    axisLine: {
+                        show: false
+                    }
+                },
+                series: [
+                    {
+                        name: 'Punch Card',
+                        type: 'scatter',
+                        symbolSize: function (val) {
+                            return val[2] * 3;
+                        },
+                        data: [],
+                        animationDelay: function (idx) {
+                            return idx * 5;
+                        },
+                        itemStyle: {
+                            color: function(params) {
+                            // 根据行索引设置不同的颜色
+                            var row = params.value[1];
+                            var colorList = ['hsl(170, 80%, 75%)', 'hsl(300, 99%, 70%)', 'hsl(139, 93%, 60%)', 'hsl(56, 73%, 69%)', 'hsl(352, 98%, 69%)', 'hsl(288, 76%, 66%)', 'hsl(167, 89%, 60%)', 'hsl(83, 81%, 74%)', 'hsl(359, 84%, 66%)', 'hsl(208, 96%, 66%)', 'hsl(259, 82%, 62%)', 'hsl(224, 95%, 64%)', 'hsl(119, 89%, 71%)', 'hsl(35, 75%, 70%)', 'hsl(48, 73%, 76%)', 'hsl(10, 73%, 69%)', 'hsl(112, 88%, 71%)', 'hsl(90, 87%, 61%)', 'hsl(37, 83%, 66%)', 'hsl(192, 86%, 72%)'];
+                            return colorList[row % colorList.length];
+                            }
+                        }
+                    }
+                ]
+                // title: [],
+                // singleAxis: [],
+                // series: []
             },
         };
     },
@@ -71,39 +117,44 @@ export default {
                 const title = [];
                 const singleAxis = [];
                 const series = [];
-                days.forEach(function (day, idx) {
-                    title.push({
-                        textBaseline: 'middle',
-                        top: ((idx + 0.5) * 90) / days.length + '%',
-                        text: day,
-                        textStyle: {
-                            fontSize: 12,
-                        },
-                    });
-                    singleAxis.push({
-                        left: 70,
-                        type: 'category',
-                        boundaryGap: false,
-                        data: hours,
-                        top: (idx * 90) / days.length + 5 + '%',
-                        height: 90 / days.length - 10 + '%'
-                    });
-                    series.push({
-                        singleAxisIndex: idx,
-                        coordinateSystem: 'singleAxis',
-                        type: 'scatter',
-                        data: [],
-                        symbolSize: function (dataItem) {
-                            return dataItem[1] * 3;
-                        }
-                    });
-                });
-                data.forEach(function (dataItem) {
-                    series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                });
-                this.option.title = title
-                this.option.singleAxis = singleAxis
-                this.option.series = series
+                // days.forEach(function (day, idx) {
+                //     title.push({
+                //         textBaseline: 'middle',
+                //         top: ((idx + 0.5) * 90) / days.length + '%',
+                //         text: day,
+                //         textStyle: {
+                //             fontSize: 12,
+                //         },
+                //     });
+                //     singleAxis.push({
+                //         left: 70,
+                //         type: 'category',
+                //         boundaryGap: false,
+                //         data: hours,
+                //         top: (idx * 90) / days.length + 5 + '%',
+                //         height: 90 / days.length - 10 + '%'
+                //     });
+                //     series.push({
+                //         singleAxisIndex: idx,
+                //         coordinateSystem: 'singleAxis',
+                //         type: 'scatter',
+                //         data: [],
+                //         symbolSize: function (dataItem) {
+                //             return dataItem[1] * 3;
+                //         }
+                //     });
+                // });
+                // data.forEach(function (dataItem) {
+                //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                // });
+                this.option.xAxis.data = hours
+                    this.option.yAxis.data = days
+                    this.option.series[0].data = data.map(function (item) {
+                        return [item[1], item[0], item[2]];
+                    })
+                // this.option.title = title
+                // this.option.singleAxis = singleAxis
+                // this.option.series = series
                 // 初始化雷达图
                 this.chartObj = chartObj;
                 this.chartObj.setOption(this.option);
@@ -146,40 +197,44 @@ export default {
                     const title = [];
                     const singleAxis = [];
                     const series = [];
-                    days.forEach(function (day, idx) {
-                        title.push({
-                            textBaseline: 'middle',
-                            top: ((idx + 0.5) * 90) / days.length + '%',
-                            text: day,
-                            textStyle: {
-                                fontSize: 12,
-                            },
-                        });
-                        singleAxis.push({
-                            left: 70,
-                            type: 'category',
-                            boundaryGap: false,
-                            data: hours,
-                            top: (idx * 90) / days.length + 5 + '%',
-                            height: 90 / days.length - 10 + '%'
-                        });
-                        series.push({
-                            singleAxisIndex: idx,
-                            coordinateSystem: 'singleAxis',
-                            type: 'scatter',
-                            data: [],
-                            symbolSize: function (dataItem) {
-                                return dataItem[1] * 3;
-                            }
-                        });
-                    });
-                    data.forEach(function (dataItem) {
-                        series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                    });
-
-                    this.option.title = title
-                    this.option.singleAxis = singleAxis
-                    this.option.series = series
+                    // days.forEach(function (day, idx) {
+                    //     title.push({
+                    //         textBaseline: 'middle',
+                    //         top: ((idx + 0.5) * 90) / days.length + '%',
+                    //         text: day,
+                    //         textStyle: {
+                    //             fontSize: 12,
+                    //         },
+                    //     });
+                    //     singleAxis.push({
+                    //         left: 70,
+                    //         type: 'category',
+                    //         boundaryGap: false,
+                    //         data: hours,
+                    //         top: (idx * 90) / days.length + 5 + '%',
+                    //         height: 90 / days.length - 10 + '%'
+                    //     });
+                    //     series.push({
+                    //         singleAxisIndex: idx,
+                    //         coordinateSystem: 'singleAxis',
+                    //         type: 'scatter',
+                    //         data: [],
+                    //         symbolSize: function (dataItem) {
+                    //             return dataItem[1] * 3;
+                    //         }
+                    //     });
+                    // });
+                    // data.forEach(function (dataItem) {
+                    //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                    // });
+                    this.option.xAxis.data = hours
+                    this.option.yAxis.data = days
+                    this.option.series[0].data = data.map(function (item) {
+                        return [item[1], item[0], item[2]];
+                    })
+                    // this.option.title = title
+                    // this.option.singleAxis = singleAxis
+                    // this.option.series = series
                     this.chartObj.setOption(this.option);
                 }
             }

+ 18 - 1
src/components/pages/dataBoardNew/course/chartList/courseNum.vue

@@ -67,7 +67,24 @@ export default {
           column: {
             grouping: false,
             shadow: false,
-            borderWidth: 0
+            borderWidth: 0,
+            dataLabels: {
+              enabled: true,  //显示数量提示
+              color: '#000000',
+              formatter : function() {
+                var employee = this.point.series.chart.series[0].yData[this.point.index];
+                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
+                var employeePercentage = 0;
+                if(optimizedEmployee > employee){
+                  employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
+                }
+                if (this.series.name === '本周课程总数') {
+                  return  employeePercentage.toFixed(2) + '%';
+                } else {
+                  return '';
+                }
+              }
+            }
           }
         },
         series: [{

+ 9 - 8
src/components/pages/dataBoardNew/course/index.vue

@@ -18,18 +18,19 @@
             </div>
             <div class="info blueBG">
               <span>本月新增课程环比</span>
+              <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].course) > 0 ? (((loginCountMonthArray[loginCountMonthArray.length - 1].course) / allCourse) * 100).toFixed(2) + '%' : 0 }}</span>
               <!-- <span>{{ weekCount }}</span> -->
-              <span v-if="loginCountMonthArray.length">{{
+              <!-- <span v-if="loginCountMonthArray.length">{{
                 loginCountMonthArray[loginCountMonthArray.length - 1].course -
                 loginCountMonthArray[loginCountMonthArray.length - 2].course < 0 ? 0 : (
                   ((loginCountMonthArray[loginCountMonthArray.length - 1].course -
                     loginCountMonthArray[loginCountMonthArray.length - 2].course) / (allCourse -
-                      loginCountMonthArray[loginCountMonthArray.length - 1].course)) * 100).toFixed(2) + "%" }}</span>
+                      loginCountMonthArray[loginCountMonthArray.length - 1].course)) * 100).toFixed(2) + "%" }}</span> -->
             </div>
             <div class="info blueBG">
               <span>模板课程总数</span>
-              <!-- <span>{{ weekCount }}</span> -->
-              <span>{{ courseTemplate }}</span>
+              <span>{{ 0 }}</span>
+              <!-- <span>{{ courseTemplate }}</span> -->
             </div>
             <div class="info blueBG">
               <span>本月新增课程总数</span>
@@ -53,14 +54,14 @@
             作业数量
           </div>
           <el-select v-if="skType == 0" v-model="lType" @change="typeChange1" class="selectBox" style="margin-left: auto">
-            <el-option label="全部" value="all"></el-option>
+            <!-- <el-option label="全部" value="all"></el-option> -->
             <el-option label="年级" value="grade"></el-option>
             <el-option label="主题" value="theme"></el-option>
             <el-option label="学科" value="subject"></el-option>
           </el-select>
           <el-select v-if="skType == 1" v-model="lType1" @change="typeChange2" class="selectBox"
             style="margin-left: auto">
-            <el-option label="全部" value="all"></el-option>
+            <!-- <el-option label="全部" value="all"></el-option> -->
             <el-option label="年级" value="grade"></el-option>
             <el-option label="主题" value="theme"></el-option>
             <el-option label="学科" value="subject"></el-option>
@@ -343,8 +344,8 @@ export default {
       allCourse: 0,
       courseTemplate: 0,
       loginCountMonthArray: [],
-      lType: "all",
-      lType1: "all",
+      lType: "grade",
+      lType1: "grade",
       allTimeList: [],
       tedurArray: [],
       classList: [],

+ 18 - 1
src/components/pages/dataBoardNew/project/chartList/courseNum.vue

@@ -67,7 +67,24 @@ export default {
           column: {
             grouping: false,
             shadow: false,
-            borderWidth: 0
+            borderWidth: 0,
+            dataLabels: {
+              enabled: true,  //显示数量提示
+              color: '#000000',
+              formatter : function() {
+                var employee = this.point.series.chart.series[0].yData[this.point.index];
+                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
+                var employeePercentage = 0;
+                if(optimizedEmployee > employee){
+                  employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
+                }
+                if (this.series.name === '本周课程总数') {
+                  return  employeePercentage.toFixed(2) + '%';
+                } else {
+                  return '';
+                }
+              }
+            }
           }
         },
         series: [{

+ 5 - 3
src/components/pages/dataBoardNew/project/index.vue

@@ -17,17 +17,19 @@
             </div>
             <div class="info blueBG">
               <span>本月新增项目环比</span>
-              <span v-if="loginCountMonthArray.length">{{
+              <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].course) > 0 ? (((loginCountMonthArray[loginCountMonthArray.length - 1].course) / allCourse) * 100).toFixed(2) + '%' : 0 }}</span>
+              <!-- <span v-if="loginCountMonthArray.length">{{
                 loginCountMonthArray[loginCountMonthArray.length - 1].course -
                 loginCountMonthArray[loginCountMonthArray.length - 2].course < 0 ? 0 : (
                   (loginCountMonthArray[loginCountMonthArray.length - 1].course -
                     loginCountMonthArray[loginCountMonthArray.length - 2].course) / (allCourse -
-                      loginCountMonthArray[loginCountMonthArray.length - 1].course) * 100).toFixed(2) + "%" }}</span>
+                      loginCountMonthArray[loginCountMonthArray.length - 1].course) * 100).toFixed(2) + "%" }}</span> -->
                   <span v-else>0</span>
             </div>
             <div class="info blueBG">
               <span>模板项目总数</span>
-              <span>{{ courseTemplate }}</span>
+              <!-- <span>{{ courseTemplate }}</span> -->
+              <span>{{ 0 }}</span>
             </div>
             <div class="info blueBG">
               <span>本月新增项目总数</span>

+ 17 - 14
src/components/pages/dataBoardNew/school/courseNum/index.vue

@@ -68,20 +68,23 @@ export default {
             grouping: false,
             shadow: false,
             borderWidth: 0,
-            // dataLabels: {
-            //   enabled: true,  //显示数量提示
-            //   color: '#000000',
-            //   formatter : function() {
-            //     var employee = this.point.series.chart.series[0].yData[this.point.index];
-            //     var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
-            //     var employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100;
-            //     if (this.series.name === '本周课程总数') {
-            //       return  employeePercentage.toFixed(2) + '%';
-            //     } else {
-            //       return '';
-            //     }
-            //   }
-            // }
+            dataLabels: {
+              enabled: true,  //显示数量提示
+              color: '#000000',
+              formatter : function() {
+                var employee = this.point.series.chart.series[0].yData[this.point.index];
+                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
+                var employeePercentage = 0;
+                if(optimizedEmployee > employee){
+                  employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
+                }
+                if (this.series.name === '本周课程总数') {
+                  return  employeePercentage.toFixed(2) + '%';
+                } else {
+                  return '';
+                }
+              }
+            }
           }
         },
         series: [{

+ 3 - 2
src/components/pages/dataBoardNew/school/index.vue

@@ -29,11 +29,12 @@
             </div>
             <div class="info blueBG">
               <span>本月登录用户环比</span>
-              <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].user -
+              <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].user) > 0 ? (((loginCountMonthArray[loginCountMonthArray.length - 1].user) / allUser) * 100).toFixed(2) + '%' : 0 }}</span>
+              <!-- <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].user -
                 loginCountMonthArray[loginCountMonthArray.length - 2].user) < 0 ? 0 :
                 (((loginCountMonthArray[loginCountMonthArray.length - 1].user -
                   loginCountMonthArray[loginCountMonthArray.length - 2].user) /
-                  loginCountMonthArray[loginCountMonthArray.length - 2].user) * 100).toFixed(2) + '%' }}</span>
+                  loginCountMonthArray[loginCountMonthArray.length - 2].user) * 100).toFixed(2) + '%' }}</span> -->
             </div>
           </div>
           <loginCount style="height: calc(100% - 140px)" :monthArray="loginCountMonthArray"></loginCount>

+ 127 - 72
src/components/pages/dataBoardNew/school/teacherInfo/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="data_body">
-        <div style="width: 100%; height: 100%" :style="{minWidth:ooption.hours.length * 75 + 'px'}">
+        <div style="width: 100%; height: 100%" :style="{ minWidth: ooption.hours.length * 75 + 'px' }">
             <div id="charts_canvas" class="echart" style="width: 100%; height: 100%; "></div>
         </div>
     </div>
@@ -26,13 +26,59 @@ export default {
                     position: 'top',
                     formatter: function (params) {
                         // console.log(params);
-                        return params.marker + params.name + ' ' + params.data[1];//params.seriesName + '<br>' + params.
+                        return params.marker + params.name + ' ' + params.data[2];//params.seriesName + '<br>' + params.
 
                     }
                 },
-                title: [],
-                singleAxis: [],
-                series: []
+                grid: {
+                    top: '5%',
+                    left: 0,
+                    bottom: '5%',
+                    right: '5%',
+                    containLabel: true
+                },
+                xAxis: {
+                    type: 'category',
+                    data: [],
+                    boundaryGap: false,
+                    splitLine: {
+                        show: true
+                    },
+                    axisLine: {
+                        show: false
+                    }
+                },
+                yAxis: {
+                    type: 'category',
+                    data: [],
+                    axisLine: {
+                        show: false
+                    }
+                },
+                series: [
+                    {
+                        name: 'Punch Card',
+                        type: 'scatter',
+                        symbolSize: function (val) {
+                            return val[2] * 3;
+                        },
+                        data: [],
+                        animationDelay: function (idx) {
+                            return idx * 5;
+                        },
+                        itemStyle: {
+                            color: function(params) {
+                            // 根据行索引设置不同的颜色
+                            var row = params.value[1];
+                            var colorList = ['hsl(170, 80%, 75%)', 'hsl(300, 99%, 70%)', 'hsl(139, 93%, 60%)', 'hsl(56, 73%, 69%)', 'hsl(352, 98%, 69%)', 'hsl(288, 76%, 66%)', 'hsl(167, 89%, 60%)', 'hsl(83, 81%, 74%)', 'hsl(359, 84%, 66%)', 'hsl(208, 96%, 66%)', 'hsl(259, 82%, 62%)', 'hsl(224, 95%, 64%)', 'hsl(119, 89%, 71%)', 'hsl(35, 75%, 70%)', 'hsl(48, 73%, 76%)', 'hsl(10, 73%, 69%)', 'hsl(112, 88%, 71%)', 'hsl(90, 87%, 61%)', 'hsl(37, 83%, 66%)', 'hsl(192, 86%, 72%)'];
+                            return colorList[row % colorList.length];
+                            }
+                        }
+                    }
+                ]
+                // title: [],
+                // singleAxis: [],
+                // series: []
             },
         };
     },
@@ -71,39 +117,44 @@ export default {
                 const title = [];
                 const singleAxis = [];
                 const series = [];
-                days.forEach(function (day, idx) {
-                    title.push({
-                        textBaseline: 'middle',
-                        top: ((idx + 0.5) * 90) / days.length + '%',
-                        text: day,
-                        textStyle: {
-                            fontSize: 12,
-                        },
-                    });
-                    singleAxis.push({
-                        left: 70,
-                        type: 'category',
-                        boundaryGap: false,
-                        data: hours,
-                        top: (idx * 90) / days.length + 5 + '%',
-                        height: 90 / days.length - 10 + '%'
-                    });
-                    series.push({
-                        singleAxisIndex: idx,
-                        coordinateSystem: 'singleAxis',
-                        type: 'scatter',
-                        data: [],
-                        symbolSize: function (dataItem) {
-                            return dataItem[1] * 3;
-                        }
-                    });
-                });
-                data.forEach(function (dataItem) {
-                    series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                });
-                this.option.title = title
-                this.option.singleAxis = singleAxis
-                this.option.series = series
+                // days.forEach(function (day, idx) {
+                //     title.push({
+                //         textBaseline: 'middle',
+                //         top: ((idx + 0.5) * 90) / days.length + '%',
+                //         text: day,
+                //         textStyle: {
+                //             fontSize: 12,
+                //         },
+                //     });
+                //     singleAxis.push({
+                //         left: 70,
+                //         type: 'category',
+                //         boundaryGap: false,
+                //         data: hours,
+                //         top: (idx * 90) / days.length + 5 + '%',
+                //         height: 90 / days.length - 10 + '%'
+                //     });
+                //     series.push({
+                //         singleAxisIndex: idx,
+                //         coordinateSystem: 'singleAxis',
+                //         type: 'scatter',
+                //         data: [],
+                //         symbolSize: function (dataItem) {
+                //             return dataItem[1] * 3;
+                //         }
+                //     });
+                // });
+                // data.forEach(function (dataItem) {
+                //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                // });
+                this.option.xAxis.data = hours
+                this.option.yAxis.data = days
+                this.option.series[0].data = data.map(function (item) {
+                    return [item[1], item[0], item[2]];
+                })
+                // this.option.title = title
+                // this.option.singleAxis = singleAxis
+                // this.option.series = series
                 // 初始化雷达图
                 this.chartObj = chartObj;
                 this.chartObj.setOption(this.option);
@@ -146,40 +197,44 @@ export default {
                     const title = [];
                     const singleAxis = [];
                     const series = [];
-                    days.forEach(function (day, idx) {
-                        title.push({
-                            textBaseline: 'middle',
-                            top: ((idx + 0.5) * 90) / days.length + '%',
-                            text: day,
-                            textStyle: {
-                                fontSize: 12,
-                            },
-                        });
-                        singleAxis.push({
-                            left: 70,
-                            type: 'category',
-                            boundaryGap: false,
-                            data: hours,
-                            top: (idx * 90) / days.length + 5 + '%',
-                            height: 90 / days.length - 10 + '%'
-                        });
-                        series.push({
-                            singleAxisIndex: idx,
-                            coordinateSystem: 'singleAxis',
-                            type: 'scatter',
-                            data: [],
-                            symbolSize: function (dataItem) {
-                                return dataItem[1] * 3;
-                            }
-                        });
-                    });
-                    data.forEach(function (dataItem) {
-                        series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                    });
-
-                    this.option.title = title
-                    this.option.singleAxis = singleAxis
-                    this.option.series = series
+                    // days.forEach(function (day, idx) {
+                    //     title.push({
+                    //         textBaseline: 'middle',
+                    //         top: ((idx + 0.5) * 90) / days.length + '%',
+                    //         text: day,
+                    //         textStyle: {
+                    //             fontSize: 12,
+                    //         },
+                    //     });
+                    //     singleAxis.push({
+                    //         left: 70,
+                    //         type: 'category',
+                    //         boundaryGap: false,
+                    //         data: hours,
+                    //         top: (idx * 90) / days.length + 5 + '%',
+                    //         height: 90 / days.length - 10 + '%'
+                    //     });
+                    //     series.push({
+                    //         singleAxisIndex: idx,
+                    //         coordinateSystem: 'singleAxis',
+                    //         type: 'scatter',
+                    //         data: [],
+                    //         symbolSize: function (dataItem) {
+                    //             return dataItem[1] * 3;
+                    //         }
+                    //     });
+                    // });
+                    // data.forEach(function (dataItem) {
+                    //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                    // });
+                    this.option.xAxis.data = hours
+                    this.option.yAxis.data = days
+                    this.option.series[0].data = data.map(function (item) {
+                        return [item[1], item[0], item[2]];
+                    })
+                    // this.option.title = title
+                    // this.option.singleAxis = singleAxis
+                    // this.option.series = series
                     this.chartObj.setOption(this.option);
                 }
             }

+ 3 - 2
src/components/pages/dataBoardNew/student/index.vue

@@ -14,7 +14,8 @@
             </div>
             <div class="info blueBG">
               <span>本月登录学生用户环比</span>
-              <span v-if="loginCountMonthArray.length">{{
+              <span v-if="loginCountMonthArray.length">{{ (loginCountMonthArray[loginCountMonthArray.length - 1].user) > 0 ? (((loginCountMonthArray[loginCountMonthArray.length - 1].user) / studentCount) * 100).toFixed(2) + '%' : 0 }}</span>
+              <!-- <span v-if="loginCountMonthArray.length">{{
                 loginCountMonthArray[loginCountMonthArray.length - 1].user -
                   loginCountMonthArray[loginCountMonthArray.length - 2].user <
                 0
@@ -27,7 +28,7 @@
                         .user) *
                       100).toFixed(2) +
                     "%"
-              }}</span>
+              }}</span> -->
             </div>
             <div class="info blueBG">
               <span>本月登录学生用户总数</span>

+ 126 - 70
src/components/pages/dataBoardNew/teacher/chartList/teaData.vue

@@ -25,13 +25,59 @@ export default {
                 tooltip: {
                     position: 'top',
                     formatter: function (params) {
-                        return params.marker + params.name + ' ' + params.data[1];//params.seriesName + '<br>' + params.
+                        return params.marker + params.name + ' ' + params.data[2];//params.seriesName + '<br>' + params.
 
                     }
                 },
-                title: [],
-                singleAxis: [],
-                series: []
+                grid: {
+                    top: '5%',
+                    left: 0,
+                    bottom: '5%',
+                    right: '5%',
+                    containLabel: true
+                },
+                xAxis: {
+                    type: 'category',
+                    data: [],
+                    boundaryGap: false,
+                    splitLine: {
+                        show: true
+                    },
+                    axisLine: {
+                        show: false
+                    }
+                },
+                yAxis: {
+                    type: 'category',
+                    data: [],
+                    axisLine: {
+                        show: false
+                    }
+                },
+                series: [
+                    {
+                        name: 'Punch Card',
+                        type: 'scatter',
+                        symbolSize: function (val) {
+                            return val[2] * 3;
+                        },
+                        data: [],
+                        animationDelay: function (idx) {
+                            return idx * 5;
+                        },
+                        itemStyle: {
+                            color: function(params) {
+                            // 根据行索引设置不同的颜色
+                            var row = params.value[1];
+                            var colorList = ['hsl(170, 80%, 75%)', 'hsl(300, 99%, 70%)', 'hsl(139, 93%, 60%)', 'hsl(56, 73%, 69%)', 'hsl(352, 98%, 69%)', 'hsl(288, 76%, 66%)', 'hsl(167, 89%, 60%)', 'hsl(83, 81%, 74%)', 'hsl(359, 84%, 66%)', 'hsl(208, 96%, 66%)', 'hsl(259, 82%, 62%)', 'hsl(224, 95%, 64%)', 'hsl(119, 89%, 71%)', 'hsl(35, 75%, 70%)', 'hsl(48, 73%, 76%)', 'hsl(10, 73%, 69%)', 'hsl(112, 88%, 71%)', 'hsl(90, 87%, 61%)', 'hsl(37, 83%, 66%)', 'hsl(192, 86%, 72%)'];
+                            return colorList[row % colorList.length];
+                            }
+                        }
+                    }
+                ]
+                // title: [],
+                // singleAxis: [],
+                // series: []
             },
         };
     },
@@ -70,39 +116,44 @@ export default {
                 const title = [];
                 const singleAxis = [];
                 const series = [];
-                days.forEach(function (day, idx) {
-                    title.push({
-                        textBaseline: 'middle',
-                        top: ((idx + 0.5) * 90) / days.length + '%',
-                        text: day,
-                        textStyle: {
-                            fontSize: 12,
-                        },
-                    });
-                    singleAxis.push({
-                        left: 70,
-                        type: 'category',
-                        boundaryGap: false,
-                        data: hours,
-                        top: (idx * 90) / days.length + 5 + '%',
-                        height: 90 / days.length - 10 + '%'
-                    });
-                    series.push({
-                        singleAxisIndex: idx,
-                        coordinateSystem: 'singleAxis',
-                        type: 'scatter',
-                        data: [],
-                        symbolSize: function (dataItem) {
-                            return dataItem[1] * 3;
-                        }
-                    });
-                });
-                data.forEach(function (dataItem) {
-                    series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                });
-                this.option.title = title
-                this.option.singleAxis = singleAxis
-                this.option.series = series
+                // days.forEach(function (day, idx) {
+                //     title.push({
+                //         textBaseline: 'middle',
+                //         top: ((idx + 0.5) * 90) / days.length + '%',
+                //         text: day,
+                //         textStyle: {
+                //             fontSize: 12,
+                //         },
+                //     });
+                //     singleAxis.push({
+                //         left: 70,
+                //         type: 'category',
+                //         boundaryGap: false,
+                //         data: hours,
+                //         top: (idx * 90) / days.length + 5 + '%',
+                //         height: 90 / days.length - 10 + '%'
+                //     });
+                //     series.push({
+                //         singleAxisIndex: idx,
+                //         coordinateSystem: 'singleAxis',
+                //         type: 'scatter',
+                //         data: [],
+                //         symbolSize: function (dataItem) {
+                //             return dataItem[1] * 3;
+                //         }
+                //     });
+                // });
+                // data.forEach(function (dataItem) {
+                //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                // });
+                // this.option.title = title
+                // this.option.singleAxis = singleAxis
+                // this.option.series = series
+                this.option.xAxis.data = hours
+                this.option.yAxis.data = days
+                this.option.series[0].data = data.map(function (item) {
+                    return [item[1], item[0], item[2]];
+                })
                 // 初始化雷达图
                 this.chartObj = chartObj;
                 this.chartObj.setOption(this.option);
@@ -145,40 +196,45 @@ export default {
                     const title = [];
                     const singleAxis = [];
                     const series = [];
-                    days.forEach(function (day, idx) {
-                        title.push({
-                            textBaseline: 'middle',
-                            top: ((idx + 0.5) * 90) / days.length + '%',
-                            text: day,
-                            textStyle: {
-                                fontSize: 12,
-                            },
-                        });
-                        singleAxis.push({
-                            left: 70,
-                            type: 'category',
-                            boundaryGap: false,
-                            data: hours,
-                            top: (idx * 90) / days.length + 5 + '%',
-                            height: 90 / days.length - 10 + '%'
-                        });
-                        series.push({
-                            singleAxisIndex: idx,
-                            coordinateSystem: 'singleAxis',
-                            type: 'scatter',
-                            data: [],
-                            symbolSize: function (dataItem) {
-                                return dataItem[1] * 3;
-                            }
-                        });
-                    });
-                    data.forEach(function (dataItem) {
-                        series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
-                    });
+                    // days.forEach(function (day, idx) {
+                    //     title.push({
+                    //         textBaseline: 'middle',
+                    //         top: ((idx + 0.5) * 90) / days.length + '%',
+                    //         text: day,
+                    //         textStyle: {
+                    //             fontSize: 12,
+                    //         },
+                    //     });
+                    //     singleAxis.push({
+                    //         left: 70,
+                    //         type: 'category',
+                    //         boundaryGap: false,
+                    //         data: hours,
+                    //         top: (idx * 90) / days.length + 5 + '%',
+                    //         height: 90 / days.length - 10 + '%'
+                    //     });
+                    //     series.push({
+                    //         singleAxisIndex: idx,
+                    //         coordinateSystem: 'singleAxis',
+                    //         type: 'scatter',
+                    //         data: [],
+                    //         symbolSize: function (dataItem) {
+                    //             return dataItem[1] * 3;
+                    //         }
+                    //     });
+                    // });
+                    // data.forEach(function (dataItem) {
+                    //     series[dataItem[0]].data.push([dataItem[1], dataItem[2]]);
+                    // });
 
-                    this.option.title = title
-                    this.option.singleAxis = singleAxis
-                    this.option.series = series
+                    // this.option.title = title
+                    // this.option.singleAxis = singleAxis
+                    // this.option.series = series
+                    this.option.xAxis.data = hours
+                    this.option.yAxis.data = days
+                    this.option.series[0].data = data.map(function (item) {
+                        return [item[1], item[0], item[2]];
+                    })
                     this.chartObj.setOption(this.option);
                 }
             }

+ 3 - 2
src/components/pages/dataBoardNew/teacher/index.vue

@@ -16,7 +16,8 @@
             <div class="info blueBG">
               <span>本月登录教师用户环比</span>
               <!-- <span>{{ weekCount }}</span> -->
-              <span v-if="teacherLoginCountMonthArray.length">{{
+              <span v-if="teacherLoginCountMonthArray.length">{{ (teacherLoginCountMonthArray[teacherLoginCountMonthArray.length - 1].login) > 0 ? (((teacherLoginCountMonthArray[teacherLoginCountMonthArray.length - 1].login) / teacherNum) * 100).toFixed(2) + '%' : 0 }}</span>
+              <!-- <span v-if="teacherLoginCountMonthArray.length">{{
                 teacherLoginCountMonthArray[
                   teacherLoginCountMonthArray.length - 1
                 ].login -
@@ -39,7 +40,7 @@
                     ).toFixed(2) *
                       100 +
                     "%"
-              }}</span>
+              }}</span> -->
             </div>
             <div class="info blueBG">
               <span>本月登录教师用户总数</span>

+ 20 - 5
src/components/pages/easy/addCourse.vue

@@ -173,13 +173,14 @@
                           dragOverBottom: newIndex === tIndex && typeIndex == 'task-'+tIndex && oldIndex < tIndex,
                         }">
                         <div @dragstart="dragTaskStart(t, tIndex)" @dragover.prevent="dragTaskOver(tIndex)"
-                          @dragend="dragTaskEnd()" draggable @click="goToTask(tIndex)" class="navTask" :class="{
+                          @dragend="dragTaskEnd()" :draggable="isdrag == 'task-'+tIndex" @click="goToTask(tIndex)" class="navTask" :class="{
                             isNavTask:
                               isClickColor > 0 && isClickColor == tIndex + 1,
                             isNavOpen: t.toolOpen,
                           }">
                           <div @click.stop="taskOpen(tIndex)" class="chapter_upload_open"></div>
-                          <div style="left: 8px;" class="chapter_upload_drag"></div>
+                          <div @mousedown="isdrag = 'task-'+tIndex" @mouseup="isdrag = ''"
+                            @touchstart="isdrag = 'task-'+tIndex" @touchend="isdrag = ''" style="left: 8px;" class="chapter_upload_drag"></div>
                           <div class="nt_taskBox">
                             <div class="nt_taskTitle">任务{{ tIndex + 1 }}:</div>
                             <div class="nt_taskName">
@@ -239,7 +240,7 @@
                             "><img src="../../../assets/icon/new/c_none.png" alt /><span>请添加学习内容</span></div>
                           <div v-else class="add_chapters_box" style="display: flex; flex-direction: column">
                             <div @dragstart="dragStart(item1, index1, 0)" @dragover.prevent="dragOver(index1, 0)"
-                              @dragend="dragEnd()" draggable class="chapter_upload" v-for="(item1, index1) in item.taskJson[0]
+                              @dragend="dragEnd()" :draggable="isdrag == 'chapter-'+'0'+'-'+index1" class="chapter_upload" v-for="(item1, index1) in item.taskJson[0]
                                 .chapterData" :key="item1.id" @click="
                               getChapterData(
                                 $event,
@@ -252,7 +253,8 @@
                                 dragOverTop2: newIndex === index1 && typeIndex == 'chapter-'+'0'+'-'+index1 && oldIndex > index1,
                                 dragOverBottom2: newIndex === index1 && typeIndex == 'chapter-'+'0'+'-'+index1 && oldIndex < index1,
                               }">
-                              <div class="chapter_upload_drag"></div>
+                              <div @mousedown="isdrag = 'chapter-'+'0'+'-'+index1" @mouseup="isdrag = ''"
+                                  @touchstart="isdrag = 'chapter-'+'0'+'-'+index1" @touchend="isdrag = ''" class="chapter_upload_drag"></div>
                               <div class="chapter_upload_t" style="width: 100%"></div>
                               <div class="chapter_upload_o" style="
                                   position: relative;
@@ -4872,6 +4874,7 @@ export default {
       oldData: null,
       newIndex: "",
       typeIndex: "",
+      isdrag: '',
     };
   },
   directives: {
@@ -9933,6 +9936,7 @@ export default {
       this.unitJson[this.unitIndex].chapterInfo[0].taskJson[this.taskCount].chapterData = [...newItems];
       this.newIndex = "";
       this.typeIndex = "";
+      this.isdrag = "";
       this.$forceUpdate()
     },
     dragTaskStart(val, i) {
@@ -9946,7 +9950,8 @@ export default {
     async dragTaskEnd() {
       if (this.newIndex == this.oldIndex) {
         this.typeIndex = "";
-          this.newIndex = "";
+        this.newIndex = "";
+        this.isdrag = "";
         return;
       }
       let count1 = await this.getWorksCount(2, 0, this.newIndex, 0)
@@ -9981,11 +9986,13 @@ export default {
             this.unitJson[this.unitIndex].chapterInfo[0].taskJson = [...newItems];
             this.typeIndex = "";
             this.newIndex = "";
+            this.isdrag = "";
             this.$forceUpdate()
           })
           .catch(() => {
             this.typeIndex = "";
             this.newIndex = "";
+            this.isdrag = "";
             return;
           });
         }else{
@@ -11112,6 +11119,10 @@ export default {
   box-sizing: border-box;
 }
 
+.chapter_upload:hover > .chapter_upload_drag{
+  display: block;
+}
+
 .chapter_upload_drag {
   position: absolute;
   cursor: pointer;
@@ -11121,6 +11132,7 @@ export default {
   background-image: url("../../../assets/icon/new/icon_course_drag.png");
   background-size: 100% 100%;
   z-index: 10;
+  display: none;
 }
 
 .chapter_upload_t {
@@ -13268,6 +13280,9 @@ ol {
   position: relative;
 }
 
+.navTask:hover > .chapter_upload_drag{
+  display: block;
+}
 .navTask .chapter_upload_open {
   content: '';
   display: block;

+ 20 - 3
src/components/pages/task/addCourse.vue

@@ -292,7 +292,7 @@
                           @dragstart="dragTaskStart(t, tIndex)"
                           @dragover.prevent="dragTaskOver(tIndex)"
                           @dragend="dragTaskEnd()"
-                          draggable
+                          :draggable="isdrag == 'task-'+tIndex"
                           @click="goToTask(tIndex)"
                           class="navTask"
                           :class="{
@@ -303,6 +303,8 @@
                         >
                           <div @click.stop="taskOpen(tIndex)" class="chapter_upload_open"></div>
                           <div
+                            @mousedown="isdrag = 'task-'+tIndex" @mouseup="isdrag = ''"
+                            @touchstart="isdrag = 'task-'+tIndex" @touchend="isdrag = ''"
                             style="left: 8px"
                             class="chapter_upload_drag"
                           ></div>
@@ -505,7 +507,7 @@
                                 dragOver(index1, itemTaskIndex)
                               "
                               @dragend="dragEnd()"
-                              draggable
+                              :draggable="isdrag == 'chapter-'+itemTaskIndex+'-'+index1"
                               class="chapter_upload"
                               v-for="(item1, index1) in itemTask.chapterData"
                               :key="item1.id"
@@ -531,7 +533,8 @@
                                   oldIndex < index1,
                               }"
                             >
-                              <div class="chapter_upload_drag"></div>
+                              <div @mousedown="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @mouseup="isdrag = ''"
+                                     @touchstart="isdrag = 'chapter-'+itemTaskIndex+'-'+index1" @touchend="isdrag = ''" class="chapter_upload_drag"></div>
                               <div
                                 class="chapter_upload_t"
                                 style="width: 100%"
@@ -8463,6 +8466,7 @@ export default {
       newIndex: "",
       englishList: {},
       typeIndex: "",
+      isdrag: '',
     };
   },
   directives: {
@@ -13637,6 +13641,7 @@ export default {
       ].chapterData = [...newItems];
       this.typeIndex = "";
       this.newIndex = "";
+      this.isdrag = "";
       this.$forceUpdate();
     },
     dragTaskStart(val, i) {
@@ -13651,6 +13656,7 @@ export default {
       if (this.newIndex == this.oldIndex) {
         this.newIndex = "";
         this.typeIndex = "";
+        this.isdrag = "";
         return;
       }
       let count1 = await this.getWorksCount(2, 0, this.newIndex, 0)
@@ -13676,11 +13682,13 @@ export default {
             this.unitJson[this.unitIndex].chapterInfo[0].taskJson = [...newItems];
             this.typeIndex = "";
             this.newIndex = "";
+            this.isdrag = "";
             this.$forceUpdate();
           })
           .catch(() => {
             this.typeIndex = "";
             this.newIndex = "";
+            this.isdrag = "";
             return;
           });
         }else{
@@ -14794,6 +14802,10 @@ export default {
   box-sizing: border-box;
 }
 
+.chapter_upload:hover > .chapter_upload_drag{
+  display: block;
+}
+
 .chapter_upload_drag {
   position: absolute;
   cursor: pointer;
@@ -14803,6 +14815,7 @@ export default {
   background-image: url("../../../assets/icon/new/icon_course_drag.png");
   background-size: 100% 100%;
   z-index: 10;
+  display: none;
 }
 
 .chapter_upload_t {
@@ -16943,6 +16956,10 @@ ol {
   position: relative;
 }
 
+.navTask:hover > .chapter_upload_drag{
+  display: block;
+}
+
 .navTask .chapter_upload_open {
   content: '';
   display: block;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است