diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
index 2ee4550..467ac47 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
@@ -1,7 +1,10 @@
 package com.supwisdom.dlpay.api.dao;
 
 import com.supwisdom.dlpay.api.domain.TPersondtl;
-import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
 
-public interface PersondtlDao extends CrudRepository<TPersondtl, String> {
+@Repository
+public interface PersondtlDao extends JpaRepository<TPersondtl, String>,JpaSpecificationExecutor<TPersondtl> {
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
index 42f928f..d8dda28 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/ShopdtlDao.java
@@ -1,7 +1,10 @@
 package com.supwisdom.dlpay.api.dao;
 
 import com.supwisdom.dlpay.api.domain.TShopdtl;
-import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
 
-public interface ShopdtlDao extends CrudRepository<TShopdtl, String> {
+@Repository
+public interface ShopdtlDao extends JpaRepository<TShopdtl, String>,JpaSpecificationExecutor<TShopdtl> {
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
index 71ef3a8..9d8b8b4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
@@ -1,16 +1,10 @@
 package com.supwisdom.dlpay.framework.domain;
 
-import com.supwisdom.dlpay.framework.util.HmacUtil;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import sun.misc.Cleaner;
-
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Table;
-import java.math.BigDecimal;
 import java.sql.Timestamp;
-import java.util.Calendar;
 
 @Entity
 @Table(name = "TB_SHOPACC")
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java
new file mode 100644
index 0000000..5ff7988
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/ShopdtlSearchBean.java
@@ -0,0 +1,85 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class ShopdtlSearchBean {
+  private String startAccdate;
+  private String endAccdate;
+  private String startTransdate;
+  private String endTransdate;
+  private String shopname;
+  private String paytype;
+  private String tradeflag;
+  private String transcode;
+  private String status;
+
+  public String getStartAccdate() {
+    return startAccdate;
+  }
+
+  public void setStartAccdate(String startAccdate) {
+    this.startAccdate = startAccdate;
+  }
+
+  public String getEndAccdate() {
+    return endAccdate;
+  }
+
+  public void setEndAccdate(String endAccdate) {
+    this.endAccdate = endAccdate;
+  }
+
+  public String getStartTransdate() {
+    return startTransdate;
+  }
+
+  public void setStartTransdate(String startTransdate) {
+    this.startTransdate = startTransdate;
+  }
+
+  public String getEndTransdate() {
+    return endTransdate;
+  }
+
+  public void setEndTransdate(String endTransdate) {
+    this.endTransdate = endTransdate;
+  }
+
+  public String getShopname() {
+    return shopname;
+  }
+
+  public void setShopname(String shopname) {
+    this.shopname = shopname;
+  }
+
+  public String getPaytype() {
+    return paytype;
+  }
+
+  public void setPaytype(String paytype) {
+    this.paytype = paytype;
+  }
+
+  public String getTradeflag() {
+    return tradeflag;
+  }
+
+  public void setTradeflag(String tradeflag) {
+    this.tradeflag = tradeflag;
+  }
+
+  public String getTranscode() {
+    return transcode;
+  }
+
+  public void setTranscode(String transcode) {
+    this.transcode = transcode;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java
new file mode 100644
index 0000000..4bcc45a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/UserdtlSearchBean.java
@@ -0,0 +1,85 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class UserdtlSearchBean {
+  private String startAccdate;
+  private String endAccdate;
+  private String startTransdate;
+  private String endTransdate;
+  private String personname;
+  private String paytype;
+  private String tradeflag;
+  private String transcode;
+  private String status;
+
+  public String getStartAccdate() {
+    return startAccdate;
+  }
+
+  public void setStartAccdate(String startAccdate) {
+    this.startAccdate = startAccdate;
+  }
+
+  public String getEndAccdate() {
+    return endAccdate;
+  }
+
+  public void setEndAccdate(String endAccdate) {
+    this.endAccdate = endAccdate;
+  }
+
+  public String getStartTransdate() {
+    return startTransdate;
+  }
+
+  public void setStartTransdate(String startTransdate) {
+    this.startTransdate = startTransdate;
+  }
+
+  public String getEndTransdate() {
+    return endTransdate;
+  }
+
+  public void setEndTransdate(String endTransdate) {
+    this.endTransdate = endTransdate;
+  }
+
+  public String getPersonname() {
+    return personname;
+  }
+
+  public void setPersonname(String personname) {
+    this.personname = personname;
+  }
+
+  public String getPaytype() {
+    return paytype;
+  }
+
+  public void setPaytype(String paytype) {
+    this.paytype = paytype;
+  }
+
+  public String getTradeflag() {
+    return tradeflag;
+  }
+
+  public void setTradeflag(String tradeflag) {
+    this.tradeflag = tradeflag;
+  }
+
+  public String getTranscode() {
+    return transcode;
+  }
+
+  public void setTranscode(String transcode) {
+    this.transcode = transcode;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java b/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java
new file mode 100644
index 0000000..de2d1b0
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/DtlController.java
@@ -0,0 +1,77 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.domain.TPersondtl;
+import com.supwisdom.dlpay.api.domain.TShopdtl;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
+import com.supwisdom.dlpay.system.service.DtlDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+public class DtlController {
+  @Autowired
+  private DtlDataService dtlDataService;
+
+  /**
+   * ====================================================
+   * 个人流水查询
+   * ====================================================
+   */
+  @GetMapping("/dtl/userdtl")
+  public String userdtlView() {
+    return "system/dtl/userdtl";
+  }
+
+  @GetMapping("/dtl/userdtllist")
+  @PreAuthorize("hasPermission('/dtl/userdtl','')")
+  @ResponseBody
+  public PageResult<TPersondtl> searchUserdtlPage(@RequestParam("page") Integer pageNo,
+                                                  @RequestParam("limit") Integer pageSize,
+                                                  @RequestParam(value = "paraid", required = false) Integer paraid,
+                                                  @RequestParam(value = "paraname", required = false) String paraname) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      UserdtlSearchBean searchBean = new UserdtlSearchBean();
+      return dtlDataService.getPersondtlPage(searchBean, pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+  /**
+   * ====================================================
+   * 商户流水查询
+   * ====================================================
+   */
+  @GetMapping("/dtl/shopdtl")
+  public String shopdtlView() {
+    return "system/dtl/shopdtl";
+  }
+
+  @GetMapping("/dtl/shopdtllist")
+  @PreAuthorize("hasPermission('/dtl/shopdtl','')")
+  @ResponseBody
+  public PageResult<TShopdtl> searchUserdtlPage(@RequestParam("page") Integer pageNo,
+                                                @RequestParam("limit") Integer pageSize,
+                                                @RequestParam(value = "paraid", required = false) Integer paraid) {
+    try {
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      ShopdtlSearchBean searchBean = new ShopdtlSearchBean();
+      return dtlDataService.getShopdtlPage(searchBean, pageNo, pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java
new file mode 100644
index 0000000..4389e1c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/DtlDataService.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.api.domain.TPersondtl;
+import com.supwisdom.dlpay.api.domain.TShopdtl;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface DtlDataService {
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  PageResult<TPersondtl> getPersondtlPage(UserdtlSearchBean searchBean, int pageNo, int pageSize);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  PageResult<TShopdtl> getShopdtlPage(ShopdtlSearchBean searchBean, int pageNo, int pageSize);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java
new file mode 100644
index 0000000..6f7b1ba
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/DtlDataServiceImpl.java
@@ -0,0 +1,116 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.api.dao.PersondtlDao;
+import com.supwisdom.dlpay.api.dao.ShopdtlDao;
+import com.supwisdom.dlpay.api.domain.TPersondtl;
+import com.supwisdom.dlpay.api.domain.TShopdtl;
+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.system.bean.ShopdtlSearchBean;
+import com.supwisdom.dlpay.system.bean.UserdtlSearchBean;
+import com.supwisdom.dlpay.system.service.DtlDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class DtlDataServiceImpl implements DtlDataService {
+  @Autowired
+  private PersondtlDao persondtlDao;
+  @Autowired
+  private ShopdtlDao shopdtlDao;
+
+  @Override
+  public PageResult<TPersondtl> getPersondtlPage(UserdtlSearchBean searchBean, int pageNo, int pageSize) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "refno"));
+    Page<TPersondtl> page = persondtlDao.findAll(new Specification<TPersondtl>() {
+      @Override
+      public Predicate toPredicate(Root<TPersondtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if(!StringUtil.isEmpty(searchBean.getStartAccdate())){
+          predicates.add(criteriaBuilder.ge(root.get("accdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getStartAccdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getEndAccdate())){
+          predicates.add(criteriaBuilder.le(root.get("accdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getEndAccdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getStartTransdate())){
+          predicates.add(criteriaBuilder.ge(root.get("transdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getStartTransdate()))));
+
+        }
+        if(!StringUtil.isEmpty(searchBean.getEndTransdate())){
+          predicates.add(criteriaBuilder.le(root.get("transdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getEndTransdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getPersonname())){
+          predicates.add(criteriaBuilder.like(root.get("username").as(String.class), "%" + searchBean.getPersonname().trim() + "%"));
+        }
+        if(!StringUtil.isEmpty(searchBean.getPaytype())){
+          predicates.add(criteriaBuilder.equal(root.get("paytype").as(String.class), searchBean.getPaytype().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getTradeflag())){
+          predicates.add(criteriaBuilder.equal(root.get("tradeflag").as(String.class), searchBean.getTradeflag().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getTranscode())){
+          predicates.add(criteriaBuilder.equal(root.get("transcode").as(String.class), searchBean.getTranscode().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getStatus())){
+          predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), searchBean.getStatus().trim()));
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    }, pageable);
+    return new PageResult<>(page);
+  }
+
+  @Override
+  public PageResult<TShopdtl> getShopdtlPage(ShopdtlSearchBean searchBean, int pageNo, int pageSize) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "refno"));
+    Page<TShopdtl> page = shopdtlDao.findAll(new Specification<TShopdtl>() {
+      @Override
+      public Predicate toPredicate(Root<TShopdtl> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if(!StringUtil.isEmpty(searchBean.getStartAccdate())){
+          predicates.add(criteriaBuilder.ge(root.get("accdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getStartAccdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getEndAccdate())){
+          predicates.add(criteriaBuilder.le(root.get("accdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getEndAccdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getStartTransdate())){
+          predicates.add(criteriaBuilder.ge(root.get("transdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getStartTransdate()))));
+
+        }
+        if(!StringUtil.isEmpty(searchBean.getEndTransdate())){
+          predicates.add(criteriaBuilder.le(root.get("transdate").as(Integer.class),Integer.valueOf(DateUtil.unParseToDateFormat(searchBean.getEndTransdate()))));
+        }
+        if(!StringUtil.isEmpty(searchBean.getShopname())){
+          predicates.add(criteriaBuilder.like(root.get("shopname").as(String.class), "%" + searchBean.getShopname().trim() + "%"));
+        }
+        if(!StringUtil.isEmpty(searchBean.getPaytype())){
+          predicates.add(criteriaBuilder.equal(root.get("paytype").as(String.class), searchBean.getPaytype().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getTradeflag())){
+          predicates.add(criteriaBuilder.equal(root.get("tradeflag").as(String.class), searchBean.getTradeflag().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getTranscode())){
+          predicates.add(criteriaBuilder.equal(root.get("transcode").as(String.class), searchBean.getTranscode().trim()));
+        }
+        if(!StringUtil.isEmpty(searchBean.getStatus())){
+          predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), searchBean.getStatus().trim()));
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    }, pageable);
+    return new PageResult<>(page);
+  }
+}
diff --git a/src/main/resources/templates/system/dtl/shopdtl.html b/src/main/resources/templates/system/dtl/shopdtl.html
new file mode 100644
index 0000000..9fc1cc3
--- /dev/null
+++ b/src/main/resources/templates/system/dtl/shopdtl.html
@@ -0,0 +1,19 @@
+<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">
+            搜索：
+            <input id="search-shopdtl-shopname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
+            <button id="btn-search-shopdtl" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-reset-shopdtl" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+        </div>
+        <table class="layui-table" id="shopdtlSearchTable" lay-filter="shopdtlSearchTable-filter"></table>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/dtl/userdtl.html b/src/main/resources/templates/system/dtl/userdtl.html
new file mode 100644
index 0000000..987e869
--- /dev/null
+++ b/src/main/resources/templates/system/dtl/userdtl.html
@@ -0,0 +1,59 @@
+<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-form layui-card-header layuiadmin-card-header-auto">
+        <div class="layui-form-item">
+            <div class="layui-inline">
+                <label class="layui-form-label">ID</label>
+                <div class="layui-input-block">
+                    <input type="text" name="id" placeholder="请输入" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label">用户名</label>
+                <div class="layui-input-block">
+                    <input type="text" name="username" placeholder="请输入" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label">邮箱</label>
+                <div class="layui-input-block">
+                    <input type="text" name="email" placeholder="请输入" autocomplete="off" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label">性别</label>
+                <div class="layui-input-block">
+                    <select name="sex">
+                        <option value="0">不限</option>
+                        <option value="1">男</option>
+                        <option value="2">女</option>
+                    </select>
+                </div>
+            </div>
+            <div class="layui-inline">
+                <button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="LAY-user-front-search">
+                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                </button>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+
+
+
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-shopdtl-personname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
+            <button id="btn-search-sysparam" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+        </div>
+        <table class="layui-table" id="userdtlSearchTable" lay-filter="userdtlSearchTable-filter"></table>
+    </div>
+</div>
\ No newline at end of file
diff --git a/src/main/resources/templates/system/shop/index.html b/src/main/resources/templates/system/shop/index.html
index b056909..e93f098 100644
--- a/src/main/resources/templates/system/shop/index.html
+++ b/src/main/resources/templates/system/shop/index.html
@@ -135,7 +135,7 @@
                         </div>
 
                         <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
-                            <button class="layui-btn" lay-filter="form-submit" lay-submit id="submitbtn">保存</button>
+                            <button class="layui-btn" lay-filter="form-submit-shop-btn" lay-submit id="submitbtn-shop-btn">保存</button>
                             <button class="layui-btn layui-btn-primary" type="button" id="cancelbtn">取消</button>
                         </div>
                     </div>
@@ -252,7 +252,7 @@
             $("#shop-info").hide();
         });
 
-        form.on('submit(form-submit)', function (data) {
+        form.on('submit(form-submit-shop-btn)', function (data) {
             layer.load(2);
             var vdata = data.field;
             vdata["_csrf"] = $("meta[name='_csrf_token']").attr("value");
@@ -332,7 +332,7 @@
                     $("#fshopid").attr("readonly", "readonly");
                     $("#shoptype").removeAttr("disabled");
                     form.render('select');
-                    $("#submitbtn").text("新增");
+                    $("#submitbtn-shop-btn").text("新增");
                     $("#shop-info").show();
                     return false;
                 });
@@ -349,7 +349,7 @@
                     $("#fshopid").removeAttr("readonly");
                     $("#shoptype").attr('disabled', 'disabled');
                     form.render('select');
-                    $("#submitbtn").text("保存");
+                    $("#submitbtn-shop-btn").text("保存");
                     $("#shop-info").show();
                 } else if (data.code == 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
