feat: 정렬·필터 서버 측 동작 구현 및 커스텀 드롭다운 적용

프로젝트 목록·업무 목록·내 업무에 정렬/검색/프로젝트 필터를 백엔드 쿼리 파라미터로 추가(페이지네이션과 일관). 활동 멤버 필터는 전량 로드 피드 기준 클라이언트 처리.
모든 정렬/필터 및 멤버 초대 역할 선택을 네이티브 select → 공통 DropdownSelect 컴포넌트로 통일.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-22 12:06:17 +09:00
parent 71040f94c8
commit 6767316cdb
21 changed files with 656 additions and 272 deletions
+14 -6
View File
@@ -1,22 +1,30 @@
import { useApi } from './useApi'
import type { ApiMyTaskRow } from '@/types/my-task'
import type { ApiMyTaskRow, MyTaskListQuery } from '@/types/my-task'
import type { Paginated } from '@/types/pagination'
// 내 업무 API Composable — 프로젝트 횡단 집계(담당/지시), 오프셋 페이지네이션
// 내 업무 API Composable — 프로젝트 횡단 집계(담당/지시), 검색/프로젝트/정렬 + 오프셋 페이지네이션
export function useMyTask() {
const api = useApi()
// 내가 담당인 업무
async function assigned(page = 1, size = 20): Promise<Paginated<ApiMyTaskRow>> {
async function assigned(
page = 1,
size = 20,
query: MyTaskListQuery = {},
): Promise<Paginated<ApiMyTaskRow>> {
return (await api.get('/tasks/assigned', {
params: { page, size },
params: { ...query, page, size },
})) as unknown as Paginated<ApiMyTaskRow>
}
// 내가 지시한 업무
async function issued(page = 1, size = 20): Promise<Paginated<ApiMyTaskRow>> {
async function issued(
page = 1,
size = 20,
query: MyTaskListQuery = {},
): Promise<Paginated<ApiMyTaskRow>> {
return (await api.get('/tasks/issued', {
params: { page, size },
params: { ...query, page, size },
})) as unknown as Paginated<ApiMyTaskRow>
}
+8 -2
View File
@@ -2,6 +2,7 @@ import { useApi } from './useApi'
import type {
ApiProject,
CreateProjectPayload,
ProjectListQuery,
UpdateProjectPayload,
} from '@/types/project'
import type { Paginated } from '@/types/pagination'
@@ -10,9 +11,14 @@ import type { Paginated } from '@/types/pagination'
export function useProject() {
const api = useApi()
async function list(page = 1, size = 20): Promise<Paginated<ApiProject>> {
// 목록(검색/정렬 + 페이지네이션)
async function list(
page = 1,
size = 20,
query: ProjectListQuery = {},
): Promise<Paginated<ApiProject>> {
return (await api.get('/projects', {
params: { page, size },
params: { ...query, page, size },
})) as unknown as Paginated<ApiProject>
}