- 采用 Ant Design 5 作为 UI 组件库,替换自定义组件 - 集成 React Router v7 提供路由导航 - 使用 TanStack Query v5 管理数据获取和缓存 - 建立 Vitest + React Testing Library 测试体系 - 添加 Playwright E2E 测试覆盖 - 使用 MSW mock API 响应 - 配置 TypeScript strict 模式 - 采用 SCSS Modules 组织样式 - 更新 OpenSpec 规格以反映前端架构变更 - 归档 frontend-refactor 变更记录
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
|
import { message } from 'antd';
|
|
import type { CreateProviderInput, UpdateProviderInput } from '@/types';
|
|
import * as api from '@/api/providers';
|
|
|
|
export const providerKeys = {
|
|
all: ['providers'] as const,
|
|
};
|
|
|
|
export function useProviders() {
|
|
return useQuery({
|
|
queryKey: providerKeys.all,
|
|
queryFn: api.listProviders,
|
|
});
|
|
}
|
|
|
|
export function useCreateProvider() {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: (input: CreateProviderInput) => api.createProvider(input),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: providerKeys.all });
|
|
message.success('供应商创建成功');
|
|
},
|
|
onError: (error: Error) => {
|
|
message.error(error.message);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateProvider() {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: ({ id, input }: { id: string; input: UpdateProviderInput }) =>
|
|
api.updateProvider(id, input),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: providerKeys.all });
|
|
message.success('供应商更新成功');
|
|
},
|
|
onError: (error: Error) => {
|
|
message.error(error.message);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteProvider() {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: (id: string) => api.deleteProvider(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: providerKeys.all });
|
|
message.success('供应商删除成功');
|
|
},
|
|
onError: (error: Error) => {
|
|
message.error(error.message);
|
|
},
|
|
});
|
|
}
|