diff --git a/frontend/src/views/dashboard/components/AnimatedMetricValue.vue b/frontend/src/components/AnimatedMetricValue.vue similarity index 100% rename from frontend/src/views/dashboard/components/AnimatedMetricValue.vue rename to frontend/src/components/AnimatedMetricValue.vue diff --git a/frontend/src/views/accounts/components/AccountPlanBadge.vue b/frontend/src/components/account/AccountPlanBadge.vue similarity index 97% rename from frontend/src/views/accounts/components/AccountPlanBadge.vue rename to frontend/src/components/account/AccountPlanBadge.vue index 906717c18..0f053d6f5 100644 --- a/frontend/src/views/accounts/components/AccountPlanBadge.vue +++ b/frontend/src/components/account/AccountPlanBadge.vue @@ -1,7 +1,7 @@ @@ -15,7 +15,7 @@ defineProps<{ > {{ usageReasoningEffort(record) }} import type { BaseTableColumn } from '@codex-proxy/ui' -import type { UsageDisplayRecord } from '../utils/records' +import type { UsageListRecord } from '@/api' + import { BaseTable } from '@codex-proxy/ui' import { Minimize2 } from '@lucide/vue' +import AccountPlanBadge from '@/components/account/AccountPlanBadge.vue' import ProviderIconGroup from '@/components/ProviderIconGroup.vue' -import AccountPlanBadge from '@/views/accounts/components/AccountPlanBadge.vue' +import UsageBillingCell from '@/components/usage/UsageBillingCell.vue' +import UsageClientIpCell from '@/components/usage/UsageClientIpCell.vue' +import UsageLatencyCell from '@/components/usage/UsageLatencyCell.vue' +import UsageModelCell from '@/components/usage/UsageModelCell.vue' +import UsageReasoningEffortCell from '@/components/usage/UsageReasoningEffortCell.vue' +import UsageTokenCell from '@/components/usage/UsageTokenCell.vue' +import UsageTransportBadge from '@/components/usage/UsageTransportBadge.vue' import { usageAccountText, - usageAuthenticationKind, - usageIsCompact, usageUserAgent, -} from '../utils/records' -import UsageBillingCell from './UsageBillingCell.vue' -import UsageClientIpCell from './UsageClientIpCell.vue' -import UsageLatencyCell from './UsageLatencyCell.vue' -import UsageModelCell from './UsageModelCell.vue' -import UsageReasoningEffortCell from './UsageReasoningEffortCell.vue' -import UsageTokenCell from './UsageTokenCell.vue' -import UsageTransportBadge from './UsageTransportBadge.vue' +} from './shared/presenter' // 使用记录表只负责该领域的单元格呈现;筛选与分页由页面组合。 withDefaults( defineProps<{ - columns: BaseTableColumn[] - rows: UsageDisplayRecord[] + columns: BaseTableColumn[] + rows: UsageListRecord[] loading?: boolean emptyText?: string }>(), @@ -53,7 +52,7 @@ withDefaults( @@ -105,7 +104,7 @@ withDefaults(
{{ row.route || '—' }} -import type { UsageDisplayRecord } from '../utils/records' +import type { UsageListRecord } from '@/api' + import { Archive, ArrowDown, ArrowUp } from '@lucide/vue' import { computed } from 'vue' -import { usageTokenDetails } from '../utils/records' -import UsageDetailPopover from './UsageDetailPopover.vue' +import UsageDetailPopover from '@/components/usage/UsageDetailPopover.vue' const props = defineProps<{ - record: Pick + record: Pick }>() -const tokenDetails = computed(() => usageTokenDetails(props.record)) +const tokenDetails = computed(() => props.record.tokenDetails) const tokenItems = computed(() => [ { label: '输入 Token', value: tokenDetails.value.inputTokensDisplay }, { label: '输出 Token', value: tokenDetails.value.outputTokensDisplay }, diff --git a/frontend/src/views/usage/components/UsageTransportBadge.vue b/frontend/src/components/usage/UsageTransportBadge.vue similarity index 80% rename from frontend/src/views/usage/components/UsageTransportBadge.vue rename to frontend/src/components/usage/UsageTransportBadge.vue index e3fcba961..5bc9f7058 100644 --- a/frontend/src/views/usage/components/UsageTransportBadge.vue +++ b/frontend/src/components/usage/UsageTransportBadge.vue @@ -1,5 +1,5 @@ diff --git a/frontend/src/views/keys/components/ApiKeyCreatedModal.vue b/frontend/src/views/keys/components/ApiKeyCreatedModal.vue new file mode 100644 index 000000000..75f74dddd --- /dev/null +++ b/frontend/src/views/keys/components/ApiKeyCreatedModal.vue @@ -0,0 +1,62 @@ + + + diff --git a/frontend/src/views/keys/components/ApiKeyCreateModal.vue b/frontend/src/views/keys/components/ApiKeyFormModal.vue similarity index 60% rename from frontend/src/views/keys/components/ApiKeyCreateModal.vue rename to frontend/src/views/keys/components/ApiKeyFormModal.vue index a14852b9d..09b9c0022 100644 --- a/frontend/src/views/keys/components/ApiKeyCreateModal.vue +++ b/frontend/src/views/keys/components/ApiKeyFormModal.vue @@ -1,9 +1,9 @@ - + + pluginContributionEntries(props.metadata)) +const entries = computed(() => Object.entries(props.metadata.contributes)) const visible = computed(() => entries.value.slice(0, 2)) const hidden = computed(() => entries.value.slice(2)) diff --git a/frontend/src/views/plugins/components/PluginCatalogPanel.vue b/frontend/src/views/plugins/components/PluginCatalogPanel.vue index ccd2b09ea..cfb6698c5 100644 --- a/frontend/src/views/plugins/components/PluginCatalogPanel.vue +++ b/frontend/src/views/plugins/components/PluginCatalogPanel.vue @@ -3,7 +3,8 @@ import type { InstalledPlugin } from '../utils/catalog' import { BaseButton, BaseCard, BaseEmpty, BaseIconButton, BaseInput, BaseScrollbar, BaseSegmented, BaseSelect, BaseTable, BaseTablePagination, BaseTag, defineTableColumns } from '@codex-proxy/ui' import { CircleAlert, LayoutGrid, List, Puzzle, Search, Settings2 } from '@lucide/vue' import { computed, shallowRef, watch } from 'vue' -import { currentPluginInstance, PLUGIN_STATUS_LABELS, pluginStatus, pluginStatusType } from '../utils/catalog' +import { PLUGIN_STATUS_LABELS } from '../constants' +import { currentPluginInstance, pluginStatus, pluginStatusType } from '../utils/catalog' import PluginCapabilityTags from './PluginCapabilityTags.vue' import PluginCompatibilityWarning from './PluginCompatibilityWarning.vue' import PluginIcon from './PluginIcon.vue' diff --git a/frontend/src/views/plugins/components/PluginConfigurationFields.vue b/frontend/src/views/plugins/components/PluginConfigurationFields.vue index ea14aa1ec..f8309d64d 100644 --- a/frontend/src/views/plugins/components/PluginConfigurationFields.vue +++ b/frontend/src/views/plugins/components/PluginConfigurationFields.vue @@ -1,11 +1,12 @@ diff --git a/frontend/src/views/settings/components/backup/BackupScheduleCard.vue b/frontend/src/views/settings/components/backup/BackupScheduleCard.vue index d5c0d89a5..01e6d0f46 100644 --- a/frontend/src/views/settings/components/backup/BackupScheduleCard.vue +++ b/frontend/src/views/settings/components/backup/BackupScheduleCard.vue @@ -11,7 +11,7 @@ interface ScheduleForm { } defineProps<{ - loading: boolean + disabled: boolean saving: boolean storageReady: boolean }>() @@ -21,6 +21,10 @@ const emit = defineEmits<{ }>() const schedule = defineModel('schedule', { required: true }) + +function updateSchedule(key: Key, value: ScheduleForm[Key]) { + schedule.value = { ...schedule.value, [key]: value } +}