Merge remote-tracking branch 'origin/master'

master
yixian 7 years ago
commit 359f357f2c

@ -94,7 +94,7 @@ public interface RetailAppService {
void drawDeposits(JSONObject device, BigDecimal draw_amount, String client_id);
JSONObject getCashbackCleanInfo(JSONObject device);
JSONObject getCashbackCleanInfo(JSONObject device,String client_id);
void sendMassageByCode(JSONObject params);
@ -105,4 +105,6 @@ public interface RetailAppService {
JSONObject getCouponById(JSONObject device, String coupon_log_id);
void useCoupon(JSONObject device, String coupon_log_id);
JSONObject getAd(JSONObject device);
}

@ -43,6 +43,7 @@ import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;
import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
@ -1049,13 +1050,17 @@ public class RetailAppServiceImp implements RetailAppService {
}
@Override
public JSONObject getCashbackCleanInfo(JSONObject device) {
public JSONObject getCashbackCleanInfo(JSONObject device,String client_id) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject res = clientManager.getBankAccountByClientId(device.getIntValue("client_id"));
JSONObject rate = merchantInfoProvider.clientCurrentRate(device.getIntValue("client_id"), new Date(), "Wechat");
JSONArray clientIds = clientManager.getAllClientIds(device.getIntValue("client_id"));
if (!clientIds.contains(client_id)) {
throw new ForbiddenException("partner has no permission");
}
JSONObject res = clientManager.getBankAccountByClientId(Integer.parseInt(client_id));
JSONObject rate = merchantInfoProvider.clientCurrentRate(Integer.parseInt(client_id), new Date(), "Wechat");
if (rate.getInteger("clean_days") == null) {
JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id"));
JSONObject client = clientManager.getClientInfo(Integer.parseInt(client_id));
rate.put("clean_days", client.getIntValue("clean_days"));
}
res.put("clean_days", rate.getIntValue("clean_days"));
@ -1168,6 +1173,20 @@ public class RetailAppServiceImp implements RetailAppService {
couponVerificationService.useCoupon(coupon_log_id);
}
@Override
public JSONObject getAd(JSONObject device) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject res = royalPayCMSSupport.listArticles("app_ad", false, true, 1, 10);
JSONArray acts = res.getJSONArray("data");
if (acts.size()>0){
int selectNo = RandomUtils.nextInt(0,acts.size());
return acts.getJSONObject(selectNo);
}
return null;
}
private static boolean mathchLetterorNum(String str) {
String regex = "[A-Za-z0-9]{8}";
return str.matches(regex);

@ -236,8 +236,11 @@ public class RetailAppController {
}
@RequestMapping(value = "/cash_back/clean_info", method = RequestMethod.GET)
public JSONObject getCashbackCleanInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) {
return retailAppService.getCashbackCleanInfo(device);
public JSONObject getCashbackCleanInfo(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device,@RequestParam(value = "client_id",required = false) String client_id) {
if (client_id==null){
client_id=device.getString("client_id");
}
return retailAppService.getCashbackCleanInfo(device,client_id);
}
@RequestMapping(value = "/partner_signin_app_qrcode/{codeId}", method = RequestMethod.GET)
@ -264,4 +267,12 @@ public class RetailAppController {
}
/*优惠券End*/
/**
* 广
*/
@RequestMapping(value = "/ads", method = RequestMethod.GET)
public JSONObject getActivities(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device) {
return retailAppService.getAd(device);
}
}

@ -13,4 +13,6 @@ public interface CouponValidateService {
//使用后核销券
boolean useCoupon(String couponLogId);
JSONObject getPaymentManager();
}

@ -1,6 +1,7 @@
package au.com.royalpay.payment.manage.customers.core.impls;
import au.com.royalpay.payment.manage.customers.core.CouponValidateService;
import au.com.royalpay.payment.manage.mappers.customers.CustomerMembershipMapper;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import cn.yixblog.platform.http.HttpRequestGenerator;
import cn.yixblog.platform.http.HttpRequestResult;
@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.Resource;
import java.util.Date;
@ -34,6 +36,9 @@ public class CouponValidateServiceImpl implements CouponValidateService {
@Value("${customer.app.auth-code}")
private String CUSTOMER_AUTH_CODE;
@Resource
private CustomerMembershipMapper customerMembershipMapper;
@Override
public JSONObject getCoupon(JSONObject partner,int page,int limit) {
String timestamp = System.currentTimeMillis() + "";
@ -133,4 +138,11 @@ public class CouponValidateServiceImpl implements CouponValidateService {
}
return false;
}
@Override
public JSONObject getPaymentManager() {
JSONObject object = new JSONObject();
object.put("managers",customerMembershipMapper.listPaymentManagerByCus());
return object;
}
}

@ -0,0 +1,28 @@
package au.com.royalpay.payment.manage.customers.web;
import au.com.royalpay.payment.manage.apps.AppController;
import au.com.royalpay.payment.manage.customers.core.CouponValidateService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
/**
* Created by yuan on 2017/12/27.
*/
@RequestMapping(value = "/manager")
@AppController
public class PaymentManagerController {
@Resource
private CouponValidateService couponVerificationService;
@GetMapping(value = "/get_payment_manage")
public JSONObject getPaymentManager(){
JSONObject json = couponVerificationService.getPaymentManager();
return json;
}
}

@ -35,4 +35,6 @@ public interface CustomerMembershipMapper {
List<JSONObject> listEncourageBalanceHistory(@Param("fromDate") Date fromDate, @Param("toDate") Date toDate, @Param("memberId") String memberId);
BigDecimal sumEncourageBalance();
List<String> listPaymentManagerByCus();
}

@ -70,6 +70,7 @@ import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.Order;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.RandomStringUtils;
@ -413,7 +414,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (clientMapper.findClientByMoniker(registery.getClientMoniker()) != null) {
throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
}
try {
clientMapper.save(partner);
} catch (Exception e) {
throw new BadRequestException("error.partner.valid.dumplicate_client_moniker");
}
if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) {
JSONObject client_bd = new JSONObject();
@ -2784,8 +2789,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
String wxopenid = compliance.getString("wx_openid");
try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), "BD申请制作合同" + client_moniker, bd_user_name, "制作合同申请",
"BD申请制作" + short_name + "的合同");
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), "BD申请制作合同" + client_moniker,
bd_user_name, "制作合同申请", "BD申请制作" + short_name + "的合同");
paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) {
logger.error("Wechat Message Error,open_status=1" + e.getMessage());
@ -2802,8 +2807,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (wxopenid != null) {
try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "合同制作完成", "Compliance", "合规材料",
"上传完整合规材料,商户:" + short_name);
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "合同制作完成",
"Compliance", "合规材料", "上传完整合规材料,商户:" + short_name);
paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) {
logger.error("Wechat Message Error,open_status=3" + e.getMessage());
@ -2822,8 +2827,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
String wxopenid = compliance.getString("wx_openid");
try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "合规材料已提交", bd_user_name, "审核材料",
"BD已提交合规材料等待审核");
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "合规材料已提交",
bd_user_name, "审核材料", "BD已提交合规材料等待审核");
paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) {
logger.error("Wechat Message Error,open_status=1" + e.getMessage());
@ -2858,8 +2863,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
String wxopenid = compliance.getString("wx_openid");
try {
MpWechatApi paymentApi = mpWechatApiProvider.getNewPaymentApi();
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "申请绿色通道", bd_user_name, "绿色通道申请",
"BD已提交绿色通道申请,商户:" + short_name);
TemplateMessage msg = initSendCommissionTemplate(wxopenid, paymentApi.getTemplateId("commission"), client_moniker + "申请绿色通道",
bd_user_name, "绿色通道申请", "BD已提交绿色通道申请,商户:" + short_name);
paymentApi.sendTemplateMessage(msg);
} catch (WechatException e) {
logger.error("Wechat Message Error,open_status=10");

@ -0,0 +1,24 @@
package au.com.royalpay.payment.manage.task;
import au.com.royalpay.payment.manage.management.clearing.core.CleanService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* Created by yishuqian on 06/06/2017.
*/
@Component
@ConditionalOnProperty(value = "app.run-tasks",havingValue = "true")
public class CleanNoticeTaskManager {
@Resource
private CleanService cleanService;
@Scheduled(cron = "0 0 15 * * ?")
public void sendCleanNotice(){
cleanService.getTodaySettlementLogs();
}
}

@ -183,7 +183,7 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
BigDecimal realAmount = original ? fee : CurrencyAmountUtils.toAmount(fee, order.getString("currency"));
JSONObject refundConfig = checkRefundAuditFlag();
if (refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) {
if (partnerAccount!=null && refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) {
if (realAmount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) > 0) {
//订单需要审核
boolean casherRefund = reviewNewRefundOrder(orderId, realAmount, remark, partnerAccount, manager);

@ -49,4 +49,11 @@
<select id="sumEncourageBalance" resultType="java.math.BigDecimal">
SELECT sum(encourage_balance) FROM cus_membership WHERE is_valid=1
</select>
<select id="listPaymentManagerByCus" resultType="java.lang.String">
<![CDATA[
SELECT c.kanga_openid
from cus_membership c, sys_managers s where c.payment_openid = s.wx_openid AND s.role & 1 >0
]]>
</select>
</mapper>

@ -30,21 +30,21 @@
<div class="weui_panel detail-panel">
<div class="weui_panel_hd">
<h3 class="title" th:text="${merchant.display_name}">
<a href="$merchant.pay_url" class="pay-btn">买单</a>
<a th:href="${merchant.pay_url}" class="pay-btn">买单</a>
</h3>
</div>
<div class="weui_panel_bd">
<div class="address" th:if="${merchant.address!=null}" th:text="${merchant.address}"></div>
<div class="address" th:if="${merchant['address']!=null}" th:text="${merchant['address']}"></div>
<div class="worktime" th:if="${merchant.work_time!=null}" th:text="${merchant.work_time}"></div>
<div class="worktime" th:if="${merchant['work_time']!=null}" th:text="${merchant['work_time']}"></div>
<div class="tel" th:if="${merchant.tel!=null}">
<span th:text="${merchant.tel}"></span>
<a class="tel-link" href="tel:$merchant.tel">
<a class="tel-link" th:href="'tel:'+${merchant.tel}">
<svg enable-background="new 0 0 139 139" version="1.1" viewBox="0 0 139 139" width="139px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M67.317,81.952c-9.284-7.634-15.483-17.054-18.742-22.414l-2.431-4.583c0.85-0.912,7.332-7.853,10.141-11.619 c3.53-4.729-1.588-9-1.588-9S40.296,19.933,37.014,17.076c-3.282-2.861-7.06-1.272-7.06-1.272 c-6.898,4.457-14.049,8.332-14.478,26.968C15.46,60.22,28.705,78.216,43.028,92.148c14.346,15.734,34.043,31.504,53.086,31.486 c18.634-0.425,22.508-7.575,26.965-14.473c0,0,1.59-3.775-1.268-7.06c-2.86-3.284-17.265-17.688-17.265-17.688 s-4.268-5.119-8.998-1.586c-3.525,2.635-9.855,8.496-11.38,9.917C84.171,92.749,73.582,87.104,67.317,81.952z"/></svg>
</a>
</div>
</div>
<div class="weui_panel_ft" th:if="${merchant.desc!=null}">
<div class="weui_panel_ft" th:if="${merchant['desc']!=null}">
<span th:text="${merchant.desc}"></span>
</div>
</div>

@ -1,53 +0,0 @@
<table cellpadding="0" cellspacing="0" class="email-container" align="center" width="550" style="font-family: Lato, 'Lucida Sans', 'Lucida Grande', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 22px; color: #444444; text-align: left; border: 1px solid rgb(177, 213, 245); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; width: 550px;">
<tbody><tr>
<td>
<table cellpadding="0" cellspacing="0" class="padding" width="100%" style="padding-left: 40px; padding-right: 40px; padding-top: 30px; padding-bottom: 35px;">
<tbody>
<tr class="logo">
<td align="center">
<table class="logo" style="margin-bottom: 10px;">
<tbody><tr>
<td>
<img src="https://mpay.royalpay.com.au/static/images/logo640x640.jpg" height="100" width="100" border="0" style="display: block;">
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr class="header">
<td align="center">
<h1 style="font-size: 24px; line-height: 1.3em; margin-bottom: 5px;">Register Invitation</h1>
</td>
</tr>
<tr class="content">
<td>
<p style="font-size: 15px; font-weight: normal; line-height: 22px;">Dear Partner, </p>
<p style="font-size: 15px; font-weight: normal; line-height: 22px;">Thank you for registering an account with us!</p>
<p style="font-size: 15px; font-weight: normal; line-height: 22px;">This is a system verification email from RoyalPay. RoyalPay is an exciting platform that makes international payments as easy as local ones.
To get started, click on the button below:</p>
</td>
</tr>
<tr>
<td align="center">
<table cellpadding="12" border="0" style="font-family: Lato, 'Lucida Sans', 'Lucida Grande', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; line-height: 25px; color: #444444; text-align: left;">
<tbody><tr>
<td class="button" style="color: rgb(255, 255, 255); font-size: 16px; line-height: 24px; text-align: center; display: block;">
<a href="$url" style="color: rgb(255, 255, 255); text-align: center; display: block; padding: 12px 20px; height: 100%; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; text-decoration: none; background-color: rgb(43, 136, 217); min-width: 150px;"><strong>Register your account right now!</strong></a>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody></table>

@ -34,11 +34,10 @@
<tr>
<td align="center">
#foreach($item in $accounts)
<table cellpadding="12" border="0" style="font-family: Lato, 'Lucida Sans', 'Lucida Grande', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; line-height: 25px; color: #444444; text-align: left;" th:each="item : ${accounts}">
<tbody><tr>
<td class="button" style="color: rgb(255, 255, 255); font-size: 16px; line-height: 24px; text-align: center; display: block;">
<a href="$url" style="color: rgb(255, 255, 255); text-align: center; display: block; padding: 12px 20px; height: 100%; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; text-decoration: none; background-color: rgb(43, 136, 217); min-width: 150px;"><span th:text="${item.username}"></span><strong>, Reset Password</strong></a>
<a th:href="${url}" style="color: rgb(255, 255, 255); text-align: center; display: block; padding: 12px 20px; height: 100%; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; text-decoration: none; background-color: rgb(43, 136, 217); min-width: 150px;"><span th:text="${item.username}"></span><strong>, Reset Password</strong></a>
</td>
</tr>
</tbody></table>

@ -123,7 +123,7 @@
th:if="${report.transaction_report.melbourne.thisweek.compare.direction<0}"
th:text="'↓'+${report.transaction_report.melbourne.thisweek.compare.value}"></span>
<span th:if="${report.transaction_report.melbourne.thisweek.compare.direction==0}"
th:text="${report.transaction_report.melbourne.thisweek.compare.value}">$report.transaction_report.melbourne.thisweek.compare.value</span>
th:text="${report.transaction_report.melbourne.thisweek.compare.value}"></span>
</div>
</div>
</div>
@ -172,7 +172,7 @@
th:if="${report.transaction_report.sydney.thisweek.compare.direction<0}"
th:text="'↓'+${$report.transaction_report.sydney.thisweek.compare.value}"></span>
<span th:if="${report.transaction_report.sydney.thisweek.compare.direction==0}"
th:text="${$report.transaction_report.sydney.thisweek.compare.value}">$report.transaction_report.sydney.thisweek.compare.value</span>
th:text="${$report.transaction_report.sydney.thisweek.compare.value}"></span>
</div>
</div>
</div>
@ -226,89 +226,49 @@
</div>
</div>
##
<div class="weui-panel">
##
<div class="weui-panel__hd">新增商户情况(Melbourne)</div>
##
<div class="weui-panel__bd">
##
<div class="weui-media-box weui-media-box_small-appmsg">
##
<div class="weui-cells">
##
<div class="weui-cell"
th:each="dt : ${report.new_client_report.melbourne.daily.data}">
##
<div class="weui-cell__bd weui-cell_primary"
th:text="${dt.datelist}"></div>
##
<div class="weui-cell__ft" th:text="${dt.num}"></div>
##
</div>
##
</div>
##
</div>
##
</div>
##
<div class="weui-panel__ft">
##
<div class="weui-cell">
##
<div class="weui-cell__bd weui-cell_primary">新增总数</div>
##
<div class="weui-cell__ft"
th:text="${report.new_client_report.melbourne.daily.total}"></div>
##
</div>
##
</div>
##
</div>
##
##
<div class="weui-panel">
##
<div class="weui-panel__hd">新增商户情况(Sydney)</div>
##
<div class="weui-panel__bd">
##
<div class="weui-media-box weui-media-box_small-appmsg">
##
<div class="weui-cells">
##
<div class="weui-cell"
th:each="dt : ${report.new_client_report.sydney.daily.data}">
##
<div class="weui-cell__bd weui-cell_primary"
th:text="${dt.datelist}"></div>
##
<div class="weui-cell__ft" th:text="${dt.num}"></div>
##
</div>
## #end
##
</div>
##
</div>
##
</div>
##
<div class="weui-panel__ft">
##
<div class="weui-cell">
##
<div class="weui-cell__bd weui-cell_primary">新增总数</div>
##
<div class="weui-cell__ft"
th:text="${report.new_client_report.sydney.daily.total}"></div>
##
</div>
##
</div>
##
</div>
<div class="weui-panel">

@ -20,20 +20,24 @@
<label class="col-md-2 control-label" for="kw-input">HTML Keywords</label>
<div class="col-md-10">
<input ng-model="article.page_keywords" type="text" name="title" id="kw-input" class="form-control">
<p ng-if="catId=='app_ad'"class="small text-warning">(0不允许跳转 1允许跳转)</p>
</div>
</div>
<div class="form-group">
<label ng-if="catId!='app_activity'" class="col-md-2 control-label" for="desc-input">HTML Description</label>
<label ng-if="catId!='app_activity' and catId!='app_ad" class="col-md-2 control-label" for="desc-input">HTML Description</label>
<label ng-if="catId=='app_activity'" class="col-md-2 control-label" for="desc-input">HomePage AD</label>
<label ng-if="catId=='app_ad'" class="col-md-2 control-label" for="desc-input">App Launch AD</label>
<div class="col-md-10">
<textarea ng-model="article.page_desc" name="desc" id="desc-input" class="form-control"></textarea>
<p ng-if="catId=='app_activity'"class="small text-warning">(需要展示在首页时填写反之请输0)</p>
<p ng-if="catId=='app_ad'"class="small text-warning">(图片尽量要小控制在500k以内否则会影响APP页面加载速度)</p>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label" for="summery-input">Summary</label>
<div class="col-md-10">
<textarea id="summery-input" ng-model="article.summery" name="summery" class="form-control"></textarea>
<p ng-if="catId=='app_ad'"class="small text-warning">(若有外链则填否则留空。在Content为空的时若有外链则点击图片进行跳转)</p>
</div>
</div>

@ -23,6 +23,9 @@
<div class="btn-group">
<a class="btn btn-default" ui-sref=".category({catId:'app_activity'})">App活动页</a>
</div>
<div class="btn-group">
<a class="btn btn-default" ui-sref=".category({catId:'app_ad'})">App广告页</a>
</div>
</div>
</div>
</section>

@ -16,6 +16,7 @@
<tr>
<th>Username</th>
<th>Display Name</th>
<th>OpenId</th>
<th>Role</th>
<th>Create Time</th>
<th>Operation</th>
@ -25,6 +26,10 @@
<tr ng-repeat="account in accounts">
<td ng-bind="account.username"></td>
<td ng-bind="account.display_name"></td>
<td>
<img ng-src="{{account.wechat_headimg}}" style="height: 30px;width:30px;" class="img-circle" ng-if="account.wechat_headimg">
{{account.wechat_openid}}
</td>
<td>
<select ng-change="updateAccountRole(account)" ng-model="account.role" ng-options="role.code as role.label for role in partnerRoles" title="Account Role"></select>
</td>

Loading…
Cancel
Save