|
@@ -0,0 +1,358 @@
|
|
|
|
+<template>
|
|
|
|
+ <el-dialog
|
|
|
|
+ class="page-dialog"
|
|
|
|
+ :visible.sync="modalIsShow"
|
|
|
|
+ :title="title"
|
|
|
|
+ fullscreen
|
|
|
|
+ append-to-body
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ :close-on-press-escape="false"
|
|
|
|
+ @open="visibleChange"
|
|
|
|
+ @close="dialogClose"
|
|
|
|
+ >
|
|
|
|
+ <div class="part-page">
|
|
|
|
+ <h1>{{ reportTitle }}</h1>
|
|
|
|
+ <!-- 课程基本信息 -->
|
|
|
|
+ <div v-if="courseBasicInfo" class="page-part">
|
|
|
|
+ <h3>课程基本信息</h3>
|
|
|
|
+ <el-form label-width="100px">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="courseCode" label="课程编码:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.courseCode"
|
|
|
|
+ placeholder="请输入课程编码"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="courseName" label="课程名称:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.courseName"
|
|
|
|
+ placeholder="请输入课程名称"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="semester" label="授课学期:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.semester"
|
|
|
|
+ placeholder="请输入授课学期"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="professional" label="适用专业:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.professional"
|
|
|
|
+ placeholder="请输入适用专业"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="period" label="学时:">
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="courseBasicInfo.period"
|
|
|
|
+ placeholder="请输入学时"
|
|
|
|
+ :min="0"
|
|
|
|
+ :max="999"
|
|
|
|
+ :controls="false"
|
|
|
|
+ ></el-input-number>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="credit" label="学分:">
|
|
|
|
+ <el-input-number
|
|
|
|
+ v-model="courseBasicInfo.credit"
|
|
|
|
+ placeholder="请录入学分"
|
|
|
|
+ size="small"
|
|
|
|
+ :min="0"
|
|
|
|
+ :max="999"
|
|
|
|
+ :controls="false"
|
|
|
|
+ ></el-input-number>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="clazz" label="授课班级:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.clazz"
|
|
|
|
+ placeholder="请输入授课班级"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item prop="teacher" label="授课教师:">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model.trim="courseBasicInfo.teacher"
|
|
|
|
+ placeholder="请输入授课教师"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </el-form>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 课程目标情况 -->
|
|
|
|
+ <div v-if="courseTargetInfo" class="page-part">
|
|
|
|
+ <h3>课程目标情况</h3>
|
|
|
|
+ <table class="table">
|
|
|
|
+ <tr>
|
|
|
|
+ <th rowspan="2"></th>
|
|
|
|
+ <th colspan="3">过程性评价</th>
|
|
|
|
+ <th colspan="3">终结性评价</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <th>形式与内容</th>
|
|
|
|
+ <th>观测点</th>
|
|
|
|
+ <th>分值</th>
|
|
|
|
+ <th>形式与内容</th>
|
|
|
|
+ <th>观测点</th>
|
|
|
|
+ <th>分值</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <template v-for="(item, index) in courseEvaluateList">
|
|
|
|
+ <tr
|
|
|
|
+ v-for="(evaluate, eindex) in item.procedureEvaluateList"
|
|
|
|
+ :key="`${index}-${eindex}`"
|
|
|
|
+ >
|
|
|
|
+ <td
|
|
|
|
+ v-if="eindex === 0"
|
|
|
|
+ :rowspan="item.procedureEvaluateList.length"
|
|
|
|
+ >
|
|
|
|
+ {{ item.name }}
|
|
|
|
+ </td>
|
|
|
|
+ <td>{{ evaluate.content }}</td>
|
|
|
|
+ <td>{{ evaluate.point }}</td>
|
|
|
|
+ <td>{{ evaluate.score }}</td>
|
|
|
|
+ <template v-if="eindex === 0">
|
|
|
|
+ <td :rowspan="item.procedureEvaluateList.length">
|
|
|
|
+ {{ item.finalityEvaluateList[0]?.content }}
|
|
|
|
+ </td>
|
|
|
|
+ <td :rowspan="item.procedureEvaluateList.length">
|
|
|
|
+ {{ item.finalityEvaluateList[0]?.point }}
|
|
|
|
+ </td>
|
|
|
|
+ <td :rowspan="item.procedureEvaluateList.length">
|
|
|
|
+ {{ item.finalityEvaluateList[0]?.score }}
|
|
|
|
+ </td>
|
|
|
|
+ </template>
|
|
|
|
+ </tr>
|
|
|
|
+ </template>
|
|
|
|
+ <tr>
|
|
|
|
+ <td>总目标分值</td>
|
|
|
|
+ <td colspan="3">{{ courseTargetInfo.proceduralTotalScore }}</td>
|
|
|
|
+ <td colspan="3">{{ courseTargetInfo.finalityTotalScore }}</td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td colspan="7">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>课程负责人:</span>
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="courseTargetInfo.courseManager"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>填写日期:</span>
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="courseTargetInfo.date"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="timestamp"
|
|
|
|
+ >
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ </table>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 合理性评价 -->
|
|
|
|
+ <div v-if="rationalityEvaluation" class="page-part">
|
|
|
|
+ <h3>合理性评价 <span class="tips">(请在对应结论处打√)</span></h3>
|
|
|
|
+ <table class="table">
|
|
|
|
+ <tr>
|
|
|
|
+ <th></th>
|
|
|
|
+ <th>评价内容</th>
|
|
|
|
+ <th>合理</th>
|
|
|
|
+ <th>较合理</th>
|
|
|
|
+ <th>不合理</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr
|
|
|
|
+ v-for="(
|
|
|
|
+ item, index
|
|
|
|
+ ) in rationalityEvaluation.rationalityEvaluationDetailList"
|
|
|
|
+ :key="index"
|
|
|
|
+ >
|
|
|
|
+ <td>{{ item.index || "" }}</td>
|
|
|
|
+ <td>{{ item.content }}</td>
|
|
|
|
+ <td>
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-model="item.reasonable"
|
|
|
|
+ @change="() => evaluationChange(item, 'reasonable')"
|
|
|
|
+ ></el-checkbox>
|
|
|
|
+ </td>
|
|
|
|
+ <td>
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-model="item.middle"
|
|
|
|
+ @change="() => evaluationChange(item, 'reasonable')"
|
|
|
|
+ ></el-checkbox>
|
|
|
|
+ </td>
|
|
|
|
+ <td>
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-model="item.unreasonable"
|
|
|
|
+ @change="() => evaluationChange(item, 'reasonable')"
|
|
|
|
+ ></el-checkbox>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td colspan="5">存在的问题及建议:</td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td colspan="5"></td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td colspan="5">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>课程负责人:</span>
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="courseTargetInfo.courseManager"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>填写日期:</span>
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="courseTargetInfo.date"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="timestamp"
|
|
|
|
+ >
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td colspan="5">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>课程负责人:</span>
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="courseTargetInfo.courseManager"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ clearable
|
|
|
|
+ ></el-input>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <span>填写日期:</span>
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="courseTargetInfo.date"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="timestamp"
|
|
|
|
+ >
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ </table>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div slot="footer"></div>
|
|
|
|
+ </el-dialog>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import {
|
|
|
|
+ courseOutlineAuditReport,
|
|
|
|
+ courseOutlineAuditRationalityReport,
|
|
|
|
+ // courseOutlineAuditSave,
|
|
|
|
+} from "../../api";
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ name: "audit-course-outline-dialog",
|
|
|
|
+ props: {
|
|
|
|
+ rowData: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default() {
|
|
|
|
+ return {};
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ modalIsShow: false,
|
|
|
|
+ loading: false,
|
|
|
|
+ courseBasicInfo: null,
|
|
|
|
+ courseTargetInfo: null,
|
|
|
|
+ rationalityEvaluation: null,
|
|
|
|
+ audit: this.checkPrivilege("link", "audit"),
|
|
|
|
+ auditRationality: this.checkPrivilege("link", "auditRationality"),
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ reportTitle() {
|
|
|
|
+ return this.auditRationality
|
|
|
|
+ ? "课程目标达成情况评价依据合理性审核表"
|
|
|
|
+ : "课程目标达成情况评价依据审核表";
|
|
|
|
+ },
|
|
|
|
+ title() {
|
|
|
|
+ return `${this.rowData.outlineName} ${this.reportTitle}`;
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ visibleChange() {
|
|
|
|
+ this.initData();
|
|
|
|
+ },
|
|
|
|
+ async initData() {
|
|
|
|
+ const func = this.auditRationality
|
|
|
|
+ ? courseOutlineAuditRationalityReport
|
|
|
|
+ : courseOutlineAuditReport;
|
|
|
|
+ const res = await func(this.rowData.id);
|
|
|
|
+
|
|
|
|
+ const { courseBasicInfo, courseTargetInfo, rationalityEvaluation } =
|
|
|
|
+ res || {};
|
|
|
|
+
|
|
|
|
+ this.courseBasicInfo = courseBasicInfo;
|
|
|
|
+ this.courseTargetInfo = courseTargetInfo;
|
|
|
|
+ this.rationalityEvaluation = rationalityEvaluation;
|
|
|
|
+ },
|
|
|
|
+ evaluationChange(evaluate, type) {
|
|
|
|
+ if (!evaluate[type]) return;
|
|
|
|
+
|
|
|
|
+ const keys = ["reasonable", "middle", "unreasonable"];
|
|
|
|
+ keys
|
|
|
|
+ .filter((k) => k !== type)
|
|
|
|
+ .forEach((k) => {
|
|
|
|
+ evaluate[k] = false;
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ cancel() {
|
|
|
|
+ this.modalIsShow = false;
|
|
|
|
+ },
|
|
|
|
+ open() {
|
|
|
|
+ this.modalIsShow = true;
|
|
|
|
+ },
|
|
|
|
+ dialogClose() {
|
|
|
|
+ this.courseBasicInfo = null;
|
|
|
|
+ this.courseTargetInfo = null;
|
|
|
|
+ this.rationalityEvaluation = null;
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|