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