diff --git a/backend/build.gradle b/backend/build.gradle
index 45c52ba..61a4f10 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -74,7 +74,7 @@
     compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.1'
     compile group: 'log4j', name: 'log4j', version: '1.2.17'
 
-    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.25-4-g8c3fe54'
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.26-1-g9a9f482'
     
     implementation 'org.hamcrest:hamcrest:2.1'
 }
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/OutletsRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/OutletsRepositoryImpl.java
new file mode 100644
index 0000000..9349584
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/OutletsRepositoryImpl.java
@@ -0,0 +1,38 @@
+package com.supwisdom.dlpay.portal.dao.impl;
+
+import com.supwisdom.dlpay.framework.jpa.BaseRepository;
+import com.supwisdom.dlpay.framework.jpa.Finder;
+import com.supwisdom.dlpay.framework.jpa.page.Pagination;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.portal.bean.OutletsSearchBean;
+import com.supwisdom.dlpay.portal.dao.OutletsRepository;
+import com.supwisdom.dlpay.portal.domain.TBOutlets;
+import org.hibernate.transform.Transformers;
+import org.jetbrains.annotations.NotNull;
+
+public class OutletsRepositoryImpl extends BaseRepository implements OutletsRepository {
+  @NotNull
+  @Override
+  public Pagination getOutletsList(@NotNull OutletsSearchBean bean) {
+    String name = bean.getName();
+    String address = bean.getAddress();
+    int pageno = bean.getPageno();
+    int pagesize = bean.getPagesize();
+    StringBuilder sql = new StringBuilder("select * from tb_outlets where 1=1");
+    if (!StringUtil.isEmpty(name)) {
+      sql.append(" and name like :name");
+    }
+    if (!StringUtil.isEmpty(address)) {
+      sql.append(" and address like :address");
+    }
+    sql.append(" order by outletsno desc");
+    Finder f = Finder.create(sql.toString());
+    if (!StringUtil.isEmpty(name)) {
+      f.setParameter("name", "%" + name.trim() + "%");
+    }
+    if (!StringUtil.isEmpty(address)) {
+      f.setParameter("address", "%" + address.trim() + "%");
+    }
+    return findNative(f, Transformers.aliasToBean(TBOutlets.class), pageno, pagesize);
+  }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
index a459cc8..0493441 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
@@ -6,7 +6,7 @@
 
 @Entity
 @Table(name = "tb_outlets",
-    indexes = {@Index(name = "outlets_idx1", columnList = "outlesno"),
+    indexes = {@Index(name = "outlets_idx1", columnList = "outletsno"),
         @Index(name = "outlets_idx2", columnList = "name"),
         @Index(name = "outlets_idx3", columnList = "address")})
 public class TBOutlets {
@@ -16,8 +16,8 @@
   @Column(name = "id", nullable = false, length = 32)
   private String id;
 
-  @Column(name = "outlesno")
-  private String outlesno;
+  @Column(name = "outletsno")
+  private String outletsno;
 
   @Column(name = "name",length = 100)
   private String name;
@@ -31,9 +31,11 @@
   @Column(name = "endtime", length = 6)
   private String endtime;
 
-  @Column(name = "location",length = 20)
+  @Column(name = "location",length = 30)
   private String location;
 
+  @Column(name = "createtime",length = 14)
+  private String createtime;
 
   @Column(name = "businescope", length = 100)
   private String businescope;
@@ -49,12 +51,12 @@
     this.id = id;
   }
 
-  public String getOutlesno() {
-    return outlesno;
+  public String getOutletsno() {
+    return outletsno;
   }
 
-  public void setOutlesno(String outlesno) {
-    this.outlesno = outlesno;
+  public void setOutletsno(String outletsno) {
+    this.outletsno = outletsno;
   }
 
   public String getName() {
@@ -112,4 +114,12 @@
   public void setTel(String tel) {
     this.tel = tel;
   }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
 }
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index bef3e3c..45f42cd 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -517,69 +517,42 @@
         })
         if (cardResponse.retcode != 0) {
             logger.error { "查询卡片[${cardno}]信息失败:${cardResponse.retmsg}" }
-            return JsonResult.error("银行卡号有误")
+            return JsonResult.error("查询银行卡信息失败，请检查卡号是否正确")
         }
         val card = cardResponse.card
-        if (card.userid.isNullOrEmpty() || card.status != TradeDict.STATUS_NORMAL) {
-            return JsonResult.error("银行卡号信息有误")
-        }
-        val personResponse = userProxy.queryPerson(card.userid)
-        if (personResponse.retcode != 0) {
-            logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
-            return JsonResult.error("查询用户信息失败，请稍后重试")
-        }
-        val person = personResponse.person
-        if (person.name != name) {
-            return JsonResult.error("绑定信息有误[姓名]")
-        }
-        if (person.idtype != idtype || person.idno != idno) {
-            return JsonResult.error("绑定信息有误[证件类型/证件号]")
-        }
         val exsitUser = mobileApiService.findUserById(card.userid)
         if (exsitUser != null) {
             return JsonResult.error("该银行卡号已被绑定，若您本人绑定，请先解除绑定，若非本人，请联系客服")
         }
-        var signed = ""
-        //call api
-        var resp = citizencardPayService.bindCard(cardno, name, idtype, idno, phone)
-        if (resp.code != "0000") {
-            return JsonResult.error(resp.message)
+        val bindCardResult = userProxy.bindCard(BindCardParam().apply{
+            this.cardno = cardno
+            this.name = name
+            this.idtype = idtype
+            this.idno = idno
+            this.phone = user.phone
+        })
+        if (bindCardResult["retcode"] != 0) {
+            logger.error { "绑卡失败，${bindCardResult["retmsg"]}" }
+            return JsonResult.error("绑卡失败，${bindCardResult["retmsg"]}")
         }
-        var needupdate = false
-        if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD) {
-            signed = TradeDict.STATUS_YES
-            if (!card.signed) {
-                card.signed = true
-                val response = userProxy.updateCardSign(card.cardno, true)
-                if (response.retcode != 0) {
-                    logger.error { "更新卡片签约状态失败:${response.retmsg}" }
-                    return JsonResult.error("绑卡失败，请稍后重试")
-                }
-            }
-            user.signedtime = DateUtil.getNow();
+        val signed = bindCardResult["signed"] as String
+        if (TradeDict.STATUS_YES == signed) {
+            user.signedtime = DateUtil.getNow()
             mobileApiService.saveUser(user)
-            needupdate = true;
-
         }
         if (user.userid.isNullOrEmpty()) {
-            user.userid = person.userid
+            user.userid = card.userid
             user.bindtime = DateUtil.getNow()
-            needupdate = true
-        }
-        if (needupdate) {
             mobileApiService.saveUser(user)
         }
         var payseted = false
         if (!user.paypwd.isNullOrEmpty()) {
             payseted = true
         }
-
         return JsonResult.ok("OK").put("personid", card.userid)
                 ?.put("paypwdset", payseted)
                 ?.put("phonex", StringUtil.phoneReplace(phone))
                 ?.put("signed", signed)!!
-
-
     }
 
     /**
@@ -749,43 +722,19 @@
         if (user.phone.isNullOrEmpty()) {
             return JsonResult.error("用户不存在，请注册")
         }
-        var signed: String
         if (!user.userid.isNullOrEmpty()) {
-            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
-                this.userid = user.userid
-                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
-            })
-            if (cardResponse.retcode != 0) {
-                logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
-                return JsonResult.error("卡片不存在，请重新绑定")
-            }
-            val card = cardResponse.card
-            val personResponse = userProxy.queryPerson(card.userid)
-            if (personResponse.retcode != 0) {
-                logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
-                return JsonResult.error("查询用户信息失败，请稍后重试")
-            }
-            val person = personResponse.person
-            //call sign api
-            val captcha = agree//此处为验证码，暂由此参数代替
-            var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_SIGNCARD, captcha)
-            if (resp.code != "0000") {
-                return JsonResult.error(resp.message)
-            }
-            card.signed = true
-            user.signedtime = DateUtil.getNow()
-            val response = userProxy.updateCardSign(card.cardno, true)
+            val response = userProxy.signbxy(user.userid, agree, user.phone)
             if (response.retcode != 0) {
-                logger.error { "更新卡片签约状态失败:${response.retmsg}" }
-                return JsonResult.error("签约银行协议失败，请稍后重试")
+                logger.error { "用户签约失败:${response.retmsg}" }
+                return JsonResult.error("签约失败，${response.retmsg}")
             }
+            user.signedtime = DateUtil.getNow()
             mobileApiService.saveUser(user)
-            signed = TradeDict.STATUS_YES
+            return JsonResult.ok("ok")
+                    .put("signed", TradeDict.STATUS_YES)!!
         } else {
             return JsonResult.error("请先绑定银行卡")
         }
-        return JsonResult.ok("ok")
-                .put("signed", signed)!!
     }
 
     /**
@@ -1096,12 +1045,24 @@
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
-        val resp = qrcodeService.encodeCode(user.uid)
-        return if (resp.retcode == 0) {
-            JsonResult.ok("ok").put("qrcode", resp.retmsg)!!
-        } else {
-            JsonResult.error(resp.retmsg)
+        if(TradeDict.STATUS_NORMAL!=user.status){
+            return JsonResult.error("用户状态异常")
         }
+        if(user.userid.isNullOrEmpty()){
+            return JsonResult.error("用户未绑定身份")
+        }
+        val qrcodeResult = userProxy.qrcode(QrcodeParam().apply {
+            this.uid = user.uid
+            this.userid = user.userid
+            this.rsapublic = user.rsapublic
+            this.secertkey = user.secertkey
+        })
+        if (qrcodeResult["retcode"] != 0) {
+            logger.error { "生成二维码失败，${qrcodeResult["retmsg"]}" }
+            return JsonResult.error("生成二维码失败，${qrcodeResult["retmsg"]}")
+        }
+        val qrcode = qrcodeResult["qrcode"] as String
+        return JsonResult.ok("ok").put("qrcode", qrcode)!!
     }
 
     /**
@@ -1109,45 +1070,43 @@
      * 解除银行协议
      * */
     @RequestMapping("/unsignbxy")
-    fun unSignbxy(): JsonResult {
+    fun unSignbxy(paypwd: String): JsonResult {
         val p = SecurityContextHolder.getContext().authentication
         val user = mobileApiService.findUserById(p.name)
                 ?: return JsonResult.error("用户不存在，请注册")
-        var signed: String
+        if (user.paypwd.isNullOrEmpty()) {
+            return JsonResult.error("支付密码未设置，请先设置")
+        }
+        val paypwdtimes = user.checkPaypwdtime()
+        if (paypwdtimes == -1) {
+            return JsonResult.error("支付密码错误次数过多，请30分钟后再试")
+        } else if (paypwdtimes == 1) {
+            mobileApiService.saveUser(user)
+        }
+        val encoder = BCryptPasswordEncoder()
+        if (!encoder.matches(paypwd, user.paypwd)) {
+            user.updatePaypwderror(false).also {
+                if (it) mobileApiService.saveUser(user)
+            }
+            return JsonResult.error("支付密码错误")
+        } else {
+            user.updatePaypwderror(true).also {
+                if (it) mobileApiService.saveUser(user)
+            }
+        }
         if (!user.userid.isNullOrEmpty()) {
-            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
-                this.userid = user.userid
-                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
-            })
-            if (cardResponse.retcode != 0) {
-                logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
-                return JsonResult.error(-1, "银行卡不存在，不能解除代扣协议")
-            }
-            val card = cardResponse.card
-            //call sign api
-            val personResponse = userProxy.queryPerson(card.userid)
-            if (personResponse.retcode != 0) {
-                logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
-                return JsonResult.error("查询用户信息失败，请稍后重试")
-            }
-            val person = personResponse.person
-            val captcha = ""//此处为验证码，暂由此参数代替
-            var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_UNSIGNCARD, captcha)
-            if (resp.code != "0000") {
-                return JsonResult.error(resp.message)
-            }
-            card.signed = false
-            val response = userProxy.updateCardSign(card.cardno, false)
+            val response = userProxy.unsignbxy(user.userid, user.phone)
             if (response.retcode != 0) {
-                logger.error { "更新卡片签约状态失败:${response.retmsg}" }
-                return JsonResult.error("解除银行协议失败，请稍后重试")
+                logger.error { "用户解约失败:${response.retmsg}" }
+                return JsonResult.error("解约失败，${response.retmsg}")
             }
-            signed = TradeDict.STATUS_NO
+            user.userid = null
+            mobileApiService.saveUser(user)
+            return JsonResult.ok("ok")
+                    .put("signed", TradeDict.STATUS_NO)!!
         } else {
             return JsonResult.error("未绑定银行卡，不能解除代扣协议")
         }
-        return JsonResult.ok("ok")
-                .put("signed", signed)!!
     }
 
     /**
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
index d5c5219..f4bd861 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
@@ -46,6 +46,8 @@
     lateinit var uploadPicService: UploadPicService
     @Autowired
     lateinit var advisoryService: AdvisoryService
+    @Autowired
+    lateinit var outletsService: OutletsService
     val logger = KotlinLogging.logger { }
 
     @RequestMapping("/test")
@@ -392,4 +394,35 @@
             JsonResult.error("删除问答异常")
         }
     }
+
+    /**
+     * 保存网点
+     */
+    @RequestMapping(value = ["/outlets/save"], method = [RequestMethod.POST])
+    fun saveOutlets(@RequestBody outlets: TBOutlets): JsonResult? {
+        return try {
+            outletsService.saveOutlets(outlets)
+            JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error { e.message }
+            JsonResult.error("保存网点异常")
+        }
+    }
+
+    /**
+     * 查询网点
+     */
+    @RequestMapping(value = ["/outlets/list"], method = [RequestMethod.GET])
+    fun getAdvisoryList(bean: OutletsSearchBean): JsonResult? {
+        return try {
+            val page = outletsService.getOutletsList(bean)
+            if (page.list == null || page.list.size == 0) {
+                return JsonResult.ok().put("msg", "无数据")
+            }
+            return JsonResult.ok().put("page", page)
+        } catch (e: Exception) {
+            logger.error { e.message }
+            JsonResult.error("查询网点列表异常")
+        }
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/OutletsSearchBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/OutletsSearchBean.kt
new file mode 100644
index 0000000..e8b05fc
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/OutletsSearchBean.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.portal.bean
+
+class OutletsSearchBean {
+    var name: String = ""
+    var address: String = ""
+    var pageno: Int = 1
+    var pagesize: Int = 10
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsDao.kt
new file mode 100644
index 0000000..55c66cd
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsDao.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.portal.dao
+
+import com.supwisdom.dlpay.portal.domain.TBOutlets
+import org.springframework.data.jpa.repository.JpaRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+interface OutletsDao :JpaRepository<TBOutlets,String>,OutletsRepository{
+
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsRepository.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsRepository.kt
new file mode 100644
index 0000000..23ecaf5
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/OutletsRepository.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.portal.dao
+
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.portal.bean.OutletsSearchBean
+
+interface OutletsRepository {
+    fun getOutletsList(bean: OutletsSearchBean): Pagination
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/OutletsServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/OutletsServiceImpl.kt
new file mode 100644
index 0000000..84b47ae
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/OutletsServiceImpl.kt
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.portal.service.Impl
+
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.portal.bean.OutletsSearchBean
+import com.supwisdom.dlpay.portal.dao.OutletsDao
+import com.supwisdom.dlpay.portal.domain.TBOutlets
+import com.supwisdom.dlpay.portal.service.OutletsService
+import com.supwisdom.dlpay.portal.util.PortalConstant
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class OutletsServiceImpl : OutletsService {
+    @Autowired
+    lateinit var outletsDao: OutletsDao
+    @Autowired
+    lateinit var businessparaDao: BusinessparaDao
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
+
+    override fun saveOutlets(outlets: TBOutlets) {
+        if (StringUtil.isEmpty(outlets.id)) {
+            val currentNoBusiness = businessparaDao.findByParakey(PortalConstant.SYSPARA_OUTLETS_CURRENTNO)
+                    ?: throw RuntimeException("网点编号参数未配置")
+            val currentNo = currentNoBusiness.paraval.toInt()
+            currentNoBusiness.paraval = (currentNo + 1).toString()
+            businessparaDao.save(currentNoBusiness)
+            outlets.createtime = systemUtilService.sysdatetime.hostdatetime
+            outlets.outletsno = String.format("%06d", currentNo)
+        }
+        outletsDao.save(outlets)
+    }
+
+    override fun getOutletsList(bean: OutletsSearchBean): Pagination {
+        return outletsDao.getOutletsList(bean)
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/OutletsService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/OutletsService.kt
new file mode 100644
index 0000000..927daf1
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/OutletsService.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.portal.service
+
+import com.supwisdom.dlpay.framework.jpa.page.Pagination
+import com.supwisdom.dlpay.portal.bean.OutletsSearchBean
+import com.supwisdom.dlpay.portal.domain.TBOutlets
+import org.springframework.transaction.annotation.Transactional
+
+interface OutletsService {
+    @Transactional
+    fun saveOutlets(outlets: TBOutlets)
+    @Transactional
+    fun getOutletsList(bean: OutletsSearchBean): Pagination
+}
\ No newline at end of file
diff --git a/frontend/src/api/outlets.js b/frontend/src/api/outlets.js
new file mode 100644
index 0000000..d8323e7
--- /dev/null
+++ b/frontend/src/api/outlets.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+export function saveOutlets(data) {
+  return request({
+    url: '/outlets/save',
+    method: 'post',
+    data
+  })
+}
+
+export function getOutletsList(query) {
+  return request({
+    url: '/outlets/list',
+    method: 'get',
+    params: query
+  })
+}
+
diff --git a/frontend/src/components/Home.vue b/frontend/src/components/AMap/index.vue
similarity index 97%
rename from frontend/src/components/Home.vue
rename to frontend/src/components/AMap/index.vue
index 0277ea9..1c1a996 100644
--- a/frontend/src/components/Home.vue
+++ b/frontend/src/components/AMap/index.vue
@@ -86,7 +86,6 @@
         })
         // 拖拽完成发送自定义 drag 事件
         positionPicker.on('success', positionResult => {
-          // 过滤掉初始化地图后的第一次默认拖放
           if (!this.dragStatus) {
             this.dragStatus = true
           } else {
diff --git a/frontend/src/views/outlets/index.vue b/frontend/src/views/outlets/index.vue
index 4814982..bd4a2f7 100644
--- a/frontend/src/views/outlets/index.vue
+++ b/frontend/src/views/outlets/index.vue
@@ -27,6 +27,72 @@
     <el-button type="primary" icon="el-icon-circle-plus-outline" @click="addOutlets()">
       录入网点
     </el-button>
+    <el-table
+      :key="tableKey"
+      v-loading="listLoading"
+      :data="list"
+      border
+      fit
+      highlight-current-row
+      style="width: 100%;margin-top:10px"
+    >
+      <el-table-column label="网点编号" width="100">
+        <template slot-scope="{row}">
+          <span>{{ row.outletsno }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="网点名称" align="center">
+        <template slot-scope="{row}">
+          <span>{{ row.name }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="网点地址" align="center">
+        <template slot-scope="{row}">
+          <span>{{ row.address }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="业务范围" align="center">
+        <template slot-scope="{row}">
+          <span>{{ row.businescope }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="营业时间" align="center" width="100">
+        <template slot-scope="{row}">
+          <span>{{ timeFormat(row.starttime,row.endtime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="地址坐标" align="center" width="100">
+        <template slot-scope="{row}">
+          <span>{{ row.location }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" width="100">
+        <template slot-scope="{row}">
+          <el-tag v-if="row.isdelete==='1'" type="danger" size="medium">已删除</el-tag>
+          <el-tag v-else-if="row.replystatus==='0'" size="medium">待回复</el-tag>
+          <el-tag v-else type="success" size="medium">已回复</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" width="100">
+        <template slot-scope="{row}">
+          <el-tooltip class="item" effect="dark" content="查看详情" placement="bottom">
+            <el-button icon="el-icon-search" circle size="mini" @click="openDetailDialog(row)" />
+          </el-tooltip>
+          <el-tooltip v-if="row.isdelete==='0'" class="item" effect="dark" content="回复" placement="bottom">
+            <el-button type="primary" icon="el-icon-edit" circle size="mini" @click="openReplyDialog(row)" />
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="formData.pageno"
+      :limit.sync="formData.pagesize"
+      style="margin-top:0;"
+      @pagination="getOutletsList"
+    />
     <el-dialog
       :title="title"
       :visible.sync="outletsDialogVisible"
@@ -42,14 +108,6 @@
               style="width:80%"
             />
           </el-form-item>
-          <el-form-item label="网点地址" prop="address" class="form-input-item">
-            <el-input
-              v-model="outletsForm.address"
-              maxlength="50"
-              show-word-limit
-              style="width:80%"
-            />
-          </el-form-item>
           <el-form-item label="业务范围" prop="businescope" class="form-input-item">
             <el-input
               v-model="outletsForm.businescope"
@@ -71,14 +129,41 @@
               v-model="businessTime"
               is-range
               format="HH:mm"
+              value-format="HHmm"
               range-separator="至"
               start-placeholder="开始时间"
               end-placeholder="结束时间"
               placeholder="选择时间范围"
+              style="width:80%"
             />
           </el-form-item>
-          <el-card style="width:550px">
-            <i style="position: absolute;font-size:50px;z-index: 999999;margin-left:81% " class="el-icon-circle-close close-map-btn" />
+          <el-form-item label="地址坐标" prop="location" class="form-icon-input-item">
+            <el-input
+              v-model="outletsForm.location"
+              style="width:80%"
+              :disabled="true"
+            ><el-button
+              slot="suffix"
+              type="primary"
+              icon="el-icon-location-outline"
+              @click="mapshow = true"
+            />
+            </el-input>
+          </el-form-item>
+          <el-form-item label="网点地址" prop="address" class="form-input-item">
+            <el-input
+              v-model="outletsForm.address"
+              maxlength="50"
+              show-word-limit
+              style="width:80%"
+            />
+          </el-form-item>
+          <el-card v-show="mapshow" style="width:550px">
+            <i
+              style="position: absolute;font-size:50px;z-index: 999999;margin-left:81% "
+              class="el-icon-circle-close close-map-btn"
+              @click="mapshow = false"
+            />
             <div class="g-wraper">
               <div class="m-part">
                 <mapDrag class="mapbox" @drag="dragMap" />
@@ -100,13 +185,26 @@
   </div>
 </template>
 <script>
-import mapDrag from '@/components/Home.vue'
+import mapDrag from '@/components/AMap/index.vue'
+import {
+  saveOutlets,
+  getOutletsList
+} from '@/api/outlets'
+import moment from 'moment'
 export default {
   name: 'Outlets',
   components: {
     mapDrag
   },
   data() {
+    var validateTime = (rule, value, callback) => {
+      if (this.businessTime === undefined ||
+      this.businessTime === null ||
+      this.businessTime.length < 2) {
+        callback(new Error('请选择营业时间'))
+      }
+      callback()
+    }
     return {
       dragData: {
         lng: null,
@@ -116,6 +214,7 @@
         nearestRoad: null,
         nearestPOI: null
       },
+      mapshow: false,
       outletsDialogVisible: false,
       formData: {
         name: '',
@@ -130,27 +229,70 @@
       total: 0,
       title: '',
       outletsForm: {
-        advisoryid: '',
-        title: '',
-        content: '',
-        ordernum: 1
+        outletsid: '',
+        name: '',
+        businescope: '',
+        tel: '',
+        starttime: '',
+        endtime: '',
+        location: '',
+        address: ''
       },
       rules: {
         name: [
-          { required: true, message: '请输入问答标题', trigger: 'blur' }
+          { required: true, message: '请输入网点名称', trigger: 'blur' }
         ],
-        content: [
-          { required: true, message: '请输入问答内容', trigger: 'blur' }
+        businescope: [
+          { required: true, message: '请输入业务范围', trigger: 'blur' }
+        ],
+        tel: [
+          { required: true, message: '请输入联系电话', trigger: 'blur' }
+        ],
+        businessTime: [
+          { validator: validateTime, trigger: 'blur' }
+        ],
+        location: [
+          { required: true, message: '请选择地址坐标', trigger: 'change' }
         ],
         address: [
-          { required: true, message: '请输入问答内容', trigger: 'blur' }
+          { required: true, message: '请输入网点地址', trigger: 'change' }
         ]
       }
     }
   },
   methods: {
+    getOutletsList() {
+      this.listLoading = true
+      getOutletsList(this.formData).then(response => {
+        if (response.page) {
+          this.list = response.page.list
+          this.total = response.page.totalCount
+        } else {
+          this.list = null
+          this.total = 0
+        }
+        this.listLoading = false
+      }).catch(error => {
+        this.$message({
+          message: error.msg || '请求异常',
+          type: 'error'
+        })
+        this.listLoading = false
+      })
+    },
+    handleFilter() {
+      this.formData.pageno = 1
+      this.getOutletsList()
+    },
+    timeFormat(start, end) {
+      if (start === null || end === null) {
+        return ''
+      }
+      var starttime = moment(start, 'HHmmss').format('HH:mm')
+      var endtime = moment(end, 'HHmmss').format('HH:mm')
+      return starttime + '-' + endtime
+    },
     dragMap(data) {
-      console.log(data)
       this.dragData = {
         lng: data.position.lng,
         lat: data.position.lat,
@@ -159,6 +301,8 @@
         nearestRoad: data.nearestRoad,
         nearestPOI: data.nearestPOI
       }
+      this.outletsForm.location = data.position.lng + ',' + data.position.lat
+      this.outletsForm.address = data.address
     },
     addOutlets() {
       this.title = '录入网点'
@@ -167,14 +311,46 @@
     },
     resetForm(formName) {
       this.outletsForm = {
-        advisoryid: '',
-        title: '',
-        content: '',
-        ordernum: null
+        outletsid: '',
+        name: '',
+        businescope: '',
+        tel: '',
+        starttime: '',
+        endtime: '',
+        location: '',
+        address: ''
       }
+      this.mapshow = false
       this.$nextTick(() => {
         this.$refs[formName].clearValidate()
       })
+    },
+    saveOutlets(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          var time = this.businessTime
+          if (this.businessTime != null) {
+            this.outletsForm.starttime = time[0] + '00'
+            this.outletsForm.endtime = time[1] + '00'
+          }
+          saveOutlets(this.outletsForm).then(response => {
+            this.$notify({
+              title: '成功',
+              message: '保存成功！',
+              type: 'success',
+              duration: 2000
+            })
+            this.outletsDialogVisible = false
+          }).catch(error => {
+            this.$message({
+              message: error.msg || '请求异常',
+              type: 'error'
+            })
+          })
+        } else {
+          return false
+        }
+      })
     }
   }
 }
@@ -202,5 +378,9 @@
 .m-footer{ background: #eee; line-height: 60px; text-align: center; color: #999; font-size: 12px; }
 .m-footer a{ margin: 0 5px; color: #999; text-decoration: none; }
 .el-card__body {padding:0 !important}
-.close-map-btn {color: #f7f7fc;}
+.close-map-btn {color: #ABABAB;}
+.close-map-btn:hover{ color: #868686; }
+.form-icon-input-item .el-input__suffix{ right:0px }
+.form-input-item .el-input__inner{padding-right: 50px;}
+
 </style>
