xiangpei
2024-06-11 3b73c554682286e7184795f23a3acaa168b2047c
src/views/Exam/ExamManage.vue
@@ -13,12 +13,11 @@
          <div>
            <el-form :inline="true" :model="searchForm" class="demo-form-inline">
              <el-form-item label="考试名称">
                <el-input v-model="searchForm.className" size="small" clearable @clear="page" placeholder="班级名称"></el-input>
                <el-input v-model="searchForm.examName" @input="page" clearable size="small" clearable @clear="page" placeholder="班级名称"></el-input>
              </el-form-item>
              <el-form-item label="考试班级">
                <el-select v-model="searchForm.classesId" size="small" clearable @change="page" placeholder="班级状态">
                  <el-option label="正常" value="normal"></el-option>
                  <el-option label="解散" value="dissolution"></el-option>
              <el-form-item label="参考班级">
                <el-select v-model="searchForm.classesId" @change="page" clearable @clear="page">
                  <el-option v-for="classes in classesList" :key="classes.id" :value="classes.id" :label="classes.className"/>
                </el-select>
              </el-form-item>
              <el-form-item>
@@ -33,11 +32,11 @@
                ></el-table-column>
                <el-table-column
                  label="考试试卷"
                  prop="examName"
                  prop="examPaperName"
                ></el-table-column>
                <el-table-column
                  label="参考班级"
                  prop="examClasses"
                  prop="className"
                ></el-table-column>
                <el-table-column
                  label="班级人数"
@@ -45,25 +44,38 @@
                ></el-table-column>
                <el-table-column
                  label="考试地点"
                  prop="site"
                  prop="examPlace"
                ></el-table-column>
                <el-table-column
                  label="考试科目"
                  prop="subject"
                  label="考试状态"
                  prop="status"
                  :formatter="statusFormatter"
                ></el-table-column>
                <el-table-column label="状态" prop="type" :formatter="formatterType">
                </el-table-column>
                <el-table-column
                  label="创建时间"
                  width="150px"
                  prop="createTime"
                ></el-table-column>
                <el-table-column
                  label="考试时间"
                  prop="ctime"
                ></el-table-column>
                <el-table-column label="操作">
                  width="200px"
                  algin="center"
                >
                  <template slot-scope="scope">
                    <div>{{scope.row.startTime}}</div>
                    <div>至</div>
                    <div>{{scope.row.endTime}}</div>
                  </template>
                </el-table-column>
                <el-table-column label="操作" fiexd="right" width="150px">
                  <template slot-scope="scope">
                    <el-button
                      class="deepBlue"
                      colorType="blue"
                      type="primary"
                      size="small"
                      @click="handlerEdit(scope.row)"
                    >修改
                    </el-button>
                    <el-button type="danger" size="small" @click="deleteExam(scope.row.id)">删除</el-button>
                  </template>
                </el-table-column>
              </el-table>
@@ -82,29 +94,40 @@
    </div>
    <el-dialog width="35%" :title="title" @close="closeHandler" :visible.sync="open" :destroy-on-close="true"
    <el-dialog width="500px" :title="title" @close="closeHandler" :visible.sync="open" :destroy-on-close="true"
               :append-to-body="true" :close-on-click-modal="false">
      <el-form :model="examForm" :rules="examRules" ref="examForm">
        <el-form-item label="考试名称" :label-width="formLabelWidth" prop="examName">
          <el-input v-model="examForm.examName" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="参考班级" :label-width="formLabelWidth" prop="classesId">
          <el-input v-model="examForm.classesId" autocomplete="off"></el-input>
          <el-select v-model="examForm.classesId">
            <el-option v-for="classes in classesList" :key="classes.id" :value="classes.id" :label="classes.className"/>
          </el-select>
        </el-form-item>
        <el-form-item label="试卷类型" :label-width="formLabelWidth" prop="examPaperType">
          <el-input v-model="examForm.examPaperType" autocomplete="off"></el-input>
          <el-select v-model="examForm.examPaperType" @change="getMyExamPaperList">
            <el-option label="固定试卷" :value="1"></el-option>
            <el-option label="随机试卷" :value="2"></el-option>
            <el-option label="随序试卷" :value="3"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="考试试卷" :label-width="formLabelWidth" prop="examPaperId">
          <el-input v-model="examForm.examPaperId" autocomplete="off"></el-input>
          <el-select v-model="examForm.examPaperId" :disabled="!examForm.examPaperType" placeholder="请先选择试卷类型">
            <el-option v-for="examPaper in examPaperList" :key="examPaper.id" :value="examPaper.id" :label="examPaper.name"/>
          </el-select>
        </el-form-item>
        <el-form-item label="开始时间" :label-width="formLabelWidth" prop="time">
          <el-date-picker
            v-model="examForm.time"
            type="daterange"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="考试地点" :label-width="formLabelWidth" prop="examPlace">
          <el-input v-model="examForm.examPlace" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="开始时间" :label-width="formLabelWidth" prop="startTime">
          <el-input v-model="examForm.startTime" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="结束时间" :label-width="formLabelWidth" prop="endTime">
          <el-input v-model="examForm.endTime" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
@@ -119,7 +142,7 @@
import Pagination from "@/components/Pagination"
import { getExams, addExam, editExam, deleteExamById } from "@/api/exam"
import { myClasses } from "@/api/classes"
import { myExamPaperList } from "@/api/examPaper"
import examPaperAPI from "@/api/examPaper"
export default {
  components: { Pagination },
  data() {
@@ -132,11 +155,12 @@
        examName: "",
        examPaperId: "",
        classesId: "",
        examPaperType: "",
        examPaperType: null,
        examPlace: "",
        status: "",
        startTime: "",
        endTime: "",
        time: [],
      },
      examRules: {
        examName: [
@@ -154,11 +178,8 @@
        examPlace: [
          { required: true, message: '请输入考试地点', trigger: 'blur' }
        ],
        startTime: [
          { required: true, message: '请选择开始时间', trigger: 'change' }
        ],
        endTime: [
          { required: true, message: '请选择结束时间', trigger: 'change' }
        time: [
          { required: true, message: '请选择考试时间', trigger: 'change' }
        ],
      },
      total: 0,
@@ -176,18 +197,36 @@
  },
  mounted() {
    this.page();
    this.getMyClasses()
    this.MyExamPaperList()
  },
  methods: {
    timeFormatter(row) {
      return row.startTime + "至" + row.endTime
    },
    statusFormatter(row) {
      if (row.status === "ing") {
        return "进行中"
      } else if (row.status === "not_start") {
        return "未开始"
      } else if (row.status === "finished") {
        return "已结束"
      }
    },
    MyExamPaperList() {
      let param = {
        "paperType": this.examForm.examPaperType
      }
      examPaperAPI.myExamPaperList(param).then(res => {
        this.examForm.examPaperId = null
        this.examPaperList = res.data
      })
    },
    getMyExamPaperList() {
      if (! this.examForm.examPaperType) {
        return
      }
      let param = {
        "paperType": this.examForm.examPaperType
      }
      myExamPaperList(param).then(res => {
        this.examPaperList = res.data
      })
      this.MyExamPaperList()
    },
    getMyClasses() {
      myClasses().then(res => {
@@ -197,18 +236,33 @@
    deleteExam(id) {
      deleteExamById(id).then(res => {
        this.$message.success("删除成功")
        this.page()
      })
    },
    handlerEdit(row) {
      this.examForm = row
      this.examForm.time = [row.startTime, row.endTime]
      this.title = "修改考试"
      this.open = true
    },
    addOrEditExam() {
      this.$refs['examForm'].validate((valid) => {
        if (valid) {
          this.examForm.startTime = this.examForm.time[0]
          this.examForm.endTime = this.examForm.time[1]
          if (this.examForm.id) {
            editExam(this.examForm).then(res => {
              this.open = false
              this.clearForm()
              this.$message.success("操作成功")
              this.page()
            })
          } else {
            addExam(this.examForm).then(res => {
              this.open = false
              this.clearForm()
              this.$message.success("操作成功")
              this.page()
            })
          }
        }
@@ -240,6 +294,7 @@
    page() {
      getExams(this.searchForm).then(res => {
        this.tableData = res.data.data
        this.total = res.data.total
      })
    },
    routerTo(url) {