From 192be5ad46233a4cd25880ba029997d47ad09bf6 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 20 三月 2025 17:30:34 +0800
Subject: [PATCH] fix: 三期需求

---
 packages/components/src/views/PhoneBillRecharge/types.ts                         |    2 
 apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue                 |    5 +-
 apps/taro/src/utils/common/message.tsx                                           |    6 ++-
 packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue           |    2 
 packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue |    2 
 apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue            |    5 +-
 apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue               |    5 +-
 packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue       |    2 
 apps/taro/src/hooks/user.ts                                                      |   31 ++++++++++++++-
 packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue            |    4 +-
 packages/components/src/hooks/selectPayType.ts                                   |    9 ++--
 apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue                   |    5 +-
 packages/components/src/styles/rechargeGrid.scss                                 |   19 +++++++++
 packages/components/src/views/RechargeGrid/RechargeGrid.vue                      |    6 +++
 14 files changed, 80 insertions(+), 23 deletions(-)

diff --git a/apps/taro/src/hooks/user.ts b/apps/taro/src/hooks/user.ts
index f76e73d..6e25fee 100644
--- a/apps/taro/src/hooks/user.ts
+++ b/apps/taro/src/hooks/user.ts
@@ -83,6 +83,8 @@
 
   const { blLifeRecharge } = useLifeRechargeContext();
 
+  const { getLifePayWxIndentity } = useLifePayWxIndentity();
+
   Taro.useReady(async () => {
     try {
       //@ts-ignore
@@ -93,13 +95,17 @@
       }
       if (!!code && !wxCode.value) {
         userStore.setWxCode(router.params.code ?? '');
-        let res = await getLifePayWxIndentity();
-        userStore.setWxOpenId(res.openId);
+        getLifePayWxIndentity(code);
       }
     } catch (error) {}
   });
+}
 
-  async function getLifePayWxIndentity() {
+export function useLifePayWxIndentity() {
+  const { blLifeRecharge } = useLifeRechargeContext();
+  const userStore = useUserStore();
+
+  async function getLifePayWxIndentity(code: string) {
     try {
       let params: APIgetLifePayWxIndentityParams = {
         code: code,
@@ -107,9 +113,28 @@
       let res = await blLifeRecharge.services.getLifePayWxIndentity(params, {
         showLoading: false,
       });
+      userStore.setWxOpenId(res.openId);
       return res;
     } catch (error) {}
   }
+
+  return { getLifePayWxIndentity };
+}
+
+export function useEnsureOpenId() {
+  const { wxCode, wxOpenId } = useUser();
+  const { getLifePayWxIndentity } = useLifePayWxIndentity();
+
+  async function ensureOpenId() {
+    if (wxOpenId) {
+      return wxOpenId.value;
+    } else {
+      let rea = await getLifePayWxIndentity(wxCode.value);
+      return rea.openId;
+    }
+  }
+
+  return { ensureOpenId };
 }
 
 export function useGoLogin() {
diff --git a/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue b/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
index 558b627..773dc57 100644
--- a/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/electricBillRecharge/InnerPage.vue
@@ -4,7 +4,7 @@
       @goPay="goPay"
       :isDev="isDev"
       @paySuccess="handePaySuccess"
-      :openId="wxOpenId"
+      :getOpenId="ensureOpenId"
       :isInWeChat="isInWeChat"
       :isInAlipay="isInAlipay"
       :isH5="isWeb"
@@ -21,7 +21,7 @@
 import { BlLifeRecharge } from '@life-payment/core-vue';
 import Taro from '@tarojs/taro';
 import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
-import { useUser, useFocus } from '@/hooks';
+import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
 import { WXPayAppId } from '@/constants';
 
 defineOptions({
@@ -31,6 +31,7 @@
 const isDev = process.env.NODE_ENV === 'development';
 
 const { wxOpenId } = useUser();
+const { ensureOpenId } = useEnsureOpenId();
 const { isFocus } = useFocus();
 
 function goPay(orderNo: string) {
diff --git a/apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue b/apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue
index cd0963e..2bdc9a8 100644
--- a/apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/gasBillRecharge/InnerPage.vue
@@ -4,7 +4,7 @@
       @goPay="goPay"
       :isDev="isDev"
       @paySuccess="handePaySuccess"
-      :openId="wxOpenId"
+      :getOpenId="ensureOpenId"
       :isInWeChat="isInWeChat"
       :isInAlipay="isInAlipay"
       :isH5="isWeb"
@@ -21,7 +21,7 @@
 import { BlLifeRecharge } from '@life-payment/core-vue';
 import Taro from '@tarojs/taro';
 import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
-import { useUser, useFocus } from '@/hooks';
+import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
 import { WXPayAppId } from '@/constants';
 
 defineOptions({
@@ -31,6 +31,7 @@
 const isDev = process.env.NODE_ENV === 'development';
 
 const { wxOpenId } = useUser();
+const { ensureOpenId } = useEnsureOpenId();
 const { isFocus } = useFocus();
 
 function goPay(orderNo: string) {
diff --git a/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue b/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
index 2cb195c..9c3ddcd 100644
--- a/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/phoneBillRecharge/InnerPage.vue
@@ -4,7 +4,7 @@
       @goPay="goPay"
       :isDev="isDev"
       @paySuccess="handePaySuccess"
-      :openId="wxOpenId"
+      :getOpenId="ensureOpenId"
       :isInWeChat="isInWeChat"
       :isInAlipay="isInAlipay"
       :isH5="isWeb"
@@ -21,7 +21,7 @@
 import { BlLifeRecharge } from '@life-payment/core-vue';
 import Taro from '@tarojs/taro';
 import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
-import { useUser, useFocus } from '@/hooks';
+import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
 import { WXPayAppId } from '@/constants';
 
 defineOptions({
@@ -31,6 +31,7 @@
 const isDev = process.env.NODE_ENV === 'development';
 
 const { wxOpenId } = useUser();
+const { ensureOpenId } = useEnsureOpenId();
 const { isFocus } = useFocus();
 
 function goPay(orderNo: string) {
diff --git a/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue b/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
index fcf1d5c..892f9a6 100644
--- a/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
+++ b/apps/taro/src/subpackages/recharge/selectPayType/InnerPage.vue
@@ -7,7 +7,7 @@
       @paySuccess="handePaySuccess"
       :showAliPay="!isInWeChat"
       :showWeixinPay="!isInAlipay"
-      :openId="wxOpenId"
+      :getOpenId="ensureOpenId"
       :isInWeChat="isInWeChat"
       :isH5="isWeb"
       :appId="WXPayAppId"
@@ -21,7 +21,7 @@
 import { LifeRechargeConstants } from '@life-payment/core-vue';
 import Taro from '@tarojs/taro';
 import { isInAlipay, isInWeChat, isH5, isWeb } from '@/utils/env';
-import { useUser, useFocus } from '@/hooks';
+import { useUser, useFocus, useEnsureOpenId } from '@/hooks';
 import { WXPayAppId } from '@/constants';
 
 defineOptions({
@@ -33,6 +33,7 @@
 const lifePayOrderType = Number(router.params?.lifePayOrderType ?? '');
 
 const { wxOpenId } = useUser();
+const { ensureOpenId } = useEnsureOpenId();
 
 const { isFocus } = useFocus();
 
diff --git a/apps/taro/src/utils/common/message.tsx b/apps/taro/src/utils/common/message.tsx
index 0ffb285..937d801 100644
--- a/apps/taro/src/utils/common/message.tsx
+++ b/apps/taro/src/utils/common/message.tsx
@@ -49,6 +49,10 @@
                     onClose();
                     resolve(1);
                   }}
+                  //@ts-ignore
+                  onClickOverlay={() => {
+                    onClose();
+                  }}
                   confirmText={confirmText}
                 ></Model>
               ),
@@ -125,6 +129,4 @@
       );
     });
   }
-
-  
 }
diff --git a/packages/components/src/hooks/selectPayType.ts b/packages/components/src/hooks/selectPayType.ts
index aa8e486..ad03530 100644
--- a/packages/components/src/hooks/selectPayType.ts
+++ b/packages/components/src/hooks/selectPayType.ts
@@ -9,14 +9,14 @@
 import Taro from '@tarojs/taro';
 
 type UseSelectPayTypeOptions = {
-  openId?: MaybeRef<string>;
   isInWeChat?: MaybeRef<boolean>;
   isH5?: MaybeRef<boolean>;
   appId?: MaybeRef<string>;
+  getOpenId?: () => Promise<string>;
 };
 
 export function useSelectPayType(options: UseSelectPayTypeOptions = {}) {
-  const { openId, isInWeChat, isH5, appId } = options;
+  const { isInWeChat, isH5, appId, getOpenId } = options;
 
   const { blLifeRecharge } = useLifeRechargeContext();
 
@@ -98,10 +98,11 @@
 
   async function getPayOrderForJsAPI(orderNo: string) {
     try {
+      const openId = await getOpenId();
       let params: GetPayOrderForJsAPIInput = {
         orderNo: orderNo,
         lifePayType: blLifeRecharge.constants.LifePayTypeEnum.WxPay,
-        openId: unref(openId),
+        openId: openId,
         attach: Date.now().toString(),
         payAppId: unref(appId),
       };
@@ -167,7 +168,7 @@
   const { blLifeRecharge } = useLifeRechargeContext();
 
   useQuery({
-    queryKey: ['platformServicePayServices/getPayStatusByOrderNo', orderNo],
+    queryKey: ['blLifeRecharge/getPayStatusByOrderNo', orderNo],
     queryFn: async () => {
       return await blLifeRecharge.services.getPayStatusByOrderNo(
         {
diff --git a/packages/components/src/styles/rechargeGrid.scss b/packages/components/src/styles/rechargeGrid.scss
index 8695d25..ef1c3ad 100644
--- a/packages/components/src/styles/rechargeGrid.scss
+++ b/packages/components/src/styles/rechargeGrid.scss
@@ -5,6 +5,7 @@
   margin-top: 40px;
 
   .recharge-grid-item {
+    position: relative;
     .nut-grid-item__text {
       font-size: 36rpx;
       color: boleGetCssVar('text-color', 'primary');
@@ -14,6 +15,24 @@
       width: 64px;
       height: 64px;
     }
+
+    .discountTag {
+      position: absolute;
+      padding: 8px 16px;
+      border-radius: 0px 0 20px 0;
+      background: linear-gradient(
+        186deg,
+        rgba(255, 129, 45, 0.08) 14.82%,
+        rgba(238, 67, 67, 0.08) 91.5%
+      );
+      color: #fb5100;
+      font-size: 24px;
+      font-weight: 700;
+      line-height: 28px;
+      position: absolute;
+      top: -2px;
+      left: -2px;
+    }
   }
 }
 
diff --git a/packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue b/packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue
index b4ec7a2..22a718b 100644
--- a/packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue
+++ b/packages/components/src/views/GasBillRecharge/GasBillRechargeStep3.vue
@@ -220,7 +220,7 @@
 }
 
 const { state, invokeAliPay, invokeWeixinPay } = useSelectPayType({
-  openId: toRef(props, 'openId'),
+  getOpenId: props.getOpenId,
   isInWeChat: toRef(props, 'isInWeChat'),
   isH5: toRef(props, 'isH5'),
   appId: toRef(props, 'appId'),
diff --git a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
index 4912744..0b56538 100644
--- a/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
+++ b/packages/components/src/views/PhoneBillRecharge/PhoneBillRechargeStep2.vue
@@ -211,7 +211,7 @@
 }
 
 const { state, invokeAliPay, invokeWeixinPay } = useSelectPayType({
-  openId: toRef(props, 'openId'),
+  getOpenId: props.getOpenId,
   isInWeChat: toRef(props, 'isInWeChat'),
   isH5: toRef(props, 'isH5'),
   appId: toRef(props, 'appId'),
diff --git a/packages/components/src/views/PhoneBillRecharge/types.ts b/packages/components/src/views/PhoneBillRecharge/types.ts
index 365e57f..6c8ec0b 100644
--- a/packages/components/src/views/PhoneBillRecharge/types.ts
+++ b/packages/components/src/views/PhoneBillRecharge/types.ts
@@ -1,6 +1,5 @@
 export type RechargeProps = {
   isDev?: boolean;
-  openId?: string;
   isInWeChat?: boolean;
   isH5?: boolean;
   appId?: string;
@@ -8,4 +7,5 @@
   isInAlipay?: boolean;
   showAliPay?: boolean;
   showWeixinPay?: boolean;
+  getOpenId?: () => Promise<string>;
 };
diff --git a/packages/components/src/views/RechargeGrid/RechargeGrid.vue b/packages/components/src/views/RechargeGrid/RechargeGrid.vue
index 204f8bd..705f3af 100644
--- a/packages/components/src/views/RechargeGrid/RechargeGrid.vue
+++ b/packages/components/src/views/RechargeGrid/RechargeGrid.vue
@@ -3,12 +3,15 @@
     <Grid square :gutter="20" :column-num="2" class="recharge-grid-wrapper">
       <GridItem class="recharge-grid-item" text="璇濊垂" @click="emit('phoneBillRecharge')">
         <img :src="IconFreePhone" class="recharge-grid-item-icon" />
+        <div class="discountTag">{{ lifePayPhoneRate }}鎶�</div>
       </GridItem>
       <GridItem class="recharge-grid-item" text="鐢佃垂" @click="emit('electricityBillRecharge')">
         <img :src="IconFreeDian" class="recharge-grid-item-icon" />
+        <div class="discountTag">{{ lifePayElectricRate }}鎶�</div>
       </GridItem>
       <!-- <GridItem class="recharge-grid-item" text="鐕冩皵" @click="emit('gasBillRecharge')">
         <img :src="IconFreeGas" class="recharge-grid-item-icon" />
+        <div class="discountTag">{{ lifePayGasRate }}鎶�</div>
       </GridItem> -->
     </Grid>
   </MainCell>
@@ -20,6 +23,7 @@
 import IconFreePhone from '../../assets/icon-free-phone.png';
 import IconFreeDian from '../../assets/icon-free-dian.png';
 import IconFreeGas from '../../assets/icon-free-gas.png';
+import { useGetRate } from '../../hooks';
 
 defineOptions({
   name: 'RechargeGrid',
@@ -34,4 +38,6 @@
   (e: 'electricityBillRecharge'): void;
   (e: 'gasBillRecharge'): void;
 }>();
+
+const { lifePayPhoneRate, lifePayElectricRate, lifePayGasRate } = useGetRate();
 </script>
diff --git a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
index 68e0711..57cc4e3 100644
--- a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
+++ b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue
@@ -29,11 +29,11 @@
   lifePayOrderType?: LifeRechargeConstants.LifePayOrderTypeEnum;
   showAliPay?: boolean;
   showWeixinPay?: boolean;
-  openId?: string;
   isInWeChat?: boolean;
   isH5?: boolean;
   appId?: string;
   isFocus?: boolean;
+  getOpenId?: () => Promise<string>;
 };
 
 const props = withDefaults(defineProps<Props>(), {
@@ -51,7 +51,7 @@
 }>();
 
 const { state, invokeAliPay, invokeWeixinPay } = useSelectPayType({
-  openId: toRef(props, 'openId'),
+  getOpenId: props.getOpenId,
   isInWeChat: toRef(props, 'isInWeChat'),
   isH5: toRef(props, 'isH5'),
   appId: toRef(props, 'appId'),
diff --git a/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue b/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue
index 6a1a910..ab56c15 100644
--- a/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue
+++ b/packages/components/src/views/electricBillRecharge/ElectricBillRechargeStep2.vue
@@ -228,10 +228,10 @@
 }
 
 const { state, invokeAliPay, invokeWeixinPay } = useSelectPayType({
-  openId: toRef(props, 'openId'),
   isInWeChat: toRef(props, 'isInWeChat'),
   isH5: toRef(props, 'isH5'),
   appId: toRef(props, 'appId'),
+  getOpenId: props.getOpenId,
 });
 
 const currentOrderNo = ref('');

--
Gitblit v1.9.1