Explorar o código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	uis/views/agent/index.html
wushaodong %!s(int64=4) %!d(string=hai) anos
pai
achega
1b7449cdca

+ 2 - 1
apps/account/models.py

@@ -7,7 +7,7 @@ from django.utils import timezone
 from rest_framework.utils import model_meta
 from utils.exceptions import CustomError
 from django.conf import settings
-from apps.agent.models import Store, Agent
+from apps.agent.models import Store, Agent,GeneralAgent
 
 class UserManager(BaseUserManager):
 
@@ -52,6 +52,7 @@ class User(AbstractBaseUser, PermissionsMixin):
     ID_card = models.CharField(max_length=18, verbose_name=u"身份证号", null=True, blank=True)
     address = models.CharField(max_length=100, verbose_name=u"家庭住址", null=True, blank=True)
     tel = models.CharField(max_length=15, verbose_name=u"手机")
+    general_agent = models.ForeignKey(GeneralAgent, verbose_name=u"总代理", null=True, blank=True, on_delete=models.PROTECT)
     agent = models.ForeignKey(Agent, verbose_name=u"代理商", null=True, blank=True, on_delete=models.PROTECT)
     store = models.ForeignKey(Store, verbose_name=u"所属门店", null=True, blank=True, on_delete=models.PROTECT)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"是否在职", default=INSERVICE)

+ 1 - 0
apps/account/serializers.py

@@ -55,6 +55,7 @@ class EmployeeSerializer(serializers.ModelSerializer):
     enable_text = BooleanCharField(source='is_active', read_only=True)
     agent_text = serializers.CharField(source='agent.name', read_only=True)
     store_text = serializers.CharField(source='store.name', read_only=True)
+    general_agent_text = serializers.CharField(source='general_agent.name', read_only=True)
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     check_user_text = serializers.CharField(source='check_user.name', read_only=True)

+ 10 - 1
apps/agent/filters.py

@@ -1,7 +1,16 @@
 # coding=utf-8
 import django_filters
 
-from .models import Agent,Store
+from .models import GeneralAgent,Agent,Store
+
+
+class GeneralAgentFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
+
+    class Meta:
+        model = GeneralAgent
+        fields = '__all__'
+
 
 class AgentFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')

+ 24 - 1
apps/agent/models.py

@@ -3,6 +3,26 @@
 from django.conf import settings
 from django.db import models
 
+
+class GeneralAgent(models.Model):
+    name = models.CharField(verbose_name=u'名称', max_length=50)
+    notes = models.CharField(verbose_name=u'备注', max_length=200, null=True)
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'添加人',
+                                    related_name='general_agent_create_user', editable=False, on_delete=models.PROTECT)
+    create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
+
+    class Meta:
+        db_table = 'general_agent'
+        verbose_name = u'总代理'
+        ordering = ['-id']
+        default_permissions = ()
+        permissions = [
+            ('view_general_agent', u'查看'),
+            ('add_general_agent', u'添加'),
+            ('delete_general_agent', u'删除'),
+        ]
+
+
 class Agent(models.Model):
     name = models.CharField(verbose_name=u'名称', max_length=50)
     tel = models.CharField(verbose_name=u'电话', max_length=20, null=True)
@@ -12,6 +32,8 @@ class Agent(models.Model):
                                     editable=False,on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u'添加时间', auto_now_add=True, editable=False)
     notes = models.CharField(verbose_name=u'备注', max_length=200, null=True)
+    general_agent = models.ForeignKey(GeneralAgent, verbose_name=u'总代理', related_name='general_agent',
+                                      on_delete=models.PROTECT, editable=False)
 
     class Meta:
         db_table = 'agent'
@@ -24,6 +46,7 @@ class Agent(models.Model):
             ('delete_agent', u'删除'),
         ]
 
+
 class Store(models.Model):
 
     name = models.CharField(verbose_name=u'名称', max_length=50)
@@ -50,4 +73,4 @@ class Store(models.Model):
             ('add_store', u'添加'),
             ('delete_store', u'删除'),
             ('check_store', u'审核'),
-        ]
+        ]

+ 17 - 1
apps/agent/serializers.py

@@ -2,10 +2,25 @@
 import datetime
 from rest_framework import serializers
 from django.conf import settings
-from apps.agent.models import Agent,Store
+from apps.agent.models import GeneralAgent,Agent,Store
 from utils.booleancharfield import BooleanCharField
 
+
+class GeneralAgentSerializer(serializers.ModelSerializer):
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
+
+    class Meta:
+        model = GeneralAgent
+        fields = '__all__'
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(GeneralAgentSerializer, self).create(validated_data)
+        return instance
+
+
 class AgentSerializer(serializers.ModelSerializer):
+    general_agent_text = serializers.CharField(source='general_agent.name', read_only=True)
     create_user_text = serializers.CharField(source='create_user.name', read_only=True)
     create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,
                                               read_only=True)
@@ -16,6 +31,7 @@ class AgentSerializer(serializers.ModelSerializer):
 
     def create(self, validated_data):
         validated_data['create_user'] = self.context['request'].user
+        validated_data['general_agent'] = self.context['request'].user.general_agent
         instance = super(AgentSerializer, self).create(validated_data)
         return instance
 

+ 1 - 0
apps/agent/urls.py

@@ -7,6 +7,7 @@ urlpatterns = [
 ]
 
 router = SimpleRouter()
+router.register(r'general_agent',GeneralAgentViewSet)
 router.register(r'agent', AgentViewSet)
 router.register(r'store', StoreViewSet)
 urlpatterns += router.urls

+ 29 - 3
apps/agent/views.py

@@ -9,12 +9,38 @@ from django.conf import settings
 from utils import response_ok, response_error
 from utils.exceptions import CustomError
 from apps.log.models import BizLog
-from .models import Agent,Store
-from .serializers import AgentSerializer,StoreSerializer
-from .filters import AgentFilter,StoreFilter
+from .models import GeneralAgent,Agent,Store
+from .serializers import GeneralAgentSerializer,AgentSerializer,StoreSerializer
+from .filters import GeneralAgentFilter,AgentFilter,StoreFilter
 from utils.permission import isLogin, permission_required
 from apps.agent.serializers import AgentComboboxSerializer,StoreComboboxSerializer
 
+
+class GeneralAgentViewSet(CustomModelViewSet):
+    permission_classes = []
+    queryset = GeneralAgent.objects.filter()
+    serializer_class = GeneralAgentSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter()
+        f = GeneralAgentFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def perform_create(self, serializer):
+        super(GeneralAgentViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        BizLog.objects.addnew(self.request.user, BizLog.INSERT,
+                              u'添加总代理[%s],id=%d' % (instance.name, instance.id), validated_data)
+
+    def destroy(self, request, *args, **kwargs):
+        instance = self.get_object()
+        BizLog.objects.addnew(self.request.user, BizLog.DELETE,
+                              u'删除总代理[%s],id=%d' % (instance.name, instance.id))
+        super(GeneralAgentViewSet, self).perform_destroy(instance)
+        return response_ok()
+
+
 class AgentViewSet(CustomModelViewSet):
     permission_classes = []
     queryset = Agent.objects.filter()

+ 104 - 0
uis/views/agent/general_edit.html

@@ -0,0 +1,104 @@
+<!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>
+        .input {
+            border-radius: 2px;
+            height: 38px;
+            border-width: 1px;
+            border-color: lightgray;
+            border-style: solid;
+            background-color: white;
+            padding-left: 3px;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <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 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>
+                            <label class="layui-form-label">备注:</label>
+                            <div class="layui-input-block">
+                                <textarea type="text" name="notes" class="layui-textarea" placeholder="请输入备注"/></textarea>
+                            </div>
+                        </div>
+
+                        <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element"
+                                style="display: none">保存
+                        </button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.link('../../../layuiadmin/style/autocomplete.css');
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+        , autocomplete: 'autocomplete'
+    }).extend({
+        index: 'lib/index',
+    }).use(['index', 'form', 'autocomplete'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , form = layui.form
+        var id = layui.view.getParameterByName('id');
+
+
+        if (id) {
+            var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+            form.val("component-form-element", editdata);
+        }
+        //form.render(null, 'component-form-element');
+
+        form.on('submit(component-form-element)', function (data) {
+            if (id) {
+                var url = '/agent/general_agent/' + id + '/';
+                var type = 'put';
+            } else {
+                url = '/agent/general_agent/';
+                type = 'post'
+            }
+
+            admin.req({
+                url: url
+                , data: data.field
+                , type: type
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>

+ 19 - 14
uis/views/agent/index.html

@@ -156,11 +156,13 @@
 
         table.render({
             elem: '#total_agent_datagrid'
-            , url: '/agent/agent/'
+            , url: '/agent/general_agent/'
             , cols: [[
                 {field: 'name', title: '总代理名称', event: 'showAgent', width: 200}
-                , {field: 'create_time_f', title: '添加时间', MaxWidth: 150}
-                , {width: 130, align: 'center', fixed: 'right', toolbar: '#total-agent-operate-bar'}
+                , {field: 'create_user_text', title: '添加人', width: 150}
+                , {field: 'create_time', title: '添加时间', width: 200}
+                , {field: 'notes', title: '备注', width: 200}
+                , {width: 150, align: 'center', fixed: 'right', toolbar: '#total-agent-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -170,7 +172,8 @@
             elem: '#agent_datagrid'
             , url: '/agent/agent/'
             , cols: [[
-                {field: 'name', title: '次代理名称', width: 150}
+                {field: 'name', title: '名称', width: 150}
+                , {field: 'general_agent_text', title: '总代理名称', width: 150}
                 , {field: 'tel', title: '联系电话', width: 150}
                 , {field: 'area', title: '区域', width: 200}
                 , {field: 'address', title: '地址', width: 200}
@@ -191,13 +194,13 @@
                 layer.confirm('确定要删除吗?', function (index) {
                     layer.close(index);
                     admin.req({
-                        url: '/agent/agent/' + data.id + '/'
+                        url: '/agent/general_agent/' + data.id + '/'
                         , type: 'delete'
                         , done: function (res) {
                             if (res.code === 0) {
                                 layer.msg('删除成功!', {icon: 1})
                             }
-                            table.reload('agent_datagrid', {});
+                            table.reload('total_agent_datagrid', {});
                         }
                     });
                 });
@@ -215,21 +218,23 @@
                                 layer.msg('修改成功!', {icon: 1})
                             }
                             layer.close(index);
-                            table.reload('agent_datagrid', {});
+                            table.reload('total_agent_datagrid', {});
                         };
                         layui.submitChild();
                     },
                     btn2: function (index, layero) {
                         layer.close(index);//关闭当前按钮
                     },
-                    content: 'edit.html?id=' + data.id
+                    content: 'general_edit.html?id=' + data.id
                 });
-            } else if (obj.event === 'showAgent') {
-                //点击总代理商获取总代理商对应的所有的代理商
+            }else if(obj.event === 'showAgent'){
                 table.reload('agent_datagrid', {
-                    where: {general: data.id}
+                    where: {general_agent: data.id}
                     , page: {curr: 1}
                 });
+
+                //标注选中样式
+                obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
             }
         });
 
@@ -322,7 +327,7 @@
             layer.open({
                 type: 2,
                 title: '添加',
-                area: ['40%', '50%'],
+                area: ['30%', '40%'],
                 btn: ['保存', '取消'],
                 yes: function (index, dom) {
                     layui.onSubmitChild = function (res) {
@@ -330,14 +335,14 @@
                             layer.msg('添加成功!', {icon: 1})
                         }
                         layer.close(index);
-                        table.reload('agent_datagrid', {});
+                        table.reload('total_agent_datagrid', {});
                     };
                     layui.submitChild();
                 },
                 btn2: function (index, layero) {
                     layer.close(index);//关闭当前按钮
                 },
-                content: 'edit.html'
+                content: 'general_edit.html'
             });
         });
     });

+ 1 - 1
uis/views/customer/check_index.html

@@ -143,7 +143,7 @@
                layer.open({
                 type: 2,
                 title: '审核',
-                area: ['35%', '70%'],
+                area: ['35%', '50%'],
                 btn: ['保存', '取消'],
                 yes: function (index, dom) {
                     layui.onSubmitChild = function (res) {

+ 0 - 1
uis/views/index.html

@@ -45,7 +45,6 @@
                         <dd layadmin-event="logout" style="text-align: center;"><a>退出</a></dd>
                     </dl>
                 </li>
-
                 <li class="layui-nav-item layui-hide-xs" lay-unselect>
                     <a href="javascript:;" layadmin-event="about"><i
                             class="layui-icon layui-icon-more-vertical"></i></a>