|
@@ -15,21 +15,30 @@
|
|
|
<!--下拉框&搜索框-->
|
|
<!--下拉框&搜索框-->
|
|
|
<div class="form-group">
|
|
<div class="form-group">
|
|
|
<!--下拉框-->
|
|
<!--下拉框-->
|
|
|
- <b-field> <a class="button is-link">导出作业成绩</a> </b-field>
|
|
|
|
|
<b-field>
|
|
<b-field>
|
|
|
- <a class="button is-link" @click="isCardModalActive = true"
|
|
|
|
|
- >成绩比例调控</a
|
|
|
|
|
|
|
+ <a
|
|
|
|
|
+ class="button is-link"
|
|
|
|
|
+ :disabled="isNoResult"
|
|
|
|
|
+ @click="exportStudentResult"
|
|
|
|
|
+ >导出作业成绩</a
|
|
|
>
|
|
>
|
|
|
</b-field>
|
|
</b-field>
|
|
|
|
|
+ <b-field>
|
|
|
|
|
+ <a
|
|
|
|
|
+ class="button is-link"
|
|
|
|
|
+ @click="isCardModalActive = true"
|
|
|
|
|
+ :disabled="isNoResult"
|
|
|
|
|
+ >成绩比例调控
|
|
|
|
|
+ </a>
|
|
|
|
|
+ </b-field>
|
|
|
</div>
|
|
</div>
|
|
|
<!--成绩图表-->
|
|
<!--成绩图表-->
|
|
|
<div class="chart">
|
|
<div class="chart">
|
|
|
<canvas id="result-chart" style="width: 100% !important;"></canvas>
|
|
<canvas id="result-chart" style="width: 100% !important;"></canvas>
|
|
|
</div>
|
|
</div>
|
|
|
- <!--题目table-->
|
|
|
|
|
- <div class="question-list">
|
|
|
|
|
|
|
+ <div class="result-list">
|
|
|
<b-table
|
|
<b-table
|
|
|
- :data="data"
|
|
|
|
|
|
|
+ :data="studentFinalResultList"
|
|
|
paginated
|
|
paginated
|
|
|
per-page="50"
|
|
per-page="50"
|
|
|
detailed
|
|
detailed
|
|
@@ -43,20 +52,21 @@
|
|
|
{{ props.row.user.nickname }}
|
|
{{ props.row.user.nickname }}
|
|
|
</b-table-column>
|
|
</b-table-column>
|
|
|
<b-table-column label="文档作业" centered sortable>
|
|
<b-table-column label="文档作业" centered sortable>
|
|
|
- {{ average(props.row.documents) }}
|
|
|
|
|
|
|
+ {{ addSum(props.row.documents) }}
|
|
|
</b-table-column>
|
|
</b-table-column>
|
|
|
|
|
|
|
|
<b-table-column label="代码作业" centered sortable>
|
|
<b-table-column label="代码作业" centered sortable>
|
|
|
- {{ average(props.row.codes) }}
|
|
|
|
|
|
|
+ {{ addSum(props.row.codes) }}
|
|
|
</b-table-column>
|
|
</b-table-column>
|
|
|
|
|
|
|
|
<b-table-column label="互评作业" centered sortable>
|
|
<b-table-column label="互评作业" centered sortable>
|
|
|
- {{ average(props.row.reviews) }}
|
|
|
|
|
|
|
+ {{ addSum(props.row.reviews) }}
|
|
|
</b-table-column>
|
|
</b-table-column>
|
|
|
<b-table-column
|
|
<b-table-column
|
|
|
- field="finalResult"
|
|
|
|
|
|
|
+ field="finalRes"
|
|
|
label="总评"
|
|
label="总评"
|
|
|
sortable
|
|
sortable
|
|
|
|
|
+ numeric
|
|
|
centered
|
|
centered
|
|
|
>
|
|
>
|
|
|
<span :class="['tag', type(props.row.finalRes)]">
|
|
<span :class="['tag', type(props.row.finalRes)]">
|
|
@@ -112,69 +122,35 @@
|
|
|
</div>
|
|
</div>
|
|
|
</page-body>
|
|
</page-body>
|
|
|
<!-- 成绩比例调控模态框 -->
|
|
<!-- 成绩比例调控模态框 -->
|
|
|
- <b-modal :active.sync="isCardModalActive" width="420px" scroll="keep">
|
|
|
|
|
|
|
+ <b-modal :active.sync="isCardModalActive" scroll="keep">
|
|
|
<div class="card">
|
|
<div class="card">
|
|
|
<div class="title">
|
|
<div class="title">
|
|
|
成绩比例调控<small> 请按百分比填写</small>
|
|
成绩比例调控<small> 请按百分比填写</small>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="content">
|
|
<div class="content">
|
|
|
- <div class="homework-item">
|
|
|
|
|
- <label>文档作业</label>
|
|
|
|
|
- <div class="homework-percent">
|
|
|
|
|
- <b-field position="is-centered">
|
|
|
|
|
- <b-input placeholder="第一次作业百分比"> </b-input>
|
|
|
|
|
- <p class="control">
|
|
|
|
|
- <button class="button is-light">%</button>
|
|
|
|
|
- </p>
|
|
|
|
|
- </b-field>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="homework-percent">
|
|
|
|
|
- <b-field position="is-centered">
|
|
|
|
|
- <b-input placeholder="第二次作业百分比"> </b-input>
|
|
|
|
|
- <p class="control">
|
|
|
|
|
- <button class="button is-light">%</button>
|
|
|
|
|
- </p>
|
|
|
|
|
- </b-field>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="homework-percent">
|
|
|
|
|
- <b-field
|
|
|
|
|
- :type="$v.percent.$error ? 'is-danger' : ''"
|
|
|
|
|
- :message="$v.percent.$error ? '请填写1-100之间的数字' : ''"
|
|
|
|
|
- position="is-centered"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <b-table
|
|
|
|
|
+ :data="resultPercentList"
|
|
|
|
|
+ class="customer-table"
|
|
|
|
|
+ :striped="true"
|
|
|
|
|
+ :narrowed="true"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template slot-scope="props">
|
|
|
|
|
+ <b-table-column field="id" label="作业ID" width="50" numeric>
|
|
|
|
|
+ {{ props.row.id }}
|
|
|
|
|
+ </b-table-column>
|
|
|
|
|
+ <b-table-column field="name" label="作业名称">
|
|
|
|
|
+ {{ props.row.name }}
|
|
|
|
|
+ </b-table-column>
|
|
|
|
|
+ <b-table-column field="type" label="作业类型" email>
|
|
|
|
|
+ {{ props.row.type }}
|
|
|
|
|
+ </b-table-column>
|
|
|
|
|
+ <b-table-column field="percent" label="当前比例">
|
|
|
<b-input
|
|
<b-input
|
|
|
- v-model="$v.percent.$model"
|
|
|
|
|
- placeholder="第三次作业百分比"
|
|
|
|
|
- >
|
|
|
|
|
- </b-input>
|
|
|
|
|
- <p class="control">
|
|
|
|
|
- <button class="button is-light">%</button>
|
|
|
|
|
- </p>
|
|
|
|
|
- </b-field>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="homework-item">
|
|
|
|
|
- <label>互评作业</label>
|
|
|
|
|
- <div class="homework-percent">
|
|
|
|
|
- <b-field position="is-centered">
|
|
|
|
|
- <b-input placeholder="第一次作业百分比"> </b-input>
|
|
|
|
|
- <p class="control">
|
|
|
|
|
- <button class="button is-light">%</button>
|
|
|
|
|
- </p>
|
|
|
|
|
- </b-field>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="homework-item">
|
|
|
|
|
- <label>代码作业</label>
|
|
|
|
|
- <div class="homework-percent">
|
|
|
|
|
- <b-field position="is-centered">
|
|
|
|
|
- <b-input placeholder="第一次作业百分比"> </b-input>
|
|
|
|
|
- <p class="control">
|
|
|
|
|
- <button class="button is-light">%</button>
|
|
|
|
|
- </p>
|
|
|
|
|
- </b-field>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ v-model="resultPercentList[props.index].percent"
|
|
|
|
|
+ ></b-input>
|
|
|
|
|
+ </b-table-column>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </b-table>
|
|
|
</div>
|
|
</div>
|
|
|
<a
|
|
<a
|
|
|
:class="['button', 'is-link', { 'is-loading': submitting }]"
|
|
:class="['button', 'is-link', { 'is-loading': submitting }]"
|
|
@@ -192,8 +168,12 @@ import PageBody from "@/components/PageBody/index";
|
|
|
import Chart from "chart.js";
|
|
import Chart from "chart.js";
|
|
|
import BInput from "buefy/src/components/input/Input";
|
|
import BInput from "buefy/src/components/input/Input";
|
|
|
import { required, numeric, between } from "vuelidate/lib/validators";
|
|
import { required, numeric, between } from "vuelidate/lib/validators";
|
|
|
-import { getStudentFinaleResult } from "@/api/resultstatistics";
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ getStudentFinaleResult,
|
|
|
|
|
+ setResultPercentList
|
|
|
|
|
+} from "@/api/resultstatistics";
|
|
|
import PageSectionLoading from "@/components/PageBody/PageSectionLoading/index";
|
|
import PageSectionLoading from "@/components/PageBody/PageSectionLoading/index";
|
|
|
|
|
+import { toExcel } from "@/util/exportExcel";
|
|
|
|
|
|
|
|
const RESULT_SECTION = [
|
|
const RESULT_SECTION = [
|
|
|
"0分",
|
|
"0分",
|
|
@@ -228,33 +208,102 @@ export default {
|
|
|
},
|
|
},
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
- name: "",
|
|
|
|
|
- courses: [],
|
|
|
|
|
- review: [],
|
|
|
|
|
|
|
+ isNoResult: true,
|
|
|
data: [],
|
|
data: [],
|
|
|
isCardModalActive: false,
|
|
isCardModalActive: false,
|
|
|
myChart2: {},
|
|
myChart2: {},
|
|
|
- percent: "",
|
|
|
|
|
- finalResultPercentage: [20, 20, 20, 10, 10, 10, 10],
|
|
|
|
|
submitting: false,
|
|
submitting: false,
|
|
|
- isServerError: false,
|
|
|
|
|
- errorMessage: "服务器错误,请稍后重试",
|
|
|
|
|
isResultLoading: true,
|
|
isResultLoading: true,
|
|
|
- finalResult: [],
|
|
|
|
|
- homeworkNum: 0
|
|
|
|
|
|
|
+ resultPercentList: [],
|
|
|
|
|
+ studentFinalResultList: [],
|
|
|
|
|
+ studentResultChartData: [],
|
|
|
|
|
+ resultChart: {}
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
- //初始化成绩比例
|
|
|
|
|
- initialResultPercent(studentResults) {
|
|
|
|
|
- if (studentResults.length < 1) return;
|
|
|
|
|
- let resultSample = studentResults[0];
|
|
|
|
|
- let homeworkNum = 0;
|
|
|
|
|
- homeworkNum =
|
|
|
|
|
- resultSample.codes.length +
|
|
|
|
|
- resultSample.documents.length +
|
|
|
|
|
- resultSample.reviews.length;
|
|
|
|
|
- this.homeworkNum = homeworkNum;
|
|
|
|
|
|
|
+ //导出学生作业成绩
|
|
|
|
|
+ exportStudentResult() {
|
|
|
|
|
+ const th = [
|
|
|
|
|
+ "ID",
|
|
|
|
|
+ "姓名",
|
|
|
|
|
+ "文档作业成绩",
|
|
|
|
|
+ "互评作业成绩",
|
|
|
|
|
+ "代码作业成绩",
|
|
|
|
|
+ "总评"
|
|
|
|
|
+ ];
|
|
|
|
|
+ // const data = this.studentFinalResultList.map(v => filterVal.map(k => v[k]));
|
|
|
|
|
+ // console.log(data);
|
|
|
|
|
+ let data = [];
|
|
|
|
|
+ for (let item of this.studentFinalResultList) {
|
|
|
|
|
+ let docResString = "";
|
|
|
|
|
+ let reviewResString = "";
|
|
|
|
|
+ let codeResString = "";
|
|
|
|
|
+ for (let docRes of item.documents) {
|
|
|
|
|
+ docResString += `${docRes.name}:${docRes.score};`;
|
|
|
|
|
+ }
|
|
|
|
|
+ for (let reviewRes of item.reviews) {
|
|
|
|
|
+ reviewResString += `${reviewRes.name}:${reviewRes.score}`;
|
|
|
|
|
+ }
|
|
|
|
|
+ for (let codeRes of item.codes) {
|
|
|
|
|
+ codeResString += `${codeRes.name}:${codeRes.score}`;
|
|
|
|
|
+ }
|
|
|
|
|
+ let outPutInfo = [
|
|
|
|
|
+ item.id,
|
|
|
|
|
+ item.user.nickname,
|
|
|
|
|
+ docResString,
|
|
|
|
|
+ reviewResString,
|
|
|
|
|
+ codeResString,
|
|
|
|
|
+ item.finalRes
|
|
|
|
|
+ ];
|
|
|
|
|
+ data.push(outPutInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+ console.log(data);
|
|
|
|
|
+ const [fileName, fileType, sheetName] = ["学生成绩", "xlsx", "成绩"];
|
|
|
|
|
+ toExcel({ th, data, fileName, fileType, sheetName });
|
|
|
|
|
+ },
|
|
|
|
|
+ //绘制成绩图表
|
|
|
|
|
+ drawResultChart() {
|
|
|
|
|
+ let myChart2 = new Chart(this.resultChart, {
|
|
|
|
|
+ type: "bar",
|
|
|
|
|
+ data: {
|
|
|
|
|
+ labels: RESULT_SECTION,
|
|
|
|
|
+ datasets: [
|
|
|
|
|
+ {
|
|
|
|
|
+ label: "人数",
|
|
|
|
|
+ backgroundColor: "rgba(54,162,235,0.3)",
|
|
|
|
|
+ borderColor: "rgba(54,162,235,1)",
|
|
|
|
|
+ borderWidth: 1,
|
|
|
|
|
+ pointStrokeColor: "#fff",
|
|
|
|
|
+ pointStyle: "crossRot",
|
|
|
|
|
+ data: this.studentResultChartData,
|
|
|
|
|
+ cubicInterpolationMode: "monotone",
|
|
|
|
|
+ spanGaps: "false",
|
|
|
|
|
+ fill: "false"
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ options: {}
|
|
|
|
|
+ });
|
|
|
|
|
+ this.myChart2 = myChart2;
|
|
|
|
|
+ },
|
|
|
|
|
+ //生成成绩百分比
|
|
|
|
|
+ createResultPercentList() {
|
|
|
|
|
+ let resultPercentList = [];
|
|
|
|
|
+ let resultData = this.data[0];
|
|
|
|
|
+ for (let codesHw of resultData.codes) {
|
|
|
|
|
+ codesHw.type = "CODE";
|
|
|
|
|
+ resultPercentList.push(codesHw);
|
|
|
|
|
+ }
|
|
|
|
|
+ for (let documentsHw of resultData.documents) {
|
|
|
|
|
+ documentsHw.type = "DOCUMENT";
|
|
|
|
|
+ resultPercentList.push(documentsHw);
|
|
|
|
|
+ }
|
|
|
|
|
+ for (let reviewHw of resultData.reviews) {
|
|
|
|
|
+ reviewHw.type = "REVIEW";
|
|
|
|
|
+ resultPercentList.push(reviewHw);
|
|
|
|
|
+ }
|
|
|
|
|
+ this.resultPercentList = resultPercentList;
|
|
|
|
|
+ console.log(resultPercentList);
|
|
|
},
|
|
},
|
|
|
//统计学生成绩分段
|
|
//统计学生成绩分段
|
|
|
studenResultStatistics(studentResults) {
|
|
studenResultStatistics(studentResults) {
|
|
@@ -280,7 +329,8 @@ export default {
|
|
|
}
|
|
}
|
|
|
resultStatisticsData.push(count);
|
|
resultStatisticsData.push(count);
|
|
|
}
|
|
}
|
|
|
- return resultStatisticsData;
|
|
|
|
|
|
|
+ this.studentResultChartData = resultStatisticsData;
|
|
|
|
|
+ // return resultStatisticsData;
|
|
|
},
|
|
},
|
|
|
type(value) {
|
|
type(value) {
|
|
|
const number = parseFloat(value);
|
|
const number = parseFloat(value);
|
|
@@ -292,55 +342,117 @@ export default {
|
|
|
return "is-success";
|
|
return "is-success";
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
- //计算平均成绩
|
|
|
|
|
- average(resultList) {
|
|
|
|
|
- if (resultList.length < 1) {
|
|
|
|
|
- return "--";
|
|
|
|
|
- }
|
|
|
|
|
- let res = 0;
|
|
|
|
|
|
|
+ //计算每种作业平均成绩
|
|
|
|
|
+ addSum(resultList) {
|
|
|
|
|
+ let finalRes = 0;
|
|
|
for (let item of resultList) {
|
|
for (let item of resultList) {
|
|
|
- res += item.score;
|
|
|
|
|
|
|
+ finalRes += item.calScore;
|
|
|
}
|
|
}
|
|
|
- return res / resultList.length;
|
|
|
|
|
|
|
+ return finalRes;
|
|
|
},
|
|
},
|
|
|
- //计算总评
|
|
|
|
|
- getFinalResult(resultList) {
|
|
|
|
|
- console.log(resultList);
|
|
|
|
|
- let finalResultList = [];
|
|
|
|
|
- for (let i = 0; i < resultList.length; i++) {
|
|
|
|
|
|
|
+ //计算学生总评
|
|
|
|
|
+ getFinalResult(studentResultList) {
|
|
|
|
|
+ let studentFinalResultList = [];
|
|
|
|
|
+ for (let i = 0; i < studentResultList.length; i++) {
|
|
|
|
|
+ let studentRes = studentResultList[i];
|
|
|
|
|
+ let resultPercentList = this.resultPercentList;
|
|
|
|
|
+ let index = 0;
|
|
|
|
|
+ let codesResList = [];
|
|
|
|
|
+ let docsResList = [];
|
|
|
|
|
+ let reviewsResList = [];
|
|
|
let finalRes = 0;
|
|
let finalRes = 0;
|
|
|
- let result = resultList[i];
|
|
|
|
|
- console.log(result);
|
|
|
|
|
- //let currentIndex = 0;
|
|
|
|
|
- for (let docRes of result.documents) {
|
|
|
|
|
- finalRes += docRes.score;
|
|
|
|
|
- // finalRes +=
|
|
|
|
|
- // docRes.score * (this.finalResultPercentage[currentIndex] / 100);
|
|
|
|
|
- // currentIndex++;
|
|
|
|
|
|
|
+ for (let codeRes of studentRes.codes) {
|
|
|
|
|
+ //根据成绩比例计算分数
|
|
|
|
|
+ codeRes.calScore = codeRes.score
|
|
|
|
|
+ ? (codeRes.score * resultPercentList[index].percent) / 100
|
|
|
|
|
+ : 0;
|
|
|
|
|
+ // console.log(codeRes.calScore);
|
|
|
|
|
+ codesResList.push(codeRes);
|
|
|
|
|
+ finalRes += codeRes.calScore;
|
|
|
|
|
+ index++;
|
|
|
}
|
|
}
|
|
|
- for (let codeRes of result.codes) {
|
|
|
|
|
- finalRes += codeRes.score;
|
|
|
|
|
- // finalRes +=
|
|
|
|
|
- // codeRes.score * (this.finalResultPercentage[currentIndex] / 100);
|
|
|
|
|
- // currentIndex++;
|
|
|
|
|
|
|
+ studentRes.codes = codesResList;
|
|
|
|
|
+ for (let docRes of studentRes.documents) {
|
|
|
|
|
+ docRes.calScore = docRes.score
|
|
|
|
|
+ ? (docRes.score * resultPercentList[index].percent) / 100
|
|
|
|
|
+ : 0;
|
|
|
|
|
+ docsResList.push(docRes);
|
|
|
|
|
+ finalRes += docRes.calScore;
|
|
|
|
|
+ index++;
|
|
|
}
|
|
}
|
|
|
- for (let reviewRes of result.reviews) {
|
|
|
|
|
- finalRes += reviewRes.score;
|
|
|
|
|
- // finalRes +=
|
|
|
|
|
- // reviewRes.score * (this.finalResultPercentage[currentIndex] / 100);
|
|
|
|
|
- // currentIndex++;
|
|
|
|
|
|
|
+ studentRes.documents = docsResList;
|
|
|
|
|
+ for (let reviewRes of studentRes.reviews) {
|
|
|
|
|
+ reviewRes.calScore = reviewRes.score
|
|
|
|
|
+ ? (reviewRes.score * resultPercentList[index].percent) / 100
|
|
|
|
|
+ : 0;
|
|
|
|
|
+ reviewsResList.push(reviewRes);
|
|
|
|
|
+ finalRes += reviewRes.calScore;
|
|
|
|
|
+ index++;
|
|
|
}
|
|
}
|
|
|
- result.finalRes = parseInt(finalRes / this.homeworkNum);
|
|
|
|
|
- finalResultList.push(result);
|
|
|
|
|
|
|
+ studentRes.reviews = reviewsResList;
|
|
|
|
|
+ studentRes.finalRes = finalRes;
|
|
|
|
|
+ studentFinalResultList.push(studentRes);
|
|
|
}
|
|
}
|
|
|
- this.data = finalResultList;
|
|
|
|
|
|
|
+ this.studentFinalResultList = studentFinalResultList;
|
|
|
},
|
|
},
|
|
|
|
|
+ //调整成绩比例
|
|
|
confirmPercent() {
|
|
confirmPercent() {
|
|
|
- this.submitting = true;
|
|
|
|
|
- this.$toast.open({
|
|
|
|
|
- message: "成绩比例调整成功",
|
|
|
|
|
- type: "is-success"
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ //检查是否满足100%
|
|
|
|
|
+ let percentSum = 0;
|
|
|
|
|
+ let docPercentList = [];
|
|
|
|
|
+ let codePercentList = [];
|
|
|
|
|
+ let reviewPercentList = [];
|
|
|
|
|
+ for (let item of this.resultPercentList) {
|
|
|
|
|
+ percentSum += parseInt(item.percent);
|
|
|
|
|
+ switch (item.type) {
|
|
|
|
|
+ case "DOCUMENT":
|
|
|
|
|
+ docPercentList.push({ id: item.id, percent: item.percent });
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "CODE":
|
|
|
|
|
+ codePercentList.push({ id: item.id, percent: item.percent });
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "REVIEW":
|
|
|
|
|
+ reviewPercentList.push({ id: item.id, percent: item.percent });
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (percentSum != 100) {
|
|
|
|
|
+ this.$toast.open({
|
|
|
|
|
+ message: "请使比例加和为100%",
|
|
|
|
|
+ type: "is-warning"
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //提交成绩修改结果
|
|
|
|
|
+ this.submitting = true;
|
|
|
|
|
+ setResultPercentList(
|
|
|
|
|
+ this.$route.params.courseId,
|
|
|
|
|
+ docPercentList,
|
|
|
|
|
+ codePercentList,
|
|
|
|
|
+ reviewPercentList
|
|
|
|
|
+ )
|
|
|
|
|
+ .then(res => {
|
|
|
|
|
+ console.log(res);
|
|
|
|
|
+ this.$toast.open({
|
|
|
|
|
+ message: "成绩比例调整成功",
|
|
|
|
|
+ type: "is-success"
|
|
|
|
|
+ });
|
|
|
|
|
+ this.isCardModalActive = false;
|
|
|
|
|
+ this.submitting = false;
|
|
|
|
|
+ //重新计算成绩比例
|
|
|
|
|
+ this.getFinalResult(this.data);
|
|
|
|
|
+ this.studenResultStatistics(this.studentFinalResultList);
|
|
|
|
|
+ let myChart2 = this.myChart2;
|
|
|
|
|
+ console.log(myChart2);
|
|
|
|
|
+ myChart2.data.datasets[0].data = this.studentResultChartData;
|
|
|
|
|
+ myChart2.update();
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ this.$toast.open({
|
|
|
|
|
+ message: e.message || "服务器未知错误",
|
|
|
|
|
+ type: "is-danger"
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
async mounted() {
|
|
async mounted() {
|
|
@@ -350,38 +462,26 @@ export default {
|
|
|
);
|
|
);
|
|
|
this.isResultLoading = false;
|
|
this.isResultLoading = false;
|
|
|
this.data = resultData.data;
|
|
this.data = resultData.data;
|
|
|
- console.log(this.data);
|
|
|
|
|
- //初始化默认成绩比例
|
|
|
|
|
- this.initialResultPercent(this.data);
|
|
|
|
|
- //统计学生总评
|
|
|
|
|
- console.log(resultData.data);
|
|
|
|
|
- this.getFinalResult(resultData.data);
|
|
|
|
|
- //统计学生分数
|
|
|
|
|
- let studentResultStatistics = this.studenResultStatistics(this.data);
|
|
|
|
|
- //绘制图表
|
|
|
|
|
- let resultChart = document.getElementById("result-chart");
|
|
|
|
|
- let myChart2 = new Chart(resultChart, {
|
|
|
|
|
- type: "bar",
|
|
|
|
|
- data: {
|
|
|
|
|
- labels: RESULT_SECTION,
|
|
|
|
|
- datasets: [
|
|
|
|
|
- {
|
|
|
|
|
- label: "人数",
|
|
|
|
|
- backgroundColor: "rgba(54,162,235,0.3)",
|
|
|
|
|
- borderColor: "rgba(54,162,235,1)",
|
|
|
|
|
- borderWidth: 1,
|
|
|
|
|
- pointStrokeColor: "#fff",
|
|
|
|
|
- pointStyle: "crossRot",
|
|
|
|
|
- data: studentResultStatistics,
|
|
|
|
|
- cubicInterpolationMode: "monotone",
|
|
|
|
|
- spanGaps: "false",
|
|
|
|
|
- fill: "false"
|
|
|
|
|
- }
|
|
|
|
|
- ]
|
|
|
|
|
- },
|
|
|
|
|
- options: {}
|
|
|
|
|
- });
|
|
|
|
|
- this.myChart2 = myChart2;
|
|
|
|
|
|
|
+ if (resultData.data && resultData.data.length > 0) {
|
|
|
|
|
+ this.isNoResult = false;
|
|
|
|
|
+ // console.log(this.data);
|
|
|
|
|
+ //初始化默认成绩比例
|
|
|
|
|
+ // this.initialResultPercent(this.data);
|
|
|
|
|
+ //初始化各作业比例
|
|
|
|
|
+ this.createResultPercentList();
|
|
|
|
|
+ //统计学生总评
|
|
|
|
|
+ this.getFinalResult(resultData.data);
|
|
|
|
|
+ //统计学生分数
|
|
|
|
|
+ this.studenResultStatistics(this.data);
|
|
|
|
|
+ //绘制图表
|
|
|
|
|
+ let resultChart = document.getElementById("result-chart");
|
|
|
|
|
+ this.resultChart = resultChart;
|
|
|
|
|
+ this.drawResultChart();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ let resultChart = document.getElementById("result-chart");
|
|
|
|
|
+ this.resultChart = resultChart;
|
|
|
|
|
+ this.drawResultChart();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|
|
@@ -393,7 +493,7 @@ export default {
|
|
|
.chart {
|
|
.chart {
|
|
|
margin-top: 1.5rem;
|
|
margin-top: 1.5rem;
|
|
|
}
|
|
}
|
|
|
-.question-list {
|
|
|
|
|
|
|
+.result-list {
|
|
|
margin-top: 3rem;
|
|
margin-top: 3rem;
|
|
|
}
|
|
}
|
|
|
.form-group {
|
|
.form-group {
|