Commit c3630af1 authored by 郭志伟's avatar 郭志伟

Merge branch 'pay' into feat/vipLife

parents 8ce66d8b 44db59dc
...@@ -52,6 +52,11 @@ const getGoodsList = function(data) { ...@@ -52,6 +52,11 @@ const getGoodsList = function(data) {
}); });
}; };
// KA流程节点
const kaGetNextUrl = function() {
return request.get(`${talosHost}/api/kdsp/ka/process/get-next-url`);
};
export { export {
pay, pay,
prepay, prepay,
...@@ -62,5 +67,6 @@ export { ...@@ -62,5 +67,6 @@ export {
ocrFaceId, ocrFaceId,
queryPayInfo, queryPayInfo,
getGoodsList, getGoodsList,
kaGetNextUrl,
queryPayStatus queryPayStatus
}; };
...@@ -14,6 +14,6 @@ let protocol = window.location.protocol; ...@@ -14,6 +14,6 @@ let protocol = window.location.protocol;
let payHost = protocol + '//mapi-qa.liangkebang.net/pay'; let payHost = protocol + '//mapi-qa.liangkebang.net/pay';
let shenceHost = 'https://bn.xyqb.com/sa?project=default'; // 测试地址 let shenceHost = 'https://bn.xyqb.com/sa?project=default'; // 测试地址
let talosHost = 'http://yapi.quantgroups.com/mock/351'; // 电商分期测试环境服务地址 let talosHost = 'http://talos-vcc2.liangkebang.net'; // 电商分期测试环境服务地址
let operatorHost = 'https://operator.liangkebang.com'; let operatorHost = 'https://operator.liangkebang.com';
export default { talosHost, operatorHost, payHost, shenceHost, test: true }; export default { talosHost, operatorHost, payHost, shenceHost, test: true };
...@@ -38,11 +38,10 @@ export default { ...@@ -38,11 +38,10 @@ export default {
}, },
watch: { watch: {
userPhoneInfo: function(val) { userPhoneInfo: function(val) {
this.phoneNoHome = val?.phoneNoHome;
this.changeTelFormat(val?.phoneNo); this.changeTelFormat(val?.phoneNo);
this.phoneNoHome = val.phoneNoHome;
} }
}, },
created() {},
methods: { methods: {
changeTelFormat(phone) { changeTelFormat(phone) {
this.phoneNoHome = ''; this.phoneNoHome = '';
......
...@@ -45,6 +45,7 @@ const IS_CREDIT_PAY = method => ...@@ -45,6 +45,7 @@ const IS_CREDIT_PAY = method =>
const PAYMENT_CODE_PAY = 1; // 支付密码 const PAYMENT_CODE_PAY = 1; // 支付密码
const SMS_VERIFICATION_CODE_PAY = 2; //短信验证码 const SMS_VERIFICATION_CODE_PAY = 2; //短信验证码
const FACE_VERIFICATION_CODE_PAY = 4; //短信验证码
const PAY_SUCCESS = 3; // 支付成功 const PAY_SUCCESS = 3; // 支付成功
const PAY_PAYING = 2; //支付中 const PAY_PAYING = 2; //支付中
...@@ -83,6 +84,7 @@ function isDetentionFn() { ...@@ -83,6 +84,7 @@ function isDetentionFn() {
if (this.creditPayList.payList[key].isRecommend) { if (this.creditPayList.payList[key].isRecommend) {
const type = this.creditPayList.payList[key].payType; const type = this.creditPayList.payList[key].payType;
this.changePayType(type, this.creditPayList.payList[key].mergePayPretreatmentInfo); this.changePayType(type, this.creditPayList.payList[key].mergePayPretreatmentInfo);
this.isCheckAgreement = true;
this.pay(); this.pay();
return; return;
} }
...@@ -104,6 +106,7 @@ function isDetentionFn() { ...@@ -104,6 +106,7 @@ function isDetentionFn() {
onConfirm: () => { onConfirm: () => {
// 切换享花卡支付 // 切换享花卡支付
this.changePayType(CREDIT_PAY); this.changePayType(CREDIT_PAY);
this.isCheckAgreement = true;
this.pay(); this.pay();
} }
}); });
...@@ -145,5 +148,6 @@ export { ...@@ -145,5 +148,6 @@ export {
ACCOUNT_APPLY_SUCCESS, ACCOUNT_APPLY_SUCCESS,
ACCOUNT_APPLY_AUDITING, ACCOUNT_APPLY_AUDITING,
ACCOUNT_APPLY_AUDIT_FAIL, ACCOUNT_APPLY_AUDIT_FAIL,
SMS_VERIFICATION_CODE_PAY SMS_VERIFICATION_CODE_PAY,
FACE_VERIFICATION_CODE_PAY
}; };
...@@ -23,11 +23,12 @@ ...@@ -23,11 +23,12 @@
export default { export default {
name: 'Contract', name: 'Contract',
props: { props: {
contractList: Array contractList: Array,
value: Boolean
}, },
data() { data() {
return { return {
isCheck: false isCheck: this.value
}; };
}, },
methods: { methods: {
...@@ -35,7 +36,7 @@ export default { ...@@ -35,7 +36,7 @@ export default {
window.location.href = url; window.location.href = url;
}, },
change(e) { change(e) {
this.$emit('change', e); this.$emit('input', e);
} }
} }
}; };
......
...@@ -6,14 +6,21 @@ ...@@ -6,14 +6,21 @@
<cr-image :src="value.icon" class="icon" mode="aspectFit" width="39" height="39" /> <cr-image :src="value.icon" class="icon" mode="aspectFit" width="39" height="39" />
<div class="content-info-con"> <div class="content-info-con">
<div class="content-info-tit"> <div class="content-info-tit">
<p class="content-info-tit">{{ value.name }}</p> <div class="content-info-tit-wrap">
<p v-if="value.tagName" class="content-info-tit_tag">{{ value.tagName }}</p> <p class="content-info-tit">{{ value.name }}</p>
<p v-if="value.tagName" class="content-info-tit_tag">{{ value.tagName }}</p>
</div>
<p v-if="isGroupPay && value.mergePayPretreatmentInfo" class="content-info-amount">
{{
value.mergePayPretreatmentInfo && value.mergePayPretreatmentInfo.creditPayAmt
}}.00
</p>
</div> </div>
<p>{{ value.accountStatusDesc }}</p> <p>{{ value.accountStatusDesc }}</p>
</div> </div>
<p v-if="isGroupPay && value.mergePayPretreatmentInfo" class="content-info-amount"> <!-- <p v-if="isGroupPay && value.mergePayPretreatmentInfo" class="content-info-amount">
{{ value.mergePayPretreatmentInfo && value.mergePayPretreatmentInfo.creditPayAmt }} {{ value.mergePayPretreatmentInfo && value.mergePayPretreatmentInfo.creditPayAmt }}.00
</p> </p> -->
</div> </div>
<div <div
v-if="showCoupon && value.payType === 1" v-if="showCoupon && value.payType === 1"
...@@ -110,7 +117,6 @@ export default { ...@@ -110,7 +117,6 @@ export default {
} }
.type-item { .type-item {
width: 100%; width: 100%;
// height: 134rpx;
padding: 12px 8px 12px 12px; padding: 12px 8px 12px 12px;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
...@@ -123,7 +129,6 @@ export default { ...@@ -123,7 +129,6 @@ export default {
&-content-info { &-content-info {
width: 100%; width: 100%;
display: flex; display: flex;
// width: 308px;
align-items: center; align-items: center;
} }
&-checkbox { &-checkbox {
...@@ -141,6 +146,10 @@ export default { ...@@ -141,6 +146,10 @@ export default {
margin-bottom: 2px; margin-bottom: 2px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
&-wrap {
display: flex;
}
&_tag { &_tag {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
...@@ -161,6 +170,9 @@ export default { ...@@ -161,6 +170,9 @@ export default {
color: @font-color-light; color: @font-color-light;
} }
.content-info-amount { .content-info-amount {
width: 100px;
text-align: left;
word-break: break-all;
&::before { &::before {
content: '¥'; content: '¥';
} }
......
...@@ -8,16 +8,20 @@ ...@@ -8,16 +8,20 @@
:show-coupon="showCoupon" :show-coupon="showCoupon"
:risk-limit="riskLimit" :risk-limit="riskLimit"
/> />
<p class="dashed"> </div>
<cr-checkbox <div class="dashed">
v-model="thirdPayInfo.isCheck" <p class="dashed-line" />
shape="round" <cr-checkbox
checked-color="#EC1500" v-model="thirdPayInfo.isCheck"
:disabled="disabled || thirdPayInfo.disabled" shape="round"
class="dashed-checkbox" checked-color="#EC1500"
@click.native="changePayType(thirdPayInfo)" :disabled="disabled || thirdPayInfo.disabled"
/> class="dashed-checkbox"
</p> @click.native="changePayType(thirdPayInfo)"
/>
</div>
<!-- <PayCardItem :is-group-pay="true" :value="thirdPayInfo" /> -->
<div class="groupCard">
<PayCardItem :is-group-pay="true" :value="thirdPayInfo" /> <PayCardItem :is-group-pay="true" :value="thirdPayInfo" />
</div> </div>
<p class="group-more b-t" @click="openMore">更多支付组合<cr-icon type="arrow" size="15px" /></p> <p class="group-more b-t" @click="openMore">更多支付组合<cr-icon type="arrow" size="15px" /></p>
...@@ -97,7 +101,7 @@ export default { ...@@ -97,7 +101,7 @@ export default {
</script> </script>
<style lang="less"> <style lang="less">
.groupCard { .groupCard {
width: 320px; width: 100%;
} }
.group-more { .group-more {
.text-13; .text-13;
...@@ -114,28 +118,21 @@ export default { ...@@ -114,28 +118,21 @@ export default {
z-index: 2; z-index: 2;
} }
.dashed { .dashed {
width: 309px; width: 100%;
margin: auto; padding: 0 12px;
position: relative; box-sizing: border-box;
border-bottom: 1px dashed #dcdcdc; display: flex;
justify-content: space-between;
align-items: center;
&-line {
width: 310px;
border-bottom: 1px dashed #dcdcdc;
}
&-checkbox { &-checkbox {
width: 18px; width: 18px;
position: absolute;
right: -22px;
top: -8px;
}
&::after {
content: '';
width: 24px;
height: 28px;
position: absolute;
margin-top: -12px;
left: 50%;
margin-left: -12px;
background: url('../../../assets/images/addicon.png') no-repeat;
background-size: 100%;
} }
} }
.more-title { .more-title {
.text-16; .text-16;
display: flex; display: flex;
......
<template> <template>
<cr-overlay :show="value" @click="closeModal"> <cr-overlay :show="value">
<div class="sms-modal"> <div class="sms-modal">
<div class="sms"> <div class="sms">
<p class="sms-icon"><cr-icon type="cross" color="#999999" @click="closeModal" /></p> <p class="sms-icon"><cr-icon type="cross" color="#999999" @click="closeModal" /></p>
<p class="sms-title">请输入短信验证码</p> <p class="sms-title">请输入短信验证码</p>
<p class="sms-des">为保证您账户安全,此笔交易需要短信验证</p> <p class="sms-des">为保证您账户安全,此笔交易需要短信验证</p>
<p class="phone">已发送至 {{ getPhone() }}17611682272</p> <p class="phone">已发送至 {{ getPhone() }}</p>
<cr-authcode-field <cr-authcode-field
span-size="20px" span-size="20px"
type="number" type="number"
...@@ -87,7 +87,7 @@ export default { ...@@ -87,7 +87,7 @@ export default {
}, },
getPhone() { getPhone() {
const phone = localStorage.get('phoneNo'); const phone = localStorage.get('phoneNo');
const phoneS = phone.replace(/(\d{3})\d*(\d{4})/, '+86 $1 **** $2'); const phoneS = `${phone}`.replace(/(\d{3})\d*(\d{4})/, '+86 $1 **** $2');
return phoneS; return phoneS;
}, },
sendSa() { sendSa() {
......
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
<cr-contract <cr-contract
v-if="isShowProtocol" v-if="isShowProtocol"
ref="agreement" ref="agreement"
v-model="isCheckAgreement"
:contract-list="payContractInfo.contractInfos" :contract-list="payContractInfo.contractInfos"
@change="$event => (isCheckAgreement = $event)"
/> />
<cr-button <cr-button
type="primary" type="primary"
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
no-render-disable-tab no-render-disable-tab
:show-coupon="couponPopup" :show-coupon="couponPopup"
:enable-list="payCouponList" :enable-list="payCouponList"
:value="selectedCoupon.pickupId" :value="selectedCoupon.id"
@click="selectCouponItem" @click="selectCouponItem"
@change="handleSelectCoupon" @change="handleSelectCoupon"
/> />
...@@ -119,9 +119,18 @@ import { ...@@ -119,9 +119,18 @@ import {
creditPayStatusType, creditPayStatusType,
ACCOUNT_APPLY_SUCCESS, ACCOUNT_APPLY_SUCCESS,
ACCOUNT_APPLY_AUDIT_FAIL, ACCOUNT_APPLY_AUDIT_FAIL,
SMS_VERIFICATION_CODE_PAY //短信验证码 SMS_VERIFICATION_CODE_PAY, //短信验证码
FACE_VERIFICATION_CODE_PAY
} from './STATIC_DATA'; } from './STATIC_DATA';
import { pay, prepay, getCoupon, h5AppyUrl, ocrFaceId, queryPayInfo } from '@/api/pay.api.js'; import {
pay,
prepay,
getCoupon,
h5AppyUrl,
ocrFaceId,
queryPayInfo,
kaGetNextUrl
} from '@/api/pay.api.js';
const VCC_CHANNEL = localStorage.get('vccChannel'); const VCC_CHANNEL = localStorage.get('vccChannel');
export default { export default {
components: { components: {
...@@ -401,7 +410,8 @@ export default { ...@@ -401,7 +410,8 @@ export default {
}, },
orderNo: this.orderNo, orderNo: this.orderNo,
payMethod: this.payType, payMethod: this.payType,
payCouponId: this.selectedCoupon.pickupId || '' payCouponId: this.selectedCoupon.id || '',
mergePayPretreatmentId: this.mergePayPretreatmentInfo?.mergePayPretreatmentId
}; };
const [data, error] = params ? await pay(paramsData) : await prepay(paramsData); const [data, error] = params ? await pay(paramsData) : await prepay(paramsData);
/* 支付失败 */ /* 支付失败 */
...@@ -427,11 +437,12 @@ export default { ...@@ -427,11 +437,12 @@ export default {
payByWay('ALIWEB', aliPayInfo); payByWay('ALIWEB', aliPayInfo);
return; return;
} }
if (creditPayStatus === PAY_PAYING) { // if (creditPayStatus === PAY_PAYING) {
/* 支付中 */ // /* 支付中? */
this.payResult('Waiting'); // this.payResult('Waiting');
return; // return;
} // }
console.log(creditPayStatus);
if (creditPayStatus === PAY_SUCCESS) { if (creditPayStatus === PAY_SUCCESS) {
/* 支付成功 */ /* 支付成功 */
this.payResult('Success'); this.payResult('Success');
...@@ -441,6 +452,11 @@ export default { ...@@ -441,6 +452,11 @@ export default {
/* 密码或者短信鉴权 */ /* 密码或者短信鉴权 */
this.close(); this.close();
this[`${creditPayStatusType[creditPayStatus]}Modal`] = true; this[`${creditPayStatusType[creditPayStatus]}Modal`] = true;
return;
}
/* 人脸鉴权 */
if (creditPayStatus === FACE_VERIFICATION_CODE_PAY) {
this.goOcr();
} }
}, },
payResult(type, error) { payResult(type, error) {
...@@ -510,10 +526,19 @@ export default { ...@@ -510,10 +526,19 @@ export default {
}, },
/* 进入h5授信流程 */ /* 进入h5授信流程 */
async goApply() { async goApply() {
if (this.$route.query.ka) {
this.getKaGetNextUrl();
return;
}
const [{ url }] = await h5AppyUrl(); const [{ url }] = await h5AppyUrl();
if (url) return; if (url) return;
window.location.href = url; window.location.href = url;
}, },
async getKaGetNextUrl() {
const [{ nextUrl }] = await kaGetNextUrl();
if (!nextUrl) return;
window.location.href = nextUrl;
},
/* 走h5活体流程 */ /* 走h5活体流程 */
async goOcr() { async goOcr() {
const [{ url }] = await ocrFaceId({ const [{ url }] = await ocrFaceId({
...@@ -543,8 +568,10 @@ export default { ...@@ -543,8 +568,10 @@ export default {
}, },
goHome() { goHome() {
// 商城地址 // 商城地址
this.$router.push({ name: 'home' });
}, },
goOrderDetail() { goOrderDetail() {
this.$router.push({ name: 'orderList' });
// 订单详情地址 // 订单详情地址
} }
} }
......
...@@ -70,12 +70,14 @@ export default { ...@@ -70,12 +70,14 @@ export default {
methods: { methods: {
goHome() { goHome() {
// 去页面 // 去页面
this.$router.push({ name: 'home' });
}, },
goOrderDetail() { goOrderDetail() {
registeredEvents('PD_YXMMAEC_UserClickCashierCheckOrderBtn', { registeredEvents('PD_YXMMAEC_UserClickCashierCheckOrderBtn', {
order_id: this.orderNo order_id: this.orderNo
}); });
// 去订单详情页面 // 去订单详情页面
this.$router.push({ name: 'orderList' });
}, },
goPay() { goPay() {
registeredEvents('PD_YXMMAEC_UserClickCashierPaymentAgainBtn', { registeredEvents('PD_YXMMAEC_UserClickCashierPaymentAgainBtn', {
......
...@@ -115,7 +115,7 @@ export default { ...@@ -115,7 +115,7 @@ export default {
async getSkuList() { async getSkuList() {
this.skuList = []; this.skuList = [];
const { spuNo: spuNos, type } = this.spuInfo; const { spuNo: spuNos, type } = this.spuInfo;
const [res] = await rechargeApi.getSkuList({ spuNos, type }); const [res] = await rechargeApi.getSkuList(spuNos, type);
if (res) { if (res) {
this.skuList = res.rechargeList; this.skuList = res.rechargeList;
this.handleSkuSelected(res.rechargeList[0], 0); this.handleSkuSelected(res.rechargeList[0], 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment