From b11477657850db16d375f4789439a61e4cfa1a4a Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期二, 25 三月 2025 17:08:12 +0800 Subject: [PATCH] Merge branch 'master' into dev-1.3 --- packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue | 143 +++++++++++++++++++++++++++++++++++------------ 1 files changed, 107 insertions(+), 36 deletions(-) diff --git a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue index 333f782..433e3ab 100644 --- a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue +++ b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue @@ -6,21 +6,33 @@ label-position="top" class="order-bill-recharge phone" > - <NutFormItem class="bole-form-item"> - <!-- <AccountAddCard /> --> - <NutRadioGroup v-model="val1" direction="horizontal" class="par-account-list"> - <NutRadio label="1" shape="button">Option 1</NutRadio> - <NutRadio label="2" shape="button">Option 2</NutRadio> - <NutRadio label="3" shape="button">Option 3</NutRadio> - <NutRadio label="4" shape="button">Option 4</NutRadio> - <NutRadio label="5" shape="button">Option 5</NutRadio> - <NutRadio label="6" shape="button">Option 6</NutRadio> + <NutFormItem class="bole-form-item" prop="currentUserAccountId"> + <NutRadioGroup + v-model="form.currentUserAccountId" + direction="horizontal" + class="par-account-list" + v-if="userAccountAllList.length > 0" + @change="handleUserAccountChange" + > + <NutRadio + :label="item.id" + shape="button" + v-for="item in userAccountAllList" + :key="item.id" + >{{ item.content }}</NutRadio + > </NutRadioGroup> - <AccountCard title="鍏呭�兼墜鏈哄彿" content="18858418480" remark="鐨勫湴鏂归獎鍌茬殑寮�濮嬪拰"> + <AccountCard + v-if="userAccountAllList.length > 0" + title="鍏呭�兼墜鏈哄彿" + :content="form.phone" + :remark="form.remark" + > <template #action> - <div class="account-card-action">鏂板</div> + <div class="account-card-action" @click="handleAddUserAccount">鏂板</div> </template> </AccountCard> + <AccountAddCard v-else @click="handleAddUserAccount" /> </NutFormItem> <NutFormItem label="閫夋嫨鍏呭�奸噾棰�" class="bole-form-item" prop="parValue" required> @@ -43,11 +55,16 @@ {{ blLifeRecharge.getRechargeParValue(item, lifePayPhoneRate) }}鍏� </div> </div> - <div class="discountTag">{{ lifePayPhoneRate * 100 }}鎶�</div> + <div class="discountTag">{{ lifePayPhoneRate }}鎶�</div> </div> </NutRadio> </NutRadioGroup> </NutFormItem> + <SelectPayTypeFormItem + v-model="form.lifePayType" + :showWeixinPay="showWeixinPay" + :showAliPay="showAliPay" + ></SelectPayTypeFormItem> <div class="common-content"> <nut-button class="recharge-button" type="primary" @click="handleSubmit"> <div class="recharge-button-inner"> @@ -55,7 +72,7 @@ <div class="recharge-button-text">绔嬪嵆鍏呭��</div> </div> </nut-button> - <RechargeTipsView :tips="tips" /> + <RechargeTipsView :lifePayOrderType="LifeRechargeConstants.LifePayOrderTypeEnum.璇濊垂璁㈠崟" /> </div> <ConfirmDialog v-model:visible="confirmDialogVisible" @ok="goPay"> <template #info> @@ -65,6 +82,7 @@ <ConfirmDialogInfoItem label="瀹炰粯閲戦" :content="`锟�${realParValue}`" danger /> </template> </ConfirmDialog> + <NutToast :msg="state.msg" v-model:visible="state.show" type="warn" cover /> </NutForm> </template> @@ -76,10 +94,11 @@ Radio as NutRadio, Input as NutInput, Button as NutButton, + Toast as NutToast, } from '@nutui/nutui-taro'; import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; -import { reactive, ref, computed, provide } from 'vue'; -import { FormValidator } from '../../utils'; +import { reactive, ref, computed, toRef } from 'vue'; +import { FormValidator, initLifePayType } from '../../utils'; import { useLifeRechargeContext, BlLifeRecharge, @@ -89,34 +108,58 @@ import RechargeTipsView from '../../components/RechargeTipsView/RechargeTipsView.vue'; import ConfirmDialog from '../../components/Dialog/ConfirmDialog.vue'; import ConfirmDialogInfoItem from '../../components/Dialog/ConfirmDialogInfoItem.vue'; -import { useGetRate, useGetPhoneParValue } from '../../hooks'; -import { CustomerServiceTips } from '../../constants'; +import { useGetRate, useGetPhoneParValue, useSetUserAccountBySelect } from '../../hooks'; import AccountAddCard from '../../components/Card/AccountAddCard.vue'; import AccountCard from '../../components/Card/AccountCard.vue'; +import { usePhoneBillRechargeContext, PhoneUserAccountExtraProperties } from './context'; +import SelectPayTypeFormItem from '../../components/SelectPayTypeFormItem/SelectPayTypeFormItem.vue'; +import { useSelectPayType, useGetPayStatusByOrderNo } from '../../hooks/selectPayType'; +import { RechargeProps } from './types'; defineOptions({ name: 'PhoneBillRechargeStep2', }); -type Props = { - isDev?: boolean; -}; - -const props = withDefaults(defineProps<Props>(), { +const props = withDefaults(defineProps<RechargeProps>(), { isDev: false, }); + +const { goTo } = usePhoneBillRechargeContext(); const form = reactive({ ispCode: '', phone: '', parValue: 0, name: '', + currentUserAccountId: '', + remark: '', + lifePayType: initLifePayType(props.isInWeChat, props.isInAlipay), }); -const val1 = ref(''); +const { userAccountAllList, handleUserAccountChange } = useSetUserAccountBySelect({ + lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum.璇濊垂璁㈠崟, + onSetUserAccount(currentUserAccount) { + const currentUserAccountExtraProperties = JSON.parse( + currentUserAccount.extraProperties + ) as PhoneUserAccountExtraProperties; + form.currentUserAccountId = currentUserAccount.id; + form.phone = currentUserAccount.content; + form.ispCode = currentUserAccountExtraProperties.ispCode; + form.name = currentUserAccountExtraProperties.name; + + form.remark = currentUserAccount.remark; + + changeIspCode(form.ispCode as any); + }, +}); + +function handleAddUserAccount() { + goTo('step1'); +} const emit = defineEmits<{ (e: 'goPay', orderNo: string): void; + (e: 'paySuccess', orderNo: string): void; }>(); const { lifePayPhoneRate } = useGetRate(); @@ -130,7 +173,7 @@ function changeIspCode(val: LifeRechargeConstants.IspCode) { const phoneParValueItem = phoneParValueList.value.find((x) => x.ispCode === val); - if (phoneParValueItem.parValue.every((x) => Number(x) !== form.parValue)) { + if (phoneParValueItem && phoneParValueItem.parValue.every((x) => Number(x) !== form.parValue)) { form.parValue = 0; } } @@ -146,11 +189,18 @@ parValue: [ { required: true, message: '璇烽�夋嫨鍏呭�奸噾棰�', validator: FormValidator.validatorNumberNotNull }, ], + currentUserAccountId: [{ required: true, message: '璇烽�夋嫨鍏呭�兼墜鏈哄彿' }], + lifePayType: [{ required: true, message: '璇烽�夋嫨鏀粯鏂瑰紡' }], }); const formRef = ref<any>(null); function handleSubmit() { + if (!form.name) { + state.show = true; + state.msg = '璇峰厛瀹屽杽鎵嬫満鍙锋墍灞炴満涓诲鍚�'; + return; + } if (!formRef.value) return; formRef.value.validate().then(({ valid, errors }: any) => { if (valid) { @@ -159,34 +209,55 @@ }); } -const tips = [ - '骞冲彴鎻愪緵鎱㈠厖鏈嶅姟锛岃鍗曟彁浜ゅ悗锛岃瘽璐瑰皢浜�0 - 24灏忔椂鍐呭埌璐︺�傝嫢鏈兘鎸夋椂鍒拌处锛岀郴缁熷皢鑷姩鍙戣捣閫�娆俱��', - '鍏呭�兼湡闂达紝鑻ュ悓涓�鍙风爜娆鹃」鏈埌璐︼紝璇峰嬁鍦ㄥ叾浠栧钩鍙伴噸澶嶅厖鍊硷紱涓诲壇鍗′笉鍙悓鏃跺厖鍊笺�傚洜涓婅堪鎿嶄綔瀵艰嚧鐨勮祫閲戞崯澶憋紝鐢辩敤鎴疯嚜琛屾壙鎷呫��', - '鏈钩鍙拌瘽璐瑰厖鍊兼湇鍔′笉閫傜敤浜庡凡鍋滄満鍙风爜銆傜數淇″彿鐮佽嫢鏈夋瑺璐癸紝涔熸棤娉曞畬鎴愬厖鍊笺�傜數淇″凡瀹屾垚缁存姢鐨勫尯鍩熷寘鎷細骞夸笢銆佹睙鑻忋�佹箹鍖椼�佸洓宸濄�佹睙瑗裤�佹渤鍖椼�佹渤鍗椼�佺寤恒�佽窘瀹併�傚叾瀹冨尯鍩熸鍦ㄥ垎鎵规杩涜缁存姢涓紝鍦ㄦ鏈熼棿鍙兘浼氬嚭鐜板厖鍊间笉鎴愬姛骞惰嚜鍔ㄩ��娆剧殑鎯呭喌锛岃鎮ㄨ皡瑙c��', - '濡傛帴鍒伴檶鐢熸潵鐢碉紝瀵规柟浠ョ即璐规垨璇搷浣滅瓑鐞嗙敱瑕佹眰澶勭悊娆鹃」锛屽姟蹇呯珛鍗虫媺榛戯紝璋ㄩ槻璇堥獥銆�', - '鍏呭�煎彂绁ㄧ敱杩愯惀鍟嗘彁渚涳紝鎮ㄥ彲鐧诲綍缃戜笂钀ヤ笟鍘呬笅杞界數瀛愬彂绁ㄣ��', - CustomerServiceTips, -]; - const confirmDialogVisible = ref(false); function recharge() { confirmDialogVisible.value = true; } +const { state, invokeAliPay, invokeWeixinPay } = useSelectPayType({ + getOpenId: toRef(props, 'getOpenId'), + isInWeChat: toRef(props, 'isInWeChat'), + isH5: toRef(props, 'isH5'), + appId: toRef(props, 'appId'), +}); + +const currentOrderNo = ref(''); + async function goPay() { try { let params: LifePhoneDataCreateLifePayOrderInput = { userId: blLifeRecharge.accountModel.userId, + channelId: blLifeRecharge.accountModel.channlesNum, productData: { ispCode: form.ispCode, - parValue: props.isDev ? 0.1 : form.parValue, + parValue: form.parValue, phone: form.phone, - name: form.ispCode === BlLifeRecharge.constants.IspCode.dianxin ? form.name : '', + name: form.name, }, }; let res = await blLifeRecharge.services.createLifePayPhoneOrder(params); - emit('goPay', res.orderNo); + // emit('goPay', res.orderNo); + if (form.lifePayType === LifeRechargeConstants.LifePayTypeEnum.WxPay) { + await invokeWeixinPay(res.orderNo); + } else { + await invokeAliPay(res.orderNo); + } + currentOrderNo.value = res.orderNo; } catch (error) {} } + +useGetPayStatusByOrderNo({ + orderNo: currentOrderNo, + enabled: computed( + () => + form.lifePayType === LifeRechargeConstants.LifePayTypeEnum.WxPay && + props.isFocus && + !!currentOrderNo.value + ), + onPaySuccess: (orderNo) => { + emit('paySuccess', orderNo); + currentOrderNo.value = ''; + }, +}); </script> -- Gitblit v1.9.1