jiaweiqi 3 anni fa
parent
commit
234a6ea558

+ 14 - 0
apps/commodity/models.py

@@ -4,6 +4,8 @@ from django.db import models
 from django.utils import timezone
 from django.conf import settings
 
+from utils.exceptions import CustomError
+
 from apps.images.models import Images
 from apps.option.models import Option
 
@@ -62,3 +64,15 @@ class CommodityImage(models.Model):
         verbose_name = u'商品图片'
         default_permissions = ()
         permissions = []
+
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的ID')
+
+        instance = CommodityImage.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的产品图片')
+        return instance

+ 14 - 3
apps/commodity/serializers.py

@@ -23,6 +23,10 @@ class CommoditySerializer(serializers.ModelSerializer):
     vip_price = serializers.SerializerMethodField()
     point_price = serializers.SerializerMethodField()
 
+    show_image_url = serializers.CharField(source='show_image.picture', read_only=True)
+    detail_image = serializers.SerializerMethodField()
+    carousel_image = serializers.SerializerMethodField()
+
     class Meta:
         model = Commodity
         fields = '__all__'
@@ -36,11 +40,19 @@ class CommoditySerializer(serializers.ModelSerializer):
     def get_point_price(self, obj):
         return Formater.formatPriceShow(obj.point_price)
 
+    def get_detail_image(self, obj):
+        count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.DETAILS).count()
+        return count
+
+    def get_carousel_image(self, obj):
+        count = CommodityImage.objects.filter(commodity=obj, type=CommodityImage.CAROUSEL).count()
+        return count
+
     def validate(self, attrs):
         if 'category' in attrs and attrs['category']:
             if not attrs['category'].enable:
                 raise CustomError(u'该商品类别已被禁用,请刷新后重试!')
-            if not attrs['category'].delete:
+            if attrs['category'].delete:
                 raise CustomError(u'该商品类别已被删除,请刷新后重试!')
         if 'price' in self.initial_data:
             attrs['price'] = Formater.formatPrice(self.initial_data['price'])
@@ -70,11 +82,10 @@ class CommoditySerializer(serializers.ModelSerializer):
 
 class CommodityImageSerializer(serializers.ModelSerializer):
     img_url = serializers.SerializerMethodField()
-    image_name = serializers.CharField(source='img.name', read_only=True)
 
     def get_img_url(self, obj):
         return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
 
     class Meta:
         model = CommodityImage
-        fields = ('img_url', 'image_name', 'id',)
+        fields = ('img_url', 'id',)

+ 2 - 3
apps/commodity/urls.py

@@ -6,11 +6,10 @@ from rest_framework.routers import SimpleRouter
 from .views import *
 
 urlpatterns = [
-    # url(r'search/$', PackageSearch.as_view()),
-    url(r'dict/$', CommodityDict.as_view()),
+    url(r'^dict/$', CommodityDict.as_view()),
+    url(r'^del_images/(?P<pk>[0-9]+)/$', DeleteCommodityImageView.as_view()),
 ]
 
 router = SimpleRouter()
-router.register(r'images', CommodityImageViewSet)
 router.register(r'', CommodityViewSet)
 urlpatterns += router.urls

+ 58 - 96
apps/commodity/views.py

@@ -1,12 +1,16 @@
 # coding=utf-8
 
 from django.db import transaction
+
 from rest_framework.decorators import action
 from rest_framework.views import APIView
+from rest_framework import generics
+
 from utils import response_ok
 from utils.permission import IsEmployee
 from utils.exceptions import CustomError
 from utils.custom_modelviewset import CustomModelViewSet
+
 from apps.log.models import BizLog
 from apps.images.models import Images
 from apps.commodity.models import Commodity, CommodityImage
@@ -59,114 +63,72 @@ class CommodityViewSet(CustomModelViewSet):
         return response_ok()
 
     @action(methods=['post'], detail=True)
-    def update_image(self, request, pk):
-        file = request.FILES.get('image', None)
+    def upload_show_image(self, request, pk):
+        file = request.FILES.get('banner_img', None)
         user = request.user
+
         instance = self.get_object()
         if instance.delete:
             raise CustomError(u'该商品已删除,禁止操作!')
 
-        with transaction.atomic():
-            serializer = self.get_serializer(instance, data=request.data)
-            serializer.is_valid(raise_exception=True)
-            self.perform_update(serializer)
+        if not file:
+            raise CustomError(u'未发现上传文件!')
 
-            # tenant_log(user.employee, BizLog.UPDATE, u'修改商品[%s],id=%d' % (instance.name, instance.id), request.data)
+        with transaction.atomic():
+            image = Images.objects._addnew(user, Images.COMMODITY_SHOW_IMAGE, file)
+            old_image = instance.show_image
+            instance.show_image = image
+            instance.save()
+            if old_image:
+                old_image.del_images()
+        return response_ok()
 
-            if file:
-                old_thumbnail = instance.thumbnail
-                thumbnail = Images.objects.employee_addnew(user.employee, Images.PACKAGE_THUMBNAIL_FILE, file)
-                instance.thumbnail = thumbnail
-                instance.save()
-                if old_thumbnail:
-                    old_thumbnail.del_images()
+    @action(methods=['post'], detail=True)
+    def upload_images(self, request, pk):
+        type = request.POST.get('type')
 
+        instance = self.get_object()
+        with transaction.atomic():
+            for i in range(10):
+                file = request.data.get('file{}'.format(i))
+                if not file:
+                    continue
+                if type == 'upload_carousel':
+                    image = Images.objects._addnew(request.user, Images.COMMODITY_CAROUSEL_IMAGE, file)
+                    CommodityImage.objects.create(commodity=instance, type=CommodityImage.CAROUSEL, image=image)
+                elif type == 'upload_detail':
+                    image = Images.objects._addnew(request.user, Images.COMMODITY_DETAILS_IMAGE, file)
+                    CommodityImage.objects.create(commodity=instance, type=CommodityImage.DETAILS, image=image)
         return response_ok()
-    #
-    # @action(methods=['post'], detail=True)
-    # def upload_playbill(self, request, pk):
-    #     if not self.request.user.has_perm('package.edit_package'):
-    #         raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
-    #     file = request.FILES.get('image', None)
-    #     user = request.user
-    #     instance = self.get_object()
-    #     if instance.delete:
-    #         raise CustomError(u'该商品已删除,禁止操作!')
-    #     if instance.tenant != user.employee.tenant:
-    #         raise CustomError(u'禁止跨租户操作!')
-    #     if not file:
-    #         raise CustomError(u'未发现上传文件!')
-    #
-    #     with transaction.atomic():
-    #         # tenant_log(user.employee, BizLog.UPDATE, u'商品[%s]上传海报,id=%d' % (instance.name, instance.id))
-    #         old_playbill = instance.playbill
-    #         playbill = Images.objects.employee_addnew(user.employee, Images.PACKAGE_PLAYBILL_FILE, file)
-    #         instance.playbill = playbill
-    #         instance.save()
-    #         if old_playbill:
-    #             old_playbill.del_images()
-    #
-    #     return response_ok()
-    #
-    # @action(methods=['post'], detail=True)
-    # def upload_images(self, request, pk):
-    #     if not self.request.user.has_perm('package.edit_package'):
-    #         raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
-    #     instance = self.get_object()
-    #     images = request.FILES.get('images', None)
-    #     user = request.user
-    #
-    #     if instance.delete:
-    #         raise CustomError(u'该商品已删除,禁止操作!')
-    #     if instance.tenant != user.employee.tenant:
-    #         raise CustomError(u'禁止跨租户操作!')
-    #     if not images:
-    #         raise CustomError(u'未找到上传文件!')
-    #
-    #     with transaction.atomic():
-    #         image = Images.objects.employee_addnew(user.employee, Images.PACKAGE_FILE, images)
-    #         CommodityImage.objects.create(main=instance, img=image)
-    #
-    #         # tenant_log(user.employee, BizLog.INSERT, u'商品[%s]上传图片儿,id=%d' % (instance.name, instance.id))
-    #
-    #     return response_ok()
-
-
-class CommodityImageViewSet(CustomModelViewSet):
-    permission_classes = [IsEmployee, ]
-    queryset = CommodityImage.objects.filter()
-    serializer_class = CommodityImageSerializer
-
-    def filter_queryset(self, queryset):
-        f = CommodityImageFilter(self.request.GET, queryset=queryset)
-        return f.qs
 
-    def list(self, request, *args, **kwargs):
-        queryset = self.filter_queryset(self.get_queryset())
-        serializer = self.get_serializer(queryset, many=True)
-        return response_ok(serializer.data)
+    @action(methods=['post'], detail=True)
+    def query_images(self, request, pk):
+        type = request.POST.get('type')
+        instance = self.get_object()
+        data = []
+        rows = CommodityImage.objects.filter(commodity_id=instance.id)
+        if type == 'upload_carousel':
+            rows = rows.filter(type=CommodityImage.CAROUSEL)
+        elif type == 'upload_detail':
+            rows = rows.filter(type=CommodityImage.DETAILS)
+
+        for row in rows:
+            image_path = row.image.get_path()
+            item = {
+                'id': row.id,
+                'src': image_path,
+            }
+            data.append(item)
+        return response_ok(data)
+
+
+class DeleteCommodityImageView(generics.DestroyAPIView):
+    permission_classes = [IsEmployee, ]
 
     def destroy(self, request, *args, **kwargs):
         with transaction.atomic():
-            instance = self.get_object()
-            if instance.main.tenant != request.user.employee.tenant:
-                raise CustomError(u'禁止跨租户操作!')
-
-            # tenant_log(self.request.user.employee, BizLog.DELETE, u'删除商品[%s]图片,id=%d' % (instance.main.name, instance.main.id))
-            img = instance.img
+            instance = CommodityImage.getById(kwargs['pk'])
+            image = instance.image
             instance.delete()
-            img.del_images()
+            image.del_images()
         return response_ok()
-
-
-# class PackageSearch(APIView):
-#     permission_classes = [IsEmployee, ]
-#
-#     def get(self, request):
-#         keyword = request.GET.get('keyword')
-#         tenant = request.user.employee.tenant
-#         rows = Package.objects.filter(delete=False, enabled=True, tenant=tenant)
-#         if keyword:
-#             rows = rows.filter(name__icontains=keyword)
-#         serializer = PackageSerializer(rows, many=True)
-#         return response_ok(serializer.data)

+ 1 - 1
apps/images/models.py

@@ -16,7 +16,7 @@ class ImagesManager(models.Manager):
 
         path = ImagesManager.calculatePath(type)
         filename = UploadFile(file, path)
-        fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
+        fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
 
         try:
             img = Image.open(fullname)

+ 1 - 1
apps/option/urls.py

@@ -5,7 +5,7 @@ from rest_framework.routers import SimpleRouter
 from .views import *
 
 urlpatterns = [
-    url(r'dict/$', DictView.as_view()),
+    url(r'^dict/$', DictView.as_view()),
 ]
 
 router = SimpleRouter()

+ 4 - 4
cosmetics_shop/settings.py

@@ -163,7 +163,7 @@ USE_I18N = True
 
 USE_L10N = True
 
-USE_TZ = True
+USE_TZ = False
 
 
 # Static files (CSS, JavaScript, Images)
@@ -181,7 +181,7 @@ MEDIA_ROOT = os.path.join(BASE_DIR, "uis/up/")
 UIS_URL = '/'
 UIS_ROOT = os.path.join(BASE_DIR, "uis/")
 
-SERVER_DOMAIN = 'https://xapp.aiche360.cn'
+SERVER_DOMAIN = 'http://127.0.0.1:8089'
 
 JWT_AUTH = {
     'JWT_EXPIRATION_DELTA': datetime.timedelta(days=30),
@@ -210,9 +210,9 @@ REST_FRAMEWORK = {
     'DEFAULT_FILTER_BACKENDS': (
         'django_filters.rest_framework.DjangoFilterBackend',
     ),
-    #'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
+    # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
     'DEFAULT_PAGINATION_CLASS': 'utils.pagination.CustomPagination',
-    #'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
+    # 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
     'EXCEPTION_HANDLER': 'utils.handler.custom_exception_handler',
     'PAGE_SIZE': 10,
     'DATETIME_FORMAT': "%Y-%m-%d %H:%M:%S",

+ 0 - 153
uis/views/commodity/cate_edit.html

@@ -1,153 +0,0 @@
-<!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">
-
-</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-form-item">
-                            <label class="layui-form-label">
-                                <font color='red' size="4">*</font>名称:
-                            </label>
-                            <div class="layui-input-block">
-                                <input type="text" name="name" lay-verify="required" placeholder="请输入名称"
-                                       autocomplete="off"
-                                       class="layui-input">
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">
-                                <font color='red' size="4">*</font>是否在用:
-                            </label>
-                            <div class="layui-input-block">
-                                <input type="checkbox" name="enable" lay-skin="switch" lay-text="是|否" checked=""
-                                       value="1">
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label"><font color='red' size="4">*</font>图片:</label>
-                            <div class="layui-input-block">
-                                <button type="button" class="layui-btn-sm" id="banner_img">上传图片</button>
-                                <br><br>
-                                <img class="layui-upload-img" id="banner_img_demo" style="max-height: 200px;">
-                            </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_image" style="display: none"></button>
-                    </form>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-
-<script src="../../layuiadmin/layui/layui.js"></script>
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index',
-    }).use(['index', 'form', 'utils',], function () {
-        var $ = layui.$
-            , admin = layui.admin
-            , upload = layui.upload
-            , form = layui.form;
-
-        var id = layui.view.getParameterByName('id');
-        form.render(null, 'component-form-element');
-
-        if (id) {
-            var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
-            form.val("component-form-element", editdata);
-            $('#banner_img_demo').attr('src', editdata.image);
-        }
-        // 图片上传
-        var form_data = {},
-            imgurl = id ? '/commodity/commodity_category/' + id + '/update_category/' : '/commodity/commodity_category/',
-            method = id ? 'post' : 'put';
-        upload.render({
-            elem: '#banner_img'
-            , url: imgurl
-            , method: method
-            , accept: 'images'
-            , auto: false
-            , field: "banner_img"
-            , bindAction: "#upload_image",
-            choose: function (obj) {
-                obj.preview(
-                    function (index, file, result) {
-                        $("#banner_img_demo").attr("src", result)
-                    }
-                )
-            },
-            data: {
-                data: function () {
-                    return JSON.stringify(form_data)
-                }
-            },
-            done: function (res) {
-                parent.layui.onSubmitChild(res);
-            },
-            error: function () {
-                layer.msg('保存失败');
-            }
-        });
-
-        form.on('submit(component-form-element)', function (data) {
-            //layer.msg(JSON.stringify(data.field));
-            if (!data.field.enable) {
-                data.field.enable = 0
-            }
-            form_data = data.field
-            var _banner_img = data.field.banner_img
-            delete form_data.banner_img
-            delete form_data.file
-            if (_banner_img) {
-                setTimeout($('#upload_image').click(), 30000)
-            } else if (editdata.image) {
-                admin.req({
-                    url: imgurl
-                    , data: {data: JSON.stringify(form_data)}
-                    , type: method
-                    , done: function (res) {
-                        parent.layui.onSubmitChild(res);
-                    }
-                });
-            } else {
-                layer.msg('请选择图片');
-                return false;
-            }
-
-            return false;
-        });
-
-        parent.layui.submitChild = function () {
-            $("#id_save").click();
-        };
-    });
-</script>
-</body>
-
-</html>

+ 0 - 188
uis/views/commodity/category_index.html

@@ -1,188 +0,0 @@
-<!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=agent-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 type="text/css">
-        .seach_items {
-            float: right;
-            margin-left: 10px;
-        }
-    </style>
-    <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: 40px;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child {
-            top: 34px;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-bar {
-            display: none;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
-            color: #333;
-            background-color: #fff;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
-            background-color: #f2f2f2;
-            color: #000;
-        }
-
-        .tableContent {
-            width: 100%;
-            display: flex;
-            justify-content: space-between;
-            flex-direction: row;
-        }
-    </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 class="LAY-btns" style="margin-bottom: 10px;">
-                        <div style="float: left">
-                            <button class="layui-btn" id="category_add"
-                                    data-permission="commodity.add_commodity_parameter"><i
-                                    class="layui-icon layui-icon-add-circle"></i>添加
-                            </button>
-                        </div>
-                        <form class="layui-form" lay-filter="query-form-element">
-                            <div class="seach_items">
-                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
-                                        class="layui-icon layui-icon-search"></i>查询
-                                </button>
-                            </div>
-                            <div class="seach_items">
-                                <input type="text" name="name" autocomplete="off" class="layui-input"
-                                       placeholder="名称"/>
-                            </div>
-                        </form>
-                        <div style="clear: both;"></div>
-                    </div>
-                    <table class="layui-hide" id="datagrid" lay-filter="category-operate"></table>
-
-                    <script type="text/html" id="category-operate-bar">
-                        <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="category_edit"
-                               data-permission="commodity.add_commodity_parameter"
-                            >修改</a>
-                        </div>
-                    </script>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script src="../../layuiadmin/layui/layui.js?t=1"></script>
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index' //主入口模块
-    }).use(['index', 'table',], function () {
-        var $ = layui.$;
-        var table = layui.table
-            , form = layui.form;
-
-        table.render({
-            elem: '#datagrid'
-            , url: '/commodity/commodity_category/'
-            , cols: [[
-                {field: 'name', title: '类别名称', width: 150}
-                , {field: 'enable_text', title: '是否在用', width: 150}
-                , {width: 130, align: 'center', fixed: 'right', toolbar: '#category-operate-bar'}
-            ]]
-            , page: true
-            , height: 'full-108'
-            , done: function () {
-                layui.index.removeNoPermButtons();
-            }
-        });
-
-        form.on('submit(query-form-element)', function (data) {
-            table.reload('datagrid', {
-                where: data.field
-                , page: {curr: 1}
-            });
-            layer.closeAll();
-            return false;
-        });
-
-        //监听工具条
-        table.on('tool(category-operate)', function (obj) {
-            var data = obj.data;
-            table.editdata = data;
-            if (obj.event === 'category_edit') {
-                layer.open({
-                    type: 2,
-                    title: '修改',
-                    shadeClose: false,
-                    area: ['40%', '80%'],
-                    btn: ['保存', '取消'],
-                    yes: function (index, dom) {
-                        layui.onSubmitChild = function (res) {
-                            layer.close(index);
-                            table.reload('datagrid', {});
-                        };
-                        layui.submitChild();
-                    },
-                    btn2: function (index, layero) {
-                        layer.close(index);//关闭当前按钮
-                    },
-                    content: 'cate_edit.html?id=' + data.id
-                });
-            }
-        });
-
-
-        $('#category_add').on('click', function () {
-            layer.open({
-                type: 2,
-                title: '添加',
-                shadeClose: false,
-                area: ['40%', '80%'],
-                btn: ['保存', '取消'],
-                yes: function (index, dom) {
-                    layui.onSubmitChild = function (res) {
-                        layer.close(index);
-                        table.reload('datagrid', {});
-                    };
-                    layui.submitChild();
-                },
-                btn2: function (index, layero) {
-                    layer.close(index);//关闭当前按钮
-                },
-                content: 'cate_edit.html'
-            });
-        });
-    });
-
-</script>
-</body>
-</html>

+ 0 - 453
uis/views/commodity/commodity_detail_edit.html

@@ -1,453 +0,0 @@
-<!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 type="text/css">
-        /*您可以将下列样式写入自己的样式表中*/
-        /*layui 元素样式改写*/
-        .layui-btn-sm {
-            line-height: normal;
-            font-size: 12.5px;
-        }
-
-        .layui-table-view .layui-table-body {
-            min-height: 256px;
-        }
-
-        .layui-table-cell .layui-input.layui-unselect {
-            height: 30px;
-            line-height: 30px;
-        }
-
-        /*设置 layui 表格中单元格内容溢出可见样式*/
-        .table-overlay .layui-table-view,
-        .table-overlay .layui-table-box,
-        .table-overlay .layui-table-body {
-            overflow: visible;
-        }
-
-        .table-overlay .layui-table-cell {
-            height: auto;
-            overflow: visible;
-        }
-
-        .imgStyle {
-            padding-left: 10px;
-            width: 80px;
-            height: 50px;
-        }
-        .layui-table-cell {
-            font-size: 14px;
-            padding: 0 5px;
-            height: auto;
-            overflow: visible;
-            text-overflow: inherit;
-            white-space: normal;
-            word-break: break-all;
-        }
-    </style>
-</head>
-<body>
-
-<div class="layui-fluid">
-    <div class="layui-col-md12">
-        <div class="layui-card">
-            <form id='fm' class="layui-form" action="" lay-filter="component-form-element">
-                <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element"
-                        style="display: none">保存
-                </button>
-            </form>
-        </div>
-        <div class="layui-card">
-            <div class="layui-card-body">
-                <div class="layui-row layui-col-space10">
-                    <div class="layui-col-xs8" style="text-align: left">
-                        <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn_add">
-                            <i class="layui-icon layui-icon-add "></i> 添加
-                        </button>
-                    </div>
-                </div>
-                <div style="height: 5px"></div>
-                <div id="tableRes" class="table-overlay">
-                    <table id="dataTable" lay-filter="dataTable" class="layui-hide"></table>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script src="../../layuiadmin/layui/layui.js"></script>
-<script type="text/html" id="statusTpl">
-    <a lay-event="type_status"></a>
-    <input type="checkbox" name="status" lay-skin="switch" lay-text="上架|下架" lay-filter="status"
-           value="{{ d.status }}" {{ d.status == "1" ? 'checked' : "" }} >
-</script>
-<script type="text/html" id="paramImage">
-    <a lay-event="type_button"></a>
-    <a class="layui-btn layui-btn-xs" id="param_img{{ d.LAY_TABLE_INDEX }}" lay-event="param_img_event">上传</a>
-    {{# if(d.images_url){ }}
-    <img src="{{ d.images_url }}" class="imgStyle"/>
-    {{# } }}
-</script>
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'upload', 'layer', 'form',], function () {
-        var $ = layui.$
-            , admin = layui.admin
-            , upload = layui.upload
-            , form = layui.form
-            , table = layui.table
-            , layer = layui.layer;
-
-        var parameter1_list = [];
-        var parameter2_list = [];
-        var id = layui.view.getParameterByName('id');
-        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
-        var _data_index = 0
-        var parameter1_text = ""
-        var parameter2_text = ""
-        if (editdata.parameter_text) {
-            var parameter_text = editdata.parameter_text.split(',')
-            var parameter_len = parameter_text.length
-            if (parameter_len >= 1) {
-                parameter1_text = parameter_text[0]
-            }
-            if (parameter_len === 2) {
-                parameter2_text = parameter_text[1]
-            }
-        }
-
-        window.viewObj = {
-            renderSelectOptions: function (data, settings) {
-                settings = settings || {};
-                var valueField = settings.valueField || 'value',
-                    textField = settings.textField || 'text',
-                    selectedValue = settings.selectedValue || "";
-                var html = [];
-                for (var i = 0, item; i < data.length; i++) {
-                    item = data[i];
-                    html.push('<option value="');
-                    html.push(item[valueField]);
-                    html.push('"');
-                    if (selectedValue && item[valueField] == selectedValue) {
-                        html.push(' selected="selected"');
-                    }
-                    html.push('>');
-                    html.push(item[textField]);
-                    html.push('</option>');
-                }
-                return html.join('');
-            }
-        };
-
-        var permissions = layui.data(layui.setter.tableName)['permissions'];
-        var editStock = permissions.indexOf('commodity.edit_commodity_stock') > -1 ? true : false;
-        var editPrice = permissions.indexOf('commodity.edit_commodity_price') > -1 ? true : false;
-        var tbWidth = $("#tableRes").width();
-        var layTableId = "layTable";
-        var tableIns = table.render({
-            elem: '#dataTable',
-            id: layTableId,
-            data: [],
-            width: tbWidth,
-            page: false,
-            limit: 100,
-            loading: true,
-            even: true, //不开启隔行背景
-            cols: [[
-                {title: '序号', type: 'numbers'},
-                {field: 'price', title: '销售价格', edit: editPrice ? 'text' : '', width: '10%',},
-                {field: 'stock', title: '库存', edit: editStock ? 'text' : '', width: '8%',},
-                {field: 'no', title: '编号', edit: 'text', width: '10%',},
-                {field: 'name', title: '过账名称', edit: 'text', width: '10%',},
-                {
-                    field: 'parameter1',
-                    title: parameter1_text,
-                    hide: parameter1_text ? false : true,
-                    width: '15%',
-                    templet: function (d) {
-                        var options = viewObj.renderSelectOptions(parameter1_list, {
-                            valueField: "id",
-                            textField: "name",
-                            selectedValue: d.parameter1
-                        });
-                        return '<a lay-event="type_parameter1"></a><select name="parameter1" lay-filter="parameter_filter"><option value="">请选择参数1</option>' + options + '</select>';
-                    }
-                },
-                {
-                    field: 'parameter2',
-                    title: parameter2_text,
-                    hide: parameter2_text ? false : true,
-                    width: '15%',
-                    templet: function (d) {
-                        var options = viewObj.renderSelectOptions(parameter2_list, {
-                            valueField: "id",
-                            textField: "name",
-                            selectedValue: d.parameter2
-                        });
-                        return '<a lay-event="type_parameter2"></a><select name="parameter2" lay-filter="parameter_filter"><option value="">请选择参数2</option>' + options + '</select>';
-                    }
-                },
-                {field: 'status', title: '状态', templet: '#statusTpl', width: '10%',},
-                {field: 'images_url', title: '明细图', templet: '#paramImage', width: '20%',},
-                {
-                    field: 'id', title: '操作', width: '10%',templet: function (d) {
-                        if (d.id) {
-                            return ''
-                        } else {
-                            return '<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del" lay-id="' + d.id + '"><i class="layui-icon layui-icon-delete"></i>删除</a>';
-                        }
-                    }
-                }
-            ]],
-            done: function (data, date, total) {
-                //重新绑定,upload方法
-                bindTableToolbarFunction(total)
-            }
-        });
-
-        function bindTableToolbarFunction(data_index) {
-            for (var i = 0, item; i < data_index; i++) {
-                upload.render({
-                    elem: "#param_img" + i, // 和html中的param_img对应
-                    auto: false,
-                    choose: function (obj) {
-                        obj.preview(
-                            function (i, file, result) {
-                                // 把数据索引给图片,便于后续的查找对应。
-                                file.data_index = _data_index
-                                var oldData = table.cache[layTableId];
-                                $.extend(oldData[_data_index], {images_url: result, file: file});
-                                tableIns.reload({
-                                    data: oldData
-                                });
-                            }
-                        )
-                    },
-                });
-            }
-        }
-
-        admin.req({
-            url: '/commodity/' + id + '/get_parameter/',
-            done: function (res) {
-                if (res.code === 0) {
-                    parameter1_list = res.data.parameter1;
-                    parameter2_list = res.data.parameter2;
-                }
-                else {
-                    layer.msg('获取参数失败', {icon: 5});
-                }
-                admin.req({
-                    url: '/commodity/' + id + '/get_details/',
-                    done: function (res) {
-                        if (res.code === 0) {
-                            var rows = res.data;
-                            var oldData = table.cache[layTableId];
-                            for (var k in rows) {
-                                oldData.push(
-                                    {
-                                        id: rows[k].id,
-                                        price: rows[k].price,
-                                        stock: rows[k].stock,
-                                        no: rows[k].no,
-                                        name: rows[k].name,
-                                        status: rows[k].status,
-                                        parameter1: rows[k].parameter1,
-                                        parameter2: rows[k].parameter2,
-                                        images_url: rows[k].images_url,
-                                    }
-                                )
-                            }
-                            tableIns.reload({
-                                data: oldData
-                            });
-                        }
-                        else
-                            layer.msg('获取商品明细失败', {icon: 5});
-                    }
-                });
-            }
-        });
-        var active = {
-            removeItem: function (index) {
-                var oldData = table.cache[layTableId];
-                oldData.splice(index, 1);    //删除一项
-                tableIns.reload({
-                    data: oldData
-                });
-            },
-            onParameterChange: function (obj) {
-                var oldData = table.cache[layTableId];
-                $.extend(oldData[obj.data_index], obj);
-                tableIns.reload({
-                    data: oldData
-                });
-            },
-        }
-        //激活事件
-        var activeByType = function (type, arg) {
-            if (arguments.length === 2) {
-                active[type] ? active[type].call(this, arg) : '';
-            } else {
-                active[type] ? active[type].call(this) : '';
-            }
-        }
-
-        //注册按钮事件
-        $('.layui-btn[data-type]').on('click', function () {
-            var type = $(this).data('type');
-            activeByType(type);
-        });
-        //监听select下拉选中事件
-        form.on('select(parameter_filter)', function (data) {
-            var elem = data.elem; //得到select原始DOM对象
-            $(elem).prev("a[lay-event='type_parameter1']").trigger("click");
-            $(elem).prev("a[lay-event='type_parameter2']").trigger("click");
-        });
-
-        //监听指定开关
-        form.on('switch(status)', function (data) {
-            var elem = data.elem; //得到select原始DOM对象
-            $(elem).prev("a[lay-event='type_status']").trigger("click");
-            //$(elem).html("lay-event='type_status2'").trigger("click");
-        });
-
-        //监听工具条
-        table.on('tool(dataTable)', function (obj) {
-            var data = obj.data, event = obj.event, tr = obj.tr; //获得当前行 tr 的DOM对象;
-            var data_index = tr.attr("data-index");
-            switch (event) {
-                case "type_parameter2":
-                    var select = tr.find("select[name='parameter2']");
-                    if (select) {
-                        var selectedVal = select.val();
-                        if (!selectedVal) {
-                            layer.tips("请选择一个参数", select.next('.layui-form-select'), {tips: [3, '#FF5722']}); //吸附提示
-                        }
-                        $.extend(data, {'parameter2': selectedVal});
-                        data.data_index = data_index
-                        activeByType('onParameterChange', data);	//更新行记录对象
-                    }
-                    break;
-                case "type_parameter1":
-                    var select = tr.find("select[name='parameter1']");
-                    if (select) {
-                        var selectedVal = select.val();
-                        if (!selectedVal) {
-                            layer.tips("请选择一个参数", select.next('.layui-form-select'), {tips: [3, '#FF5722']}); //吸附提示
-                        }
-                        $.extend(data, {'parameter1': selectedVal});
-                        data.data_index = data_index
-                        activeByType('onParameterChange', data);	//更新行记录对象
-                    }
-                    break;
-                case "type_status":
-                    var stateVal = tr.find("input[name='status']").val() === "1" ? "0" : "1";
-                    $.extend(data, {'status': stateVal})
-                    data.data_index = data_index
-                    activeByType('onParameterChange', data);	//更新行记录对象
-                    break;
-                case "param_img_event":
-                    // 给图片传tabel索引
-                    _data_index = data_index
-                    break;
-                case "del":
-                    obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
-                    activeByType('removeItem', data_index);
-                    layer.msg('删除成功', {icon: 6});
-                    break;
-            }
-        });
-
-        $('#btn_add').on('click', function () {
-            var oldData = table.cache[layTableId];
-            var newRow = {
-                id: '',
-                price: '',
-                stock: '',
-                no: '',
-                name: '',
-                file: '',
-                images_url: '',
-                status: "1",
-                parameter1: '',
-                parameter2: '',
-            }
-            oldData.push(newRow);
-            tableIns.reload({
-                data: oldData
-            });
-        });
-
-        //保存
-        form.on('submit(component-form-element)', function (data) {
-            var rows = table.cache[layTableId];
-            var items = [];
-            var formData = new FormData();
-            var para_items = [] // 验证选择的参数是否重复
-            for (var k in rows) {
-                if (isNaN(rows[k].price) || isNaN(rows[k].stock)) {
-                    layer.msg("第" + (parseInt(k) + 1) + "行,请填写销售价格或库存", {icon: 2})
-                    return false
-                }
-                var param = rows[k].parameter1 + "," + rows[k].parameter2
-                if (param.length > 1 && para_items.indexOf(param) > -1) {
-                    layer.msg("第" + (parseInt(k) + 1) + "行,选择的参数重复,请重新选择", {icon: 2})
-                    return false
-                }
-                para_items.push(param)
-                var item = {
-                    id: rows[k].id,
-                    price: rows[k].price,
-                    stock: rows[k].stock,
-                    no: rows[k].no,
-                    name: rows[k].name,
-                    status: rows[k].status,
-                    parameter1: rows[k].parameter1,
-                    parameter2: rows[k].parameter2,
-                };
-                if (rows[k].file) {
-                    formData.append(`file${rows[k].file.data_index}`, rows[k].file)
-                    item['data_index'] = rows[k].file.data_index
-                }
-
-                items.push(item);
-            }
-            formData.append('items', JSON.stringify(items))
-            if (items.length === 0) {
-                layer.msg('请添加参数内容', {icon: 2});
-                return false;
-            }
-
-            admin.req({
-                url: '/commodity/' + id + '/add_details/'
-                , data: formData
-                , contentType: false
-                , processData: false
-                , type: 'post'
-                , done: function (res) {
-                    parent.layui.onSubmitChild(res);
-                }
-            });
-
-            return false;
-        });
-        parent.layui.submitChild = function () {
-            $("#id_save").click();
-        };
-    });
-
-</script>
-</body>
-</html>

+ 0 - 130
uis/views/commodity/commodity_discount.html

@@ -1,130 +0,0 @@
-<!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">
-</head>
-<body>
-
-<div class="layui-fluid">
-    <div class="layui-col-md12">
-        <div class="layui-card">
-            <form id='fm' class="layui-form" action="" lay-filter="component-form-element">
-                <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element"
-                        style="display: none">保存
-                </button>
-            </form>
-        </div>
-        <div class="layui-card">
-            <div class="layui-card-body">
-                <div>商品名称:<font id="id_name"></font></div>
-                <div style="height: 5px"></div>
-                <div id="tableRes" class="table-overlay">
-                    <table id="dataTable" lay-filter="dataTable" class="layui-hide"></table>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script src="../../layuiadmin/layui/layui.js"></script>
-
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'layer', 'form',], function () {
-        var $ = layui.$
-            , admin = layui.admin
-            , form = layui.form
-            , table = layui.table
-            , layer = layui.layer;
-
-
-        var id = layui.view.getParameterByName('id');
-        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
-        $('#id_name').html(editdata.name)
-
-        var tbWidth = $("#tableRes").width();
-        var layTableId = "layTable";
-        var tableIns = table.render({
-            elem: '#dataTable',
-            id: layTableId,
-            data: [],
-            width: tbWidth,
-            page: false,
-            limit: 100,
-            loading: true,
-            even: true, //不开启隔行背景
-            cols: [[
-                {title: '序号', type: 'numbers'},
-                {field: 'agent_level_text', title: '等级', width: '20%',},
-                {field: 'discount', title: '折扣', edit: 'text', width: '20%',},
-            ]],
-        });
-
-        admin.req({
-            url: '/commodity/commodity_discount/?commodity=' + id,
-            done: function (res) {
-                var rows = res.data;
-                var oldData = table.cache[layTableId];
-                for (var k in rows) {
-                    oldData.push(
-                        {
-                            id: rows[k].id,
-                            agent_level_text: rows[k].agent_level_text,
-                            discount: rows[k].discount,
-                        }
-                    )
-                }
-                tableIns.reload({
-                    data: oldData
-                });
-            }
-        });
-
-        //保存
-        form.on('submit(component-form-element)', function (data) {
-            var rows = table.cache[layTableId];
-            var items = [];
-
-            for (var k in rows) {
-                var item = {
-                    id: rows[k].id,
-                    discount: rows[k].discount,
-                };
-                items.push(item);
-            }
-
-            if (items.length === 0) {
-                layer.msg('参数错误!', {icon: 2});
-                return false;
-            }
-            admin.req({
-                url: '/commodity/'+id+'/update_discount/'
-                , data: {items:JSON.stringify(items)}
-                //, contentType: false
-                //, processData: false
-                , type: 'post'
-                , done: function (res) {
-                    parent.layui.onSubmitChild(res);
-                }
-            });
-
-            return false;
-        });
-        parent.layui.submitChild = function () {
-            $("#id_save").click();
-        };
-    });
-
-</script>
-</body>
-</html>

+ 0 - 178
uis/views/commodity/commodity_parameter.html

@@ -1,178 +0,0 @@
-<!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=agent-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 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: 40px;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child {
-            top: 34px;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-bar {
-            display: none;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a {
-            color: #333;
-            background-color: #fff;
-        }
-
-        .LAY-btns .layui-nav .layui-nav-child dd.layui-this a:hover {
-            background-color: #f2f2f2;
-            color: #000;
-        }
-
-        .seach_items {
-            float: right;
-            margin-left: 10px;
-        }
-    </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 class="LAY-btns" style="margin-bottom: 10px;">
-                        <div style="float: left">
-                            <button class="layui-btn" id="commodity_add"
-                                    data-permission="commodity.add_commodity_parameter"><i
-                                    class="layui-icon layui-icon-add-circle"></i>添加
-                            </button>
-                        </div>
-                        <form class="layui-form" lay-filter="query-form-element">
-                            <div class="seach_items">
-                                <button class="layui-btn" lay-submit lay-filter="query-form-element"><i
-                                        class="layui-icon layui-icon-search"></i>查询
-                                </button>
-                            </div>
-                            <div class="seach_items">
-                                <input type="text" name="name" autocomplete="off" class="layui-input"
-                                       placeholder="名称"/>
-                            </div>
-                        </form>
-                        <div style="clear: both;"></div>
-                    </div>
-                    <table class="layui-hide" id="commodity_datagrid" lay-filter="commodity-operate"></table>
-
-                    <script type="text/html" id="commodity-operate-bar">
-                        <div class="layui-btn-group">
-                            <a class="layui-btn layui-btn-xs" lay-event="commodity_edit"
-                               data-permission="commodity.add_commodity_parameter"
-                            >修改</a>
-                        </div>
-                    </script>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-<script src="../../layuiadmin/layui/layui.js?t=1"></script>
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'form', 'upload'], function () {
-        var $ = layui.$;
-        var table = layui.table
-            , form = layui.form;
-
-        table.render({
-            elem: '#commodity_datagrid'
-            , url: '/commodity/commodity_parameter/'
-            , cols: [[
-                {field: 'parameter_name', title: '参数名称', width: 150}
-                , {field: 'content', title: '参数内容', MinWidth: 200}
-                , {width: 120, align: 'center', fixed: 'right', toolbar: '#commodity-operate-bar'}
-            ]]
-            , page: true
-            , height: 'full-108'
-            , done: function () {
-                layui.index.removeNoPermButtons();
-            }
-        });
-
-        //监听工具条
-        table.on('tool(commodity-operate)', function (obj) {
-            var data = obj.data;
-            if (obj.event === 'commodity_edit') {
-                table.editdata = data;
-                layer.open({
-                    type: 2,
-                    title: '修改',
-                    shadeClose: false,
-                    area: ['40%', '80%'],
-                    btn: ['保存', '取消'],
-                    yes: function (index, dom) {
-                        layui.onSubmitChild = function (res) {
-                            layer.close(index);
-                            table.reload('commodity_datagrid', {});
-                        };
-                        layui.submitChild();
-                    },
-                    btn2: function (index, layero) {
-                        layer.close(index);//关闭当前按钮
-                    },
-                    content: 'commodity_parameter_edit.html?edit=true'
-                });
-            }
-        });
-
-
-        form.on('submit(query-form-element)', function (data) {
-            table.reload('commodity_datagrid', {
-                where: data.field
-                , page: {curr: 1}
-            });
-            layer.closeAll();
-            return false
-        });
-
-        $('#commodity_add').on('click', function () {
-            layer.open({
-                type: 2,
-                title: '添加',
-                area: ['40%', '80%'],
-                btn: ['保存', '取消'],
-                yes: function (index, dom) {
-                    layui.onSubmitChild = function (res) {
-                        layer.close(index);
-                        table.reload('commodity_datagrid', {});
-                    };
-                    layui.submitChild();
-                },
-                btn2: function (index, layero) {
-                    layer.close(index);//关闭当前按钮
-                },
-                content: 'commodity_parameter_edit.html?edit=false'
-            });
-        });
-    });
-
-</script>
-</body>
-</html>

+ 0 - 232
uis/views/commodity/commodity_parameter_edit.html

@@ -1,232 +0,0 @@
-<!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 type="text/css">
-        /*您可以将下列样式写入自己的样式表中*/
-        /*layui 元素样式改写*/
-        .layui-btn-sm {
-            line-height: normal;
-            font-size: 12.5px;
-        }
-
-        .layui-table-view .layui-table-body {
-            min-height: 256px;
-        }
-
-        .layui-table-cell .layui-input.layui-unselect {
-            height: 30px;
-            line-height: 30px;
-        }
-
-        /*设置 layui 表格中单元格内容溢出可见样式*/
-        .table-overlay .layui-table-view,
-        .table-overlay .layui-table-box,
-        .table-overlay .layui-table-body {
-            overflow: visible;
-        }
-
-        .table-overlay .layui-table-cell {
-            height: auto;
-            overflow: visible;
-        }
-
-    </style>
-</head>
-<body>
-
-<div class="layui-fluid">
-    <div class="layui-row layui-col-space15">
-        <div class="layui-col-md12">
-            <div class="layui-card">
-                <div class="layui-card-body">
-                    <form id='fm' class="layui-form" action="" lay-filter="component-form-element">
-                        <div class="layui-row layui-col-space10 layui-form-item">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label">参数名称:</label>
-                                <div class="layui-input-block">
-                                    <select id="id_option" name="option" lay-search="">
-                                        <option value="">请选择参数名称</option>
-                                    </select>
-                                </div>
-                            </div>
-                        </div>
-                        <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element"
-                                style="display: none">保存
-                        </button>
-                    </form>
-                </div>
-            </div>
-            <div class="layui-card">
-                <div class="layui-card-body">
-                    <div class="layui-row layui-col-space10">
-                        <div class="layui-col-xs8" style="text-align: left">
-                            <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn_add">
-                                <i class="layui-icon layui-icon-add "></i> 添加
-                            </button>
-                        </div>
-                    </div>
-                    <div style="height: 5px"></div>
-                    <div id="tableRes" class="table-overlay">
-                        <table id="dataTable" lay-filter="dataTable" class="layui-hide"></table>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-
-<script src="../../layuiadmin/layui/layui.js"></script>
-<script>
-    layui.config({
-        base: '../../../layuiadmin/' //静态资源所在路径
-    }).extend({
-        index: 'lib/index' //主入口模块
-    }).use(['index', 'table', 'layer', 'form',], function () {
-        var $ = layui.$
-            , admin = layui.admin
-            , form = layui.form
-            , table = layui.table
-            , layer = layui.layer;
-
-        var edit = layui.view.getParameterByName('edit') == 'true';
-        var tbWidth = $("#tableRes").width();
-        var layTableId = "layTable";
-        var tableIns = table.render({
-            elem: '#dataTable',
-            id: layTableId,
-            data: [],
-            width: tbWidth,
-            page: false,
-            limit: 100,
-            loading: true,
-            even: true, //不开启隔行背景
-            cols: [[
-                {title: '序号', type: 'numbers'},
-                {field: 'parameter_content', title: '参数内容', edit: 'text', width: '44%',},
-                {
-                    field: 'id', title: '操作',hide:edit, templet: function (d) {
-                        return '<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del" lay-id="' + d.id + '"><i class="layui-icon layui-icon-delete"></i>删除</a>';
-                    }
-                }
-            ]],
-        });
-        admin.req({
-            url: '/option/get_option/?types=2',
-            done: function (res) {
-                var data_user = res.data;
-                var user_node = $('#id_option');
-                for (var i in data_user) {
-                    var pid = data_user[i].value;
-                    var name = data_user[i].name;
-                    user_node.append("<option value='" + pid + "'>" + name + "</option>");
-                }
-                form.val("component-form-element", editdata);
-            }
-        });
-        if (edit) {
-            var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
-            form.val("component-form-element", editdata);
-            var oldData = table.cache[layTableId];
-            for (var i in editdata.edit_content) {
-                var newRow = {
-                    id: editdata.edit_content[i].id,
-                    parameter_content: editdata.edit_content[i].content,
-                }
-                oldData.push(newRow);
-            }
-            tableIns.reload({
-                data: oldData
-            });
-        }
-        var active = {
-            removeItem: function (index) {
-                var oldData = table.cache[layTableId];
-                oldData.splice(index, 1);    //删除一项
-                tableIns.reload({
-                    data: oldData
-                });
-            },
-        }
-        //激活事件
-        var activeByType = function (type, arg) {
-            if (arguments.length === 2) {
-                active[type] ? active[type].call(this, arg) : '';
-            } else {
-                active[type] ? active[type].call(this) : '';
-            }
-        }
-
-        //注册按钮事件
-        $('.layui-btn[data-type]').on('click', function () {
-            var type = $(this).data('type');
-            activeByType(type);
-        });
-
-        //监听工具条
-        table.on('tool(dataTable)', function (obj) {
-            var data = obj.data, event = obj.event, tr = obj.tr; //获得当前行 tr 的DOM对象;
-            var data_index = tr.attr("data-index");
-            switch (event) {
-                case "del":
-                    obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
-                    activeByType('removeItem', data_index);
-                    layer.msg('删除成功', {icon: 6});
-                    break;
-            }
-        });
-
-        $('#btn_add').on('click', function () {
-            var oldData = table.cache[layTableId];
-            var newRow = {
-                id: '',
-                parameter_content: '',
-            }
-            oldData.push(newRow);
-            tableIns.reload({
-                data: oldData
-            });
-        });
-
-        //保存
-        form.on('submit(component-form-element)', function (data) {
-            var rows = table.cache[layTableId];
-            var items = [];
-            for (var k in rows) {
-                var item = {
-                    id: rows[k].id,
-                    parameter_content: rows[k].parameter_content,
-                };
-                items.push(item);
-            }
-
-            if (items.length === 0) {
-                layer.msg('请添加参数内容');
-                return false;
-            }
-            data.field.contents = JSON.stringify(items)
-            admin.req({
-                url: '/commodity/commodity_parameter/'
-                , data: data.field
-                , type: 'post'
-                , done: function (res) {
-                    parent.layui.onSubmitChild(res);
-                }
-            });
-            return false;
-        });
-        parent.layui.submitChild = function () {
-            $("#id_save").click();
-        };
-    });
-
-</script>
-</body>
-</html>

+ 41 - 22
uis/views/commodity/index.html

@@ -78,6 +78,18 @@
                                         class="layui-icon layui-icon-search"></i>查询
                                 </button>
                             </div>
+                            <div class="seach_items" style="width: 150px;">
+                                <select name="type">
+                                    <option value="">请选择价格类型</option>
+                                    <option value="1">现金商品</option>
+                                    <option value="2">积分商品</option>
+                                </select>
+                            </div>
+                            <div class="seach_items" style="width: 150px">
+                                <select name="category" id="select_category">
+                                    <option value="">请选择商品类别</option>
+                                </select>
+                            </div>
                             <div class="seach_items">
                                 <input type="text" name="name" autocomplete="off" class="layui-input" placeholder="名称"/>
                             </div>
@@ -99,18 +111,18 @@
         </div>
     </div>
 </div>
-<script type="text/html" id="mainImage">
-    {{# if(d.main_image){ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_main">查看</a>
+<script type="text/html" id="showImage">
+    {{# if(d.show_image){ }}
+    <a class="layui-btn layui-btn-xs" lay-event="upload_show">查看</a>
     {{# }else{ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_main">上传</a>
+    <a class="layui-btn layui-btn-xs" lay-event="upload_show">上传</a>
     {{# } }}
 </script>
-<script type="text/html" id="listImage">
-    {{# if(d.list_image){ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_list">查看</a>
+<script type="text/html" id="carouselImage">
+    {{# if(d.carousel_image){ }}
+    <a class="layui-btn layui-btn-xs" lay-event="upload_carousel">查看({{ d.carousel_image }})</a>
     {{# }else{ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_list">上传</a>
+    <a class="layui-btn layui-btn-xs" lay-event="upload_carousel">上传</a>
     {{# } }}
 </script>
 <script type="text/html" id="detailImage">
@@ -120,13 +132,6 @@
     <a class="layui-btn layui-btn-xs" lay-event="upload_detail">上传</a>
     {{# } }}
 </script>
-<script type="text/html" id="paramImage">
-    {{# if(d.param_image){ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_param">查看({{ d.param_image }})</a>
-    {{# }else{ }}
-    <a class="layui-btn layui-btn-xs" lay-event="upload_param">上传</a>
-    {{# } }}
-</script>
 <script src="../../layuiadmin/layui/layui.js?t=1"></script>
 <script>
     layui.config({
@@ -140,6 +145,20 @@
             , upload = layui.upload
             , admin = layui.admin;
 
+        admin.req({
+            url: '/commodity/dict/',
+            done: function (res) {
+                var data = res.data.category;
+                var category = $('#select_category');
+                for (var i in data) {
+                    var pid1 = data[i].value;
+                    var name1 = data[i].name;
+                    category.append("<option value='" + pid1 + "'>" + name1 + "</option>");
+                }
+                form.render();
+            }
+        });
+
         table.render({
             elem: '#commodity_datagrid'
             , url: '/commodity/'
@@ -150,8 +169,8 @@
                 , {field: 'price', title: '销售价格', width: 120}
                 , {field: 'vip_price', title: '会员价格', width: 120}
                 , {field: 'point_price', title: '积分价格', width: 120}
-                , {field: 'main_image', title: '缩略图', templet: '#mainImage', width: 70}
-                , {field: 'list_image', title: '轮播图', templet: '#listImage', width: 70}
+                , {field: 'main_image', title: '缩略图', templet: '#showImage', width: 70}
+                , {field: 'list_image', title: '轮播图', templet: '#carouselImage', width: 70}
                 , {field: 'detail_image', title: '详情图', templet: '#detailImage', width: 70}
                 , {field: 'initial_sale_count', title: '起始销量', width: 70}
                 , {field: 'total_sales', title: '实际销量', width: 70}
@@ -206,10 +225,10 @@
                     })
                 })
             }
-            else if (obj.event === 'upload_main' || obj.event === 'upload_list') {
+            else if (obj.event === 'upload_show') {
                 layer.open({
                     type: 2,
-                    title: obj.event === 'upload_main' ? '上传主图片' : '上传列表图片',
+                    title: '上传缩略图',
                     shadeClose: false,
                     area: ['40%', '80%'],
                     btn: ['保存', '取消'],
@@ -223,12 +242,12 @@
                     btn2: function (index, layero) {
                         layer.close(index);//关闭当前按钮
                     },
-                    content: 'uploadImage.html?id=' + data.id + '&type=' + obj.event
+                    content: 'uploadImage.html?id=' + data.id
                 });
-            } else if (obj.event === 'upload_param' || obj.event === 'upload_detail') {
+            } else if (obj.event === 'upload_carousel' || obj.event === 'upload_detail') {
                 layer.open({
                     type: 2,
-                    title: obj.event === 'upload_param' ? '上参数图片' : '上传详情图片',
+                    title: obj.event === 'upload_carousel' ? '上传轮播图' : '上传详情图',
                     shadeClose: false,
                     area: ['80%', '80%'],
                     btn: ['保存', '取消'],

+ 5 - 5
uis/views/commodity/uploadDetailImg.html

@@ -129,8 +129,8 @@
                 layer.close(conf_index);
                 layui.admin.req({
                     notice: true
-                    , url: '/commodity/delete_commodity_image/?id=' + id
-                    , type: 'post'
+                    , url: '/commodity/del_images/' + id + '/'
+                    , type: 'delete'
                     , done: function (res) {
                         imgsList.splice(index, 1);
                         renderImgsList(imgsList);
@@ -160,11 +160,11 @@
         var type = layui.view.getParameterByName('type');
 
         admin.req({
-            url: '/commodity/' + id + '/query_detail_img/'
+            url: '/commodity/' + id + '/query_images/'
             , data: {type}
             , type: 'post'
             , done: function (res) {
-                imgsList = res.data
+                imgsList = res.data;
                 renderImgsList(imgsList)
             }
         });
@@ -210,7 +210,7 @@
             filesList.forEach((item, index) => {
                 formData.append(`file${index}`, item)
             });
-            var url = '/commodity/' + id + '/upload_detail_img/';
+            var url = '/commodity/' + id + '/upload_images/';
             admin.req({
                 url: url
                 , data: formData

+ 9 - 14
uis/views/commodity/uploadImage.html

@@ -28,8 +28,7 @@
                             </div>
                         </div>
 
-                        <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element"
-                                style="display: none">保存
+                        <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_image" style="display: none"></button>
                     </form>
@@ -53,19 +52,14 @@
             , form = layui.form;
 
         var id = layui.view.getParameterByName('id');
-        var type = layui.view.getParameterByName('type');
         form.render(null, 'component-form-element');
 
         if (id) {
             var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
             form.val("component-form-element", editdata);
-            if (type === 'upload_main') {
-                $('#banner_img_demo').attr('src', editdata.main_image_url);
-            } else if (type === 'upload_list') {
-                $('#banner_img_demo').attr('src', editdata.list_image_url);
-            }
+            $('#banner_img_demo').attr('src', editdata.show_image_url);
         }
-        var url = '/commodity/' + id + '/upload_image/',
+        var url = '/commodity/' + id + '/upload_show_image/',
             method = 'post', banner_img = '';
 
         upload.render({
@@ -81,11 +75,12 @@
                     }
                 )
             },
-            data: {
-                type: type
-            },
             done: function (res) {
-                parent.layui.onSubmitChild(res);
+                if (res.code !== 0) {
+                    layer.msg(res.msg)
+                } else {
+                    parent.layui.onSubmitChild(res);
+                }
             },
             error: function () {
                 layer.msg('保存失败');
@@ -98,7 +93,7 @@
                 layer.msg('请选择图片');
                 return false;
             }
-            setTimeout($('#upload_image').click(), 30000)
+            setTimeout($('#upload_image').click(), 30000);
             return false;
         });
 

+ 3 - 1
utils/file_operation.py

@@ -23,11 +23,13 @@ def UploadFile(file, upload_path):
 
 
 def DeleteFile(filename):
-    img_path = '%s/%s' % (settings.MEDIA_ROOT, filename)
+    img_path = '%s%s' % (settings.UIS_ROOT, filename)
     try:
         if os.path.exists(img_path):
             os.remove(img_path)
     except:
+        import traceback
+        traceback.print_exc()
         pass