From 758d8056dc3dbc6bf92c298aa3627e66b933b5a0 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 22 五月 2025 13:25:21 +0800
Subject: [PATCH] feat: UI

---
 packages/components/src/hooks/index.ts |  306 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 293 insertions(+), 13 deletions(-)

diff --git a/packages/components/src/hooks/index.ts b/packages/components/src/hooks/index.ts
index 8513ce7..b8ce406 100644
--- a/packages/components/src/hooks/index.ts
+++ b/packages/components/src/hooks/index.ts
@@ -3,9 +3,21 @@
   LifePayRateListOutput,
   PhoneParValueOutput,
   PhoneParValueResponse,
-} from '../utils';
-import { useQuery } from '@tanstack/vue-query';
-import { computed } from 'vue';
+  QueryLifePayOrderListInput,
+  LifeRechargeConstants,
+  ElectricParValueResponse,
+  ElectricSupportAreaResponse,
+  QueryUserAccountAllListInput,
+  UserAccountListOutput,
+  AddUpdateUserAccountInput,
+  GasParValueResponse,
+  ChannelRateOutput,
+} from '@life-payment/core-vue';
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
+import { computed, MaybeRef, reactive, unref } from 'vue';
+import { useInfiniteLoading } from './infiniteLoading';
+import { OrderInputType } from '../constants';
+import { convertOrderFrontStatus } from '../utils';
 
 export function useGetRate() {
   const { blLifeRecharge } = useLifeRechargeContext();
@@ -18,24 +30,60 @@
     placeholderData: () => [] as LifePayRateListOutput[],
   });
 
-  const lifePayPhoneRate = computed(
-    () =>
+  const hasChannel = computed(() => !!blLifeRecharge.accountModel.channlesNum);
+
+  const { data: channelRate } = useQuery({
+    queryKey: ['blLifeRecharge/getChannelRate', blLifeRecharge.accountModel.channlesNum],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getChannelRate(
+        {
+          checkChannelId: blLifeRecharge.accountModel.channlesNum,
+        },
+        { showLoading: false }
+      );
+    },
+    placeholderData: () => ({} as ChannelRateOutput),
+    enabled: hasChannel,
+  });
+
+  const lifePayPhoneRate = computed(() => {
+    if (hasChannel.value && channelRate.value.channlesRate) {
+      return channelRate.value.channlesRate;
+    }
+    return (
       lifePayRateList.value.find(
         (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿璇濊垂鎶樻墸
-      )?.rate ?? 1
-  );
+      )?.rate ?? 0
+    );
+  });
 
-  const lifePayElectricRate = computed(
-    () =>
+  const lifePayElectricRate = computed(() => {
+    if (hasChannel.value && channelRate.value.channlesRate) {
+      return channelRate.value.channlesRate;
+    }
+    return (
       lifePayRateList.value.find(
         (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐢佃垂鎶樻墸
-      )?.rate ?? 1
-  );
+      )?.rate ?? 0
+    );
+  });
+
+  const lifePayGasRate = computed(() => {
+    if (hasChannel.value && channelRate.value.channlesRate) {
+      return channelRate.value.channlesRate;
+    }
+    return (
+      lifePayRateList.value.find(
+        (x) => x.rateType === blLifeRecharge.constants.LifePayRateTypeEnum.榛樿鐕冩皵鎶樻墸
+      )?.rate ?? 0
+    );
+  });
 
   return {
     lifePayRateList,
     lifePayPhoneRate,
     lifePayElectricRate,
+    lifePayGasRate,
   };
 }
 
@@ -45,10 +93,10 @@
   const { data: phoneParValueList, isLoading } = useQuery({
     queryKey: ['blLifeRecharge/getPhoneParValue'],
     queryFn: async () => {
-      return await blLifeRecharge.services.getPhoneParValue({ showLoading: false });
+      return await blLifeRecharge.services.getPhoneParValue({}, { showLoading: false });
     },
     select(data) {
-      return data.phoneParValue ?? [];
+      return data?.phoneParValue ?? [];
     },
     placeholderData: () => ({} as PhoneParValueResponse),
   });
@@ -57,3 +105,235 @@
     phoneParValueList,
   };
 }
+
+export function useGetElectricParValue() {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const { data: electricParValueList, isLoading } = useQuery({
+    queryKey: ['blLifeRecharge/getElectricSupportArea'],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getElectricSupportArea({}, { showLoading: false });
+    },
+    select(data) {
+      return data.electricAreaList ?? [];
+    },
+    placeholderData: () => ({} as ElectricSupportAreaResponse),
+  });
+
+  return {
+    electricParValueList,
+  };
+}
+
+export type UseGetUserLifePayOrderPageOptions = {
+  lifePayOrderType?: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>;
+};
+
+export function useGetUserLifePayOrderPage(options: UseGetUserLifePayOrderPageOptions = {}) {
+  const { lifePayOrderType } = options;
+
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  // const queryState = reactive({
+  //   lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum,
+  // });
+
+  const { infiniteLoadingProps } = useInfiniteLoading(
+    async ({ pageParam }) => {
+      let params: QueryLifePayOrderListInput = {
+        pageModel: {
+          rows: 20,
+          page: pageParam,
+          orderInput: [{ property: 'id', order: OrderInputType.Desc }],
+        },
+        lifePayOrderType: unref(lifePayOrderType),
+        userId: blLifeRecharge.accountModel.userId,
+      };
+
+      let res = await blLifeRecharge.services.getUserLifePayOrderPage(params, {
+        showLoading: false,
+      });
+      res.data = res.data.map((x) => ({
+        ...x,
+        frontStatus: convertOrderFrontStatus(
+          x.payStatus,
+          x.lifePayOrderStatus,
+          x.lifePayRefundStatus
+        ),
+      }));
+      return res;
+    },
+    {
+      queryKey: [
+        'blLifeRecharge/getUserLifePayOrderPage',
+        {
+          lifePayOrderType,
+          userId: blLifeRecharge.accountModel.userId,
+        },
+      ],
+
+      select(data) {
+        console.log('data: ', data);
+        //  data.pages.map((item) => item.data.map((x) => convertOrderFrontStatus(x)))
+        return data;
+      },
+    }
+  );
+
+  return {
+    infiniteLoadingProps,
+  };
+}
+
+type UseUserAccountAllListOptions = {
+  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>;
+  onSuccess?: (data: UserAccountListOutput[]) => any;
+};
+
+export function useUserAccountAllList({
+  lifePayOrderType,
+  onSuccess,
+}: UseUserAccountAllListOptions) {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const { data: userAccountAllList, isLoading } = useQuery({
+    queryKey: [
+      'blLifeRecharge/getUserAccountAllList',
+      blLifeRecharge.accountModel.userId,
+      lifePayOrderType,
+    ],
+    queryFn: async () => {
+      let params: QueryUserAccountAllListInput = {
+        userId: blLifeRecharge.accountModel.userId,
+        lifePayOrderType: unref(lifePayOrderType),
+      };
+      return await blLifeRecharge.services.getUserAccountAllList(params, { showLoading: false });
+    },
+    placeholderData: () => [] as UserAccountListOutput[],
+    onSuccess(data) {
+      onSuccess?.(data);
+    },
+  });
+
+  const queryClient = useQueryClient();
+
+  function invalidateQueries() {
+    return queryClient.invalidateQueries({
+      queryKey: [
+        'blLifeRecharge/getUserAccountAllList',
+        blLifeRecharge.accountModel.userId,
+        lifePayOrderType,
+      ],
+    });
+  }
+
+  return {
+    userAccountAllList,
+    isLoading,
+    invalidateQueries,
+  };
+}
+
+export function useAddUpdateUserAccount() {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const queryClient = useQueryClient();
+
+  function invalidateQueries(lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum) {
+    return queryClient.invalidateQueries({
+      queryKey: [
+        'blLifeRecharge/getUserAccountAllList',
+        blLifeRecharge.accountModel.userId,
+        lifePayOrderType,
+      ],
+    });
+  }
+
+  async function addUpdateUserAccount(params: AddUpdateUserAccountInput) {
+    let res = await blLifeRecharge.services.addUpdateUserAccount(params);
+    if (res) {
+      invalidateQueries(params.lifePayType);
+    }
+    return res;
+  }
+
+  return { addUpdateUserAccount };
+}
+
+type UseSetUserAccountBySelectOptions = {
+  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>;
+  onSetUserAccount: (currentUserAccount: UserAccountListOutput) => any;
+};
+
+export function useSetUserAccountBySelect({
+  lifePayOrderType,
+  onSetUserAccount,
+}: UseSetUserAccountBySelectOptions) {
+  const { userAccountAllList } = useUserAccountAllList({
+    lifePayOrderType: lifePayOrderType,
+    onSuccess(data) {
+      if (data.length > 0) {
+        const currentUserAccount = data[0];
+        onSetUserAccount?.(currentUserAccount);
+      }
+    },
+  });
+
+  function handleUserAccountChange(val: string) {
+    const currentUserAccount = userAccountAllList.value.find((x) => x.id === val);
+    onSetUserAccount?.(currentUserAccount);
+  }
+
+  return {
+    handleUserAccountChange,
+    userAccountAllList,
+  };
+}
+
+export function useGetGasParValue() {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const { data: gasParValueList, isLoading } = useQuery({
+    queryKey: ['blLifeRecharge/getGasParValue'],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getGasParValue({}, { showLoading: false });
+    },
+    select(data) {
+      return data?.gasParValue ?? [];
+    },
+    placeholderData: () => ({} as GasParValueResponse),
+  });
+
+  return {
+    gasParValueList,
+  };
+}
+
+type UseIntroInfoOptions = {
+  lifePayOrderType: MaybeRef<LifeRechargeConstants.LifePayOrderTypeEnum>;
+  onSuccess?: (data: API.LifePayIntroInfoOutput[]) => any;
+};
+
+export function useIntroInfo({ lifePayOrderType, onSuccess }: UseIntroInfoOptions) {
+  const { blLifeRecharge } = useLifeRechargeContext();
+
+  const { data: introInfo } = useQuery({
+    queryKey: ['blLifeRecharge/getIntroInfo', lifePayOrderType],
+    queryFn: async () => {
+      return await blLifeRecharge.services.getIntroInfo(
+        {
+          type: unref(lifePayOrderType),
+        },
+        {
+          showLoading: false,
+        }
+      );
+    },
+    placeholderData: () => [] as API.LifePayIntroInfoOutput[],
+    onSuccess: (data) => {
+      onSuccess?.(data);
+    },
+  });
+
+  return { introInfo };
+}

--
Gitblit v1.9.1