feat: 重构各业务模块管理页面与服务

This commit is contained in:
2026-08-05 17:12:00 +08:00
parent 80e6fccf05
commit fd39e1686a
163 changed files with 18409 additions and 13449 deletions

View File

@@ -1,4 +1,7 @@
import React, { useEffect, useState, useMemo, useCallback } from 'react';
import React, { useState, useMemo } from 'react';
import { useQuery } from '@tanstack/react-query';
import { validateResponse } from '../../utils/validate';
import { classroomScheduleSchema } from '../../api/schemas';
import {
DatePicker,
Card,
@@ -18,6 +21,7 @@ import dayjs, { Dayjs } from 'dayjs';
import api from '../../api';
import { downloadBlob } from '../../utils/download';
import { message } from '../../ui/app-message';
import { getErrorMessage } from '../../utils/error';
interface ScheduleData {
year: number;
@@ -34,27 +38,25 @@ interface ScheduleData {
const ClassroomSchedulePage: React.FC = () => {
const [month, setMonth] = useState<Dayjs>(dayjs());
const [loading, setLoading] = useState(false);
const [data, setData] = useState<ScheduleData | null>(null);
const [detailModal, setDetailModal] = useState<any>(null);
const fetchData = useCallback(async () => {
setLoading(true);
try {
const res: any = await api.get('/classroom-rentals/schedule', {
params: { year: month.year(), month: month.month() + 1 },
});
setData(res);
} catch (e: unknown) {
const err = e as { message?: string };
message.error(err?.message || '加载失败,请稍后重试');
}
setLoading(false);
}, [month]);
useEffect(() => {
fetchData();
}, [fetchData]);
const { data, isLoading, isFetching } = useQuery<ScheduleData | null>({
queryKey: ['classroom-rentals', 'schedule', month.year(), month.month()],
queryFn: async () => {
try {
return validateResponse<ScheduleData | null>(
classroomScheduleSchema,
await api.get('/classroom-rentals/schedule', {
params: { year: month.year(), month: month.month() + 1 },
}),
);
} catch (e: unknown) {
message.error(getErrorMessage(e, '加载失败,请稍后重试'));
return null;
}
},
});
const loading = isLoading || isFetching;
// 按楼栋+楼层分组教室
const groups = useMemo(() => {
@@ -88,8 +90,7 @@ const ClassroomSchedulePage: React.FC = () => {
const res: any = await api.get(`/classroom-rentals/${rentalId}`);
setDetailModal(res);
} catch (e: unknown) {
const err = e as { message?: string };
message.error(err?.message || '加载详情失败');
message.error(getErrorMessage(e, '加载详情失败'));
}
};