Explorar o código

租户管理员

wushaodong %!s(int64=4) %!d(string=hai) anos
pai
achega
7f7c793215

+ 22 - 15
apps/account/models.py

@@ -10,20 +10,20 @@ from apps.tenant.models import Tenant
 
 class UserManager(BaseUserManager):
     def create_administrator(self, username, password=None, **extra_fields):
-        return self.create_user(User.ADMINSTRATOR, username, password, **extra_fields)
+        return self.create_user(User.SUPPER, username, password, **extra_fields)
 
-    def create_tenant(self, username, password=None, **extra_fields):
-        return self.create_user(User.TENANT, username, password, **extra_fields)
+    def create_tenant_admin(self, username, password=None, **extra_fields):
+        return self.create_user(User.ADMIN, username, password, **extra_fields)
 
     def create_superuser_tenant(self, username, password=None, **extra_fields):
-        u = self.create_tenant(username, password, **extra_fields)
+        u = self.create_administrator(username, password, **extra_fields)
         u.is_active = True
         u.is_superuser = True
         u.save(using=self._db)
         return u
 
     def create_customer(self, username, password=None, **extra_fields):
-        return self.create_user(User.CUSTOMER, username, password, **extra_fields)
+        return self.create_user(User.EMPLOYEE, username, password, **extra_fields)
 
     def create_superuser(self, username, password, **extra_fields):
         u = self.create_administrator(username, password, **extra_fields)
@@ -51,11 +51,18 @@ class UserManager(BaseUserManager):
         return user
 
 class User(AbstractBaseUser, PermissionsMixin):
-    ADMINSTRATOR = 1 #管理者
-    TENANT = 2 #检修人
-    CUSTOMER = 3 #报修人
 
-    type = models.PositiveSmallIntegerField(verbose_name=u"类型", editable=False)
+    SUPPER = 1
+    ADMIN = 2
+    EMPLOYEE = 3
+    REPAIR = 4
+    TYPE_CHOICES = (
+        (SUPPER, u'平台管理员'),
+        (ADMIN, u'管理者'),
+        (EMPLOYEE, u'检修人'),
+        (REPAIR, u'报修人'),
+    )
+    type = models.PositiveSmallIntegerField(verbose_name=u"类型",choices=TYPE_CHOICES, editable=False)
     username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)
     is_active = models.BooleanField(verbose_name=u'激活', default=True)
     date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, editable=False)
@@ -86,26 +93,26 @@ class User(AbstractBaseUser, PermissionsMixin):
         return self.username
 
     def addAdministrator(self):
-        self.type = self.type | self.ADMINSTRATOR
+        self.type = self.type | self.SUPPER
 
     def addTenant(self):
-        self.type = self.type | self.TENANT
+        self.type = self.type | self.ADMIN
 
     def addCustomer(self):
-        self.type = self.type | self.CUSTOMER
+        self.type = self.type | self.EMPLOYEE
 
     def is_customer(self):
-        if self.type == self.CUSTOMER:
+        if self.type == self.EMPLOYEE:
             return True
         return False
 
     def is_tenant(self):
-        if self.type == self.TENANT:
+        if self.type == self.ADMIN:
             return True
         return False
 
     def is_administrator(self):
-        if self.type == self.ADMINSTRATOR:
+        if self.type == self.SUPPER:
             return True
         return False
 

+ 8 - 0
apps/admin/tenant/serializers.py

@@ -9,11 +9,19 @@ from apps.account.models import User
 class TenantSerializer(serializers.ModelSerializer) :
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
     status_text = serializers.CharField(source='get_status_display', read_only=True)
+    username = serializers.SerializerMethodField()
 
     class Meta:
         model = Tenant
         fields = '__all__'
 
+    def get_username(self, obj):
+        names = Employee.objects.filter(tenant=obj, user__type=User.SUPPER).values('name')
+        name = []
+        for i in names:
+            name.append(i.get('name'))
+        return ','.join(name)
+
     def create(self, validated_data):
         if Tenant.is_exist(validated_data['company_name']):
             raise CustomError(u'名称为[%s]的租户已存在' % validated_data['company_name'])

+ 20 - 5
apps/admin/tenant/views.py

@@ -12,6 +12,7 @@ from utils import response_ok
 from utils.exceptions import CustomError
 from rest_framework.decorators import action
 from utils import response_ok, response_error
+from apps.account.models import User
 
 class TenantViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
@@ -32,13 +33,27 @@ class TenantViewSet(CustomModelViewSet):
 
     @action(methods=['post'], detail=True)
     def super_tenant(self,  request, pk):
+        name = request.POST.get('name')
         username = request.POST.get('username')
         password = request.POST.get('password')
-        with transaction.atomic():
-            tenant = Tenant.objects.filter(pk=pk).first()
-            instance = Employee.create_admin(tenant, username, password)
-            admin_log(self.request.user, BizLog.INSERT, u'添加租户超级账号[%s], id=%d' % (instance.name, instance.id))
-        return response_ok()
+        try:
+            with transaction.atomic():
+                tenant = Tenant.objects.filter(pk=pk).first()
+                if not tenant:
+                    raise CustomError('当前租户无效,请刷新!')
+                user = User.objects.filter(username=username).first()
+                if user:
+                    user.type = User.SUPPER
+                    user.save()
+                    Employee.objects.filter(user=user).update(tenant=tenant, type=Employee.SUPPER)
+                else:
+                    instance = Employee.create_super_admin(tenant, name, username, password)
+                admin_log(request.user, BizLog.INSERT, u'租户[%s]添加超级账号[%s], id=%d' % (tenant.company_name,username, instance.id))
+            return response_ok()
+        except CustomError as e:
+            return response_error(e.get_error_msg())
+        except Exception as e:
+            return response_error(str(e))
 
     @action(methods=['post'], detail=True)
     def check(self, request, pk):

+ 1 - 1
apps/admin/user/serializers.py

@@ -18,7 +18,7 @@ class UserSerializer(serializers.ModelSerializer):
         fields = '__all__'
 
     def create(self, validated_data):
-        validated_data['type'] = User.ADMINSTRATOR
+        validated_data['type'] = User.SUPPER
         if validated_data['password'].strip() == '':
             raise CustomError(u'密码不能为空!')
         instance = super(UserSerializer, self).create(validated_data)

+ 1 - 1
apps/admin/user/views.py

@@ -17,7 +17,7 @@ User = get_user_model()
 
 class UserViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
-    queryset = User.objects.filter(type=User.ADMINSTRATOR)
+    queryset = User.objects.filter(type=User.SUPPER)
     serializer_class = UserSerializer
 
     def filter_queryset(self, queryset):

+ 6 - 6
apps/tenant/employee/models.py

@@ -52,16 +52,16 @@ class Employee(models.Model):
         default_permissions = ()
 
     @staticmethod
-    def create_admin(tenant, username, password):
-        # 租户添加管理
-        user = User.objects.create_tenant(username, password)
+    def create_super_admin(tenant,name, username, password):
+        # 租户添加管理超级管理员
+        user = User.objects.create_superuser_tenant(username, password)
         instance = Employee.objects.create(
-            name=username,
-            tel='',
+            name=name,
+            tel=username,
             gender=settings.MALE,
             user=user,
             tenant=tenant,
-            type=Employee.ADMIN,
+            type=Employee.SUPPER,
         )
         return instance
 

+ 2 - 2
apps/tenant/employee/serializers.py

@@ -54,7 +54,7 @@ class EmployeeSerializer(serializers.ModelSerializer):
         if not user:
             # 创建user实例
             is_active = 1 if self.initial_data['status'] != '4' else 0
-            user = User.objects.create_tenant(username, password, is_active=is_active)
+            user = User.objects.create_tenant_admin(username, password, is_active=is_active)
 
         validated_data['user'] = user
         validated_data['create_user'] = self.context['request'].user
@@ -98,7 +98,7 @@ class EmployeeSerializer(serializers.ModelSerializer):
                 instance.user.update_item(user)
             else:
                 is_active = 1 if self.initial_data['status'] != '4' else 0
-                user = User.objects.create_tenant(username,
+                user = User.objects.create_tenant_admin(username,
                                                   self.initial_data['password'],
                                                   is_active=is_active)
                 validated_data['user'] = user

+ 1 - 1
uis/tenant/account/login.html

@@ -36,7 +36,7 @@
     </div>
 
     <div class="layui-trans layadmin-user-login-footer">
-      <p>© 2020 燎原管理系统 <a href="http://www.zzliaoyuan.com/" target="_blank">郑州燎原计算机技术有限公司</a></p>
+      <p>© 2020 燎原云报修系统 <a href="http://www.zzliaoyuan.com/" target="_blank">郑州燎原计算机技术有限公司</a></p>
     </div>
 
   </div>

+ 1 - 1
uis/zzlyadmin/account/login.html

@@ -36,7 +36,7 @@
     </div>
 
     <div class="layui-trans layadmin-user-login-footer">
-      <p>© 2020 燎原管理系统 <a href="http://www.zzliaoyuan.com/" target="_blank">郑州燎原计算机技术有限公司</a></p>
+      <p>© 2020 燎原云报修系统 <a href="http://www.zzliaoyuan.com/" target="_blank">郑州燎原计算机技术有限公司</a></p>
     </div>
 
   </div>

+ 2 - 2
uis/zzlyadmin/dashboard/index.html

@@ -13,9 +13,9 @@
 
 <div class="layui-card" style="height: 100%;display:flex;">
   <div style="margin:auto;font-weight:bold;font-size: 32px;font-style: normal;color:#868686;">
-    欢迎使用燎原管理系统
+    欢迎使用燎原云报修系统
   </div>
 </div>
 
 </body>
-</html>
+</html>

+ 11 - 17
uis/zzlyadmin/index.html

@@ -2,7 +2,7 @@
 <html>
 <head>
     <meta charset="utf-8">
-    <title>燎原管理系统</title>
+    <title>燎原云报修系统</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport"
@@ -59,27 +59,21 @@
         <div class="layui-side layui-side-menu">
             <div class="layui-side-scroll">
                 <div class="layui-logo">
-                    <span>燎原管理系统</span>
+                    <span>燎原云报修系统</span>
                 </div>
 
                 <ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-muen"
                     lay-filter="layadmin-system-side-menu">
                     <li data-name="set" class="layui-nav-item">
-                        <a href="javascript:;" lay-tips="基础信息" lay-direction="2">
-                            <i class="layui-icon layui-icon-set"></i>
-                            <cite>基础信息</cite>
-                        </a>
-                        <dl class="layui-nav-child">
-                            <dd data-name="nav">
-                                <a lay-href="user/index.html">账号管理</a>
-                            </dd>
-                            <dd data-name="nav">
-                                <a lay-href="tenant/index.html">租户管理</a>
-                            </dd>
-                            <dd data-name="nav">
-                                <a lay-href="employee/index.html">用户管理</a>
-                            </dd>
-                        </dl>
+                        <dd data-name="nav">
+                            <a lay-href="user/index.html">账号管理</a>
+                        </dd>
+                        <dd data-name="nav">
+                            <a lay-href="tenant/index.html">租户管理</a>
+                        </dd>
+                        <dd data-name="nav">
+                            <a lay-href="employee/index.html">用户管理</a>
+                        </dd>
                     </li>
                 </ul>
             </div>

+ 8 - 0
uis/zzlyadmin/tenant/add_super_admin.html

@@ -22,6 +22,14 @@
                     <form class="layui-form" action="" lay-filter="component-form-element">
                         <div class="layui-row layui-col-space10 layui-form-item">
 
+                            <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">

+ 1 - 0
uis/zzlyadmin/tenant/index.html

@@ -141,6 +141,7 @@
                 , {field: 'end_date', title: '租户到期日期', width: 120}
                 , {field: 'create_time', title: '申请时间', width: 160}
                 , {field: 'status_text', title: '审核状态', width: 120}
+                , {field: 'username', title: '管理员账号', width: 200}
                 , {field: 'renew_time', title: '续费时间', width: 160}
                 , {field: 'renew_amount', title: '续费金额', width: 120}
                 , {field: 'reject_reason', title: '拒绝原因', width: 120}