Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions frontend/src/i18n/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3071,6 +3071,8 @@ export default {
noActiveSubscriptionsDesc:
"You don't have any active subscriptions. Contact administrator to get one.",
failedToLoad: 'Failed to load subscriptions',
today: 'Today',
tomorrow: 'Tomorrow',
status: {
active: 'Active',
expired: 'Expired',
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/i18n/locales/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3219,6 +3219,8 @@ export default {
noActiveSubscriptions: '暂无有效订阅',
noActiveSubscriptionsDesc: '您没有任何有效订阅。请联系管理员获取订阅。',
failedToLoad: '加载订阅失败',
today: '今天',
tomorrow: '明天',
status: {
active: '有效',
expired: '已过期',
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/views/admin/SubscriptionsView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@
: 'text-gray-700 dark:text-gray-300'
"
>
{{ formatDateOnly(value) }}
{{ formatDateTime(value) }}
</span>
<div v-if="getDaysRemaining(value) !== null" class="text-xs text-gray-500">
{{ getDaysRemaining(value) }} {{ t('admin.subscriptions.daysRemaining') }}
Expand Down Expand Up @@ -564,7 +564,7 @@
<span class="font-medium text-gray-900 dark:text-white">
{{
extendingSubscription.expires_at
? formatDateOnly(extendingSubscription.expires_at)
? formatDateTime(extendingSubscription.expires_at)
: t('admin.subscriptions.noExpiration')
}}
</span>
Expand Down Expand Up @@ -629,7 +629,7 @@ import { adminAPI } from '@/api/admin'
import type { UserSubscription, Group, GroupPlatform, SubscriptionType } from '@/types'
import type { SimpleUser } from '@/api/admin/usage'
import type { Column } from '@/components/common/types'
import { formatDateOnly } from '@/utils/format'
import { formatDateTime } from '@/utils/format'
import AppLayout from '@/components/layout/AppLayout.vue'
import TablePageLayout from '@/components/layout/TablePageLayout.vue'
import DataTable from '@/components/common/DataTable.vue'
Expand Down
10 changes: 5 additions & 5 deletions frontend/src/views/user/SubscriptionsView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ import subscriptionsAPI from '@/api/subscriptions'
import type { UserSubscription } from '@/types'
import AppLayout from '@/components/layout/AppLayout.vue'
import Icon from '@/components/icons/Icon.vue'
import { formatDateOnly } from '@/utils/format'
import { formatDateTime } from '@/utils/format'

const { t } = useI18n()
const appStore = useAppStore()
Expand Down Expand Up @@ -286,16 +286,16 @@ function formatExpirationDate(expiresAt: string): string {
return t('userSubscriptions.status.expired')
}

const dateStr = formatDateOnly(expires)
const dateTimeStr = formatDateTime(expires)

if (days === 0) {
return `${dateStr} (Today)`
return `${dateTimeStr} (${t('userSubscriptions.today')})`
}
if (days === 1) {
return `${dateStr} (Tomorrow)`
return `${dateTimeStr} (${t('userSubscriptions.tomorrow')})`
}

return t('userSubscriptions.daysRemaining', { days }) + ` (${dateStr})`
return t('userSubscriptions.daysRemaining', { days }) + ` (${dateTimeStr})`
}

function getExpirationClass(expiresAt: string): string {
Expand Down
Loading