龚焕茏
2024-06-12 8b2a9dcd9ada7a5fd40f8aa0993f6afef67493d3
feat:科目、题目
10个文件已修改
364 ■■■■■ 已修改文件
src/api/question.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/subject.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/education/subject/list.vue 169 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/components/Show.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/edit/gap-filling.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/edit/multiple-choice.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/edit/short-answer.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/edit/single-choice.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/edit/true-false.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/question/list.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/question.js
@@ -4,5 +4,6 @@
  pageList: query => post('/api/admin/question/page', query),
  edit: query => post('/api/admin/question/edit', query),
  select: id => post('/api/admin/question/select/' + id),
  deleteQuestion: id => post('/api/admin/question/delete/' + id)
  deleteQuestion: id => post('/api/admin/question/delete/' + id),
  updateStatus: query => post('/api/admin/question/status', query)
}
src/api/subject.js
@@ -1,9 +1,11 @@
import { post } from '@/utils/request'
import { get, post } from '@/utils/request'
export default {
  list: query => post('/api/admin/subject/list'),
  pageList: query => post('/api/admin/subject/page', query),
  edit: query => post('/api/admin/education/subject/edit', query),
  select: id => post('/api/admin/education/subject/select/' + id),
  deleteSubject: id => post('/api/admin/education/subject/delete/' + id)
  edit: query => post('/api/admin/subject/edit', query),
  select: id => post('/api/admin/subject/select/' + id),
  deleteSubject: id => post('/api/admin/subject/delete/' + id),
  updateStatus: query => post('/api/admin/subject/status', query),
  getItemOrder: id => get('/api/admin/subject/getItemOrder')
}
src/views/education/subject/list.vue
@@ -1,34 +1,63 @@
<template>
  <div class="app-container">
    <el-form :model="queryParam" ref="queryForm" :inline="true">
      <el-form-item label="年级:">
        <el-select v-model="queryParam.level" placeholder="年级" clearable="">
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
      <el-form-item>
        <el-input v-model="queryParam.name" placeholder="请输入名称" clearable></el-input>
      </el-form-item>
      <el-form-item>
        <el-select v-model="queryParam.status" placeholder="请选择状态" clearable @change="search">
          <el-option value="1" label="启用"></el-option>
          <el-option value="2" label="禁用"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm">查询</el-button>
        <router-link :to="{path:'/education/subject/edit'}" class="link-left">
          <el-button type="primary">添加</el-button>
        </router-link>
        <el-button type="primary" @click="search">查询</el-button>
        <el-button type="primary" @click="edit()">添加</el-button>
      </el-form-item>
    </el-form>
    <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
      <el-table-column prop="id" label="Id" />
      <el-table-column prop="name" label="学科"/>
      <el-table-column prop="levelName" label="年级" />
      <el-table-column width="220px" label="操作" align="center">
      <el-table-column align="center" prop="name" label="名称" show-overflow-tooltip />
      <el-table-column align="center" prop="itemOrder" label="排序" />
      <el-table-column align="center" prop="createTime" label="创建时间" />
      <el-table-column align="center" prop="status" label="状态">
        <template slot-scope="{row}">
          <router-link :to="{path:'/education/subject/edit', query:{id:row.id}}" class="link-left">
            <el-button size="mini">编辑</el-button>
          </router-link>
          <el-button   size="mini" type="danger" @click="delSubject(row)" class="link-left">删除</el-button>
          <el-tag :type="row.status === '禁用' ? 'danger' : 'success'">
            {{ row.status ? row.status : '启用' }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center">
        <template slot-scope="{row}">
          <el-button size="mini" @click="edit(row)">编辑</el-button>
          <el-button size="mini" type="primary" @click="status(row)">
            {{ row.status === "禁用" ? "启用" : "禁用" }}
          </el-button>
          <el-popconfirm title="确认删除吗" @confirm="deleteSubject(row)">
            <el-button slot="reference" size="mini" type="danger" class="link-left">删除</el-button>
          </el-popconfirm>
        </template>
      </el-table-column>
    </el-table>
    <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
                @pagination="search"/>
    <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
      @pagination="search" />
    <el-dialog :visible.sync="visible" width="400px">
      <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
        <el-form-item label="名称:" prop="name" required>
          <el-input v-model="form.name" maxlength="10" show-word-limit />
        </el-form-item>
        <el-form-item label="排序:" prop="itemOrder" required>
          <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100" />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitForm">提交</el-button>
          <el-button @click="resetForm">重置</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
  </div>
</template>
@@ -39,37 +68,84 @@
export default {
  components: { Pagination },
  data () {
  data() {
    return {
      listLoading: true,
      queryParam: {
        level: null,
        name: '',
        pageIndex: 1,
        pageSize: 10
      },
      listLoading: true,
      formLoading: false,
      total: 0,
      tableData: [],
      total: 0
    }
      form: {
        id: '',
        name: '',
        itemOrder: ''
      },
      visible: false,
      rules: {
        name: [
          { required: true, message: '请输入名称', trigger: 'blur' }
        ],
        itemOrder: [
          { required: true, message: '请输入排序', trigger: 'blur', type: 'number' }
        ]
      },
    };
  },
  created () {
  created() {
    this.search()
  },
  methods: {
    search () {
    // 获取排序
    getItemOrder() {
      subjectApi.getItemOrder().then(re => {
        this.form.itemOrder = re.data
      })
    },
    // 获取列表
    search() {
      this.listLoading = true
      subjectApi.pageList(this.queryParam).then(data => {
        const re = data.data
        this.tableData = re.list
        this.total = re.total
        this.queryParam.pageIndex = re.pageNum
      subjectApi.pageList(this.queryParam).then(re => {
        this.tableData = re.data.list
        this.total = re.data.total
        this.queryParam.pageSize = re.data.pageSize
        this.queryParam.pageIndex = re.data.pageNum
        this.listLoading = false
      })
    },
    submitForm () {
      this.queryParam.pageIndex = 1
      this.search()
    edit(row) {
      if (row) {
        subjectApi.select(row.id).then(re => {
          if (re.code === 1) {
            this.form = re.data;
            this.visible = true;
          } else {
            this.$message.error(re.message)
          }
        })
      } else {
        this.getItemOrder();
        this.visible = true;
      }
    },
    delSubject (row) {
    status(row) {
      let question = {
        id: row.id,
        status: row.status === '禁用' ? '启用' : '禁用'
      }
      subjectApi.updateStatus(question).then(re => {
        if (re.code === 1) {
          this.$message.success(re.message)
          this.search()
        } else {
          this.$message.error(re.message)
        }
      })
    },
    deleteSubject(row) {
      let _this = this
      subjectApi.deleteSubject(row.id).then(re => {
        if (re.code === 1) {
@@ -79,7 +155,32 @@
          _this.$message.error(re.message)
        }
      })
    }
    },
    submitForm() {
      let _this = this
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.formLoading = true
          subjectApi.edit(this.form).then(re => {
            if (re.code === 1) {
              _this.$message.success(re.message)
              _this.search()
              _this.formLoading = false
              _this.visible = false
            } else {
              _this.$message.error(re.message)
              _this.formLoading = false
              _this.visible = false
            }
          })
        }
      })
    },
    resetForm() {
      let lastId = this.form.id
      this.$refs['form'].resetFields()
      this.form.id = lastId
    },
  },
  computed: {
    ...mapGetters('enumItem', [
src/views/exam/question/components/Show.vue
@@ -60,3 +60,8 @@
  methods: {}
}
</script>
<style scoped>
  /deep/ td {
    background-color: #f0f0f0;
  }
</style>
src/views/exam/question/edit/gap-filling.vue
@@ -1,14 +1,9 @@
<template>
  <div class="app-container">
    <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
      <el-form-item label="年级:" prop="gradeLevel" required>
        <el-select v-model="form.gradeLevel" placeholder="年级" @change="levelChange">
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:" prop="subjectId" required>
        <el-select v-model="form.subjectId" placeholder="学科" >
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' ( '+item.levelName+' )'"></el-option>
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题干:" prop="title" required>
@@ -17,14 +12,10 @@
      <el-form-item label="填空答案:" required>
        <el-form-item :label="item.prefix" :key="item.prefix"  v-for="item in form.items"  label-width="50px" class="question-item-label">
          <el-input v-model="item.content"   @focus="inputClick(item,'content')"  class="question-item-content-input"  style="width: 80%"/>
          <span class="question-item-span">分数:</span><el-input-number v-model="item.score" :precision="1" :step="1" :max="100"  ></el-input-number>
        </el-form-item>
      </el-form-item>
      <el-form-item label="解析:" prop="analyze" required>
        <el-input v-model="form.analyze"  @focus="inputClick(form,'analyze')" />
      </el-form-item>
      <el-form-item label="分数:" prop="score" required>
        <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number>
      </el-form-item>
      <el-form-item label="难度:" required>
        <el-rate v-model="form.difficult" class="question-item-rate"></el-rate>
@@ -115,7 +106,7 @@
    if (id && parseInt(id) !== 0) {
      _this.formLoading = true
      questionApi.select(id).then(re => {
        _this.form = re.response
        _this.form = re.data
        _this.formLoading = false
      })
    }
src/views/exam/question/edit/multiple-choice.vue
@@ -1,14 +1,9 @@
<template>
  <div class="app-container">
    <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
      <el-form-item label="年级:" prop="gradeLevel" required>
        <el-select v-model="form.gradeLevel" placeholder="年级"  @change="levelChange">
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:" prop="subjectId" required>
        <el-select v-model="form.subjectId" placeholder="学科" >
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' ( '+item.levelName+' )'"></el-option>
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题干:" prop="title" required>
@@ -23,9 +18,6 @@
      </el-form-item>
      <el-form-item label="解析:" prop="analyze" required>
        <el-input v-model="form.analyze"  @focus="inputClick(form,'analyze')" />
      </el-form-item>
      <el-form-item label="分数:" prop="score" required>
        <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number>
      </el-form-item>
      <el-form-item label="难度:" required>
        <el-rate v-model="form.difficult" class="question-item-rate"></el-rate>
@@ -130,7 +122,7 @@
    if (id && parseInt(id) !== 0) {
      _this.formLoading = true
      questionApi.select(id).then(re => {
        _this.form = re.response
        _this.form = re.data
        _this.formLoading = false
      })
    }
src/views/exam/question/edit/short-answer.vue
@@ -1,14 +1,9 @@
<template>
  <div class="app-container">
    <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
      <el-form-item label="年级:" prop="gradeLevel" required>
        <el-select v-model="form.gradeLevel"   placeholder="年级"  @change="levelChange">
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:" prop="subjectId" required>
        <el-select v-model="form.subjectId" placeholder="学科" >
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' ( '+item.levelName+' )'"></el-option>
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题干:" prop="title" required>
@@ -19,9 +14,6 @@
      </el-form-item>
      <el-form-item label="解析:" prop="analyze" required>
        <el-input v-model="form.analyze"  @focus="inputClick(form,'analyze')" />
      </el-form-item>
      <el-form-item label="分数:" prop="score" required>
        <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number>
      </el-form-item>
      <el-form-item label="难度:" required>
        <el-rate v-model="form.difficult" class="question-item-rate"></el-rate>
src/views/exam/question/edit/single-choice.vue
@@ -1,14 +1,9 @@
<template>
  <div class="app-container">
    <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
      <el-form-item label="年级:" prop="gradeLevel" required>
        <el-select v-model="form.gradeLevel" placeholder="年级"  @change="levelChange" clearable>
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:" prop="subjectId" required>
        <el-select v-model="form.subjectId" placeholder="学科" >
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' ( '+item.levelName+' )'"></el-option>
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题干:" prop="title" required>
@@ -23,9 +18,6 @@
      </el-form-item>
      <el-form-item label="解析:" prop="analyze" required>
        <el-input v-model="form.analyze"  @focus="inputClick(form,'analyze')" />
      </el-form-item>
      <el-form-item label="分数:" prop="score" required>
        <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number>
      </el-form-item>
      <el-form-item label="难度:" required>
        <el-rate v-model="form.difficult" class="question-item-rate"></el-rate>
src/views/exam/question/edit/true-false.vue
@@ -1,14 +1,9 @@
<template>
  <div class="app-container">
    <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading"  :rules="rules">
      <el-form-item label="年级:" prop="gradeLevel" required>
        <el-select v-model="form.gradeLevel" placeholder="年级"  @change="levelChange">
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:" prop="subjectId" required>
        <el-select v-model="form.subjectId" placeholder="学科" >
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id" :label="item.name+' ( '+item.levelName+' )'"></el-option>
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题干:" prop="title" required>
@@ -22,9 +17,6 @@
      </el-form-item>
      <el-form-item label="解析:" prop="analyze" required>
        <el-input v-model="form.analyze"  @focus="inputClick(form,'analyze')" />
      </el-form-item>
      <el-form-item label="分数:" prop="score" required>
        <el-input-number v-model="form.score" :precision="1" :step="1" :max="100"></el-input-number>
      </el-form-item>
      <el-form-item label="难度:" required>
        <el-rate v-model="form.difficult" class="question-item-rate"></el-rate>
src/views/exam/question/list.vue
@@ -1,59 +1,68 @@
<template>
  <div class="app-container">
    <el-form :model="queryParam" ref="queryForm" :inline="true">
      <el-form-item label="题目ID:">
        <el-input v-model="queryParam.id" clearable></el-input>
      <el-form-item>
        <el-input v-model="queryParam.content" placeholder="请输入题目" clearable></el-input>
      </el-form-item>
      <el-form-item label="题目内容:">
        <el-input v-model="queryParam.content" clearable></el-input>
      </el-form-item>
      <el-form-item label="年级:">
        <el-select v-model="queryParam.level" placeholder="年级"  @change="levelChange" clearable>
          <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="学科:">
        <el-select v-model="queryParam.subjectId" clearable>
          <el-option v-for="item in subjectFilter" :key="item.id" :value="item.id"
                     :label="item.name+' ( '+item.levelName+' )'"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="题型:">
        <el-select v-model="queryParam.questionType" clearable>
          <el-option v-for="item in questionType" :key="item.key" :value="item.key" :label="item.value"></el-option>
      <el-form-item>
        <el-select v-model="queryParam.subjectId" placeholder="请选择科目" clearable multiple @change="search">
          <el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm">查询</el-button>
        <el-select v-model="queryParam.questionType" placeholder="请选择题型" clearable multiple @change="search">
          <el-option v-for="item in questionTypeEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-select v-model="queryParam.status" placeholder="请选择状态" clearable @change="search">
          <el-option value="1" label="启用"></el-option>
          <el-option value="2" label="禁用"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="search">查询</el-button>
        <el-popover placement="bottom" trigger="click">
          <el-button type="warning" size="mini" v-for="item in editUrlEnum" :key="item.key"
                     @click="$router.push({path:item.value})">{{item.name}}
            @click="$router.push({ path: item.value })">{{ item.name }}
          </el-button>
          <el-button slot="reference" type="primary" class="link-left">添加</el-button>
        </el-popover>
      </el-form-item>
    </el-form>
    <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
      <el-table-column prop="id" label="Id" width="90px"/>
      <el-table-column prop="subjectId" label="学科" :formatter="subjectFormatter" width="120px"/>
      <el-table-column prop="questionType" label="题型" :formatter="questionTypeFormatter" width="70px"/>
      <el-table-column prop="shortTitle" label="题干" show-overflow-tooltip/>
      <el-table-column prop="score" label="分数" width="60px"/>
      <el-table-column prop="difficult" label="难度" width="60px"/>
      <el-table-column prop="createTime" label="创建时间" width="160px"/>
      <el-table-column label="操作" align="center" width="220px">
      <el-table-column align="center" prop="shortTitle" label="题目" show-overflow-tooltip>
      </el-table-column>
      <el-table-column align="center" prop="subjectName" label="科目" width="150px">
      </el-table-column>
      <el-table-column align="center" prop="questionTypeName" label="题型" width="100px">
      </el-table-column>
      <el-table-column align="center" prop="difficult" label="难度" width="100px" />
      <el-table-column align="center" prop="createTime" label="创建时间" width="160px" />
      <el-table-column align="center" prop="status" label="状态" width="100px">
        <template slot-scope="{row}">
          <el-button size="mini"   @click="showQuestion(row)">预览</el-button>
          <el-button size="mini"  @click="editQuestion(row)">编辑</el-button>
          <el-button size="mini"  type="danger" @click="deleteQuestion(row)" class="link-left">删除</el-button>
          <el-tag :type="row.status === '禁用' ? 'danger' : 'success'">
            {{ row.status ? row.status : '启用' }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="300px">
        <template slot-scope="{row}">
          <el-button size="mini" @click="showQuestion(row)">预览</el-button>
          <el-button size="mini" @click="editQuestion(row)">编辑</el-button>
          <el-button size="mini" type="primary" @click="statusQuestion(row)">
            {{ row.status === "禁用" ? "启用" : "禁用" }}
          </el-button>
          <el-popconfirm title="确认删除吗" @confirm="deleteQuestion(row)">
            <el-button slot="reference" size="mini" type="danger" class="link-left">删除</el-button>
          </el-popconfirm>
        </template>
      </el-table-column>
    </el-table>
    <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
                @pagination="search"/>
    <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
      @pagination="search" />
    <el-dialog :visible.sync="questionShow.dialog" style="width: 100%;height: 100%">
      <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading"/>
      <QuestionShow :qType="questionShow.qType" :question="questionShow.question" :qLoading="questionShow.loading" />
    </el-dialog>
  </div>
</template>
@@ -66,7 +75,7 @@
export default {
  components: { Pagination, QuestionShow },
  data () {
  data() {
    return {
      queryParam: {
        id: null,
@@ -88,16 +97,30 @@
      }
    }
  },
  created () {
  created() {
    this.initSubject()
    this.search()
  },
  methods: {
    submitForm () {
    statusQuestion(row) {
      let question = {
        id: row.id,
        status: row.status === '禁用' ? '启用' : '禁用'
      }
      questionApi.updateStatus(question).then(re => {
        if (re.code === 1) {
          this.$message.success(re.message)
          this.search()
        } else {
          this.$message.error(re.message)
        }
      })
    },
    submitForm() {
      this.queryParam.pageIndex = 1
      this.search()
    },
    search () {
    search() {
      this.listLoading = true
      questionApi.pageList(this.queryParam).then(data => {
        const re = data.data
@@ -107,28 +130,28 @@
        this.listLoading = false
      })
    },
    levelChange () {
    levelChange() {
      this.queryParam.subjectId = null
      this.subjectFilter = this.subjects.filter(data => data.level === this.queryParam.level)
    },
    addQuestion () {
    addQuestion() {
      this.$router.push('/exam/question/edit/singleChoice')
    },
    showQuestion (row) {
    showQuestion(row) {
      let _this = this
      this.questionShow.dialog = true
      this.questionShow.loading = true
      questionApi.select(row.id).then(re => {
        _this.questionShow.qType = re.response.questionType
        _this.questionShow.question = re.response
        _this.questionShow.qType = re.data.questionType
        _this.questionShow.question = re.data
        _this.questionShow.loading = false
      })
    },
    editQuestion (row) {
    editQuestion(row) {
      let url = this.enumFormat(this.editUrlEnum, row.questionType)
      this.$router.push({ path: url, query: { id: row.id } })
    },
    deleteQuestion (row) {
    deleteQuestion(row) {
      let _this = this
      questionApi.deleteQuestion(row.id).then(re => {
        if (re.code === 1) {
@@ -139,10 +162,10 @@
        }
      })
    },
    questionTypeFormatter (row, column, cellValue, index) {
    questionTypeFormatter(row, column, cellValue, index) {
      return this.enumFormat(this.questionType, cellValue)
    },
    subjectFormatter (row, column, cellValue, index) {
    subjectFormatter(row, column, cellValue, index) {
      return this.subjectEnumFormat(cellValue)
    },
    ...mapActions('exam', { initSubject: 'initSubject' })
@@ -150,6 +173,7 @@
  computed: {
    ...mapGetters('enumItem', ['enumFormat']),
    ...mapState('enumItem', {
      questionTypeEnum: state => state.exam.question.typeEnum,
      questionType: state => state.exam.question.typeEnum,
      editUrlEnum: state => state.exam.question.editUrlEnum,
      levelEnum: state => state.user.levelEnum