Browse Source

Merge remote-tracking branch 'origin/master'

wushaodong 3 years ago
parent
commit
669cc24210

+ 2 - 1
apps/api/admin/exam/views.py

@@ -93,11 +93,12 @@ class ExamViewSet(CustomModelViewSet):
     @action(methods=['get'], detail=True)
     def examinee(self, request, pk):
         result = []
-        rows = ExamLog.objects.filter(exam_id=pk, delete=False).values('user_id', 'user__username', 'user__department__name')
+        rows = ExamLog.objects.filter(exam_id=pk, delete=False).values('user_id', 'user__username','user__name', 'user__department__name')
         for row in rows:
             item = {
                 'id':row['user_id'],
                 'username': row['user__username'],
+                'name': row['user__name'],
                 'department_text': row['user__department__name'],
             }
             result.append(item)

+ 14 - 0
apps/api/admin/syslog/urls.py

@@ -0,0 +1,14 @@
+# coding=utf-8
+
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+    url(r'', LogViewSet.as_view()),
+]
+
+# router = SimpleRouter()
+# router.register(r'', LogViewSet)
+# urlpatterns += router.urls

+ 18 - 0
apps/api/admin/syslog/views.py

@@ -0,0 +1,18 @@
+# coding=utf-8
+
+from utils.permission import IsAdministrator
+from rest_framework import generics
+from apps.system.models import SysLog
+from apps.system.filters import SysLogFilter
+from apps.system.serializers import SysLogSerializer
+
+
+class LogViewSet(generics.ListAPIView):
+    permission_classes = [IsAdministrator, ]
+    queryset = SysLog.objects.filter()
+    serializer_class = SysLogSerializer
+
+    def filter_queryset(self, queryset):
+        f = SysLogFilter(self.request.GET, queryset=queryset)
+        return f.qs
+

+ 1 - 0
apps/api/admin/urls.py

@@ -13,6 +13,7 @@ urlpatterns = [
     url(r'^department/', include('apps.api.admin.department.urls')),
     url(r'^user/', include('apps.api.admin.user.urls')),
     url(r'^subject/', include('apps.api.admin.subject.urls')),
+    url(r'^syslog/', include('apps.api.admin.syslog.urls')),
 
     url(r'^examquestion/', include('apps.api.admin.examquestion.urls')),
     url(r'^exampaper/', include('apps.api.admin.exampaper.urls')),

+ 1 - 1
apps/examination/exam/filters.py

@@ -14,7 +14,7 @@ class ExamFilter(django_filters.FilterSet):
 
 class FormalExamLogFilter(django_filters.FilterSet):
     exam_name = django_filters.CharFilter(field_name="exam__name", lookup_expr="icontains")
-    user_username = django_filters.CharFilter(field_name="user__username", lookup_expr="icontains")
+    user_name = django_filters.CharFilter(field_name="user__name", lookup_expr="icontains")
     exam_subject = django_filters.CharFilter(field_name='exam__subject_id')
     exam_type = django_filters.CharFilter(field_name='exam__type')
 

+ 18 - 3
apps/examination/exam/serializers.py

@@ -7,7 +7,7 @@ from utils.exceptions import CustomError
 class ExamSerializer(serializers.ModelSerializer):
     subject_name = serializers.CharField(source='subject.name', read_only=True)
     type_text = serializers.CharField(source='get_type_display', read_only=True)
-    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
     question_total_scores = serializers.IntegerField(source='exampaper.question_total_scores', read_only=True)
     passline = serializers.IntegerField(source='exampaper.passline', read_only=True)
     exampaper_name = serializers.CharField(source='exampaper.name', read_only=True)
@@ -18,8 +18,11 @@ class ExamSerializer(serializers.ModelSerializer):
         fields = "__all__"
 
     def get_examinee_name(self, obj):
-        examinees = ExamLog.objects.filter(exam=obj, delete=False).values('user__username')
-        examinee_list = [item['user__username'] for item in examinees]
+        examinees = ExamLog.objects.filter(exam=obj, delete=False).values('user__name')
+        examinee_list = []
+        for item in examinees:
+            if item['user__name']:
+                examinee_list.append(item['user__name'])
         if examinee_list:
             return ','.join(examinee_list)
         return ''
@@ -40,6 +43,18 @@ class ExamSerializer(serializers.ModelSerializer):
 class FormalExamLogSerializer(serializers.ModelSerializer):
     exam_name = serializers.CharField(source='exam.name', read_only=True)
     exam_subject_name = serializers.CharField(source='exam.subject.name', read_only=True)
+    user_name = serializers.CharField(source='user.name', read_only=True)
+    user_department = serializers.CharField(source='user.department.name', read_only=True)
+    question_total_scores = serializers.IntegerField(source='exampaper.question_total_scores', read_only=True)
+    passline = serializers.IntegerField(source='exampaper.passline', read_only=True)
+    single_count = serializers.IntegerField(source='exampaper.single_total_count', read_only=True)
+    single_scores = serializers.IntegerField(source='exampaper.single_total_scores', read_only=True)
+    multiple_count = serializers.IntegerField(source='exampaper.multiple_total_count', read_only=True)
+    multiple_scores = serializers.IntegerField(source='exampaper.multiple_total_scores', read_only=True)
+    fill_count = serializers.IntegerField(source='exampaper.fill_total_count', read_only=True)
+    fill_scores = serializers.IntegerField(source='exampaper.fill_total_scores', read_only=True)
+    judgment_count = serializers.IntegerField(source='exampaper.judgment_total_count', read_only=True)
+    judgment_scores = serializers.IntegerField(source='exampaper.judgment_total_scores', read_only=True)
 
     class Meta:
         model = ExamLog

+ 1 - 1
apps/examination/exampaper/serializers.py

@@ -7,7 +7,7 @@ from utils.exceptions import CustomError
 class ExamPaperSerializer(serializers.ModelSerializer):
     subject_name = serializers.CharField(source='subject.name', read_only=True)
     type_text = serializers.CharField(source='get_type_display', read_only=True)
-    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
 
     class Meta:
         model = ExamPaper

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

@@ -9,7 +9,7 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
     subject = serializers.CharField(source='chapter.subject.id', read_only=True)
     subject_text = serializers.CharField(source='chapter.subject.name', read_only=True)
     chapter_text = serializers.CharField(source='chapter.name', read_only=True)
-    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
     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()

+ 1 - 1
apps/knowledge/serializers.py

@@ -8,7 +8,7 @@ class KnowledgeBaseSerializer(serializers.ModelSerializer):
     subject_name = serializers.CharField(source='chapter.subject.name', read_only=True)
     subject = serializers.CharField(source='chapter.subject.id', read_only=True)
     chapter_name = serializers.CharField(source='chapter.name', read_only=True)
-    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
 
     class Meta:
         model = KnowledgeBase

+ 2 - 0
apps/staff/models.py

@@ -66,6 +66,7 @@ class UserManager(BaseUserManager):
         return self.create_user(User.STAFF, username, password, **extra_fields)
 
     def create_superuser(self, username, password, **extra_fields):
+        extra_fields['name'] = username
         u = self.create_administrator(username, password, **extra_fields)
         u.is_active = True
         u.is_superuser = True
@@ -137,6 +138,7 @@ class User(AbstractBaseUser, PermissionsMixin):
     type = models.PositiveSmallIntegerField(verbose_name=u"类型")
     department = models.ForeignKey(Department, verbose_name=u"所属部门", null=True, blank=True, on_delete=models.PROTECT)
     username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)
+    name = models.CharField(verbose_name=u'姓名', max_length=30)
     is_active = models.BooleanField(verbose_name=u'激活', default=True)
     date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, editable=False)
 

+ 6 - 4
apps/staff/serializers.py

@@ -43,7 +43,8 @@ class AdminUserJWTSerializer(JSONWebTokenSerializer):
                 return {
                     'token': jwt_encode_handler(payload),
                     'user_id': user.id,
-                    'username': user.username
+                    'username': user.username,
+                    'name': user.name
                 }
             else:
                 msg = u'账号或者密码错误!'
@@ -81,7 +82,8 @@ class StaffUserJWTSerializer(JSONWebTokenSerializer):
                 return {
                     'token': jwt_encode_handler(payload),
                     'user_id': user.id,
-                    'username': user.username
+                    'username': user.username,
+                    'name': user.name
                 }
             else:
                 msg = u'账号或者密码错误!'
@@ -162,9 +164,9 @@ class UserSerializer(serializers.ModelSerializer):
         if validated_data['password'].strip() == '':
             raise CustomError(u'密码不能为空!')
         if 'type' in validated_data and validated_data['type'] == User.STAFF:
-            user = User.objects.create_staff(validated_data['username'], validated_data['password'], is_active=validated_data['is_active'], department=validated_data['department'])
+            user = User.objects.create_staff(validated_data['username'], validated_data['password'], name=validated_data['name'], is_active=validated_data['is_active'], department=validated_data['department'])
         else:
-            user = User.objects.create_administrator(validated_data['username'], validated_data['password'], is_active=validated_data['is_active'], department=validated_data['department'])
+            user = User.objects.create_administrator(validated_data['username'], validated_data['password'], name=validated_data['name'], is_active=validated_data['is_active'], department=validated_data['department'])
         return user
 
     def update(self, instance, validated_data):

+ 3 - 1
apps/system/filters.py

@@ -9,10 +9,12 @@ from utils.format import clean_datetime_range
 class SysLogFilter(django_filters.FilterSet):
     type = django_filters.ChoiceFilter(choices=SysLog.TYPE_CHOICES, field_name='type')
     create_time = django_filters.DateTimeFromToRangeFilter(field_name='create_time')
+    name = django_filters.CharFilter(field_name="user__name", lookup_expr="icontains")
+    description = django_filters.CharFilter(field_name="description", lookup_expr="icontains")
 
     class Meta:
         model = SysLog
-        fields = ('create_time', 'type', )
+        fields = ('create_time', 'type', 'name', 'description', )
 
     def __init__(self, data=None, *args, **kwargs):
         data = clean_datetime_range(data, 'create_time')

+ 16 - 0
apps/system/serializers.py

@@ -0,0 +1,16 @@
+# coding=utf-8
+
+from rest_framework import serializers
+
+from .models import SysLog
+
+
+class SysLogSerializer(serializers.ModelSerializer):
+    user_name = serializers.CharField(source='user.name', read_only=True)
+    username = serializers.CharField(source='user.username', read_only=True)
+    user_department = serializers.CharField(source='user.department.name', read_only=True)
+    type_text = serializers.CharField(source='get_type_display', read_only=True)
+
+    class Meta:
+        model = SysLog
+        fields = '__all__'

+ 5 - 2
uis/admin/exam/examinee_edit.html

@@ -86,7 +86,8 @@
       ,url: '/admin/user/?type=2'
       ,cols: [[
           {type:'checkbox'}
-        ,{field:'username', title:'姓名'}
+        ,{field:'name', title:'姓名'}
+        ,{field:'username', title:'帐号'}
         ,{field:'department_text', title:'部门'}
       ]]
         ,height: 'full-145'
@@ -105,7 +106,8 @@
 
     var cols = [
         {type:'checkbox'},
-        {field: 'username', title: '姓名'},
+        {field: 'name', title: '姓名'},
+        {field: 'username', title: '帐号'},
         {field: 'department_text', title: '部门'},
     ]
 
@@ -144,6 +146,7 @@
              if(!is_have){
                  oldData.push({
                      id: selectData[i].id,
+                     name: selectData[i].name,
                      username: selectData[i].username,
                      department_text: selectData[i].department_text
                  })

+ 203 - 0
uis/admin/examlog/details.html

@@ -0,0 +1,203 @@
+<!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;
+        }
+        .right_anwer{
+            background-color: green;
+            height: 30px;
+            width: 30px;
+            margin: 5px 5px;
+            border: 1px green;
+            border-radius: 100%;
+            text-align: center;
+            line-height: 30px;
+            float: left;
+            color: white;
+        }
+        .wrong_anwer{
+            background-color: red;
+            height: 30px;
+            width: 30px;
+            margin: 5px 5px;
+            border: 1px red;
+            border-radius: 100%;
+            text-align: center;
+            line-height: 30px;
+            float: left;
+            color: white;
+        }
+        .not_done{
+            background-color: lightgrey;
+            height: 30px;
+            width: 30px;
+            margin: 5px 5px;
+            border: 1px lightgrey;
+            border-radius: 100%;
+            text-align: center;
+            line-height: 30px;
+            float: left;
+            color: white;
+        }
+    </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="exam_name" class="cell"></td>
+                                <td class="title">科目:</td>
+                                <td id="exam_subject_name" class="cell"></td>
+                            </tr>
+
+                            <tr>
+                                <td class="title">考试时间:</td>
+                                <td id="exam_time" class="cell"></td>
+                                <td class="title"></td>
+                                <td class="cell"></td>
+                            </tr>
+                            <tr>
+                                <td class="title">人员姓名:</td>
+                                <td id="user_name" class="cell"></td>
+                                <td class="title">人员部门:</td>
+                                <td id="user_department" class="cell"></td>
+                            </tr>
+                            <tr>
+                                <td class="title">分数:</td>
+                                <td id="scores" class="cell"></td>
+                                <td class="title">排名:</td>
+                                <td id="rank" class="cell"></td>
+                            </tr>
+                             <tr>
+                                <td class="title">交卷时间:</td>
+                                <td id="submit_time" class="cell"></td>
+                                <td class="title">用时:</td>
+                                <td id="use_time" class="cell"></td>
+                            </tr>
+                        </table>
+                    </div>
+                    <div id="print_div">
+                        作答概况
+                        <table class="layui-table">
+                            <tr>
+                                <td class="title">题型</td>
+                                <td class="title">题目数</td>
+                                <td class="title">答对数</td>
+                                <td class="title">总分</td>
+                                <td class="title">得分</td>
+                            </tr>
+                            <tr>
+                                <td>单选题</td>
+                                <td class="cell" id="single_count"></td>
+                                <td class="cell" id="single_answer_count"></td>
+                                <td class="cell" id="single_scores"></td>
+                                <td class="cell" id="single_answer_scores"></td>
+                            </tr>
+                            <tr>
+                                <td>多选题</td>
+                                <td class="cell" id="multiple_count"></td>
+                                <td class="cell" id="multiple_answer_count"></td>
+                                <td class="cell" id="multiple_scores"></td>
+                                <td class="cell" id="multiple_answer_scores"></td>
+                            </tr>
+                            <tr>
+                                <td>填空题</td>
+                                <td class="cell" id="fill_count"></td>
+                                <td class="cell" id="fill_answer_count"></td>
+                                <td class="cell" id="fill_scores"></td>
+                                <td class="cell" id="fill_answer_scores"></td>
+                            </tr>
+                            <tr>
+                                <td>判断题</td>
+                                <td class="cell" id="judgment_count"></td>
+                                <td class="cell" id="judgment_answer_count"></td>
+                                <td class="cell" id="judgment_scores"></td>
+                                <td class="cell" id="judgment_answer_scores"></td>
+                            </tr>
+
+
+                        </table>
+                    </div>
+                    <div id="print_div">
+                        作答详情
+                        <span class="layui-badge-dot layui-bg-green"></span>正确
+                        <span class="layui-badge-dot layui-bg-red"></span>错误
+                          <span class="layui-badge-dot layui-bg-gray"></span>未做
+
+                        <div style="margin-top: 10px" id="answer_detail">
+
+                        </div>
+                    </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 table = layui.table
+        , admin = layui.admin;
+
+        var id = layui.view.getParameterByName('id');
+
+        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        $('.cell').each(function (index, element) {
+            element.innerHTML += (editdata[element.id] || '')
+        });
+
+        admin.req({
+            url: '/admin/exam/examlog/' + id + '/answer_log/',
+            done: function (res) {
+                if (res.code !== 0) {
+                    layer.msg(res.msg);
+                } else {
+                    for (var i=0; i<res.data.length; i++){
+                        var txt = '';
+                        var num = i+1;
+                        if (res.data[i].status === 1){
+                            txt = '<span class="right_anwser">'+ num +'</span>'
+                        }else if(res.data[i].status === 2){
+                            txt = '<span class="wrong_anwer">' + num + '</span>'
+                        }else if(res.data[i].status === 3){
+                            txt = '<span class="not_done">' + num + '</span>'
+                        }
+
+                        $('#answer_detail').append(txt)
+                    }
+                }
+
+
+            }
+        });
+    });
+</script>
+</body>
+</html>

+ 165 - 96
uis/admin/examlog/index.html

@@ -1,118 +1,187 @@
 <!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">
-        .input {
-            width: 70%;
-            border-radius: 2px;
-            height: 30px;
-            border-width: 1px;
-            border-color: lightgray;
-            border-style: solid;
-            background-color: white;
-            padding-left: 3px;
-            margin-top: 20px;
+    <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=agent-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">
+        .seach_items {
+            float: right;
+            margin-left: 10px;
+        }
+    </style>
+    <style type="text/css">
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 40px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
+
+        .tableContent {
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
         }
     </style>
 </head>
 <body>
 
-  <div class="layui-fluid">
+<div class="layui-fluid">
     <div class="layui-card">
         <div class="layui-card-body" pad15>
-            <form class="layui-form" action="" lay-filter="component-form-element">
-              <div class="layui-row layui-col-space10 layui-form-item">
-                <div>
-                  <label><font color='red' size="4">*</font>商品提成比例:</label>
-                  <input type="text" name="package_percentage" lay-verify="required|numberGtZ" autocomplete="off" class="input">
-                  <label><font color='red' size="4" style="font-size: small;">佣金=商品优惠价*提成比例</font></label>
-                </div>
-                <div>
-                    <label ><font color='red' size="4">*</font>整车提成比例:</label>
-                    <input type="text" name="vehicle_percentage" lay-verify="required|numberGtZ" autocomplete="off" class="input">
-                    <label><font color='red' style="font-size: small;">佣金=车型定金*提成比例</font></label>
-                </div>
-              <div class="layui-form-item">
-                <div class="layui-input-block">
-                  <button class="layui-btn" lay-submit lay-filter="component-form-element">保存</button>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <div class="LAY-btns" style="margin-bottom: 10px;">
+                        <form class="layui-form" lay-filter="query-form-element">
+                            <div class="seach_items">
+                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
+                                        class="layui-icon layui-icon-search"></i>查询
+                                </button>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="exam_name" autocomplete="off" class="layui-input" placeholder="考试名称关键字"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="user_name" autocomplete="off" class="layui-input" placeholder="人员姓名关键字"/>
+                            </div>
+                            <div class="seach_items">
+                                <select name="exam_type">
+                                    <option value="" selected>试卷类型</option>
+                                    <option value="1">固定试卷</option>
+                                    <option value="2">随机试卷</option>
+                                </select>
+                            </div>
+                            <div class="seach_items">
+                                <select id="id_subject" name="exam_subject">
+                                    <option value="" selected>请选择科目</option>
+                                </select>
+                            </div>
+
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <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="examlog_detail"
+                            >查看</a>
+                        </div>
+                    </script>
                 </div>
-              </div>
-              </div>
-            </form>
-          </div>
+            </div>
         </div>
-      </div>
+    </div>
+</div>
 
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'table', 'form', 'admin',], function () {
+        var $ = layui.$;
+        var table = layui.table
+            , admin = layui.admin
+            , form = layui.form;
 
-  <script src="../../layuiadmin/layui/layui.js"></script>
-  <script>
-  layui.config({
-    base: '../../../layuiadmin/' //静态资源所在路径
-  }).extend({
-    index: 'lib/index' //主入口模块
-  }).use(['index', 'form', 'utils'], function(){
-    var $ = layui.$
-    ,admin = layui.admin
-    ,element = layui.element
-    ,form = layui.form;
-    form.render(null, 'component-form-element');
-    element.render('breadcrumb', 'breadcrumb');
-
-    admin.req({
-        url: '/tenant/config/',
-        done: function (res) {
-            var data = res.data;
-            var edit_data = {};
-            for(var i in data) {
-                if (data[i].property === 'package_percentage'){
-                    edit_data['package_percentage'] = data[i].value;
-                }else if (data[i].property === 'vehicle_percentage') {
-                    edit_data['vehicle_percentage'] = data[i].value;
+        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();
             }
-            form.val("component-form-element", edit_data);
-            form.render();
-        }
-    });
+        });
 
-    form.on('submit(component-form-element)', function(data){
-      var save_data = [];
-      if (data.field['package_percentage']){
-          save_data.push({key: 'package_percentage', value: data.field['package_percentage']})
-      }
-      if (data.field['vehicle_percentage']){
-          save_data.push({key: 'vehicle_percentage', value: data.field['vehicle_percentage']})
-      }
-      admin.req({
-        url: '/tenant/config/'
-        ,data: {data: JSON.stringify(save_data)}
-        ,type: 'post'
-        ,done: function(res){
-            layer.open({
-                 type: 1
-                ,content: '<div style="padding: 20px 100px;">保存成功</div>'
-                ,btn: '关闭'
-                ,btnAlign: 'c' //按钮居中
-                ,shade: 0 //不显示遮罩
-                ,yes: function(){
-                  layer.closeAll();
-                  //admin.exit();
-                }
-            });
-        }
-      });
+        table.render({
+            elem: '#exampaper_datagrid'
+            , url: '/admin/exam/examlog/'
+            , cols: [[
+                {title: '编号', type: 'numbers'}
+                , {field: 'exam_name', title: '考试名称', width: 200}
+                , {field: 'exam_subject_name', title: '科目', width: 150}
+                , {field: 'exam_time', title: '考试时间', width: 165}
+                , {field: 'user_name', title: '人员姓名', width: 120}
+                , {field: 'user_department', title: '人员部门', width: 120}
+                , {field: 'question_total_scores', title: '总分', width: 80}
+                , {field: 'passline', title: '及格线', width: 80}
+                , {field: 'scores', title: '分数', width: 80}
+                , {field: 'rank', title: '排名', width: 80}
+                , {field: 'submit_time', title: '交卷时间', width: 165}
+                , {field: 'use_time', title: '用时', width: 120}
+                , {title: '操作', width: 80, align: 'center', fixed: 'right', toolbar: '#exam_question-operate-bar'}
+            ]]
+            , page: true
+            , height: 'full-108'
+        });
 
-      return false;
+        //监听工具条
+        table.on('tool(exam_question-operate)', function (obj) {
+            var data = obj.data;
+            table.editdata = data;
+            if (obj.event === 'examlog_detail') {
+                layer.open({
+                    type: 2,
+                    title: '查看详情',
+                    shadeClose: false,
+                    area: ['70%', '80%'],
+                    btn: ['关闭'],
+                    yes: function (index, dom) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'details.html?id=' + data.id
+                });
+            }
+        });
+
+        form.on('submit(query-form-element)', function (data) {
+            table.reload('exampaper_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
     });
 
-  });
-  </script>
+</script>
 </body>
 </html>

+ 2 - 2
uis/admin/index.html

@@ -102,7 +102,7 @@
                   <a lay-href="exam/index.html">考试管理</a>
                 </dd>
                 <dd data-name="nav">
-                  <a lay-href="applet/index.html">考试记录</a>
+                  <a lay-href="examlog/index.html">考试记录</a>
                 </dd>
               </dl>
             </li>
@@ -125,7 +125,7 @@
                   <a lay-href="applet/index.html">权限管理</a>
                 </dd>-->
                 <dd data-name="nav">
-                  <a lay-href="third_party/index.html">系统日志</a>
+                  <a lay-href="log/index.html">系统日志</a>
                 </dd>
               </dl>
             </li>

+ 148 - 0
uis/admin/log/index.html

@@ -0,0 +1,148 @@
+<!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=agent-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">
+        .seach_items {
+            float: right;
+            margin-left: 10px;
+        }
+    </style>
+    <style type="text/css">
+        .LAY-btns .layui-nav {
+            padding-left: 0;
+            padding-right: 10px;
+            top: -4px;
+            margin: 0 10px;
+            border: 0;
+            background-color: #009688;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-item {
+            line-height: 40px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child {
+            top: 34px;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-bar {
+            display: none;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
+            color: #333;
+            background-color: #fff;
+        }
+
+        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
+            background-color: #f2f2f2;
+            color: #000;
+        }
+
+        .tableContent {
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            flex-direction: row;
+        }
+    </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 class="LAY-btns" style="margin-bottom: 10px;">
+                        <form class="layui-form" lay-filter="query-form-element">
+                            <div class="seach_items">
+                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
+                                        class="layui-icon layui-icon-search"></i>查询
+                                </button>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="description" autocomplete="off" class="layui-input" placeholder="内容关键字"/>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" name="name" autocomplete="off" class="layui-input" placeholder="姓名关键字"/>
+                            </div>
+                            <div class="seach_items">
+                                <select name="type">
+                                    <option value="" selected>操作类型</option>
+                                    <option value="1">添加</option>
+                                    <option value="2">修改</option>
+                                    <option value="3">删除</option>
+                                </select>
+                            </div>
+                            <div class="seach_items">
+                                <input type="text" class="layui-input" name="create_time" id="create_time" placeholder=" - ">
+                            </div>
+
+                        </form>
+                        <div style="clear: both;"></div>
+                    </div>
+                    <table class="layui-hide" id="log_datagrid"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'table', 'form', 'admin', 'laydate', ], function () {
+        var $ = layui.$;
+        var table = layui.table
+            ,laydate = layui.laydate
+            , admin = layui.admin
+            , form = layui.form;
+
+        laydate.render({
+        elem: '#create_time'
+        ,range: true
+    });
+
+        table.render({
+            elem: '#log_datagrid'
+            , url: '/admin/syslog/'
+            , cols: [[
+                {title: '编号', type: 'numbers'}
+                , {field: 'username', title: '用户名', width: 120}
+                , {field: 'user_name', title: '姓名', width: 120}
+                , {field: 'user_department', title: '部门', width: 120}
+                , {field: 'type_text', title: '操作类别', width: 120}
+                , {field: 'create_time', title: '时间', width: 160}
+                , {field: 'description', title: '操作内容'}
+            ]]
+            , page: true
+            , height: 'full-108'
+        });
+
+
+        form.on('submit(query-form-element)', function (data) {
+            table.reload('log_datagrid', {
+                where: data.field
+                , page: {curr: 1}
+            });
+            layer.closeAll();
+            return false
+        });
+
+    });
+
+</script>
+</body>
+</html>

+ 0 - 118
uis/admin/syslog/index.html

@@ -1,118 +0,0 @@
-<!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">
-        .input {
-            width: 70%;
-            border-radius: 2px;
-            height: 30px;
-            border-width: 1px;
-            border-color: lightgray;
-            border-style: solid;
-            background-color: white;
-            padding-left: 3px;
-            margin-top: 20px;
-        }
-    </style>
-</head>
-<body>
-
-  <div class="layui-fluid">
-    <div class="layui-card">
-        <div class="layui-card-body" pad15>
-            <form class="layui-form" action="" lay-filter="component-form-element">
-              <div class="layui-row layui-col-space10 layui-form-item">
-                <div>
-                  <label><font color='red' size="4">*</font>商品提成比例:</label>
-                  <input type="text" name="package_percentage" lay-verify="required|numberGtZ" autocomplete="off" class="input">
-                  <label><font color='red' size="4" style="font-size: small;">佣金=商品优惠价*提成比例</font></label>
-                </div>
-                <div>
-                    <label ><font color='red' size="4">*</font>整车提成比例:</label>
-                    <input type="text" name="vehicle_percentage" lay-verify="required|numberGtZ" autocomplete="off" class="input">
-                    <label><font color='red' style="font-size: small;">佣金=车型定金*提成比例</font></label>
-                </div>
-              <div class="layui-form-item">
-                <div class="layui-input-block">
-                  <button class="layui-btn" lay-submit lay-filter="component-form-element">保存</button>
-                </div>
-              </div>
-              </div>
-            </form>
-          </div>
-        </div>
-      </div>
-
-
-  <script src="../../layuiadmin/layui/layui.js"></script>
-  <script>
-  layui.config({
-    base: '../../../layuiadmin/' //静态资源所在路径
-  }).extend({
-    index: 'lib/index' //主入口模块
-  }).use(['index', 'form', 'utils'], function(){
-    var $ = layui.$
-    ,admin = layui.admin
-    ,element = layui.element
-    ,form = layui.form;
-    form.render(null, 'component-form-element');
-    element.render('breadcrumb', 'breadcrumb');
-
-    admin.req({
-        url: '/tenant/config/',
-        done: function (res) {
-            var data = res.data;
-            var edit_data = {};
-            for(var i in data) {
-                if (data[i].property === 'package_percentage'){
-                    edit_data['package_percentage'] = data[i].value;
-                }else if (data[i].property === 'vehicle_percentage') {
-                    edit_data['vehicle_percentage'] = data[i].value;
-                }
-            }
-            form.val("component-form-element", edit_data);
-            form.render();
-        }
-    });
-
-    form.on('submit(component-form-element)', function(data){
-      var save_data = [];
-      if (data.field['package_percentage']){
-          save_data.push({key: 'package_percentage', value: data.field['package_percentage']})
-      }
-      if (data.field['vehicle_percentage']){
-          save_data.push({key: 'vehicle_percentage', value: data.field['vehicle_percentage']})
-      }
-      admin.req({
-        url: '/tenant/config/'
-        ,data: {data: JSON.stringify(save_data)}
-        ,type: 'post'
-        ,done: function(res){
-            layer.open({
-                 type: 1
-                ,content: '<div style="padding: 20px 100px;">保存成功</div>'
-                ,btn: '关闭'
-                ,btnAlign: 'c' //按钮居中
-                ,shade: 0 //不显示遮罩
-                ,yes: function(){
-                  layer.closeAll();
-                  //admin.exit();
-                }
-            });
-        }
-      });
-
-      return false;
-    });
-
-  });
-  </script>
-</body>
-</html>

+ 7 - 0
uis/admin/user/edit.html

@@ -33,6 +33,13 @@
                   </div>
                 </div>
 
+                  <div class="layui-col-lg6">
+                  <label class="layui-form-label"><font color='red' size="4">*</font>姓名:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="name" lay-verify="required" placeholder="请输入姓名" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
                   <div class="layui-col-lg6">
                   <label class="layui-form-label"><font color='red' size="4">*</font>账号:</label>
                   <div class="layui-input-block">

+ 3 - 2
uis/admin/user/index.html

@@ -92,10 +92,11 @@
       elem: '#datagrid'
       ,url: '/admin/user/'
       ,cols: [[
-        {field:'username', title:'登录账号',width: 200}
+        {field:'name', title:'姓名',width: 100}
+        ,{field:'username', title:'登录账号',width: 200}
         ,{field:'department_text', title:'所属部门', width:300}
         ,{field:'type_text', title:'类型', width:90}
-        ,{field:'status_text', title:'状态', width:90}
+        ,{field:'status_text', title:'启用', width:90}
         ,{width:80, align:'left',title: '操作', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,page: true