|
|
|
@ -26,6 +26,7 @@ import {
|
|
|
|
resolveListPageState,
|
|
|
|
resolveListPageState,
|
|
|
|
saveListPageState,
|
|
|
|
saveListPageState,
|
|
|
|
} from '../../utils/listPageState'
|
|
|
|
} from '../../utils/listPageState'
|
|
|
|
|
|
|
|
import { DEFAULT_ENTRY_GROUP, ENTRY_GROUPS } from '../../utils/entryGroups'
|
|
|
|
|
|
|
|
|
|
|
|
const route = useRoute()
|
|
|
|
const route = useRoute()
|
|
|
|
const router = useRouter()
|
|
|
|
const router = useRouter()
|
|
|
|
@ -75,11 +76,14 @@ const publicSources = ref<PublicSourceChannelRow[]>([])
|
|
|
|
const filters = reactive({
|
|
|
|
const filters = reactive({
|
|
|
|
keyword: '',
|
|
|
|
keyword: '',
|
|
|
|
track: '',
|
|
|
|
track: '',
|
|
|
|
|
|
|
|
entry_group: DEFAULT_ENTRY_GROUP as string,
|
|
|
|
review_result: '' as '' | 'passed' | 'rejected' | 'pending',
|
|
|
|
review_result: '' as '' | 'passed' | 'rejected' | 'pending',
|
|
|
|
signup_channel_id: '' as number | '',
|
|
|
|
signup_channel_id: '' as number | '',
|
|
|
|
public_source_channel_id: '' as number | '',
|
|
|
|
public_source_channel_id: '' as number | '',
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const entryGroupOptions = ENTRY_GROUPS
|
|
|
|
|
|
|
|
|
|
|
|
const sortDir = ref<'asc' | 'desc'>('desc')
|
|
|
|
const sortDir = ref<'asc' | 'desc'>('desc')
|
|
|
|
const selectionMode = ref<'audit' | 'export'>('audit')
|
|
|
|
const selectionMode = ref<'audit' | 'export'>('audit')
|
|
|
|
const auditSelectedIds = ref<number[]>([])
|
|
|
|
const auditSelectedIds = ref<number[]>([])
|
|
|
|
@ -105,6 +109,7 @@ function buildListParams(page: number): AdminApplicationListParams {
|
|
|
|
const kw = filters.keyword.trim()
|
|
|
|
const kw = filters.keyword.trim()
|
|
|
|
if (kw) params.keyword = kw
|
|
|
|
if (kw) params.keyword = kw
|
|
|
|
if (filters.track) params.track = filters.track
|
|
|
|
if (filters.track) params.track = filters.track
|
|
|
|
|
|
|
|
if (filters.entry_group) params.entry_group = filters.entry_group
|
|
|
|
if (filters.review_result === 'passed' || filters.review_result === 'rejected' || filters.review_result === 'pending') {
|
|
|
|
if (filters.review_result === 'passed' || filters.review_result === 'rejected' || filters.review_result === 'pending') {
|
|
|
|
params.review_result = filters.review_result
|
|
|
|
params.review_result = filters.review_result
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -264,6 +269,7 @@ async function refresh(page = pager.page) {
|
|
|
|
function resetFilters() {
|
|
|
|
function resetFilters() {
|
|
|
|
filters.keyword = ''
|
|
|
|
filters.keyword = ''
|
|
|
|
filters.track = ''
|
|
|
|
filters.track = ''
|
|
|
|
|
|
|
|
filters.entry_group = DEFAULT_ENTRY_GROUP
|
|
|
|
filters.review_result = ''
|
|
|
|
filters.review_result = ''
|
|
|
|
filters.signup_channel_id = ''
|
|
|
|
filters.signup_channel_id = ''
|
|
|
|
filters.public_source_channel_id = ''
|
|
|
|
filters.public_source_channel_id = ''
|
|
|
|
@ -353,7 +359,26 @@ watch(competitionId, async (cid) => {
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="filter-panel mb-3">
|
|
|
|
<div class="filter-panel mb-3">
|
|
|
|
<div class="row g-2">
|
|
|
|
<div class="row g-2 align-items-center">
|
|
|
|
|
|
|
|
<div class="col-12 d-flex flex-wrap align-items-center gap-3">
|
|
|
|
|
|
|
|
<span class="small text-secondary text-nowrap">参赛组别</span>
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
|
|
|
v-for="g in entryGroupOptions"
|
|
|
|
|
|
|
|
:key="g"
|
|
|
|
|
|
|
|
class="form-check form-check-inline mb-0"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<input
|
|
|
|
|
|
|
|
:id="`manage-entry-group-${g}`"
|
|
|
|
|
|
|
|
v-model="filters.entry_group"
|
|
|
|
|
|
|
|
class="form-check-input"
|
|
|
|
|
|
|
|
type="radio"
|
|
|
|
|
|
|
|
name="manage-entry-group"
|
|
|
|
|
|
|
|
:value="g"
|
|
|
|
|
|
|
|
@change="refresh(1)"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
<label class="form-check-label" :for="`manage-entry-group-${g}`">{{ g }}</label>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col-md-3">
|
|
|
|
<div class="col-md-3">
|
|
|
|
<input
|
|
|
|
<input
|
|
|
|
v-model="filters.keyword"
|
|
|
|
v-model="filters.keyword"
|
|
|
|
|