diff --git a/src/hooks/daxpay/useKeyboard.ts b/src/hooks/daxpay/useKeyboard.ts new file mode 100644 index 0000000..f94f0a9 --- /dev/null +++ b/src/hooks/daxpay/useKeyboard.ts @@ -0,0 +1,60 @@ +import type { Ref } from 'vue' + +/** + * 键盘hooks + * @param amount + */ +export function useKeyboard(amount: Ref) { + /** + * 输入 + */ + function input(value: string) { + const amountStr = amount.value + if (amountStr === '0') { + if (value === '.') { + amount.value = '0.' + return + } + amount.value = String(value) + } + else { + // 只允许有一个小数点 + if (value === '.' && amountStr.includes('.')) { + return + } + // 小数最多两位 + if (amountStr.includes('.') && amountStr.length - amountStr.indexOf('.') > 2) { + return + } + // 金额最高100万 + if (amountStr.split('.')[0].length > 6) { + // 是否有小数, + if (amountStr.includes('.') && amountStr.split('.')[1].length > 1) { + return + } + if (!amountStr.includes('.') && value !== '.') { + return + } + } + + amount.value = amountStr.concat(value) + } + } + + /** + * 删除 + */ + function del() { + if (amount.value.length > 1) { + amount.value = amount.value.substring(0, amount.value.length - 1) + } + else { + amount.value = '0' + } + } + + return { + input, + del, + } +} diff --git a/src/views/daxpay/channel/alipay/cashier/AlipayCashier.vue b/src/views/daxpay/channel/alipay/cashier/AlipayCashier.vue index 080554d..37771e3 100644 --- a/src/views/daxpay/channel/alipay/cashier/AlipayCashier.vue +++ b/src/views/daxpay/channel/alipay/cashier/AlipayCashier.vue @@ -69,6 +69,7 @@ import { import { CashierTypeEnum } from '@/enums/daxpay/DaxPayEnum' import router from '@/router' +import { useKeyboard } from '@/hooks/daxpay/useKeyboard' const route = useRoute() const { mchNo, appId } = route.params @@ -80,6 +81,8 @@ const amount = ref('0') const description = ref('') const mchName = ref('') +const { input, del } = useKeyboard(amount) + onMounted(() => { initData() }) @@ -96,48 +99,6 @@ function initData() { }) } -/** - * 输入 - */ -function input(value: string) { - const amountStr = amount.value - if (amountStr === '0') { - if (value === '.') { - amount.value = '0.' - return - } - amount.value = String(value) - } - else { - // 只允许有一个小数点 - if (value === '.' && amountStr.includes('.')) { - return - } - // 小数最多两位 - if (amountStr.includes('.') && amountStr.length - amountStr.indexOf('.') > 2) { - return - } - // 金额最高100万 - if (amountStr.split('.')[0].length > 7 && value !== '.') { - return - } - - amount.value = amountStr.concat(value) - } -} - -/** - * 删除 - */ -function del() { - if (amount.value.length > 1) { - amount.value = amount.value.substring(0, amount.value.length - 1) - } - else { - amount.value = '0' - } -} - /** * 支付 */ diff --git a/src/views/daxpay/channel/wechat/cashier/WechatCashier.vue b/src/views/daxpay/channel/wechat/cashier/WechatCashier.vue index 0f963a4..a7c0edb 100644 --- a/src/views/daxpay/channel/wechat/cashier/WechatCashier.vue +++ b/src/views/daxpay/channel/wechat/cashier/WechatCashier.vue @@ -1,12 +1,56 @@ @@ -16,22 +60,25 @@ import { useRoute } from 'vue-router' import type { CashierAuthCodeParam, CashierPayParam, + ChannelCashierConfigResult, WxJsapiSignResult, } from '@/views/daxpay/channel/ChannelCashier.api' -import { - cashierPay, - generateAuthUrl, -} from '@/views/daxpay/channel/ChannelCashier.api' +import { cashierPay, generateAuthUrl, getCashierInfo, getMchName } from '@/views/daxpay/channel/ChannelCashier.api' import { CashierTypeEnum } from '@/enums/daxpay/DaxPayEnum' import router from '@/router' +import { useKeyboard } from '@/hooks/daxpay/useKeyboard' const route = useRoute() const { mchNo, appId } = route.params const { code } = route.query +const show = ref(false) const loading = ref(false) -const amount = ref(0.0) +const cashierInfo = ref({}) +const amount = ref('0') +const description = ref('') +const mchName = ref('') // 认证参数 const authParam = ref({ @@ -40,6 +87,8 @@ const authParam = ref({ cashierType: CashierTypeEnum.WECHAT_PAY, }) +const { input, del } = useKeyboard(amount) + onMounted(() => { init() }) @@ -57,21 +106,34 @@ function init() { }) } else { - // 发起收银台支付 - wechatPay() + // 初始化数据 + initData() } } +/** + * 初始化数据 + */ +function initData() { + getCashierInfo(CashierTypeEnum.ALIPAY, appId as string).then(({ data }) => { + cashierInfo.value = data + }) + getMchName(mchNo as string).then(({ data }) => { + mchName.value = data + }) +} + /** * 微信jsapi方式支付 */ -function wechatPay() { +function pay() { loading.value = true const from = { - amount: amount.value, + amount: Number(amount.value), appId, authCode: code, cashierType: CashierTypeEnum.WECHAT_PAY, + description: description.value, mchNo, } as CashierPayParam cashierPay(from) @@ -79,7 +141,7 @@ function wechatPay() { loading.value = false // 拉起jsapi支付 const json = JSON.parse(data.payBody) - doJsapiPay(json) + jsapiPay(json) }) .catch((err) => { // 跳转到错误页 @@ -93,7 +155,7 @@ function wechatPay() { /** * 拉起Jsapi支付窗口 */ -function doJsapiPay(data: WxJsapiSignResult) { +function jsapiPay(data: WxJsapiSignResult) { const form = { appId: data.appId, // 公众号ID,由商户传入 timeStamp: data.timeStamp, // 时间戳,自1970年以来的秒数 @@ -113,5 +175,30 @@ function doJsapiPay(data: WxJsapiSignResult) {