Ver Fonte

Merge remote-tracking branch 'origin/master'

wushaodong há 4 anos atrás
pai
commit
001ef19141

+ 15 - 29
apps/tenant/operation_help/models.py

@@ -9,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)
@@ -23,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'运维帮助图片'
 
@@ -39,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)
 
@@ -54,41 +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)
 
         radio_size = os.path.getsize(fullname)
         self.radio_size = "%.2f" % (radio_size/(1024*1024))
-        self.radio_path = "%s%s" % (settings.MEDIA_URL, filename)
+        self.file_path = "%s%s" % (settings.MEDIA_URL, filename)
         self.save()
 
-    def del_radio(self):
-        radio = self.radio_path
+    def del_file(self):
+        file_path = self.file_path
         self.delete()
-        DeleteFile(radio)
+        DeleteFile(file_path)
+
+
+

+ 20 - 5
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()
@@ -20,7 +19,23 @@ class OperationHelpSerializer(serializers.ModelSerializer):
         user = self.context['request'].user
         validated_data['create_user'] = user
         validated_data['tenant'] = self.context['request'].user.employee.tenant
+        content = self.initial_data['content']
         instance = super(OperationHelpSerializer, self).create(validated_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
+        operation_files = OperationHelpUpfile.objects.filter(tenant=instance.tenant,operation_help__isnull=True)
+        for operation_file in operation_files:
+            if operation_file.file_path in content:
+                operation_file.update(operation_help=instance)
+            else:
+                operation_file.del_file()
+        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

+ 8 - 11
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 = OperationHelpUpfile.objects.create(tenant=user.employee.tenant)
         operation_help_img._add_img(file, user.id)
-        image = operation_help_img.image
+        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 = OperationHelpUpfile.objects.create(tenant=user.employee.tenant)
         operation_help_radio._add_radio(file, user.id)
-        radio_path = operation_help_radio.radio_path
+        radio_path = operation_help_radio.file_path
         if radio_path:
             data = {
                 "src": radio_path
@@ -71,12 +71,9 @@ class OperationHelpViewSet(CustomModelViewSet):
             instance = self.get_object()
             if instance.tenant != request.user.employee.tenant:
                 raise CustomError(u'禁止跨企业操作!')
-            operation_help_imgs = OperationHelpImg.objects.filter(operation_help=instance)
-            for operation_help_img in operation_help_imgs:
-                operation_help_img.del_images()
-            operation_help_radios = OperationHelpRadio.objects.filter(operation_help=instance)
-            for operation_help_radio in operation_help_radios:
-                operation_help_radio.del_radio()
+            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()

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
uis/layuiadmin/layui/lay/modules/layedit.js


+ 35 - 0
uis/tenant/operation_help/edit.html

@@ -69,6 +69,8 @@
 
         var id = layui.view.getParameterByName('id');
 
+        var oldContent = '';
+
         var editIndex = layedit.build('content_demo', {
             height: 180,
             tool: [
@@ -92,10 +94,41 @@
              }
         });
 
+        // function compareStr(oldStr, newStr){
+        //     //如果字符串相同的话就不在比较
+        //     if(oldStr === newStr) return [];
+        //     //   比较旧的字符串中的src是否还包含在新的字符串中,如果没有表示需要删掉该file
+        //     let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i // 匹配字符串中的src
+        //     let imgReg = /<img.*?(?:>|\/>)/gi //匹配img标签
+        //     let videoReg = /<video.*?(?:>|\/>)/gi //匹配video标签
+        //     let arrImg = oldStr.match(imgReg);
+        //     let arrVideo = oldStr.match(videoReg);
+        //     let tagArr = [...arrImg, ...arrVideo];
+        //     let srcArr = [];
+        //     //获取旧字符串中的所有src,push进srcArr数组。
+        //     if(tagArr && tagArr.length > 0){
+        //         tagArr.forEach(item=>{
+        //             let src = item.match(srcReg);
+        //             srcArr.push(src[1])
+        //         })
+        //     }
+        //     //遍历srcArr数组,并与新字符串对比,获取需要删除的src(新字符串中不包含旧的路径需要删除)
+        //     let delArr = [];
+        //     if(srcArr && srcArr.length > 0){
+        //         srcArr.forEach(item=>{
+        //             if(newStr.indexOf(item) === -1){
+        //                 delArr.push(item)
+        //             }
+        //         })
+        //     }
+        //     return delArr
+        // }
+
         form.render(null, 'component-form-element');
 
         if (id) {
             var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+            oldContent = editdata.content;
             form.val("component-form-element", editdata);
             if(editdata.content){
               layedit.setContent(editIndex, editdata.content, false);
@@ -108,6 +141,8 @@
             //layer.msg(JSON.stringify(data.field));
             //富文本中的内容
             data.field.content = layedit.getContent(editIndex);
+            let newContent = data.field.content;
+           // let delArr = compareStr(oldContent, newContent);
             if(!data.field.enable){
                 data.field.enable = 0
             }

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff