|
@@ -7,13 +7,20 @@
|
|
|
:show-close="false"
|
|
|
append-to-body
|
|
|
fullscreen
|
|
|
- @opened="initData"
|
|
|
+ @opened="dialogOpend"
|
|
|
+ @close="dialogClose"
|
|
|
>
|
|
|
<div slot="title" class="box-justify">
|
|
|
<div>
|
|
|
<span>{{ course.courseName }}</span>
|
|
|
</div>
|
|
|
<div>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ :loading="downloading"
|
|
|
+ @click="toExportNormalScore"
|
|
|
+ >导出平时成绩</el-button
|
|
|
+ >
|
|
|
<el-button type="primary" :loading="downloading" @click="toSave"
|
|
|
>保存报告</el-button
|
|
|
>
|
|
@@ -339,49 +346,59 @@
|
|
|
width="100"
|
|
|
></el-table-column>
|
|
|
</el-table>
|
|
|
+ </div>
|
|
|
|
|
|
- <h4 class="part-title mb-2 mt-2">
|
|
|
- 课程目标达成度评价结果分析及改进措施
|
|
|
- </h4>
|
|
|
-
|
|
|
- <el-form label-position="top">
|
|
|
- <el-form-item label="达成情况">
|
|
|
- <el-input
|
|
|
- v-model="courseBasicInfo.finishPoints"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4, maxRows: 10 }"
|
|
|
- resize="none"
|
|
|
- placeholder="请输入"
|
|
|
- clearable
|
|
|
- maxlength="999"
|
|
|
- show-word-limit
|
|
|
- ></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="课程支撑毕业要求达成情况评价">
|
|
|
- <el-input
|
|
|
- v-model="courseBasicInfo.requirementPoints"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4, maxRows: 10 }"
|
|
|
- resize="none"
|
|
|
- placeholder="请输入"
|
|
|
- clearable
|
|
|
- maxlength="999"
|
|
|
- show-word-limit
|
|
|
- ></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="课程持续改进">
|
|
|
- <el-input
|
|
|
- v-model="courseBasicInfo.courseSuggest"
|
|
|
- type="textarea"
|
|
|
- :autosize="{ minRows: 4, maxRows: 10 }"
|
|
|
- resize="none"
|
|
|
- placeholder="请输入"
|
|
|
- clearable
|
|
|
- maxlength="999"
|
|
|
- show-word-limit
|
|
|
- ></el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ <div class="page-head">
|
|
|
+ <h2>
|
|
|
+ <span> 课程目标达成度评价结果分析及改进措施 </span>
|
|
|
+ </h2>
|
|
|
+ </div>
|
|
|
+ <div class="part-box part-box-pad">
|
|
|
+ <div
|
|
|
+ v-for="item in targetSuggests"
|
|
|
+ :key="item.targetId"
|
|
|
+ class="target-suggest mb-4"
|
|
|
+ >
|
|
|
+ <h4 class="part-title">{{ item.targetName }}</h4>
|
|
|
+ <el-form label-position="top">
|
|
|
+ <el-form-item label="达成情况">
|
|
|
+ <el-input
|
|
|
+ v-model="item.finishPoints"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 2, maxRows: 5 }"
|
|
|
+ resize="none"
|
|
|
+ placeholder="请输入"
|
|
|
+ clearable
|
|
|
+ maxlength="999"
|
|
|
+ show-word-limit
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程支撑毕业要求达成情况评价">
|
|
|
+ <el-input
|
|
|
+ v-model="item.requirementPoints"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 2, maxRows: 5 }"
|
|
|
+ resize="none"
|
|
|
+ placeholder="请输入"
|
|
|
+ clearable
|
|
|
+ maxlength="999"
|
|
|
+ show-word-limit
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="课程持续改进">
|
|
|
+ <el-input
|
|
|
+ v-model="item.courseSuggest"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 2, maxRows: 5 }"
|
|
|
+ resize="none"
|
|
|
+ placeholder="请输入"
|
|
|
+ clearable
|
|
|
+ maxlength="999"
|
|
|
+ show-word-limit
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
@@ -394,14 +411,17 @@
|
|
|
import {
|
|
|
targetStatisticsDetail,
|
|
|
targetStatisticsReport,
|
|
|
+ targetStatisticsNormalScoreExport,
|
|
|
targetStatisticsSave,
|
|
|
targetStatisticsChangeCheck,
|
|
|
} from "../../api";
|
|
|
import { downloadByApi } from "@/plugins/download";
|
|
|
import { calcSum } from "@/plugins/utils";
|
|
|
+import timeMixin from "@/mixins/timeMixin";
|
|
|
|
|
|
export default {
|
|
|
name: "detail-target-statistics",
|
|
|
+ mixins: [timeMixin],
|
|
|
props: {
|
|
|
course: {
|
|
|
type: Object,
|
|
@@ -433,9 +453,13 @@ export default {
|
|
|
courseTargets: [],
|
|
|
targetColumnCounts: [],
|
|
|
studentScoreTable: [],
|
|
|
+ targetSuggests: [],
|
|
|
downloading: false,
|
|
|
};
|
|
|
},
|
|
|
+ beforeDestroy() {
|
|
|
+ this.clearSetTs();
|
|
|
+ },
|
|
|
methods: {
|
|
|
cancel() {
|
|
|
this.modalIsShow = false;
|
|
@@ -443,6 +467,22 @@ export default {
|
|
|
open() {
|
|
|
this.modalIsShow = true;
|
|
|
},
|
|
|
+ dialogClose() {
|
|
|
+ this.clearSetTs();
|
|
|
+ },
|
|
|
+ dialogOpend() {
|
|
|
+ this.initData();
|
|
|
+ this.openAutoSave();
|
|
|
+ },
|
|
|
+ openAutoSave() {
|
|
|
+ if (!this.modalIsShow) return;
|
|
|
+ this.clearSetTs();
|
|
|
+
|
|
|
+ this.addSetTime(async () => {
|
|
|
+ await this.toSave();
|
|
|
+ this.openAutoSave();
|
|
|
+ }, 1 * 60 * 1000);
|
|
|
+ },
|
|
|
resetData() {
|
|
|
this.commonInfo = {};
|
|
|
this.courseBasicInfo = {};
|
|
@@ -455,16 +495,40 @@ export default {
|
|
|
this.courseTargets = [];
|
|
|
this.targetColumnCounts = [];
|
|
|
this.studentScoreTable = [];
|
|
|
+ this.targetSuggests = [];
|
|
|
this.downloading = false;
|
|
|
},
|
|
|
buildData(data) {
|
|
|
this.commonInfo = data.commonInfo;
|
|
|
- this.courseBasicInfo = {
|
|
|
- ...data.courseBasicInfo,
|
|
|
- finishPoints: data.finishPoints,
|
|
|
- requirementPoints: data.requirementPoints,
|
|
|
- courseSuggest: data.courseSuggest,
|
|
|
- };
|
|
|
+ this.courseBasicInfo = data.courseBasicInfo;
|
|
|
+
|
|
|
+ const targetSuggests = data.targetSuggests
|
|
|
+ ? JSON.stringify(data.targetSuggests)
|
|
|
+ : [];
|
|
|
+ const targetSuggestsMap = {};
|
|
|
+ targetSuggests.forEach((item) => {
|
|
|
+ targetSuggestsMap[item.targetId] = {
|
|
|
+ finishPoints: item.finishPoints,
|
|
|
+ requirementPoints: item.requirementPoints,
|
|
|
+ courseSuggest: item.courseSuggest,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ this.targetSuggests = data.courseEvaluationResultInfo.targetList.map(
|
|
|
+ (target) => {
|
|
|
+ const suggest = targetSuggestsMap[target.targetId] || {};
|
|
|
+ const finishPoints = suggest.finishPoints || "";
|
|
|
+ const requirementPoints = suggest.requirementPoints || "";
|
|
|
+ const courseSuggest = suggest.courseSuggest || "";
|
|
|
+
|
|
|
+ return {
|
|
|
+ targetId: target.targetId,
|
|
|
+ targetName: target.targetName,
|
|
|
+ finishPoints,
|
|
|
+ requirementPoints,
|
|
|
+ courseSuggest,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ );
|
|
|
|
|
|
this.courseTargetValue =
|
|
|
data.courseEvaluationResultInfo.targetEvaluationSumValue;
|
|
@@ -473,6 +537,7 @@ export default {
|
|
|
target.normalTargetWeight = calcSum(
|
|
|
target.evaluationList.slice(0, -1).map((elem) => elem.targetWeight)
|
|
|
);
|
|
|
+
|
|
|
return target;
|
|
|
}
|
|
|
);
|
|
@@ -899,6 +964,7 @@ export default {
|
|
|
cultureProgramId: this.course.cultureProgramId,
|
|
|
courseId: this.course.courseId,
|
|
|
...this.courseBasicInfo,
|
|
|
+ targetSuggests: JSON.stringify(this.targetSuggests),
|
|
|
}).catch(() => {});
|
|
|
this.downloading = false;
|
|
|
|
|
@@ -921,6 +987,24 @@ export default {
|
|
|
});
|
|
|
this.downloading = false;
|
|
|
|
|
|
+ if (!res) return;
|
|
|
+ this.$message.success("下载成功!");
|
|
|
+ },
|
|
|
+ async toExportNormalScore() {
|
|
|
+ if (this.downloading) return;
|
|
|
+ this.downloading = true;
|
|
|
+
|
|
|
+ const res = await downloadByApi(() => {
|
|
|
+ const datas = {
|
|
|
+ cultureProgramId: this.course.cultureProgramId,
|
|
|
+ courseId: this.course.courseId,
|
|
|
+ };
|
|
|
+ return targetStatisticsNormalScoreExport(datas);
|
|
|
+ }).catch((e) => {
|
|
|
+ this.$message.error(e || "下载失败,请重新尝试!");
|
|
|
+ });
|
|
|
+ this.downloading = false;
|
|
|
+
|
|
|
if (!res) return;
|
|
|
this.$message.success("下载成功!");
|
|
|
},
|