Skip to content

Commit 8eea6b9

Browse files
committed
feat(tasks): add participant limit to task form and update pagination parameters
1 parent b90663d commit 8eea6b9

29 files changed

Lines changed: 174 additions & 113 deletions

File tree

src/components/common/Notification/NotificationPanel.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ const fetchNotifications = async () => {
8686
})
8787
8888
notifications.value = [...notifications.value, ...data.notifications]
89-
hasMore.value = data.page.has_more
90-
cursorStart.value = data.page.next_start
89+
hasMore.value = data.page.hasMore
90+
cursorStart.value = data.page.nextStart
9191
} catch (error) {
9292
console.error('获取通知失败:', error)
9393
} finally {

src/components/tasks/TaskForm.vue

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,21 @@
4949
</v-radio-group>
5050
</v-col>
5151

52+
<v-col cols="12" md="6">
53+
<v-text-field
54+
v-model.number="participantLimit"
55+
:label="submitterType === 'TEAM' ? '队伍数量限制' : '参与者人数限制'"
56+
type="number"
57+
min="1"
58+
v-bind="participantLimitProps"
59+
:hint="t('tasks.form.participantLimitHint')"
60+
>
61+
<template #append-inner>
62+
<v-icon size="small" color="primary">mdi-account-group</v-icon>
63+
</template>
64+
</v-text-field>
65+
</v-col>
66+
5267
<!-- 小队人数限制 -->
5368
<template v-if="submitterType === 'TEAM'">
5469
<v-col cols="12" md="6">
@@ -483,6 +498,7 @@ const { handleSubmit, defineField, isSubmitting } = useForm({
483498
minTeamSize: z.number().int().min(1).optional(),
484499
maxTeamSize: z.number().int().min(1).optional(),
485500
requireRealName: z.boolean().optional().default(false),
501+
participantLimit: z.number().int().min(1).optional().nullable(),
486502
})
487503
.refine((arg) => !arg.maxTeamSize || !arg.minTeamSize || arg.maxTeamSize >= arg.minTeamSize, {
488504
message: '最大人数不能小于最小人数',
@@ -498,6 +514,7 @@ const { handleSubmit, defineField, isSubmitting } = useForm({
498514
minTeamSize: props.initialData?.minTeamSize ?? 1,
499515
maxTeamSize: props.initialData?.maxTeamSize ?? 10,
500516
defaultDeadline: props.initialData?.defaultDeadline ?? 30,
517+
participantLimit: props.initialData?.participantLimit ?? null,
501518
},
502519
})
503520
@@ -511,6 +528,7 @@ const [minTeamSize, minTeamSizeProps] = defineField('minTeamSize', vuetifyConfig
511528
const [maxTeamSize, maxTeamSizeProps] = defineField('maxTeamSize', vuetifyConfig)
512529
const [categoryId, categoryIdProps] = defineField('categoryId', vuetifyConfig)
513530
const [requireRealName, requireRealNameProps] = defineField('requireRealName', vuetifyConfig)
531+
const [participantLimit, participantLimitProps] = defineField('participantLimit', vuetifyConfig)
514532
515533
const description = ref(props.initialData?.description || [])
516534
@@ -543,6 +561,7 @@ const submitFormData = (values: any) => {
543561
categoryId: categoryId.value || undefined,
544562
minTeamSize: submitterType.value === 'TEAM' ? minTeamSize.value : undefined,
545563
maxTeamSize: submitterType.value === 'TEAM' ? maxTeamSize.value : undefined,
564+
participantLimit: participantLimit.value || undefined,
546565
}
547566
emit('submit', submissionData)
548567
}

src/components/tasks/TaskSubmissionHistory.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ const {
166166
allVersions: true,
167167
sort_by: 'createdAt',
168168
sort_order: 'desc',
169-
page_start: pageStart,
170-
page_size: 10,
169+
pageStart: pageStart,
170+
pageSize: 10,
171171
queryReview: true,
172172
})
173173
return { data: data.submissions, page: data.page }

src/i18n/messages/zh-CN/tasks.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"defaultDeadline": "默认完成期限",
1313
"allowMultipleSubmissions": "允许多次提交",
1414
"allowEditSubmissions": "允许编辑提交",
15-
"taskDescription": "赛题描述"
15+
"taskDescription": "赛题描述",
16+
"participantLimitHint": "留空表示不限制参与人数"
1617
},
1718
"detail": {
1819
"editTask": "编辑赛题",

src/network/api/answers/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export namespace AnswersApi {
1414
url: `/questions/${questionId}/answers`,
1515
method: 'GET',
1616
params: {
17-
page_start: pageStart,
18-
page_size: pageSize,
17+
pageStart: pageStart,
18+
pageSize: pageSize,
1919
},
2020
})
2121

src/network/api/discussions/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ export namespace DiscussionsApi {
4747
export const getDetail = (
4848
discussionId: number,
4949
params?: {
50-
page_start?: number
51-
page_size?: number
50+
pageStart?: number
51+
pageSize?: number
5252
sort_by?: 'createdAt' | 'updatedAt'
5353
sort_order?: 'asc' | 'desc'
5454
}
@@ -74,8 +74,8 @@ export namespace DiscussionsApi {
7474
export const listSubDiscussions = (
7575
discussionId: number,
7676
params?: {
77-
page_start?: number
78-
page_size?: number
77+
pageStart?: number
78+
pageSize?: number
7979
sort_by?: 'createdAt' | 'updatedAt'
8080
sort_order?: 'asc' | 'desc'
8181
}

src/network/api/discussions/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export type ListDiscussionsParams = {
3939
modelType: DiscussableModelType
4040
modelId: number
4141
parent_id?: number
42-
page_start?: number
43-
page_size?: number
42+
pageStart?: number
43+
pageSize?: number
4444
sort_by?: 'createdAt' | 'updatedAt'
4545
sort_order?: 'asc' | 'desc'
4646
}

src/network/api/knowledges/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { NewApiInstance } from '../index'
55
export namespace KnowledgesApi {
66
export const create = (data: CreateKnowledgeRequest) =>
77
NewApiInstance.request<{ knowledge: Knowledge }>({
8-
url: '/knowledges',
8+
url: '/knowledge',
99
method: 'POST',
1010
data,
1111
})
@@ -22,28 +22,28 @@ export namespace KnowledgesApi {
2222
}
2323
})
2424
return NewApiInstance.request<{ knowledges: Knowledge[]; page: Page }>({
25-
url: '/knowledges',
25+
url: '/knowledge',
2626
method: 'GET',
2727
params: finalParams,
2828
})
2929
}
3030

3131
export const getDetail = (knowledgeId: number) =>
3232
NewApiInstance.request<{ knowledge: Knowledge }>({
33-
url: `/knowledges/${knowledgeId}`,
33+
url: `/knowledge/${knowledgeId}`,
3434
method: 'GET',
3535
})
3636

3737
export const update = (knowledgeId: number, data: UpdateKnowledgeRequest) =>
3838
NewApiInstance.request<{ knowledge: Knowledge }>({
39-
url: `/knowledges/${knowledgeId}`,
39+
url: `/knowledge/${knowledgeId}`,
4040
method: 'PATCH',
4141
data,
4242
})
4343

4444
export const deleteKnowledge = (knowledgeId: number) =>
4545
NewApiInstance.request<void>({
46-
url: `/knowledges/${knowledgeId}`,
46+
url: `/knowledge/${knowledgeId}`,
4747
method: 'DELETE',
4848
})
4949
}

src/network/api/notifications/types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ export interface Notification {
3333
}
3434

3535
export interface EncodedCursorPage {
36-
page_start: string
37-
page_size: number
36+
pageStart: string
37+
pageSize: number
3838
has_prev: boolean
39-
has_more: boolean
40-
next_start?: string
39+
hasMore: boolean
40+
nextStart?: string
4141
total?: number
4242
}
4343

src/network/api/projects/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ export namespace ProjectsApi {
2323
parent_id?: number
2424
leader_id?: number
2525
member_id?: number
26-
page_start?: number
27-
page_size?: number
26+
pageStart?: number
27+
pageSize?: number
2828
}
2929

3030
export const create = (data: CreateProjectRequestData) =>

0 commit comments

Comments
 (0)