|
@@ -0,0 +1,926 @@
|
|
|
+const colors = [
|
|
|
+ "rgba(67, 80, 136, 0.8)",
|
|
|
+ "rgba(151, 94, 229, 0.8)",
|
|
|
+ "rgba(61, 160, 255, 0.8)",
|
|
|
+ "rgba(48, 203, 203, 0.8)",
|
|
|
+ "rgba(75, 203, 116, 0.8)",
|
|
|
+ "rgba(250, 212, 68, 0.8)",
|
|
|
+ "rgba(217, 217, 217, 0.8)",
|
|
|
+];
|
|
|
+const textStyle = {
|
|
|
+ color: "#555",
|
|
|
+ fontFamily:
|
|
|
+ '"PingFang SC", "Microsoft YaHei", Tahoma,Helvetica, Arial, sans-serif',
|
|
|
+};
|
|
|
+const animationIsOpen = false;
|
|
|
+
|
|
|
+function getArrayMaxNum(arr) {
|
|
|
+ return Math.max.apply(null, arr);
|
|
|
+}
|
|
|
+// chart -------------------------->
|
|
|
+export function getScoreBarOptions(dataObj) {
|
|
|
+ let series = [
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: dataObj.map((item) => item.studentCount),
|
|
|
+ barWidth: 20,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ grid: {
|
|
|
+ left: 50,
|
|
|
+ top: 40,
|
|
|
+ bottom: 40,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: "category",
|
|
|
+ data: dataObj.map((item) => `${item.minScore}~${item.maxScore}`),
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(250,250,250,1)", "rgba(255,255,255,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 17,
|
|
|
+ margin: 20,
|
|
|
+ formatter: function (value) {
|
|
|
+ let str = value.split("#");
|
|
|
+ if (str[0].length > 10) str[0] = str[0].substr(0, 10) + "...";
|
|
|
+ return [str[0], str[1]].join(" ");
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ series: series,
|
|
|
+ };
|
|
|
+}
|
|
|
+export function getBarsOptions(dataObj) {
|
|
|
+ let xAxisData = dataObj.map((item) => item.name);
|
|
|
+ let avgDatas = dataObj.map((item) => item.avgScore);
|
|
|
+ let maxDatas = dataObj.map((item) => item.maxScore);
|
|
|
+ let minDatas = dataObj.map((item) => item.minScore);
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ color: [
|
|
|
+ "rgba(61, 160, 255, 0.8)",
|
|
|
+ "#4bcb74",
|
|
|
+ "rgba(151, 94, 229, 0.8)",
|
|
|
+ "#999999",
|
|
|
+ "rgba(67, 80, 136, 0.8)",
|
|
|
+ "rgba(250, 212, 68, 0.8)",
|
|
|
+ ],
|
|
|
+ grid: {
|
|
|
+ top: 50,
|
|
|
+ bottom: 90,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: "category",
|
|
|
+ data: xAxisData,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(255,255,255,1)", "rgba(250,250,250,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ margin: 12,
|
|
|
+ interval: 0,
|
|
|
+ formatter: function (value) {
|
|
|
+ if (value.length > 6) {
|
|
|
+ return [value.substring(0, 6), value.substring(6)].join("\n");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ color: "#555",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: avgDatas,
|
|
|
+ name: "平均分",
|
|
|
+ barWidth: 20,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: maxDatas,
|
|
|
+ name: "最高分",
|
|
|
+ barWidth: 20,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: minDatas,
|
|
|
+ name: "最低分",
|
|
|
+ barWidth: 20,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+}
|
|
|
+export function getBarPointTopicOptions(dataObj) {
|
|
|
+ let yAxisLabels = dataObj.map(
|
|
|
+ (item) => `${item.title} ${item.mainNumber}-${item.subNumber}`
|
|
|
+ );
|
|
|
+ let avgDatas = dataObj.map((item) => item.avgScore);
|
|
|
+ let scoreRateDatas = dataObj.map((item) => item.scoreRate);
|
|
|
+ let fullRateDatas = dataObj.map((item) => item.fullScoreRate);
|
|
|
+ const xAxisTopMax = Math.ceil(getArrayMaxNum(avgDatas));
|
|
|
+
|
|
|
+ let legendData = ["单题平均分", "得分率", "满分率"];
|
|
|
+ let series = [
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: avgDatas,
|
|
|
+ barWidth: 6,
|
|
|
+ barGap: "50%",
|
|
|
+ name: "单题平均分",
|
|
|
+ xAxisIndex: 0,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(61, 160, 255, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "line",
|
|
|
+ data: scoreRateDatas,
|
|
|
+ symbol: "circle",
|
|
|
+ symbolSize: 8,
|
|
|
+ name: "得分率",
|
|
|
+ xAxisIndex: 1,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(67, 80, 136, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "line",
|
|
|
+ data: fullRateDatas,
|
|
|
+ symbol: "circle",
|
|
|
+ symbolSize: 8,
|
|
|
+ name: "满分率",
|
|
|
+ xAxisIndex: 1,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(250, 212, 68, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ];
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ legend: {
|
|
|
+ data: legendData,
|
|
|
+ itemGap: 30,
|
|
|
+ itemWidth: 14,
|
|
|
+ bottom: 20,
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 19,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ grid: [
|
|
|
+ {
|
|
|
+ left: "20%",
|
|
|
+ top: 120,
|
|
|
+ width: "66%",
|
|
|
+ bottom: 100,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ position: "top",
|
|
|
+ min: 0,
|
|
|
+ max: xAxisTopMax,
|
|
|
+ interval: xAxisTopMax / 10,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ formatter: function (value, index) {
|
|
|
+ if (!index) return "0";
|
|
|
+ return value.toFixed(2);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ min: 0,
|
|
|
+ max: 1,
|
|
|
+ interval: 0.1,
|
|
|
+ position: "bottom",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ formatter: function (value, index) {
|
|
|
+ if (!index) return "0";
|
|
|
+ return parseInt(value * 100) + "%";
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: "category",
|
|
|
+ gridIndex: 0,
|
|
|
+ data: yAxisLabels,
|
|
|
+ inverse: true,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(250,250,250,1)", "rgba(255,255,255,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 17,
|
|
|
+ margin: 20,
|
|
|
+ formatter: function (value) {
|
|
|
+ let str = value.split("#");
|
|
|
+ if (str[0].length > 10) str[0] = str[0].substr(0, 10) + "...";
|
|
|
+ return [str[0], str[1]].join(" ");
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ series: series,
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+// other
|
|
|
+export function getBarPointGradeOptions(dataObj) {
|
|
|
+ let datas = dataObj.datas;
|
|
|
+ let xAxisTopMax = dataObj.xAxisTopMax;
|
|
|
+
|
|
|
+ let yAxisLabels = datas.map(function (item) {
|
|
|
+ return item.name;
|
|
|
+ });
|
|
|
+ let avgDatas = datas.map(function (item) {
|
|
|
+ return item.avgScore;
|
|
|
+ });
|
|
|
+ let maxDatas = datas.map(function (item) {
|
|
|
+ return item.maxScore;
|
|
|
+ });
|
|
|
+ let minDatas = datas.map(function (item) {
|
|
|
+ return item.minScore;
|
|
|
+ });
|
|
|
+ let passRateDatas = datas.map(function (item) {
|
|
|
+ return Math.round(item.passRate * 100);
|
|
|
+ });
|
|
|
+ let excellentRateDatas = datas.map(function (item) {
|
|
|
+ return Math.round(item.excellentRate * 100);
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ legend: {
|
|
|
+ data: ["平均分", "最高分", "最低分", "及格率", "优秀率"],
|
|
|
+ itemGap: 30,
|
|
|
+ itemWidth: 14,
|
|
|
+ bottom: 20,
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 19,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ grid: [
|
|
|
+ {
|
|
|
+ left: "20%",
|
|
|
+ top: 120,
|
|
|
+ width: "66%",
|
|
|
+ bottom: 100,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ xAxis: [
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ position: "top",
|
|
|
+ min: 0,
|
|
|
+ max: xAxisTopMax,
|
|
|
+ interval: xAxisTopMax / 10,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ color: "#555",
|
|
|
+ formatter: function (value, index) {
|
|
|
+ if (!index) return "0";
|
|
|
+ return value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ min: 0,
|
|
|
+ max: 100,
|
|
|
+ interval: 10,
|
|
|
+ position: "bottom",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ color: "#555",
|
|
|
+ formatter: function (value, index) {
|
|
|
+ if (!index) return "0";
|
|
|
+ return value + "%";
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: "category",
|
|
|
+ gridIndex: 0,
|
|
|
+ data: yAxisLabels,
|
|
|
+ inverse: true,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(250,250,250,1)", "rgba(255,255,255,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 19,
|
|
|
+ margin: 30,
|
|
|
+ formatter: function (value) {
|
|
|
+ if (value.length > 8) {
|
|
|
+ return [value.substring(0, 8), value.substring(8)].join("\n");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: avgDatas,
|
|
|
+ barWidth: 6,
|
|
|
+ barGap: "50%",
|
|
|
+ name: "平均分",
|
|
|
+ xAxisIndex: 0,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(61, 160, 255, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: maxDatas,
|
|
|
+ barWidth: 6,
|
|
|
+ barGap: "50%",
|
|
|
+ name: "最高分",
|
|
|
+ xAxisIndex: 0,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(151, 94, 229, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: minDatas,
|
|
|
+ barWidth: 6,
|
|
|
+ barGap: "50%",
|
|
|
+ name: "最低分",
|
|
|
+ xAxisIndex: 0,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(217, 217, 217, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "line",
|
|
|
+ data: passRateDatas,
|
|
|
+ symbol: "circle",
|
|
|
+ symbolSize: 8,
|
|
|
+ name: "及格率",
|
|
|
+ xAxisIndex: 1,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(67, 80, 136, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "line",
|
|
|
+ data: excellentRateDatas,
|
|
|
+ symbol: "circle",
|
|
|
+ symbolSize: 8,
|
|
|
+ name: "优秀率",
|
|
|
+ xAxisIndex: 1,
|
|
|
+ itemStyle: {
|
|
|
+ color: "rgba(250, 212, 68, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export function getBarTeachersOptions(datas) {
|
|
|
+ let xAxisData = [
|
|
|
+ "实考人数",
|
|
|
+ "最高分",
|
|
|
+ "最低分",
|
|
|
+ "及格人数",
|
|
|
+ "及格率",
|
|
|
+ "优秀人数",
|
|
|
+ "优秀率",
|
|
|
+ "平均分",
|
|
|
+ "相对平均分",
|
|
|
+ ];
|
|
|
+
|
|
|
+ let legendData = datas.map(function (item) {
|
|
|
+ return item.name;
|
|
|
+ });
|
|
|
+ let barWidth = 22 - datas.length * 2;
|
|
|
+ let series = datas.map(function (item, index) {
|
|
|
+ return {
|
|
|
+ type: "bar",
|
|
|
+ data: [
|
|
|
+ item.totalCount,
|
|
|
+ item.maxScore,
|
|
|
+ item.minScore,
|
|
|
+ item.passCount,
|
|
|
+ item.passRate100,
|
|
|
+ item.excellentCount,
|
|
|
+ item.excellentRate100,
|
|
|
+ item.avgScore,
|
|
|
+ item.relativeAvgScore,
|
|
|
+ ],
|
|
|
+ barWidth: barWidth,
|
|
|
+ name: item.name,
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ color: colors,
|
|
|
+ legend: {
|
|
|
+ data: legendData,
|
|
|
+ left: "center",
|
|
|
+ bottom: 10,
|
|
|
+ itemGap: 20,
|
|
|
+ itemWidth: 14,
|
|
|
+ textStyle: {
|
|
|
+ fontSize: 19,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ show: true,
|
|
|
+ left: 80,
|
|
|
+ right: 50,
|
|
|
+ top: 100,
|
|
|
+ bottom: 100,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: "category",
|
|
|
+ data: xAxisData,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(255,255,255,1)", "rgba(250,250,250,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 18,
|
|
|
+ margin: 12,
|
|
|
+ interval: 0,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ type: "value",
|
|
|
+ z: 1,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ color: "#555",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ series: series,
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export function getBarTeacherGradeOptions(datas) {
|
|
|
+ let title = datas.name + "_任课班级成绩分析";
|
|
|
+ let 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";
|
|
|
+ let classes = datas.classes;
|
|
|
+ let xAxisData = classes.map(function (item) {
|
|
|
+ return item.name;
|
|
|
+ });
|
|
|
+ let avgDatas = classes.map(function (item) {
|
|
|
+ return item.avgScore;
|
|
|
+ });
|
|
|
+ let relateAvgDatas = classes.map(function (item) {
|
|
|
+ return item.relativeAvgScore;
|
|
|
+ });
|
|
|
+ let maxDatas = classes.map(function (item) {
|
|
|
+ return item.maxScore;
|
|
|
+ });
|
|
|
+ let minDatas = classes.map(function (item) {
|
|
|
+ return item.minScore;
|
|
|
+ });
|
|
|
+ let passRateDatas = classes.map(function (item) {
|
|
|
+ return item.passRate;
|
|
|
+ });
|
|
|
+ let excellentRateDatas = classes.map(function (item) {
|
|
|
+ return item.excellentRate;
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ color: [
|
|
|
+ "rgba(61, 160, 255, 0.8)",
|
|
|
+ "#4bcb74",
|
|
|
+ "rgba(151, 94, 229, 0.8)",
|
|
|
+ "#999999",
|
|
|
+ "rgba(67, 80, 136, 0.8)",
|
|
|
+ "rgba(250, 212, 68, 0.8)",
|
|
|
+ ],
|
|
|
+ title: {
|
|
|
+ text: "▲ " + title,
|
|
|
+ left: "center",
|
|
|
+ bottom: 0,
|
|
|
+ textStyle: {
|
|
|
+ color: "rgba(67, 80, 136, 0.8)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ top: 50,
|
|
|
+ bottom: 90,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: "category",
|
|
|
+ data: xAxisData,
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ splitArea: {
|
|
|
+ show: true,
|
|
|
+ areaStyle: {
|
|
|
+ color: ["rgba(255,255,255,1)", "rgba(250,250,250,1)"],
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ margin: 12,
|
|
|
+ interval: 0,
|
|
|
+ formatter: function (value) {
|
|
|
+ if (value.length > 6) {
|
|
|
+ return [value.substring(0, 6), value.substring(6)].join("\n");
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ z: 1,
|
|
|
+ position: "left",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ color: "#555",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "value",
|
|
|
+ min: 0,
|
|
|
+ max: 1,
|
|
|
+ position: "right",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 16,
|
|
|
+ color: "#555",
|
|
|
+ formatter: function (value) {
|
|
|
+ if (!value) return "0";
|
|
|
+ return value.toFixed(1);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: avgDatas,
|
|
|
+ name: "平均分",
|
|
|
+ barWidth: 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: relateAvgDatas,
|
|
|
+ name: "相对平均分",
|
|
|
+ barWidth: 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: maxDatas,
|
|
|
+ name: "最高分",
|
|
|
+ barWidth: 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "bar",
|
|
|
+ data: minDatas,
|
|
|
+ name: "最低分",
|
|
|
+ barWidth: 12,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "scatter",
|
|
|
+ data: passRateDatas,
|
|
|
+ yAxisIndex: 1,
|
|
|
+ symbol: symbolCircle,
|
|
|
+ symbolSize: 10,
|
|
|
+ name: "及格率",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: "scatter",
|
|
|
+ data: excellentRateDatas,
|
|
|
+ yAxisIndex: 1,
|
|
|
+ symbol: symbolCircle,
|
|
|
+ symbolSize: 10,
|
|
|
+ name: "优秀率",
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+export function getLineSmoothOptions(datainfo) {
|
|
|
+ let lineColors = colors.slice(0, -1);
|
|
|
+ let datas = datainfo.dataList;
|
|
|
+ let lineColor = lineColors[datainfo.index % colors.length];
|
|
|
+ let xAxisData = datas.map(function (item) {
|
|
|
+ return item.score;
|
|
|
+ });
|
|
|
+ let levelDatas = datas.map(function (item) {
|
|
|
+ return item.rangeRate;
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ animation: animationIsOpen,
|
|
|
+ textStyle: textStyle,
|
|
|
+ grid: {
|
|
|
+ top: 110,
|
|
|
+ bottom: 80,
|
|
|
+ show: true,
|
|
|
+ borderColor: "rgba(230,230,230,1)",
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: "category",
|
|
|
+ data: xAxisData,
|
|
|
+ boundaryGap: false,
|
|
|
+ inverse: true,
|
|
|
+ splitLine: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 19,
|
|
|
+ margin: 20,
|
|
|
+ interval: xAxisData.length <= 16 ? 0 : "auto",
|
|
|
+ formatter: function (value) {
|
|
|
+ return value + "-";
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ type: "value",
|
|
|
+ axisTick: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ axisLine: {
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true,
|
|
|
+ lineStyle: {
|
|
|
+ color: "rgba(233,233,233,1)",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ fontSize: 19,
|
|
|
+ margin: 20,
|
|
|
+ formatter: function (value, index) {
|
|
|
+ return value.toFixed(2);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ {
|
|
|
+ type: "line",
|
|
|
+ data: levelDatas,
|
|
|
+ symbol: "none",
|
|
|
+ smooth: true,
|
|
|
+ smoothMonotone: "none",
|
|
|
+ lineStyle: {
|
|
|
+ color: lineColor,
|
|
|
+ width: 3,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+}
|