Browse Source

试卷管理

jiaweiqi 3 years ago
parent
commit
110a99fac9

+ 8 - 0
apps/examination/exampaper/serializers.py

@@ -22,6 +22,10 @@ class ExamPaperSerializer(serializers.ModelSerializer):
         validated_data['create_user'] = self.context['request'].user
         instance = super(ExamPaperSerializer, self).create(validated_data)
         instance.update_count()
+        if not instance.question_total_count:
+            raise CustomError(u'请选择试题!')
+        if instance.passline > instance.question_total_scores:
+           raise CustomError(u'及格线不能大于试题总分!')
         instance.save()
 
         instance.generate_detail()
@@ -46,6 +50,10 @@ class ExamPaperSerializer(serializers.ModelSerializer):
             raise CustomError(u'试卷[%s]已经被删除,禁止操作' % instance.name)
         instance = super(ExamPaperSerializer, self).update(instance, validated_data)
         instance.update_count()
+        if not instance.question_total_count:
+            raise CustomError(u'请选择试题!')
+        if instance.passline > instance.question_total_scores:
+           raise CustomError(u'及格线不能大于试题总分!')
         instance.save()
 
         new_count = []

+ 113 - 0
uis/admin/exampaper/details.html

@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>试题管理详情</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../layuiadmin/style/admin.css" media="all">
+    <style type="text/css">
+        .title {
+            width: 140px;
+            background: #efefef;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+
+                    <div id="print_div">
+                        <table class="layui-table">
+
+                            <tr>
+                                <td class="title">名称:</td>
+                                <td id="name" class="cell"></td>
+                                <td class="title"></td>
+                                <td class="cell"></td>
+                            </tr>
+
+                            <tr>
+                                <td class="title">科目:</td>
+                                <td id="subject_name" class="cell"></td>
+                                <td class="title">类型:</td>
+                                <td id="type_text" class="cell"></td>
+                            </tr>
+                            <tr>
+                                <td class="title">总分:</td>
+                                <td id="question_total_scores" class="cell"></td>
+                                <td class="title">及格线:</td>
+                                <td id="passline" class="cell"></td>
+                            </tr>
+                            <tr>
+                                <td class="title">添加人:</td>
+                                <td id="create_user_text" class="cell"></td>
+                                <td class="title">添加时间:</td>
+                                <td id="create_time" class="cell"></td>
+                            </tr>
+                            <tr id="id_analysis">
+                                <td class="title">单选题:</td>
+                                <td colspan="3" id="single" class="cell"></td>
+                            </tr>
+                            <tr id="id_analysis">
+                                <td class="title">多选题:</td>
+                                <td colspan="3" id="multiple" class="cell"></td>
+                            </tr>
+                            <tr id="id_analysis">
+                                <td class="title">判断题:</td>
+                                <td colspan="3" id="judgment" class="cell"></td>
+                            </tr>
+                            <tr id="id_analysis">
+                                <td class="title">填空题:</td>
+                                <td colspan="3" id="fill" class="cell"></td>
+                            </tr>
+
+                            <tr id="id_analysis">
+                                <td class="title">备注:</td>
+                                <td colspan="3" id="desc" class="cell"></td>
+                            </tr>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js?t=1"></script>
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'table'], function () {
+        var $ = layui.$;
+        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        $('.cell').each(function (index, element) {
+            element.innerHTML += (editdata[element.id] || '')
+        });
+        var single = '共' + editdata.single_total_count + '题,每题' + editdata.single_scores + '分,简单' + editdata.single_simple_count + '题,' +
+            '中等' + editdata.single_mid_count + '题,困难' + editdata.single_hard_count + '题';
+        var multiple = '共' + editdata.multiple_total_count + '题,每题' + editdata.multiple_scores + '分,简单' + editdata.multiple_simple_count + '题,' +
+            '中等' + editdata.multiple_mid_count + '题,困难' + editdata.multiple_hard_count + '题';
+        var judgment = '共' + editdata.judgment_total_count + '题,每题' + editdata.judgment_scores + '分,简单' + editdata.judgment_simple_count + '题,' +
+            '中等' + editdata.judgment_mid_count + '题,困难' + editdata.judgment_hard_count + '题';
+        var fill = '共' + editdata.fill_total_count + '题,每题' + editdata.fill_scores + '分,简单' + editdata.fill_simple_count + '题,' +
+            '中等' + editdata.fill_mid_count + '题,困难' + editdata.fill_hard_count + '题';
+
+        $('#single').html(single);
+        $('#multiple').html(multiple);
+        $('#judgment').html(judgment);
+        $('#fill').html(fill);
+
+    });
+</script>
+</body>
+</html>

+ 20 - 16
uis/admin/exampaper/edit.html

@@ -56,21 +56,21 @@
                         <div class="layui-inline" style="width: 85%">
                             每题
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="single_scores" autocomplete="off" class="layui-input">
+                                <input type="text" lay-verify="intGtz" name="single_scores" autocomplete="off" class="layui-input">
                               </div>
                             ,简单
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="single_simple_count" autocomplete="off" class="layui-input single">
+                                <input type="text" lay-verify="intGtz" name="single_simple_count" autocomplete="off" class="layui-input single">
                               </div>
 
                             ,中等
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="single_mid_count" autocomplete="off" class="layui-input single">
+                                <input type="text" lay-verify="intGtz" name="single_mid_count" autocomplete="off" class="layui-input single">
                               </div>
                             ,困难
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="single_hard_count" autocomplete="off" class="layui-input single">
+                                <input type="text" lay-verify="intGtz" name="single_hard_count" autocomplete="off" class="layui-input single">
                               </div>
                             <div class="layui-inline" style="width: 10%">
                                 <label id="id_single_total_count" class="layui-form-label">共&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;题</label>
@@ -85,21 +85,21 @@
                         <div class="layui-inline" style="width: 85%">
                             每题
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="multiple_scores" autocomplete="off" class="layui-input">
+                                <input type="text" lay-verify="intGtz" name="multiple_scores" autocomplete="off" class="layui-input">
                               </div>
                             ,简单
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="multiple_simple_count" autocomplete="off" class="layui-input multiple">
+                                <input type="text" lay-verify="intGtz" name="multiple_simple_count" autocomplete="off" class="layui-input multiple">
                               </div>
 
                             ,中等
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="multiple_mid_count" autocomplete="off" class="layui-input multiple">
+                                <input type="text" lay-verify="intGtz" name="multiple_mid_count" autocomplete="off" class="layui-input multiple">
                               </div>
                             ,困难
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="multiple_hard_count" autocomplete="off" class="layui-input multiple">
+                                <input type="text" lay-verify="intGtz" name="multiple_hard_count" autocomplete="off" class="layui-input multiple">
                               </div>
                             <div class="layui-inline" style="width: 10%">
                                 <label id="id_multiple_total_count" class="layui-form-label">共&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;题</label>
@@ -114,21 +114,21 @@
                         <div class="layui-inline" style="width: 85%">
                             每题
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="judgment_scores" autocomplete="off" class="layui-input">
+                                <input type="text" lay-verify="intGtz" name="judgment_scores" autocomplete="off" class="layui-input">
                               </div>
                             ,简单
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="judgment_simple_count" autocomplete="off" class="layui-input judgment">
+                                <input type="text" lay-verify="intGtz" name="judgment_simple_count" autocomplete="off" class="layui-input judgment">
                               </div>
 
                             ,中等
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="judgment_mid_count" autocomplete="off" class="layui-input judgment">
+                                <input type="text" lay-verify="intGtz" name="judgment_mid_count" autocomplete="off" class="layui-input judgment">
                               </div>
                             ,困难
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="judgment_hard_count" autocomplete="off" class="layui-input judgment">
+                                <input type="text" lay-verify="intGtz" name="judgment_hard_count" autocomplete="off" class="layui-input judgment">
                               </div>
                             <div class="layui-inline" style="width: 10%">
                                 <label id="id_judgment_total_count" class="layui-form-label">共&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;题</label>
@@ -143,21 +143,21 @@
                         <div class="layui-inline" style="width: 85%">
                             每题
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="fill_scores" autocomplete="off" class="layui-input">
+                                <input type="text" lay-verify="intGtz" name="fill_scores" autocomplete="off" class="layui-input">
                               </div>
                             ,简单
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="fill_simple_count" autocomplete="off" class="layui-input fill">
+                                <input type="text" lay-verify="intGtz" name="fill_simple_count" autocomplete="off" class="layui-input fill">
                               </div>
 
                             ,中等
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="fill_mid_count" autocomplete="off" class="layui-input fill">
+                                <input type="text" lay-verify="intGtz" name="fill_mid_count" autocomplete="off" class="layui-input fill">
                               </div>
                             ,困难
                             <div class="layui-inline" style="width: 10%">
-                                <input type="text" lay-verify="intGeZ" name="fill_hard_count" autocomplete="off" class="layui-input fill">
+                                <input type="text" lay-verify="intGtz" name="fill_hard_count" autocomplete="off" class="layui-input fill">
                               </div>
                             <div class="layui-inline" style="width: 10%">
                                 <label id="id_fill_total_count" class="layui-form-label">共&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;题</label>
@@ -213,6 +213,10 @@
             if (id) {
                 var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
                 form.val("component-form-element", editdata);
+                $('#id_fill_total_count').html('共&nbsp;&nbsp;&nbsp;&nbsp;' + editdata.fill_total_count + '&nbsp;&nbsp;&nbsp;&nbsp;题')
+                $('#id_judgment_total_count').html('共&nbsp;&nbsp;&nbsp;&nbsp;' + editdata.judgment_total_count + '&nbsp;&nbsp;&nbsp;&nbsp;题')
+                $('#id_multiple_total_count').html('共&nbsp;&nbsp;&nbsp;&nbsp;' + editdata.multiple_total_count + '&nbsp;&nbsp;&nbsp;&nbsp;题')
+                $('#id_single_total_count').html('共&nbsp;&nbsp;&nbsp;&nbsp;' + editdata.single_total_count + '&nbsp;&nbsp;&nbsp;&nbsp;题')
             }
         };
 

+ 35 - 32
uis/admin/exampaper/index.html

@@ -64,7 +64,7 @@
                 <div class="layui-col-md12">
                     <div class="LAY-btns" style="margin-bottom: 10px;">
                         <div style="float: left">
-                            <button class="layui-btn layui-btn-sm" id="exam_question_add">
+                            <button class="layui-btn layui-btn-sm" id="exampaper_add">
                                 <i class="layui-icon layui-icon-add-circle"></i>添加
                             </button>
                         </div>
@@ -75,7 +75,7 @@
                                 </button>
                             </div>
                             <div class="seach_items">
-                                <input type="text" name="title" autocomplete="off" class="layui-input" placeholder="名称关键字"/>
+                                <input type="text" name="name" autocomplete="off" class="layui-input" placeholder="名称关键字"/>
                             </div>
                             <div class="seach_items">
                                 <select name="type">
@@ -86,30 +86,27 @@
                                 </select>
                             </div>
                             <div class="seach_items">
-                                <select name="subject">
+                                <select id="id_subject" name="subject">
                                     <option value="" selected>请选择科目</option>
-                                    <option value="0">科目1</option>
-                                    <option value="1">科目2</option>
-                                    <option value="2">科目3</option>
                                 </select>
                             </div>
 
                         </form>
                         <div style="clear: both;"></div>
                     </div>
-                    <table class="layui-hide" id="exam_question_datagrid" lay-filter="exam_question-operate"></table>
+                    <table class="layui-hide" id="exampaper_datagrid" lay-filter="exam_question-operate"></table>
 
                     <script type="text/html" id="exam_question-operate-bar">
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="exam_question_detail"
+                            <a class="layui-btn layui-btn-xs" lay-event="exampaper_detail"
                             >查看</a>
                         </div>
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="exam_question_edit"
+                            <a class="layui-btn layui-btn-xs" lay-event="exampaper_edit"
                             >修改</a>
                         </div>
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="exam_question_delete"
+                            <a class="layui-btn layui-btn-xs" lay-event="exampaper_delete"
                             >删除</a>
                         </div>
                     </script>
@@ -131,13 +128,27 @@
             , admin = layui.admin
             , form = layui.form;
 
+        admin.req({
+            url: '/admin/subject/dict/',
+            done: function (res) {
+                var subject = res.data.subject;
+                var subject_node = $('#id_subject');
+                for (var i in subject) {
+                    var pid = subject[i].id;
+                    var subject_value = subject[i].name;
+                    subject_node.append("<option value='" + pid + "'>" + subject_value + "</option>");
+                }
+                 form.render();
+            }
+        });
+
         table.render({
-            elem: '#exam_question_datagrid'
+            elem: '#exampaper_datagrid'
             , url: '/admin/exampaper/'
             , cols: [[
                 {title: '编号', type: 'numbers'}
                 , {field: 'name', title: '名称', width: 200}
-                , {field: 'type_text', title: '类型', width: 80}
+                , {field: 'type_text', title: '类型', width: 120}
                 , {field: 'subject_name', title: '科目', width: 120}
                 , {field: 'question_total_scores', title: '总分', width: 80}
                 , {field: 'passline', title: '及格线', width: 80}
@@ -153,7 +164,7 @@
         table.on('tool(exam_question-operate)', function (obj) {
             var data = obj.data;
             table.editdata = data;
-            if (obj.event === 'exam_question_edit') {
+            if (obj.event === 'exampaper_edit') {
                 layer.open({
                     type: 2,
                     title: '修改试卷',
@@ -163,7 +174,7 @@
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (res) {
                             layer.close(index);
-                            table.reload('exam_question_datagrid', {});
+                            table.reload('exampaper_datagrid', {});
                         };
                         layui.submitChild();
                     },
@@ -173,42 +184,34 @@
                     content: 'edit.html?id=' + data.id
                 });
             }
-            else if (obj.event === 'exam_question_delete') {
+            else if (obj.event === 'exampaper_delete') {
                 layer.confirm('确定要删除该试卷吗?', function (index) {
                     layer.close(index);
                     admin.req({
-                        url: '/admin/examquestion/' + data.id + '/'
+                        url: '/admin/exampaper/' + data.id + '/'
                         , type: 'delete'
                         , done: function (res) {
-                            table.reload('exam_question_datagrid', {});
+                            table.reload('exampaper_datagrid', {});
                         }
                     });
                 });
-            } else if (obj.event === 'exam_question_detail') {
+            } else if (obj.event === 'exampaper_detail') {
                 layer.open({
                     type: 2,
                     title: '查看详情',
                     shadeClose: false,
-                    area: ['80%', '80%'],
-                    btn: ['保存', '取消'],
+                    area: ['70%', '65%'],
+                    btn: ['关闭'],
                     yes: function (index, dom) {
-                        layui.onSubmitChild = function (res) {
-                            layer.close(index);
-                            table.reload('exam_question_datagrid', {});
-                        };
-                        layui.submitChild();
-                    },
-                    btn2: function (index, layero) {
                         layer.close(index);//关闭当前按钮
-                        table.reload('exam_question_datagrid', {});
                     },
-                    content: 'uploadDetailImg.html?id=' + data.id + '&type=' + obj.event
+                    content: 'details.html'
                 });
             }
         });
 
         form.on('submit(query-form-element)', function (data) {
-            table.reload('exam_question_datagrid', {
+            table.reload('exampaper_datagrid', {
                 where: data.field
                 , page: {curr: 1}
             });
@@ -216,7 +219,7 @@
             return false
         });
 
-        $('#exam_question_add').on('click', function () {
+        $('#exampaper_add').on('click', function () {
             layer.open({
                 type: 2,
                 title: '添加试卷',
@@ -225,7 +228,7 @@
                 yes: function (index, dom) {
                     layui.onSubmitChild = function (res) {
                         layer.close(index);
-                        table.reload('exam_question_datagrid', {});
+                        table.reload('exampaper_datagrid', {});
                     };
                     layui.submitChild();
                 },