浏览代码

绑定企业

wushaodong 4 年之前
父节点
当前提交
3bcdd0de37

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

@@ -9,5 +9,6 @@ urlpatterns = [
 ]
 
 router = SimpleRouter()
+router.register(r'employee', EmployeeViewSet)
 router.register(r'', UserViewSet)
 urlpatterns += router.urls

+ 12 - 0
apps/admin/user/views.py

@@ -12,9 +12,21 @@ from apps.admin import admin_log
 
 from apps.account.filters import UserFilter
 from .serializers import UserSerializer
+from apps.tenant.employee.serializers import Employee, EmployeeSerializer
+from apps.tenant.employee.filters import EmployeeFilter
 
 User = get_user_model()
 
+class EmployeeViewSet(CustomModelViewSet):
+    permission_classes = [IsAdministratorUser]
+    queryset = Employee.objects.filter()
+    serializer_class = EmployeeSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter()
+        f = EmployeeFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
 class UserViewSet(CustomModelViewSet):
     permission_classes = [IsAdministratorUser, ]
     queryset = User.objects.filter(type=User.SUPPER)

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

@@ -6,9 +6,9 @@ from apps.tenant.employee.models import Employee
 
 
 class EmployeeFilter(django_filters.FilterSet):
-    username = django_filters.CharFilter(field_name='user__username', lookup_expr='icontains')
+    company_name = django_filters.CharFilter(field_name='tenant__company_name', lookup_expr='icontains')
     name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
-    type = django_filters.CharFilter(field_name='type')
+    tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
 
     class Meta:
         model = Employee

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

@@ -33,7 +33,7 @@ class Employee(models.Model):
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态',default=ENABLE)
     user = models.OneToOneField(settings.AUTH_USER_MODEL, editable=False, related_name='employee',
                                 on_delete=models.PROTECT, verbose_name=u'账号', null=True)
-    position = models.ForeignKey(Option, verbose_name=u'职位', on_delete=models.PROTECT, null=True)
+    position = models.CharField(max_length=20, verbose_name=u'职位', null=True)
     create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT,
                                     editable=False, related_name='create_user',null=True)
     face = models.CharField(max_length=200, verbose_name=u'头像', null=True)

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

@@ -11,34 +11,10 @@ from apps.account.models import User
 class EmployeeSerializer(serializers.ModelSerializer):
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
     status_text = serializers.CharField(source='get_status_display', read_only=True)
+    type_text = serializers.CharField(source='get_type_display', read_only=True)
     create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
+    tenant = serializers.DateTimeField(source='tenant.company_name', read_only=True)
     username = serializers.CharField(source='user.username', read_only=True)
-    position_text = serializers.CharField(source='position.name', read_only=True)
-    area_text = serializers.SerializerMethodField()
-    department_text = serializers.CharField(source='department.name', read_only=True)
-    area = serializers.SerializerMethodField()
-    group_ids = serializers.PrimaryKeyRelatedField(source='user.groups', many=True, read_only=True)
-    groups = serializers.SerializerMethodField()
-    forbid_baoxiu_text = serializers.SerializerMethodField()
-    type_text = serializers.CharField(source='get_type_display', read_only=True)
-
-    def get_area_text(self, obj):
-        if obj.department:
-            return obj.department.area.name
-        return ''
-
-    def get_area(self, obj):
-        if obj.department:
-            return obj.department.area.id
-        return ''
-
-    def get_forbid_baoxiu_text(self, obj):
-        if obj.forbid_baoxiu:
-            return u'是'
-        return u'否'
-
-    def get_groups(self, obj):
-        return ','.join(obj.user.groups.values_list('display_name', flat=True))
 
     class Meta:
         model = Employee

+ 15 - 2
apps/tenant/models.py

@@ -19,7 +19,7 @@ class Tenant(models.Model):
     status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATE_CHOICES, verbose_name=u'审核状态',
                                               default=settings.DEFAULT)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"申请人", on_delete=models.PROTECT,
-                                    editable=False,  null=True)
+                             editable=False, null=True)
     reject_reason = models.CharField(max_length=200, verbose_name=u'拒绝原因', blank=True, null=True)
     delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
 
@@ -30,7 +30,7 @@ class Tenant(models.Model):
         default_permissions = ()
 
     def get_no(self):
-        now = int(timezone.now().strftime('%H%M%S'))*1.3
+        now = int(timezone.now().strftime('%H%M%S')) * 1.3
         no = '{0}{1}'.format(self.id, now)
         return no
 
@@ -51,3 +51,16 @@ class Tenant(models.Model):
         if not tenant:
             raise CustomError(u'未找到相应的租户信息!')
         return tenant
+
+
+class RenewLog(models.Model):
+
+    tenant = models.ForeignKey(Tenant, verbose_name=u"租户", on_delete=models.PROTECT, editable=False, )
+    amount = models.FloatField(verbose_name='金额')
+    create_time = models.DateTimeField(verbose_name=u'续费时间', auto_now_add=True, editable=False)
+    end_date = models.DateField(verbose_name=u'到期时间', editable=False, blank=True, null=True)
+
+    class Meta:
+        db_table = 'tenant_renew_log'
+        ordering = ['-id']
+        verbose_name = '租户续费记录'

+ 0 - 6
apps/wxapp/serializers.py

@@ -48,10 +48,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 'name': customer_wechat.customer.name or '',
                 'tel': customer_wechat.customer.tel or '',
                 'face': customer_wechat.customer.face,
-                'position': customer_wechat.customer.position and customer_wechat.customer.position.name or '',
-                'company_name': customer_wechat.customer.tenant and customer_wechat.customer.tenant.company_name or '',
                 'user_type': customer_wechat.customer.type,  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
-                'user_type_text': customer_wechat.customer.get_type_display(),  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
                 'forbid_baoxiu': 'true' and customer_wechat.customer.status == Employee.DISABLE or 'false',  # 是否禁用报修,
                 'emplate_id': settings.WEAPP['message_template'],
             }
@@ -79,10 +76,7 @@ class WechatBindSerializer(serializers.Serializer):
                 'name': customer.name or '',
                 'tel': customer.tel or '',
                 'face': customer.face,
-                'position': customer.position and customer.position.name or '',
-                'company_name': customer.tenant and customer.tenant.company_name or '',
                 'user_type': customer.type,  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
-                'user_type_text': customer.get_type_display(),  # 用户类别,1为平台管理员,2为管理者,3检修人,4报修人
                 'forbid_baoxiu': 'true' and customer.status == Employee.DISABLE or 'false',  # 是否禁用报修,
             }
 

+ 2 - 1
apps/wxapp/tenant/urls.py

@@ -5,7 +5,8 @@ from rest_framework.routers import SimpleRouter
 from .views import *
 
 urlpatterns = [
-    url(r'^search_tenant/$', searchTenantView.as_view()),  # 我的报修
+    url(r'^search_tenant/$', SearchTenantView.as_view()),  # 我的报修
+    url(r'^get_tenant_data/$', GetTenantView.as_view()),  # 企业信息
 ]
 
 router = SimpleRouter()

+ 16 - 1
apps/wxapp/tenant/views.py

@@ -12,7 +12,7 @@ from utils import response_ok, response_error
 from apps.tenant.employee.models import Employee
 from utils.permission import isLogin
 
-class searchTenantView(APIView):
+class SearchTenantView(APIView):
     permission_classes = [isLogin, ]
 
     def get(self, request, *args, **kwargs):
@@ -27,6 +27,21 @@ class searchTenantView(APIView):
         else:
             return response_error(u'未找到企业,请输入正确的企业编号')
 
+class GetTenantView(APIView):
+    permission_classes = [isLogin]
+
+    def get(self, request, *args, **kwargs):
+        emplayee = Employee.objects.filter(user=request.user).first()
+        if emplayee:
+            data = {
+                'company_name':emplayee.tenant.company_name,
+                'position':emplayee.position,
+                'user_type_text':emplayee.get_type_display(),
+            }
+            return response_ok(data)
+        else:
+            return response_ok()
+
 class TenantViewSet(CustomModelViewSet):
     permission_classes = [isLogin, ]
     queryset = Tenant.objects.all()

+ 10 - 62
uis/zzlyadmin/employee/index.html

@@ -8,7 +8,6 @@
   <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"/>
     <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: 30px;}
@@ -27,9 +26,6 @@
         <div class="layui-row layui-col-space15">
           <div class="layui-col-md12">
             <div class="LAY-btns" style="margin-bottom: 10px;">
-              <div style="float:left; margin-right: 5px; margin-top: 5px;">
-                    <button class="layui-btn" id="btn_add"><i class="layui-icon layui-icon-add-circle"></i>添加</button>
-                </div>
 
                 <div style="float:right;">
                     <form class="layui-form" lay-filter="query-form-element">
@@ -37,7 +33,10 @@
                             <input type="text"  name="name" autocomplete="off" class="layui-input" placeholder="姓名"/>
                         </div>
                         <div class="seach_items">
-                            <input type="text"  name="phone" autocomplete="off" class="layui-input" placeholder="手机号"/>
+                            <input type="text"  name="tel" autocomplete="off" class="layui-input" placeholder="手机号"/>
+                        </div>
+                        <div class="seach_items">
+                            <input type="text"  name="company_name" autocomplete="off" class="layui-input" placeholder="企业名称"/>
                         </div>
                         <div class="seach_items">
                             <button class="layui-btn" lay-submit lay-filter="query-form-element"><i class="layui-icon layui-icon-search"></i>查询</button>
@@ -49,11 +48,6 @@
             </div>
             <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
 
-            <script type="text/html" id="datagrid-operate-bar">
-                <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
-                </div>
-            </script>
           </div>
         </div>
         </div>
@@ -66,23 +60,19 @@
     base: '../../../layuiadmin/' //静态资源所在路径
   }).extend({
     index: 'lib/index' //主入口模块
-     ,formSelects: 'formSelects-v4'
-  }).use(['index', 'table', 'form', 'formSelects', 'upload'], function(){
+  }).use(['index', 'table', 'form',], function(){
     var $ = layui.$
         ,table = layui.table
         ,form = layui.form;
-    var data=[{'username':1001,'date_joined':2020},{'username':1002,'date_joined':2022},]
     table.render({
       elem: '#datagrid'
-      ,url: '../../api/user.json'
+      ,url: '/admin/user/employee/'
       ,cols: [[
-        {field:'name', title:'姓名',width: 100}
-       ,{field:'phone', title:'手机号',width: 200}
-       ,{field:'role', title:'角色',width: 200}
+        {field:'name', title:'姓名',width: 150}
+       ,{field:'tel', title:'手机号',width: 200}
+       ,{field:'type_text', title:'角色',width: 200}
        ,{field:'tenant', title:'租户',width: 200}
-       ,{field:'repaire_count', title:'报修次数',width: 200}
-       ,{field:'maintain_count', title:'维修次数',width: 200}
-        ,{width:140, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+       ,{field:'baoxiu_count', title:'报修次数',width: 100}
       ]]
       ,page: true
       ,height: 'full-108'
@@ -98,48 +88,6 @@
       layer.closeAll();
       return false;
     });
-    //监听工具条
-    table.on('tool(datagrid-operate)', function(obj){
-      var data = obj.data;
-        if(obj.event === 'edit'){
-        table.editdata = data;
-        layer.open({
-          type: 2,
-          title: '修改',
-          shadeClose: false,
-          area: ['550px', '400px'],
-          btn: ['保存', '取消'],
-          yes: function (index, dom) {
-            layui.submitChild();
-            },
-            btn2: function (index, layero) {
-                layer.close(index);//关闭当前按钮
-            },
-          content: 'edit.html?id='+data.id
-        });
-      }
-    });
-
-    $('#btn_add').on('click', function(){
-        layer.open({
-          type: 2,
-          title: '添加',
-          shadeClose: false,
-          area: ['450px', '400px'],
-          btn: ['保存', '取消'],
-          yes: function (index, dom) {
-                layui.onSubmitChild = function (data) {
-                layer.close(index);
-                table.reload('datagrid', {});
-            };
-            layui.submitChild();
-            },
-            btn2: function (index, layero) {
-                layer.close(index);//关闭当前按钮
-            },
-          content: 'edit.html'
-        });
-    });
   });
   </script>
 </body>

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

@@ -106,17 +106,6 @@
     </div>
 </div>
 
-<div id="dlg_bind" align="center" style="display: none; height: 100%;overflow-y: hidden;">
-    <div align="center">
-        <h3 style="margin-top: 5px;color: red;">请使用微信小程序扫描二维码绑定</h3>
-    </div>
-
-    <iframe id="iframe_code"
-            style="width: 95%;border-radius: 2px; height: 85%; margin-top: 10px; border-width: 1px; border-color: lightgray;
-                          border-style: solid;"
-    ></iframe>
-</div>
-
 <script src="../../layuiadmin/layui/layui.js?t=1"></script>
 <script>
     layui.config({
@@ -244,16 +233,7 @@
                 content: 'edit.html'
             });
         });
-        var bindApp = function (data) {
-            $('#iframe_code').attr('src', data);
-            layer.open({
-                type: 1,
-                shadeClose: false,
-                area: ['70%', '90%'],
-                title: '绑定',
-                content: $('#dlg_bind')
-            });
-        };
+
     });
 </script>
 </body>