|
81 | 81 | @change="applyFilters" |
82 | 82 | /> |
83 | 83 | </div> |
| 84 | + <div class="w-full sm:w-40"> |
| 85 | + <Select |
| 86 | + v-model="filters.platform" |
| 87 | + :options="platformFilterOptions" |
| 88 | + :placeholder="t('admin.subscriptions.allPlatforms')" |
| 89 | + @change="applyFilters" |
| 90 | + /> |
| 91 | + </div> |
84 | 92 | </div> |
85 | 93 |
|
86 | 94 | <!-- Right: Actions --> |
@@ -813,6 +821,7 @@ let userSearchTimeout: ReturnType<typeof setTimeout> | null = null |
813 | 821 | const filters = reactive({ |
814 | 822 | status: 'active', |
815 | 823 | group_id: '', |
| 824 | + platform: '', |
816 | 825 | user_id: null as number | null |
817 | 826 | }) |
818 | 827 |
|
@@ -855,6 +864,15 @@ const groupOptions = computed(() => [ |
855 | 864 | ...groups.value.map((g) => ({ value: g.id.toString(), label: g.name })) |
856 | 865 | ]) |
857 | 866 |
|
| 867 | +const platformFilterOptions = computed(() => [ |
| 868 | + { value: '', label: t('admin.subscriptions.allPlatforms') }, |
| 869 | + { value: 'anthropic', label: 'Anthropic' }, |
| 870 | + { value: 'openai', label: 'OpenAI' }, |
| 871 | + { value: 'gemini', label: 'Gemini' }, |
| 872 | + { value: 'antigravity', label: 'Antigravity' }, |
| 873 | + { value: 'sora', label: 'Sora' } |
| 874 | +]) |
| 875 | +
|
858 | 876 | // Group options for assign (only subscription type groups) |
859 | 877 | const subscriptionGroupOptions = computed(() => |
860 | 878 | groups.value |
@@ -890,6 +908,7 @@ const loadSubscriptions = async () => { |
890 | 908 | { |
891 | 909 | status: (filters.status as any) || undefined, |
892 | 910 | group_id: filters.group_id ? parseInt(filters.group_id) : undefined, |
| 911 | + platform: filters.platform || undefined, |
893 | 912 | user_id: filters.user_id || undefined, |
894 | 913 | sort_by: sortState.sort_by, |
895 | 914 | sort_order: sortState.sort_order |
|
0 commit comments