Selaa lähdekoodia

试题管理web 添加 修改

wushaodong 3 vuotta sitten
vanhempi
sitoutus
2d97bf8bea
2 muutettua tiedostoa jossa 72 lisäystä ja 27 poistoa
  1. 24 1
      apps/examination/examquestion/serializers.py
  2. 48 26
      uis/admin/examquestion/edit.html

+ 24 - 1
apps/examination/examquestion/serializers.py

@@ -12,6 +12,17 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
     type_text = serializers.CharField(source='get_type_display', read_only=True)
     difficulty_text = serializers.CharField(source='get_difficulty_display', read_only=True)
     judgment = serializers.SerializerMethodField()
+    items = serializers.SerializerMethodField()
+
+    def get_items(self, obj):
+        if obj.type == ExamQuestion.SINGLE or obj.type == ExamQuestion.MULTIPLE:
+            rows = ExamQuestionOption.objects.filter(main=obj, delete=False)
+            return ExamQuestionOptionSerializer(rows,many=True).data
+        elif obj.type == ExamQuestion.FILL:
+            rows = ExamQuestionFill.objects.filter(main=obj, delete=False)
+            return ExamQuestionFillSerializer(rows, many=True).data
+        else:
+            return []
 
     def get_judgment(self, obj):
         if obj.judgment:
@@ -50,11 +61,11 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
             validated_data['judgment'] = True if self.initial_data['judgment'] == '1' else False
         instance = super(ExamQuestionSerializer, self).update(instance, validated_data)
         rows = json.loads(self.initial_data['rows'])
+        ExamQuestionOption.objects.filter(main=instance).update(delete=True, right=False)
         for row in rows:
             if not row['content']:
                 raise CustomError('答案不能为空,请填写答案!')
             if instance.type == ExamQuestion.SINGLE or instance.type == ExamQuestion.MULTIPLE:
-                ExamQuestionOption.objects.filter(main=instance).update(delete=True, right=False)
                 if row['id']:
                     # 更新
                     ExamQuestionOption.objects.filter(main=instance, id=row['id']).update(delete=False,
@@ -82,3 +93,15 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
                         order=row['order'],
                     )
         return instance
+
+class ExamQuestionOptionSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = ExamQuestionOption
+        fields = '__all__'
+
+class ExamQuestionFillSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = ExamQuestionFill
+        fields = '__all__'

+ 48 - 26
uis/admin/examquestion/edit.html

@@ -142,7 +142,7 @@
                 layedit.setContent(editIndex, editdata.title, false);
                 chapter_id = editdata.chapter;
                 subjectChange(editdata.subject)
-                typeChange(editdata.type.toString())
+                typeChange(editdata.type.toString(), editdata.items)
             }
         };
         var subjectChange = function (value) {
@@ -204,7 +204,7 @@
                 layer.msg(error_msg, {icon: 2});
                 return false
             }
-            if (!checked && id_type !== "3") {
+            if (!checked && id_type < 4) {
                 layer.msg('请选择一个正确答案!', {icon: 2});
                 return false
             }
@@ -244,12 +244,8 @@
             {field: 'answer', title: '选项', width: '7%',},
             {field: 'content', title: '答案', edit: 'text', width: '50%',},
             {
-                field: 'id', title: '', templet: function (d) {
-                    if (d.id) {
-                        return ''
-                    } else {
-                        return '<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del" lay-id="' + d.id + '"><i class="layui-icon layui-icon-delete"></i>删除</a>';
-                    }
+                field: 'id', title: '操作', width: '20%', templet: function (d) {
+                    return '<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del" lay-id="' + d.id + '"><i class="layui-icon layui-icon-delete"></i>删除</a>';
                 }
             }
         ]
@@ -314,33 +310,59 @@
             if (!data.value) return;
             typeChange(data.value)
         })
-        var typeChange = function (value) {
+        var typeChange = function (value, items = []) {
             layui.$('#id_panduan').addClass('layui-hide')
             layui.$('#id_table').removeClass('layui-hide')
             var oldData = [], _cols = cols
             if (value === "1") {
                 //单选题
-                for (var i = 0; i < 4; i++) {
-                    oldData.push(
-                        {
-                            id: '',
-                            answer: aswers[i],
-                            content: '',
-                        }
-                    )
+                if (items.length > 0) {
+                    for (var i = 0; i < items.length; i++) {
+                        oldData.push(
+                            {
+                                id: items[i].id,
+                                LAY_CHECKED: items[i].right,
+                                answer: aswers[i],
+                                content: items[i].content,
+                            }
+                        )
+                    }
+                } else {
+                    for (var i = 0; i < 4; i++) {
+                        oldData.push(
+                            {
+                                id: '',
+                                answer: aswers[i],
+                                content: '',
+                            }
+                        )
+                    }
                 }
                 _cols[0] = {title: '正确答案', type: 'radio', width: '7%',}
             }
             else if (value === "2") {
                 //多选题
-                for (var i = 0; i < 5; i++) {
-                    oldData.push(
-                        {
-                            id: '',
-                            answer: aswers[i],
-                            content: '',
-                        }
-                    )
+                if (items.length > 0) {
+                    for (var i = 0; i < items.length; i++) {
+                        oldData.push(
+                            {
+                                id: items[i].id,
+                                LAY_CHECKED: items[i].right,
+                                answer: aswers[i],
+                                content: items[i].content,
+                            }
+                        )
+                    }
+                } else {
+                    for (var i = 0; i < 5; i++) {
+                        oldData.push(
+                            {
+                                id: '',
+                                answer: aswers[i],
+                                content: '',
+                            }
+                        )
+                    }
                 }
                 _cols[0] = {title: '正确答案', type: 'checkbox', width: '7%',}
             }
@@ -363,7 +385,7 @@
                 layui.$('#id_panduan').removeClass('layui-hide')
                 layui.$('#id_table').addClass('layui-hide')
             }
-
+            console.log(111111111, _cols)
             tableIns.reload({
                 data: oldData,
                 cols: [_cols],