fix:新增通道调整

This commit is contained in:
2025-08-07 13:32:09 +08:00
parent 9af49fcf9d
commit 898f87d910
13 changed files with 281 additions and 17 deletions

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "يرجى تأكيد ما إذا كنت ترغب في متابعة تقديم طلب السحب هذا",
"importantNoteBtn": "إلغاء الطلب",
"importantNoteBtn2": "أنا أدرك وأرغب في المتابعة",
"dearCustomer": "عزيزي العميل"
"dearCustomer": "عزيزي العميل",
"optionPayment":"طريقة الدفع",
},
"partner": {
"pageTitle": "الشركاء",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "Please confirm if you wish to proceed with this withdrawal request. ",
"importantNoteBtn": "Cancel Request",
"importantNoteBtn2": "I Acknowledge and Proceed",
"dearCustomer": "Dear Client,"
"dearCustomer": "Dear Client,",
"optionPayment":"Payment method",
},
"partner": {
"pageTitle": "Partners",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "Confirme si desea continuar con esta solicitud de retiro",
"importantNoteBtn": "Cancelar solicitud",
"importantNoteBtn2": "Entiendo y deseo continuar",
"dearCustomer": "Estimado cliente"
"dearCustomer": "Estimado cliente",
"optionPayment":"Método de pago",
},
"partner": {
"pageTitle": "Socios",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "कृपया पुष्टि करें कि क्या आप इस निकासी अनुरोध को आगे बढ़ाना चाहते हैं।",
"importantNoteBtn": "अनुरोध रद्द करेंं",
"importantNoteBtn2": "मैं स्वीकार करता हूँ और जारी रखता हूँ",
"dearCustomer": "प्रप्रिय ग्राहक,"
"dearCustomer": "प्रप्रिय ग्राहक,",
"optionPayment":"भुगतान विधि",
},
"partner": {
"pageTitle": "साथी",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "Harap konfirmasi jika Anda ingin melanjutkan permintaan penarikan ini.",
"importantNoteBtn": "Batalkan Permintaan",
"importantNoteBtn2": "Saya Mengerti dan Lanjutkan",
"dearCustomer": "Dear Client,"
"dearCustomer": "Dear Client,",
"optionPayment":"Metode pembayaran",
},
"partner": {
"pageTitle": "Rekanan",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "출금 요청을 계속 진행하시겠습니까?",
"importantNoteBtn": "요청 취소",
"importantNoteBtn2": "확인하고 진행합니다",
"dearCustomer": "고객님께,"
"dearCustomer": "고객님께,",
"optionPayment":"결제 방법",
},
"partner": {
"pageTitle": "파트너",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "โปรดยืนยันหากท่านต้องการดำเนินการคำขอนี้ต่อไป",
"importantNoteBtn": "ยกเลิกคำขอ",
"importantNoteBtn2": "ยืนยันและดำเนินการต่อ",
"dearCustomer": "เรียน คุณลูกค้าที่เคารพ,"
"dearCustomer": "เรียน คุณลูกค้าที่เคารพ,",
"optionPayment":"วิธีการชำระเงิน",
},
"partner": {
"pageTitle": "พันธมิตร",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "Vui lòng xác nhận nếu bạn muốn tiếp tục yêu cầu rút tiền này.",
"importantNoteBtn": "Hủy yêu cầu",
"importantNoteBtn2": "Tôi xác nhận và tiến hành",
"dearCustomer": "Kính gửi Quý khách hàng"
"dearCustomer": "Kính gửi Quý khách hàng",
"optionPayment":"Phương thức thanh toán",
},
"partner": {
"pageTitle": "Đối tác",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2":"请确认是否继续提交本次出金申请",
"importantNoteBtn":"取消申请",
"importantNoteBtn2":"我已知晓并继续",
"dearCustomer":"尊敬的客户,"
"dearCustomer":"尊敬的客户,",
"optionPayment":"支付方式",
},
"partner": {
"pageTitle": "合作伙伴",

View File

@ -579,7 +579,8 @@ export default {
"importantNote2": "請確認是否繼續提交本次出金申請。",
"importantNoteBtn": "取消申請",
"importantNoteBtn2": "我已知曉並繼續",
"dearCustomer": "尊敬的客戶,"
"dearCustomer": "尊敬的客戶,",
"optionPayment":"支付方式",
},
"partner": {
"pageTitle": "合作夥伴",

View File

@ -54,8 +54,8 @@
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :lg="12" >
<el-form-item :label="t('capital.agencyMtLogin')" prop="pay_agency" v-if="channel && channel.pay_code.indexOf('LDAgency')>=0" >
<el-col :md="24" :lg="12" v-if="channel && channel.pay_code.indexOf('LDAgency')>=0">
<el-form-item :label="t('capital.agencyMtLogin')" prop="pay_agency" >
<el-select
v-model="form.pay_agency"
:placeholder="t('common.selectChoose')"
@ -71,6 +71,22 @@
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :lg="12" v-if="channel && channel.pay_code.indexOf('PayOK')>=0">
<el-form-item :label="t('capital.optionPayment')" prop="option_payment" >
<el-select
v-model="form.option_payment"
:placeholder="t('capital.optionPayment')"
:clearable="false"
style="width: 100%"
value-key="id"
>
<template #empty>
<div style="min-height: 40px;padding: 1px 15px;line-height: 40px;font-size: 14px;" >{{ t('capital.payNotCurrencyPleaseOther') }}</div>
</template>
<el-option v-for="(item, index) in payOkMethod" :key="index" :label="item.name" :value="item.code" ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="24" :lg="12" >
<el-form-item :label="t('capital.usdAmount')" prop="usd_amount" >
<el-input type="number" v-model="form.usd_amount" min="0" @input="handleAmount" @mousewheel.native.prevent style="width: 100%" />
@ -135,6 +151,10 @@
<div v-show="step == 6">
<remittance3 :data="remittanceInfo" @last-step="handleLastStep" @submit="handleSubmit" />
</div>
<!-- one2Pay -->
<div v-show="step == 7">
<one2Pay :data="remittanceInfo" @last-step="handleLastStep" @submit="handleSubmit" />
</div>
<!-- LDAgency -->
<div v-show="step == 4" style="padding: 0 150px;">
<remittance-ld-agency :data="remittanceInfo" @last-step="handleLastStep" @submit="handleSubmit" />
@ -165,6 +185,7 @@ import Remittance from './remittance'
import Remittance2 from './remittance2'
import Remittance3 from './remittance3'
import RemittanceLdAgency from './remittanceLDAgency'
import One2Pay from "@/views/capital/payChannel/one2Pay.vue";
const emit = defineEmits(['close-channel'])
const { proxy } = getCurrentInstance();
@ -177,6 +198,54 @@ const payAgencyList = ref([])
const currencyList = ref([])
const exchangeRate = ref(null)
let exchange_rate_sign = null
const payOkMethod = ref([])
const payOkMethodVND = ref([
{"code":"ATM/Visa Master Card","name":"ATM/Visa Master Card"},
{"name":"OFFLINEPAY","code":"OFFLINEPAY"},
{"name":"Garena","code":"Garena"},
{"name":"Gate","code":"Gate"},
{"name":"Mobifone","code":"Mobifone"},
{"name":"Vcoin","code":"Vcoin"},
{"name":"Vietnamobile","code":"Vietnamobile"},
{"name":"Viettel","code":"Viettel"},
{"name":"Vinaphone","code":"Vinaphone"},
{"name":"Zing","code":"Zing"},
{"name":"BankVA","code":"BankVA"},
{"name":"ACBVietQR","code":"ACBVietQR"},
{"name":"AGRIBankQR","code":"AGRIBankQR"},
{"name":"BIDVQR","code":"BIDVQR"},
{"name":"MBVietQR","code":"MBVietQR"},
{"name":"PVcombankQR","code":"PVcombankQR"},
{"name":"TechcomVietQR","code":"TechcomVietQR"},
{"name":"TPBankQR","code":"TPBankQR"},
{"name":"VIBBankQR","code":"VIBBankQR"},
{"name":"VietcomQR","code":"VietcomQR"},
{"name":"VietinBankQR","code":"VietinBankQR"},
{"name":"VPBankQR","code":"VPBankQR"},
{"name":"Momo","code":"Momo"},
{"name":"ViettelPay","code":"ViettelPay"},
{"name":"ZaloPay","code":"ZaloPay"},
])
const payOkMethodIDR = ref([
{"code":"Alfamart","name":"Alfamart"},
{"code":"Indomaret","name":"Indomaret"},
{"code":"CreditCard","name":"CreditCard"},
{"code":"ConvenienceStore","name":"ConvenienceStore"},
{"code":"QRIS","name":"QRIS"},
{"code":"BCAVA","name":"BCAVA"},
{"code":"BNIVA","name":"BNIVA"},
{"code":"BRIVA","name":"BRIVA"},
{"code":"CIMBVA","name":"CIMBVA"},
{"code":"MandiriVA","name":"MandiriVA"},
{"code":"PermataVA","name":"PermataVA"},
{"code":"DANAWALLET","name":"DANAWALLET"},
{"code":"LINKAJA-APP","name":"LINKAJA-APP"},
{"code":"LINKAJA-WEB","name":"LINKAJA-WEB"},
{"code":"OVOWALLET","name":"OVOWALLET"},
{"code":"SHOPEEPAY-APP","name":"SHOPEEPAY-APP"},
{"code":"SHOPEEPAY-WEB","name":"SHOPEEPAY-WEB"},
])
const subsidy = ref(null)
const subsidy_amount = computed(() => {
@ -230,7 +299,8 @@ const form = ref({
currency_type: null,
usd_amount: null,
mt4_server: null,
mt4_login: null
mt4_login: null,
option_payment:null
})
const rules = ref({
@ -242,6 +312,7 @@ const rules = ref({
],
currency_type: [{ required: true, message: "", trigger: "blur" }],
pay_agency: [{ required: true, message: "", trigger: "blur" }],
option_payment: [{ required: true, message: "", trigger: "blur" }],
})
let ioGoldConf = {}
@ -354,6 +425,17 @@ function currencyTypeChange() {
getSubsidy(form.value.pay_agency?form.value.pay_agency.id:null)
})
}
if (payChannel && payChannel.pay_code.indexOf('PayOK')>=0) {
if(form.value.currency_type == 'VND'){
payOkMethod.value = payOkMethodVND.value
}else if (form.value.currency_type == 'IDR'){
payOkMethod.value = payOkMethodIDR.value
}else {
payOkMethod.value = []
}
}
if (isEmpty(form.value.currency_type)) {
exchangeRate.value = null
} else {
@ -517,7 +599,7 @@ function doGoldIn() {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
payLoading.value = true
const { act_id, pay_channel, mt4_server, mt4_login, usd_amount, currency_type, pay_agency } = form.value
const { act_id, pay_channel, mt4_server, mt4_login, usd_amount, currency_type, pay_agency, option_payment } = form.value
goldInSave({
act_id, pay_channel, mt4_server, mt4_login, usd_amount, currency_type,
pay_agency: pay_agency ? pay_agency.id : null,
@ -526,7 +608,8 @@ function doGoldIn() {
currency_amount: currencyAmount.value,
usd_service_charge: 0,
language: serverLang(),
exchange_rate_sign: exchange_rate_sign
exchange_rate_sign: exchange_rate_sign,
option_payment: option_payment
}).then(resp => {
toOpenPay(resp)
}).catch(() => {
@ -608,6 +691,17 @@ function toOpenPay(json) {
}).catch(() => {
payLoading.value = false
})
} else if (pay_channel=='One2Pay') {
if (patams.status==0 || patams.status=='0'){
patams.currency_amount = currencyAmount.value
remittanceInfo.value = patams
step.value = 7
}else {
window.showTip({
title: patams.msg,
status: 'error'
})
}
} else if (pay_channel.indexOf('LDAgency')>=0) {
remittanceSign({
qcc_language: serverLang(),
@ -623,7 +717,49 @@ function toOpenPay(json) {
}).catch(() => {
payLoading.value = false
})
}else if (pay_channel == 'ForcePay' || pay_channel == 'AbaPay'){
window.open(patams)
}else if (pay_channel == 'PayOK' || pay_channel == 'DidaPay' || pay_channel == 'PaySpec' || pay_channel == 'RediPay' || pay_channel == 'CCPay' || pay_channel == 'TokenPay'){
if(patams.status==0 || patams.status=='0'){
let payUrl = patams.payUrl
window.open(payUrl)
}else{
window.showTip({
title: patams.msg,
status: 'error'
})
}
}else if (pay_channel == 'EBitPay'){
let payUrl = patams.payUrl
delete patams.payUrl
let paramStr = '';
for (let key in patams){
paramStr += "&"+key+"="+patams[key];
}
paramStr = paramStr.substr(1);
window.open( payUrl + "?" + paramStr);
}else if (pay_channel=='help2PayMYR' || pay_channel=='help2PayTHB' || pay_channel=='help2PayPHP' || pay_channel=='help2PayIDR' || pay_channel=='Help2Pay'){
let payUrl = patams.payUrl;
delete patams.payUrl;
postOpenWindow2(payUrl , patams);
}
}
function postOpenWindow2(url , postData) {
var tempform = document.createElement("form");
tempform.action = url;
tempform.target = "_blank";
tempform.method = "post";
tempform.style.display = "none";
for (var x in postData) {
var opt = document.createElement("textarea");
opt.name = x;
opt.value = postData[x];
tempform.appendChild(opt);
}
document.body.appendChild(tempform);
tempform.submit();
}
function handleLastStep() {

View File

@ -30,7 +30,8 @@
<svg-icon icon-class="LDAgencyIcon2" class="channel-icon" v-if="item.active && (index%2)==0" />
<svg-icon icon-class="LDAgencyIcon1" class="channel-icon" v-if="!item.active" />
</template>
<template v-if="item.pay_code=='htfxcashier'">
<template v-if="item.pay_code=='htfxcashier' || item.pay_code=='ForcePay' || item.pay_code=='AbaPay' || item.pay_code=='PayOK'
|| item.pay_code=='DidaPay' || item.pay_code=='PaySpec' || item.pay_code=='RediPay' || item.pay_code=='CCPay' || item.pay_code=='EBitPay' || item.pay_code=='Help2Pay'">
<svg-icon icon-class="htfxcashierIcon3" class="channel-icon" v-if="item.active && (index%2)!=0" />
<svg-icon icon-class="htfxcashierIcon2" class="channel-icon" v-if="item.active && (index%2)==0" />
<svg-icon icon-class="htfxcashierIcon1" class="channel-icon" v-if="!item.active" />
@ -43,7 +44,7 @@
<el-text style="font-size: 0.8vw;font-weight: 500;color: rgba(14, 48, 102, 1);">{{ t('capital.subsidyTips') }}</el-text>
</div> -->
</template>
<template v-if="item.pay_code=='htfxcashier3'">
<template v-if="item.pay_code=='htfxcashier3' || item.pay_code=='One2Pay'">
<!-- <svg-icon icon-class="htfxcashier3Icon3" class="channel-icon" v-if="item.active && (index%2)!=0" style="left: -12px;bottom: -12px;" />
<svg-icon icon-class="htfxcashier3Icon2" class="channel-icon" v-if="item.active && (index%2)==0" style="left: -12px;bottom: -12px;" />
<svg-icon icon-class="htfxcashier3Icon1" class="channel-icon" v-if="!item.active" style="left: -12px;bottom: -12px;" /> -->

View File

@ -0,0 +1,117 @@
<template>
<el-row>
<el-col :span="24">
<div style="text-align: center">
<div>{{ t('capital.currencyAmount') }}</div>
<div class="info-text">{{ props.data?.currency_amount }}</div>
</div>
<div style="text-align: center;">
<div class="template-content">
<div class="qr-bg">
<div class="img-wrap" v-if="props && props.data">
<el-image style="width: 180px; height: 180px" :src="'data:image/png;base64,' + props.data.code_image" fit="contain" />
</div>
</div>
</div>
<div style="display: flex;align-items: center;justify-content: space-evenly;max-width: 310px;margin: 0 auto;">
<!-- <svg-icon icon-class="wxpay" class="payIcon" /> -->
<!-- <svg-icon icon-class="alipay" class="payIcon" />-->
<!-- <svg-icon icon-class="unionpay" class="payIcon" /> -->
<!-- <svg-icon icon-class="huabei" class="payIcon" /> -->
</div>
</div>
</el-col>
</el-row>
</template>
<script setup>
import useClipboard from "vue-clipboard3"
import { useLocale } from 'element-plus'
import { getImgPath } from '@/api/common'
import { isEmpty } from '@/utils/htfx'
import { onMounted, watch } from 'vue';
import RemittanceUpload from '@/components/RemittanceUpload'
const { proxy } = getCurrentInstance();
const { t } = useLocale()
const { toClipboard } = useClipboard()
const emit = defineEmits(['last-step', 'submit'])
const props = defineProps({
data: Object
})
const baseUrl = ref(null)
onMounted(()=> {
getImgPath().then(resp => {
baseUrl.value = resp.data
})
})
</script>
<style lang="scss" scoped>
:deep(.el-form-item__label) {
font-size: 16px !important;
font-weight: 400 !important;
color: rgba(51, 51, 51, 1);
}
.info-text {
font-size: 20px;
font-weight: 700;
color: rgba(51, 51, 51, 1);
}
.countdown-text {
font-weight: 700;
font-size: 36px;
color: rgba(41, 187, 228, 1);
margin: 0 10px;
}
.sub-btn {
width: 40%;
}
.currency-amount {
font-size: 36px;
font-weight: 700;
letter-spacing: 0px;
line-height: 55.02px;
color: rgba(41, 187, 228, 1);
}
.template-content {
padding: 50px 80px;
.qr-bg {
margin: auto;
width: 192px;
height: 192px;
padding: 6px;
.img-wrap {
width: 100%;
height: 100%;
background-color: #fff;
}
}
}
.template-content > div {
font-size: 14px;
font-weight: 400;
letter-spacing: 0px;
line-height: 27px;
color: rgba(170, 170, 170, 1);
text-align: left;
}
.payIcon {
width: 43px;
height: 43px;
}
</style>