From f34af9bbc5ec1a40fa5d9f658ea2face2fb13b19 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 10 九月 2025 15:04:44 +0800
Subject: [PATCH] fix: 公告

---
 packages/services/api/typings.d.ts                         |    4 +
 apps/taro/src/utils/common/message.tsx                     |    9 ++
 packages/core/src/lifeRechargeConstants.ts                 |    9 +++
 apps/taro/src/pages/home/index.vue                         |    6 +
 apps/taro/src/pages/home/components/NormalAnnouncement.vue |   31 ++++++++++
 packages/services/api/LifePayAnnouncement.ts               |   13 +++-
 apps/taro/src/hooks/lifepay.ts                             |   58 +++++++++++++++++++
 packages/core/src/lifeRechargeServices.ts                  |   35 +++++++++++
 types/api.d.ts                                             |    1 
 9 files changed, 160 insertions(+), 6 deletions(-)

diff --git a/apps/taro/src/hooks/lifepay.ts b/apps/taro/src/hooks/lifepay.ts
index 28090cd..9384fb3 100644
--- a/apps/taro/src/hooks/lifepay.ts
+++ b/apps/taro/src/hooks/lifepay.ts
@@ -1,6 +1,11 @@
 import { useQuery } from '@tanstack/vue-query';
-import { useLifeRechargeContext, CreateEditPayChannelsInput } from '@life-payment/core-vue';
+import {
+  useLifeRechargeContext,
+  CreateEditPayChannelsInput,
+  GetShowingLifePayAnnouncementInput,
+} from '@life-payment/core-vue';
 import { MaybeRef } from 'vue';
+import { Message } from '@/utils';
 
 export function useOnlineService() {
   const { blLifeRecharge } = useLifeRechargeContext();
@@ -60,3 +65,54 @@
     getChannlesNameByNum,
   };
 }
+
+type UseShowingLifePayAnnouncementOptions = {
+  params?: MaybeRef<API.GetShowingLifePayAnnouncementInput>;
+  onSuccess?: (data: API.CreateEditLifePayAnnouncementOutput) => any;
+};
+
+export function useShowingLifePayAnnouncement(options: UseShowingLifePayAnnouncementOptions = {}) {
+  const { onSuccess, params = {} } = options;
+
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const {
+    data: announcement,
+    isLoading,
+    refetch,
+  } = useQuery({
+    queryKey: ['blLifeRecharge/getShowingLifePayAnnouncement', params],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getShowingLifePayAnnouncement(unref(params), {
+        showLoading: false,
+        skipErrorHandler: true,
+      });
+    },
+    onSuccess: (data) => {
+      onSuccess?.(data);
+    },
+  });
+
+  return {
+    announcement,
+    isLoading,
+    refetch,
+  };
+}
+
+export function useDialogShowingLifePayAnnouncement() {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  useShowingLifePayAnnouncement({
+    params: {
+      announcementType: blLifeRecharge.constants.AnnouncementTypeEnum.Dialog,
+    },
+    onSuccess(data) {
+      Message.confirm({
+        title: '鍏憡',
+        message: data.announcementContent ?? '',
+        showCancelBtn: false,
+      });
+    },
+  });
+}
diff --git a/apps/taro/src/pages/home/components/NormalAnnouncement.vue b/apps/taro/src/pages/home/components/NormalAnnouncement.vue
new file mode 100644
index 0000000..bd972f4
--- /dev/null
+++ b/apps/taro/src/pages/home/components/NormalAnnouncement.vue
@@ -0,0 +1,31 @@
+<template>
+  <nut-noticebar :left-icon="false" :text="text" v-if="!!text" />
+</template>
+
+<script setup lang="ts">
+import { BlLifeRecharge } from '@life-payment/core-vue';
+import { useShowingLifePayAnnouncement } from '@/hooks';
+
+defineOptions({
+  name: 'NormalAnnouncement',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+
+const text = ref('');
+
+useShowingLifePayAnnouncement({
+  params: {
+    announcementType: BlLifeRecharge.constants.AnnouncementTypeEnum.Normal,
+  },
+  onSuccess(data) {
+    text.value = data.announcementContent;
+  },
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/taro/src/pages/home/index.vue b/apps/taro/src/pages/home/index.vue
index 45bf44c..30d2ee7 100644
--- a/apps/taro/src/pages/home/index.vue
+++ b/apps/taro/src/pages/home/index.vue
@@ -7,6 +7,7 @@
     <template #bg>
       <img :src="OssAssets.common.HomePageBg" class="home-page-bg" />
     </template>
+    <NormalAnnouncement />
     <ContentView>
       <div class="home-page-banner-wrapper">
         <div class="home-page-banner-left">
@@ -38,7 +39,7 @@
 </template>
 
 <script setup lang="ts">
-import { useAccessLogin } from '@/hooks';
+import { useAccessLogin, useDialogShowingLifePayAnnouncement } from '@/hooks';
 import { useUserStore } from '@/stores/modules/user';
 import Taro from '@tarojs/taro';
 import { OrderInputType } from '@life-payment/constants';
@@ -48,11 +49,14 @@
 import IconBanner from '@/assets/home/icon-banner.png';
 import IconBannerLogo from '@/assets/home/icon-banner-logo.png';
 import IconBannerItem from '@/assets/home/icon-banner-item.png';
+import NormalAnnouncement from './components/NormalAnnouncement.vue';
 
 const userStore = useUserStore();
 
 const router = Taro.useRouter();
 
+useDialogShowingLifePayAnnouncement();
+
 const goPhoneBillRecharge = useAccessLogin(() => {
   RouteHelper.navigateTo({
     url: `${RouterPath.phoneBillRecharge}`,
diff --git a/apps/taro/src/utils/common/message.tsx b/apps/taro/src/utils/common/message.tsx
index 937d801..9a64b30 100644
--- a/apps/taro/src/utils/common/message.tsx
+++ b/apps/taro/src/utils/common/message.tsx
@@ -24,11 +24,17 @@
   title?: string;
   message?: string | VNode;
   confirmText?: string;
+  showCancelBtn?: boolean;
 };
 
 export class Message {
   static confirm(options: ConfirmOptions = {}) {
-    const { title = '鎻愮ず', message = '纭畾瑕佸垹闄よ鏁版嵁鍚�?', confirmText = '纭' } = options;
+    const {
+      title = '鎻愮ず',
+      message = '纭畾瑕佸垹闄よ鏁版嵁鍚�?',
+      confirmText = '纭',
+      showCancelBtn = true,
+    } = options;
     return new Promise((resolve, reject) => {
       Portal.add((key) => {
         return (
@@ -54,6 +60,7 @@
                     onClose();
                   }}
                   confirmText={confirmText}
+                  showCancelBtn={showCancelBtn}
                 ></Model>
               ),
             }}
diff --git a/packages/core/src/lifeRechargeConstants.ts b/packages/core/src/lifeRechargeConstants.ts
index 0c3e5ed..f88fb61 100644
--- a/packages/core/src/lifeRechargeConstants.ts
+++ b/packages/core/src/lifeRechargeConstants.ts
@@ -238,4 +238,13 @@
     /**寮圭獥鍏憡 */
     Dialog = 20,
   }
+
+  export enum AnnouncementStatusEnum {
+    /**灞曠ず涓� */
+    Showing = 10,
+    /**寰呭睍绀� */
+    Wait = 20,
+    /**宸插仠姝� */
+    Stop = 30,
+  }
 }
diff --git a/packages/core/src/lifeRechargeServices.ts b/packages/core/src/lifeRechargeServices.ts
index 41e981e..8935e5a 100644
--- a/packages/core/src/lifeRechargeServices.ts
+++ b/packages/core/src/lifeRechargeServices.ts
@@ -464,6 +464,24 @@
       ...(options || {}),
     });
   }
+
+  /** 鑾峰彇褰撳墠灞曠ず涓殑鍏憡 POST /api/LifePayAnnouncement/GetShowingLifePayAnnouncement */
+  async getShowingLifePayAnnouncement(
+    body: GetShowingLifePayAnnouncementInput,
+    options?: RequestConfig
+  ) {
+    return this.request<CreateEditLifePayAnnouncementOutput>(
+      '/api/LifePayAnnouncement/GetShowingLifePayAnnouncement',
+      {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/json',
+        },
+        data: body,
+        ...(options || {}),
+      }
+    );
+  }
 }
 
 export interface PhoneMesssageCodeLoginInput {
@@ -1069,3 +1087,20 @@
   /** IdNumber */
   idNumber?: string;
 }
+
+export interface GetShowingLifePayAnnouncementInput {
+  announcementType?: LifeRechargeConstants.AnnouncementTypeEnum;
+}
+
+export interface CreateEditLifePayAnnouncementOutput {
+  id?: string;
+  announcementType: LifeRechargeConstants.AnnouncementTypeEnum;
+  /** 鐢熸晥鏃ユ湡 */
+  startTime: string;
+  /** 鎴鏃ユ湡 */
+  endTime: string;
+  /** 鍏憡鍐呭 */
+  announcementContent: string;
+  creationTime?: string;
+  status?: LifeRechargeConstants.AnnouncementStatusEnum;
+}
diff --git a/packages/services/api/LifePayAnnouncement.ts b/packages/services/api/LifePayAnnouncement.ts
index d22e488..4714e3e 100644
--- a/packages/services/api/LifePayAnnouncement.ts
+++ b/packages/services/api/LifePayAnnouncement.ts
@@ -50,12 +50,19 @@
   );
 }
 
-/** 鑾峰彇褰撳墠灞曠ず涓殑鍏憡 GET /api/LifePayAnnouncement/GetShowingLifePayAnnouncement */
-export async function getShowingLifePayAnnouncement(options?: API.RequestConfig) {
+/** 鑾峰彇褰撳墠灞曠ず涓殑鍏憡 POST /api/LifePayAnnouncement/GetShowingLifePayAnnouncement */
+export async function getShowingLifePayAnnouncement(
+  body: API.GetShowingLifePayAnnouncementInput,
+  options?: API.RequestConfig
+) {
   return request<API.CreateEditLifePayAnnouncementOutput>(
     '/api/LifePayAnnouncement/GetShowingLifePayAnnouncement',
     {
-      method: 'GET',
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json',
+      },
+      data: body,
       ...(options || {}),
     }
   );
diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts
index 565bd1b..88e5ca5 100644
--- a/packages/services/api/typings.d.ts
+++ b/packages/services/api/typings.d.ts
@@ -1190,6 +1190,10 @@
     queryCondition?: string;
   }
 
+  interface GetShowingLifePayAnnouncementInput {
+    announcementType?: AnnouncementTypeEnum;
+  }
+
   interface IanaTimeZone {
     timeZoneName?: string;
   }
diff --git a/types/api.d.ts b/types/api.d.ts
index 3241ace..95e117a 100644
--- a/types/api.d.ts
+++ b/types/api.d.ts
@@ -2,6 +2,7 @@
   interface RequestConfig extends GlobalType.RequestConfig {
     showNavigationBarLoading?: boolean;
     showLoading?: boolean;
+    skipErrorHandler?: boolean;
     mock?: boolean;
     customErrorHandler?: (error: any) => boolean;
   }

--
Gitblit v1.9.1