zhengyiming
1 天以前 f34af9bbc5ec1a40fa5d9f658ea2face2fb13b19
fix: 公告
1个文件已添加
8个文件已修改
166 ■■■■■ 已修改文件
apps/taro/src/hooks/lifepay.ts 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/pages/home/components/NormalAnnouncement.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/pages/home/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/utils/common/message.tsx 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeConstants.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/core/src/lifeRechargeServices.ts 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/LifePayAnnouncement.ts 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/api/typings.d.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
types/api.d.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,
      });
    },
  });
}
apps/taro/src/pages/home/components/NormalAnnouncement.vue
New file
@@ -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>
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}`,
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>
              ),
            }}
packages/core/src/lifeRechargeConstants.ts
@@ -238,4 +238,13 @@
    /**弹窗公告 */
    Dialog = 20,
  }
  export enum AnnouncementStatusEnum {
    /**展示中 */
    Showing = 10,
    /**待展示 */
    Wait = 20,
    /**已停止 */
    Stop = 30,
  }
}
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;
}
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 || {}),
    }
  );
packages/services/api/typings.d.ts
@@ -1190,6 +1190,10 @@
    queryCondition?: string;
  }
  interface GetShowingLifePayAnnouncementInput {
    announcementType?: AnnouncementTypeEnum;
  }
  interface IanaTimeZone {
    timeZoneName?: string;
  }
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;
  }