From e1e09a671f6c67167fd4291ace80f50786e1bd25 Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 19 Jun 2026 16:49:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=90=8D=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=94=A8=E6=88=B7=E6=B8=A0=E9=81=93=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 2 +- src/api/admin/types.ts | 1 + src/main.ts | 2 + .../admin/competition/CompetitionFormView.vue | 50 +++++++++++++++++-- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/App.vue b/src/App.vue index a78fb6f..14949a0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,4 +4,4 @@ import { RouterView } from 'vue-router' + \ No newline at end of file diff --git a/src/api/admin/types.ts b/src/api/admin/types.ts index a969789..2406dd9 100644 --- a/src/api/admin/types.ts +++ b/src/api/admin/types.ts @@ -102,6 +102,7 @@ export interface AdminApplicationListParams { track?: string keyword?: string signup_channel_id?: number + public_source_channel_id?: number } export type AdminApplicationExportMode = 'xlsx' | 'selected' | 'all' diff --git a/src/main.ts b/src/main.ts index 6db4961..03df983 100644 --- a/src/main.ts +++ b/src/main.ts @@ -18,4 +18,6 @@ router.afterEach(() => { void capturePublicSourceFromLocation() }) +document.documentElement.dataset.adminBuildMarker = '2026-06-19-frontend-rebuild' + createApp(App).use(pinia).use(router).use(ElementPlus, { locale: zhCn }).mount('#app') diff --git a/src/views/admin/competition/CompetitionFormView.vue b/src/views/admin/competition/CompetitionFormView.vue index 09dbefd..070a9b4 100644 --- a/src/views/admin/competition/CompetitionFormView.vue +++ b/src/views/admin/competition/CompetitionFormView.vue @@ -20,6 +20,7 @@ import { listSignupChannels, updateSignupChannel, } from '../../../api/admin/signupChannels' +import { listPublicSourceChannels } from '../../../api/admin/publicSourceChannels' import { downloadAdminApplicationFile, exportAdminApplications, @@ -37,6 +38,7 @@ import type { CompetitionTrackPayload, CompetitionTrackRow, FormSchemaRow, + PublicSourceChannelRow, SignupChannelPayload, SignupChannelRow, } from '../../../api/admin/types' @@ -99,6 +101,8 @@ const tracks = ref([]) const tracksLoading = ref(false) const channels = ref([]) const channelsLoading = ref(false) +const publicSourceChannels = ref([]) +const publicSourceChannelsLoading = ref(false) const applications = ref([]) const selectedApplications = ref([]) const applicationsLoading = ref(false) @@ -117,6 +121,7 @@ const applicationFilters = ref({ status: 'submitted', track: '', signup_channel_id: undefined as number | undefined, + public_source_channel_id: undefined as number | undefined, }) const trackDialogVisible = ref(false) @@ -289,6 +294,7 @@ watch(tabKey, (t) => { if (t === 'channels') void refreshChannels() if (t === 'applications') { void refreshChannels() + void refreshPublicSourceChannels() void refreshApplications() } if (t === 'signupForm') void refreshSignupSchemas() @@ -637,6 +643,18 @@ async function refreshChannels() { } } +async function refreshPublicSourceChannels() { + publicSourceChannelsLoading.value = true + try { + publicSourceChannels.value = await listPublicSourceChannels() + } catch (e) { + publicSourceChannels.value = [] + ElMessage.error(e instanceof Error ? e.message : '加载用户渠道列表失败') + } finally { + publicSourceChannelsLoading.value = false + } +} + function applicationStatusLabel(status: string): string { if (status === 'submitted') return '已提交' if (status === 'draft') return '草稿' @@ -714,6 +732,7 @@ async function refreshApplications(page = applicationPager.value.page) { status: applicationFilters.value.status || undefined, track: applicationFilters.value.track || undefined, signup_channel_id: applicationFilters.value.signup_channel_id || undefined, + public_source_channel_id: applicationFilters.value.public_source_channel_id || undefined, }) applications.value = res.data applicationPager.value = { @@ -730,7 +749,13 @@ async function refreshApplications(page = applicationPager.value.page) { } function resetApplicationFilters() { - applicationFilters.value = { keyword: '', status: 'submitted', track: '', signup_channel_id: undefined } + applicationFilters.value = { + keyword: '', + status: 'submitted', + track: '', + signup_channel_id: undefined, + public_source_channel_id: undefined, + } void refreshApplications(1) } @@ -752,6 +777,7 @@ async function exportApplications(mode: AdminApplicationExportMode) { status: applicationFilters.value.status || undefined, track: applicationFilters.value.track || undefined, signup_channel_id: applicationFilters.value.signup_channel_id || undefined, + public_source_channel_id: applicationFilters.value.public_source_channel_id || undefined, application_ids: mode === 'selected' ? selectedApplications.value.map((row) => row.id) : undefined, }, @@ -1430,7 +1456,7 @@ onMounted(() => { { :value="channel.id" /> + + +
@@ -1499,7 +1541,7 @@ onMounted(() => { - +