Merge pull request #1106 from geminiwen/feat/subscription-platform-filter

feat: add platform type filter to subscription management
This commit is contained in:
Wesley Liddick
2026-03-18 11:32:35 +08:00
committed by GitHub
13 changed files with 40 additions and 13 deletions

View File

@@ -27,6 +27,7 @@ export async function list(
status?: 'active' | 'expired' | 'revoked'
user_id?: number
group_id?: number
platform?: string
sort_by?: string
sort_order?: 'asc' | 'desc'
},

View File

@@ -1702,6 +1702,7 @@ export default {
revokeSubscription: 'Revoke Subscription',
allStatus: 'All Status',
allGroups: 'All Groups',
allPlatforms: 'All Platforms',
daily: 'Daily',
weekly: 'Weekly',
monthly: 'Monthly',

View File

@@ -1782,6 +1782,7 @@ export default {
revokeSubscription: '撤销订阅',
allStatus: '全部状态',
allGroups: '全部分组',
allPlatforms: '全部平台',
daily: '每日',
weekly: '每周',
monthly: '每月',

View File

@@ -81,6 +81,14 @@
@change="applyFilters"
/>
</div>
<div class="w-full sm:w-40">
<Select
v-model="filters.platform"
:options="platformFilterOptions"
:placeholder="t('admin.subscriptions.allPlatforms')"
@change="applyFilters"
/>
</div>
</div>
<!-- Right: Actions -->
@@ -908,6 +916,7 @@ let userSearchTimeout: ReturnType<typeof setTimeout> | null = null
const filters = reactive({
status: 'active',
group_id: '',
platform: '',
user_id: null as number | null
})
@@ -950,6 +959,15 @@ const groupOptions = computed(() => [
...groups.value.map((g) => ({ value: g.id.toString(), label: g.name }))
])
const platformFilterOptions = computed(() => [
{ value: '', label: t('admin.subscriptions.allPlatforms') },
{ value: 'anthropic', label: 'Anthropic' },
{ value: 'openai', label: 'OpenAI' },
{ value: 'gemini', label: 'Gemini' },
{ value: 'antigravity', label: 'Antigravity' },
{ value: 'sora', label: 'Sora' }
])
// Group options for assign (only subscription type groups)
const subscriptionGroupOptions = computed(() =>
groups.value
@@ -985,6 +1003,7 @@ const loadSubscriptions = async () => {
{
status: (filters.status as any) || undefined,
group_id: filters.group_id ? parseInt(filters.group_id) : undefined,
platform: filters.platform || undefined,
user_id: filters.user_id || undefined,
sort_by: sortState.sort_by,
sort_order: sortState.sort_order