统一前端共享工具入口

This commit is contained in:
yml
2026-06-09 20:50:57 +08:00
parent 684e30862d
commit 60324765c5
69 changed files with 106 additions and 1142 deletions
@@ -3,7 +3,10 @@ import { ElMessage } from 'element-plus'
import { computed, ref, watch } from 'vue'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { getSystemConfigSelectOptions, type SystemConfigOption } from '@/utils/systemConfigOptions'
import {
getSystemConfigSelectOptions,
type SystemConfigOption,
} from '@/shared/utils/systemConfigOptions'
const props = defineProps<{
modelValue: boolean
@@ -4,7 +4,7 @@ import { ref, watch } from 'vue'
import { defaultHomeAnnouncements, mergeHomeConfig } from '@/features/listings/api/homeConfig'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const props = defineProps<{
modelValue: boolean
@@ -9,7 +9,7 @@ import {
type HomeBannerSlide,
} from '@/features/listings/api/homeConfig'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const props = defineProps<{
modelValue: boolean
@@ -4,7 +4,7 @@ import { ref, watch } from 'vue'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import type { ListingPublishAgreements } from '@/features/listings/api/listingOptions'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const defaultListingPublishAgreements: ListingPublishAgreements = {
virtual_asset_sale: {
@@ -4,7 +4,7 @@ import { ref, watch } from 'vue'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import type { OrderAgreements } from '@/features/orders/api/orders'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const defaultOrderAgreements: OrderAgreements = {
virtual_asset_purchase: {
@@ -10,7 +10,7 @@ import {
type CreatePaymentConfigRequest,
type UpdatePaymentConfigRequest,
} from '@/features/admin/api/paymentConfig'
import { readError } from '@/utils/error'
import { readError } from '@/shared/utils/error'
const props = defineProps<{
modelValue: boolean
@@ -3,7 +3,7 @@ import { ElMessage } from 'element-plus'
import { ref, watch } from 'vue'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
interface PostRentalNotice {
title: string
@@ -8,7 +8,7 @@ import {
type ListingPublishOptions,
} from '@/features/listings/api/listingOptions'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const props = defineProps<{
modelValue: boolean
@@ -8,7 +8,7 @@ import {
type PublishSalePriceConfig,
} from '@/features/listings/api/listingOptions'
import { updateSystemConfig, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { safeParseJSON } from '@/utils/json'
import { safeParseJSON } from '@/shared/utils/json'
const props = defineProps<{
modelValue: boolean
@@ -23,7 +23,7 @@ import {
type UpdateAnnouncementRequest,
} from '@/features/admin/api/adminAnnouncements'
import type { Announcement } from '@/features/announcement'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import AnnouncementDialog from '../components/AnnouncementDialog.vue'
import AdminTablePagination from '../components/AdminTablePagination.vue'
@@ -3,7 +3,7 @@ import { Search } from '@element-plus/icons-vue'
import { computed, onMounted, reactive, ref } from 'vue'
import { fetchAdminAuditLogs, type AdminAuditLog } from '@/features/admin/api/adminAudit'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
@@ -19,7 +19,7 @@ import ChatAttachmentImage from '@/components/ChatAttachmentImage.vue'
import { useChatSSE, type ChatEvent } from '@/features/chats/composables/useChatSSE'
import { useDesktopNotification } from '@/features/chats/composables/useDesktopNotification'
import NotificationSettings from '@/features/chats/components/NotificationSettings.vue'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
import TransferDialog from '../components/TransferDialog.vue'
import QuickReplyDialog from '../components/QuickReplyDialog.vue'
@@ -18,8 +18,8 @@ import {
import { fetchAdminDashboard, type AdminDashboard } from '@/features/admin/api/adminDashboard'
import { useAdminTable } from '@/features/admin/composables/useAdminTable'
import { formatCentWithSymbol } from '@/shared/utils/money'
import { disputeStatusLabel, orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { disputeStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
const {
loading,
@@ -4,9 +4,9 @@ import { computed, onMounted, ref } from 'vue'
import { arbitrateDispute, fetchAdminDisputes, type Dispute } from '@/features/disputes'
import { fetchAdminFileBlob } from '@/shared/api/files'
import { disputeStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { disputeStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
import { yuanToCent } from '@/shared/utils/money'
import AdminTablePagination from '../components/AdminTablePagination.vue'
@@ -8,7 +8,7 @@ import {
type FinanceDailyItem,
} from '@/features/admin/api/adminFinance'
import { formatCentWithSymbol } from '@/shared/utils/money'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const loading = ref(false)
const dashboard = ref<FinanceDashboard | null>(null)
@@ -4,8 +4,8 @@ import { onMounted, reactive, ref } from 'vue'
import { fetchFinanceDetails, type FinanceDetail } from '@/features/admin/api/adminFinance'
import { formatCentWithSymbol } from '@/shared/utils/money'
import { orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
@@ -12,9 +12,9 @@ import {
fetchAdminListing,
type Listing,
} from '@/features/listings'
import { listingReviewStatusLabel, listingStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingCode } from '@/utils/listingDisplay'
import { listingReviewStatusLabel, listingStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingCode } from '@/shared/utils/listingDisplay'
const route = useRoute()
const loading = ref(false)
@@ -23,8 +23,8 @@ import {
getSkinNames,
readAssetNumber,
readAssetString,
} from '@/utils/listingDisplay'
import { formatDateTime } from '@/utils/time'
} from '@/shared/utils/listingDisplay'
import { formatDateTime } from '@/shared/utils/time'
type RiskLevel = 'danger' | 'warning' | 'info'
@@ -21,7 +21,7 @@ import {
getDailyLoss,
getResourceQuantity,
getSkinGroup,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
const filters = reactive<AdminListingQuery>({
owner_id: '',
@@ -9,7 +9,7 @@ import {
type AdminMgrUser,
} from '@/features/admin/api/adminMgr'
import { useAdminPaginatedTable } from '@/features/admin/composables/useAdminPaginatedTable'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import AdminUserDialog from '../components/AdminUserDialog.vue'
import AssignRolesDialog from '../components/AssignRolesDialog.vue'
@@ -16,9 +16,9 @@ import {
} from '@/features/orders'
import { fetchAdminPayments, type AdminPayment } from '@/features/admin/api/adminPayments'
import { centToYuan, formatCentWithSymbol, formatMoney } from '@/shared/utils/money'
import { handoffStatusLabel, orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { handoffStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const route = useRoute()
const loading = ref(false)
@@ -2,10 +2,14 @@
import { computed, onMounted, ref } from 'vue'
import { fetchAdminOrders, type Order } from '@/features/orders'
import { handoffStatusLabel, orderStatusLabel, settlementStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import {
handoffStatusLabel,
orderStatusLabel,
settlementStatusLabel,
} from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { centToYuan, formatMoney } from '@/shared/utils/money'
import { formatListingNo } from '@/utils/listingDisplay'
import { formatListingNo } from '@/shared/utils/listingDisplay'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const status = ref('')
@@ -10,9 +10,9 @@ import {
importPaymentConfigBackup,
type PaymentConfig,
} from '@/features/admin/api/paymentConfig'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import { formatCent } from '@/shared/utils/money'
import { readError } from '@/utils/error'
import { readError } from '@/shared/utils/error'
import PaymentConfigDialog from '../components/PaymentConfigDialog.vue'
const loading = ref(false)
@@ -4,7 +4,7 @@ import { computed, onMounted, reactive, ref } from 'vue'
import { fetchAdminPayments, type AdminPayment } from '@/features/admin/api/adminPayments'
import { formatCentWithSymbol } from '@/shared/utils/money'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
@@ -18,9 +18,9 @@ import {
} from '@/features/listings/api/homeConfig'
import type { OrderAgreements } from '@/features/orders/api/orders'
import { fetchSystemConfigs, type SystemConfig } from '@/features/admin/api/systemConfigs'
import { formatDateTime } from '@/utils/time'
import { safeParseJSON } from '@/utils/json'
import { formatSystemConfigSelectValue } from '@/utils/systemConfigOptions'
import { formatDateTime } from '@/shared/utils/time'
import { safeParseJSON } from '@/shared/utils/json'
import { formatSystemConfigSelectValue } from '@/shared/utils/systemConfigOptions'
// 导入重构后的 Dialog 子组件
import PublishOptionsDialog from '../components/PublishOptionsDialog.vue'
@@ -11,8 +11,8 @@ import {
} from '@/features/admin/api/adminUsers'
import { centToYuan, formatCent, yuanToCent } from '@/shared/utils/money'
import { useAdminPaginatedTable } from '@/features/admin/composables/useAdminPaginatedTable'
import { userStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { userStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const submitting = ref(false)
@@ -4,8 +4,8 @@ import { computed, onMounted, reactive, ref } from 'vue'
import { fetchAdminWalletLedger, type AdminWalletLedger } from '@/features/admin/api/adminWallet'
import { formatCentWithSymbol } from '@/shared/utils/money'
import { balanceTypeLabel, ledgerDirectionLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { balanceTypeLabel, ledgerDirectionLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import AdminTablePagination from '../components/AdminTablePagination.vue'
const loading = ref(false)
@@ -11,7 +11,7 @@ import {
Warning,
} from '@element-plus/icons-vue'
import { fetchAnnouncementDetail, type Announcement } from '@/features/announcement'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
import { marked } from 'marked'
const route = useRoute()
@@ -10,7 +10,7 @@ import {
Warning,
} from '@element-plus/icons-vue'
import { fetchAnnouncements, type Announcement } from '@/features/announcement'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const router = useRouter()
const loading = ref(false)
@@ -4,7 +4,7 @@ import { useRoute, useRouter } from 'vue-router'
import { showToast } from 'vant'
import { marked } from 'marked'
import { fetchAnnouncementDetail, type Announcement } from '@/features/announcement'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const route = useRoute()
const router = useRouter()
@@ -4,7 +4,7 @@ import { useRouter } from 'vue-router'
import { showToast } from 'vant'
import MobileBottomNav from '@/components/MobileBottomNav.vue'
import { fetchAnnouncements, type Announcement } from '@/features/announcement'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const router = useRouter()
const loading = ref(false)
@@ -11,7 +11,7 @@ import {
type WalletLedger,
} from '@/features/wallet/api/wallet'
import { fetchPostRentalNotice, type PostRentalNotice } from '@/features/orders/api/orders'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
import { uploadFile } from '@/shared/api/files'
import { formatCent } from '@/shared/utils/money'
@@ -3,9 +3,9 @@ import { onMounted, reactive, ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { showToast, showDialog } from 'vant'
import { getRealnameStatus, startRealname, type RealnameStatus } from '@/features/auth/api/realname'
import { realnameStatusLabel } from '@/utils/statusLabels'
import { realnameStatusLabel } from '@/shared/utils/statusLabels'
import { useSessionStore } from '@/stores/session'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const session = useSessionStore()
const router = useRouter()
@@ -7,7 +7,7 @@ import {
markNotificationRead,
type NotificationItem,
} from '@/features/auth/api/notifications'
import { formatDateTime } from '@/utils/time'
import { formatDateTime } from '@/shared/utils/time'
const loading = ref(false)
const notifications = ref<NotificationItem[]>([])
@@ -23,7 +23,7 @@ import { useRouter } from 'vue-router'
import { uploadFile } from '@/shared/api/files'
import { useSessionStore } from '@/stores/session'
import { realnameStatusLabel } from '@/utils/statusLabels'
import { realnameStatusLabel } from '@/shared/utils/statusLabels'
const session = useSessionStore()
const router = useRouter()
@@ -15,8 +15,8 @@ import { useRoute, useRouter } from 'vue-router'
import { getRealnameStatus, startRealname, type RealnameStatus } from '@/features/auth/api/realname'
import { useSessionStore } from '@/stores/session'
import { realnameStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { realnameStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
const session = useSessionStore()
const route = useRoute()
@@ -1,6 +1,6 @@
import { onBeforeUnmount, ref, type Ref } from 'vue'
import { refreshAccessToken } from '@/shared/api/client'
import { getAccessToken, type AuthScope } from '@/utils/authStorage'
import { getAccessToken, type AuthScope } from '@/shared/utils/authStorage'
export interface SSEMessage {
id: number
@@ -15,7 +15,7 @@ import { uploadFile } from '@/shared/api/files'
import ChatAttachmentImage from '@/components/ChatAttachmentImage.vue'
import { useChatSSE, type ChatEvent } from '@/features/chats/composables/useChatSSE'
import { useDesktopNotification } from '@/features/chats/composables/useDesktopNotification'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
const currentUserId = Number(localStorage.getItem('user_id') || 0)
@@ -7,7 +7,7 @@ import { fetchChats, type ChatConversation } from '@/features/chats/api/chats'
import { useChatSSE, type ChatEvent } from '@/features/chats/composables/useChatSSE'
import { useDesktopNotification } from '@/features/chats/composables/useDesktopNotification'
import NotificationSettings from '@/features/chats/components/NotificationSettings.vue'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
const router = useRouter()
const currentUserId = Number(localStorage.getItem('user_id') || 0)
@@ -14,7 +14,7 @@ import { uploadFile } from '@/shared/api/files'
import ChatAttachmentImage from '@/components/ChatAttachmentImage.vue'
import { useChatSSE, type ChatEvent } from '@/features/chats/composables/useChatSSE'
import { useDesktopNotification } from '@/features/chats/composables/useDesktopNotification'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
const currentUserId = Number(localStorage.getItem('user_id') || 0)
@@ -4,7 +4,7 @@ import { useRouter } from 'vue-router'
import { showToast } from 'vant'
import MobileBottomNav from '@/components/MobileBottomNav.vue'
import { fetchChats, type ChatConversation } from '@/features/chats/api/chats'
import { formatDateMinute } from '@/utils/time'
import { formatDateMinute } from '@/shared/utils/time'
const router = useRouter()
const loading = ref(false)
@@ -21,7 +21,7 @@ import {
readAssetString,
getRatioValue,
type ListingDisplayResource,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
interface Props {
listing: Listing
@@ -31,7 +31,7 @@ import {
getLoginMethod,
getServerRegion,
readAssetString,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
const route = useRoute()
const router = useRouter()
@@ -28,7 +28,7 @@ import {
hasGiftResources,
readAssetNumber,
readAssetString,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
/* ------------------------------------------------------------------ */
/* 数据加载 */
@@ -34,7 +34,7 @@ import {
assetRegions,
hasAcceleratedSaleRatio,
hasGiftResources,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
import { useSessionStore } from '@/stores/session'
const router = useRouter()
@@ -29,7 +29,7 @@ import {
getLoginMethod,
getServerRegion,
readAssetString,
} from '@/utils/listingDisplay'
} from '@/shared/utils/listingDisplay'
const route = useRoute()
const router = useRouter()
@@ -23,9 +23,9 @@ import {
type PaymentOrder,
} from '@/features/orders/api/orders'
import { useSessionStore } from '@/stores/session'
import { handoffStatusLabel, orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { handoffStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const route = useRoute()
const router = useRouter()
@@ -12,8 +12,8 @@ import {
} from '@/features/orders/api/orders'
import { centToYuan, formatMoney } from '@/shared/utils/money'
import { useSessionStore } from '@/stores/session'
import { formatDateMinute } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { formatDateMinute } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const router = useRouter()
const route = useRoute()
@@ -26,9 +26,9 @@ import {
type PaymentOrder,
} from '@/features/orders'
import { useSessionStore } from '@/stores/session'
import { handoffStatusLabel, orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { handoffStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const route = useRoute()
const router = useRouter()
@@ -7,9 +7,9 @@ import { CopyDocument, Search } from '@element-plus/icons-vue'
import { fetchOrders, type Order } from '@/features/orders'
import { centToYuan, formatMoney } from '@/shared/utils/money'
import { useSessionStore } from '@/stores/session'
import { orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { formatListingNo } from '@/utils/listingDisplay'
import { orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const loading = ref(false)
const orders = ref<Order[]>([])
@@ -27,7 +27,12 @@ import {
} from '@/features/seller/composables/usePublishDraft'
import type { PublishForm } from '@/types/publish'
import { yuanToCent } from '@/shared/utils/money'
import { commonOnlineTimes, dailyLossOptions, formatNumber, roundRatio } from '@/utils/pricing'
import {
commonOnlineTimes,
dailyLossOptions,
formatNumber,
roundRatio,
} from '@/shared/utils/pricing'
const draftSaveDelay = 400
const multiScreenshotLimit = 3
@@ -3,10 +3,10 @@ import { computed, onMounted, ref } from 'vue'
import { fetchOrders, type Order } from '@/features/orders'
import { useSessionStore } from '@/stores/session'
import { handoffStatusLabel, orderStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import { handoffStatusLabel, orderStatusLabel } from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { centToYuan, formatMoney } from '@/shared/utils/money'
import { formatListingNo } from '@/utils/listingDisplay'
import { formatListingNo } from '@/shared/utils/listingDisplay'
const session = useSessionStore()
const loading = ref(false)
@@ -10,8 +10,8 @@ import {
type Listing,
} from '@/features/listings'
import { formatCent, formatMoneyWithSymbol } from '@/shared/utils/money'
import { listingReviewStatusLabel, listingStatusLabel } from '@/utils/statusLabels'
import { formatListingCode, getListingSellerPrice } from '@/utils/listingDisplay'
import { listingReviewStatusLabel, listingStatusLabel } from '@/shared/utils/statusLabels'
import { formatListingCode, getListingSellerPrice } from '@/shared/utils/listingDisplay'
const loading = ref(false)
const submittingID = ref<number | null>(null)
@@ -23,8 +23,12 @@ import {
type WalletLedger,
} from '@/features/wallet'
import type { PaymentOrder } from '@/features/orders'
import { balanceTypeLabel, ledgerDirectionLabel, walletStatusLabel } from '@/utils/statusLabels'
import { formatDateTime } from '@/utils/time'
import {
balanceTypeLabel,
ledgerDirectionLabel,
walletStatusLabel,
} from '@/shared/utils/statusLabels'
import { formatDateTime } from '@/shared/utils/time'
import { formatCentWithSymbol, formatMoney } from '@/shared/utils/money'
const router = useRouter()