生产管理系统 - 员工管理列表联调

This commit is contained in:
2025-11-04 15:55:29 +08:00
parent aec67101cb
commit fffd37a0a9
23 changed files with 2251 additions and 276 deletions

View File

@@ -6,7 +6,7 @@
*/
'use client';
import { useReducer, useEffect, useMemo, useState } from 'react';
import { useReducer, useEffect, useMemo, useState, useRef, useCallback } from 'react';
import { toast } from 'sonner';
import { Card } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
@@ -128,15 +128,16 @@ const initialState: AuditHistoryState = {
export default function AuditHistoryPage() {
const [state, dispatch] = useReducer(auditHistoryReducer, initialState);
const isFirstLoad = useRef(true);
// 加载审核历史数据
const loadAuditHistory = async (resetPage = false) => {
const loadAuditHistory = useCallback(async () => {
try {
dispatch({ type: 'SET_LOADING', payload: true });
const params: AuditLogsQueryParams = {
search: state.filters.search_keyword || undefined,
page: resetPage ? 1 : state.pagination.page,
page: state.pagination.page,
size: state.pagination.size
};
@@ -164,7 +165,7 @@ export default function AuditHistoryPage() {
payload: error instanceof Error ? error.message : '加载审核历史失败'
});
}
};
}, []); // 空依赖数组,函数内部使用最新状态
// 搜索处理
const handleSearch = (value: string) => {
@@ -212,28 +213,33 @@ export default function AuditHistoryPage() {
// 刷新数据
const handleRefresh = () => {
dispatch({ type: 'REFRESH_DATA' });
loadAuditHistory(true);
dispatch({ type: 'SET_PAGINATION', payload: { page: 1 } });
toast.success('数据已刷新');
};
// 初始化和监听器
// 合并所有状态变化,统一处理数据加载
useEffect(() => {
loadAuditHistory();
}, []);
useEffect(() => {
const timer = setTimeout(() => {
loadAuditHistory();
}, 300);
return () => clearTimeout(timer);
}, [state.filters.search_keyword, state.filters.typeFilter, state.filters.resultFilter, state.filters.dateRange, state.sortBy, state.sortOrder]);
useEffect(() => {
if (state.pagination.page > 1) {
if (isFirstLoad.current) {
// 首次加载
isFirstLoad.current = false;
loadAuditHistory();
} else {
// 后续状态变化,使用防抖
const timer = setTimeout(() => {
loadAuditHistory();
}, 300);
return () => clearTimeout(timer);
}
}, [state.pagination.page]);
}, [
state.filters.search_keyword,
state.filters.typeFilter,
state.filters.resultFilter,
state.filters.dateRange,
state.sortBy,
state.sortOrder,
state.pagination.page,
state.pagination.size
]);
// 工具函数
const getActionBadge = (action: string) => {