164 lines
4.5 KiB
TypeScript
164 lines
4.5 KiB
TypeScript
import { unwrapApiResponse, unwrapNullableApiResponse } from '@/utils/api-response'
|
|
import { request } from '@/utils/request'
|
|
import type { ApiResponse } from '@/types/common'
|
|
|
|
import type {
|
|
BackendCollection,
|
|
CampusRecord,
|
|
CreateCampusRequest,
|
|
CreateDepartmentRequest,
|
|
DepartmentRecord,
|
|
OrganizationResponseDto,
|
|
UpdateCampusRequest,
|
|
UpdateDepartmentRequest,
|
|
} from './types'
|
|
|
|
const useMockData = import.meta.env.VITE_USE_MOCK !== 'false'
|
|
|
|
function getRecords(data: BackendCollection<OrganizationResponseDto>) {
|
|
return Array.isArray(data) ? data : (data.records ?? data.items ?? data.content ?? [])
|
|
}
|
|
|
|
export function getCampuses(): Promise<CampusRecord[]> {
|
|
if (useMockData) {
|
|
return Promise.resolve([])
|
|
}
|
|
|
|
return request
|
|
.get<ApiResponse<BackendCollection<OrganizationResponseDto>>>('/v1/campuses', {
|
|
params: { page: 1, size: 200 },
|
|
})
|
|
.then(unwrapApiResponse)
|
|
.then((data) =>
|
|
getRecords(data).map((item) => ({
|
|
id: item.id,
|
|
code: item.code ?? item.id,
|
|
name: item.name ?? item.campusName ?? item.id,
|
|
address: item.address ?? undefined,
|
|
status: item.status ?? 'ENABLED',
|
|
sortNo: item.sortNo ?? 0,
|
|
})),
|
|
)
|
|
}
|
|
|
|
export function getDepartments(campusId?: string): Promise<DepartmentRecord[]> {
|
|
if (useMockData) {
|
|
return Promise.resolve([])
|
|
}
|
|
|
|
const params = campusId ? { page: 1, size: 200, campusId } : { page: 1, size: 200 }
|
|
|
|
return request
|
|
.get<ApiResponse<BackendCollection<OrganizationResponseDto>>>('/v1/departments', {
|
|
params,
|
|
})
|
|
.then(unwrapApiResponse)
|
|
.then((data) =>
|
|
getRecords(data).map((item) => ({
|
|
id: item.id,
|
|
campusId: item.campusId ?? '',
|
|
parentId: item.parentId,
|
|
code: item.code ?? item.id,
|
|
name: item.name ?? item.departmentName ?? item.id,
|
|
status: item.status ?? 'ENABLED',
|
|
sortNo: item.sortNo ?? 0,
|
|
})),
|
|
)
|
|
}
|
|
|
|
function mapCampus(data: OrganizationResponseDto): CampusRecord {
|
|
return {
|
|
id: data.id,
|
|
code: data.code ?? data.id,
|
|
name: data.name ?? data.campusName ?? data.id,
|
|
address: data.address ?? undefined,
|
|
status: data.status ?? 'ENABLED',
|
|
sortNo: data.sortNo ?? 0,
|
|
}
|
|
}
|
|
|
|
function mapDepartment(data: OrganizationResponseDto): DepartmentRecord {
|
|
return {
|
|
id: data.id,
|
|
campusId: data.campusId ?? '',
|
|
parentId: data.parentId,
|
|
code: data.code ?? data.id,
|
|
name: data.name ?? data.departmentName ?? data.id,
|
|
status: data.status ?? 'ENABLED',
|
|
sortNo: data.sortNo ?? 0,
|
|
}
|
|
}
|
|
|
|
export async function createCampus(payload: CreateCampusRequest): Promise<CampusRecord> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行院区写操作')
|
|
}
|
|
|
|
const response = await request.post<ApiResponse<OrganizationResponseDto>>('/v1/campuses', payload)
|
|
return mapCampus(unwrapApiResponse(response))
|
|
}
|
|
|
|
export async function updateCampus(
|
|
id: string,
|
|
payload: UpdateCampusRequest,
|
|
): Promise<CampusRecord> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行院区写操作')
|
|
}
|
|
|
|
const response = await request.put<ApiResponse<OrganizationResponseDto>>(
|
|
`/v1/campuses/${encodeURIComponent(id)}`,
|
|
payload,
|
|
)
|
|
return mapCampus(unwrapApiResponse(response))
|
|
}
|
|
|
|
export async function deleteCampus(id: string): Promise<void> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行院区写操作')
|
|
}
|
|
|
|
const response = await request.delete<ApiResponse<null>>(`/v1/campuses/${encodeURIComponent(id)}`)
|
|
unwrapNullableApiResponse(response)
|
|
}
|
|
|
|
export async function createDepartment(
|
|
payload: CreateDepartmentRequest,
|
|
): Promise<DepartmentRecord> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行科室写操作')
|
|
}
|
|
|
|
const response = await request.post<ApiResponse<OrganizationResponseDto>>(
|
|
'/v1/departments',
|
|
payload,
|
|
)
|
|
return mapDepartment(unwrapApiResponse(response))
|
|
}
|
|
|
|
export async function updateDepartment(
|
|
id: string,
|
|
payload: UpdateDepartmentRequest,
|
|
): Promise<DepartmentRecord> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行科室写操作')
|
|
}
|
|
|
|
const response = await request.put<ApiResponse<OrganizationResponseDto>>(
|
|
`/v1/departments/${encodeURIComponent(id)}`,
|
|
payload,
|
|
)
|
|
return mapDepartment(unwrapApiResponse(response))
|
|
}
|
|
|
|
export async function deleteDepartment(id: string): Promise<void> {
|
|
if (useMockData) {
|
|
throw new Error('Mock 模式不执行科室写操作')
|
|
}
|
|
|
|
const response = await request.delete<ApiResponse<null>>(
|
|
`/v1/departments/${encodeURIComponent(id)}`,
|
|
)
|
|
unwrapNullableApiResponse(response)
|
|
}
|