diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/FunctionServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/FunctionServiceImpl.java
index fd77b7b..9dec0bf 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/FunctionServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/FunctionServiceImpl.java
@@ -33,7 +33,7 @@
   private RoleFunctionDao roleFunctionDao;
 
   @Override
-  //@Cacheable(cacheNames = "oper_function_list", key = "#p0")
+  @Cacheable(cacheNames = "oper_function_list", key = "#p0")
   public List<TFunction> getFunctionsByOperid(String operid) {
     List<TFunction> list = functionDao.getTFunctionsByOperid(StringUtil.isEmpty(operid) ? "" : operid.trim());
     if (!StringUtil.isEmpty(list)) return list;
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
index 2ba5abe..8f2dd6b 100644
--- a/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/TransdtlSearchBean.java
@@ -11,6 +11,24 @@
     private String username;
     private Integer areano;
     private Boolean notacc;
+    private String reversetype;
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getReversetype() {
+        return reversetype;
+    }
+
+    public void setReversetype(String reversetype) {
+        this.reversetype = reversetype;
+    }
 
     public Boolean getNotacc() {
         return notacc;
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
index 0fdfbcb..36c8329 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -13,6 +13,8 @@
 import com.supwisdom.dlpay.water.pojo.TTransdtlCountVO;
 import org.springframework.transaction.annotation.Transactional;
 
+
+import java.util.HashMap;
 import java.util.List;
 
 
@@ -39,7 +41,7 @@
     TAccdtl reverseCollectDtl(ReverseRequestBean bean);
 
     @Transactional(rollbackFor = Exception.class,readOnly = true)
-    PageResult<TTransdtlCountVO> queryTransdtlCountByParam(TransdtlCountSearchBean param);
+    HashMap<String, Object> queryTransdtlCountByParam(TransdtlCountSearchBean param);
 
     @Transactional(rollbackFor = Exception.class)
     List<TCollectdtl> queryTransdtlNotEntry();
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
index 516ca11..e97b84f 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/AccdtlServiceImpl.java
@@ -159,6 +159,14 @@
             querySql.append(" and areano =:areano");
             countSql.append(" and areano =:areano");
         }
+        if (!StringUtil.isEmpty(param.getReversetype())){
+            querySql.append(" and reversetype like :reversetype");
+            countSql.append(" and reversetype like :reversetype");
+        }
+        if (!StringUtil.isEmpty(param.getStatus())){
+            querySql.append(" and status like :status");
+            countSql.append(" and status like :status");
+        }
         querySql.append(" order by billno desc");
         Query query = em.createNativeQuery(querySql.toString());
         Query countQuery = em.createNativeQuery(countSql.toString());
@@ -188,6 +196,14 @@
             query.setParameter("devicename", "%" + param.getDevicename().trim() + "%");
             countQuery.setParameter("devicename", "%" + param.getDevicename().trim() + "%");
         }
+        if (!StringUtil.isEmpty(param.getReversetype())) {
+            query.setParameter("reversetype", "%" + param.getReversetype().trim() + "%");
+            countQuery.setParameter("reversetype", "%" + param.getReversetype().trim() + "%");
+        }
+        if (!StringUtil.isEmpty(param.getStatus())) {
+            query.setParameter("status", "%" + param.getStatus().trim() + "%");
+            countQuery.setParameter("status", "%" + param.getStatus().trim() + "%");
+        }
         if (null != param.getAreano()) {
             query.setParameter("areano", param.getAreano());
             countQuery.setParameter("areano", param.getAreano());
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
index 45cc2d5..9f43f48 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.water.domain.*
 import com.supwisdom.dlpay.water.pojo.*
 import com.supwisdom.dlpay.water.service.*
+import com.supwisdom.dlpay.water.service.impl.AccdtlServiceImpl
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
@@ -18,6 +19,8 @@
 import org.springframework.ui.Model
 import org.springframework.web.bind.annotation.*
 import java.lang.reflect.UndeclaredThrowableException
+import java.math.BigDecimal
+import java.math.RoundingMode
 
 @Controller
 class RegionController {
@@ -442,7 +445,21 @@
     }
 
     @GetMapping("/dtlcount/index")
-    fun dtlCountIndexView() = "system/dtlcount/index"
+    fun dtlCountIndexView(model: Model) : String {
+        val searchBean = TransdtlCountSearchBean().apply {
+            this.pageNo = 1
+            this.pageSize = 10
+            this.devicename = ""
+            this.areano = null
+            this.accdate = ""
+        }
+        var map = collectdtlService.queryTransdtlCountByParam(searchBean)
+        val bigDecimal = BigDecimal(map.get("sum") as Double)
+        model.addAttribute("sum",bigDecimal.setScale(2, RoundingMode.HALF_UP))
+        return "system/dtlcount/index"
+    }
+
+
 
     @GetMapping("/dtlcount/list")
     @ResponseBody
@@ -450,7 +467,8 @@
                       @RequestParam("areano", required = false) areanoStr: String?,
                       @RequestParam("accdate", required = false) accdate: String?,
                       @RequestParam("page", defaultValue = "1", required = false) pageNo: Int,
-                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): PageResult<TTransdtlCountVO> {
+                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int,
+                       model: Model): PageResult<TTransdtlCountVO> {
         try {
             if (pageNo < 1 || pageSize < 1) {
                 return PageResult(WaterErrorCode.REQUEST_DATA_ERROR, "请求参数错误")
@@ -469,13 +487,51 @@
                 this.accdate = accdate
             }
             collectdtlService.queryTransdtlCountByParam(searchBean)?.let {
-                return it
+
+                return it.get("PageResult") as PageResult<TTransdtlCountVO>
             }
             return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "流水统计未找到")
         } catch (ex: Exception) {
             return PageResult(WaterErrorCode.PROCESS_ERROR, "系统繁忙")
         }
     }
+    @GetMapping("/dtlcount/list/sum")
+    @ResponseBody
+    fun queryDtlCountSum(@RequestParam("devicename", required = false) devicename: String?,
+                      @RequestParam("areano", required = false) areanoStr: String?,
+                      @RequestParam("accdate", required = false) accdate: String?,
+                      @RequestParam("page", defaultValue = "1", required = false) pageNo: Int,
+                      @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int): ResponseEntity<Any> {
+        try {
+            if (pageNo < 1 || pageSize < 1) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.INPUT_DATA_ERROR, "参数错误"))
+            }
+            val areano: Int?
+            areano = if (StringUtil.isEmpty(areanoStr)) {
+                null
+            } else {
+                areanoStr!!.toInt()
+            }
+            val searchBean = TransdtlCountSearchBean().apply {
+                this.pageNo = pageNo
+                this.pageSize = pageSize
+                this.devicename = devicename
+                this.areano = areano
+                this.accdate = accdate
+            }
+            //var sum = 0.0
+            var sumValue = collectdtlService.queryTransdtlCountByParam(searchBean)
+            var sum = sumValue.get("sum") as Double
+            val bigDecimal = BigDecimal(sum)
+            return ResponseEntity.ok(ResponseBodyBuilder.create().data("sum",bigDecimal.setScale(2, RoundingMode.HALF_UP))
+                    .success("查询成功"))
+        } catch (ex: Exception) {
+            ex.printStackTrace();
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(TradeErrorCode.INPUT_DATA_ERROR, "系统异常"))
+        }
+    }
 }
 
 @Controller
@@ -672,6 +728,8 @@
                     @RequestParam("transdate", required = false) transdate: String?,
                     @RequestParam("accdate", required = false) accdate: String?,
                     @RequestParam("username", required = false) username: String?,
+                    @RequestParam("reversetype",required = false) reversetype:String?,
+                    @RequestParam("status",required = false) status:String?,
                     @RequestParam("page", defaultValue = "1", required = false) pageNo: Int?,
                     @RequestParam("limit", defaultValue = "10", required = false) pageSize: Int?): PageResult<TAccdtlDTO> {
         try {
@@ -687,6 +745,8 @@
                 this.username = username
                 this.transdate = transdate
                 this.accdate = accdate
+                this.reversetype = reversetype
+                this.status = status
             }
             accdtlService.queryAccdtlByParam(searchBean)?.let {
                 pageResult ->
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
index b10d7ad..a2292da 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
@@ -36,6 +36,8 @@
 import java.text.SimpleDateFormat
 import java.util.*
 import javax.persistence.EntityManager
+import java.util.HashMap
+
 
 @Service
 class CollectdtlServiceImpl : CollectdtlService {
@@ -69,7 +71,6 @@
     @Autowired
     private lateinit var transactionProxy: TransactionProxy
 
-
     override fun createNewTransdtl(dtl: TCollectdtl): TCollectdtl {
         collectdtlDao.save(dtl)
         return dtl
@@ -327,52 +328,68 @@
         return accdtlDao.save(refundAccdtl)
     }
 
-    override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): PageResult<TTransdtlCountVO> {
+    override fun queryTransdtlCountByParam(param: TransdtlCountSearchBean): HashMap<String, Any>? {
         val querySql = StringBuffer("select t1.*,t2.devicename,t2.areaname from (select * from tb_transdtl_count) t1 left join " +
                 "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
                 "on t1.deviceno=t2.deviceno where 1=1")
         val countSql = StringBuffer("select count(id) from (select * from tb_transdtl_count) t1 left join " +
                 "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
                 "on t1.deviceno=t2.deviceno where 1=1")
+        val sumActualAmountSql = StringBuffer("select sum(actualamount) from (select * from tb_transdtl_count) t1 left join " +
+                "(select device.deviceno,device.devicename,area.areaname from tb_device device left join tb_area area on device.areano = area.areano) t2 " +
+                "on t1.deviceno=t2.deviceno where 1=1")
         if (!StringUtil.isEmpty(param.accdate)) {
             querySql.append(" and accdate>:minaccdate")
             querySql.append(" and accdate<:maxaccdate")
             countSql.append(" and accdate>:minaccdate")
             countSql.append(" and accdate<:maxaccdate")
+            sumActualAmountSql.append(" and accdate>:minaccdate")
+            sumActualAmountSql.append(" and accdate<:maxaccdate")
         }
         if (!StringUtil.isEmpty(param.devicename)) {
             querySql.append(" and devicename like :devicename")
             countSql.append(" and devicename like :devicename")
+            sumActualAmountSql.append(" and devicename like :devicename")
         }
         param.areano?.let {
             querySql.append(" and areano=:areano")
             countSql.append(" and areano=:areano")
+            sumActualAmountSql.append(" and areano=:areano")
 
         }
         querySql.append(" order by id desc")
         val query = em.createNativeQuery(querySql.toString())
         val countQuery = em.createNativeQuery(countSql.toString())
+        val sumActualAmountQuery = em.createNativeQuery(sumActualAmountSql.toString())
         if (!StringUtil.isEmpty(param.accdate)) {
             val timerange = param.accdate.replace("-", "").split("  ")
             query.setParameter("minaccdate", timerange[0])
             query.setParameter("maxaccdate", timerange[1])
             countQuery.setParameter("minaccdate", timerange[0])
             countQuery.setParameter("maxaccdate", timerange[1])
+            sumActualAmountQuery.setParameter("minaccdate", timerange[0])
+            sumActualAmountQuery.setParameter("maxaccdate", timerange[1])
         }
         if (!StringUtil.isEmpty(param.devicename)) {
             query.setParameter("devicename", "%" + param.devicename.trim() + "%")
             countQuery.setParameter("devicename", "%" + param.devicename.trim() + "%")
+            sumActualAmountQuery.setParameter("devicename", "%" + param.devicename.trim() + "%")
         }
         param.areano?.let {
             query.setParameter("areano", param.areano)
             countQuery.setParameter("areano", param.areano)
+            sumActualAmountQuery.setParameter("areano", param.areano)
         }
         query.firstResult = (param.pageNo - 1) * param.pageSize
         query.maxResults = param.pageSize
         query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountVO::class.java))
         val list = query.resultList as List<TTransdtlCountVO>
         val count = countQuery.singleResult as BigInteger
-        return PageResult(count.longValueExact(), list)
+        val sumValue = sumActualAmountQuery.singleResult as Double
+        val map:HashMap<String, Any> = HashMap()
+        map["sum"] = sumValue
+        map["PageResult"] = PageResult(count.longValueExact(), list)
+        return map
     }
 
     override fun queryTransdtlNotEntry(): List<TCollectdtl>? {
diff --git a/src/main/resources/static/libs/layui/lay/modules/layedit.js b/src/main/resources/static/libs/layui/lay/modules/layedit.js
index 71fa95c..7e5fdc7 100755
--- a/src/main/resources/static/libs/layui/lay/modules/layedit.js
+++ b/src/main/resources/static/libs/layui/lay/modules/layedit.js
@@ -1,2 +1,2 @@
 /** layui-v2.5.4 MIT License By https://www.layui.com */
- ;layui.define(["layer","form"],function(t){"use strict";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n="layedit",o="layui-show",r="layui-disabled",c=function(){var t=this;t.index=0,t.config={tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r="layui-layedit",c=e("string"==typeof t?"#"+t:t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("")}(),m=e(['<div class="'+r+'">','<div class="layui-unselect layui-layedit-tool">'+f+"</div>",'<div class="layui-layedit-iframe">','<iframe id="'+u+'" name="'+u+'" textarea="'+t+'" frameborder="0"></iframe>',"</div>","</div>"].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e(["<style>","*{margin: 0; padding: 0;}","body{padding: 10px; line-height: 20px; overflow-x: hidden; word-wrap: break-word; font: 14px Helvetica Neue,Helvetica,PingFang SC,Microsoft YaHei,Tahoma,Arial,sans-serif; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}","a{color:#01AAED; text-decoration:none;}a:hover{color:#c00}","p{margin-bottom: 10px;}","img{display: inline-block; border: none; vertical-align: middle;}","pre{margin: 10px 0; padding: 10px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}","</style>"].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"<p>")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"<p>"),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"上传失败")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"帮助",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["http://www.layui.com/about/layedit/help.html","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"<p>"),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"超链接",skin:"layui-layer-msg",content:['<ul class="layui-form" style="margin: 15px;">','<li class="layui-form-item">','<label class="layui-form-label" style="width: 60px;">URL</label>','<div class="layui-input-block" style="margin-left: 90px">','<input name="url" lay-verify="url" value="'+(t.href||"")+'" autofocus="true" autocomplete="off" class="layui-input">',"</div>","</li>",'<li class="layui-form-item">','<label class="layui-form-label" style="width: 60px;">打开方式</label>','<div class="layui-input-block" style="margin-left: 90px">','<input type="radio" name="target" value="_self" class="layui-input" title="当前窗口"'+("_self"!==t.target&&t.target?"":"checked")+">",'<input type="radio" name="target" value="_blank" class="layui-input" title="新窗口" '+("_blank"===t.target?"checked":"")+">","</div>","</li>",'<li class="layui-form-item" style="text-align: center;">','<button type="button" lay-submit lay-filter="layedit-link-yes" class="layui-btn"> 确定 </button>','<button style="margin-left: 20px;" type="button" class="layui-btn layui-btn-primary"> 取消 </button>',"</li>","</ul>"].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"images/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('<li title="'+e+'"><img src="'+i+'" alt="'+e+'"></li>')}),'<ul class="layui-clear">'+t.join("")+"</ul>"}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"插入代码",skin:"layui-layer-msg",content:['<ul class="layui-form layui-form-pane" style="margin: 15px;">','<li class="layui-form-item">','<label class="layui-form-label">请选择语言</label>','<div class="layui-input-block">','<select name="lang">','<option value="JavaScript">JavaScript</option>','<option value="HTML">HTML</option>','<option value="CSS">CSS</option>','<option value="Java">Java</option>','<option value="PHP">PHP</option>','<option value="C#">C#</option>','<option value="Python">Python</option>','<option value="Ruby">Ruby</option>','<option value="Go">Go</option>',"</select>","</div>","</li>",'<li class="layui-form-item layui-form-text">','<label class="layui-form-label">代码</label>','<div class="layui-input-block">','<textarea name="code" lay-verify="required" autofocus="true" class="layui-textarea" style="height: 200px;"></textarea>',"</div>","</li>",'<li class="layui-form-item" style="text-align: center;">','<button type="button" lay-submit lay-filter="layedit-code-yes" class="layui-btn"> 确定 </button>','<button style="margin-left: 20px;" type="button" class="layui-btn layui-btn-primary"> 取消 </button>',"</li>","</ul>"].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'<i class="layui-icon layedit-tool-html" title="HTML源代码" lay-command="html" layedit-event="html"">&#xe64b;</i><span class="layedit-tool-mid"></span>',strong:'<i class="layui-icon layedit-tool-b" title="加粗" lay-command="Bold" layedit-event="b"">&#xe62b;</i>',italic:'<i class="layui-icon layedit-tool-i" title="斜体" lay-command="italic" layedit-event="i"">&#xe644;</i>',underline:'<i class="layui-icon layedit-tool-u" title="下划线" lay-command="underline" layedit-event="u"">&#xe646;</i>',del:'<i class="layui-icon layedit-tool-d" title="删除线" lay-command="strikeThrough" layedit-event="d"">&#xe64f;</i>',"|":'<span class="layedit-tool-mid"></span>',left:'<i class="layui-icon layedit-tool-left" title="左对齐" lay-command="justifyLeft" layedit-event="left"">&#xe649;</i>',center:'<i class="layui-icon layedit-tool-center" title="居中对齐" lay-command="justifyCenter" layedit-event="center"">&#xe647;</i>',right:'<i class="layui-icon layedit-tool-right" title="右对齐" lay-command="justifyRight" layedit-event="right"">&#xe648;</i>',link:'<i class="layui-icon layedit-tool-link" title="插入链接" layedit-event="link"">&#xe64c;</i>',unlink:'<i class="layui-icon layedit-tool-unlink layui-disabled" title="清除链接" lay-command="unlink" layedit-event="unlink"">&#xe64d;</i>',face:'<i class="layui-icon layedit-tool-face" title="表情" layedit-event="face"">&#xe650;</i>',image:'<i class="layui-icon layedit-tool-image" title="图片" layedit-event="image">&#xe64a;<input type="file" name="file"></i>',code:'<i class="layui-icon layedit-tool-code" title="插入代码" layedit-event="code">&#xe64e;</i>',help:'<i class="layui-icon layedit-tool-help" title="帮助" layedit-event="help">&#xe607;</i>'},w=new c;t(n,w)});
\ No newline at end of file
+ ;layui.define(["layer","form"],function(t){"use strict";var e=layui.$,i=layui.layer,a=layui.form,l=(layui.hint(),layui.device()),n="layedit",o="layui-show",r="layui-disabled",c=function(){var t=this;t.index=0,t.config={tool:["strong","italic","underline","del","|","left","center","right","|","link","unlink","face","image"],hideTool:[],height:280}};c.prototype.set=function(t){var i=this;return e.extend(!0,i.config,t),i},c.prototype.on=function(t,e){return layui.onevent(n,t,e)},c.prototype.build=function(t,i){i=i||{};var a=this,n=a.config,r="layui-layedit",c=e("string"==typeof t?"#"+t:t),u="LAY_layedit_"+ ++a.index,d=c.next("."+r),y=e.extend({},n,i),f=function(){var t=[],e={};return layui.each(y.hideTool,function(t,i){e[i]=!0}),layui.each(y.tool,function(i,a){C[a]&&!e[a]&&t.push(C[a])}),t.join("")}(),m=e(['<div class="'+r+'">','<div class="layui-unselect layui-layedit-tool">'+f+"</div>",'<div class="layui-layedit-iframe">','<iframe id="'+u+'" name="'+u+'" textarea="'+t+'" frameborder="0"></iframe>',"</div>","</div>"].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e(["<style>","*{margin: 0; padding: 0;}","body{padding: 10px; line-height: 20px; overflow-x: ; word-wrap: break-word; font: 14px Helvetica Neue,Helvetica,PingFang SC,Microsoft YaHei,Tahoma,Arial,sans-serif; -webkit-box-sizing: border-box !important; -moz-box-sizing: border-box !important; box-sizing: border-box !important;}","a{color:#01AAED; text-decoration:none;}a:hover{color:#c00}","p{margin-bottom: 10px;}","img{display: inline-block; border: none; vertical-align: middle;}","pre{margin: 10px 0; padding: 10px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}","</style>"].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"<p>")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"<p>"),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"上传失败")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"帮助",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["http://www.layui.com/about/layedit/help.html","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"<p>"),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"超链接",skin:"layui-layer-msg",content:['<ul class="layui-form" style="margin: 15px;">','<li class="layui-form-item">','<label class="layui-form-label" style="width: 60px;">URL</label>','<div class="layui-input-block" style="margin-left: 90px">','<input name="url" lay-verify="url" value="'+(t.href||"")+'" autofocus="true" autocomplete="off" class="layui-input">',"</div>","</li>",'<li class="layui-form-item">','<label class="layui-form-label" style="width: 60px;">打开方式</label>','<div class="layui-input-block" style="margin-left: 90px">','<input type="radio" name="target" value="_self" class="layui-input" title="当前窗口"'+("_self"!==t.target&&t.target?"":"checked")+">",'<input type="radio" name="target" value="_blank" class="layui-input" title="新窗口" '+("_blank"===t.target?"checked":"")+">","</div>","</li>",'<li class="layui-form-item" style="text-align: center;">','<button type="button" lay-submit lay-filter="layedit-link-yes" class="layui-btn"> 确定 </button>','<button style="margin-left: 20px;" type="button" class="layui-btn layui-btn-primary"> 取消 </button>',"</li>","</ul>"].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"images/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('<li title="'+e+'"><img src="'+i+'" alt="'+e+'"></li>')}),'<ul class="layui-clear">'+t.join("")+"</ul>"}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"插入代码",skin:"layui-layer-msg",content:['<ul class="layui-form layui-form-pane" style="margin: 15px;">','<li class="layui-form-item">','<label class="layui-form-label">请选择语言</label>','<div class="layui-input-block">','<select name="lang">','<option value="JavaScript">JavaScript</option>','<option value="HTML">HTML</option>','<option value="CSS">CSS</option>','<option value="Java">Java</option>','<option value="PHP">PHP</option>','<option value="C#">C#</option>','<option value="Python">Python</option>','<option value="Ruby">Ruby</option>','<option value="Go">Go</option>',"</select>","</div>","</li>",'<li class="layui-form-item layui-form-text">','<label class="layui-form-label">代码</label>','<div class="layui-input-block">','<textarea name="code" lay-verify="required" autofocus="true" class="layui-textarea" style="height: 200px;"></textarea>',"</div>","</li>",'<li class="layui-form-item" style="text-align: center;">','<button type="button" lay-submit lay-filter="layedit-code-yes" class="layui-btn"> 确定 </button>','<button style="margin-left: 20px;" type="button" class="layui-btn layui-btn-primary"> 取消 </button>',"</li>","</ul>"].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'<i class="layui-icon layedit-tool-html" title="HTML源代码" lay-command="html" layedit-event="html"">&#xe64b;</i><span class="layedit-tool-mid"></span>',strong:'<i class="layui-icon layedit-tool-b" title="加粗" lay-command="Bold" layedit-event="b"">&#xe62b;</i>',italic:'<i class="layui-icon layedit-tool-i" title="斜体" lay-command="italic" layedit-event="i"">&#xe644;</i>',underline:'<i class="layui-icon layedit-tool-u" title="下划线" lay-command="underline" layedit-event="u"">&#xe646;</i>',del:'<i class="layui-icon layedit-tool-d" title="删除线" lay-command="strikeThrough" layedit-event="d"">&#xe64f;</i>',"|":'<span class="layedit-tool-mid"></span>',left:'<i class="layui-icon layedit-tool-left" title="左对齐" lay-command="justifyLeft" layedit-event="left"">&#xe649;</i>',center:'<i class="layui-icon layedit-tool-center" title="居中对齐" lay-command="justifyCenter" layedit-event="center"">&#xe647;</i>',right:'<i class="layui-icon layedit-tool-right" title="右对齐" lay-command="justifyRight" layedit-event="right"">&#xe648;</i>',link:'<i class="layui-icon layedit-tool-link" title="插入链接" layedit-event="link"">&#xe64c;</i>',unlink:'<i class="layui-icon layedit-tool-unlink layui-disabled" title="清除链接" lay-command="unlink" layedit-event="unlink"">&#xe64d;</i>',face:'<i class="layui-icon layedit-tool-face" title="表情" layedit-event="face"">&#xe650;</i>',image:'<i class="layui-icon layedit-tool-image" title="图片" layedit-event="image">&#xe64a;<input type="file" name="file"></i>',code:'<i class="layui-icon layedit-tool-code" title="插入代码" layedit-event="code">&#xe64e;</i>',help:'<i class="layui-icon layedit-tool-help" title="帮助" layedit-event="help">&#xe607;</i>'},w=new c;t(n,w)});
\ No newline at end of file
diff --git a/src/main/resources/templates/system/accdtl/index.html b/src/main/resources/templates/system/accdtl/index.html
index f5a091a..d5b754b 100644
--- a/src/main/resources/templates/system/accdtl/index.html
+++ b/src/main/resources/templates/system/accdtl/index.html
@@ -24,12 +24,10 @@
                         <input id="wateraccdtl-deviceno-search-value" class="layui-input search-input" type="text"
                                maxlength="8"/>
                     </div>
-                    <div class="layui-col-md2">
-                        <button id="btn-search-wateraccdtl" class="layui-btn icon-btn" data-type="search"
-                                style="margin-left: 100px"><i
-                                class="layui-icon">&#xe615;</i>查询
-                        </button>
-                    </div>
+                    <button id="btn-search-wateraccdtl" class="layui-btn icon-btn" data-type="search"
+                            style="margin-left: 100px"><i
+                            class="layui-icon">&#xe615;</i>查询
+                    </button>
                 </div>
                 <div style="margin-top: 20px"/>
                 <div class="layui-row">
@@ -49,6 +47,31 @@
 
                         </select>
                     </div>
+                        <button id="btn-clear" class="layui-btn icon-btn"
+                                style="margin-left: 100px"><i
+                                class="layui-icon">&#xe615;</i>重置
+                        </button>
+                </div>
+                <div style="margin-top: 20px"/>
+                <div class="layui-row">
+                    <div class="layui-col-md4">
+                        <label style="width: 60px" class="layui-form-label">流水类型</label>
+                        <select style="width: 200px" name="reversetype" id="reversetype-select-region" lay-vertify="required" lay-search>
+                            <option value="">所有</option>
+                            <option value="refund">冲正流水</option>
+                            <option value="none">消费流水</option>
+                        </select>
+                    </div>
+                    <div class="layui-col-md3">
+                        <label style="width: 60px" class="layui-form-label">流水状态</label>
+                        <select name="transStatus" id="transStatus-select-region" lay-search>
+                            <option value="">所有</option>
+                            <option value="success">成功</option>
+                            <option value="fail">失败</option>
+                            <option value="init">初始化</option>
+                            <option value="wip">处理中</option>
+                        </select>
+                    </div>
                 </div>
             </div>
         </div>
@@ -208,15 +231,20 @@
                 ]
             ]
         });
-
         // 搜索按钮点击事件
         $('#btn-search-wateraccdtl').click(function () {
+            tableVal();
+        });
+        //点击搜索按钮
+        function tableVal() {
             var devicename = $('#wateraccdtl-devicename-search-value').val().trim();
             var deviceno = $('#wateraccdtl-deviceno-search-value').val().trim();
             var areano = $('#wateraccdtl-select-region').val();
             var username = $('#wateraccdtl-username-search-value').val().trim();
             var transdate = $('#wateraccdtl-transdate-search-value').val();
             var accdate = $('#wateraccdtl-accdate-search-value').val();
+            var reversetype = $('#reversetype-select-region').val();
+            var status = $('#transStatus-select-region').val();
             table.reload('wateraccdtltable', {
                 where: {
                     devicename: devicename,
@@ -225,6 +253,8 @@
                     username: username,
                     transdate: transdate,
                     accdate: accdate,
+                    reversetype: reversetype,
+                    status: status
                 },
                 url: "[[@{/accdtl/list}]]",
                 page: {
@@ -234,14 +264,31 @@
                     none: '没有符合查询条件的流水'
                 }
             });
+        };
+        //点击重置按钮
+        $('#btn-clear').click(function () {
+            searchVal();
         });
+        //重置事件
+        function searchVal() {
+            $('#wateraccdtl-devicename-search-value').val("");
+            $('#wateraccdtl-deviceno-search-value').val("");
+            $('#wateraccdtl-select-region').val("");
+            $('#wateraccdtl-username-search-value').val("");
+            $('#wateraccdtl-transdate-search-value').val("");
+            $('#wateraccdtl-accdate-search-value').val("");
+            $('#reversetype-select-region').val("");
+            $('#transStatus-select-region').val("");
+            form.render("select")
+            tableVal();
+        }
     });
     function formatDate(date){
         if (date == null) {
             return ''
         }
         return date.substring(0,4)+'-'+date.substring(4,6)+'-'+date.substring(6,8);
-    }
+    };
 </script>
 
 
diff --git a/src/main/resources/templates/system/dtlcount/index.html b/src/main/resources/templates/system/dtlcount/index.html
index 684d881..4bf3a4a 100644
--- a/src/main/resources/templates/system/dtlcount/index.html
+++ b/src/main/resources/templates/system/dtlcount/index.html
@@ -1,4 +1,4 @@
-<div class="layui-card">
+<div class="layui-card" xmlns:th="http://www.w3.org/1999/xhtml">
     <div class="layui-card-header">
         <h2 class="header-title">流水统计</h2>
         <span class="layui-breadcrumb pull-right">
@@ -6,6 +6,7 @@
           <a><cite>流水统计</cite></a>
         </span>
     </div>
+
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             <div class="layui-fluid">
@@ -32,6 +33,14 @@
                         </button>
                     </div>
                 </div>
+                <div style="margin-top: 20px"/>
+                <div>
+                    <div class="layui-col-md4">
+                        <label style="width: 60px" class="layui-form-label">汇总金额</label>
+                        <input id="waterdtlcount-sum-search-value" class="layui-input search-input" type="text" readonly="readonly"
+                               style="border: none;" th:value="${sum}"/>
+                    </div>
+                </div>
             </div>
         </div>
         <hr/>
@@ -83,6 +92,7 @@
                 console.log(xhr)
             }
         });
+
         // 渲染表格
         table.render({
             elem: '#waterdtlcounttable',
@@ -149,6 +159,24 @@
                     none: '没有符合查询条件的流水'
                 }
             });
+            $.ajax({
+                url: '[[@{/dtlcount/list/sum}]]',
+                type: 'GET',
+                data:{
+                    "devicename":devicename,
+                    "areano":areano,
+                    "accdate":accdate
+                },
+                success: function (data) {
+                    console.log(data);
+                    if (data.retcode == '0') {
+                        $('#waterdtlcount-sum-search-value').val(data.sum)
+                    }
+                },
+                error: function (xhr) {
+                    console.log(xhr)
+                }
+            });
         });
     });
     function formatDate(date){
