Ver código fonte

管理员工

wushaodong 3 anos atrás
pai
commit
f5949a63ce

+ 10 - 1
apps/account/models.py

@@ -62,7 +62,7 @@ class User(AbstractBaseUser, PermissionsMixin):
     address = models.CharField(max_length=100, verbose_name=u"家庭住址", null=True, blank=True)
     position = models.CharField(max_length=15, verbose_name=u"岗位", null=True)
     create_user = models.ForeignKey('self', verbose_name='创建者', null=True, on_delete=models.PROTECT)
-
+    manager_users = models.CharField(max_length=200, verbose_name=u'管理人员', null=True, blank=True, )
     objects = UserManager()
 
     USERNAME_FIELD = 'username'
@@ -120,6 +120,15 @@ class User(AbstractBaseUser, PermissionsMixin):
             return True
         return False
 
+    def get_manager_users(self):
+        if self.is_superuser:
+            users = User.objects.filter(is_active=True)
+        elif self.manager_users:
+            users = User.objects.filter(id__in=self.manager_users.split(','), is_active=True)
+        else:
+            return [self.id]
+        return users.values_list('id', flat=True)
+
 class CustomerWechat(models.Model):
     wechat_app = models.ForeignKey(WechatApplet, verbose_name=u'小程序', on_delete=models.PROTECT, editable=False)
     customer = models.ForeignKey(User, verbose_name=u'用户', on_delete=models.PROTECT, editable=False, null=True)

+ 1 - 0
apps/account/urls.py

@@ -15,6 +15,7 @@ urlpatterns = [
     url(r'^wxbind/$', WxBindView.as_view()), # 微信快捷登录
 
     url(r'^get_user/$', UserDictView.as_view()), # 微信快捷登录
+    url(r'^user_tree/$', UserTreeView.as_view()),  # 人员管理,管理员工加载员工
 ]
 
 router = SimpleRouter()

+ 41 - 0
apps/account/views.py

@@ -99,6 +99,24 @@ class EmployeeViewSet(CustomModelViewSet):
         BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
                               u'修改用户[%s],id=%d' % (instance.name, instance.id), validated_data)
 
+    @action(methods=['post'], detail=True)
+    def manager(self, request, pk):
+        # 管理员工
+        if not request.user.is_superuser:
+            return response_error('无权操作')
+        data = json.loads(request.POST.get('users'))
+        try:
+            instance = self.get_object()
+            with transaction.atomic():
+                instance.manager_users = ','.join(data)
+                instance.save()
+                BizLog.objects.addnew(self.request.user, BizLog.INSERT,
+                                      u'设置[%s]管理员工,id=%d' % (instance.name, instance.id), data)
+            return response_ok()
+        except Exception as e:
+            traceback.print_exc()
+            return response_error(u'保存失败')
+
 
 class SetUserInfoView(APIView):
     permission_classes = [isLogin, ]
@@ -165,3 +183,26 @@ class UserDictView(APIView):
             }
             data.append(item)
         return response_ok(data)
+
+class UserTreeView(APIView):
+    permission_classes = [isLogin, ]
+
+    def get(self, request):
+        if not request.user.is_superuser:
+            return response_error('无权操作')
+        id = request.GET.get('id')
+        agent_data = []
+        user = User.objects.filter(id=id).first()
+        manager_users = user.manager_users and user.manager_users.split(',') or [] # 选择用户
+        companys = User.objects.filter(is_active=True, is_superuser=False, type=User.SELLER)
+        for company in companys:
+            checked = False
+            if str(company.id) in manager_users:
+                checked = True
+            agent_item = {
+                'title': company.name,
+                'id': company.id,
+                'checked': checked,
+            }
+            agent_data.append(agent_item)
+        return response_ok(agent_data)

+ 1 - 2
apps/order/views.py

@@ -260,8 +260,7 @@ class OrderViewSet(CustomModelViewSet):
 
     def filter_queryset(self, queryset, ):
         # 非管理者,只能查看自己的客户
-        if self.request.user.type != User.EMPLOYEE:
-            queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
+        queryset = queryset.filter(Q(create_user_id__in=self.request.user.get_manager_users()) | Q(seller_id__in=self.request.user.get_manager_users()))
         f = OrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 

+ 0 - 1
uis/views/employee/edit.html

@@ -63,7 +63,6 @@
                                 <div class="layui-input-block">
                                     <select name="type">
                                         <option value="2">业务员</option>
-                                        <option value="1">管理者</option>
                                     </select>
                                 </div>
                             </div>

+ 26 - 1
uis/views/employee/index.html

@@ -58,6 +58,11 @@
                             <a class="layui-btn layui-btn-xs" lay-event="edit"
                                data-permission="account.add_user">修改</a>
                         </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs layui-btn-warm"
+                               data-permission="account.manager_user"
+                               lay-event="manager_user">管理员工</a>
+                        </div>
                     </script>
                 </div>
             </div>
@@ -86,7 +91,7 @@
                 , {field: 'type_text', title: '类别', width: 120}
                 , {field: 'enable_text', title: '是否在用', width: 100}
                 , {field: 'date_joined_f', title: '添加时间', width: 150}
-                , {width: 100, align: 'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+                , {width: 140, align: 'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -126,6 +131,26 @@
                     content: 'edit.html?id=' + data.id
                 });
             }
+            else if (obj.event === 'manager_user') {
+                layer.open({
+                    type: 2,
+                    title: '管理员工',
+                    shadeClose: true,
+                    area: ['650px', '80%'],
+                    btn: ['保存', '取消'],
+                    yes: function (index, dom) {
+                        layui.onSubmitChild = function (res) {
+                            layer.close(index);
+                            table.reload('datagrid', {});
+                        };
+                        layui.submitChild();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);//关闭当前按钮
+                    },
+                    content: 'manage_user.html?id=' + data.id
+                });
+            }
         });
 
         $('#btn_add').on('click', function () {

+ 82 - 0
uis/views/employee/manage_user.html

@@ -0,0 +1,82 @@
+<!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">
+    <link rel="stylesheet" type="text/css" href="../../layuiadmin/style/formSelects-v4.css"/>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md6">
+            <div class="layui-card">
+
+                <div class="layui-card-body">
+                    <form class="layui-form" action="" lay-filter="component-form-element">
+                        <div id="id_user" class="demo-tree"></div>
+                        <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element"
+                                style="display: none">保存
+                        </button>
+                    </form>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js"></script>
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+
+    }).use(['index', 'form', 'tree',], function () {
+        var $ = layui.$
+            , admin = layui.admin
+            , form = layui.form
+            , tree = layui.tree;
+
+        var id = layui.view.getParameterByName('id');
+
+        admin.req({
+            url: '/account/user_tree/?id=' + id
+            , done: function (res) {
+                tree.render({
+                    elem: '#id_user'
+                    , data: res.data
+                    , showCheckbox: true
+                });
+            }
+        });
+
+        form.on('submit(component-form-element)', function (data) {
+            var users = []
+            for (var key in data.field) {
+                users.push(data.field[key])
+            }
+            admin.req({
+                url: '/account/employee/' + id + '/manager/'
+                , data: {users: JSON.stringify(users)}
+                , type: 'post'
+                , done: function (res) {
+                    parent.layui.onSubmitChild(res);
+                }
+            });
+            return false;
+        });
+
+        parent.layui.submitChild = function () {
+            $("#id_save").click();
+        };
+    });
+</script>
+</body>
+</html>