Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	apps/account/views.py
#	apps/activity/models.py
#	apps/activity/serializers.py
jiaweiqi 3 gadi atpakaļ
vecāks
revīzija
89695fa254

+ 1 - 1
apps/account/filters.py

@@ -6,7 +6,7 @@ from .models import *
 class EmployeeFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
     username = django_filters.CharFilter(field_name='username', lookup_expr='icontains')
-    enabled = django_filters.CharFilter(field_name='product_base__enabled')
+    enabled = django_filters.CharFilter(field_name='enabled')
 
     class Meta:
         model = User

+ 7 - 0
apps/account/serializers.py

@@ -32,6 +32,13 @@ class EmployeeSerializer(serializers.ModelSerializer):
         else:
             raise CustomError(dump_serializer_errors(self))
 
+    def validate(self, data):
+        if 'enabled' in data:
+            data['enabled'] = True
+        else:
+            data['enabled'] = False
+        return data
+
 
     def create(self, validated_data):
         instance = super(EmployeeSerializer, self).create(validated_data)

+ 2 - 0
apps/account/urls.py

@@ -7,5 +7,7 @@ urlpatterns = (
 
     url(r'^employee/data/$', employee_list),
     url(r'^employee/save/$', employee_save),
+
+    url(r'^password/save/$', password_save),
 )
 

+ 35 - 1
apps/account/views.py

@@ -33,12 +33,23 @@ def login(request):
         if user.type and user.type != User.EMPLOYEE:
             return JSONError(u'非工作帐号,禁止登录!')
 
+        if not user.enabled:
+            return JSONError(u'该账号不可用')
+
         if user.username != 'zzzroor':
-            BizLog.objects.addnew(user, BizLog.INSERT, u"[%s]登录系统,IP[%s]" % (user.username, request.META['REMOTE_ADDR']))
+            BizLog.objects.addnew(user, BizLog.INSERT,
+                                  u"[%s]登录系统,IP[%s]" % (user.username, request.META['REMOTE_ADDR']))
+
+        if user.is_superuser:
+            superuser = True
+        else:
+            superuser = False
+
         return JSONResponse({
             'user_id': user.id,
             'access_token': form.access_token,
             'name': user.name,
+            'superuser': superuser,
         })
     else:
         if request.POST['username'] != 'zzzroor':
@@ -81,3 +92,26 @@ def employee_save(request):
         return JSONError(u'保存失败')
     return JSONResponse()
 
+
+@token_required
+def password_save(request):
+    data = json.loads(request.body)
+    try:
+        data['new_password'] = data['new_password'].strip(u' ')
+        data['confirm_password'] = data['confirm_password'].strip(u' ')
+        data['old_password'] = data['old_password'].strip(u' ')
+
+        if data['new_password'] != data['confirm_password']:
+            raise CustomError(u'两次输入的密码不一致, 请检查')
+
+        with transaction.atomic():
+            if not request.user.check_password(data['old_password']):
+                raise CustomError(u'原密码输入错误, 请检查')
+            request.user.set_password(data['new_password'])
+            request.user.save()
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+    return JSONResponse()

+ 36 - 1
apps/activity/filters.py

@@ -11,7 +11,7 @@ from apps.account.models import Branch
 class BranchFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
     tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
-    enabled = django_filters.CharFilter(field_name='product_base__enabled')
+    enabled = django_filters.CharFilter(field_name='enabled')
 
     class Meta:
         model = Branch
@@ -66,8 +66,43 @@ class MemberCouponFilter(django_filters.FilterSet):
 
 class OrderFilter(django_filters.FilterSet):
     activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
+    activity = django_filters.CharFilter(field_name='activity')
     delete = django_filters.CharFilter(field_name='delete')
 
     class Meta:
         model = Order
         fields = '__all__'
+
+
+
+class CouponFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name='name',lookup_expr='icontains')
+    activity = django_filters.CharFilter(field_name='activity')
+    enabled = django_filters.CharFilter(field_name='enabled')
+
+    class Meta:
+        model = Coupon
+        fields = (
+            'name', 'enabled'
+        )
+
+    def __init__(self, data=None, *args, **kwargs):
+        data = clean_datetime_range(data, 'create_time')
+        super(CouponFilter, self).__init__(data, *args, **kwargs)
+
+
+class ActivityFilter(django_filters.FilterSet):
+    title = django_filters.CharFilter(field_name='title',lookup_expr='icontains')
+    branch_name = django_filters.CharFilter(field_name='branch_name', lookup_expr='icontains')
+    enabled = django_filters.CharFilter(field_name='enabled')
+    check_status = django_filters.CharFilter(field_name='check_status')
+
+    class Meta:
+        model = Activity
+        fields = (
+            'title', 'branch_name', 'check_status', 'enabled'
+        )
+
+    def __init__(self, data=None, *args, **kwargs):
+        data = clean_datetime_range(data, 'create_time')
+        super(ActivityFilter, self).__init__(data, *args, **kwargs)

+ 25 - 1
apps/activity/models.py

@@ -24,10 +24,22 @@ class Activity(models.Model):
     branch_name = models.CharField(max_length=200, verbose_name=u"门店名称", null=True, blank=True)
     branch_tel = models.CharField(max_length=50, verbose_name=u"门店电话", null=True, blank=True)
     branch_address = models.CharField(max_length=200, verbose_name=u"门店地址", null=True, blank=True)
+    required_signs = models.CharField(verbose_name=u'必填项', max_length=300, null=True, editable=False)
     create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
     enabled = models.BooleanField(verbose_name=u"在用", default=True)
     delete = models.BooleanField(verbose_name=u"删除", default=False)
 
+    @staticmethod
+    def getById1(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的活动')
+        instance = Activity.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的活动')
+        return instance
+
     class Meta:
         db_table = "activity"
         ordering = ['-id']
@@ -74,6 +86,7 @@ class Order(models.Model):
     model = models.CharField(max_length=200, verbose_name=u"车型", null=True, blank=True)
     tel = models.CharField(max_length=100, verbose_name=u"电话", null=True, blank=True)
     number = models.CharField(max_length=50, verbose_name=u"车牌号", null=True, blank=True)
+    name = models.CharField(max_length=50, verbose_name=u"姓名", null=True, blank=True)
     create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
     delete = models.BooleanField(verbose_name=u"删除", default=False)
 
@@ -125,11 +138,22 @@ class Coupon(models.Model):
         ordering = ['-id']
         verbose_name = u"优惠券"
 
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的优惠券')
+        instance = Coupon.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的优惠券')
+        return instance
+
 
 class MemberCoupon(models.Model):
+    activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
     member = models.ForeignKey(Customer, verbose_name=u"会员", on_delete=models.PROTECT)
     coupon = models.ForeignKey(Coupon, verbose_name=u"优惠券", on_delete=models.PROTECT)
-    activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
     receive_date = models.DateField(verbose_name=u"领取日期", null=True, blank=True)
     end_date = models.DateField(verbose_name=u"有效期至", null=True, blank=True)
     write_off = models.BooleanField(verbose_name=u"核销", default=False)

+ 126 - 0
apps/activity/serializers.py

@@ -1,5 +1,6 @@
 #coding=utf-8
 
+import datetime
 from rest_framework import serializers
 from apps.exceptions import CustomError
 from django.db.models import Q
@@ -10,6 +11,7 @@ from apps.serializer_errors import dump_serializer_errors
 from apps.foundation.models import BizLog
 from apps.customer.models import Customer
 from apps.account.models import Branch
+from apps import base
 
 class BranchSerializer(serializers.ModelSerializer):
     enabled_text = serializers.SerializerMethodField()
@@ -39,6 +41,13 @@ class BranchSerializer(serializers.ModelSerializer):
         else:
             raise CustomError(dump_serializer_errors(self))
 
+    def validate(self, data):
+        if 'enabled' in data:
+            data['enabled'] = True
+        else:
+            data['enabled'] = False
+        return data
+
 
     def create(self, validated_data):
         instance = super(BranchSerializer, self).create(validated_data)
@@ -92,3 +101,120 @@ class OrderSerializer(serializers.ModelSerializer):
         if obj.delete:
             return u'是'
         return u'否'
+
+
+class CouponSerializer(serializers.ModelSerializer):
+    branch_name = serializers.CharField(source='branch.name', read_only=True)
+    create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
+    enabled_text = serializers.SerializerMethodField()
+
+    class Meta:
+        model = Coupon
+        fields = '__all__'
+
+    def get_enabled_text(self, obj):
+        if obj.enabled:
+            return u'是'
+        return u'否'
+
+    @staticmethod
+    def factory(user, data, id=None):
+        if id:
+            instance = Coupon.getById(id)
+        else:
+            instance = None
+        serializer = CouponSerializer(instance, data=data)
+        serializer.user = user
+        return serializer
+
+    def validSave(self):
+        if self.is_valid():
+            return self.save()
+        else:
+            raise CustomError(dump_serializer_errors(self))
+
+    def validate(self, data):
+        if 'enabled' in data:
+            data['enabled'] = True
+        else:
+            data['enabled'] = False
+
+        return data
+
+
+    def create(self, validated_data):
+        instance = super(CouponSerializer, self).create(validated_data)
+        instance.save()
+        BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
+        return instance
+
+    def update(self, instance, validated_data):
+        BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
+        instance = super(CouponSerializer, self).update(instance, validated_data)
+        return instance
+
+class ActivitySerializer(serializers.ModelSerializer):
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+    check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
+    enabled_text = serializers.SerializerMethodField()
+    coupons = serializers.SerializerMethodField()
+
+
+    class Meta:
+        model = Activity
+        fields = '__all__'
+
+    def get_enabled_text(self, obj):
+        if obj.enabled:
+            return u'是'
+        return u'否'
+
+    def get_coupons(self, obj):
+        data = []
+        rows = ActivityCoupon.objects.filter(activity=obj)
+        data.extend([s.id for s in rows])
+        return data
+
+    @staticmethod
+    def factory(user, data, id=None):
+        if id:
+            instance = Activity.getById(id)
+        else:
+            instance = None
+        serializer = ActivitySerializer(instance, data=data)
+        serializer.user = user
+        return serializer
+
+    def validSave(self):
+        if self.is_valid():
+            return self.save()
+        else:
+            raise CustomError(dump_serializer_errors(self))
+
+    def validate(self, data):
+        if 'enabled' in data:
+            data['enabled'] = True
+        else:
+            data['enabled'] = False
+        return data
+
+    def create(self, validated_data):
+        instance = super(ActivitySerializer, self).create(validated_data)
+        instance.save()
+        BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加活动[%s],id=%s" % (instance.title, instance.id),
+                              validated_data)
+        return instance
+
+    def update(self, instance, validated_data):
+        BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改活动[%s],id=%s" % (instance.title, instance.id),
+                              validated_data)
+        instance = super(ActivitySerializer, self).update(instance, validated_data)
+        return instance
+
+
+class CouponComboboxSerializer(serializers.ModelSerializer):
+    value = serializers.CharField(source='id', read_only=True)
+
+    class Meta:
+        model = Coupon
+        fields = ('value', 'name',)

+ 12 - 0
apps/activity/urls.py

@@ -5,6 +5,7 @@ from .views import *
 urlpatterns = (
     url(r'^branch/data/$', branch_list),
     url(r'^branch/save/$', branch_save),
+    url(r'^self_branch/$', self_branch),
 
     url(r'^member/data/$', member_list),
     url(r'^member_coupon/data/$', member_coupon_list),
@@ -12,5 +13,16 @@ urlpatterns = (
     url(r'^member_coupon/cancel_write_off/$', coupon_cancel_write_off),
 
     url(r'^order/data/$', order_list),
+
+    url(r'^coupon/data/$', coupon_list),
+    url(r'^coupon/save/$', coupon_save),
+    url(r'^coupon/dict/$', coupon_dict),
+
+    url(r'^activity/data/$', activity_list),
+    url(r'^activity/save/$', activity_save),
+    url(r'^activity/delete/$', activity_delete),
+    url(r'^activity/check/$', activity_check),
+    url(r'^activity/signs_save/$', activity_signs_save),
+    url(r'^activity/coupon_save/$', activity_coupon_save),
 )
 

+ 184 - 0
apps/activity/views.py

@@ -46,6 +46,15 @@ def branch_save(request):
         return JSONError(u'保存失败!')
 
 
+@token_required
+def self_branch(request):
+    order = Branch.objects.filter(id=request.user.branch_id).first()
+    data = {}
+    if order:
+        data = {'name': order.name, 'tel': order.tel, 'address': order.address}
+    return JSONResponse({'data': data})
+
+
 @token_required
 def member_list(request):
     f = CustomerFilter(request.GET, queryset=Customer.objects.filter(branch=request.user.branch))
@@ -104,3 +113,178 @@ def order_list(request):
     rows, total = utils.get_page_data(request, f.qs)
     serializer = OrderSerializer(rows, many=True)
     return DataGridJSONResponse(serializer.data, total)
+
+
+@token_required
+def coupon_list(request):
+    f = BranchFilter(request.GET, queryset=Coupon.objects.filter(branch=request.user.branch))
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = CouponSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)
+
+
+@token_required
+def coupon_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+
+    try:
+        with transaction.atomic():
+            data['branch'] = request.user.branch_id
+            serializer = CouponSerializer.factory(request.user, data, id)
+            serializer.validSave()
+        return JSONResponse(serializer.data)
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+
+
+@token_required
+def coupon_dict(request):
+    rows = Coupon.objects.filter(
+        Q(branch=request.user.branch, enabled=True) &
+        Q(
+            Q(end_date__isnull=False) & Q(end_date__gt=timezone.now().date()) |
+            Q(end_date__isnull=True)
+        )
+    )
+
+    serializer = CouponComboboxSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, rows.count())
+
+
+@token_required
+def activity_list(request):
+    if request.user.is_superuser:
+        rows = Activity.objects.filter(delete=False)
+    else:
+        rows = Activity.objects.filter(branch_id=request.user.branch_id, delete=False)
+    f = ActivityFilter(request.GET, queryset=rows)
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = ActivitySerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)
+
+
+@token_required
+def activity_save(request):
+    id = request.GET.get('id')
+    data = json.loads(request.body)
+
+    try:
+        with transaction.atomic():
+            data['branch'] = request.user.branch_id
+            serializer = ActivitySerializer.factory(request.user, data, id)
+            serializer.validSave()
+        return JSONResponse(serializer.data)
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+
+@token_required
+def activity_delete(request):
+    id = request.GET.get('id')
+
+    try:
+        with transaction.atomic():
+            order = Activity.objects.filter(id=id).first()
+            if order.check_status == settings.PASS:
+                raise CustomError(u'该活动已审核')
+
+            order.delete = True
+            order.save()
+            BizLog.objects.addnew(request.user, BizLog.INSERT, u"删除活动[%s],id=%s" % (order.title, order.id))
+        return JSONResponse({})
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+
+
+@token_required
+def activity_check(request):
+    id = request.GET.get('id')
+    status = request.GET.get('status')
+
+    try:
+        with transaction.atomic():
+            order = Activity.objects.filter(id=id).first()
+            if order.delete:
+                raise CustomError(u'该活动已删除')
+
+            if order.check_status == int(status):
+                raise CustomError(u'该活动已当前状态不允许执行此操作')
+
+            if int(status) == settings.PASS:
+                order.check_status = settings.PASS
+                order.save()
+                BizLog.objects.addnew(request.user, BizLog.INSERT, u"审核活动[%s],id=%s" % (order.title, order.id))
+            else:
+                order.check_status = settings.DEFAULT
+                order.save()
+                BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动撤销审核[%s],id=%s" % (order.title, order.id))
+
+        return JSONResponse({})
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+
+
+@token_required
+def activity_signs_save(request):
+    id = request.GET.get('id')
+    signs = request.POST.get('signs')
+
+    try:
+        with transaction.atomic():
+            signs = json.loads(signs)
+            order = Activity.objects.filter(id=id).first()
+            if order.delete:
+                raise CustomError(u'该活动已删除')
+
+            save_sign = ''
+            for sign in signs:
+                save_sign += sign + ','
+            order.required_signs = save_sign
+            order.save()
+
+            BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动设置必填项[%s],id=%s" % (order.title, order.id),signs )
+        return JSONResponse({})
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')
+
+@token_required
+def activity_coupon_save(request):
+    id = request.GET.get('id')
+    coupon_ids = request.POST.get('coupons')
+
+    try:
+        with transaction.atomic():
+            coupons = json.loads(coupon_ids)
+            order = Activity.objects.filter(id=id).first()
+            if order.delete:
+                raise CustomError(u'该活动已删除')
+
+            ActivityCoupon.objects.filter(activity=order).delete()
+            for coupon in coupons:
+                ActivityCoupon.objects.create(
+                    activity=order,
+                    coupon_id=coupon
+                )
+
+            BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动添加优惠券[%s],id=%s" % (order.title, order.id),coupon_ids )
+        return JSONResponse({})
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'保存失败!')

+ 1 - 1
apps/serializer_errors.py

@@ -178,7 +178,7 @@ def dump_serializer_errors(serializer):
                     msg = msg % field.min_length
 
             except:
-                msg = unicode(error_detail)
+                msg = str(error_detail)
         msg = label + msg
         result.append(msg)
     return u'<br />'.join(result)

+ 2 - 1
carwin_activity/settings.py

@@ -14,7 +14,7 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
 import os
 
 # 软件版本
-VERSION = '1.2.0'
+VERSION = '1.0.0'
 
 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -34,6 +34,7 @@ DEBUG = True
 ALLOWED_HOSTS = ['*']
 
 TAXRATIO = 16
+DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760 #10M
 
 
 # Application definition

+ 16 - 0
uis/layuiadmin/modules/utils.js

@@ -91,6 +91,22 @@ layui.define(['table','form'],function(exports){
                 return '该数字必须大于等于0';
             }
         },
+        intGtz: function (value, item) {
+            value = value.trim();
+            if (value === '') {
+                return;
+            }
+            if (!(/^[0-9]\d*$/i.test(value))){
+                return '请输入整数';
+            }
+            value = parseInt(value);
+            if (isNaN(value)){
+                return '请输入整数';
+            }
+            if (value < 0){
+                return '该整数必须大于等于0';
+            }
+        },
         tel: function (value, item) {
             value = value.trim();
             if (value === '') {

+ 14 - 32
uis/views/account/employee.html

@@ -52,6 +52,17 @@
                 </div>
             </div>
 
+            <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">是否激活:</label>
+                <div class="layui-input-block">
+                    <select name="enabled">
+                        <option value="">全部</option>
+                        <option value="1" selected>是</option>
+                        <option value="0">否</option>
+                    </select>
+                </div>
+            </div>
+
           </div>
           <div class="layui-form-item" style="display: none">
                 <button id="query_search" class="layui-btn" lay-submit lay-filter="query-form-element">查询</button>
@@ -82,8 +93,9 @@
         ,{field:'tel', title:'手机号码',width: 130}
         ,{field:'address', title:'家庭住址',minWidth: 200}
         ,{field:'enabled_text', title:'激活', width:90}
-        ,{width:170, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+        ,{width:80, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
+      ,where: {'enabled': 1}
       ,page: true
       ,height: 'full-104'
       ,done: function () {
@@ -114,36 +126,6 @@
           },
           content: 'employee_edit.html?id='+data.id
         });
-      } else if(obj.event === 'manage_range'){
-         table.editdata = data;
-         layer.open({
-          type: 2,
-          title: '管理范围',
-          shadeClose: false,
-          area: ['650px', '80%'],
-          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: 'manage_range.html?id='+data.id
-        });
-      }else if(obj.event === 'delete'){
-         layer.confirm('确定要删除吗?', function(index){
-             layer.close(index);
-            layui.admin.req({
-              url: '/account/employee/delete/?id='+data.id
-              ,done: function(res){
-                table.reload('datagrid',{});
-              }
-            });
-         });
       }
     });
 
@@ -172,7 +154,7 @@
         layer.open({
           type: 1,
           shadeClose: true,
-          area: ['500px', '250px'],
+          area: ['500px', '400px'],
           title: '查询',
           btn: ['查询'],
           yes: function(index, dom){

+ 19 - 16
uis/views/account/employee_edit.html

@@ -9,10 +9,6 @@
   <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 type="text/css">
-        #department_selecter dl{max-height: 250px;}
-        #group_selecter dl{max-height: 200px;}
-    </style>
 </head>
 <body>
 
@@ -79,6 +75,13 @@
                   </div>
                 </div>
 
+                <div class="layui-col-lg6">
+                  <label class="layui-form-label">激活:</label>
+                  <div class="layui-input-block">
+                    <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                  </div>
+                </div>
+
                 <button class="layui-btn" id="submit_btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
 
               </div>
@@ -115,25 +118,25 @@
             branch_node.append("<option value='"+pid+"'>"+value+"</option>");
         }
         form.render();
-        //warehouse_isload = true;
-        //loadData();// 赋值完成后调用传值
+        loadData();// 赋值完成后调用传值
      }
     });
 
     var editdata = null;
-    var department = '';
     var id = layui.view.getParameterByName('id');
+    var loadData = function () {
+        if(id){
+          editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+          editdata.password = '';
+          form.val("component-form-element", {'password':'1111'});
+          if(editdata){
+              form.val("component-form-element", editdata);
+          }
+      }
+    };
+
 
-    if(id){
-      department = parent.layui.table.editdata.department;
-      editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
-      editdata.password = '';
-    }
 
-    form.val("component-form-element", {'password':'1111'});
-    if(editdata){
-        form.val("component-form-element", editdata);
-    }
 
 
     form.on('submit(component-form-element)', function(data){

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

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

+ 96 - 0
uis/views/activity/coupons.html

@@ -0,0 +1,96 @@
+<!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>
+        #group_selecter dl{max-height: 200px;}
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+        <div class="layui-card">
+
+          <div class="layui-card-body" pad15>
+            <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" id="group_selecter">
+                    <select name="groups" xm-select="selectGroup">
+
+                    </select>
+                  </div>
+                </div>
+                <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+              </div>
+            </form>
+          </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', 'formSelects'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,formSelects = layui.formSelects
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+
+     formSelects.config('selectGroup', {
+      beforeSuccess:function(eid, url, searchVal, result){
+          if(id){
+              var coupons = layui.view.getParameterByName('coupons');
+              for(var n in result.data){
+                  var item = result.data[n];
+                  if(coupons.indexOf(parseInt(item.value)) > -1)
+                      item.selected = 'selected';
+              }
+          }
+
+          return result;
+      }
+    });
+
+    formSelects.data('selectGroup', 'server', {
+        url: '/activity/coupon/dict/'
+    });
+
+
+    form.on('submit(component-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+      var groups = formSelects.value('selectGroup', 'val');
+      admin.req({
+        url: '/activity/activity/coupon_save/?id='+id
+        ,data: {'coupons': JSON.stringify(groups)}
+        ,type: 'post'
+        ,done: function(res){
+            parent.layer.closeAll('iframe');
+            parent.layui.table.reload('datagrid',{});
+        }
+      });
+
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 134 - 0
uis/views/activity/details.html

@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en">
+<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-card">
+            <div class="layui-card-body" pad15>
+               <div class="layui-tab layui-tab-card">
+                   <ul class="layui-tab-title">
+                       <li class="layui-this">活动信息</li>
+                       <li>购买记录</li>
+                       <li>优惠券</li>
+                   </ul>
+                   <div class="layui-tab-content">
+                       <div class="layui-tab-item layui-show">
+                           <table class="layui-table">
+                               <tr>
+                                   <th style="width: 100px;">标题</th>
+                                   <td id="title" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">门店名称</th>
+                                   <td id="branch_name" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">门店电话</th>
+                                   <td id="branch_tel" class="cell"></td>
+                               </tr>
+
+                              <tr>
+                                   <th style="width: 100px;">费用</th>
+                                   <td id="amount" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">返利</th>
+                                   <td id="rebate" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">介绍</th>
+                                   <td id="describe" class="cell"></td>
+                               </tr>
+                                <tr>
+                                   <th style="width: 100px;">截止日期</th>
+                                   <td id="end_date" class="cell"></td>
+                               </tr>
+                                <tr>
+                                   <th style="width: 100px;">状态</th>
+                                   <td id="check_status_text" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">门店地址</th>
+                                   <td id="branch_address" class="cell"></td>
+                               </tr>
+                               <tr>
+                                   <th style="width: 100px;">添加时间</th>
+                                   <td id="create_time" class="cell"></td>
+                               </tr>
+                           </table>
+                       </div>
+                       <div class="layui-tab-item">
+                           <table class="layui-hide" id="datagrid" style="margin-top: 10px;"></table>
+                       </div>
+                       <div class="layui-tab-item">
+                           <table class="layui-hide" id="coupon_datagrid" style="margin-top: 10px;"></table>
+                       </div>
+                   </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','laydate', 'utils'], function () {
+            var $ = layui.$;
+            var table = layui.table;
+            var admin = layui.admin;
+            var options = null;
+
+            var id = layui.view.getParameterByName('id');
+            var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata));
+            $('.cell').each(function (index, element) {
+                if (editdata[element.id]){
+                    element.innerHTML =  (editdata[element.id]);
+                }
+            });
+
+            table.render({
+              elem: '#datagrid'
+              ,url: '/activity/order/data/'
+              ,cols: [[
+                {field:'member_name', title:'会员名称',width: 120}
+                ,{field:'member_tel', title:'会员电话',width: 120}
+                ,{field:'name', title:'姓名', width:100}
+                ,{field:'model', title:'车型', width:200}
+                ,{field:'tel', title:'电话', width:120}
+                ,{field:'number', title:'车牌号', width:110}
+                ,{field:'status_text', title:'状态', width:90}
+                ,{field:'create_time', title:'创建时间', width:180}
+              ]]
+              ,where: {'activity': id, 'delete': 0}
+              ,height: 'full-108'
+            });
+
+            table.render({
+              elem: '#coupon_datagrid'
+              ,url: '/activity/coupon/data/'
+              ,cols: [[
+                {field:'name', title:'名称', width:200}
+                ,{field:'end_date', title:'截止日期',width: 150}
+                ,{field:'end_days', title:'截止天数',width: 100}
+                ,{field:'create_time', title:'添加时间', width:300}
+                ,{field:'enabled_text', title:'在用', width:90}
+              ]]
+              ,where: {'activity': id}
+              ,height: 'full-108'
+            });
+
+        })
+    </script>
+</body>
+</html>

+ 159 - 0
uis/views/activity/edit.html

@@ -0,0 +1,159 @@
+<!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"/>
+  <link rel="stylesheet" type="text/css" href="../../layuiadmin/layui/ueditor/themes/default/css/umeditor.css"/>
+    <script type="text/javascript" src="../../layuiadmin/layui/ueditor/third-party/jquery.min.js"></script>
+    <script type="text/javascript" charset="utf-8" src="../../layuiadmin/layui/ueditor/umeditor.config.js"></script>
+    <script type="text/javascript" charset="utf-8" src="../../layuiadmin/layui/ueditor/umeditor.js"></script>
+    <script type="text/javascript" src="../../layuiadmin/layui/ueditor/lang/zh-cn/zh-cn.js"></script>
+</head>
+<body>
+
+  <div class="layui-fluid">
+    <div class="layui-row layui-col-space15">
+        <div class="layui-card">
+
+          <div class="layui-card-body" pad15>
+            <form class="layui-form" action="" lay-filter="component-form-element">
+              <div class="layui-row layui-col-space10 layui-form-item">
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>门店名称:</label>
+                  <div class="layui-input-block">
+                    <input type="text" id="id_branch_name" name="branch_name" lay-verify="required" placeholder="请输入门店名称" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>门店电话:</label>
+                  <div class="layui-input-block">
+                    <input type="text" id="id_branch_tel" name="branch_tel" lay-verify="required" placeholder="请输入门店电话" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>活动标题:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="title" lay-verify="required" placeholder="请输入标题" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>活动价格:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="amount" lay-verify="required|numberGtZ" placeholder="请输入价格" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>活动返利:</label>
+                  <div class="layui-input-block">
+                    <input type="text" name="rebate" lay-verify="required|numberGtZ" placeholder="请输入返利" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div>
+                  <label class="layui-form-label"><font color='red' size="4">*</font>截止时间:</label>
+                  <div class="layui-input-block">
+                   <input id="date" type="text" name="end_date" placeholder="请输入报名截止时间" autocomplete="off" class="layui-input" lay-verify="required">
+                  </div>
+                </div>
+
+                <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>
+                  <label class="layui-form-label">门店地址:</label>
+                  <div class="layui-input-block">
+                    <input type="text" id="id_branch_address" name="branch_address" placeholder="请输入门店地址" autocomplete="off" class="layui-input">
+                  </div>
+                </div>
+
+                <div class="layui-col-xs12 layui-col-sm6">
+                  <label class="layui-form-label">是否在用:</label>
+                  <div class="layui-input-block">
+                    <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                  </div>
+                </div>
+
+                <button class="layui-btn" id="id_save" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+              </div>
+            </form>
+          </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', 'laydate'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,upload = layui.upload
+    ,laydate = layui.laydate
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+
+    var um = UM.getEditor('myEditor');
+    um.setWidth('100%');
+    $(".edui-body-container").css("width", "98%");
+
+    laydate.render({
+        elem: '#date'
+        ,type: 'date'
+        ,trigger: 'click'
+    });
+    if(id){
+        var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+        form.val("component-form-element", editdata);
+        um.setContent(editdata.describe);
+    }else{
+        admin.req({
+            url: '/activity/self_branch/'
+            , done: function (res) {
+                $('#id_branch_name').val(res.data.data.name);
+                $('#id_branch_tel').val(res.data.data.tel);
+                $('#id_branch_address').val(res.data.data.address);
+            }
+        });
+    }
+
+    form.render(null, 'component-form-element');
+    form.on('submit(component-form-element)', function(data){
+        var describe = UM.getEditor('myEditor').getContent();
+        data.field['describe'] = describe;
+
+        admin.req({
+            url: '/activity/activity/save/?id='+id
+            ,data: JSON.stringify(data.field)
+            ,type: 'post'
+            ,done: function(res){
+                parent.layui.onSubmitChild(res.data);
+            }
+          });
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 362 - 0
uis/views/activity/index.html

@@ -0,0 +1,362 @@
+<!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>
+<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: 30px;}
+    .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;}
+  </style>
+<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;">
+              <button class="layui-btn layui-btn-sm"  id="btn_add"><i class="layui-icon layui-icon-add-circle"></i>添加</button>
+              <button class="layui-btn layui-btn-sm"  id="btn_del"><i class="layui-icon layui-icon-delete"></i>删除</button>
+                <button class="layui-nav" id="show_check">
+                <div class="layui-nav-item">
+                  <a href="javascript:;" style="color:#fff;">审核</a>
+                  <dl class="layui-nav-child"> <!-- 二级菜单 -->
+                    <dd><a href="#" id="btn_check">审核</a></dd>
+                    <dd><a href="#" id="btn_revoke_check">撤销审核</a></dd>
+                  </dl>
+                </div>
+              </button>
+              <button class="layui-btn layui-btn-sm"  id="btn_coupon"><i class="layui-icon layui-icon-ok-circle"></i>添加优惠券</button>
+              <button class="layui-btn layui-btn-sm"  id="btn_set"><i class="layui-icon layui-icon-ok-circle"></i>购买设置</button>
+              <button class="layui-btn layui-btn-sm" id="btn_query"><i class="layui-icon layui-icon-search"></i>查询</button>
+            </div>
+
+            <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+
+            <script type="text/html" id="datagrid-operate-bar">
+                <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="code">二维码</a>
+                </div>
+            </script>
+          </div>
+        </div>
+        </div>
+    </div>
+  </div>
+
+  <div id="dlg_query" style="display: none">
+    <div class="layui-card-body" pad15>
+        <form class="layui-form" lay-filter="query-form-element">
+          <div class="layui-row layui-col-space10 layui-form-item">
+              <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">标题:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="title" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+              <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">门店名称:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="branch_name" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+              <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">状态:</label>
+                <div class="layui-input-block">
+                    <select name="check_status">
+                        <option value="">全部</option>
+                        <option value="0" selected>未审核</option>
+                        <option value="1">已审核</option>
+                    </select>
+                </div>
+            </div>
+
+            <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">是否在用:</label>
+                <div class="layui-input-block">
+                    <select name="enabled">
+                        <option value="">全部</option>
+                        <option value="1" selected>是</option>
+                        <option value="0">否</option>
+                    </select>
+                </div>
+            </div>
+
+          </div>
+          <div class="layui-form-item" style="display: none">
+                <button id="query_search" class="layui-btn" lay-submit lay-filter="query-form-element">查询</button>
+          </div>
+        </form>
+    </div>
+   </div>
+
+  <script src="../../layuiadmin/layui/layui.js?t=1"></script>
+  <script>
+  var _params = '';
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index' //主入口模块
+  }).use(['index', 'table', 'utils'], function(){
+    var $ = layui.$
+    ,form = layui.form
+    ,utils = layui.utils;
+    var table = layui.table;
+
+    var superuser = layui.data(layui.setter.tableName)['superuser'];
+      if(!superuser){
+          $('#show_check').remove();
+      }
+
+    table.render({
+      elem: '#datagrid'
+      ,url: '/activity/activity/data/'
+      ,cols: [[
+          {type: 'radio', width: 50}
+        ,{field:'title', title:'标题', width:200}
+        ,{field:'end_date', title:'截止日期',width: 200}
+        ,{field:'amount', title:'费用',width: 100}
+        ,{field:'rebate', title:'返利',width: 100}
+        ,{field:'check_status_text', title:'状态',width: 100}
+        ,{field:'branch_name', title:'门店名称',width: 100}
+        ,{field:'branch_tel', title:'门店电话',width: 100}
+        ,{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'}
+      ]]
+      ,where: {'enabled': 1}
+      ,page: true
+      ,height: 'full-104'
+      ,done: function () {
+        layui.index.removeNoPermButtons();
+      }
+    });
+
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+      table.editdata = data;
+        if(obj.event === 'edit'){
+        if (data.check_status == 1) {
+            layer.msg('该活动已审核');
+            return false;
+        }
+        layer.open({
+          type: 2,
+          title: '修改',
+          shadeClose: false,
+          area: ['70%', '90%'],
+          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: 'edit.html?id='+data.id
+        });
+      }else if(obj.event === 'view'){
+        layer.open({
+          type: 2,
+          title: '查看',
+          shadeClose: true,
+          area: ['70%', '90%'],
+          content: 'details.html?id='+data.id
+        });
+      }
+    });
+
+    $('#btn_add').on('click', function(){
+        layer.open({
+          type: 2,
+          title: '添加',
+          shadeClose: false,
+          area: ['70%', '90%'],
+          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: 'edit.html'
+        });
+    });
+
+    $('#btn_query').on('click', function(){
+        layer.open({
+          type: 1,
+          shadeClose: true,
+          area: ['500px', '400px'],
+          title: '查询',
+          btn: ['查询'],
+          yes: function(index, dom){
+             $('#query_search').click();
+          },
+          content: $('#dlg_query')
+        });
+    });
+
+    //删除
+    $('#btn_del').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return false;
+         }
+
+         if (data.check_status == 1) {
+              layer.msg('该活动已审核');
+                return false;
+         }
+
+         layer.confirm('确定要删除吗?', function (index) {
+            layer.close(index);
+            layui.admin.req({
+                url: '/activity/activity/delete/?id=' + data.id
+                , done: function (res) {
+                    table.reload('datagrid', {});
+                }
+            });
+        });
+    });
+
+    //审核
+    $('#btn_check').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return false;
+         }
+
+         if (data.check_status == 1) {
+              layer.msg('该活动已审核');
+                return false;
+         }
+
+         layer.confirm('确定要审核吗?', function (index) {
+            layer.close(index);
+            layui.admin.req({
+                url: '/activity/activity/check/?id=' + data.id + '&status=1'
+                , done: function (res) {
+                    table.reload('datagrid', {});
+                }
+            });
+        });
+    });
+
+    //撤销审核
+    $('#btn_revoke_check').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return false;
+         }
+
+         if (data.check_status == 0) {
+              layer.msg('该活动尚未审核');
+                return false;
+         }
+
+         layer.confirm('确定要撤销审核吗?', function (index) {
+            layer.close(index);
+            layui.admin.req({
+                url: '/activity/activity/check/?id=' + data.id + '&status=0'
+                , done: function (res) {
+                    table.reload('datagrid', {});
+                }
+            });
+        });
+    });
+
+     //必填项设置
+    $('#btn_set').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return false;
+         }
+
+         layer.open({
+          type: 2,
+          title: '购买必填设置',
+          shadeClose: true,
+          area: ['70%', '90%'],
+          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: 'sale_set.html?id='+data.id + '&required_signs=' + data.required_signs
+        });
+    });
+
+     //优惠券设置
+    $('#btn_coupon').on('click', function(){
+        var data = utils.getSelectedRow('datagrid');
+         if(data == false){
+             return false;
+         }
+
+         layer.open({
+          type: 2,
+          title: '添加优惠券',
+          shadeClose: true,
+          area: ['70%', '90%'],
+          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: 'coupons.html?id='+data.id + '&coupons=' + data.coupons
+        });
+    });
+
+    form.on('submit(query-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+      _params = data.field;
+      table.reload('datagrid', {
+          where: data.field,
+          page:{curr:1}
+      });
+      layer.closeAll();
+      return false;
+    });
+
+  });
+  </script>
+</body>
+</html>
+

+ 93 - 0
uis/views/activity/sale_set.html

@@ -0,0 +1,93 @@
+<!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>
+        #group_selecter dl{max-height: 200px;}
+    </style>
+</head>
+<body>
+
+  <div class="layui-fluid">
+        <div class="layui-card">
+
+          <div class="layui-card-body" pad15>
+            <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" id="group_selecter">
+                    <select name="groups" xm-select="selectGroup">
+
+                    </select>
+                  </div>
+                </div>
+                <button id="id_save" class="layui-btn" lay-submit lay-filter="component-form-element" style="display: none">保存</button>
+              </div>
+            </form>
+          </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', 'formSelects'], function(){
+    var $ = layui.$
+    ,admin = layui.admin
+    ,formSelects = layui.formSelects
+    ,form = layui.form;
+    var id = layui.view.getParameterByName('id');
+    var required_signs = layui.view.getParameterByName('required_signs');
+    var signs = [];
+    if (required_signs){
+        signs = required_signs.split(',');
+    }
+
+    var group_data = [{value: '姓名', name:'姓名'}, {value: '车牌号', name:'车牌号'},  {value: '车型', name:'车型'}];
+     for(var n in group_data){
+          var item = group_data[n];
+          if(signs.indexOf(item.value) > -1){
+              item['selected'] = 'selected';
+          }
+     }
+
+     formSelects.data('selectGroup', 'local', {
+        arr: group_data
+    });
+
+    form.on('submit(component-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+      var groups = formSelects.value('selectGroup', 'val');
+      admin.req({
+        url: '/activity/activity/signs_save/?id='+id
+        ,data: {'signs': JSON.stringify(groups)}
+        ,type: 'post'
+        ,done: function(res){
+            parent.layer.closeAll('iframe');
+            parent.layui.table.reload('datagrid',{});
+        }
+      });
+
+      return false;
+    });
+
+    parent.layui.submitChild = function () {
+      $("#id_save").click();
+    };
+  });
+  </script>
+</body>
+</html>

+ 7 - 0
uis/views/branch/edit.html

@@ -39,6 +39,13 @@
                                     <input type="text" name="address" autocomplete="off" class="layui-input">
                                 </div>
                             </div>
+
+                            <div class="layui-col-xs12 layui-col-sm6">
+                              <label class="layui-form-label">在用:</label>
+                              <div class="layui-input-block">
+                                <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                              </div>
+                            </div>
                             <button id="customer_submit" lay-submit lay-filter="component-form-element"
                                     style="display: none">保存
                             </button>

+ 21 - 4
uis/views/branch/index.html

@@ -40,15 +40,26 @@
         <form class="layui-form" lay-filter="query-form-element">
           <div class="layui-row layui-col-space10 layui-form-item">
               <div class="layui-col-xs12 layui-col-sm12">
-                <label class="layui-form-label">员工姓名:</label>
+                <label class="layui-form-label">名:</label>
                 <div class="layui-input-block">
                     <input type="text" name="name" autocomplete="off" class="layui-input">
                 </div>
             </div>
             <div class="layui-col-xs12 layui-col-sm12">
-                <label class="layui-form-label">员工账号:</label>
+                <label class="layui-form-label">电话:</label>
                 <div class="layui-input-block">
-                    <input type="text" name="username" autocomplete="off" class="layui-input">
+                    <input type="text" name="tel" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">是否在用:</label>
+                <div class="layui-input-block">
+                    <select name="enabled">
+                        <option value="">全部</option>
+                        <option value="1" selected>是</option>
+                        <option value="0">否</option>
+                    </select>
                 </div>
             </div>
 
@@ -72,6 +83,11 @@
     ,form = layui.form;
     var table = layui.table;
 
+    var superuser = layui.data(layui.setter.tableName)['superuser'];
+      if(!superuser){
+          $('#btn_add').remove()
+      }
+
     table.render({
       elem: '#datagrid'
       ,url: '/activity/branch/data/'
@@ -82,6 +98,7 @@
         ,{field:'enabled_text', title:'在用', width:90}
         ,{width:80, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
+      ,where: {'enabled': 1}
       ,page: true
       ,height: 'full-104'
       ,done: function () {
@@ -140,7 +157,7 @@
         layer.open({
           type: 1,
           shadeClose: true,
-          area: ['500px', '250px'],
+          area: ['500px', '400px'],
           title: '查询',
           btn: ['查询'],
           yes: function(index, dom){

+ 149 - 0
uis/views/coupon/edit.html

@@ -0,0 +1,149 @@
+<!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-card">
+        <div class="layui-card-body" pad15>
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md12">
+                    <form class="layui-form" action="" lay-filter="component-form-element">
+
+                        <div class="layui-row layui-col-space10">
+                            <div class="layui-col-xs12 layui-col-sm6">
+                                <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" autocomplete="off" class="layui-input">
+                                </div>
+                            </div>
+
+                            <div class="layui-col-xs12 layui-col-sm6">
+                                <label class="layui-form-label">有效期类型:</label>
+                                <div class="layui-input-block">
+                                    <select id="off_type" name="off_type" lay-filter="collage" class="layui-select">
+                                        <option value="0">固定日期</option>
+                                        <option value="1">领取计时</option>
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="layui-col-xs12 layui-col-sm6">
+                                <label class="layui-form-label">截止日期:</label>
+                                <div class="layui-input-block">
+                                    <input  type="text" class="layui-input" autocomplete="off"   name="end_date" id="id_end_date">
+                                </div>
+                            </div>
+
+                            <div class="layui-col-xs12 layui-col-sm6">
+                                <label class="layui-form-label">截止天数:</label>
+                                <div class="layui-input-block">
+                                    <input id="id_end_days" type="text" name="end_days" autocomplete="off" class="layui-input">
+                                </div>
+                            </div>
+
+
+                            <div class="layui-col-xs12 layui-col-sm6">
+                              <label class="layui-form-label">在用:</label>
+                              <div class="layui-input-block">
+                                <input type="checkbox" name="enabled" lay-skin="switch" lay-text="是|否" checked="" value="1">
+                              </div>
+                            </div>
+                            <button id="customer_submit" lay-submit lay-filter="component-form-element" 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', //主入口模块
+    utils:'utils'
+
+  }).use(['index', 'form', 'utils', 'laydate'], function(){
+        var $ = layui.$
+        ,admin = layui.admin
+        ,form = layui.form
+        ,laydate = layui.laydate
+        ,utils = layui.utils;
+
+        $('#id_end_days').attr('disabled', true);
+        form.on('select(collage)', function (data) {
+            var off_type = $('#off_type').val();
+            if (off_type == '0') {
+                $('#id_end_days').attr('disabled', true);
+                $('#id_end_date').attr('disabled', false);
+                $('#id_end_days').val('');
+            }else {
+                $('#id_end_date').attr('disabled', true);
+                $('#id_end_days').attr('disabled', false);
+                $('#id_end_date').val('');
+            }
+        });
+
+        var editdata = null;
+        var id = layui.view.getParameterByName('id');
+        if(id){
+              editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+              form.val("component-form-element", editdata);
+        }
+
+        form.on('submit(component-form-element)', function(data){
+            var off_type = $('#off_type').val();
+            var end_date = $('#id_end_date').val();
+            var end_days = $('#id_end_days').val();
+
+            if (off_type == '0' && end_date === ''){
+                layer.msg('请填写截止日期');
+                 return false;
+            }
+            if (off_type == '1' && end_days === ''){
+                layer.msg('请填写截止天数');
+                return false;
+            }
+            if (off_type == '0') {
+                delete data.field['end_days'];
+            } else {
+                delete data.field['end_date'];
+            }
+          admin.req({
+            url: '/activity/coupon/save/?id='+id
+            ,data: JSON.stringify(data.field)
+            ,type: 'post'
+            ,done: function (res) {
+                  parent.layui.onSubmitChild(res.data);
+              }
+          });
+
+          return false;
+        });
+
+        parent.layui.submitChild = function () {
+          $("#customer_submit").click();
+        };
+
+        laydate.render({
+            elem: '#id_end_date',
+            trigger: 'click',
+            closeStop: '#id_end_date'
+        });
+
+  });
+  </script>
+</body>
+</html>

+ 175 - 0
uis/views/coupon/index.html

@@ -0,0 +1,175 @@
+<!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-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;">
+              <button class="layui-btn layui-btn-sm"  id="btn_add"><i class="layui-icon layui-icon-add-circle"></i>添加</button>
+              <button class="layui-btn layui-btn-sm" id="btn_query"><i class="layui-icon layui-icon-search"></i>查询</button>
+            </div>
+
+            <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+
+            <script type="text/html" id="datagrid-operate-bar">
+                <div class="layui-btn-group">
+                  <a class="layui-btn layui-btn-xs"  lay-event="edit">修改</a>
+                </div>
+            </script>
+          </div>
+        </div>
+        </div>
+    </div>
+  </div>
+
+  <div id="dlg_query" style="display: none">
+    <div class="layui-card-body" pad15>
+        <form class="layui-form" lay-filter="query-form-element">
+          <div class="layui-row layui-col-space10 layui-form-item">
+              <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">名称:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="name" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+
+            <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">是否在用:</label>
+                <div class="layui-input-block">
+                    <select name="enabled">
+                        <option value="">全部</option>
+                        <option value="1" selected>是</option>
+                        <option value="0">否</option>
+                    </select>
+                </div>
+            </div>
+
+          </div>
+          <div class="layui-form-item" style="display: none">
+                <button id="query_search" class="layui-btn" lay-submit lay-filter="query-form-element">查询</button>
+          </div>
+        </form>
+    </div>
+   </div>
+
+  <script src="../../layuiadmin/layui/layui.js?t=1"></script>
+  <script>
+  var _params = '';
+  layui.config({
+    base: '../../../layuiadmin/' //静态资源所在路径
+  }).extend({
+    index: 'lib/index' //主入口模块
+  }).use(['index', 'table'], function(){
+    var $ = layui.$
+    ,form = layui.form;
+    var table = layui.table;
+
+    table.render({
+      elem: '#datagrid'
+      ,url: '/activity/coupon/data/'
+      ,cols: [[
+        {field:'name', title:'名称', width:200}
+        ,{field:'end_date', title:'截止日期',width: 200}
+        ,{field:'end_days', title:'截止天数',width: 200}
+        ,{field:'create_time', title:'添加时间', width:300}
+        ,{field:'enabled_text', title:'在用', width:90}
+        ,{width:80, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+      ]]
+      ,where: {'enabled': 1}
+      ,page: true
+      ,height: 'full-104'
+      ,done: function () {
+        layui.index.removeNoPermButtons();
+      }
+    });
+
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+        if(obj.event === 'edit'){
+        table.editdata = data;
+        layer.open({
+          type: 2,
+          title: '修改',
+          shadeClose: false,
+          area: ['550px', '85%'],
+          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: 'edit.html?id='+data.id
+        });
+      }
+    });
+
+    $('#btn_add').on('click', function(){
+        layer.open({
+          type: 2,
+          title: '添加',
+          shadeClose: false,
+          area: ['550px', '85%'],
+          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: 'edit.html'
+        });
+    });
+
+    $('#btn_query').on('click', function(){
+        layer.open({
+          type: 1,
+          shadeClose: true,
+          area: ['500px', '400px'],
+          title: '查询',
+          btn: ['查询'],
+          yes: function(index, dom){
+             $('#query_search').click();
+          },
+          content: $('#dlg_query')
+        });
+    });
+
+    form.on('submit(query-form-element)', function(data){
+      //layer.msg(JSON.stringify(data.field));
+      _params = data.field;
+      table.reload('datagrid', {
+          where: data.field,
+          page:{curr:1}
+      });
+      layer.closeAll();
+      return false;
+    });
+
+  });
+  </script>
+</body>
+</html>
+

+ 19 - 7
uis/views/index.html

@@ -68,15 +68,20 @@
               </a>
               <dl class="layui-nav-child">
                 <dd data-name="nav">
-                  <a lay-href="branch/index.html">活动管理</a>
+                  <a lay-href="activity/index.html">活动管理</a>
                 </dd>
               </dl>
-              <dl class="layui-nav-child">
+              <dl class="layui-nav-child" id="manage_coupon">
+                <dd data-name="nav">
+                  <a lay-href="coupon/index.html">优惠券管理</a>
+                </dd>
+              </dl>
+              <dl class="layui-nav-child" id="manage_member">
                 <dd data-name="nav">
                   <a lay-href="member/index.html">会员管理</a>
                 </dd>
               </dl>
-              <dl class="layui-nav-child">
+              <dl class="layui-nav-child" id="manage_order">
                 <dd data-name="nav">
                   <a lay-href="order/index.html">订单管理</a>
                 </dd>
@@ -92,7 +97,7 @@
                 <dd data-name="nav">
                   <a lay-href="branch/index.html">门店管理</a>
                 </dd>
-                <dd data-name="nav" >
+                <dd data-name="nav" id="manage_employee">
                   <a lay-href="account/employee.html">人员管理</a>
                 </dd>
               </dl>
@@ -148,8 +153,15 @@
       var name = layui.data(layui.setter.tableName)['name'];
       $('#id_username').html(name);
 
-      var permissions = layui.data(layui.setter.tableName)['permissions'];
-      $('#LAY-system-side-muen .layui-nav-child dd').each(function () {
+      var superuser = layui.data(layui.setter.tableName)['superuser'];
+      if(!superuser){
+          $('#manage_employee').remove()
+      }else{
+           $('#manage_coupon').remove();
+           $('#manage_member').remove();
+           $('#manage_order').remove();
+      }
+      /**$('#LAY-system-side-muen .layui-nav-child dd').each(function () {
           var perm = $(this).data("permission");
           //console.log(perm, permissions.indexOf(perm))
           if(permissions.indexOf(perm) == -1){
@@ -160,7 +172,7 @@
       $('#LAY-system-side-muen .layui-nav-item dl').each(function () {
           if($(this).children('dd').length == 0)
               $(this).parent().remove();
-      });
+      });**/
 
   });
   </script>

+ 1 - 0
uis/views/order/index.html

@@ -91,6 +91,7 @@
         ,{field:'member_tel', title:'会员电话',width: 120}
         ,{field:'amount', title:'费用', width:120}
         ,{field:'model', title:'车型', width:200}
+        ,{field:'name', title:'姓名', width:100}
         ,{field:'tel', title:'电话', width:120}
         ,{field:'number', title:'车牌号', width:110}
         ,{field:'status_text', title:'状态', width:90}