diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
index 54ea4c9..bd772c8 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
@@ -11,8 +11,15 @@
     private Integer termid;
     private Integer status;
     private Integer shopid;
+    private String accdate;
 
+    public String getAccdate() {
+        return accdate;
+    }
 
+    public void setAccdate(String accdate) {
+        this.accdate = accdate;
+    }
 
     public String getRefno() {
         return refno;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
new file mode 100644
index 0000000..7e3590b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
@@ -0,0 +1,101 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+
+import com.google.gson.Gson;
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.domain.TShopSettlement;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.restaurant.bean.TransDtlSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
+import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
+import com.supwisdom.dlpay.restaurant.service.TransDtlService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping("/transdtlrev")
+public class TransDtlRevertController {
+    @Autowired
+    private TransDtlService transDtlService;
+
+    @Autowired
+    private ShopSettlementService shopSettlementService;
+
+    @RequestMapping("/index")
+    public String indexView(ModelMap model) {
+        List<TShopSettlement> lst = shopSettlementService.getAllShopSettlement();
+        Map<Integer, String> map = new HashMap<>();
+        for (TShopSettlement shop : lst) {
+            map.put(shop.getShopid(), shop.getShopname());
+        }
+        String accdate = DateUtil.getNow("yyyy-MM-dd");
+
+        Gson gson = new Gson();
+        String gsonString = gson.toJson(map);
+        model.addAttribute("shopList", gsonString);
+        model.addAttribute("accdate", accdate);
+        return "restaurant/transdtlrev/index";
+    }
+
+    @RequestMapping("/list")
+    @PreAuthorize("hasPermission('/transdtlrev/index','')")
+    @ResponseBody
+    public PageResult<TTransDtl> getDataList(@RequestParam("page") Integer pageNo,
+                                             @RequestParam("limit") Integer pageSize,
+                                             @RequestParam(value = "custname", required = false) String custname,
+                                             @RequestParam(value = "accdate", required = false) String accdate,
+                                             @RequestParam(value = "refno", required = false) String refno) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            TransDtlSearchBean bean = new TransDtlSearchBean();
+            if (StringUtil.isEmpty(accdate) || StringUtil.isEmpty(accdate)) {
+                bean.setAccdate(DateUtil.getNow("yyyyMMdd"));
+            } else {
+                bean.setAccdate(DateUtil.unParseToDateFormat(accdate));
+
+            }
+            bean.setCustname(custname);
+            bean.setRefno(refno);
+            bean.setPageNo(pageNo);
+            bean.setPageSize(pageSize);
+
+            return transDtlService.getTransDtlByParam(bean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/loadrevert")
+    @PreAuthorize("hasPermission('/transdtlrev/loadrevert','')")
+    public String loadadd(Model model) {
+        return "restaurant/transdtlrev/form";
+    }
+
+
+    @PostMapping("/revert")
+    @PreAuthorize("hasPermission('/transdtlrev/revert','')")
+    @ResponseBody
+    public JsonResult add(@RequestBody TTransDtl dtl) {
+        if (dtl != null) {
+            return transDtlService.revertTransdtl(dtl);
+        } else {
+            return JsonResult.error("添加失败");
+        }
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
index ae3df29..98a35c4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
@@ -19,6 +19,8 @@
     private Integer revflag;
     private String transtype;
     private Integer shopid;
+    private String attr1;
+    private String attr2;
 
 
 
@@ -140,4 +142,23 @@
     public void setShopid(Integer shopid) {
         this.shopid = shopid;
     }
+
+
+    @Column(name = "attr1",  length = 200)
+    public String getAttr1() {
+        return attr1;
+    }
+
+    public void setAttr1(String attr1) {
+        this.attr1 = attr1;
+    }
+
+    @Column(name = "attr2",  length = 200)
+    public String getAttr2() {
+        return attr2;
+    }
+
+    public void setAttr2(String attr2) {
+        this.attr2 = attr2;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
index e2159ae..cf32aea 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -19,4 +19,8 @@
     JsonResult export(TransDtlSearchBean bean, HttpServletRequest request, HttpServletResponse response);
 
     String getRefno();
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    JsonResult revertTransdtl(TTransDtl dtl);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
index 05c7598..0dedad9 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
@@ -12,6 +12,7 @@
 import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
 import com.supwisdom.dlpay.restaurant.service.TransDtlService;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
@@ -66,11 +67,14 @@
                     if (!StringUtil.isEmpty(param.getEnddate())) {
                         list.add(cb.lessThanOrEqualTo(root.get("accdate").as(String.class), param.getEnddate()));
                     }
+                    if (!StringUtil.isEmpty(param.getAccdate())) {
+                        list.add(cb.equal(root.get("accdate").as(String.class), param.getAccdate()));
+                    }
                     if (null!=param.getShopid()) {
-                        list.add(cb.like(root.get("shopid").as(String.class), param.getShopid().toString()));
+                        list.add(cb.equal(root.get("shopid").as(String.class), param.getShopid().toString()));
                     }
                     if (null!=param.getStatus()) {
-                        list.add(cb.like(root.get("status").as(String.class), param.getStatus().toString()));
+                        list.add(cb.equal(root.get("status").as(String.class), param.getStatus().toString()));
                     }
                     if (null!=param.getTermid()) {
                         list.add(cb.like(root.get("termid").as(String.class), param.getTermid().toString()));
@@ -132,4 +136,23 @@
     public String getRefno() {
         return DateUtil.getNow("yyyyMMddHHmmssSSS");
     }
+
+    @Override
+    public JsonResult revertTransdtl(TTransDtl dtl) {
+        TTransDtl targetDtl=transDtlDao.findById(dtl.getRefno()).get();
+        if(null==targetDtl){
+            return JsonResult.error("未查询到目标流水");
+        }
+        TTransDtl revDtl=new TTransDtl();
+        BeanUtils.copyProperties(targetDtl,revDtl);
+        revDtl.setRefno(getRefno());
+        revDtl.setStatus(0);
+        revDtl.setAccdate(DateUtil.getNow("yyyyMMdd"));
+        revDtl.setAcctime(DateUtil.getNow("HHmmss"));
+        revDtl.setAttr2(dtl.getAttr2());
+        revDtl.setTranstype("cz");
+        revDtl.setAmount(targetDtl.getAmount()*-1.00);
+        transDtlDao.save(revDtl);
+        return JsonResult.ok("操作成功");
+    }
 }
diff --git a/src/main/resources/static/libs/custom.js b/src/main/resources/static/libs/custom.js
index fd82856..208bf94 100644
--- a/src/main/resources/static/libs/custom.js
+++ b/src/main/resources/static/libs/custom.js
@@ -15,7 +15,7 @@
             pool: {},
             addNewDict: function (dictType) {
                 var that = this;
-                console.log("正在加载<"+dictType+">");
+                console.log("正在加载<" + dictType + ">");
                 $.ajax(that.url, {
                         method: "GET",
                         data: "dicttype=" + dictType,
@@ -25,11 +25,11 @@
                                 that.storage.removeItem(dictType);
                             } else {
                                 that.storage.setItem(dictType, JSON.stringify(data));
-                                console.log("<"+dictType+">加载成功!");
+                                console.log("<" + dictType + ">加载成功!");
                             }
                         },
-                        error: function(e){
-                            console.log("<"+dictType+">加载失败！");
+                        error: function (e) {
+                            console.log("<" + dictType + ">加载失败！");
                         }
                     }
                 );
@@ -48,7 +48,7 @@
                                 that.storage.removeItem(dictType);
                             } else {
                                 that.storage.setItem(dictType, JSON.stringify(data));
-                                console.log("<"+dictType+">加载成功!");
+                                console.log("<" + dictType + ">加载成功!");
                             }
                         },
                         error: function (e) {
diff --git a/src/main/resources/static/libs/numberFormat.js b/src/main/resources/static/libs/numberFormat.js
new file mode 100644
index 0000000..c170863
--- /dev/null
+++ b/src/main/resources/static/libs/numberFormat.js
@@ -0,0 +1,25 @@
+function numberFormat(number, decimals, dec_point, thousands_sep) {
+
+    number = (number + '').replace(/[^0-9+-Ee.]/g, '');
+    var n = !isFinite(+number) ? 0 : +number,
+        prec = !isFinite(+decimals) ? 2 : Math.abs(decimals),
+        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
+        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
+        s = '',
+        toFixedFix = function (n, prec) {
+            var k = Math.pow(10, prec);
+            return '' + Math.ceil(n * k) / k;
+        };
+
+    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
+    var re = /(-?\d+)(\d{3})/;
+    while (re.test(s[0])) {
+        s[0] = s[0].replace(re, "$1" + sep + "$2");
+    }
+
+    if ((s[1] || '').length < prec) {
+        s[1] = s[1] || '';
+        s[1] += new Array(prec - s[1].length + 1).join('0');
+    }
+    return s.join(dec);
+}
\ No newline at end of file
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 9122669..09762d8 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -135,7 +135,7 @@
 <script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>
-
+<script type="text/javascript" th:src="@{/static/libs/numberFormat.js}"></script>
 <script>
     layui.config({
         base: 'static/custom/module/'
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index b3ca601..6c720d1 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -90,7 +90,8 @@
         let table = layui.table;
         let admin = layui.admin;
 
-        var max = $("#enddate").val();
+        var enddate = $("#enddate").val();
+        var startdate=$("#startdate").val();
 
         form.render('select');
         var laydate = layui.laydate;
@@ -98,19 +99,23 @@
             elem: '#startdate',
             btns: ['now', 'confirm'],
             trigger: 'click',
-            max: max
+            max: enddate
         });
         laydate.render({
             elem: '#enddate',
             btns: ['now', 'confirm'],
             trigger: 'click',
-            max: max
+            max: enddate
         });
 
         // 渲染表格
         table.render({
             elem: '#table',
             url: '[[@{/transdtl/list}]]',
+            where:{
+                startdate:startdate,
+                enddate:enddate
+            },
             toolbar: true,
             minWidth: 80,
             defaultToolbar: ['filter', 'print'],
@@ -119,7 +124,10 @@
                 [
                     {field: 'custname', title: '姓名', fixed: 'left'},
                     {field: 'refno', title: '交易号', fixed: 'left', sort: true},
-                    {field: 'amount', title: '交易金额', sort: true},
+                    {field: 'amount', title: '交易金额', sort: true,
+                        templet: function (item) {
+                            return numberFormat(item.amount,2);
+                        }},
                     {
                         field: 'accdate',
                         title: '交易时间',
@@ -180,6 +188,8 @@
                                 return '联机';
                             } else if (item.transtype == 'tj') {
                                 return '脱机';
+                            }  else if (item.transtype == 'cz') {
+                                return '冲正';
                             } else {
                                 return '未知';
                             }
@@ -194,7 +204,6 @@
 
              $("#form").submit();*/
             var param = $("#form").serialize();
-            console.log(param);
 
             $("#btn-export").attr("href", url + "?" + param);
             $("#btn-export")[0].click();
@@ -228,6 +237,8 @@
         $('#btn-reset').click(function () {
             $(".layui-input").val("");
             $("select").val("");
+            $("#startdate").val(startdate);
+            $("#enddate").val(enddate);
             return false;
 
         });
diff --git a/src/main/resources/templates/restaurant/transdtlrev/form.html b/src/main/resources/templates/restaurant/transdtlrev/form.html
new file mode 100644
index 0000000..96fbc4e
--- /dev/null
+++ b/src/main/resources/templates/restaurant/transdtlrev/form.html
@@ -0,0 +1,85 @@
+
+<form id="form" lay-filter="form" class="layui-form model-form">
+    <input name="refno" id="refno" type="hidden"/>
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正对象</label>
+        <div class="layui-input-block">
+            <input type="text" name="custname" disabled
+                    class="layui-input">
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">冲正金额</label>
+        <div class="layui-input-block">
+            <input type="text" name="amount" disabled
+                   class="layui-input">
+        </div>
+    </div>
+
+    <div class="layui-form-item layui-form-text">
+        <label class="layui-form-label">冲正理由</label>
+        <div class="layui-input-block">
+            <textarea name="attr2" placeholder="请输入内容" class="layui-textarea" lay-verify="required"></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">冲正</button>
+    </div>
+</form>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+
+
+        var url = '[[@{/transdtlrev/revert}]]';
+        // 回显user数据
+        var dtl = admin.getTempData('t_dtl');
+        console.log(dtl)
+        if (dtl) {
+            $('input[name="refno"]').attr('readonly', 'readonly');
+            form.val('form', dtl);
+        }
+        // 表单提交事件
+        form.on('submit(form-submit)', function (data) {
+            console.log(data);
+            layer.load(2);
+            let token = $("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: url,
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+                data: JSON.stringify(data.field),
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function () {
+                    layer.closeAll('loading');
+                    layer.msg("请求服务器失败！", {icon: 2});
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/transdtlrev/index.html b/src/main/resources/templates/restaurant/transdtlrev/index.html
new file mode 100644
index 0000000..8193a4a
--- /dev/null
+++ b/src/main/resources/templates/restaurant/transdtlrev/index.html
@@ -0,0 +1,201 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">交易冲正</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">交易冲正</a>
+          <a><cite>交易冲正</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <div class="layui-form-item">
+                <div class="layui-inline">
+                    <label class="layui-form-label"> 姓名：</label>
+                    <div class="layui-input-inline">
+                        <input id="custname" name="custname" class="layui-input" type="text"/>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label"> 交易号：</label>
+                    <div class="layui-input-inline">
+                        <input id="refno" name="refno" class="layui-input " type="text"/>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易日期：</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="accdate" class="layui-input" th:value="${accdate}"
+                               id="accdate" placeholder="yyyy-MM-dd">
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item">
+                <div class="layui-inline" style="margin-left:5%">
+                    <button id="btn-search" class="layui-btn icon-btn" data-type="search">
+                        <i class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                    <button id="btn-reset" class="layui-btn layui-btn-primary">重置
+                    </button>
+                </div>
+            </div>
+
+        </div>
+        <table class="layui-table" id="table" lay-filter="table"></table>
+    </div>
+</div>
+<input hidden th:value="${shopList}" id="shoplist">
+<script>
+
+    var rawlist = $("#shoplist").val();
+    var shoplist = JSON.parse(rawlist);
+
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        let form = layui.form;
+        let table = layui.table;
+        let admin = layui.admin;
+
+        var accdate = $("#accdate").val();
+
+        form.render('select');
+        var laydate = layui.laydate;
+        laydate.render({
+            elem: '#accdate',
+            btns: ['now', 'confirm'],
+            trigger: 'click',
+            max: accdate
+        });
+
+
+        // 渲染表格
+        table.render({
+            elem: '#table',
+            url: '[[@{/transdtlrev/list}]]',
+            where:{
+                accdate:accdate
+            },
+            minWidth: 80,
+            page: true,
+            cols: [
+                [
+                    {field: 'custname', title: '姓名', fixed: 'left'},
+                    {field: 'refno', title: '交易号', fixed: 'left', sort: true},
+                    {field: 'amount', title: '交易金额', sort: true,
+                        templet: function (item) {
+                           return numberFormat(item.amount,2);
+                        }},
+                    {
+                        field: 'accdate',
+                        title: '交易时间',
+                        sort: true,
+                        templet: function (item) {
+                            var date = item.accdate;
+                            if (date != null) {
+                                return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2);
+                            }
+                            return '';
+                        }
+                    },
+                    {
+                        field: 'shopid',
+                        title: '商户',
+
+                        align: 'center',
+                        templet: function (item) {
+                            return shoplist[item.shopid];
+                        }
+                    },
+                    {
+                        field: 'status',
+                        title: '流水状态',
+
+                        align: 'center',
+                        templet: function (item) {
+                            if (item.status == 0) {
+                                return '未入账';
+                            } else if (item.status == 1) {
+                                return '已入账';
+                            } else {
+                                return '未知';
+                            }
+                        }
+                    },
+                    {
+                        field: 'transtype',
+                        title: '流水类型',
+                        sort: true,
+                        align: 'center',
+                        templet: function (item) {
+                            if (item.transtype == 'lj') {
+                                return '联机';
+                            } else if (item.transtype == 'tj') {
+                                return '脱机';
+                            } else if (item.transtype == 'cz') {
+                                return '冲正';
+                            } else {
+                                return '未知';
+                            }
+                        }
+                    },
+                    {
+                    field: 'refno', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
+                        if(item.transtype!='cz'){
+                            return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
+                        }
+
+                    }
+                }
+                ]
+            ]
+        });
+
+        table.on('tool(table)', function (obj) {
+            let data = obj.data;
+            let layEvent = obj.event;
+            if (layEvent === 'edit') {
+                showModel(data);
+            }
+        });
+
+        let showModel = function (data) {
+            let title = data ? '修改设备' : '添加设备';
+            admin.putTempData('t_dtl', data);
+            admin.popupCenter({
+                title: title,
+                path: '[[@{/transdtlrev/loadrevert}]]',
+                finish: function () {
+                    table.reload('table', {});
+                }
+            });
+        };
+
+        // 搜索按钮点击事件
+        $('#btn-search').click(function () {
+            let custname = $('#custname').val();
+            let refno = $('#refno').val();
+            let accdate = $('#accdate').val();
+            table.reload('table', {
+                where: {
+                    custname: custname,
+                    accdate: accdate,
+                    refno: refno,
+                }, page: {curr: 1}
+            });
+            //页面存在form需要返回false，否则layui自动刷新
+            return false;
+
+
+        });
+
+        $('#btn-reset').click(function () {
+            $(".layui-input").val("");
+            $("#accdate").val(accdate);
+            return false;
+        });
+
+    });
+
+
+    // 工具条点击事件
+
+</script>
