当前位置:首页 > VUE

vue实现试题录入

2026-03-29 10:42:39VUE

Vue 实现试题录入功能

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

基础表单结构

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

<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:

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 的校验规则:

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原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue实现素材

vue实现素材

Vue 实现素材的方法 使用 Vue 组件管理素材 在 Vue 项目中,可以通过组件化的方式管理素材。创建一个专门的组件来加载和显示素材,例如图片、视频或音频文件。组件可以接收素材的路径或 URL 作…

vue实现treeview

vue实现treeview

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

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…

vue怎么实现共用

vue怎么实现共用

在Vue中实现组件或逻辑的共用,可以通过以下几种方式实现: 使用混入(Mixins) 混入是一种分发Vue组件可复用功能的灵活方式。混入对象可以包含任意组件选项,当组件使用混入对象时,所有混入对象的…