设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 创业者
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

MongoDB实现问卷/考试设计(2)

发布时间:2019-10-31 13:22 所属栏目:21 来源:我的小熊不见了
导读:dataId用于将这个问题同一个业务数据绑定,dataType用来标志这个业务数据的类型,这两个字段方便数据的扩展;dataTitle是业务数据的标题;options是这个问题的选项;analysis问题的解析,用于用户答题结束后的自查

dataId用于将这个问题同一个业务数据绑定,dataType用来标志这个业务数据的类型,这两个字段方便数据的扩展;dataTitle是业务数据的标题;options是这个问题的选项;analysis问题的解析,用于用户答题结束后的自查;right用来记录问题的正确与否。

新增问题

上层接口

提供新增问题的接口:

  1. @PostMapping("/saveOrUpdateQuestion")  
  2. public JsonData saveOrUpdateQuestion(@RequestBody Question data) {  
  3.     questionService.saveOrUpdateQuestion(data);  
  4.     return JsonData.success();  

QuestionService:

  1. public void saveOrUpdateQuestion(Question data) {  
  2.     if (StringUtils.isEmpty(data.getId())) {// 新增  
  3.         writer.insert(manager.getExamDataBase(), ExamConstant.QUESTION_COLLECT, data);  
  4.     } else {//修改  
  5.         writer.updateDocument(data, ExamConstant.QUESTION_COLLECT);  
  6.     }  

DAO

Writer:

  1. public void insert(String dataBase, String collect, MongoBean data) {  
  2.     if (data.getId() == null) {  
  3.         data.setId(BsonTool.uuid());  
  4.     }  
  5.     MongoCollection<Document> collection = getCollection(dataBase, collect);  
  6.     collection.insertOne(Document.parse(JSONObject.toJSONString(data))); 
  7. }  
  8. public Document updateDocument(MongoBean data, String questionCollect) {  
  9.     Document filter = new Document();  
  10.     filter.put("id", data.getId());  
  11.     Document res = new Document();  
  12.     res.put("$set", BsonDocument.parse(JSONObject.toJSONString(data)));  
  13.     update(manager.getExamDataBase(), questionCollect, filter, res);  
  14.     return res;  
  15. }  
  16. public boolean update(String dataBase, String collect, Bson filter, Bson update) {  
  17.     MongoCollection<Document> collection = getCollection(dataBase, collect);  
  18.     UpdateResult ur = collection.updateOne(filter, update);  
  19.     return ur.getModifiedCount() > 0;  

这样后端的工作就全部完成了,接下来就是前端怎么给后端提供这样的数据结构了。

前端实现数据结构

前端使用vue实现JSON的构造:

  1. <Modal title="问题编辑" v-model="showEdit" :closable="false" :mask-closable="false">  
  2.     <Form ref="question" :model="question" :rules="ruleValidate">  
  3.         <FormItem label="题目类型:" prop="qType">  
  4.             <Select v-model="question.qType" class="input-180" placeholder="题目类型" @on-change="changeQType(question)">  
  5.                 <Option v-for="d in qTypes" :value="d.value" :key="d.value">{{ d.label }}</Option>  
  6.             </Select>  
  7.         </FormItem>  
  8.         <FormItem label="题目:" prop="title">  
  9.             <Input  
  10.                    class="input-95-per"  
  11.                    v-model="question.title"  
  12.                    type="textarea"  
  13.                    row="1"  
  14.                    placeholder="题目"  
  15.                    ></Input>  
  16.         </FormItem>  
  17.         <FormItem label="选项:">  
  18.             <div v-for="(o, i2) in question.options" :key="i2" style="display:flex">  
  19.                 <Input class="input-95-per margin-bot-8 margin-right-10" v-model="o.text">  
  20.                     <span slot="prepend">{{i2+1}}:</span>  
  21.                 </Input>  
  22.                 <Button size="small" @click="addOpt(question)" v-if="i2===0">+</Button>  
  23.                 <Button size="small" @click="delOpt(question, o)" v-if="i2">-</Button>  
  24.                 <Checkbox v-model="o.right">正确答案</Checkbox>  
  25.             </div>  
  26.         </FormItem>  
  27.         <FormItem label="答案解析:">  
  28.             <Input  
  29.                    class="input-95-per"  
  30.                    v-model="question.analysis"  
  31.                    type="textarea"  
  32.                    row="1"  
  33.                    placeholder="答案解析"  
  34.                    ></Input>  
  35.         </FormItem>  
  36.     </Form>  
  37.     <div slot="footer">  
  38.         <Button type="text" @click="cancelQuestion">取消</Button>  
  39.         <Button type="primary" :loading="saveLoading" @click="saveQuestion">保存</Button>  
  40.     </div>  
  41. </Modal> 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读