Kaynağa Gözat

教研报告数据为空时不渲染优化

zhangjie 6 yıl önce
ebeveyn
işleme
a5aaba9c03

+ 68 - 67
stmms-web/src/main/webapp/static/report-pdf/js/chart-render.js

@@ -1,4 +1,4 @@
-(function (window, undefined) {
+(function(window, undefined) {
   var chartOption = {
     barPointTopic: getBarPointTopicOptions,
     barPointGrade: getBarPointGradeOptions,
@@ -35,43 +35,43 @@
     this.renderType = renderType || "canvas";
   }
 
-  Charts.prototype.initChart = function () {
+  Charts.prototype.initChart = function() {
     return window.echarts.init(this.dome, "", {
       renderer: this.renderType
     });
   };
 
-  Charts.prototype.renderChart = function () {
+  Charts.prototype.renderChart = function() {
     var options = chartOption[this.chartType](this.dataList);
     if (options) this.initChart().setOption(options, true);
   };
 
-  function getStrLen(str) {
-    var len = 0;
-    for (var i = 0; i < str.length; i++) {
-      if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) {
-        len += 2;
-      } else {
-        len++;
-      }
-    }
-    return len;
-  }
+  // function getStrLen(str) {
+  //   var len = 0;
+  //   for (var i = 0; i < str.length; i++) {
+  //     if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) {
+  //       len += 2;
+  //     } else {
+  //       len++;
+  //     }
+  //   }
+  //   return len;
+  // }
 
   function getBarPointTopicOptions(datas) {
-    var yAxisLabels = datas.map(function (item) {
-      return [item.name, item.number].join('#');
+    var yAxisLabels = datas.map(function(item) {
+      return [item.name, item.number].join("#");
     });
-    var avgDatas = datas.map(function (item) {
+    var avgDatas = datas.map(function(item) {
       return item.avgScore;
     });
-    var stdDatas = datas.map(function (item) {
+    var stdDatas = datas.map(function(item) {
       return item.stdevScore;
     });
-    var scoreRateDatas = datas.map(function (item) {
+    var scoreRateDatas = datas.map(function(item) {
       return item.scoreRate;
     });
-    var fullRateDatas = datas.map(function (item) {
+    var fullRateDatas = datas.map(function(item) {
       return item.fullRate;
     });
 
@@ -179,7 +179,7 @@
           },
           axisLabel: {
             fontSize: 18,
-            formatter: function (value, index) {
+            formatter: function(value, index) {
               if (!index) return "0";
               return value.toFixed(2);
             }
@@ -208,7 +208,7 @@
           },
           axisLabel: {
             fontSize: 18,
-            formatter: function (value, index) {
+            formatter: function(value, index) {
               if (!index) return "";
               return parseInt(value * 100) + "%";
             }
@@ -239,10 +239,10 @@
           axisLabel: {
             fontSize: 17,
             margin: 20,
-            formatter: function (value) {
-              var str = value.split('#');
-              if (str[0].length > 10) str[0] = str[0].substr(0, 10) + '...'
-              return [str[0], str[1]].join(' ')
+            formatter: function(value) {
+              var str = value.split("#");
+              if (str[0].length > 10) str[0] = str[0].substr(0, 10) + "...";
+              return [str[0], str[1]].join(" ");
             }
           }
         },
@@ -283,23 +283,23 @@
   }
 
   function getBarPointGradeOptions(datas) {
-    var yAxisLabels = datas.map(function (item) {
+    var yAxisLabels = datas.map(function(item) {
       return item.name;
     });
-    var avgDatas = datas.map(function (item) {
+    var avgDatas = datas.map(function(item) {
       return item.avgScore;
     });
-    var maxDatas = datas.map(function (item) {
+    var maxDatas = datas.map(function(item) {
       return item.maxScore;
     });
-    var minDatas = datas.map(function (item) {
+    var minDatas = datas.map(function(item) {
       return item.minScore;
     });
 
-    var passRateDatas = datas.map(function (item) {
+    var passRateDatas = datas.map(function(item) {
       return Math.round(item.passRate * 100);
     });
-    var excellentRateDatas = datas.map(function (item) {
+    var excellentRateDatas = datas.map(function(item) {
       return Math.round(item.excellentRate * 100);
     });
 
@@ -356,7 +356,7 @@
           axisLabel: {
             fontSize: 18,
             color: "#555",
-            formatter: function (value, index) {
+            formatter: function(value, index) {
               if (!index) return "0";
               return value;
             }
@@ -386,7 +386,7 @@
           axisLabel: {
             fontSize: 18,
             color: "#555",
-            formatter: function (value, index) {
+            formatter: function(value, index) {
               if (!index) return "";
               return (value / 100).toFixed(1);
             }
@@ -417,7 +417,7 @@
           axisLabel: {
             fontSize: 19,
             margin: 30,
-            formatter: function (value) {
+            formatter: function(value) {
               if (value.length > 8) {
                 return [value.substring(0, 8), value.substring(8)].join("\n");
               }
@@ -434,7 +434,7 @@
           axisLabel: {
             show: false,
             fontSize: 19,
-            formatter: function (value) {
+            formatter: function(value) {
               if (value.length > 8) {
                 return [value.substring(0, 8), value.substring(8)].join("\n");
               }
@@ -541,11 +541,11 @@
       "相对平均分"
     ];
 
-    var legendData = datas.map(function (item) {
+    var legendData = datas.map(function(item) {
       return item.name;
     });
-
-    var series = datas.map(function (item, index) {
+    var barWidth = 22 - datas.length * 2;
+    var series = datas.map(function(item, index) {
       return {
         type: "bar",
         data: [
@@ -559,6 +559,7 @@
           item.avgScore,
           item.relativeAvgScore
         ],
+        barWidth: barWidth,
         name: item.name
       };
     });
@@ -640,25 +641,25 @@
     var symbolCircle =
       "path://M16,9.2c-3.8,0-6.8,3.1-6.8,6.8s3.1,6.8,6.8,6.8s6.8-3.1,6.8-6.8S19.8,9.2,16,9.2z M29.7,16  c0,7.6-6.1,13.7-13.7,13.7S2.3,23.6,2.3,16S8.4,2.3,16,2.3S29.7,8.4,29.7,16z";
     var classes = datas.classes;
-    var xAxisData = classes.map(function (item) {
+    var xAxisData = classes.map(function(item) {
       return item.name;
     });
-    var avgDatas = classes.map(function (item) {
+    var avgDatas = classes.map(function(item) {
       return item.avgScore;
     });
-    var relateAvgDatas = classes.map(function (item) {
+    var relateAvgDatas = classes.map(function(item) {
       return item.relativeAvgScore;
     });
-    var maxDatas = classes.map(function (item) {
+    var maxDatas = classes.map(function(item) {
       return item.maxScore;
     });
-    var minDatas = classes.map(function (item) {
+    var minDatas = classes.map(function(item) {
       return item.minScore;
     });
-    var passRateDatas = classes.map(function (item) {
+    var passRateDatas = classes.map(function(item) {
       return item.passRate;
     });
-    var excellentRateDatas = classes.map(function (item) {
+    var excellentRateDatas = classes.map(function(item) {
       return item.excellentRate;
     });
 
@@ -709,7 +710,7 @@
           fontSize: 16,
           margin: 12,
           interval: 0,
-          formatter: function (value) {
+          formatter: function(value) {
             if (value.length > 6) {
               return [value.substring(0, 6), value.substring(6)].join("\n");
             }
@@ -762,7 +763,7 @@
           axisLabel: {
             fontSize: 16,
             color: "#555",
-            formatter: function (value) {
+            formatter: function(value) {
               if (!value) return "0";
               return value.toFixed(1);
             }
@@ -815,10 +816,10 @@
   }
 
   function getLineOptions(datas) {
-    var xAxisData = datas.map(function (item) {
+    var xAxisData = datas.map(function(item) {
       return item.name;
     });
-    var levelDatas = datas.map(function (item) {
+    var levelDatas = datas.map(function(item) {
       return item.difficulty;
     });
     var linearColor = new echarts.graphic.LinearGradient(0, 1, 0, 0, [
@@ -855,8 +856,8 @@
           margin: 20,
           interval: 0,
           formatter: function name(value) {
-            var str = sectionArr(value, 9)
-            return str.join('\n')
+            var str = sectionArr(value, 9);
+            return str.join("\n");
           }
         },
         axisLine: {
@@ -888,7 +889,7 @@
           fontSize: 19,
           margin: 30,
           color: "#555",
-          formatter: function (value, index) {
+          formatter: function(value, index) {
             return value.toFixed(1);
           }
         }
@@ -910,10 +911,10 @@
   }
 
   function getLineReverseOptions(datas) {
-    var yAxisDatas = datas.map(function (item) {
-      return [item.name, item.number].join('#');
+    var yAxisDatas = datas.map(function(item) {
+      return [item.name, item.number].join("#");
     });
-    var levelDatas = datas.map(function (item) {
+    var levelDatas = datas.map(function(item) {
       return item.difficulty;
     });
 
@@ -952,14 +953,14 @@
           fontSize: 17,
           margin: 20,
           interval: 0,
-          formatter: function (value) {
-            var str = value.split('#');
+          formatter: function(value) {
+            var str = value.split("#");
             if (str[1]) {
-              if (str[0].length > 10) str[0] = str[0].substr(0, 10) + '...';
-              return [str[0], str[1]].join(' ')
+              if (str[0].length > 10) str[0] = str[0].substr(0, 10) + "...";
+              return [str[0], str[1]].join(" ");
             } else {
-              if (str[0].length > 13) str[0] = str[0].substr(0, 13) + '...';
-              return str[0]
+              if (str[0].length > 13) str[0] = str[0].substr(0, 13) + "...";
+              return str[0];
             }
           }
         },
@@ -993,7 +994,7 @@
           fontSize: 16,
           margin: 20,
           color: "#555",
-          formatter: function (value, index) {
+          formatter: function(value, index) {
             return value.toFixed(1);
           }
         }
@@ -1018,10 +1019,10 @@
     var lineColors = colors.slice(0, -1);
     var datas = datainfo.dataList;
     var lineColor = lineColors[datainfo.index % colors.length];
-    var xAxisData = datas.map(function (item) {
+    var xAxisData = datas.map(function(item) {
       return item.score;
     });
-    var levelDatas = datas.map(function (item) {
+    var levelDatas = datas.map(function(item) {
       return item.rangeRate;
     });
 
@@ -1046,7 +1047,7 @@
           fontSize: 19,
           margin: 20,
           interval: 0,
-          formatter: function (value) {
+          formatter: function(value) {
             return value + "-";
           }
         },
@@ -1075,7 +1076,7 @@
         axisLabel: {
           fontSize: 19,
           margin: 20,
-          formatter: function (value, index) {
+          formatter: function(value, index) {
             return value.toFixed(2);
           }
         }

+ 58 - 51
stmms-web/src/main/webapp/static/report-pdf/js/teaching.js

@@ -7,11 +7,11 @@ build();
 publishReady();
 
 function build() {
-  if (dataStatic.code && dataStatic.code === '500') {
+  if (dataStatic.code && dataStatic.code === "500") {
     var hTmpl = $("#page-error").html();
     var $dom = tmpl(hTmpl, { message: dataStatic.message });
     $bodyMain.append(createNewBox($dom));
-    return
+    return;
   }
   var datas = dataParse(dataStatic);
 
@@ -34,7 +34,10 @@ function build() {
   createBarPointChart(datas.basic_college, 22, "学院成绩分析", "barPointGrade");
   createLineChart(datas.basic_main_question);
   createLineReverseChart(datas.basic_question); // basic_sub_question
-  createDiscriminationDifficultyLevel(datas.discrimination_level, "discrimination");
+  createDiscriminationDifficultyLevel(
+    datas.discrimination_level,
+    "discrimination"
+  );
   createDiscriminationDifficultyLevel(datas.difficulty_level, "difficulty");
   createBasicQuestion(datas.basic_question);
   createBasicMainQuestion(datas.basic_main_question);
@@ -48,11 +51,11 @@ function build() {
 }
 
 function publishReady() {
-  var eventEmitInterval = setInterval(function () {
+  var eventEmitInterval = setInterval(function() {
     document.body.dispatchEvent(new Event("view-ready"));
   }, 25);
 
-  document.body.addEventListener("view-ready-acknowledged", function () {
+  document.body.addEventListener("view-ready-acknowledged", function() {
     clearInterval(eventEmitInterval);
   });
 }
@@ -66,7 +69,7 @@ function createCover(cover) {
 function createBarPointChart(dataList, splitRange, title, chartType) {
   var hTmpl = $("#page-chart").html();
   var labelHeight = Math.round(1170 / splitRange);
-  sectionArr(dataList, splitRange).forEach(function (item) {
+  sectionArr(dataList, splitRange).forEach(function(item) {
     var chartId = getEchartId();
     var $dom = tmpl(hTmpl, {
       title: title,
@@ -86,7 +89,7 @@ function createBarPointChart(dataList, splitRange, title, chartType) {
 function createTeacherScore(dataList) {
   var hTmpl = $("#teacher-score").html();
   var splitList = sectionArr(dataList, 6);
-  splitList.forEach(function (item) {
+  splitList.forEach(function(item) {
     var chartId = getEchartId();
     var $dom = tmpl(hTmpl, {
       chartId: chartId,
@@ -103,7 +106,7 @@ function createTeacherScore(dataList) {
   // 总明细表
   if (splitList.length > 1) {
     var hTmpl2 = $("#teacher-score-table").html();
-    sectionArr(dataList, 26).forEach(function (item) {
+    sectionArr(dataList, 26).forEach(function(item) {
       var $dom = tmpl(hTmpl2, {
         dataList: item,
         pageTableClass: "teacher-table"
@@ -116,21 +119,21 @@ function createTeacherScore(dataList) {
 function createTeacherGrade(dataList) {
   var hTmpl = $("#teacher-grade").html();
   var sectionDataList = [];
-  dataList.map(function (item) {
+  dataList.map(function(item) {
     if (item.classes.length <= 8) {
-      sectionDataList.push(item)
+      sectionDataList.push(item);
     } else {
-      sectionArr(item.classes, 7).forEach(function (elem) {
+      sectionArr(item.classes, 7).forEach(function(elem) {
         sectionDataList.push({
           name: item.name,
           classes: elem
-        })
+        });
       });
     }
   });
 
-  sectionArr(sectionDataList, 3).forEach(function (item) {
-    var chartList = item.map(function (elem) {
+  sectionArr(sectionDataList, 3).forEach(function(item) {
+    var chartList = item.map(function(elem) {
       var chartId = getEchartId();
       addEchart({
         chartId: chartId,
@@ -148,9 +151,10 @@ function createTeacherGrade(dataList) {
 
 // 大题难度分析
 function createLineChart(dataList) {
+  if (!dataList.length) return;
   if (dataList.length > 6) {
-    createLineReverseChart(dataList, '大题难度分析');
-    return
+    createLineReverseChart(dataList, "大题难度分析");
+    return;
   }
 
   var hTmpl = $("#page-chart").html();
@@ -170,7 +174,7 @@ function createLineChart(dataList) {
 // 小题难度分析
 function createLineReverseChart(dataList, tableName) {
   var hTmpl = $("#page-chart").html();
-  sectionArr(dataList, 46).forEach(function (item) {
+  sectionArr(dataList, 46).forEach(function(item) {
     var chartId = getEchartId();
     var $dom = tmpl(hTmpl, {
       title: tableName || "小题难度分析",
@@ -188,7 +192,7 @@ function createLineReverseChart(dataList, tableName) {
 // 区分度等级分布,难度等级分布
 function createDiscriminationDifficultyLevel(dataList, type) {
   var hTmpl = $("#" + type + "-level-table").html();
-  groupSectionArrDynamic(dataList, 30).forEach(function (item) {
+  groupSectionArrDynamic(dataList, 30).forEach(function(item) {
     var $dom = tmpl(hTmpl, {
       dataList: item
     });
@@ -198,7 +202,7 @@ function createDiscriminationDifficultyLevel(dataList, type) {
 // 题目统计特征
 function createBasicQuestion(dataList) {
   var hTmpl = $("#basic-question-table").html();
-  sectionArr(dataList, 33).forEach(function (item) {
+  sectionArr(dataList, 33).forEach(function(item) {
     var $dom = tmpl(hTmpl, {
       dataList: item
     });
@@ -208,7 +212,7 @@ function createBasicQuestion(dataList) {
 // 大题结构特征
 function createBasicMainQuestion(dataList) {
   var hTmpl = $("#basic-main-question-table").html();
-  sectionArr(dataList, 33).forEach(function (item) {
+  sectionArr(dataList, 33).forEach(function(item) {
     var $dom = tmpl(hTmpl, {
       dataList: item
     });
@@ -221,8 +225,8 @@ function createBasicQuestionOption(data) {
   var hTmpl = $("#basic-question-option-table").html();
   // 选项多余7个会分组
   var options = sectionArr(data.options, 8);
-  sectionArr(data.questions, 32).forEach(function (item) {
-    options.map(function (elem) {
+  sectionArr(data.questions, 32).forEach(function(item) {
+    options.map(function(elem) {
       var $dom = tmpl(hTmpl, {
         options: elem,
         questions: item
@@ -234,7 +238,7 @@ function createBasicQuestionOption(data) {
 // 考生分段比例
 function createRangeLevel(dataList) {
   var hTmpl = $("#range-level-table").html();
-  sectionArr(dataList, 31).forEach(function (item) {
+  sectionArr(dataList, 31).forEach(function(item) {
     var $dom = tmpl(hTmpl, {
       dataList: item
     });
@@ -243,14 +247,15 @@ function createRangeLevel(dataList) {
 }
 // 总分频率分布
 function createRange10TotalScore(datas) {
-  var pageList = [
-    {
+  var pageList = [];
+  if (datas.total.length) {
+    pageList.push({
       title: "总分频率分布分析",
       dataList: datas.total
-    }
-  ];
+    });
+  }
   pageList = pageList.concat(
-    datas.classes.map(function (item) {
+    datas.classes.map(function(item) {
       return {
         title: item.name + " 总分频率分布",
         dataList: item.ranges
@@ -258,7 +263,7 @@ function createRange10TotalScore(datas) {
     })
   );
   var hTmpl = $("#range-totalScore").html();
-  pageList.forEach(function (item, index) {
+  pageList.forEach(function(item, index) {
     var chartId = getEchartId();
     addEchart({
       chartId: chartId,
@@ -280,14 +285,16 @@ function createRange10TotalScore(datas) {
 }
 // 总分一分一段表
 function createRangeTotalScore(datas) {
-  var pageList = [
-    {
+  var pageList = [];
+  if (datas.total.length) {
+    pageList.push({
       title: "总分一分一段表",
       dataList: datas.total
-    }
-  ];
+    });
+  }
+
   pageList = pageList.concat(
-    datas.classes.map(function (item) {
+    datas.classes.map(function(item) {
       return {
         title: item.name + " 总分一分一段表",
         dataList: item.ranges
@@ -295,8 +302,8 @@ function createRangeTotalScore(datas) {
     })
   );
   var hTmpl = $("#range-totalScore").html();
-  pageList.forEach(function (item, index) {
-    sectionArr(item.dataList, 32).forEach(function (elem) {
+  pageList.forEach(function(item, index) {
+    sectionArr(item.dataList, 32).forEach(function(elem) {
       var $dom = tmpl(hTmpl, {
         title: item.title,
         isOneStep: true,
@@ -311,8 +318,8 @@ function createRangeTotalScore(datas) {
 // 六段频率统计
 function createRangeSegment(dataList) {
   var hTmpl = $("#range-segment-table").html();
-  dataList.map(function (item) {
-    sectionArrDynamic(item.groups, 30, 'segments').map(function (elem) {
+  dataList.map(function(item) {
+    sectionArrDynamic(item.groups, 30, "segments").map(function(elem) {
       var $dom = tmpl(hTmpl, {
         title: item.name + " 六段频率统计",
         dataList: elem
@@ -352,7 +359,7 @@ function createNewBox(bodyDom, boxType) {
  *
  */
 function createEchart() {
-  echartList.forEach(function (elem) {
+  echartList.forEach(function(elem) {
     var charts = new Charts(
       document.getElementById(elem.chartId),
       elem.datas,
@@ -367,7 +374,7 @@ function createEchart() {
  */
 function fillCatalogNum() {
   var hTmpl = $("#page-foot").html();
-  $(".report-box").each(function (index) {
+  $(".report-box").each(function(index) {
     var page = index + 1;
     var dom = tmpl(hTmpl, {
       name: cover.name,
@@ -423,7 +430,10 @@ function sectionArrDynamic(arrayList, sectionMaxItemLength, childrenName) {
   var splitSectionItemLen = 0;
   var splitSectionArr = [];
   for (var i = 0, len = arrayList.length; i < len; i++) {
-    if (splitSectionItemLen + arrayList[i][childrenName].length > sectionMaxItemLength) {
+    if (
+      splitSectionItemLen + arrayList[i][childrenName].length >
+      sectionMaxItemLength
+    ) {
       splitArr.push(splitSectionArr);
       splitSectionItemLen = 0;
       splitSectionArr = [];
@@ -436,18 +446,18 @@ function sectionArrDynamic(arrayList, sectionMaxItemLength, childrenName) {
 }
 /**
  * 组元素过多,且无规律时,使用此方法更合理
- * @param {*} arrayList 
- * @param {*} sectionMaxItemLength 
- * @param {*} childrenName 
+ * @param {*} arrayList
+ * @param {*} sectionMaxItemLength
+ * @param {*} childrenName
  */
 function groupSectionArrDynamic(arrayList, sectionMaxItemLength) {
   var splitArr = [];
   var splitSectionItemLen = 0;
   var splitSectionArr = [];
 
-  arrayList.map(function (item) {
+  arrayList.map(function(item) {
     var groupsList = [];
-    item.groups.map(function (elem) {
+    item.groups.map(function(elem) {
       splitSectionItemLen++;
       groupsList.push(elem);
 
@@ -459,9 +469,8 @@ function groupSectionArrDynamic(arrayList, sectionMaxItemLength) {
         splitArr.push(splitSectionArr);
         splitSectionItemLen = 0;
         splitSectionArr = [];
-        groupsList = []
+        groupsList = [];
       }
-
     });
 
     if (groupsList.length)
@@ -469,10 +478,8 @@ function groupSectionArrDynamic(arrayList, sectionMaxItemLength) {
         name: item.name,
         groups: groupsList
       });
-
   });
-  if (splitSectionArr.length)
-    splitArr.push(splitSectionArr);
+  if (splitSectionArr.length) splitArr.push(splitSectionArr);
 
   return splitArr;
 }