fix: align permission navigation and page access
This commit is contained in:
@@ -34,6 +34,7 @@ import {
|
||||
import dayjs, { Dayjs } from 'dayjs';
|
||||
import api from '../../api';
|
||||
import PermissionButton from '../../components/PermissionButton';
|
||||
import { usePermission } from '../../hooks/usePermission';
|
||||
import { message } from '../../ui/app-message';
|
||||
import {
|
||||
buildSchedulePayload,
|
||||
@@ -99,6 +100,7 @@ const WEEKDAY_NUMBERS = [1, 2, 3, 4, 5, 6, 7];
|
||||
// ---- Component ----
|
||||
|
||||
const SchedulesPage: React.FC = () => {
|
||||
const { hasPermission } = usePermission();
|
||||
// View mode and navigation
|
||||
const [viewMode, setViewMode] = useState<'week' | 'month'>('week');
|
||||
const [viewDate, setViewDate] = useState<Dayjs>(() => dayjs().weekday(1).startOf('day'));
|
||||
@@ -235,9 +237,8 @@ const SchedulesPage: React.FC = () => {
|
||||
const fetchData = useCallback(async () => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const [classroomsRes, classesRes, schedulesRes] = await Promise.all([
|
||||
api.get('/classrooms') as Promise<ClassroomItem[]>,
|
||||
api.get('/classes') as Promise<ClassItem[]>,
|
||||
const [lookups, schedulesRes] = await Promise.all([
|
||||
api.get('/class-schedules/lookups') as Promise<{ classrooms: ClassroomItem[]; classes: ClassItem[] }>,
|
||||
api.get('/class-schedules/weekly', {
|
||||
params: {
|
||||
startDate: startDateStr,
|
||||
@@ -247,8 +248,8 @@ const SchedulesPage: React.FC = () => {
|
||||
}) as Promise<Record<string, Record<string, ClassScheduleItem[]>>>,
|
||||
]);
|
||||
|
||||
setClassrooms(classroomsRes);
|
||||
setClasses(classesRes);
|
||||
setClassrooms(lookups.classrooms);
|
||||
setClasses(lookups.classes);
|
||||
|
||||
// Convert string keys to numbers
|
||||
const typedMatrix: Record<number, Record<number, ClassScheduleItem[]>> = {};
|
||||
@@ -326,7 +327,7 @@ const SchedulesPage: React.FC = () => {
|
||||
setSelectedSchedules(schedules);
|
||||
setModalMode('detail');
|
||||
setModalOpen(true);
|
||||
} else {
|
||||
} else if (hasPermission('schedule:create')) {
|
||||
setSelectedSchedules([]);
|
||||
setEditingSchedule(null);
|
||||
setModalMode('create');
|
||||
@@ -948,7 +949,8 @@ const SchedulesPage: React.FC = () => {
|
||||
}}
|
||||
>
|
||||
<span style={{ fontWeight: 500 }}>已有排课</span>
|
||||
<Button
|
||||
<PermissionButton
|
||||
permission="schedule:create"
|
||||
type="primary"
|
||||
icon={<PlusOutlined />}
|
||||
onClick={() => {
|
||||
@@ -964,7 +966,7 @@ const SchedulesPage: React.FC = () => {
|
||||
}}
|
||||
>
|
||||
新增排课
|
||||
</Button>
|
||||
</PermissionButton>
|
||||
</div>
|
||||
{selectedSchedules.length === 0 ? (
|
||||
<Empty description="该时段暂无排课" />
|
||||
|
||||
Reference in New Issue
Block a user