消费者黑名单

master
yangkai 6 years ago
parent 7f935392d4
commit 8ce96a7a83

@ -0,0 +1,29 @@
package au.com.royalpay.payment.manage.mappers.risk;
import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect;
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.ibatis.annotations.Param;
/**
* Create by yixian at 2017-12-21 11:45
*/
@AutoMapper(tablename = "risk_customer_black_list", pkName = "openid")
public interface RiskCustomerBlackListMapper {
@AutoSql(type = SqlType.SELECT)
JSONObject findByOpenid(@Param("openid") String openid);
@AutoSql(type = SqlType.SELECT)
@AdvanceSelect(addonWhereClause = "is_valid=1")
PageList<JSONObject> query(JSONObject params, PageBounds pagination);
@AutoSql(type = SqlType.UPDATE)
void update(JSONObject customerBlackList);
@AutoSql(type = SqlType.INSERT)
void save(JSONObject customerBlackList);
}

@ -0,0 +1,46 @@
package au.com.royalpay.payment.manage.risk.bean;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
public class QueryBlackListCustomer {
private String openid;
private int page = 1;
private int limit = 10;
public JSONObject toParams() {
JSONObject params = new JSONObject();
if(StringUtils.isNotEmpty(openid)){
params.put("openid", this.openid);
}
params.put("is_valid", 1);
return params;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
}

@ -33,4 +33,12 @@ public interface RiskMerchantService {
void addAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject params); void addAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject params);
void disableAttentionMerchant(JSONObject manager, String clientMoniker); void disableAttentionMerchant(JSONObject manager, String clientMoniker);
JSONObject customerBlackList(JSONObject manager, QueryBlackListCustomer queryBlackListCustomer);
void disableBlackListCustomer(JSONObject manager, String openid);
void updateAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject attention);
void addBlackListCustomer(JSONObject manager, String openid, String remark);
} }

@ -2,6 +2,8 @@ package au.com.royalpay.payment.manage.risk.core.impl;
import au.com.royalpay.payment.manage.mappers.risk.*; import au.com.royalpay.payment.manage.mappers.risk.*;
import au.com.royalpay.payment.manage.mappers.system.ClientBankAccountMapper; import au.com.royalpay.payment.manage.mappers.system.ClientBankAccountMapper;
import au.com.royalpay.payment.manage.mappers.system.CustomerMapper;
import au.com.royalpay.payment.manage.mappers.system.ManagerCustomerRelationAlipayMapper;
import au.com.royalpay.payment.manage.merchants.core.ClientManager; import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.risk.bean.*; import au.com.royalpay.payment.manage.risk.bean.*;
import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; import au.com.royalpay.payment.manage.risk.core.RiskMerchantService;
@ -13,6 +15,7 @@ import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.Order; import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds; import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -39,6 +42,12 @@ public class RiskMerchantServiceImpl implements RiskMerchantService {
private RiskAttentionMerchantsMapper riskAttentionMerchantsAMapper; private RiskAttentionMerchantsMapper riskAttentionMerchantsAMapper;
@Resource @Resource
private ClientBankAccountMapper clientBankAccountMapper; private ClientBankAccountMapper clientBankAccountMapper;
@Resource
private RiskCustomerBlackListMapper riskCustomerBlackListMapper;
@Resource
private CustomerMapper customerMapper;
@Resource
private ManagerCustomerRelationAlipayMapper managerCustomerRelationAlipayMapper;
@Override @Override
@Transactional @Transactional
@ -243,6 +252,11 @@ public class RiskMerchantServiceImpl implements RiskMerchantService {
attention.put("contact_phone", client.getString("contact_phone")); attention.put("contact_phone", client.getString("contact_phone"));
attention.put("bank_account_no", bankAccount == null || bankAccount.size() <= 0 ? "" : bankAccount.get(0).getString("account_no")); attention.put("bank_account_no", bankAccount == null || bankAccount.size() <= 0 ? "" : bankAccount.get(0).getString("account_no"));
attention.put("is_valid", 1); attention.put("is_valid", 1);
attention.put("enjoin_wechat", params.getBoolean("enjoin_wechat")== null ? true : params.getBoolean("enjoin_wechat"));
attention.put("enjoin_alipay", params.getBoolean("enjoin_alipay")== null ? true : params.getBoolean("enjoin_alipay"));
attention.put("enjoin_bestpay", params.getBoolean("enjoin_bestpay")== null ? true : params.getBoolean("enjoin_bestpay"));
attention.put("enjoin_jd", params.getBoolean("enjoin_jd")== null ? true : params.getBoolean("enjoin_jd"));
attention.put("enjoin_hf", params.getBoolean("enjoin_hf")== null ? true : params.getBoolean("enjoin_hf"));
attention.put("creation_date", params.getDate("creation_date")==null ? new Date() : params.getDate("creation_date")); attention.put("creation_date", params.getDate("creation_date")==null ? new Date() : params.getDate("creation_date"));
attention.put("creation_by", manager.getString("manager_id")); attention.put("creation_by", manager.getString("manager_id"));
attention.put("remark", params.getString("remark")); attention.put("remark", params.getString("remark"));
@ -276,4 +290,82 @@ public class RiskMerchantServiceImpl implements RiskMerchantService {
attentionMerchant.put("last_update_by", manager.getString("manager_id")); attentionMerchant.put("last_update_by", manager.getString("manager_id"));
riskAttentionMerchantsAMapper.update(attentionMerchant); riskAttentionMerchantsAMapper.update(attentionMerchant);
} }
@Override
public JSONObject customerBlackList(JSONObject manager, QueryBlackListCustomer queryBlackListCustomer) {
JSONObject params = queryBlackListCustomer.toParams();
if (manager == null) {
throw new BadRequestException("登录状态已过期,请清新登录再试");
}
PageList<JSONObject> customerList = riskCustomerBlackListMapper.query(params, new PageBounds(queryBlackListCustomer.getPage(), queryBlackListCustomer.getLimit()));
JSONObject customer = new JSONObject();
JSONObject customerAlipay = new JSONObject();
for(JSONObject cus : customerList ){
if (cus.getString("openid").startsWith("olH")) {
customer = customerMapper.findCustomerGlobalpayByOpenId(cus.getString("openid"));
} else {
customer = customerMapper.findCustomerByOpenId(cus.getString("openid"));
}
if (customer != null && !customer.isEmpty()) {
cus.put("headimg", customer.getString("headimg"));
cus.put("nickname", customer.getString("nickname"));
continue;
}
customerAlipay = managerCustomerRelationAlipayMapper.findCustomerByUserId(cus.getString("openid"));
if (customerAlipay != null) {
cus.put("headimg", customerAlipay.getString("headimg"));
cus.put("nickname", customerAlipay.getString("nickname"));
}
}
return PageListUtils.buildPageListResult(customerList);
}
@Override
public void disableBlackListCustomer(JSONObject manager, String openid) {
if (manager == null) {
throw new BadRequestException("登录状态已过期,请清新登录再试");
}
JSONObject customerBlackList = riskCustomerBlackListMapper.findByOpenid(openid);
if (customerBlackList == null) {
throw new BadRequestException("The customer does not exist");
}
customerBlackList.put("is_valid", 0);
customerBlackList.put("last_update_date", new Date());
customerBlackList.put("last_update_by", manager.getString("manager_id"));
riskCustomerBlackListMapper.update(customerBlackList);
}
@Override
public void updateAttentionMerchant(JSONObject manager, String clientMoniker, JSONObject attention) {
if (manager == null) {
throw new BadRequestException("登录状态已过期,请清新登录再试");
}
JSONObject attentionMerchant = riskAttentionMerchantsAMapper.findByClientMoniker(clientMoniker);
if (attentionMerchant == null) {
throw new BadRequestException("The client does not exist");
}
attentionMerchant.put("enjoin_wechat", attention.getBoolean("enjoin_wechat"));
attentionMerchant.put("enjoin_alipay", attention.getBoolean("enjoin_alipay"));
attentionMerchant.put("enjoin_bestpay", attention.getBoolean("enjoin_bestpay"));
attentionMerchant.put("enjoin_jd", attention.getBoolean("enjoin_jd"));
attentionMerchant.put("enjoin_hf", attention.getBoolean("enjoin_hf"));
attentionMerchant.put("last_update_date", new Date());
attentionMerchant.put("last_update_by", manager.getString("manager_id"));
riskAttentionMerchantsAMapper.update(attentionMerchant);
}
@Override
public void addBlackListCustomer(JSONObject manager, String openid, String remark) {
if (manager == null) {
throw new BadRequestException("登录状态已过期,请清新登录再试");
}
JSONObject customer = new JSONObject();
customer.put("openid", openid);
customer.put("remark", remark);
customer.put("creation_date", new Date());
customer.put("creation_by", manager.getString("manager_id"));
customer.put("last_update_date", new Date());
customer.put("last_update_by", manager.getString("manager_id"));
riskCustomerBlackListMapper.save(customer);
}
} }

@ -8,12 +8,7 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -104,4 +99,24 @@ public class RiskController {
public void disableRiskMerchant(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker) { public void disableRiskMerchant(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker) {
riskMerchantService.disableAttentionMerchant(manager, clientMoniker); riskMerchantService.disableAttentionMerchant(manager, clientMoniker);
} }
@ManagerMapping(value = "/customer/blacklist", role = ManagerRole.RISK_MANAGER, method = RequestMethod.GET)
public JSONObject blackListCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, QueryBlackListCustomer queryBlackListCustomer) {
return riskMerchantService.customerBlackList(manager, queryBlackListCustomer);
}
@ManagerMapping(value = "/customer/blacklist/{openid}", role = ManagerRole.RISK_MANAGER, method = RequestMethod.PUT)
public void disableRiskCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String openid) {
riskMerchantService.disableBlackListCustomer(manager, openid);
}
@ManagerMapping(value = "/attention/{clientMoniker}/detail", role = ManagerRole.RISK_MANAGER, method = RequestMethod.PUT)
public void updateRiskMerchant(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String clientMoniker, @RequestBody JSONObject attention) {
riskMerchantService.updateAttentionMerchant(manager, clientMoniker, attention);
}
@ManagerMapping(value = "/customer/{openid}/blacklist", role = ManagerRole.RISK_MANAGER, method = RequestMethod.POST)
public void saveRiskCustomer(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String openid, @RequestBody JSONObject remark) {
riskMerchantService.addBlackListCustomer(manager, openid, remark.getString("remark"));
}
} }

@ -414,6 +414,11 @@ margin-bottom: 10%;"/>
<i class="fa fa-exclamation-triangle"></i> <span>黑名单|Risky Merchants</span> <i class="fa fa-exclamation-triangle"></i> <span>黑名单|Risky Merchants</span>
</a> </a>
</li> </li>
<li ui-sref-active="active">
<a ui-sref="analysis_monitoring.customer" ui-sref-opts="{reload:true}">
<i class="fa fa-exclamation-triangle"></i> <span>消费者黑名单|Risky Customer</span>
</a>
</li>
<li ui-sref-active="active"> <li ui-sref-active="active">
<a ui-sref="customerRankingAnalysis" ui-sref-opts="{reload:true}"> <a ui-sref="customerRankingAnalysis" ui-sref-opts="{reload:true}">
<i class="fa fa fa-male"></i> <span>消费排名|Risky Merchants</span> <i class="fa fa fa-male"></i> <span>消费排名|Risky Merchants</span>

@ -0,0 +1,163 @@
<!DOCTYPE html>
<html>
<head>
<title>Merchant Locations</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<script type="text/javascript" src="/static/lib/jquery/jquery-2.1.4.min.js"></script>
<meta charset="utf-8">
<style>
#map {
height: 100%;
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
.controls {
margin-top: 10px;
border: 1px solid transparent;
border-radius: 2px 0 0 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
height: 32px;
outline: none;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}
#pac-input {
background-color: #fff;
font-family: Roboto;
font-size: 15px;
font-weight: 300;
margin-left: 12px;
padding: 0 11px 0 13px;
text-overflow: ellipsis;
width: 300px;
}
</style>
</head>
<body>
<input id="pac-input" class="controls" type="text" placeholder="Search Merchant Location">
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDUu6qXRV-j24rSdbPOMfVdTN1-2OfC2o8&libraries=places"
type="text/javascript"></script>
<!--<script src="http://maps.google.cn/maps/api/js?sensor=true&key=AIzaSyDNx0I5o5U0HWPjpHqB4N-y4_f-GLZq4oQ&region=aus&language=zh-CN"-->
<!--type="text/javascript"></script>-->
<script>
var merchant_location;
function initMap() {
var infoWindow = new google.maps.InfoWindow;
try {
merchant_location = JSON.parse(window.parent.document.getElementById('merchant_location').innerText);
} catch (err) {
merchant_location = null;
}
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 13,
center: {lat: -33.8688, lng: 151.2195},
mapTypeId: 'roadmap'
});
if (merchant_location) {
var point = new google.maps.LatLng(
parseFloat(merchant_location.latitude),
parseFloat(merchant_location.longitude)
);
map.setCenter(point, 3);
var infowincontent = document.createElement('div');
var strong = document.createElement('strong');
strong.textContent = merchant_location.short_name + '(' + merchant_location.client_moniker + ')';
infowincontent.appendChild(strong);
infowincontent.appendChild(document.createElement('br'));
var merchant_address = document.createElement('p');
merchant_address.textContent = 'Address: ' + merchant_location.address;
infowincontent.appendChild(merchant_address);
var contact_bd = document.createElement('text');
contact_bd.setAttribute("style", "color:blue");
contact_bd.textContent = 'BD:' + merchant_location.bd_user_name;
infowincontent.appendChild(contact_bd);
}
// var add_view = window.parent.document.getElementById('add_view').innerText;
var add_view = 'true';
// Create the search box and link it to the UI element.
var input = document.getElementById('pac-input');
var searchBox = new google.maps.places.SearchBox(input);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
if (add_view === 'true') {
$('#pac-input').show();
// Bias the SearchBox results towards current map's viewport.
map.addListener('bounds_changed', function () {
searchBox.setBounds(map.getBounds());
});
searchBox.addListener('places_changed', function () {
var places = searchBox.getPlaces();
if (places.length == 0) {
return;
}
marker.setMap(null);
places.forEach(function (place) {
if (!place.geometry) {
console.log("Returned place contains no geometry");
return;
}
marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
marker.setMap(map);
map.setCenter(place.geometry.location, 3);
});
});
}
var marker = new google.maps.Marker();
if (merchant_location) {
marker = new google.maps.Marker({
map: map,
position: point
});
}
var geocoder = new google.maps.Geocoder();
map.addListener('click', function (event) {
var editmap = window.parent.document.getElementById('editmap').innerText;
if (editmap === 'true') {
marker.setMap(null);
marker = new google.maps.Marker({
map: map,
position: event.latLng
});
marker.setMap(map);
merchant_location = {};
geocoder.geocode({
'latLng': event.latLng
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
merchant_location.address = results[0].formatted_address;
merchant_location.latitude = event.latLng.lat();
merchant_location.longitude = event.latLng.lng();
}
}
});
}
});
if (merchant_location) {
marker.addListener('mouseover', function () {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
});
}
}
initMap();
</script>
</body>
</html>

@ -262,6 +262,16 @@
</div> </div>
</a> </a>
</div> </div>
<div class="col-sm-2 col-xs-6">
<a ui-sref="analysis_monitoring.customer" ui-sref-opts="{reload:true}">
<div class="description-block">
<img src="/static/images/main_menu/risk_blacklist.png"/>
<div class="description-text">
<span class="description-text">消费者黑名单</span>
</div>
</div>
</a>
</div>
<div class="col-sm-2 col-xs-6"> <div class="col-sm-2 col-xs-6">
<a ui-sref="customerRankingAnalysis" ui-sref-opts="{reload:true}"> <a ui-sref="customerRankingAnalysis" ui-sref-opts="{reload:true}">
<div class="description-block"> <div class="description-block">

@ -312,7 +312,7 @@
<div class="form-group"> <div class="form-group">
<div class="embed-responsive" style="height: 300px;"> <div class="embed-responsive" style="height: 300px;">
<iframe id="merchant_detail" name="merchant_detail" class="embed-responsive-item" <iframe id="merchant_detail" name="merchant_detail" class="embed-responsive-item"
src="one_locations.html"></iframe> src="search_locations.html"></iframe>
</div> </div>
</div> </div>
</div> </div>

@ -49,6 +49,10 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
url: '/risk/attention', url: '/risk/attention',
templateUrl: '/static/risk/templates/attention_merchants.html', templateUrl: '/static/risk/templates/attention_merchants.html',
controller: 'AttentionMerchantCtrl' controller: 'AttentionMerchantCtrl'
}).state('analysis_monitoring.customer', {
url: '/risk/customer',
templateUrl: '/static/risk/templates/customer_blacklist.html',
controller: 'RiskCustomerBlackListCtrl'
}); });
}]); }]);
app.controller('RiskManageCtrl', ['$scope', '$http', function ($scope, $http){ app.controller('RiskManageCtrl', ['$scope', '$http', function ($scope, $http){
@ -264,8 +268,22 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
$scope.loadAttentionMerchants(1); $scope.loadAttentionMerchants(1);
}) })
}; };
$scope.editAttention = function (attention) {
$uibModal.open({
templateUrl: '/static/risk/templates/risk_merchant_edit.html',
controller: 'editRiskCtrl',
resolve:{
attention: attention
}
}).result.then(function () {
$scope.loadAttentionMerchants(1);
})
};
}]); }]);
app.controller('newRiskCtrl', ['$scope', '$http','commonDialog', function ($scope, $http,commonDialog) { app.controller('newRiskCtrl', ['$scope', '$http','commonDialog', function ($scope, $http,commonDialog) {
$scope.attentions = {"enjoin_wechat": true,"enjoin_alipay": true,"enjoin_bestpay": true,
"enjoin_jd": true,"enjoin_hf": true}
$scope.save = function (attentions) { $scope.save = function (attentions) {
var params = angular.copy(attentions); var params = angular.copy(attentions);
$http.post('/sys/risk/attention/'+ attentions.client_moniker, params).then(function () { $http.post('/sys/risk/attention/'+ attentions.client_moniker, params).then(function () {
@ -276,6 +294,61 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
}); });
}; };
}]); }]);
app.controller('editRiskCtrl', ['$scope', '$http','commonDialog', 'attention', function ($scope, $http,commonDialog, attention) {
$scope.attentions = angular.copy(attention);
$scope.update = function (attentions) {
var params = angular.copy(attentions);
$http.put('/sys/risk/attention/'+ attentions.client_moniker + '/detail', params).then(function () {
commonDialog.alert({title: 'Success', content: 'add successfully', type: 'success'});
$scope.$close();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
});
};
}]);
app.controller('RiskCustomerBlackListCtrl', ['$scope', '$http','commonDialog', '$uibModal', function ($scope, $http,commonDialog,$uibModal) {
$scope.params = {};
$scope.pagination = {};
$scope.loadCustomerBlackList = function (page) {
var params = angular.copy($scope.params);
params.page = page || $scope.pagination.page || 1;
$http.get('/sys/risk/customer/blacklist', {params : params}).then(function (resp) {
$scope.customerList = resp.data.data;
$scope.pagination = resp.data.pagination;
});
};
$scope.loadCustomerBlackList();
$scope.disableCustomer = function (openid) {
commonDialog.confirm({title: 'Confirm', content: '确定将该用户移除黑名单?'
}).then(function () {
$http.put('/sys/risk/customer/blacklist/' + openid).then(function () {
commonDialog.alert({title: 'Success', content: 'disable successfully', type: 'success'});
$scope.loadCustomerBlackList();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
});
})
};
$scope.save = function () {
$uibModal.open({
templateUrl: '/static/risk/templates/new_customer_blacklist.html',
controller: 'newCustomerBlackListCtrl'
}).result.then(function () {
$scope.loadCustomerBlackList()
})
};
}]);
app.controller('newCustomerBlackListCtrl', ['$scope', '$http','commonDialog', function($scope, $http, commonDialog){
$scope.params = {};
$scope.addCustomer = function () {
$http.post('/sys/risk/customer/' + $scope.params.openid + '/blacklist', $scope.params).then(function () {
commonDialog.alert({title: 'Success', content: 'disable successfully', type: 'success'});
$scope.$close();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'});
});
};
}]);
app.filter('risk_type', function () { app.filter('risk_type', function () {
return function (riskStr) { return function (riskStr) {
angular.forEach(riskType,function (type) { angular.forEach(riskType,function (type) {

@ -56,6 +56,7 @@
<th>Contact Phone</th> <th>Contact Phone</th>
<th>Operation Time</th> <th>Operation Time</th>
<th>Remark</th> <th>Remark</th>
<th>Disable Channels</th>
<th>Operation</th> <th>Operation</th>
</tr> </tr>
</thead> </thead>
@ -69,9 +70,18 @@
<td>{{client.contact_phone}}</td> <td>{{client.contact_phone}}</td>
<td>{{client.creation_date}}</td> <td>{{client.creation_date}}</td>
<td>{{client.remark}}</td> <td>{{client.remark}}</td>
<td>
<span ng-if="client.enjoin_wechat">Wechat</span>
<span ng-if="client.enjoin_alipay">Alipay</span>
<span ng-if="client.enjoin_bestpay">Bestpay</span>
<span ng-if="client.enjoin_jd">JD</span>
<span ng-if="client.enjoin_hf">HF</span>
</td>
<td> <td>
<a role="button" class="text-bold text-danger" <a role="button" class="text-bold text-danger"
ng-click="disableAttention(client.client_moniker)">Disable</a> ng-click="disableAttention(client.client_moniker)">Disable</a>
<a role="button" class="text-bold text-bule"
ng-click="editAttention(client)">Edit</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>

@ -0,0 +1,76 @@
<div ui-view>
<section class="content-header">
<h1>Blacklist</h1>
<ol class="breadcrumb">
<li><i class="fa fa-list-alt"></i> Risk Manager</li>
<li class="active">Customer Blacklist</li>
</ol>
</section>
<section class="content">
<div class="box box-warning">
<div class="box-header">
<div class="form-inline">
<div class="form-group">
<label class="control-label" for="partner-code-search">Openid</label>
<input type="text" class="form-control" id="partner-code-search"
ng-enter="loadCustomerBlackList(1)"
ng-model="params.openid">
</div>
<div class="form-group">
<button class="btn btn-primary" type="button" ng-click="loadCustomerBlackList(1)"><i
class="fa fa-search"></i></button>
</div>
<div class="form-group pull-right">
<button class="btn btn-info" type="button" ng-click="save()"><i class="fa fa-plus"></i>Add</button>
</div>
</div>
</div>
</div>
<div class="box box-warning">
<div class="box-header">Customer</div>
<div class="box-body table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Openid</th>
<th>Customer</th>
<th>Operation Time</th>
<th>Remark</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="customer in customerList">
<td>{{customer.openid}}</td>
<td style="white-space: nowrap;overflow: hidden;text-overflow:ellipsis;">
<img ng-src="{{customer.headimg}}" style="height: 30px;width:30px;" class="img-circle" ng-if="customer.headimg"> {{customer.nickname}}
</td>
<td>{{customer.creation_date}}</td>
<td>{{customer.remark}}</td>
<td>
<a role="button" class="text-bold text-danger"
ng-click="disableCustomer(customer.openid)">Disable</a>
</td>
</tr>
</tbody>
</table>
<div class="modal-footer">
<uib-pagination ng-if="customerList.length"
class="pagination"
total-items="pagination.totalCount"
boundary-links="true"
ng-model="pagination.page"
items-per-page="pagination.limit"
max-size="10"
ng-change="loadCustomerBlackList()"
previous-text="&lsaquo;"
next-text="&rsaquo;"
first-text="&laquo;"
last-text="&raquo;"></uib-pagination>
</div>
</div>
</div>
</section>
</div>

@ -0,0 +1,28 @@
<section class="content-header">
<h1>New Customer Blacklist</h1>
</section>
<div class="content">
<div class="row">
<div class="col-sm-12">
<div class="box-solid">
<div class="box box-warning">
<div class="box-header">
<form role="form" style="margin:0px auto;width: 50%">
<div class="form-group">
<label>Open ID</label>
<input ng-model="params.openid" class="form-control" type="text" />
</div>
<div class="form-group">
<label>Remark</label>
<input ng-model="params.remark" class="form-control" type="text" />
</div>
<div class="form-group">
<button class="btn btn-primary btn-block" ng-click="addCustomer()">save</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>

@ -27,6 +27,26 @@
is-open="creationCtrl.open" ng-click="creationCtrl.open=true"> is-open="creationCtrl.open" ng-click="creationCtrl.open=true">
</div> </div>
</div> </div>
<div class="form-group">
<label class="control-label col-sm-3">Channels</label>
<p class="checkbox-inline checkbox col-sm-7">
<label>
<input type="checkbox" ng-model="attentions.enjoin_wechat" name="WeChat|微信">WeChat|微信
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_alipay" name="Alipay|支付宝">Alipay|支付宝
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_bestpay" name="Bestpay|翼支付">Bestpay|翼支付
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_jd" name="JD|京东">JD|京东
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_hf" name="HF|汇付">HF|汇付
</label>
</p>
</div>
</form> </form>
</div> </div>
</div> </div>

@ -0,0 +1,53 @@
<div class="modal-header">
<h4>Edit Risk Merchants</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-12">
<form novalidate name="accountForm" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-3" for="client-moniker">Client Moniker</label>
<div class="col-sm-7">
<input class="form-control" type="text" id="client-moniker" name="client_moniker"
ng-model="attentions.client_moniker" disabled>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3" for="attentions-remark">Remark</label>
<div class="col-sm-7">
<input class="form-control" type="text" id="attentions-remark" name="remark"
ng-model="attentions.remark">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">Channels</label>
<p class="checkbox-inline checkbox col-sm-7">
<label>
<input type="checkbox" ng-model="attentions.enjoin_wechat" name="WeChat|微信">WeChat|微信
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_alipay" name="Alipay|支付宝">Alipay|支付宝
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_bestpay" name="Bestpay|翼支付">Bestpay|翼支付
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_jd" name="JD|京东">JD|京东
</label>
<label>
<input type="checkbox" ng-model="attentions.enjoin_hf" name="HF|汇付">HF|汇付
</label>
</p>
</div>
</form>
</div>
</div>
</div>
<div class="modal-footer">
<div class="btn-group">
<button class="btn btn-success" type="button" ng-click="update(attentions)">Submit</button>
</div>
<div class="btn-group">
<button class="btn btn-danger" type="button" ng-click="$dismiss()">Cancel</button>
</div>
</div>
Loading…
Cancel
Save