From a50b90b16851b0ad2d9be9a12f28349e3bea4871 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 24 二月 2025 13:41:22 +0800
Subject: [PATCH] fix: 对接
---
packages/components/src/views/electricBillRecharge/electricBillRecharge.vue | 80 +++++++++++++++++++++-----
packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue | 11 +++
apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue | 9 ++-
apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue | 15 +++-
packages/components/src/components/Input/ChooseInputWithPicker.vue | 52 ++++++-----------
5 files changed, 109 insertions(+), 58 deletions(-)
diff --git a/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue b/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
index be80e9b..b3b1ddc 100644
--- a/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
@@ -1,20 +1,23 @@
<template>
<ContentScrollView :paddingH="false">
- <electricBillRecharge @goPay="goPay" />
+ <electricBillRecharge @goPay="goPay" :isDev="isDev" />
</ContentScrollView>
</template>
<script setup lang="ts">
import { electricBillRecharge } from '@life-payment/components';
+import { BlLifeRecharge } from '@life-payment/core-vue';
import Taro from '@tarojs/taro';
defineOptions({
name: 'InnerPage',
});
-function goPay() {
+const isDev = process.env.NODE_ENV === 'development';
+
+function goPay(orderNo: string) {
Taro.navigateTo({
- url: RouterPath.selectPayType,
+ url: `${RouterPath.selectPayType}?orderNo=${orderNo}&lifePayOrderType=${BlLifeRecharge.constants.LifePayOrderTypeEnum.鐢佃垂璁㈠崟}`,
});
}
</script>
diff --git a/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue b/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
index aaede98..4b61e71 100644
--- a/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
@@ -10,7 +10,8 @@
</template>
<script setup lang="ts">
-import { SelectPayTypeView, LifeRechargeConstants } from '@life-payment/components';
+import { SelectPayTypeView } from '@life-payment/components';
+import { LifeRechargeConstants } from '@life-payment/core-vue';
import Taro from '@tarojs/taro';
defineOptions({
@@ -25,8 +26,14 @@
orderNo: string,
lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum
) {
- Taro.navigateTo({
- url: `${RouterPath.rechargeResult}?orderNo=${orderNo}&lifePayOrderType=${lifePayOrderType}`,
- });
+ if (lifePayOrderType === LifeRechargeConstants.LifePayOrderTypeEnum.璇濊垂璁㈠崟) {
+ Taro.navigateTo({
+ url: `${RouterPath.rechargeResult}?orderNo=${orderNo}&lifePayOrderType=${lifePayOrderType}`,
+ });
+ } else if (lifePayOrderType === LifeRechargeConstants.LifePayOrderTypeEnum.鐢佃垂璁㈠崟) {
+ Taro.navigateTo({
+ url: `${RouterPath.rechargeElectricResult}?orderNo=${orderNo}&lifePayOrderType=${lifePayOrderType}`,
+ });
+ }
}
</script>
diff --git a/packages/components/src/components/Input/ChooseInputWithPicker.vue b/packages/components/src/components/Input/ChooseInputWithPicker.vue
index bd57273..83fe7c2 100644
--- a/packages/components/src/components/Input/ChooseInputWithPicker.vue
+++ b/packages/components/src/components/Input/ChooseInputWithPicker.vue
@@ -1,13 +1,20 @@
<template>
- <ChooseInput :modelValue="inputValue" @click="handleOpen()"></ChooseInput>
+ <ChooseInput :modelValue="inputValue" @click="handleOpen()" v-bind="$attrs"></ChooseInput>
+ <Popup v-model:visible="popupVisible" position="bottom">
+ <Picker
+ :modelValue="[modelValue]"
+ :columns="options"
+ @cancel="popupVisible = false"
+ @confirm="handleConfirm"
+ ></Picker>
+ </Popup>
</template>
<script setup lang="ts">
import ChooseInput from './ChooseInput.vue';
import { Popup, Picker } from '@nutui/nutui-taro';
import { convertOptions, ValueEnum } from 'senin-mini/utils';
-import { Portal } from 'senin-mini/components';
-import { computed, h } from 'vue';
+import { computed, ref } from 'vue';
defineOptions({
name: 'ChooseInputWithPicker',
@@ -37,37 +44,14 @@
() => options.value?.find((x) => x.value === props.modelValue)?.text ?? ''
);
+const popupVisible = ref(false);
+
+function handleConfirm({ selectedValue, selectedOptions }) {
+ emit('update:modelValue', selectedOptions[0].value);
+ popupVisible.value = false;
+}
+
function handleOpen() {
- const _modelValue = [props.modelValue];
- Portal.add((key) => {
- return h(
- Portal.Container,
- { keyNumber: key, delayOpen: true },
- {
- default: ({ open, onClose }) =>
- h(
- Popup,
- {
- visible: open.value,
- 'onUpdate:visible': (value) => !value && onClose(),
- position: 'bottom',
- },
- {
- default: () =>
- h(Picker, {
- modelValue: _modelValue,
- columns: options.value,
- onCancel: onClose,
- onConfirm: ({ selectedValue, selectedOptions }) => {
- console.log('selectedValue: ', selectedValue, selectedOptions);
- emit('update:modelValue', selectedOptions[0].value);
- onClose();
- },
- }),
- }
- ),
- }
- );
- });
+ popupVisible.value = true;
}
</script>
diff --git a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
index 4306ee6..7c942bf 100644
--- a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
+++ b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
@@ -4,7 +4,7 @@
<img class="select-pay-type-view-item-icon" :src="IconAliPay" />
<div class="select-pay-type-view-item-text">鏀粯瀹濇敮浠�</div>
</div>
- <div class="select-pay-type-view-item">
+ <div class="select-pay-type-view-item" @click="handleWeixinPay">
<img class="select-pay-type-view-item-icon" :src="IconWeixin" />
<div class="select-pay-type-view-item-text">寰俊鏀粯</div>
</div>
@@ -51,6 +51,15 @@
} catch (error) {}
}
+async function handleWeixinPay() {
+ try {
+ let res = await setLifePayOrderPayType(blLifeRecharge.constants.LifePayTypeEnum.WxPay);
+ if (res) {
+ location.href = res;
+ }
+ } catch (error) {}
+}
+
async function setLifePayOrderPayType(lifePayType: LifeRechargeConstants.LifePayTypeEnum) {
try {
let params: SetLifePayOrderPayTypeInput = {
diff --git a/packages/components/src/views/electricBillRecharge/electricBillRecharge.vue b/packages/components/src/views/electricBillRecharge/electricBillRecharge.vue
index 752316a..7c08c14 100644
--- a/packages/components/src/views/electricBillRecharge/electricBillRecharge.vue
+++ b/packages/components/src/views/electricBillRecharge/electricBillRecharge.vue
@@ -10,16 +10,18 @@
<ChooseInputWithPicker
v-model="form.province"
placeholder="璇烽�夋嫨鍩庡競"
- :value-enum="IspCodeText"
+ :value-enum="electricParValueList"
+ enum-label-key="areaName"
+ enum-value-key="areaName"
/>
</FormItem>
- <FormItem label="鐢电綉绫诲瀷" class="bole-form-item" prop="electricType" required>
+ <!-- <FormItem label="鐢电綉绫诲瀷" class="bole-form-item" prop="electricType" required>
<ChooseInputWithPicker
v-model="form.electricType"
placeholder="璇烽�夋嫨鐢电綉绫诲瀷"
:value-enum="blLifeRecharge.constants.ElectricTypeText"
/>
- </FormItem>
+ </FormItem> -->
<FormItem label="鐢佃垂绫诲瀷" class="bole-form-item" prop="electricAccountType" required>
<ChooseInputWithPicker
v-model="form.electricAccountType"
@@ -52,7 +54,7 @@
<FormItem label="閫夋嫨鍏呭�奸噾棰�" class="bole-form-item" prop="parValue" required>
<RadioGroup v-model="form.parValue" direction="horizontal" class="parValue-radio-group">
<Radio
- :label="item"
+ :label="Number(item)"
:key="item"
shape="button"
v-for="item in parValueList"
@@ -75,9 +77,9 @@
</RadioGroup>
</FormItem>
<div class="common-content">
- <nut-button class="recharge-button" type="primary" @click="recharge">
+ <nut-button class="recharge-button" type="primary" @click="handleSubmit">
<div class="recharge-button-inner">
- <div>锟{ realParValue }}</div>
+ <div>锟{ form.parValue }}</div>
<div class="recharge-button-text">绔嬪嵆鍏呭��</div>
</div>
</nut-button>
@@ -104,26 +106,37 @@
<script setup lang="ts">
import { Form, FormItem, RadioGroup, Radio, Input, Button as NutButton } from '@nutui/nutui-taro';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import { reactive, ref, computed } from 'vue';
-import { IspCodeText, IspCode } from '../../constants';
-import { useLifeRechargeContext } from '@life-payment/core-vue';
+import { reactive, ref, computed, watch } from 'vue';
+import {
+ useLifeRechargeContext,
+ BlLifeRecharge,
+ LifeElectricDataCreateLifePayOrderInput,
+} from '@life-payment/core-vue';
import RechargeTipsView from '../../components/RechargeTipsView/RechargeTipsView.vue';
import ConfirmDialog from '../../components/Dialog/ConfirmDialog.vue';
import ConfirmDialogInfoItem from '../../components/Dialog/ConfirmDialogInfoItem.vue';
import ChooseInputWithPicker from '../../components/Input/ChooseInputWithPicker.vue';
import { useGetRate, useGetElectricParValue } from '../../hooks';
+import { FormValidator } from '../../utils';
defineOptions({
name: 'electricBillRecharge',
});
+type Props = {
+ isDev?: boolean;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+ isDev: false,
+});
+
const emit = defineEmits<{
- (e: 'goPay'): void;
+ (e: 'goPay', orderNo: string): void;
}>();
const form = reactive({
- ispCode: IspCode.yidong,
- parValue: 100,
+ parValue: 0,
electricAccount: '',
electricType: '',
electricAccountType: '',
@@ -134,7 +147,19 @@
const { lifePayElectricRate } = useGetRate();
const { electricParValueList } = useGetElectricParValue();
-const parValueList = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1500, 2000, 3000];
+const parValueList = computed(
+ () => electricParValueList.value.find((x) => x.areaName === form.province)?.parValue ?? []
+);
+
+watch(
+ () => form.province,
+ (provinceName) => {
+ const electricParValue = electricParValueList.value.find(
+ (item) => item.areaName === provinceName
+ );
+ form.electricType = electricParValue.electricType;
+ }
+);
const realParValue = computed(() =>
blLifeRecharge.getRechargeParValue(form.parValue, lifePayElectricRate.value)
@@ -143,7 +168,14 @@
const { blLifeRecharge } = useLifeRechargeContext();
-const rules = reactive<FormRules>({});
+const rules = reactive<FormRules>({
+ electricAccountType: [{ required: true, message: '璇烽�夋嫨鐢佃垂绫诲瀷' }],
+ electricAccount: [{ required: true, message: '璇疯緭鍏ョ數缃戞埛鍙�' }],
+ sixID: [{ required: true, message: '璇疯緭鍏ヨ韩浠借瘉鍚庡叚浣�' }],
+ parValue: [
+ { required: true, message: '璇烽�夋嫨鍏呭�奸噾棰�', validator: FormValidator.validatorNumberNotNull },
+ ],
+});
const formRef = ref<any>(null);
@@ -151,6 +183,7 @@
if (!formRef.value) return;
formRef.value.validate().then(({ valid, errors }: any) => {
if (valid) {
+ recharge();
}
});
}
@@ -169,8 +202,23 @@
confirmDialogVisible.value = true;
}
-function goPay() {
- emit('goPay');
+async function goPay() {
+ try {
+ let params: LifeElectricDataCreateLifePayOrderInput = {
+ userId: blLifeRecharge.accountModel.userId,
+ productData: {
+ parValue: props.isDev ? 0.1 : form.parValue,
+ electricType: form.electricType,
+ electricAccountType: form.electricAccountType,
+ electricAccount: form.electricAccount,
+ province: form.province,
+ city: '',
+ sixID: form.sixID,
+ },
+ };
+ let res = await blLifeRecharge.services.createLifePayElectricOrder(params);
+ emit('goPay', res.orderNo);
+ } catch (error) {}
}
</script>
<style lang="scss">
--
Gitblit v1.9.1