Bläddra i källkod

Merge branch 'master' of http://git.zzliaoyuan.com:4000/wushaodong/ly_baoxiu_admin

lijiangwei 4 år sedan
förälder
incheckning
37ea9140ce

+ 1 - 0
.gitignore

@@ -11,4 +11,5 @@ local_settings.*
 venv
 .idea
 python*
+uis/up*
 .history

+ 7 - 1
apps/tenant/device/views.py

@@ -11,6 +11,8 @@ from apps.log.models import BizLog
 from apps.tenant import tenant_log
 from utils import response_ok, response_error
 from .resources import DeviceImporter
+from django.conf import settings
+from apps.WechatApplet.models import WechatApplet
 
 # Create your views here.
 class DeviceViewSet(CustomModelViewSet):
@@ -66,7 +68,11 @@ class DeviceImportView(APIView):
                         data['address'] = row[u'大地点']
                         data['create_user'] = request.user
                         data['tenant'] = request.user.employee.tenant
-                        DeviceModel.objects.create(**data)
+                        instance = DeviceModel.objects.create(**data)
+                        # applet = WechatApplet.objects.filter(authorizer_appid=settings.WEAPP['appid']).first()
+                        # filename = applet.getDeviceCode(instance.id, instance.tenant.company_no)
+                        # instance.wxapp_img = "{0}{1}".format(settings.MEDIA_URL, filename)
+                        # instance.save()
                     except CustomError as e:
                         raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
                     except Exception as e:

+ 20 - 41
apps/tenant/operation_help/models.py

@@ -1,3 +1,5 @@
+import os
+
 from django.db import models
 from django.conf import settings
 from PIL import Image
@@ -7,7 +9,7 @@ from utils.file_operation import UploadFile, DeleteFile
 
 class OperationHelp(models.Model):
     title = models.CharField(verbose_name=u'标题', max_length=100)
-    content = models.TextField(verbose_name=u'内容')
+    content = models.TextField(verbose_name=u'内容',blank=True, 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)
@@ -21,15 +23,16 @@ class OperationHelp(models.Model):
         verbose_name = u'运维帮助'
 
 
-class OperationHelpImg(models.Model):
+class OperationHelpUpfile(models.Model):
     operation_help = models.ForeignKey(OperationHelp,verbose_name=u'运维帮助', on_delete=models.PROTECT,null=True)
-    image = models.CharField(verbose_name=u'图片路径', max_length=250)
+    file_path = models.CharField(verbose_name=u'路径', max_length=250)
     width = models.IntegerField(verbose_name=u"图片宽度")
     height = models.IntegerField(verbose_name=u"图片高度")
+    radio_size = models.FloatField(verbose_name="视频大小", blank=True, default=0)
     tenant = models.ForeignKey(Tenant, verbose_name=u'企业', editable=False, on_delete=models.PROTECT, null=True)
 
     class Meta:
-        db_table = 'operation_help_img'
+        db_table = 'operation_help_upfile'
         ordering = ['-id']
         verbose_name = u'运维帮助图片'
 
@@ -37,7 +40,7 @@ class OperationHelpImg(models.Model):
         width = None
         height = None
 
-        path = "operation_help_img/"
+        path = "operation_help_upfile/"
         filename = UploadFile(file, path, user_id)
         fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
 
@@ -52,50 +55,26 @@ class OperationHelpImg(models.Model):
         except:
             pass
 
-        self.image = "%s%s" % (settings.MEDIA_URL, filename)
+        self.file_path = "%s%s" % (settings.MEDIA_URL, filename)
         self.width = width
         self.height = height
         self.save()
 
-    def del_images(self):
-        image = self.image
-        # self.delete()
-        DeleteFile(image)
-
-class OperationHelpRadio(models.Model):
-    operation_help = models.ForeignKey(OperationHelp, verbose_name=u'运维帮助', on_delete=models.PROTECT, null=True)
-    radio_path = models.CharField(verbose_name=u'视频路径', max_length=250)
-    radio_size = models.FloatField(verbose_name="视频大小",blank=True, default=0)
-    radio_time = models.FloatField(verbose_name="视频时长",blank=True, default=0)
-    tenant = models.ForeignKey(Tenant, verbose_name=u'企业', editable=False, on_delete=models.PROTECT, null=True)
-
-    class Meta:
-        db_table = 'operation_help_radio'
-        ordering = ['-id']
-        verbose_name = u'运维帮助视频'
-
     def _add_radio(self, file, user_id):
 
-
-        path = "operation_help_radio/"
+        path = "operation_help_upfile/"
         filename = UploadFile(file, path, user_id)
         fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
 
-        # try:
-        #     img = Image.open(fullname)
-        #     width, height = img.size
-        #     # 缩略图压缩宽或高最大200
-        #     if width > 1440:
-        #         img = img.resize((1440, int((height / width) * 1440)), Image.ANTIALIAS)
-        #         img.save(fullname)
-        #         width, height = img.size
-        # except:
-        #     pass
-
-        self.radio_path = "%s%s" % (settings.MEDIA_URL, filename)
+        radio_size = os.path.getsize(fullname)
+        self.radio_size = "%.2f" % (radio_size/(1024*1024))
+        self.file__ath = "%s%s" % (settings.MEDIA_URL, filename)
         self.save()
 
-    def del_radio(self):
-        radio = self.radio_path
-        # self.delete()
-        DeleteFile(radio)
+    def del_file(self):
+        file_path = self.file_path
+        self.delete()
+        DeleteFile(file_path)
+
+
+

+ 14 - 6
apps/tenant/operation_help/serializer.py

@@ -1,6 +1,5 @@
 from rest_framework import serializers
-from .models import OperationHelp,OperationHelpImg,OperationHelpRadio
-from django.conf import settings
+from .models import OperationHelp,OperationHelpUpfile
 
 class OperationHelpSerializer(serializers.ModelSerializer):
     enable_text = serializers.SerializerMethodField()
@@ -21,7 +20,16 @@ class OperationHelpSerializer(serializers.ModelSerializer):
         validated_data['create_user'] = user
         validated_data['tenant'] = self.context['request'].user.employee.tenant
         instance = super(OperationHelpSerializer, self).create(validated_data)
-        if 'file' in self.initial_data:
-            OperationHelpImg.objects.filter(tenant=instance.tenant,operation_help__isnull=True,).update(operation_help=instance)
-            OperationHelpRadio.objects.filter(tenant=instance.tenant,operation_help__isnull=True,).update(operation_help=instance)
-        return instance
+        OperationHelpUpfile.objects.filter(tenant=instance.tenant,operation_help__isnull=True,).update(operation_help=instance)
+        return instance
+
+    def update(self, instance, validated_data):
+        content = self.initial_data['content']
+        operation_files = OperationHelpUpfile.objects.filter(operation_help=instance)
+        for operation_file in operation_files:
+            if not operation_file.file_path in content:
+                operation_file.del_file()
+
+        OperationHelpUpfile.objects.filter(tenant=instance.tenant, operation_help__isnull=True,).update(operation_help=instance)
+        instance = super(OperationHelpSerializer, self).update(instance, validated_data)
+        return instance

+ 10 - 7
apps/tenant/operation_help/views.py

@@ -4,7 +4,7 @@ from utils.custom_modelviewset import CustomModelViewSet
 from rest_framework.decorators import action
 import json
 
-from .models import OperationHelp,OperationHelpImg,OperationHelpRadio
+from .models import OperationHelp,OperationHelpUpfile
 from utils.permission import IsAdministratorUser
 from .serializer import OperationHelpSerializer
 from apps.tenant import tenant_log
@@ -42,9 +42,9 @@ class OperationHelpViewSet(CustomModelViewSet):
     def upload_image(self, request):
         file = self.request.FILES.get('file')
         user = self.request.user
-        operation_help_img = OperationHelpImg.objects.create(tenant=user.employee.tenant)
-        operation_help_img._add_img(file, user)
-        image = operation_help_img.image
+        operation_help_img = OperationHelpUpfile.objects.create(tenant=user.employee.tenant)
+        operation_help_img._add_img(file, user.id)
+        image = operation_help_img.file_path
         if image:
             data={
                 "src": image
@@ -56,9 +56,9 @@ class OperationHelpViewSet(CustomModelViewSet):
     def upload_radio(self, request):
         file = self.request.FILES.get('file')
         user = self.request.user
-        operation_help_radio = OperationHelpRadio.objects.create(tenant=user.employee.tenant)
-        operation_help_radio._add_radio(file, user)
-        radio_path = operation_help_radio.radio_path
+        operation_help_radio = OperationHelpUpfile.objects.create(tenant=user.employee.tenant)
+        operation_help_radio._add_radio(file, user.id)
+        radio_path = operation_help_radio.file_path
         if radio_path:
             data = {
                 "src": radio_path
@@ -71,6 +71,9 @@ class OperationHelpViewSet(CustomModelViewSet):
             instance = self.get_object()
             if instance.tenant != request.user.employee.tenant:
                 raise CustomError(u'禁止跨企业操作!')
+            operation_help_files = OperationHelpUpfile.objects.filter(operation_help=instance)
+            for operation_help_file in operation_help_files:
+                operation_help_file.del_file()
             super(OperationHelpViewSet, self).destroy(self, request, *args, **kwargs)
             tenant_log(self.request.user.employee, BizLog.DELETE, u'删除运维帮助[%s],id=%d' % (instance.title, instance.id))
         return response_ok()

+ 2 - 2
apps/tenant/repair_order/views.py

@@ -99,7 +99,7 @@ class RepairOrderViewSet(CustomModelViewSet):
             with transaction.atomic():
                 instance = RepairOrder.get_instance_by_id(pk, user.employee.tenant)
                 if not instance.status == settings.CHECKED:
-                    return response_ok('当前报修工单状态非待派单状态,不能进行派单!')
+                    return response_error('当前报修工单状态非待派单状态,不能进行派单!')
                 instance.dispatch_repair_order(user, user_ids)
             if user.id != user_ids:
                 user = User.objects.filter(id=user_ids).first()
@@ -124,7 +124,7 @@ class RepairOrderViewSet(CustomModelViewSet):
             with transaction.atomic():
                 instance = RepairOrder.get_instance_by_id(pk, user.employee.tenant)
                 if not instance.status == settings.DISPATCH:
-                    return response_ok('当前报修单状态还未派单,不能进行转单!')
+                    return response_error('当前报修单状态还未派单,不能进行转单!')
                 instance.repair_users_id = user_ids
                 instance.save()
                 # 记录操作

+ 19 - 1
uis/tenant/device/index.html

@@ -110,6 +110,9 @@
                             <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="device_del"
                             >删除</a>
                         </div>
+                        <div class="layui-btn-group">
+                            <a class="layui-btn layui-btn-xs" lay-event="print">打印二维码</a>
+                        </div>
                     </script>
                 </div>
             </div>
@@ -142,7 +145,7 @@
                 , {field: 'repair_count', title: '维修次数', width: 100}
                 , {field: 'create_user_text', title: '添加人', width: 100}
                 , {field: 'create_time', title: '添加时间', width: 200}
-                , {width: 150, align: 'center', fixed: 'right', toolbar: '#device-operate-bar'}
+                , {width: 200, align: 'center', fixed: 'right', toolbar: '#device-operate-bar'}
             ]]
             , page: true
             , height: 'full-108'
@@ -202,6 +205,21 @@
                     },
                     content: 'edit.html?id=' + data.id
                 });
+            }else if (obj.event === 'print') {
+                layer.open({
+                    type: 2,
+                    title: '打印',
+                    shadeClose: true,
+                    area: ['900px', '90%'],
+                    btn: ['打印', '取消'],
+                    yes: function (index, dom) {
+                        $("#layui-layer-iframe" + index)[0].contentWindow.doPrint();
+                    },
+                    btn2: function (index, layero) {
+                        layer.close(index);
+                    },
+                    content: 'print.html'
+                });
             }
         });
 

+ 98 - 0
uis/tenant/device/print.html

@@ -0,0 +1,98 @@
+<!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>
+        h3, td, th {
+            color: #000000
+        }
+
+        .layui-table td, .layui-table th {
+            border-color: #000000;
+            height: 1px
+        }
+
+        .title {
+            text-align: center;
+            width: 12%;
+            padding-top: 5px;
+            padding-bottom: 5px;
+            border-width: 1px;
+            border-color: rgb(0, 0, 0);
+        }
+
+        .cell {
+            text-align: center;
+            border-width: 1px;
+            border-color: rgb(0, 0, 0);
+        }
+
+        .content {
+            padding: 5px;
+            border-width: 1px;
+            border-color: rgb(0, 0, 0);
+            position: relative;
+        }
+
+        .img {
+            width: 10px;
+            height: 10px;
+            position: absolute;
+        }
+    </style>
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+
+                    <div id="print_div" class="qrcode">
+                        <canvas width="40" height="40" >
+                        </canvas>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="../../layuiadmin/layui/layui.js?t=1"></script>
+<script src="../../layuiadmin/layui/qrcode.js"></script>
+
+<script>
+    layui.config({
+        base: '../../../layuiadmin/' //静态资源所在路径
+    }).extend({
+        index: 'lib/index' //主入口模块
+    }).use(['index', 'table'], function () {
+        var $ = layui.$
+            , admin = layui.admin
+        $('.qrcode').empty()
+        $('.qrcode').qrcode({width: 60, height: 60, text: 'device=50'});
+        var canvas = $('.qrcode canvas')
+        var img = canvas[0].toDataURL("image/png")
+        $('.qrcode').html("<div align=\"center\"><img src='" + img + "'></div>")
+
+
+    });
+
+    function doPrint() {
+        document.body.innerHTML = document.getElementById('print_div').innerHTML;
+        window.print();
+        parent.layer.closeAll('iframe');
+    }
+
+</script>
+</body>
+</html>
+

+ 1 - 1
uis/tenant/repairManage/index.html

@@ -182,7 +182,7 @@
                     content: 'detail.html'
                 })
             } else if (obj.event === 'dispatch') {
-                if (data.status < 1) {
+                if (data.status == 1) {
                     layer.msg('该报修单未审核,禁止派工!');
                     return false
                 }

BIN
uis/up/operation_help_img/15517558888_20210419155852833879.png


BIN
uis/up/operation_help_img/15517558888_20210419160730330472.jpg


BIN
uis/up/operation_help_img/15517558888_20210419160820682683.png


BIN
uis/up/operation_help_img/15517558888_20210419161131714864.jpg


BIN
uis/up/operation_help_img/15517558888_20210419161339089783.png


BIN
uis/up/operation_help_img/15517558888_20210419161353236826.png


BIN
uis/up/operation_help_img/15517558888_20210419164648087694.png


BIN
uis/up/operation_help_img/15517558888_20210419172237203453.jpg