Pārlūkot izejas kodu

会员管理 订单管理

jiaweiqi 3 gadi atpakaļ
vecāks
revīzija
549a2a871a

+ 29 - 1
apps/activity/filters.py

@@ -17,4 +17,32 @@ class BranchFilter(django_filters.FilterSet):
 
     def __init__(self, data=None, *args, **kwargs):
         data = clean_datetime_range(data, 'create_time')
-        super(BranchFilter, self).__init__(data, *args, **kwargs)
+        super(BranchFilter, self).__init__(data, *args, **kwargs)
+
+
+class MemberFilter(django_filters.FilterSet):
+    nickname = django_filters.CharFilter(field_name='nickname', lookup_expr='icontains')
+    tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
+
+    class Meta:
+        model = Member
+        fields = '__all__'
+
+
+class MemberCouponFilter(django_filters.FilterSet):
+    write_off = django_filters.CharFilter(field_name='write_off')
+    coupon_name = django_filters.CharFilter(field_name='coupon__name', lookup_expr='icontains')
+    activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
+
+    class Meta:
+        model = MemberCoupon
+        fields = '__all__'
+
+
+class OrderFilter(django_filters.FilterSet):
+    activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
+    delete = django_filters.CharFilter(field_name='delete')
+
+    class Meta:
+        model = Order
+        fields = '__all__'

+ 38 - 2
apps/activity/models.py

@@ -1,5 +1,7 @@
 #coding=utf-8
 
+import datetime
+
 from django.db import models
 from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin
 from django.utils import timezone
@@ -53,8 +55,7 @@ class Activity(models.Model):
     end_date = models.DateField(verbose_name=u"截止日期")
     amount = models.FloatField(verbose_name=u"费用", default=0)
     rebate = models.FloatField(verbose_name=u"返利", default=0)
-    check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核",
-                                                    editable=False, default=settings.DEFAULT)
+    check_status = models.PositiveSmallIntegerField(choices=settings.CHECK_STATUS_CHOICES, verbose_name=u"审核", editable=False, default=settings.DEFAULT)
     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)
@@ -71,9 +72,11 @@ class Activity(models.Model):
 class Order(models.Model):
     DEFAULT = 0
     FINISH = 1
+    FAIL = 2
     STATUS_CHOICES = (
         (DEFAULT, u'待付款'),
         (FINISH, u'已完成'),
+        (FAIL, u'失败'),
     )
     branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT)
     activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
@@ -116,6 +119,7 @@ class Coupon(models.Model):
 class MemberCoupon(models.Model):
     member = models.ForeignKey(Member, 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=True)
@@ -126,6 +130,38 @@ class MemberCoupon(models.Model):
         ordering = ['-id']
         verbose_name = u"会员优惠券"
 
+    def writeOff(self):
+        now = datetime.datetime.date(timezone.now())
+        if self.write_off:
+            raise CustomError(u'该优惠券已核销,禁止重复使用!')
+        if self.end_date and now > self.end_date:
+            raise CustomError(u'该优惠券已过有效期,禁止使用!')
+
+        self.write_off = True
+        self.write_off_time = timezone.now()
+        self.save()
+
+    def cancelWriteOff(self):
+        if not self.write_off:
+            raise CustomError(u'该优惠券尚未核销,禁止撤销!')
+
+        self.write_off = False
+        self.write_off_time = None
+        self.save()
+
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的会员优惠券ID')
+
+        instance = MemberCoupon.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的会员优惠券')
+        return instance
+
+
 
 class ActivityCoupon(models.Model):
     activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)

+ 42 - 0
apps/activity/serializers.py

@@ -48,3 +48,45 @@ class BranchSerializer(serializers.ModelSerializer):
         BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改门店[%s],id=%s" % (instance.name, instance.id),validated_data)
         instance = super(BranchSerializer, self).update(instance, validated_data)
         return instance
+
+
+class MemberSerializer(serializers.ModelSerializer):
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+
+    class Meta:
+        model = Member
+        fields = '__all__'
+
+
+class MemberCouponSerializer(serializers.ModelSerializer):
+    activity_name = serializers.CharField(source='activity.title', read_only=True)
+    coupon_name = serializers.CharField(source='coupon.name', read_only=True)
+    write_off_text = serializers.SerializerMethodField()
+    write_off_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+
+    class Meta:
+        model = MemberCoupon
+        fields = '__all__'
+
+    def get_write_off_text(self, obj):
+        if obj.write_off:
+            return u'是'
+        return u'否'
+
+
+class OrderSerializer(serializers.ModelSerializer):
+    activity_name = serializers.CharField(source='activity.title', read_only=True)
+    member_name = serializers.CharField(source='member.nickname', read_only=True)
+    member_tel = serializers.CharField(source='member.tel', read_only=True)
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    delete_text = serializers.SerializerMethodField()
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+
+    class Meta:
+        model = Order
+        fields = '__all__'
+
+    def get_delete_text(self, obj):
+        if obj.delete:
+            return u'是'
+        return u'否'

+ 7 - 0
apps/activity/urls.py

@@ -5,5 +5,12 @@ from .views import *
 urlpatterns = (
     url(r'^branch/data/$', branch_list),
     url(r'^branch/save/$', branch_save),
+
+    url(r'^member/data/$', member_list),
+    url(r'^member_coupon/data/$', member_coupon_list),
+    url(r'^member_coupon/write_off/$', coupon_write_off),
+    url(r'^member_coupon/cancel_write_off/$', coupon_cancel_write_off),
+
+    url(r'^order/data/$', order_list),
 )
 

+ 60 - 0
apps/activity/views.py

@@ -42,3 +42,63 @@ def branch_save(request):
     except Exception as e:
         traceback.print_exc()
         return JSONError(u'保存失败!')
+
+
+@token_required
+def member_list(request):
+    f = MemberFilter(request.GET, queryset=Member.objects.filter(branch=request.user.branch))
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = MemberSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)
+
+
+@token_required
+def member_coupon_list(request):
+    f = MemberCouponFilter(request.GET, queryset=MemberCoupon.objects.filter(member__branch=request.user.branch))
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = MemberCouponSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)
+
+
+@token_required
+def coupon_write_off(request):
+    id = request.GET.get('id')
+    try:
+        with transaction.atomic():
+            instance = MemberCoupon.getById(id)
+            if instance.member.branch and instance.member.branch_id != request.user.branch_id:
+                raise CustomError(u'禁止跨店操作!')
+            instance.writeOff()
+            BizLog.objects.addnew(request.user, BizLog.CHECK, u"核销会员优惠券,id=%d" % instance.id)
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'核销失败!')
+    return JSONResponse()
+
+
+@token_required
+def coupon_cancel_write_off(request):
+    id = request.GET.get('id')
+    try:
+        with transaction.atomic():
+            instance = MemberCoupon.getById(id)
+            if instance.member.branch and instance.member.branch_id != request.user.branch_id:
+                raise CustomError(u'禁止跨店操作!')
+            instance.cancelWriteOff()
+            BizLog.objects.addnew(request.user, BizLog.CHECK, u"撤销核销会员优惠券,id=%d" % instance.id)
+    except CustomError as e:
+        return JSONError(e.get_error_msg())
+    except Exception as e:
+        traceback.print_exc()
+        return JSONError(u'撤销核销失败!')
+    return JSONResponse()
+
+
+@token_required
+def order_list(request):
+    f = OrderFilter(request.GET, queryset=Order.objects.filter(branch=request.user.branch))
+    rows, total = utils.get_page_data(request, f.qs)
+    serializer = OrderSerializer(rows, many=True)
+    return DataGridJSONResponse(serializer.data, total)

+ 10 - 0
uis/views/index.html

@@ -71,6 +71,16 @@
                   <a lay-href="branch/index.html">活动管理</a>
                 </dd>
               </dl>
+              <dl class="layui-nav-child">
+                <dd data-name="nav">
+                  <a lay-href="member/index.html">会员管理</a>
+                </dd>
+              </dl>
+              <dl class="layui-nav-child">
+                <dd data-name="nav">
+                  <a lay-href="order/index.html">订单管理</a>
+                </dd>
+              </dl>
             </li>
 
             <li data-name="set" class="layui-nav-item">

+ 168 - 0
uis/views/member/coupon_detail.html

@@ -0,0 +1,168 @@
+<!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_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">
+                  {{# if(!d.write_off){ }}
+                  <a class="layui-btn layui-btn-danger layui-btn-xs"  lay-event="write_off">核销</a>
+                  {{# } }}
+                  {{# if(d.write_off){ }}
+                  <a class="layui-btn layui-btn-xs"  lay-event="cancel_write_off">撤销核销</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">
+                    <select name="write_off">
+                        <option value="">全部</option>
+                        <option value="1">是</option>
+                        <option value="0">否</option>
+                    </select>
+                </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="activity_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">
+                    <input type="text" name="coupon_name" autocomplete="off" class="layui-input">
+                </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;
+    var id = layui.view.getParameterByName('id');
+
+    table.render({
+      elem: '#datagrid'
+      ,url: '/activity/member_coupon/data/'
+      ,where: {'member': id}
+      ,cols: [[
+        {field:'activity_name', title:'活动名称', width:200}
+        ,{field:'coupon_name', title:'优惠券名称', width:200}
+        ,{field:'end_date', title:'有效期', width:120}
+        ,{field:'write_off_text', title:'是否核销', width:90}
+        ,{field:'write_off_time', title:'核销时间', width:170}
+        ,{width:100, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+      ]]
+      ,page: true
+      ,height: 'full-104'
+      ,done: function () {
+        layui.index.removeNoPermButtons();
+      }
+    });
+
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+        var data = obj.data;
+        if(obj.event === 'write_off'){
+            layer.confirm('确定要核销该会员优惠券吗?', function(index){
+                layer.close(index);
+                layui.admin.req({
+                    notice: true
+                    ,url: '/activity/member_coupon/write_off/?id='+ data.id
+                    ,type: 'post'
+                    ,done: function(res){
+                        table.reload('datagrid',{});
+                    }
+                });
+            });
+          } else if(obj.event === 'cancel_write_off'){
+            layer.confirm('确定要撤销核销该会员优惠券吗?', function(index){
+                layer.close(index);
+                layui.admin.req({
+                    notice: true
+                    ,url: '/activity/member_coupon/cancel_write_off/?id='+ data.id
+                    ,type: 'post'
+                    ,done: function(res){
+                        table.reload('datagrid',{});
+                    }
+                });
+            });
+        }
+    });
+
+    $('#btn_query').on('click', function(){
+        layer.open({
+          type: 1,
+          shadeClose: true,
+          area: ['400px', '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>
+

+ 144 - 0
uis/views/member/index.html

@@ -0,0 +1,144 @@
+<!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_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_coupon">查看优惠券</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="nickname" 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="tel" autocomplete="off" class="layui-input">
+                </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/member/data/'
+      ,cols: [[
+        {field:'nickname', title:'名称', width:200}
+        ,{field:'tel', title:'电话',width: 200}
+        ,{field:'create_time', title:'添加时间', width:160}
+        ,{width:100, align:'left', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+      ]]
+      ,page: true
+      ,height: 'full-104'
+      ,done: function () {
+        layui.index.removeNoPermButtons();
+      }
+    });
+
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+        if(obj.event === 'view_coupon'){
+        table.editdata = data;
+        layer.open({
+          type: 2,
+          title: '优惠券',
+          shadeClose: false,
+          area: ['85%', '85%'],
+          yes: function(index, dom){
+             layui.onSubmitChild = function (data) {
+              layer.close(index);
+              table.reload('datagrid',{});
+            };
+            layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'coupon_detail.html?id='+data.id
+        });
+      }
+    });
+
+    $('#btn_query').on('click', function(){
+        layer.open({
+          type: 1,
+          shadeClose: true,
+          area: ['500px', '250px'],
+          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>
+

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

@@ -0,0 +1,161 @@
+<!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_query"><i class="layui-icon layui-icon-search"></i>查询</button>
+            </div>
+
+            <table class="layui-hide" id="datagrid" lay-filter="datagrid-operate"></table>
+
+
+          </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">
+                    <select name="status">
+                        <option value="">全部</option>
+                        <option value="0">待付款</option>
+                        <option value="1">已完成</option>
+                        <option value="2">失败</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="delete">
+                        <option value="1">是</option>
+                        <option value="0" selected>否</option>
+                    </select>
+                </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="activity_name" autocomplete="off" class="layui-input">
+                </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/order/data/'
+        ,where: {'delete': 0}
+      ,cols: [[
+        {field:'activity_name', title:'活动名称', width:200}
+        ,{field:'member_name', title:'会员名称',width: 120}
+        ,{field:'member_tel', title:'会员电话',width: 120}
+        ,{field:'amount', title:'费用', width:120}
+        ,{field:'model', title:'车型', width:200}
+        ,{field:'tel', title:'电话', width:120}
+        ,{field:'number', title:'车牌号', width:110}
+        ,{field:'status_text', title:'状态', width:90}
+        ,{field:'delete_text', title:'是否删除', width:100}
+        ,{field:'create_time', title:'创建时间', width:180}
+      ]]
+      ,page: true
+      ,height: 'full-104'
+      ,done: function () {
+        layui.index.removeNoPermButtons();
+      }
+    });
+
+    //监听工具条
+    table.on('tool(datagrid-operate)', function(obj){
+      var data = obj.data;
+        if(obj.event === 'view_coupon'){
+        table.editdata = data;
+        layer.open({
+          type: 2,
+          title: '优惠券',
+          shadeClose: false,
+          area: ['85%', '85%'],
+          yes: function(index, dom){
+             layui.onSubmitChild = function (data) {
+              layer.close(index);
+              table.reload('datagrid',{});
+            };
+            layui.submitChild();
+          },
+          btn2: function(index, layero){
+            layer.close(index);//关闭当前按钮
+          },
+          content: 'coupon_detail.html?id='+data.id
+        });
+      }
+    });
+
+    $('#btn_query').on('click', function(){
+        layer.open({
+          type: 1,
+          shadeClose: true,
+          area: ['400px', '500px'],
+          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>
+