From 6ac59f6fa91e51272b8cd4797458995e168ec0f9 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 11 九月 2025 09:13:08 +0800
Subject: [PATCH] feat: 公告

---
 packages/services/api/typings.d.ts         |    1 
 packages/core/src/lifeRechargeConstants.ts |    7 ++
 apps/taro/src/hooks/lifepay.ts             |   22 +++++--
 packages/core/src/lifeRechargeServices.ts  |   37 ++++++++++++
 packages/components/src/hooks/rate.ts      |   36 ++++++++++++
 packages/components/src/hooks/index.ts     |   52 +++++++++++-----
 6 files changed, 132 insertions(+), 23 deletions(-)

diff --git a/apps/taro/src/hooks/lifepay.ts b/apps/taro/src/hooks/lifepay.ts
index 9384fb3..eb019fa 100644
--- a/apps/taro/src/hooks/lifepay.ts
+++ b/apps/taro/src/hooks/lifepay.ts
@@ -6,6 +6,7 @@
 } from '@life-payment/core-vue';
 import { MaybeRef } from 'vue';
 import { Message } from '@/utils';
+import Taro from '@tarojs/taro';
 
 export function useOnlineService() {
   const { blLifeRecharge } = useLifeRechargeContext();
@@ -69,10 +70,11 @@
 type UseShowingLifePayAnnouncementOptions = {
   params?: MaybeRef<API.GetShowingLifePayAnnouncementInput>;
   onSuccess?: (data: API.CreateEditLifePayAnnouncementOutput) => any;
+  staleTime?: MaybeRef<number>;
 };
 
 export function useShowingLifePayAnnouncement(options: UseShowingLifePayAnnouncementOptions = {}) {
-  const { onSuccess, params = {} } = options;
+  const { onSuccess, params = {}, staleTime } = options;
 
   const { blLifeRecharge } = useLifeRechargeContext();
 
@@ -91,6 +93,7 @@
     onSuccess: (data) => {
       onSuccess?.(data);
     },
+    staleTime: staleTime,
   });
 
   return {
@@ -100,19 +103,26 @@
   };
 }
 
+const dialogShowingLifePayAnnouncementCache = {};
+
 export function useDialogShowingLifePayAnnouncement() {
   const { blLifeRecharge } = useLifeRechargeContext();
+  const router = Taro.useRouter();
 
   useShowingLifePayAnnouncement({
     params: {
       announcementType: blLifeRecharge.constants.AnnouncementTypeEnum.Dialog,
     },
     onSuccess(data) {
-      Message.confirm({
-        title: '鍏憡',
-        message: data.announcementContent ?? '',
-        showCancelBtn: false,
-      });
+      if (!dialogShowingLifePayAnnouncementCache[router.path]) {
+        dialogShowingLifePayAnnouncementCache[router.path] = true;
+        Message.confirm({
+          title: '鍏憡',
+          message: data.announcementContent ?? '',
+          showCancelBtn: false,
+        });
+      }
     },
+    staleTime: Infinity,
   });
 }
diff --git a/packages/components/src/hooks/index.ts b/packages/components/src/hooks/index.ts
index 6eca483..624ec3d 100644
--- a/packages/components/src/hooks/index.ts
+++ b/packages/components/src/hooks/index.ts
@@ -18,17 +18,19 @@
 import { useInfiniteLoading } from './infiniteLoading';
 import { OrderInputType } from '../constants';
 import { convertOrderFrontStatus } from '../utils';
+import { useLifePayRateChannelAllList } from './rate';
 
 export function useGetRate() {
   const { blLifeRecharge } = useLifeRechargeContext();
 
-  const { data: lifePayRateList, isLoading } = useQuery({
-    queryKey: ['blLifeRecharge/getRate'],
-    queryFn: async () => {
-      return await blLifeRecharge.services.getRate({ showLoading: false });
-    },
-    placeholderData: () => [] as LifePayRateListOutput[],
-  });
+  // const { data: lifePayRateList, isLoading } = useQuery({
+  //   queryKey: ['blLifeRecharge/getRate'],
+  //   queryFn: async () => {
+  //     return await blLifeRecharge.services.getRate({ showLoading: false });
+  //   },
+  //   placeholderData: () => [] as LifePayRateListOutput[],
+  // });
+  const { allRateChannelList } = useLifePayRateChannelAllList();
 
   const hasChannel = computed(() => !!blLifeRecharge.accountModel.channlesNum);
 
@@ -50,10 +52,15 @@
     if (hasChannel.value && channelRate.value.channlesRate) {
       return channelRate.value.channlesRate;
     }
+    // return (
+    //   lifePayRateList.value.find(
+    //     (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿璇濊垂鎶樻墸
+    //   )?.rate ?? 0
+    // );
     return (
-      lifePayRateList.value.find(
-        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿璇濊垂鎶樻墸
-      )?.rate ?? 0
+      allRateChannelList.value
+        .filter((x) => x.lifePayOrderType == blLifeRecharge.constants.LifePayOrderTypeEnum.璇濊垂璁㈠崟)
+        .toSorted((a, b) => a.platformRate - b.platformRate)?.[0]?.platformRate ?? 0
     );
   });
 
@@ -61,10 +68,15 @@
     if (hasChannel.value && channelRate.value.channlesRate) {
       return channelRate.value.channlesRate;
     }
+    // return (
+    //   lifePayRateList.value.find(
+    //     (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐢佃垂鎶樻墸
+    //   )?.rate ?? 0
+    // );
     return (
-      lifePayRateList.value.find(
-        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐢佃垂鎶樻墸
-      )?.rate ?? 0
+      allRateChannelList.value
+        .filter((x) => x.lifePayOrderType == blLifeRecharge.constants.LifePayOrderTypeEnum.鐢佃垂璁㈠崟)
+        .toSorted((a, b) => a.platformRate - b.platformRate)?.[0]?.platformRate ?? 0
     );
   });
 
@@ -72,18 +84,24 @@
     if (hasChannel.value && channelRate.value.channlesRate) {
       return channelRate.value.channlesRate;
     }
+    // return (
+    //   lifePayRateList.value.find(
+    //     (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸
+    //   )?.rate ?? 0
+    // );
     return (
-      lifePayRateList.value.find(
-        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸
-      )?.rate ?? 0
+      allRateChannelList.value
+        .filter((x) => x.lifePayOrderType == blLifeRecharge.constants.LifePayOrderTypeEnum.鐕冩皵璁㈠崟)
+        .toSorted((a, b) => a.platformRate - b.platformRate)?.[0]?.platformRate ?? 0
     );
   });
 
   return {
-    lifePayRateList,
+    // lifePayRateList,
     lifePayPhoneRate,
     lifePayElectricRate,
     lifePayGasRate,
+    allRateChannelList,
   };
 }
 
diff --git a/packages/components/src/hooks/rate.ts b/packages/components/src/hooks/rate.ts
new file mode 100644
index 0000000..5db3d7c
--- /dev/null
+++ b/packages/components/src/hooks/rate.ts
@@ -0,0 +1,36 @@
+import {
+  useLifeRechargeContext,
+  QueryRateChannelInput,
+  CreateEditRateChannelOutput,
+} from '@life-payment/core-vue';
+import { useQuery } from '@tanstack/vue-query';
+import { MaybeRef, unref, computed } from 'vue';
+
+type UseLifePayRateChannelAllListOptions = {
+  params?: MaybeRef<QueryRateChannelInput>;
+};
+
+export function useLifePayRateChannelAllList(options: UseLifePayRateChannelAllListOptions = {}) {
+  const { params = {} } = options;
+
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const _params = computed(() => ({
+    status: blLifeRecharge.constants.LifePayRateChannelStatus.Enabled,
+    ...unref(params),
+  }));
+
+  const { data: allRateChannelList } = useQuery({
+    queryKey: ['blLifeRecharge/getLifePayRateChannelAllList', _params],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getLifePayRateChannelAllList(_params.value, {
+        showLoading: false,
+      });
+    },
+    placeholderData: () => [] as CreateEditRateChannelOutput[],
+  });
+
+  return {
+    allRateChannelList,
+  };
+}
diff --git a/packages/core/src/lifeRechargeConstants.ts b/packages/core/src/lifeRechargeConstants.ts
index f88fb61..0a502dd 100644
--- a/packages/core/src/lifeRechargeConstants.ts
+++ b/packages/core/src/lifeRechargeConstants.ts
@@ -247,4 +247,11 @@
     /**宸插仠姝� */
     Stop = 30,
   }
+
+  export enum LifePayRateChannelStatus {
+    /**鍚敤 */
+    Disabled = -10,
+    /**绂佺敤 */
+    Enabled = 10,
+  }
 }
diff --git a/packages/core/src/lifeRechargeServices.ts b/packages/core/src/lifeRechargeServices.ts
index 8935e5a..9bfcac7 100644
--- a/packages/core/src/lifeRechargeServices.ts
+++ b/packages/core/src/lifeRechargeServices.ts
@@ -482,6 +482,21 @@
       }
     );
   }
+
+  /** 鑾峰彇鎶樻墸閫氶亾閰嶇疆鍒楄〃 POST /api/LifePayRate/GetLifePayRateChannelAllList */
+  async getLifePayRateChannelAllList(body: QueryRateChannelInput, options?: RequestConfig) {
+    return this.request<CreateEditRateChannelOutput[]>(
+      '/api/LifePayRate/GetLifePayRateChannelAllList',
+      {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/json',
+        },
+        data: body,
+        ...(options || {}),
+      }
+    );
+  }
 }
 
 export interface PhoneMesssageCodeLoginInput {
@@ -1104,3 +1119,25 @@
   creationTime?: string;
   status?: LifeRechargeConstants.AnnouncementStatusEnum;
 }
+
+export interface QueryRateChannelInput {
+  status?: LifeRechargeConstants.LifePayRateChannelStatus;
+  lifePayOrderType?: LifeRechargeConstants.LifePayOrderTypeEnum;
+}
+
+export interface CreateEditRateChannelOutput {
+  id?: string;
+  lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum;
+  /** 閫氶亾 */
+  rateChannelName: string;
+  /** ID */
+  code: string;
+  /** 渚涘簲鍟嗘姌鎵� */
+  supplierRate: number;
+  /** 骞冲彴鎶樻墸 */
+  platformRate: number;
+  status: LifeRechargeConstants.LifePayRateChannelStatus;
+  /** 閫氱煡鍐呭 */
+  remark: string;
+  creationTime?: string;
+}
diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts
index 88e5ca5..81c5ffa 100644
--- a/packages/services/api/typings.d.ts
+++ b/packages/services/api/typings.d.ts
@@ -2305,6 +2305,7 @@
 
   interface QueryRateChannelInput {
     status?: LifePayRateChannelStatus;
+    lifePayOrderType?: LifePayOrderTypeEnum;
   }
 
   interface QueryUserAccountAllListInput {

--
Gitblit v1.9.1