当前位置:首页 > VUE

vue实现试题录入

2026-03-29 10:42:39VUE

Vue 实现试题录入功能

技术栈建议 Vue 2/3 + Element UI/Ant Design Vue + Axios

基础表单结构

使用 Vue 的 v-model 实现数据双向绑定:

vue实现试题录入

<template>
  <div class="question-input">
    <el-form :model="questionForm" label-width="80px">
      <el-form-item label="题型">
        <el-select v-model="questionForm.type" placeholder="请选择题型">
          <el-option label="单选题" value="single"></el-option>
          <el-option label="多选题" value="multiple"></el-option>
          <el-option label="判断题" value="judge"></el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="题干">
        <el-input 
          type="textarea" 
          v-model="questionForm.content"
          :rows="3">
        </el-input>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      questionForm: {
        type: '',
        content: '',
        options: []
      }
    }
  }
}
</script>

动态选项处理

根据不同题型显示不同输入项:

<template>
  <!-- 选项区域 -->
  <div v-if="['single','multiple'].includes(questionForm.type)">
    <el-button @click="addOption">添加选项</el-button>

    <div v-for="(item,index) in questionForm.options" :key="index">
      <el-input v-model="item.text" placeholder="选项内容">
        <template #append>
          <el-checkbox v-model="item.isAnswer">正确答案</el-checkbox>
          <el-button @click="removeOption(index)">删除</el-button>
        </template>
      </el-input>
    </div>
  </div>

  <!-- 判断题特殊处理 -->
  <div v-else-if="questionForm.type === 'judge'">
    <el-radio-group v-model="questionForm.answer">
      <el-radio :label="true">正确</el-radio>
      <el-radio :label="false">错误</el-radio>
    </el-radio-group>
  </div>
</template>

<script>
methods: {
  addOption() {
    this.questionForm.options.push({
      text: '',
      isAnswer: false
    });
  },
  removeOption(index) {
    this.questionForm.options.splice(index, 1);
  }
}
</script>

数据提交处理

通过 Axios 提交到后端 API:

vue实现试题录入

methods: {
  async submitQuestion() {
    try {
      const res = await axios.post('/api/questions', {
        ...this.questionForm,
        // 处理多选题答案
        answers: this.questionForm.options
          .filter(opt => opt.isAnswer)
          .map(opt => opt.text)
      });

      this.$message.success('提交成功');
      this.resetForm();
    } catch (error) {
      this.$message.error(error.response.data.message);
    }
  },

  resetForm() {
    this.questionForm = {
      type: '',
      content: '',
      options: []
    }
  }
}

富文本编辑器集成

如需复杂内容编辑,可集成富文本编辑器:

import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';

components: { QuillEditor }

// 模板中使用
<quill-editor 
  v-model:content="questionForm.content" 
  contentType="html"
  theme="snow"
/>

表单验证

使用 Vue 的校验规则:

data() {
  return {
    rules: {
      content: [
        { required: true, message: '请输入题干内容', trigger: 'blur' }
      ],
      type: [
        { required: true, message: '请选择题型', trigger: 'change' }
      ]
    }
  }
}

// 模板中绑定
<el-form :rules="rules">
  <el-form-item prop="content">...</el-form-item>
</el-form>

完整功能扩展建议

  1. 试题分类管理:建立科目-章节二级分类
  2. 难度级别:可设置简单/中等/困难等级别
  3. 知识点标签:支持打标签关联知识点
  4. 图片上传:支持题目插图
  5. 批量导入:Excel模板导入功能
  6. 试题预览:实时渲染题目效果

实现时建议采用组件化设计,将试题编辑器、试题列表、分类管理等拆分为独立组件,通过 Vuex 或 Pinia 管理全局状态。

标签: 试题vue
分享给朋友:

相关文章

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现图集

vue实现图集

Vue 实现图集的方法 在 Vue 中实现图集功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用第三方库(如 vue-image-lightbox) 安装 vue-image-ligh…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…