瀏覽代碼

设备信息

wushaodong 4 年之前
父節點
當前提交
ca90b069ff

+ 0 - 0
apps/tenant/device/__init__.py


+ 15 - 0
apps/tenant/device/filters.py

@@ -0,0 +1,15 @@
+# coding=utf-8
+
+import django_filters
+
+from apps.tenant.device.models import DeviceModel
+
+
+class DeviceFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
+    device_no = django_filters.CharFilter(field_name='device_no', lookup_expr='icontains')
+    device_model = django_filters.CharFilter(field_name='device_model', lookup_expr='icontains')
+
+    class Meta:
+        model = DeviceModel
+        fields = '__all__'

+ 21 - 0
apps/tenant/device/models.py

@@ -0,0 +1,21 @@
+# coding=utf-8
+from django.conf import settings
+from django.db import models
+from apps.tenant.models import Tenant
+
+# Create your models here.
+class DeviceModel(models.Model):
+    name = models.CharField(max_length=50,verbose_name=u'名称')
+    device_no = models.CharField(max_length=50, verbose_name=u'编号',null=True)
+    device_model = models.CharField(max_length=100,verbose_name=u'设备型号',null=True)
+    branch = models.CharField(max_length=100,verbose_name=u'小地点')
+    address = models.CharField(max_length=100,verbose_name=u'大地点')
+    tenant = models.ForeignKey(Tenant, verbose_name=u'租户', editable=False, on_delete=models.PROTECT, null=True)
+    create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT,
+                                    editable=False)
+    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
+
+    class Meta:
+        db_table = "device"
+        verbose_name = u"设备管理"
+        ordering = ('-id',)

+ 17 - 0
apps/tenant/device/serializers.py

@@ -0,0 +1,17 @@
+# coding=utf-8
+from rest_framework import serializers
+from .models import *
+
+
+class DeviceSerializer(serializers.ModelSerializer):
+    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+
+    class Meta:
+        model = DeviceModel
+        fields = '__all__'
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        validated_data['tenant'] = self.context['request'].user.employee.tenant
+        instance = super(DeviceSerializer, self).create(validated_data)
+        return instance

+ 14 - 0
apps/tenant/device/urls.py

@@ -0,0 +1,14 @@
+# coding=utf-8
+from django.conf.urls import url,include
+from apps.tenant.device.views import DeviceViewSet
+from rest_framework.routers import SimpleRouter
+
+urlpatterns = [
+
+]
+
+# 创建路由器并注册我们的视图。
+router = SimpleRouter()
+router.register(r'', DeviceViewSet)
+urlpatterns += router.urls
+

+ 42 - 0
apps/tenant/device/views.py

@@ -0,0 +1,42 @@
+# coding=utf-8
+from .models import DeviceModel
+from .serializers import DeviceSerializer
+from utils.exceptions import CustomError
+from utils.permission import IsTenantUser
+from .filters import DeviceFilter
+from utils.custom_modelviewset import CustomModelViewSet
+from apps.log.models import BizLog
+from apps.tenant import tenant_log
+
+# Create your views here.
+class DeviceViewSet(CustomModelViewSet):
+    permission_classes = [IsTenantUser]
+    queryset = DeviceModel.objects.all()
+    serializer_class = DeviceSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter(tenant=self.request.user.employee.tenant)
+        f = DeviceFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def perfrom_create(self, serializer):
+        super(DeviceViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        tenant_log(self.request.user.employee, BizLog.INSERT, u'添加设备信息[%s],id=%d' % (instance.name, instance.id),
+                   validated_data)
+
+    def perform_update(self, serializer):
+        #更新
+        super(DeviceViewSet, self).perform_update(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        tenant_log(self.request.user.employee, BizLog.INSERT, u'修改设备信息[%s],id=%d' % (instance.name, instance.id),
+                   validated_data)
+
+    def perform_destroy(self, instance):
+        #删除
+        if instance.tenant != self.request.user.employee.tenant:
+            raise CustomError(u'禁止跨租户操作!')
+        tenant_log(self.request.user.employee, BizLog.DELETE, u'删除设备信息[%s],id=%d' % (instance.name, instance.id))
+        super(DeviceViewSet, self).perform_destroy(instance)

+ 2 - 2
apps/tenant/serializers.py

@@ -31,11 +31,11 @@ class TenantJWTSerializer(JSONWebTokenSerializer):
                 employee = Employee.objects.filter(user=user).first()
                 if not user.is_active:
                     msg = u'禁用帐户,禁止登录'
-                    BizLog.objects.addnew(employee, user,  BizLog.INSERT,u'禁用帐户[%s]尝试登录系统,IP[%s]' % (user.username, get_remote_addr(self.request)))
+                    BizLog.objects.addnew(employee.tenant, user,  BizLog.INSERT,u'禁用帐户[%s]尝试登录系统,IP[%s]' % (user.username, get_remote_addr(self.request)))
                     raise serializers.ValidationError(msg)
 
                 payload = jwt_payload_handler(user)
-                BizLog.objects.addnew(employee, user, BizLog.INSERT,
+                BizLog.objects.addnew(employee.tenant, user, BizLog.INSERT,
                                       u'[%s]登录系统,IP[%s]' % (user.username,get_remote_addr(self.request)))
 
                 return {

+ 1 - 0
apps/tenant/urls.py

@@ -20,5 +20,6 @@ urlpatterns = [
     url(r'^inspection_order/', include('apps.tenant.inspection_order.urls')),
     url(r'^wxapp/', include('apps.wxapp.urls')),
     url(r'^equipment/', include('apps.tenant.equipment.urls')),
+    url(r'^device/', include('apps.tenant.device.urls')),
     url(r'^notices/', include('apps.tenant.notices.urls')),
 ]

+ 1 - 0
ly_baoxiu_admin/settings.py

@@ -54,6 +54,7 @@ INSTALLED_APPS = [
     'apps.tenant.config',
     'apps.tenant.building',
     'apps.tenant.equipment',
+    'apps.tenant.device',
     'apps.tenant.repair_order',
     'apps.tenant.inspection_order',
     'apps.wxapp',

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

@@ -99,8 +99,8 @@
             ,value: res.data.name ? res.data.name: res.data.username
           });
           layui.data(setter.tableName, {
-            key: 'permissions'
-            ,value: res.data.permissions
+            key: 'user_type'
+            ,value: res.data.user_type
           });
 
           //登入成功的提示与跳转

+ 7 - 7
uis/tenant/equipment/edit.html → uis/tenant/device/edit.html

@@ -41,28 +41,28 @@
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>编号:</label>
                             <div class="layui-input-block">
-                                <input type="text" name="number" lay-verify="required" placeholder="请输入编号"
+                                <input type="text" name="device_no" lay-verify="required" placeholder="请输入编号"
                                        autocomplete="off" class="layui-input">
                             </div>
                         </div>
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>型号:</label>
                             <div class="layui-input-block">
-                                <input type="text" name="type" class="layui-input" placeholder="请输入设备型号"
+                                <input type="text" name="device_model" class="layui-input" placeholder="请输入设备型号"
                                        autocomplete="off" lay-verify="required"/>
                             </div>
                         </div>
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>大地点:</label>
                             <div class="layui-input-block">
-                                <input type="text" name="big_address" placeholder="请输入大地点"
+                                <input type="text" name="branch" placeholder="请输入大地点"
                                        autocomplete="off" class="layui-input" lay-verify="required">
                             </div>
                         </div>
                         <div>
                             <label class="layui-form-label"><font color='red' size="4">*</font>小地点:</label>
                             <div class="layui-input-block">
-                                <input type="text" name="big_address" placeholder="请输入小地点"
+                                <input type="text" name="address" placeholder="请输入小地点"
                                        autocomplete="off" class="layui-input" lay-verify="required">
                             </div>
                         </div>
@@ -98,14 +98,14 @@
             var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
             form.val("component-form-element", editdata);
         }
-        form.render(null, 'component-form-element');
+        //form.render(null, 'component-form-element');
 
         form.on('submit(component-form-element)', function (data) {
             if (id) {
-                var url = '/tenant/equipment/' + id + '/';
+                var url = '/tenant/device/' + id + '/';
                 var type = 'put';
             } else {
-                url = '/tenant/equipment/';
+                url = '/tenant/device/';
                 type = 'post'
             }
 

+ 32 - 28
uis/tenant/equipment/index.html → uis/tenant/device/index.html

@@ -58,10 +58,10 @@
                 <div class="layui-col-md12">
                     <div class="LAY-btns" style="margin-bottom: 10px;">
                         <div style="float: left">
-                            <button class="layui-btn" id="equipment_add" data-permission="equipment.add_equipment"><i
+                            <button class="layui-btn" id="device_add"><i
                                     class="layui-icon layui-icon-add-circle"></i>添加
                             </button>
-                            <button class="layui-nav" data-permission="equipment.add_equipment">
+                            <button class="layui-nav">
                                 <div class="layui-nav-item">
                                     <a href="javascript:;" style="color:#fff;">导入</a>
                                     <dl class="layui-nav-child"> <!-- 二级菜单 -->
@@ -78,11 +78,11 @@
                                 </button>
                             </div>
                             <div class="seach_items">
-                                <input type="text" name="type" autocomplete="off" class="layui-input"
+                                <input type="text" name="device_model" autocomplete="off" class="layui-input"
                                        placeholder="设备型号"/>
                             </div>
                             <div class="seach_items">
-                                <input type="text" name="number" autocomplete="off" class="layui-input"
+                                <input type="text" name="device_no" autocomplete="off" class="layui-input"
                                        placeholder="设备编号"/>
                             </div>
                             <div class="seach_items">
@@ -92,14 +92,16 @@
                         </form>
                         <div style="clear: both;"></div>
                     </div>
-                    <table class="layui-hide" id="equipment_datagrid" lay-filter="equipment-operate"></table>
+                    <table class="layui-hide" id="device_datagrid" lay-filter="device-operate"></table>
 
-                    <script type="text/html" id="equipment-operate-bar">
+                    <script type="text/html" id="device-operate-bar">
                         <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="equipment_edit"
-                               data-permission="equipment.add_equipment">修改</a>
-                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="equipment_del"
-                               data-permission="equipment.delete_equipment">删除</a>
+                            <a class="layui-btn layui-btn-xs" lay-event="device_edit"
+                            >修改</a>
+                        </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="device_del"
+                            >删除</a>
                         </div>
                     </script>
                 </div>
@@ -121,15 +123,17 @@
             , admin = layui.admin;
 
         table.render({
-            elem: '#equipment_datagrid'
-            , url: '../../api/equipment.json'
+            elem: '#device_datagrid'
+            , url: '/tenant/device/'
             , cols: [[
                 {field: 'name', title: '名称', width: 200}
-                , {field: 'number', title: "编号", width: 200}
-                , {field: 'type', title: '型号', width: 350}
-                , {field: 'big_address', title: '大地点', width: 150}
-                , {field: 'small_address', title: '小地点', width: 200}
-                , {width: 110, align: 'center', fixed: 'right', toolbar: '#equipment-operate-bar'}
+                , {field: 'device_no', title: "编号", width: 200}
+                , {field: 'device_model', title: '型号', width: 200}
+                , {field: 'branch', title: '大地点', width: 150}
+                , {field: 'address', title: '小地点', width: 200}
+                , {field: 'create_user_text', title: '添加人', width: 100}
+                , {field: 'create_time', title: '添加时间', width: 200}
+                , {width: 150, align: 'center', fixed: 'right', toolbar: '#device-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -139,14 +143,14 @@
         });
         upload.render({
             elem: '#btn_import'
-            , url: '/tenant/equipment/import/'
+            , url: '/tenant/device/import/'
             , accept: 'file'
             , acceptMime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
             , exts: 'xlsx'
             , field: 'excel_file'
             , done: function (res) {
                 if (res.code == 0) {
-                    table.reload('equipment_datagrid', {});
+                    table.reload('device_datagrid', {});
                 } else {
                     layer.msg(res.msg);
                 }
@@ -156,20 +160,20 @@
             }
         });
         //监听工具条
-        table.on('tool(equipment-operate)', function (obj) {
+        table.on('tool(device-operate)', function (obj) {
             var data = obj.data;
-            if (obj.event === 'equipment_del') {
+            if (obj.event === 'device_del') {
                 layer.confirm('确定要删除吗?', function (index) {
                     layer.close(index);
                     admin.req({
-                        url: '/tenant/equipment/' + data.id + '/'
+                        url: '/tenant/device/' + data.id + '/'
                         , type: 'delete'
                         , done: function (res) {
-                            table.reload('equipment_datagrid', {});
+                            table.reload('device_datagrid', {});
                         }
                     });
                 });
-            } else if (obj.event === 'equipment_edit') {
+            } else if (obj.event === 'device_edit') {
                 table.editdata = data;
                 layer.open({
                     type: 2,
@@ -180,7 +184,7 @@
                     yes: function (index, dom) {
                         layui.onSubmitChild = function (data) {
                             layer.close(index);
-                            table.reload('equipment_datagrid', {});
+                            table.reload('device_datagrid', {});
                         };
                         layui.submitChild();
                     },
@@ -193,7 +197,7 @@
         });
 
         form.on('submit(query-form-element1)', function (data) {
-            table.reload('equipment_datagrid', {
+            table.reload('device_datagrid', {
                 where: data.field
                 , page: {curr: 1}
             });
@@ -201,7 +205,7 @@
             return false
         });
 
-        $('#equipment_add').on('click', function () {
+        $('#device_add').on('click', function () {
             layer.open({
                 type: 2,
                 title: '添加',
@@ -210,7 +214,7 @@
                 yes: function (index, dom) {
                     layui.onSubmitChild = function (data) {
                         layer.close(index);
-                        table.reload('equipment_datagrid', {});
+                        table.reload('device_datagrid', {});
                     };
                     layui.submitChild();
                 },

+ 12 - 12
uis/tenant/index.html

@@ -69,35 +69,35 @@
                         </a>
                         <dl class="layui-nav-child">
 
-                            <dd data-name="nav" data-permission="building.browse_building">
-                                <a lay-href="equipment/index.html">设备管理</a>
+                            <dd data-name="nav" data-user_type="1,2">
+                                <a lay-href="device/index.html">设备管理</a>
                             </dd>
 
-                            <dd data-name="nav" data-permission="employee.browse_employee">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="employee/index.html">员工管理</a>
                             </dd>
-                            <dd data-name="nav" data-permission="option.browse_option">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="option/index.html">系统选项</a>
                             </dd>
                         </dl>
                     </li>
                     <li data-name="set" class="layui-nav-item">
-                        <a href="javascript:;" lay-tips="报修巡检" lay-direction="2">
+                        <a href="javascript:;" lay-tips="报修巡检" lay-direction="1,2">
                             <i class="layui-icon layui-icon-set"></i>
                             <cite>报修巡检</cite>
                         </a>
                         <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="repair_order.browse_repair_order">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="repairManage/index.html">报修管理</a>
                             </dd>
                         </dl>
                         <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="inspection_order.browse_inspection_order">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="inspection/index.html">巡检管理</a>
                             </dd>
                         </dl>
                         <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="employee.browse_employee">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="visitor/index.html">报修人信息</a>
                             </dd>
                         </dl>
@@ -109,7 +109,7 @@
                             <cite>通知管理</cite>
                         </a>
                         <dl class="layui-nav-child">
-                            <dd data-name="nav" data-permission="notices.browse_notices">
+                            <dd data-name="nav" data-user_type="1,2">
                                 <a lay-href="notices/index.html">通知管理</a>
                             </dd>
                         </dl>
@@ -164,10 +164,10 @@
         if (!name) {
             location.href = '/tenant/account/login.html'; //没有用户,跳转到登录
         }
-        var permissions = layui.data(layui.setter.tableName)['permissions'];
+        var user_type = layui.data(layui.setter.tableName)['user_type'];
         $('#LAY-system-side-muen .layui-nav-child dd').each(function () {
-            var perm = $(this).data('permission');
-            if (permissions.indexOf(perm) === -1) {
+            var perm = $(this).data('user_type');
+            if (perm.indexOf(user_type) === -1) {
                 $(this).remove();
             }
         });