Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

liu tao 3 жил өмнө
parent
commit
f3c421ac58

+ 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')),

+ 66 - 90
apps/api/staff/practise/views.py

@@ -62,78 +62,77 @@ class PractiseLogViewSet(CustomModelViewSet):
         now_practise = request.data.get('now_practise')  # 当前提交的练习题。第一题或继续答题时,该参数为空
         answers = json.loads(request.data.get('answers'))  # 答案, 第一题或继续答题时,该参数为空
         next_number = int(request.data.get('next_number')) or 0  # 下一题序号, 第一题提交为空
-        #  next_type = int(request.data.get('next_type'))  # 下一题题型,默认1为单选题
-        button_type = request.data.get('button_type')  #  上一题、下一题按钮类型,next下一题,previous上一题
         next_practise = request.data.get('next_practise')  #  下一题id,首次加载第一题,传空
         try:
             with transaction.atomic():
                 instance = self.get_object()
                 # 点击下一题,保存、判断当前习题答案
-                if now_practise and button_type == 'next':
-                    if len(answers) == 0:
-                        raise CustomError('请选择该题的答案!')
+                if now_practise:
                     now_question = ExamQuestion.objects.filter(id=now_practise).first()
                     if not now_question:
                         raise CustomError('提交的习题有误,请刷新重试!')
-                    answer_log, create = PractiseAnswerLog.objects.get_or_create(main=instance, question=now_question,
-                                                                  status=PractiseAnswerLog.WRONG)
-                    if now_question.type == ExamQuestion.SINGLE:
-                        # 单选
-                        if len(answers) != 1:
-                            raise CustomError(u'请提交一个答案!')
-                        answer = answers[0]
-                        PractiseAnswerOptionLog.objects.create(main=answer_log, option_id=answer)
-                        right = ExamQuestionOption.objects.filter(main=now_question, id=answer, right=True, )
-                        if right:
-                            instance.right_count += 1
-                            answer_log.status = PractiseAnswerLog.RIGHT
+                    if len(answers) > 0:
+                        answer_log, create = PractiseAnswerLog.objects.get_or_create(main=instance, question=now_question,)
+                        if now_question.type == ExamQuestion.SINGLE:
+                            # 单选
+                            PractiseAnswerOptionLog.objects.filter(main=answer_log).delete()
+                            answer = answers[0]
+                            PractiseAnswerOptionLog.objects.create(main=answer_log, option_id=answer)
+                            right = ExamQuestionOption.objects.filter(main=now_question, id=answer, right=True, delete=False )
+                            if right:
+                                instance.right_count += 1
+                                answer_log.status = PractiseAnswerLog.RIGHT
+                            else:
+                                answer_log.status = PractiseAnswerLog.WRONG
+                                instance.wrong_count += 1
+                        elif now_question.type == ExamQuestion.MULTIPLE:
+                            # 多选
+                            answers.sort()
+                            PractiseAnswerOptionLog.objects.filter(main=answer_log).delete()
+                            for a in answers:
+                                PractiseAnswerOptionLog.objects.create(main=answer_log, option_id=a)
+                            right = ExamQuestionOption.objects.filter(main=now_question, right=True,
+                                                                      delete=False).values_list('id', flat=True)
+                            list(right).sort()
+                            if answers == right:
+                                answer_log.status = PractiseAnswerLog.RIGHT
+                                instance.right_count += 1
+                            else:
+                                answer_log.status = PractiseAnswerLog.WRONG
+                                instance.wrong_count += 1
+                        elif now_question.type == ExamQuestion.FILL:
+                            # 填空
+                            answers_len = len(answers)
+                            right = 1
+                            PractiseAnswerFillLog.objects.filter(main=answer_log).delete()
+                            for a in range(0, answers_len):
+                                PractiseAnswerFillLog.objects.create(main=answer_log, content=answers[a], order=a+1)
+                                right_answer = ExamQuestionFill.objects.filter(main=now_question, content=answers[a], order=a+1)
+                                if not right_answer:
+                                    # 有一个填空错误,整题错误
+                                    right = 0
+                            if right:
+                                answer_log.status = PractiseAnswerLog.RIGHT
+                                instance.right_count += 1
+                            else:
+                                answer_log.status = PractiseAnswerLog.WRONG
+                                instance.wrong_count += 1
                         else:
-                            instance.wrong_count += 1
-                    elif now_question.type == ExamQuestion.MULTIPLE:
-                        # 多选
-                        if len(answers) <= 1:
-                            raise CustomError(u'请提交两个以上答案!')
-                        answers.sort()
-                        for a in answers:
-                            PractiseAnswerOptionLog.objects.create(main=answer_log, option_id=a)
-                        right = ExamQuestionOption.objects.filter(main=now_question, right=True,
-                                                                  delete=False).values_list('id', flat=True)
-                        right.sort()
-                        if answers == right:
-                            answer_log.status = PractiseAnswerLog.RIGHT
-                            instance.right_count += 1
-                        else:
-                            instance.wrong_count += 1
-                    elif now_question.type == ExamQuestion.FILL:
-                        # 填空
-                        answers_len = len(answers)
-                        right = 1
-                        for a in range(1, answers_len):
-                            PractiseAnswerFillLog.objects.create(main=answer_log, content=answers[a], order=a)
-                            right_answer = ExamQuestionFill.objects.filter(main=now_question, content=answers[a], order=a)
-                            if not right_answer:
-                                # 有一个填空错误,整题错误
-                                right = 0
-                        if right:
-                            answer_log.status = PractiseAnswerLog.RIGHT
-                            instance.right_count += 1
-                        else:
-                            instance.wrong_count += 1
-                    else:
-                        # 判断
-                        if now_question.judgment == (answers[0] == 1):
-                            answer_log.status = PractiseAnswerLog.RIGHT
-                            instance.right_count += 1
-                        else:
-                            instance.wrong_count += 1
-                    instance.total_count += 1
-                    # 第一题
-                    if next_number == 1:
-                        instance.begin_answer = answer_log
-                    instance.end_answer = answer_log
-                    instance.submit_time = timezone.now()
-                    instance.save()
-                    answer_log.save()
+                            # 判断
+                            if now_question.judgment == (answers[0] == 1):
+                                answer_log.status = PractiseAnswerLog.RIGHT
+                                instance.right_count += 1
+                            else:
+                                answer_log.status = PractiseAnswerLog.WRONG
+                                instance.wrong_count += 1
+                        instance.total_count += 1
+                        # 第一题
+                        if not instance.begin_answer:
+                            instance.begin_answer = answer_log
+                        instance.end_answer = answer_log
+                        instance.submit_time = timezone.now()
+                        instance.save()
+                        answer_log.save()
 
                 question_data = {}
                 if instance.type == PractiseLog.SUBJECT:
@@ -144,35 +143,12 @@ class PractiseLogViewSet(CustomModelViewSet):
 
                 # 返回下一题
                 if next_practise:
-                    # 循环查询4个题型的试题,只到查询到试题
-                    # question = None
-                    # while not question and next_type <= ExamQuestion.JUDGMENT:
-                    #     question = questions.filter(type=int(next_type))[next_number - 1:next_number].first()
-                    #     if question:
-                    #         break
-                    #     next_type += 1
-                    #     next_number = 1
                     question = questions.filter(id=next_practise).first()
                 else:
+                    # 首次加载,选择第一个题
                     question = questions.filter().first()
 
                 if question:
-                        # 查询到下一题,返回题目和答案
-                        # 根据下一题,查询下下一题类型
-                        # next_question = None
-                        # while not next_question and next_type <= ExamQuestion.JUDGMENT:
-                        #     next_question = questions.filter(type=int(next_type))[next_number:next_number + 1].first()
-                        #     if next_question:
-                        #         if next_number == 0:
-                        #             next_number = 1
-                        #         break
-                        #     next_type += 1
-                        #     next_number = 0
-                        # next_question = questions.filter()[next_number:next_number + 1]
-                        # if next_question:
-                        #     next_number += 1
-                        # else:
-                        #     next_number = 0
                         question_data = {
                             'id': question.id,
                             'title': question.title,
@@ -185,12 +161,12 @@ class PractiseLogViewSet(CustomModelViewSet):
                             item1 = {
                                 'id': 1,
                                 'content': '正确',
-                                'answer': True if answer_log.status == PractiseAnswerLog.RIGHT else False
+                                'answer': True if answer_log and answer_log.status == PractiseAnswerLog.RIGHT else False
                             }
                             item0 = {
                                 'id': 0,
                                 'content': '错误',
-                                'answer': True if answer_log.status == PractiseAnswerLog.WRONG else False
+                                'answer': True if answer_log and answer_log.status == PractiseAnswerLog.WRONG else False
                             }
                             question_data['option'].append(item1)
                             question_data['option'].append(item0)
@@ -248,7 +224,7 @@ class PractiseLogViewSet(CustomModelViewSet):
                     )
                 # 判断题
                 judgment_questions_list = []
-                for judgment in questions.filter(type=ExamQuestion.MULTIPLE):
+                for judgment in questions.filter(type=ExamQuestion.JUDGMENT):
                     answer_log = PractiseAnswerLog.objects.filter(main=instance, question_id=judgment)
                     judgment_questions_list.append(
                         {

+ 10 - 8
apps/examination/examquestion/serializers.py

@@ -4,6 +4,7 @@ from rest_framework import serializers
 from utils.exceptions import CustomError
 from .models import *
 
+
 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)
@@ -15,9 +16,9 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
     items = serializers.SerializerMethodField()
 
     def get_items(self, obj):
-        if obj.type == ExamQuestion.SINGLE or obj.type == ExamQuestion.MULTIPLE:
+        if obj.type <= ExamQuestion.MULTIPLE:
             rows = ExamQuestionOption.objects.filter(main=obj, delete=False)
-            return ExamQuestionOptionSerializer(rows,many=True).data
+            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
@@ -39,6 +40,7 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
         validated_data['create_user'] = self.context['request'].user
         instance = super(ExamQuestionSerializer, self).create(validated_data)
         rows = json.loads(self.initial_data['rows'])
+
         for row in rows:
             if not row['content']:
                 raise CustomError('答案不能为空,请填写答案!')
@@ -52,7 +54,7 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
                 ExamQuestionFill.objects.create(
                     main=instance,
                     content=row['content'],
-                    order=row['order'],
+                    order=row['order'] + 1,
                 )
         return instance
 
@@ -62,10 +64,11 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
         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)
+        ExamQuestionFill.objects.filter(main=instance).update(delete=True)
         for row in rows:
             if not row['content']:
                 raise CustomError('答案不能为空,请填写答案!')
-            if instance.type == ExamQuestion.SINGLE or instance.type == ExamQuestion.MULTIPLE:
+            if instance.type <= ExamQuestion.MULTIPLE:
                 if row['id']:
                     # 更新
                     ExamQuestionOption.objects.filter(main=instance, id=row['id']).update(delete=False,
@@ -79,7 +82,6 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
                         right=row['right'],
                     )
             elif instance.type == ExamQuestion.FILL:
-                ExamQuestionFill.objects.filter(main=instance).update(delete=True)
                 if row['id']:
                     # 更新
                     ExamQuestionFill.objects.filter(main=instance, id=row['id']).update(delete=False,
@@ -90,18 +92,18 @@ class ExamQuestionSerializer(serializers.ModelSerializer):
                     ExamQuestionFill.objects.create(
                         main=instance,
                         content=row['content'],
-                        order=row['order'],
+                        order=row['order'] + 1,
                     )
         return instance
 
-class ExamQuestionOptionSerializer(serializers.ModelSerializer):
 
+class ExamQuestionOptionSerializer(serializers.ModelSerializer):
     class Meta:
         model = ExamQuestionOption
         fields = '__all__'
 
-class ExamQuestionFillSerializer(serializers.ModelSerializer):
 
+class ExamQuestionFillSerializer(serializers.ModelSerializer):
     class Meta:
         model = ExamQuestionFill
         fields = '__all__'

+ 2 - 2
apps/practise/practiselog/models.py

@@ -45,7 +45,7 @@ class PractiseAnswerLog(models.Model):
 
     main = models.ForeignKey(PractiseLog, verbose_name=u"练习记录", on_delete=models.PROTECT)
     question = models.ForeignKey(ExamQuestion, verbose_name=u"试题", on_delete=models.PROTECT)
-    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'回答状态')
+    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'回答状态', null=True)
 
     class Meta:
         db_table = "practise_answer_log"
@@ -65,7 +65,7 @@ class PractiseAnswerOptionLog(models.Model):
 
 class PractiseAnswerFillLog(models.Model):
     main = models.ForeignKey(PractiseAnswerLog, verbose_name=u"练习答题记录", on_delete=models.PROTECT)
-    content = models.TextField(verbose_name=u"内容")
+    content = models.TextField(verbose_name=u"内容", blank=True)
     order = models.IntegerField(verbose_name=u'排序')
 
     class Meta:

+ 5 - 4
apps/practise/practiselog/serializers.py

@@ -13,7 +13,7 @@ class PractiseLogSerializer(serializers.ModelSerializer):
         next_practise = ''
         if obj.end_answer:
             now_type = obj.end_answer.question.type
-            questions = ExamQuestion.objects.filter(type=now_type).order_by('id').values_list('id', flat=True)
+            questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
             now_question_index = list(questions).index(obj.end_answer.question.id)
             if now_question_index < (len(questions) -1):
                 # 该题型未练习完,继续返回该题型下的习题
@@ -22,7 +22,7 @@ class PractiseLogSerializer(serializers.ModelSerializer):
                 # 该题型已练习完,返回下一个题型下的习题
                 while now_type <= ExamQuestion.JUDGMENT:
                     now_type += 1
-                    questions = ExamQuestion.objects.filter(type=now_type).order_by('id').first()
+                    questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').first()
                     if questions:
                         next_practise = questions.id
                         break
@@ -31,7 +31,8 @@ class PractiseLogSerializer(serializers.ModelSerializer):
     def get_end_answer(self, obj):
         if obj.end_answer:
             now_type = obj.end_answer.question.type
-            questions = ExamQuestion.objects.filter(type=now_type).order_by('id').values_list('id', flat=True)
+            # todo
+            questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
             now_question_index = list(questions).index(obj.end_answer.question.id)
             name = '{0}/{1} {2}第{3}题'.format(obj.end_answer.question.chapter.name,
                                          obj.end_answer.question.chapter.subject.name,
@@ -44,7 +45,7 @@ class PractiseLogSerializer(serializers.ModelSerializer):
     def get_begin_answer(self, obj):
         if obj.begin_answer:
             now_type = obj.begin_answer.question.type
-            questions = ExamQuestion.objects.filter(type=now_type).order_by('id').values_list('id', flat=True)
+            questions = ExamQuestion.objects.filter(type=now_type, delete=False).order_by('id').values_list('id', flat=True)
             now_question_index = list(questions).index(obj.begin_answer.question.id)
             name = '{0}/{1} {2}第{3}题'.format(obj.begin_answer.question.chapter.name,
                                          obj.begin_answer.question.chapter.subject.name,

+ 2 - 1
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,7 +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, null=True, blank=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)
 

+ 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__'

+ 21 - 9
uis/admin/examquestion/edit.html

@@ -368,17 +368,29 @@
             }
             else if (value === "3") {
                 //填空题
-                for (var i = 0; i < 3; i++) {
-                    oldData.push(
-                        {
-                            id: '',
-                            answer: '空白' + (i + 1),
-                            content: '',
-                        }
-                    )
+                if (items.length > 0) {
+                    for (var i = 0; i < items.length; i++) {
+                        oldData.push(
+                            {
+                                id: items[i].id,
+                                answer: '空白' + items[i].order,
+                                content: items[i].content,
+                            }
+                        )
+                    }
+                } else {
+                    for (var i = 0; i < 3; i++) {
+                        oldData.push(
+                            {
+                                id: '',
+                                answer: '空白' + (i + 1),
+                                content: '',
+                            }
+                        )
+                    }
                 }
                 _cols = _cols.slice(1, 4)
-                _cols[0] = {field: 'answer', title: '选项', width: '7%',}
+                    _cols[0] = {field: 'answer', title: '选项', width: '7%',}
             }
             else if (value === "4") {
                 //判断题

+ 1 - 1
uis/admin/index.html

@@ -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>