wupengfei
2025-02-24 a1ccf9499a7a04225922868e02953a9a972fbe96
feat: 订单
5个文件已修改
1个文件已添加
221 ■■■■■ 已修改文件
apps/taro/src/pages/mine/index.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/taro/src/stores/modules/user.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/utils/common.ts 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/utils/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/ElectricOrder.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/views/Order/components/PhoneOrder.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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();
packages/components/src/utils/common.ts
New file
@@ -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 '';
}
packages/components/src/utils/index.ts
@@ -1 +1,2 @@
export * from './validator';
export * from './common';
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',
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',