jiaweiqi hace 3 años
padre
commit
7b93b43e40

+ 2 - 1
apps/activity/models.py

@@ -16,7 +16,8 @@ from util.format import Formater
 class Activity(models.Model):
     branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT)
     title = models.CharField(max_length=200, verbose_name=u"标题")
-    describe = models.TextField(verbose_name=u'活动介绍')
+    describe = models.TextField(verbose_name=u'活动介绍', null=True, blank=True)
+    pic = models.CharField(max_length=500,verbose_name=u'活动图片', null=True, blank=True)
     end_date = models.DateField(verbose_name=u"截止日期")
     amount = models.FloatField(verbose_name=u"费用", default=0)
     rebate = models.FloatField(verbose_name=u"返利", default=0)

+ 6 - 0
apps/activity/serializers.py

@@ -188,12 +188,18 @@ class ActivitySerializer(serializers.ModelSerializer):
     check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
     enabled_text = serializers.SerializerMethodField()
     coupons = serializers.SerializerMethodField()
+    pic = serializers.SerializerMethodField()
 
 
     class Meta:
         model = Activity
         fields = '__all__'
 
+    def get_pic(self, obj):
+        if obj.pic:
+            return settings.MEDIA_URL + obj.pic
+        return ''
+
     def get_enabled_text(self, obj):
         if obj.enabled:
             return u'是'

+ 2 - 1
apps/activity/urls.py

@@ -27,6 +27,7 @@ urlpatterns = (
     url(r'^activity/signs_save/$', activity_signs_save),
     url(r'^activity/coupon_save/$', activity_coupon_save),
     url(r'^activity/code/$', activity_code),
-    url(r'^ueditor/images/$', ueditor_image),
+    # url(r'^ueditor/images/$', ueditor_image),
+    url(r'^upload/images/$', upload_image),
 )
 

+ 51 - 26
apps/activity/views.py

@@ -23,7 +23,7 @@ from apps.account.models import Branch
 from apps.WechatApplet.models import WechatApplet
 from .base import OrderUpdate
 from util.format import Formater
-from util.file_operation import PathAndRename, resizePicture
+from util.file_operation import PathAndRename, resizePicture, UploadFile, DeleteFile
 from django.http import JsonResponse as DJR
 
 
@@ -419,33 +419,58 @@ def activity_code(request):
         return JSONError(u'获取失败!')
 
 
-def ueditor_image(request):
+# def ueditor_image(request):
+#     try:
+#         upload_path = PathAndRename("upload/")
+#
+#         data = {}
+#         if request.FILES.getlist('upfile'):
+#             document = request.FILES.getlist('upfile')[0]
+#             type = document.name.split('.')[-1]
+#             name = timezone.now().strftime('%Y%m%d%H%M%S%f')
+#             filename = "%s-%s.%s" % (
+#                 upload_path.path, name, type)
+#             filename = filename.lower()
+#             full_filename = "%s/%s" % (settings.MEDIA_ROOT, filename)
+#             with open(full_filename, 'wb+') as destination:
+#                 for chunk in document.chunks():
+#                     destination.write(chunk)
+#
+#             resizePicture(full_filename, 500)
+#             data = {
+#                 "state": "SUCCESS",
+#                 "original": "%s.%s" % (name, type),
+#                 "title": "%s.%s" % (name, type),
+#                 "url": 'https://jpm.zzly.vip' + settings.MEDIA_URL + filename
+#             }
+#         return DJR(data, safe=False)
+#     except CustomError as e:
+#         return JSONError(e.get_error_msg())
+#     except Exception as e:
+#         traceback.print_exc()
+#         return JSONError(u'图片上传失败!')
+
+
+@token_required
+@login_required()
+def upload_image(request):
+    id = request.GET.get('id')
+    poster = request.FILES.get('image', None)
     try:
-        upload_path = PathAndRename("upload/")
-
-        data = {}
-        if request.FILES.getlist('upfile'):
-            document = request.FILES.getlist('upfile')[0]
-            type = document.name.split('.')[-1]
-            name = timezone.now().strftime('%Y%m%d%H%M%S%f')
-            filename = "%s-%s.%s" % (
-                upload_path.path, name, type)
-            filename = filename.lower()
-            full_filename = "%s/%s" % (settings.MEDIA_ROOT, filename)
-            with open(full_filename, 'wb+') as destination:
-                for chunk in document.chunks():
-                    destination.write(chunk)
-
-            resizePicture(full_filename, 500)
-            data = {
-                "state": "SUCCESS",
-                "original": "%s.%s" % (name, type),
-                "title": "%s.%s" % (name, type),
-                "url": 'https://jpm.zzly.vip' + settings.MEDIA_URL + filename
-            }
-        return DJR(data, safe=False)
+        if not poster:
+            raise CustomError(u'未找到上传文件!')
+        activity = Activity.getById(id)
+        if activity.delete:
+            raise CustomError(u'该活动已删除')
+        with transaction.atomic():
+            filename = UploadFile(poster, "upload/", width=500)
+            if activity.pic:
+                DeleteFile(activity.pic)
+            activity.pic = filename
+            activity.save()
+        return JSONResponse({})
     except CustomError as e:
         return JSONError(e.get_error_msg())
     except Exception as e:
         traceback.print_exc()
-        return JSONError(u'图片上传失败!')
+        return JSONError(u'上传失败!')

+ 9 - 1
apps/customer/activity/serializers.py

@@ -1,11 +1,19 @@
 # coding=utf-8
 
+from django.conf import settings
+
 from rest_framework import serializers
 from apps.activity.models import Activity
 
 
 class ActivitySerializer(serializers.ModelSerializer):
+    pic = serializers.SerializerMethodField()
 
     class Meta:
         model = Activity
-        fields = ('branch_address', 'branch_name', 'branch_tel', 'describe', 'title', 'amount', )
+        fields = ('branch_address', 'branch_name', 'branch_tel', 'describe', 'title', 'amount', 'pic', )
+
+    def get_pic(self, obj):
+        if obj.pic:
+            return settings.MEDIA_URL + obj.pic
+        return ''

+ 6 - 1
uis/views/activity/details.html

@@ -48,7 +48,9 @@
                                </tr>
                                <tr>
                                    <th style="width: 100px;">介绍</th>
-                                   <td id="describe" class="cell"></td>
+                                   <td>
+                                       <img id="pic" src="" alt="">
+                                   </td>
                                </tr>
                                 <tr>
                                    <th style="width: 100px;">截止日期</th>
@@ -94,6 +96,9 @@
 
             var id = layui.view.getParameterByName('id');
             var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata));
+            if (editdata.pic){
+                $('#pic').attr('src', 'https://jpm.zzly.vip' + editdata.pic)
+            }
             $('.cell').each(function (index, element) {
                 if (editdata[element.id]){
                     element.innerHTML =  (editdata[element.id]);

+ 12 - 12
uis/views/activity/edit.html

@@ -67,12 +67,12 @@
                   </div>
                 </div>
 
-                <div style="margin-top: 20px;">
+                <!--<div style="margin-top: 20px;">
                   <label class="layui-form-label"><font color='red' size="4">*</font>活动介绍:</label>
                   <div class="layui-input-block">
                     <script type="text/plain" id="myEditor"></script>
                   </div>
-                </div>
+                </div>-->
 
                 <div>
                   <label class="layui-form-label">门店地址:</label>
@@ -110,12 +110,12 @@
     ,form = layui.form;
     var id = layui.view.getParameterByName('id');
 
-    var um = UM.getEditor('myEditor', {
-        imageUrl: '/activity/ueditor/images/',
-        imagePath: "",
-    });
-    um.setWidth('100%');
-    $(".edui-body-container").css("width", "98%");
+    // var um = UM.getEditor('myEditor', {
+    //     imageUrl: '/activity/ueditor/images/',
+    //     imagePath: "",
+    // });
+    // um.setWidth('100%');
+    // $(".edui-body-container").css("width", "98%");
 
     laydate.render({
         elem: '#date'
@@ -125,8 +125,8 @@
     if(id){
         var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
         form.val("component-form-element", editdata);
-        um.setContent(editdata.describe);
-    }else{
+        // um.setContent(editdata.describe);
+     }else{
         admin.req({
             url: '/activity/self_branch/'
             , done: function (res) {
@@ -145,8 +145,8 @@
             layer.msg('返利不得超过价格的30%');
             return false;
         }
-        var describe = UM.getEditor('myEditor').getContent();
-        data.field['describe'] = describe;
+        // var describe = UM.getEditor('myEditor').getContent();
+        // data.field['describe'] = describe;
 
         admin.req({
             url: '/activity/activity/save/?id='+id

+ 21 - 2
uis/views/activity/index.html

@@ -48,6 +48,7 @@
                 <div class="layui-btn-group">
                     <a class="layui-btn layui-btn-xs" lay-event="view">查看</a>
                   <a class="layui-btn layui-btn-xs"  lay-event="edit">修改</a>
+                  <a class="layui-btn layui-btn-xs"  lay-event="upload_poster">上传介绍</a>
                   <a class="layui-btn layui-btn-xs"  lay-event="code">二维码</a>
                 </div>
             </script>
@@ -143,7 +144,7 @@
         ,{field:'branch_address', title:'门店地址',width: 100}
         ,{field:'create_time', title:'添加时间', width:300}
         ,{field:'enabled_text', title:'在用', width:90}
-        ,{width:150, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+        ,{width:220, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,where: {'enabled': 1}
       ,page: true
@@ -196,7 +197,25 @@
           area: ['70%', '90%'],
           content: 'wxapp_code.html?id='+data.id
         });
-      }
+      }else if(obj.event === 'upload_poster') {
+            layer.open({
+                type: 2,
+                title: '上传介绍',
+                area: ['600px', '450px'],
+                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: 'upload_poster.html?id=' + data.id
+            });
+        }
     });
 
     $('#btn_add').on('click', function(){

+ 105 - 0
uis/views/activity/upload_poster.html

@@ -0,0 +1,105 @@
+<!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">
+  <link rel="stylesheet" type="text/css" href="../../layuiadmin/style/formSelects-v4.css"/>
+    <style>
+        img{
+            width: 40%;
+            height: 30%;
+        }
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+      <div class="layui-col-md6">
+        <div class="layui-card">
+
+          <div class="layui-card-body">
+            <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">介绍图片:</label>
+                  <div class="layui-input-block">
+                      <button type="button" class="layui-btn-sm" id="upload_image">上传图片</button><br><br>
+                      <img class="layui-upload-img" id="show_image">
+                  </div>
+               </div>
+                <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+                  <button class="layui-btn" type="button" id="upload_save" style="display: none"></button>
+              </div>
+            </form>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+
+  <script src="../../layuiadmin/layui/layui.js"></script>
+  <script>
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index',
+    formSelects: 'formSelects-v4'
+  }).use(['index', 'form', 'utils', 'upload'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,upload = layui.upload
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+    var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+    if(editdata.pic){
+        $('#show_image').attr('src', 'https://jpm.zzly.vip' + editdata.pic);
+    }
+
+    form.render(null, 'component-form-element');
+
+    var form_data = {field:{}};
+    upload.render({
+         elem: '#upload_image',
+         url: '/activity/upload/images/?id=' + id,
+         auto: false,
+         field: 'image',
+         bindAction: '#upload_save',
+         choose: function(obj) {
+             obj.preview(
+                 function(index, file, result) {
+                     $('#show_image').attr('src', result);
+                 }
+             );
+         },
+        done: function (res) {
+            if (res.code != 0) {
+                layer.msg(res.msg);
+            }else {
+                parent.layui.onSubmitChild(res.data);
+            }
+        },
+        error: function () {
+            layer.msg('上传失败');
+        }
+    });
+
+    form.on('submit(component-form-element)', function (data) {
+         form_data = data;
+         $('#upload_save').click();
+        return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 16 - 1
util/file_operation.py

@@ -26,7 +26,20 @@ def resizePicture(file, width):
         pass
 
 
-def UploadFile(file, upload_path):
+def resizePictureWith(file, width):
+    '''如果图片宽度或高度超过width,将图片宽度或高度修改为width'''
+    try:
+        img = Image.open(file)
+        w, h = img.size
+        if w > width:
+            size = (width, int(h * width / w))
+            img = img.resize(size)
+            img.save(file)
+    except Exception as e:
+        pass
+
+
+def UploadFile(file, upload_path, width=None):
     upload_path = PathAndRename(upload_path)
     filename = "%s%s.%s" % (
         upload_path.path,
@@ -38,6 +51,8 @@ def UploadFile(file, upload_path):
     with open(full_filename, 'wb+') as destination:
         for chunk in file.chunks():
             destination.write(chunk)
+    if width:
+        resizePictureWith(full_filename, width)
     return filename