SpringBoot+Vue实现知识点能力映射的操作系统考试系统

时间:2024-12-22 17:33:24
<template> <el-container> <el-header height="220"> <el-row> <el-select @change="typeChange" clearable v-model="" placeholder="请选择题目类型"> <el-option v-for="item in questionType" :key="" :label="" :value=""> </el-option> </el-select> <el-select @change="bankChange" clearable v-model="" placeholder="请选择题库" style="margin-left: 5px"> <el-option v-for="item in allBank" :key="" :label="" :value=""> </el-option> </el-select> <el-input v-model="" @blur="contentChange" placeholder="题目内容" style="margin-left: 5px;width: 220px" prefix-icon="el-icon-search"></el-input> </el-row> <el-row style="margin-top: 10px"> <el-button type="primary" icon="el-icon-plus" @click="addQuTableVisible = true">添加</el-button> <el-button type="success" icon="el-icon-upload" @click="batchImportVisible" style="margin-left: 10px">批量导入</el-button> <el-button type="warning" icon="el-icon-back" @click="backupQuestionBank" style="margin-left: 10px">备份</el-button> </el-row> </el-header> <el-main> <!--操作的下拉框--> <el-select @change="operationChange" clearable v-if=" !== 0" v-model="operation" :placeholder="'已选择' + + '项'" style="margin-bottom: 25px;"> <el-option v-for="(item,index) in optionInfo" :key="index" :value=""> <span style="float: left">{{ item.label }}</span> <span style="float: right; color: #8492a6; font-size: 13px">{{ item.desc }}</span> </el-option> </el-select> <el-table ref="questionTable" highlight-current-row v-loading="loading" :border="true" :data="questionInfo" tooltip-effect="dark" style="width: 100%;" @selection-change="handleTableSectionChange"> <el-table-column align="center" type="selection" width="55"> </el-table-column> <el-table-column align="center" label="题目类型"> <template slot-scope="scope"> <span v-if=" === 1">单选题</span> <span v-else-if=" === 2">多选题</span> <span v-else-if=" === 3">判断题</span> <span v-else-if=" === 4">简答题</span> </template> </el-table-column> <el-table-column align="center" label="题目内容"> <template slot-scope="scope"> <span class="quContent" @click="updateQu()">{{ scope.row.quContent }}</span> </template> </el-table-column> <el-table-column align="center" label="难度"> <template slot-scope="scope"> <span v-if=" === 1">简单</span> <span v-if=" === 2">中等</span> <span v-if=" === 3">困难</span> </template> </el-table-column> <el-table-column align="center" prop="quBankName" label="所属题库"> </el-table-column> <el-table-column align="center" prop="createPerson" label="创建人"> </el-table-column> <el-table-column align="center" label="创建时间"> <template slot-scope="scope"> {{ scope.row.createTime }} </template> </el-table-column> </el-table> <!--分页--> <el-pagination style="margin-top: 25px" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="" :page-sizes="[10, 20, 30, 50]" :page-size="" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </el-main> <el-dialog title="更新题目" :visible.sync="updateQuTableVisible" width="50%" center> <el-card> <el-form :model="updateQuForm" ref="updateQuForm" :rules="updateQuFormRules"> <el-form-item label="题目类型" label-width="120px" prop="questionType"> <el-select v-model="" disabled @change=" = []" placeholder="请选择"> <el-option v-for="item in questionType" :key="" :label="" :value=""> </el-option> </el-select> </el-form-item> <el-form-item label="难度等级" label-width="120px" prop="questionLevel"> <el-select v-model="" placeholder="请选择"> <el-option :value="parseInt(1)" label="简单"></el-option> <el-option :value="parseInt(2)" label="中等"></el-option> <el-option :value="parseInt(3)" label="困难"></el-option> </el-select> </el-form-item> <el-form-item label="归属题库" label-width="120px" prop="bankId"> <el-select multiple v-model="" placeholder="请选择"> <el-option v-for="item in allBank" :key="" :label="" :value=""></el-option> </el-select> </el-form-item> <el-form-item label="题目内容" label-width="120px" prop="questionContent"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </el-form-item> <el-form-item label="题目图片" label-width="120px"> <el-upload :action="uploadImageUrl + '/teacher/uploadQuestionImage'" :on-preview="uploadPreview" :on-remove="handleUpdateRemove" :headers="headers" :before-upload="beforeAvatarUpload" list-type="picture" :on-success="updateUploadImgSuccess" name="file"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过10M</div> </el-upload> </el-form-item> <el-form-item label="整题解析" label-width="120px" prop="analysis"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </el-form-item> <el-button v-if="!==4" type="primary" plain size="small" icon="el-icon-plus" style="margin-left: 40px" @click="addUpdateAnswer"> 添加 </el-button> <!--存放答案表单的信息--> <el-form-item prop="answer" v-if=" !== 4"> <el-table :data="" border style="width: 96%;margin-left: 40px;margin-top: 10px"> <el-table-column label="是否答案" width="80" align="center"> <template slot-scope="scope"> <el-checkbox v-model="" @change="checked=>checkUpdateAnswer(checked,)">答案 </el-checkbox> </template> </el-table-column> <el-table-column label="答案图片"> <template slot-scope="scope"> <el-upload id="answerUpload" :limit="1" :action="uploadImageUrl + '/teacher/uploadQuestionImage'" :on-preview="uploadPreview" :on-remove="handleUpdateAnswerRemove" :headers="headers" :before-upload="beforeAvatarUpload" list-type="picture" :on-success="(res) => { return uploadUpdateAnswerImgSuccess(res,)}" name="file"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> </el-table-column> <el-table-column label="答案内容"> <template slot-scope="scope"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </template> </el-table-column> <el-table-column label="答案解析"> <template slot-scope="scope"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </template> </el-table-column> <el-table-column label="操作" width="80" align="center"> <template slot-scope="scope"> <el-button type="danger" icon="el-icon-delete" circle @click="delUpdateAnswer()"></el-button> </template> </el-table-column> </el-table> </el-form-item> </el-form> </el-card> <div slot="footer" class="dialog-footer"> <el-button @click="updateQuTableVisible = false">取 消</el-button> <el-button type="primary" @click="updateQuestion">确 定</el-button> </div> </el-dialog> <el-dialog title="新增题目" :visible.sync="addQuTableVisible" width="50%" @close="resetAddQuForm" center> <el-card> <el-form :model="addQuForm" ref="addQuForm" :rules="addQuFormRules"> <el-form-item label="题目类型" label-width="120px" prop="questionType"> <el-select v-model="" @change=" = []" placeholder="请选择"> <el-option v-for="item in questionType" :key="" :label="" :value=""> </el-option> </el-select> </el-form-item> <el-form-item label="难度等级" label-width="120px" prop="questionLevel"> <el-select v-model="" placeholder="请选择"> <el-option :value="parseInt(1)" label="简单"></el-option> <el-option :value="parseInt(2)" label="中等"></el-option> <el-option :value="parseInt(3)" label="困难"></el-option> </el-select> </el-form-item> <el-form-item label="归属题库" label-width="120px" prop="bankId"> <el-select multiple v-model="" placeholder="请选择"> <el-option v-for="item in allBank" :key="" :label="" :value=""></el-option> </el-select> </el-form-item> <el-form-item label="题目内容" label-width="120px" prop="questionContent"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </el-form-item> <el-form-item label="题目图片" label-width="120px" prop="image"> <el-upload :action="uploadImageUrl + '/teacher/uploadQuestionImage'" :on-preview="uploadPreview" :on-remove="handleRemove" :headers="headers" :before-upload="beforeAvatarUpload" list-type="picture" :on-success="uploadImgSuccess" name="file"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过10M</div> </el-upload> </el-form-item> <el-form-item label="整题解析" label-width="120px" prop="analysis"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </el-form-item> <el-button v-if="!==4" type="primary" plain size="small" icon="el-icon-plus" style="margin-left: 40px" @click="addAnswer"> 添加 </el-button> <!--存放答案表单的信息--> <el-form-item prop="answer" v-if="!==4"> <el-table :data="" border style="width: 96%;margin-left: 40px;margin-top: 10px"> <el-table-column label="是否答案" width="80" align="center"> <template slot-scope="scope"> <el-checkbox v-model="" @change="checked=>checkAnswer(checked,)">答案 </el-checkbox> </template> </el-table-column> <el-table-column label="答案图片"> <template slot-scope="scope"> <el-upload :limit="1" :action="uploadImageUrl + '/teacher/uploadQuestionImage'" :on-preview="uploadPreview" :on-remove="handleAnswerRemove" :headers="headers" :before-upload="beforeAvatarUpload" list-type="picture" :on-success="(res) => { return uploadAnswerImgSuccess(res,)}" name="file"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> </el-table-column> <el-table-column label="答案内容"> <template slot-scope="scope"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </template> </el-table-column> <el-table-column label="答案解析"> <template slot-scope="scope"> <el-input v-model="" style="margin-left: 5px" type="textarea" :rows="2"></el-input> </template> </el-table-column> <el-table-column label="操作" width="80" align="center"> <template slot-scope="scope"> <el-button type="danger" icon="el-icon-delete" circle @click="delAnswer()"></el-button> </template> </el-table-column> </el-table> </el-form-item> </el-form> </el-card> <div slot="footer" class="dialog-footer"> <el-button @click="addQuTableVisible = false">取 消</el-button> <el-button type="primary" @click="addQuestion">确 定</el-button> </div> </el-dialog> <el-dialog title="加入题库" :visible.sync="addTableVisible" width="30%" @close="resetAddForm" center> <el-form :model="addForm" :rules="addFormRules" ref="addForm"> <el-form-item label="题库名称" label-width="120px" prop="bankId"> <el-select multiple v-model="" placeholder="请选择题库"> <el-option v-for="item in allBank" :key="" :label="" :value=""></el-option> </el-select> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="addTableVisible = false">取 消</el-button> <el-button type="primary" @click="addBank">确 定</el-button> </div> </el-dialog> <el-dialog title="从题库中移除" :visible.sync="removeTableVisible" width="30%" @close="resetRemoveForm" center> <el-form :model="removeForm" :rules="removeFormRules" ref="removeForm"> <el-form-item label="题库名称" label-width="120px" prop="bankId"> <el-select multiple v-model="" placeholder="请选择题库"> <el-option v-for="item in allBank" :key="" :label="" :value=""></el-option> </el-select> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="removeTableVisible = false">取 消</el-button> <el-button type="primary" @click="removeBank">确 定</el-button> </div> </el-dialog> <!--图片回显--> <el-dialog :visible.sync="backShowImgVisible" @close="backShowImgVisible = false"> <img style="width: 100%" :src="backShowImgUrl" alt=""> </el-dialog> </el-container> </template> <script> import questionBank from '@/api/questionBank' import question from '@/api/question' import utils from '@/utils/utils' import { generateSign } from '@/utils/sign' export default { name: 'QuestionManage', data () { return { uploadImageUrl: process.env.VUE_APP_UPLOAD_IMAGE_URL, //查询用户的参数 queryInfo: { //题目类型下拉款所选的内容 'questionType': '', 'questionBank': '', 'questionContent': '', 'pageNo': 1, 'pageSize': 10 }, //题目类型 questionType: [ { id: 1, name: '单选题', }, { id: 2, name: '多选题', }, { id: 3, name: '判断题', }, { id: 4, name: '简答题', }, ], //题库信息 allBank: [], //题目信息 questionInfo: [], //题目信息表格是否加载 loading: true, //表格被选中的所有行 selectionTable: [], //表格行被选中后的所有操作方式的数据 optionInfo: [ { 'label': '删除', 'desc': 'delete' }, { 'label': '加入题库', 'desc': 'add' }, { 'label': '题库中移除', 'desc': 'remove' } ], //表格行被选中后的数据 operation: '', //题目总数 total: 0, //是否显示加入题库对话框 addTableVisible: false, //是否显示移除题库对话框 removeTableVisible: false, //是否显示添加题目的对话框 addQuTableVisible: false, //添加题库的表单信息 addForm: { bankId: '' }, removeForm: { bankId: '' }, //添加题库表单的验证 addFormRules: { bankId: [ { required: true, message: '请选择需要添加进的题库', trigger: 'blur' } ] }, //移除题库表单的验证 removeFormRules: { bankId: [ { required: true, message: '请选择需要移除的题库', trigger: 'blur' } ] }, //添加题目的表单信息 addQuForm: { questionType: 1, questionLevel: 1, bankId: '', questionContent: '', images: [], analysis: '', createPerson: localStorage.getItem('username'), //答案对象 answer: [] }, //添加题目表单的验证规则 addQuFormRules: { questionType: [ { required: true, message: '请选择问题类型', trigger: 'blur' } ], questionLevel: [ { required: true, message: '请选择问题难度', trigger: 'blur' } ], bankId: [ { required: true, message: '请选择题库', trigger: 'blur' } ], questionContent: [ { required: true, message: '请输入题库内容', trigger: 'blur' } ], }, //更新题目表单的验证规则 updateQuFormRules: { questionType: [ { required: true, message: '请选择问题类型', trigger: 'blur' } ], questionLevel: [ { required: true, message: '请选择问题难度', trigger: 'blur' } ], bankId: [ { required: true, message: '请选择题库', trigger: 'blur' } ], questionContent: [ { required: true, message: '请输入题库内容', trigger: 'blur' } ], }, //图片回显的样式 backShowImgVisible: false, //图片回显的图片地址 backShowImgUrl: '', //更新题目的数据信息 updateQuForm: { questionId: '', questionType: 1, questionLevel: 1, bankId: '', questionContent: '', images: [], analysis: '', createPerson: localStorage.getItem('username'), //答案对象 answer: [] }, //是否显示更新题目的对话框 updateQuTableVisible: false, } }, created () { this.getQuestionBankInfo() this.getQuestionInfo() }, methods: { //获取所有的题库信息 getQuestionBankInfo () { questionBank.getQuestionBank().then((resp) => { if (resp.code === 200) { this.allBank = resp.data } }) }, //题目类型变化 typeChange (val) { this.queryInfo.questionType = val this.getQuestionInfo() }, //题库变化 bankChange (val) { this.queryInfo.questionBank = val this.getQuestionInfo() }, //题目名字筛选 contentChange () { //发送查询题目总数的请求 this.getQuestionInfo() }, //获取题目信息 getQuestionInfo () { question.getQuestion(this.queryInfo).then((resp) => { if (resp.code === 200) { this.questionInfo = resp.data.data this.total = resp.data.total this.loading = false } }) }, //试题备份 backupQuestionBank(){ question.backupQuestionBank().then((resp) =>{ console.log("返回的二进制流文件", resp ) if(!resp) return; //fileName:下载的文件名 var fileName = '试题列表.xls'; let blob = new Blob([resp.data], {type: 'application/vnd.ms-excel;charset=utf-8'}); // 针对ie浏览器 if (window.navigator && window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(blob, fileName); } else { //非ie浏览器 var downloadElement = document.createElement("a"); var href = window.URL.createObjectURL(blob); //常见下载的链接 downloadElement.href = href; downloadElement.download = fileName; //下载后文件名 document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载完成移除元素 window.URL.revokeObjectURL(href); //释放blob对象 } }) }, //处理表格被选中 handleTableSectionChange (val) { this.selectionTable = val }, //处理操作选择框的变化 operationChange (val) { //清空上一次的选择 this.operation = '' let questionIds = [] if (val === 'delete') { this.selectionTable.map(item => { questionIds.push(item.id) }) //发起删除请求 question.deleteQuestion({ 'questionIds': questionIds.join(',') }).then(resp => { if (resp.code === 200) { this.$notify({ title: 'Tips', message: '删除成功', type: 'success', duration: 2000 }) this.getQuestionInfo() } }) } else if (val === 'add') { this.addTableVisible = true } else if (val === 'remove') { this.removeTableVisible = true } }, //分页页面大小改变 handleSizeChange (val) { this.queryInfo.pageSize = val this.getQuestionInfo() }, //分页插件的页数 handleCurrentChange (val) { this.queryInfo.pageNo = val this.getQuestionInfo() }, //表单信息重置 resetAddForm () { //清空表格数据 this.$refs['addForm'].resetFields() }, resetRemoveForm () { //清空表格数据 this.$refs['removeForm'].resetFields() }, resetAddQuForm () { this.$refs['addQuForm'].resetFields() }, //提交加入题库的表单信息 addBank () { utils.validFormAndInvoke(this.$refs['addForm'], () => { let questionIds = [] let banks = this.addForm.bankId //将表格选中的数据中的问题id加入进去 this.selectionTable.map(item => { questionIds.push(item.id) }) questionBank.addBankQuestion({ 'questionIds': questionIds.join(','), 'banks': banks.join(',') }).then((resp) => { if (resp.code === 200) { this.getQuestionInfo() this.$notify({ title: 'Tips', message: resp.message, type: 'success', duration: 2000 }) } this.addTableVisible = false }) }, '请选择需要加入进的题库') }, //提交移除题库的表单信息 removeBank () { utils.validFormAndInvoke(this.$refs['removeForm'], () => { let questionIds = [] let banks = this.removeForm.bankId //将表格选中的数据中的问题id加入进去 this.selectionTable.map(item => { questionIds.push(item.id) }) //发起移除请求 questionBank.removeBankQuestion({ 'questionIds': questionIds.join(','), 'banks': banks.join(',') }).then((resp) => { if (resp.code === 200) { this.getQuestionInfo() this.$notify({ title: 'Tips', message: resp.message, type: 'success', duration: 2000 }) } this.removeTableVisible = false }) }, '请选择需要移除的题库') }, //新增题目上传后 点击图片的回显 uploadPreview (file) { this.backShowImgUrl = file.response.data this.backShowImgVisible = true }, //新增题目中的上传图片的移除 handleRemove (file, fileList) { this.addQuForm.images.map((item, index) => {//移除图片在表单中的数据 if (item === file.response.data) this.addQuForm.images.splice(index, 1) }) }, //更新题目中的上传图片的移除 handleUpdateRemove (file, fileList) { this.updateQuForm.images.map((item, index) => {//移除图片在表单中的数据 if (item === file.response.data) this.updateQuForm.images.splice(index, 1) }) }, //新增题目中的上传图片的格式大小限制 beforeAvatarUpload (file) { const isImg = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg' const isLt = file.size / 1024 / 1024 < 10 if (!isImg) { this.$message.error('上传图片只能是 JPG/PNG 格式!') } if (!isLt) { this.$message.error('上传头像图片大小不能超过 10MB!') } return isImg && isLt }, //新增题目中的上传图片成功后的钩子函数 uploadImgSuccess (response, file, fileList) { this.addQuForm.images.push(response.data) }, //更新题目中的上传图片成功后的钩子函数 updateUploadImgSuccess (response, file, fileList) { this.updateQuForm.images.push(response.data) }, //新增题目中的新增答案填写框 addAnswer () { this.addQuForm.answer.push({ id: this.addQuForm.answer.length, isTrue: false, answer: '', images: [], analysis: '' }) }, //更新时新增题目中的新增答案填写框 addUpdateAnswer () { this.updateQuForm.answer.push({ id: this.updateQuForm.answer.length, isTrue: false, answer: '', images: [], analysis: '' }) }, //新增题目中的删除答案填写框 delAnswer (id) {//当前答案的id this.addQuForm.answer.map((item, index) => { if (item.id === id) this.addQuForm.answer.splice(index, 1) }) }, //新增题目中的删除答案填写框 delUpdateAnswer (id) {//当前答案的id this.updateQuForm.answer.map((item, index) => { if (item.id === id) this.updateQuForm.answer.splice(index, 1) }) }, //答案上传照片了 uploadAnswerImgSuccess (response, id) { this.addQuForm.answer[id].images.push(response.data) }, //更新的答案上传图片了 uploadUpdateAnswerImgSuccess (response, id) { this.updateQuForm.answer[id].images.push(response.data) }, //答案上传成功后删除 handleAnswerRemove (file) { this.addQuForm.answer.images.map((item, index) => {//移除图片在表单中的数据 if (item === file.response.data) this.addQuForm.images.splice(index, 1) }) }, //更新的时候答案上传成功后删除 handleUpdateAnswerRemove (file) { this.updateQuForm.answer.images.map((item, index) => {//移除图片在表单中的数据 if (item === file.response.data) this.updateQuForm.images.splice(index, 1) }) }, //选择正确答案的按钮变化事件 checkAnswer (checked, id) { if (checked) { if (this.addQuForm.questionType === 1 || this.addQuForm.questionType === 3) {//单选或者判断 //当前已经有一个正确的选择了 this.addQuForm.answer.map(item => { item.isTrue = false }) this.addQuForm.answer.map(item => { if (item.id === id) item.isTrue = true }) } else {//多选 可以有多个答案 this.addQuForm.answer.map(item => { if (item.id === id) item.isTrue = true }) } } else { this.addQuForm.answer.map(item => { if (item.id === id) item.isTrue = false }) } }, //更新时选择正确答案的按钮变化事件 checkUpdateAnswer (checked, id) { if (checked) { if (this.updateQuForm.questionType === 1 || this.updateQuForm.questionType === 3) {//单选或者判断 //当前已经有一个正确的选择了 this.updateQuForm.answer.map(item => { item.isTrue = false }) this.updateQuForm.answer.map(item => { if (item.id === id) item.isTrue = true }) } else {//多选 可以有多个答案 this.updateQuForm.answer.map(item => { if (item.id === id) item.isTrue = true }) } } else { this.updateQuForm.answer.map(item => { if (item.id === id) item.isTrue = false }) } }, //新增题目 addQuestion () { this.$refs['addQuForm'].validate((valid) => { if (valid && this.addQuForm.answer.some(item => item.isTrue) && this.addQuForm.questionType !== 4) {//单选或者多选或者判断 question.addQuestion(this.addQuForm).then((resp) => { if (resp.code === 200) { this.addQuTableVisible = false this.getQuestionInfo() this.$notify({ title: 'Tips', message: '新增题目成功', type: 'success', duration: 2000 }) } }) } else if (valid && !this.addQuForm.answer.some(item => item.isTrue) && this.addQuForm.questionType !== 4) {//无答案 this.$message.error('必须有一个答案') return false } else if (valid && this.addQuForm.questionType === 4) {//简答题 无标准答案直接发请求 //当是简答题的时候需要清除answer this.addQuForm.answer = [] question.addQuestion(this.addQuForm).then((resp) => { if (resp.code === 200) { this.addQuTableVisible = false this.getQuestionInfo() this.$notify({ title: 'Tips', message: '新增题目成功', type: 'success', duration: 2000 }) } }) } else if (!valid) { this.$message.error('请填写必要信息') return false } }) }, //更新题目 updateQu (id) { question.getQuestionById(id).then((resp) => { if (resp.code === 200) { if (resp.data.questionType !== 4) { resp.data.answer.map(item => { item.isTrue = item.isTrue === 'true' }) } this.updateQuForm = resp.data //处理图片那个参数是个数组 if (this.updateQuForm.images === null) this.updateQuForm.images = [] if (resp.data.questionType !== 4) { this.updateQuForm.answer.map(item => { if (item.images === null) { item.images = [] } }) } } }) this.updateQuTableVisible = true }, //提交更新表单 updateQuestion () { this.$refs['updateQuForm'].validate((valid) => { if (valid && this.updateQuForm.questionType !== 4 && this.updateQuForm.answer.some(item => item.isTrue)) {//单选或者多选或者判断 //保证答案的图片只有一张 this.updateQuForm.answer.map(item => { if (item.images.length > 1) { item.images.splice(0, item.images.length - 1) } }) question.updateQuestion(this.updateQuForm).then((resp) => { if (resp.code === 200) { this.updateQuTableVisible = false this.getQuestionInfo() this.$notify({ title: 'Tips', message: '更新题目成功', type: 'success', duration: 2000 }) } }) } else if (valid && this.updateQuForm.questionType !== 4 && !this.updateQuForm.answer.some(item => item.isTrue)) {//无答案 this.$message.error('必须有一个答案') return false } else if (valid && this.updateQuForm.questionType === 4) {//简答题 无标准答案直接发请求 //当是简答题的时候需要清除answer this.addQuForm.answer = [] question.updateQuestion(this.updateQuForm).then((resp) => { if (resp.code === 200) { this.updateQuTableVisible = false this.getQuestionInfo() this.$notify({ title: 'Tips', message: '更新题目成功', type: 'success', duration: 2000 }) } }) } else if (!valid) { this.$message.error('请填写必要信息') return false } }) }, //批量导入试题 batchImportVisible () { let input = document.createElement('input') input.type = 'file' input.accept = '.xls,.xlsx' input.style.display = 'none' input.onchange = () => { let formData = new FormData() formData.append('file', input.files[0]) question.batchImportVisible(formData).then((resp) => { if (resp.code === 200) { this.$notify({ title: 'Tips', message: resp.message, type: 'success', duration: 2000 }) this.getQuestionInfo() } else { this.$notify({ title: 'Tips', message: resp.message, type: 'error', duration: 2000 }) } }) } document.body.appendChild(input) input.click() document.body.removeChild(input) }, }, computed: { //监测头部信息的token变化 headers () { const signHeaders = { 'body-string': '', 'query-string': '', 'x-nonce': `${utils.getRandomId()}`, 'x-timestamp': `${new Date().getTime()}` } return { ...signHeaders, authorization: localStorage.getItem('authorization') || '', sign: generateSign(JSON.stringify(signHeaders)), } }, } } </script> <style scoped lang="scss"> @import "../../assets/css/teacher/questionManage"; </style>