From a1ccf9499a7a04225922868e02953a9a972fbe96 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 24 二月 2025 15:26:20 +0800
Subject: [PATCH] feat: 订单

---
 packages/components/src/utils/common.ts                          |  150 +++++++++++++++++++++++++++++++++++++
 packages/components/src/utils/index.ts                           |    1 
 packages/components/src/views/Order/components/ElectricOrder.vue |   29 +++++--
 packages/components/src/views/Order/components/PhoneOrder.vue    |   24 ++++--
 apps/taro/src/stores/modules/user.ts                             |    2 
 apps/taro/src/pages/mine/index.vue                               |   15 ++-
 6 files changed, 200 insertions(+), 21 deletions(-)

diff --git a/apps/taro/src/pages/mine/index.vue b/apps/taro/src/pages/mine/index.vue
index d7d2380..7022b2f 100644
--- a/apps/taro/src/pages/mine/index.vue
+++ b/apps/taro/src/pages/mine/index.vue
@@ -35,12 +35,14 @@
 import { useSystemStore } from '@/stores/modules/system';
 import PageLayoutWithBg from '@/components/Layout/PageLayoutWithBg.vue';
 import { useUserStore } from '@/stores/modules/user';
-import { useUserStoreWithOut } from '@/stores/modules/user';
+import { Message } from '@/utils';
+import { useLifeRechargeContext } from '@life-payment/core-vue';
 
 const { userDetail, virtualPhoneNumber } = useUser();
 const isLogin = useIsLogin();
 const systemStore = useSystemStore();
 const userStore = useUserStore();
+const { blLifeRecharge } = useLifeRechargeContext();
 
 const { goLoginFn } = useGoLogin();
 const bgHeight = computed(() => 133 + systemStore.navHeight);
@@ -71,9 +73,14 @@
 
 const goOrderManage = useAccessLogin(() => goPage(RouterPath.order));
 
-function goLogout() {
-  userStore.logout();
-  useUserStoreWithOut().logout();
+async function goLogout() {
+  try {
+    await Message.confirm({
+      message: '纭畾瑕侀��鍑虹櫥褰曞悧锛�',
+    });
+    userStore.logout();
+    blLifeRecharge.loginout();
+  } catch (error) {}
 }
 </script>
 
diff --git a/apps/taro/src/stores/modules/user.ts b/apps/taro/src/stores/modules/user.ts
index 8525d95..cab0747 100644
--- a/apps/taro/src/stores/modules/user.ts
+++ b/apps/taro/src/stores/modules/user.ts
@@ -240,6 +240,8 @@
       this.token = '';
       this.refreshToken = '';
       this.userDetail = null;
+      this.virtualUserId = '';
+      this.virtualPhoneNumber = '';
       removeUserInfo();
       removeUserDetail();
       removeStorageVirtualUserId();
diff --git a/packages/components/src/utils/common.ts b/packages/components/src/utils/common.ts
new file mode 100644
index 0000000..7b0b23a
--- /dev/null
+++ b/packages/components/src/utils/common.ts
@@ -0,0 +1,150 @@
+import dayjs from 'dayjs';
+import _ from 'lodash';
+import { LifeRechargeConstants } from '@life-payment/core-vue';
+
+export function object2query(object: Record<string, string | number>) {
+  return Object.keys(object)
+    .map((key) => (object[key] ? `${key}=${object[key]}` : ''))
+    .filter(Boolean)
+    .join('&');
+}
+
+export function query2object<T extends { [key: string]: string }>(query: string): T {
+  return Object.fromEntries(
+    decodeURIComponent(query)
+      .split('&')
+      .map((x) => x.split('='))
+  );
+}
+
+export function formatTimeWithoutCurrentYear(date: string) {
+  if (!date) return date;
+  const targetDate = dayjs(date);
+  const targetYear = targetDate.year();
+  const nowYear = dayjs().year();
+  return targetYear >= nowYear
+    ? targetDate.format('MM-DD HH:mm')
+    : targetDate.format('YYYY-MM-DD HH:mm');
+}
+
+//鍘绘敹灏剧┖鏍�
+export function trim(str: string) {
+  return str.replace(/(^\s*)|(\s*$)/g, '');
+}
+
+export function paginateList<T>(list: T[], pageIndex: number, pageSize: number) {
+  const startIndex = (pageIndex - 1) * pageSize;
+  const endIndex = startIndex + pageSize;
+  return list.slice(startIndex, endIndex);
+}
+
+/**
+ * 娣诲姞鏄熷彿
+ * @param str
+ * @param start
+ * @param end
+ * @returns
+ */
+export function addStarForString(str: string, start = 0, end = 0) {
+  return str.substring(0, start) + '*'.repeat(end - start) + str.substring(end);
+}
+
+export function addStarForEmail(str: string) {
+  const end = str.lastIndexOf('.');
+  return addStarForString(str, 2, end);
+}
+
+export function formatTimeAgo(date: string, format = 'YYYY-MM-DD HH:mm') {
+  const diff = dayjs().diff(date, 'seconds'); // 璁$畻鏃堕棿宸紝鍗曚綅涓虹
+
+  if (diff < 60) {
+    return `${diff}绉掑墠`;
+  } else if (diff < 60 * 60) {
+    const minutes = Math.floor(diff / 60);
+    return `${minutes}鍒嗛挓鍓峘;
+  } else if (diff < 60 * 60 * 24) {
+    const hours = Math.floor(diff / (60 * 60));
+    return `${hours}灏忔椂鍓峘;
+  } else if (dayjs(date).isSame(dayjs(), 'day')) {
+    return dayjs(date).format('HH:mm');
+  } else {
+    // const days = Math.floor(diff / (60 * 60 * 24));
+    // return `${days}澶╁墠`;
+    return formatTimeWithoutCurrentYear(date); //dayjs(date).format(format);
+  }
+}
+
+export function toRound(val: number, num = 2) {
+  if (val >= 0) {
+    return _.round(val, num);
+  } else {
+    const abs = Math.abs(val);
+    return 0 - _.round(abs, num);
+  }
+}
+
+export function toThousand(input: string | number, toFixed = 2) {
+  const num = toRound(Number(input)).toFixed(toFixed);
+  if (Number(num) >= 0) {
+    return num.toString().replace(/(^|\s)\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','));
+  } else {
+    const posNum = (0 - Number(num)).toFixed(2);
+    return (
+      '-' + posNum.toString().replace(/(^|\s)\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
+    );
+  }
+}
+
+export function format(date: string | Date, fmt = 'YYYY-MM-DD') {
+  return date ? dayjs(date).format(fmt) : '';
+}
+
+export function formatMaxNumber(count: number, max = 9999) {
+  return count > max ? `${max}+` : count;
+}
+
+export function guid() {
+  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+    const r = (Math.random() * 16) | 0,
+      v = c === 'x' ? r : (r & 0x3) | 0x8;
+    return v.toString(16);
+  });
+}
+
+export function delay(timeout = 500) {
+  return new Promise((resolve) => {
+    setTimeout(() => {
+      resolve(1);
+    }, timeout);
+  });
+}
+
+export function filterJoin(list: any[], separator = '-') {
+  return list.filter(Boolean).join(separator);
+}
+
+export const hiddenIDNumberForEnd6 = (realIDNumber: string) =>
+  realIDNumber.replace(/^(\d+)(.{6})$/, '$1******');
+
+// 璁㈠崟鐘舵��
+export function orderStatusEnum(
+  payStatus?: LifeRechargeConstants.LifePayStatusEnum,
+  lifePayOrderStatus?: LifeRechargeConstants.LifePayOrderStatusEnum
+) {
+  if (
+    lifePayOrderStatus === LifeRechargeConstants.LifePayOrderStatusEnum.寰呯‘璁� &&
+    payStatus === LifeRechargeConstants.LifePayStatusEnum.宸叉敮浠�
+  ) {
+    return '鍏呭�兼垚鍔�';
+  }
+  if (payStatus === LifeRechargeConstants.LifePayStatusEnum.宸查��娆�) {
+    return '宸查��娆�';
+  }
+  if (
+    lifePayOrderStatus === LifeRechargeConstants.LifePayOrderStatusEnum.宸插畬鎴� &&
+    payStatus === LifeRechargeConstants.LifePayStatusEnum.宸叉敮浠�
+  ) {
+    return '鏀粯鎴愬姛';
+  }
+  return '';
+}
diff --git a/packages/components/src/utils/index.ts b/packages/components/src/utils/index.ts
index 80bf090..be0e4d7 100644
--- a/packages/components/src/utils/index.ts
+++ b/packages/components/src/utils/index.ts
@@ -1 +1,2 @@
 export * from './validator';
+export * from './common';
diff --git a/packages/components/src/views/Order/components/ElectricOrder.vue b/packages/components/src/views/Order/components/ElectricOrder.vue
index 7484844..9e45312 100644
--- a/packages/components/src/views/Order/components/ElectricOrder.vue
+++ b/packages/components/src/views/Order/components/ElectricOrder.vue
@@ -1,23 +1,33 @@
 <template>
   <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
     <template #renderItem="{ item }">
-      <OrderCard title="鐢佃垂鍏呭��" status="寰呮敮浠�" :order-no="item?.orderNo">
-        <OrderCardItem label="鍏呭�煎湴鍖�:" :value="'18888888888'" />
-        <OrderCardItem label="鍏呭�兼埛鍙�:" :value="'18888888888'" />
+      <OrderCard
+        title="鐢佃垂鍏呭��"
+        :status="orderStatusEnum(item?.payStatus, item?.lifePayOrderStatus)"
+        :order-no="item?.orderNo"
+      >
+        <OrderCardItem
+          label="鍏呭�煎湴鍖�:"
+          :value="JSON.parse(item?.orderParamDetailJsonStr)?.phone"
+        />
+        <OrderCardItem
+          label="鍏呭�兼埛鍙�:"
+          :value="JSON.parse(item?.orderParamDetailJsonStr)?.phone"
+        />
         <OrderCardItem
           label="涓嬪崟鏃堕棿:"
-          :value="dayjs(item?.creationTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.creationTime && dayjs(item?.creationTime).format('YYYY-MM-DD HH:mm:ss')"
         />
-        <OrderCardItem label="鍏呭�奸噾棰�:" :value="item?.rechargeAmount" />
-        <OrderCardItem label="浼樻儬閲戦:" :value="item?.discountAmount" />
-        <OrderCardItem label="瀹炰粯閲戦:" :value="item?.payAmount" />
+        <OrderCardItem label="鍏呭�奸噾棰�:" :value="`锟�${toThousand(item?.rechargeAmount)}`" />
+        <OrderCardItem label="浼樻儬閲戦:" :value="`锟�${toThousand(item?.discountAmount)}`" />
+        <OrderCardItem label="瀹炰粯閲戦:" :value="`锟�${toThousand(item?.payAmount)}`" />
         <OrderCardItem
           label="鏀粯鏃堕棿:"
-          :value="dayjs(item?.payTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.payTime && dayjs(item?.payTime).format('YYYY-MM-DD HH:mm:ss')"
         />
         <OrderCardItem
           label="瀹屾垚鏃堕棿:"
-          :value="dayjs(item?.finishTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.finishTime && dayjs(item?.finishTime).format('YYYY-MM-DD HH:mm:ss')"
         />
       </OrderCard>
     </template>
@@ -31,6 +41,7 @@
 import { useGetUserLifePayOrderPage } from '../../../hooks';
 import { BlLifeRecharge } from '@life-payment/core-vue';
 import dayjs from 'dayjs';
+import { toThousand, orderStatusEnum } from '../../../utils';
 
 defineOptions({
   name: 'ElectricOrder',
diff --git a/packages/components/src/views/Order/components/PhoneOrder.vue b/packages/components/src/views/Order/components/PhoneOrder.vue
index babe217..acfb987 100644
--- a/packages/components/src/views/Order/components/PhoneOrder.vue
+++ b/packages/components/src/views/Order/components/PhoneOrder.vue
@@ -1,22 +1,29 @@
 <template>
   <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
     <template #renderItem="{ item }">
-      <OrderCard title="璇濊垂鍏呭��" status="寰呮敮浠�" :order-no="item?.orderNo">
-        <OrderCardItem label="鍏呭�艰处鍙�:" :value="'18888888888'" />
+      <OrderCard
+        title="璇濊垂鍏呭��"
+        :status="orderStatusEnum(item?.payStatus, item?.lifePayOrderStatus)"
+        :order-no="item?.orderNo"
+      >
+        <OrderCardItem
+          label="鍏呭�艰处鍙�:"
+          :value="JSON.parse(item?.orderParamDetailJsonStr)?.phone"
+        />
         <OrderCardItem
           label="涓嬪崟鏃堕棿:"
-          :value="dayjs(item?.creationTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.creationTime && dayjs(item?.creationTime).format('YYYY-MM-DD HH:mm:ss')"
         />
-        <OrderCardItem label="鍏呭�奸噾棰�:" :value="item?.rechargeAmount" />
-        <OrderCardItem label="浼樻儬閲戦:" :value="item?.discountAmount" />
-        <OrderCardItem label="瀹炰粯閲戦:" :value="item?.payAmount" />
+        <OrderCardItem label="鍏呭�奸噾棰�:" :value="`锟�${toThousand(item?.rechargeAmount)}`" />
+        <OrderCardItem label="浼樻儬閲戦:" :value="`锟�${toThousand(item?.discountAmount)}`" />
+        <OrderCardItem label="瀹炰粯閲戦:" :value="`锟�${toThousand(item?.payAmount)}`" />
         <OrderCardItem
           label="鏀粯鏃堕棿:"
-          :value="dayjs(item?.payTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.payTime && dayjs(item?.payTime).format('YYYY-MM-DD HH:mm:ss')"
         />
         <OrderCardItem
           label="瀹屾垚鏃堕棿:"
-          :value="dayjs(item?.finishTime).format('YYYY-MM-DD HH:mm:ss')"
+          :value="item?.finishTime && dayjs(item?.finishTime).format('YYYY-MM-DD HH:mm:ss')"
         />
       </OrderCard>
     </template>
@@ -30,6 +37,7 @@
 import { useGetUserLifePayOrderPage } from '../../../hooks';
 import dayjs from 'dayjs';
 import { BlLifeRecharge } from '@life-payment/core-vue';
+import { toThousand, orderStatusEnum } from '../../../utils';
 
 defineOptions({
   name: 'PhoneOrder',

--
Gitblit v1.9.1