From 63a3222c322833cc979f072c5ff8a409944c6d1c Mon Sep 17 00:00:00 2001 From: Litrix2 Date: Sun, 12 Jan 2025 21:19:50 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=B7=BB=E5=8A=A0=E7=A4=BE?= =?UTF-8?q?=E5=9B=A2=E6=88=90=E5=91=98=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/api/index.ts | 4 +- src/api/request.ts | 35 ++++++- src/assets/global.scss | 1 + src/components/PagedWrapper.vue | 51 +++++----- src/components/SearchInput.vue | 26 +++++ src/components/club/ClubEditCard.vue | 5 +- src/components/club/ClubList.vue | 12 +-- src/components/club/ClubMemberCard.vue | 0 src/components/club/ClubMemberCards.vue | 110 ++++++++++++++++++++++ src/components/game2048/Game2048.vue | 110 ++++++++++------------ src/router/index.ts | 35 +++++-- src/schemas/response.ts | 8 +- src/stores/user.ts | 2 +- src/utils/{types.ts => types.d.ts} | 0 src/views/manage/ManageClubMemberPage.vue | 13 +++ src/views/manage/ManageClubPage.vue | 58 +++++++----- 17 files changed, 330 insertions(+), 141 deletions(-) create mode 100644 src/components/SearchInput.vue delete mode 100644 src/components/club/ClubMemberCard.vue create mode 100644 src/components/club/ClubMemberCards.vue rename src/utils/{types.ts => types.d.ts} (100%) create mode 100644 src/views/manage/ManageClubMemberPage.vue diff --git a/.gitignore b/.gitignore index 2897d03..2dea80b 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ coverage *.lockb components.d.ts +.VSCodeCounter diff --git a/src/api/index.ts b/src/api/index.ts index 6aab745..243b835 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -14,7 +14,7 @@ declare module 'axios' { interface AxiosRequestConfig { addAuth?: boolean; errorDescription?: string; - validationErrorCB?: ValidationErrorCallback; + onValidationError?: ValidationErrorCallback; } } // 自动添加token到请求中. @@ -73,7 +73,7 @@ export async function request( schema, await requestRaw(options), options.errorDescription, - options.validationErrorCB, + options.onValidationError, ); } export async function patchRequest>( diff --git a/src/api/request.ts b/src/api/request.ts index 968ebce..cf79de3 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -1,19 +1,26 @@ import { + clubListRespSchema, clubRespSchema, ordinarySchema, uploadAvatarRespSchema, + userInfoListRespSchema, userInfoRespSchema, } from '@/schemas/response'; import { type ValidationErrorCallback, request } from '.'; import { REQUEST_BASE_URL } from '@/env'; import { ElMessage, type UploadRawFile } from 'element-plus'; - +export type PagedParams = { + /** 页码,从1开始 */ + page: number; + /** 每页数据量 */ + num: number; +}; export async function getUserInfo({ userID, - validationErrorCB, + onValidationError, }: { userID?: number; - validationErrorCB?: ValidationErrorCallback; + onValidationError?: ValidationErrorCallback; }) { let url = '/api/user/info'; if (userID !== undefined) { @@ -22,7 +29,7 @@ export async function getUserInfo({ const resp = await request(userInfoRespSchema, { url, errorDescription: '获取用户信息失败', - validationErrorCB, + onValidationError, }); return resp; } @@ -57,6 +64,11 @@ export const getClubById = (id: number) => url: `/api/club/${id}`, errorDescription: '获取社团信息失败', }).then((r) => r?.data); +export const getClubList = (params: PagedParams) => + request(clubListRespSchema, { + url: '/api/club/', + params: params, + }); export const changeClubName = (id: number, name: string) => request(ordinarySchema, { url: '/api/club/name', @@ -81,4 +93,19 @@ export const changeClubAvatar = (id: number, code: string) => }, errorDescription: '修改社团头像失败', }); +export const getUserByClubId = (clubId: number, params: PagedParams) => + request(userInfoListRespSchema, { + url: '/api/club/user/list', + params: Object.assign(params, { clubId }), + errorDescription: '获取社团成员列表失败', + }); +export const removeUserFromClub = (userId: number, clubId: number) => + request(ordinarySchema, { + url: '/api/club/user/remove', + method: 'delete', + params: { + userId, + clubId, + }, + }); // #endregion diff --git a/src/assets/global.scss b/src/assets/global.scss index ba9b6f6..0a10fd0 100644 --- a/src/assets/global.scss +++ b/src/assets/global.scss @@ -5,6 +5,7 @@ } :root { --header-height: 50px; + --search-input-gap: 12px; } body { background-color: rgb(244, 246, 249); diff --git a/src/components/PagedWrapper.vue b/src/components/PagedWrapper.vue index 39dd059..dccf932 100644 --- a/src/components/PagedWrapper.vue +++ b/src/components/PagedWrapper.vue @@ -1,12 +1,12 @@