修改签约解约、二维码接口
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>