refactor: 优化认证系统和组件类型安全性

- 新增 safeLocalStorage 工具函数增强本地存储安全性
- 简化认证流程,重构用户数据结构和 token 管理
- 修复多个模块的 TypeScript 类型错误和导入问题
- 优化状态管理,重构各模块 store 结构
- 清理冗余代码,移除未使用的组件和函数
- 改进错误处理和边界情况处理
- 更新配置文件以支持最新的类型检查

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-13 14:52:52 +08:00
parent dfc29ce01f
commit 68d9d97142
29 changed files with 1122 additions and 3001 deletions

View File

@@ -1,305 +1,94 @@
import { create } from 'zustand'
import { Machinery, Driver, MonitoringData } from '@api/modules/machinery'
import { machineryApi } from '@api'
import { QueryRequest } from '@api/types'
import { create } from 'zustand';
interface MachineryState {
// 农机数据
machineryList: Machinery[]
selectedMachinery: Machinery | null
machineryLoading: boolean
machineryError: string | null
machineryPagination: {
page: number
pageSize: number
total: number
}
// 驾驶员数据
driverList: Driver[]
selectedDriver: Driver | null
driverLoading: boolean
driverError: string | null
driverPagination: {
page: number
pageSize: number
total: number
}
// 监控数据
monitoringData: MonitoringData[]
realTimeData: MonitoringData | null
monitoringLoading: boolean
// 农机设备接口
export interface Machinery {
id: string;
name: string;
type: string;
model: string;
status: 'active' | 'maintenance' | 'inactive' | 'repair';
license_plate?: string | null;
purchase_date?: string | null;
last_maintenance_date?: string | null;
next_maintenance_date?: string | null;
operator_id?: string | null;
location?: string | null;
created_at: string;
updated_at: string;
}
interface MachineryActions {
// 农机操作
fetchMachineryList: (params?: QueryRequest) => Promise<void>
fetchMachineryDetail: (id: string) => Promise<void>
createMachinery: (data: Omit<Machinery, 'id' | 'createdAt' | 'updatedAt'>) => Promise<void>
updateMachinery: (id: string, data: Partial<Machinery>) => Promise<void>
deleteMachinery: (id: string) => Promise<void>
setSelectedMachinery: (machinery: Machinery | null) => void
clearMachineryError: () => void
// 驾驶员操作
fetchDriverList: (params?: QueryRequest) => Promise<void>
fetchDriverDetail: (id: string) => Promise<void>
createDriver: (data: Omit<Driver, 'id' | 'createdAt' | 'updatedAt'>) => Promise<void>
updateDriver: (id: string, data: Partial<Driver>) => Promise<void>
deleteDriver: (id: string) => Promise<void>
setSelectedDriver: (driver: Driver | null) => void
clearDriverError: () => void
// 监控操作
fetchRealTimeData: (machineryId: string) => Promise<void>
fetchMonitoringHistory: (machineryId: string, params?: QueryRequest) => Promise<void>
// 驾驶员接口
export interface Driver {
id: string;
name: string;
phone: string;
license_number: string;
license_type: string;
experience_years?: number | null;
status: 'active' | 'inactive' | 'on_leave';
hire_date?: string | null;
created_at: string;
updated_at: string;
}
export const useMachineryStore = create<MachineryState & MachineryActions>((set, get) => ({
// 初始状态
machineryList: [],
selectedMachinery: null,
machineryLoading: false,
machineryError: null,
machineryPagination: {
page: 1,
pageSize: 10,
total: 0
// Machinery state interface
export interface MachineryState {
machineries: Machinery[];
currentMachinery: Machinery | null;
drivers: Driver[];
currentDriver: Driver | null;
// Actions
setMachineries: (machineries: Machinery[]) => void;
setCurrentMachinery: (machinery: Machinery | null) => void;
setDrivers: (drivers: Driver[]) => void;
setCurrentDriver: (driver: Driver | null) => void;
// Getters
getMachineries: () => Machinery[];
getCurrentMachinery: () => Machinery | null;
getDrivers: () => Driver[];
getCurrentDriver: () => Driver | null;
}
// Create Machinery store
export const useMachineryStore = create<MachineryState>((set, get) => ({
machineries: [],
currentMachinery: null,
drivers: [],
currentDriver: null,
setMachineries: (machineries: Machinery[]) => {
set({ machineries });
},
driverList: [],
selectedDriver: null,
driverLoading: false,
driverError: null,
driverPagination: {
page: 1,
pageSize: 10,
total: 0
setCurrentMachinery: (machinery: Machinery | null) => {
set({ currentMachinery: machinery });
},
monitoringData: [],
realTimeData: null,
monitoringLoading: false,
// 农机操作
fetchMachineryList: async (params) => {
try {
set({ machineryLoading: true, machineryError: null })
const response = await machineryApi.getMachineryList({
page: params?.page || 1,
pageSize: params?.pageSize || 10,
...params
})
set({
machineryList: response.data.items,
machineryPagination: {
page: response.data.page,
pageSize: response.data.pageSize,
total: response.data.total
},
machineryLoading: false
})
} catch (error) {
set({
machineryError: error instanceof Error ? error.message : '获取农机列表失败',
machineryLoading: false
})
}
setDrivers: (drivers: Driver[]) => {
set({ drivers });
},
fetchMachineryDetail: async (id) => {
try {
set({ machineryLoading: true, machineryError: null })
const response = await machineryApi.getMachineryDetail(id)
set({
selectedMachinery: response.data,
machineryLoading: false
})
} catch (error) {
set({
machineryError: error instanceof Error ? error.message : '获取农机详情失败',
machineryLoading: false
})
}
setCurrentDriver: (driver: Driver | null) => {
set({ currentDriver: driver });
},
createMachinery: async (data) => {
try {
const response = await machineryApi.createMachinery(data)
const currentList = get().machineryList
set({
machineryList: [response.data, ...currentList]
})
} catch (error) {
set({
machineryError: error instanceof Error ? error.message : '创建农机失败'
})
}
getMachineries: () => {
return get().machineries;
},
updateMachinery: async (id, data) => {
try {
const response = await machineryApi.updateMachinery(id, data)
const currentList = get().machineryList
const updatedList = currentList.map(item =>
item.id === id ? response.data : item
)
set({
machineryList: updatedList,
selectedMachinery: response.data
})
} catch (error) {
set({
machineryError: error instanceof Error ? error.message : '更新农机失败'
})
}
getCurrentMachinery: () => {
return get().currentMachinery;
},
deleteMachinery: async (id) => {
try {
await machineryApi.deleteMachinery(id)
const currentList = get().machineryList
const updatedList = currentList.filter(item => item.id !== id)
set({
machineryList: updatedList,
selectedMachinery: null
})
} catch (error) {
set({
machineryError: error instanceof Error ? error.message : '删除农机失败'
})
}
getDrivers: () => {
return get().drivers;
},
setSelectedMachinery: (machinery) => set({ selectedMachinery: machinery }),
clearMachineryError: () => set({ machineryError: null }),
// 驾驶员操作
fetchDriverList: async (params) => {
try {
set({ driverLoading: true, driverError: null })
const response = await machineryApi.getDriverList({
page: params?.page || 1,
pageSize: params?.pageSize || 10,
...params
})
set({
driverList: response.data.items,
driverPagination: {
page: response.data.page,
pageSize: response.data.pageSize,
total: response.data.total
},
driverLoading: false
})
} catch (error) {
set({
driverError: error instanceof Error ? error.message : '获取驾驶员列表失败',
driverLoading: false
})
}
getCurrentDriver: () => {
return get().currentDriver;
},
}));
fetchDriverDetail: async (id) => {
try {
set({ driverLoading: true, driverError: null })
const response = await machineryApi.getDriverDetail(id)
set({
selectedDriver: response.data,
driverLoading: false
})
} catch (error) {
set({
driverError: error instanceof Error ? error.message : '获取驾驶员详情失败',
driverLoading: false
})
}
},
createDriver: async (data) => {
try {
const response = await machineryApi.createDriver(data)
const currentList = get().driverList
set({
driverList: [response.data, ...currentList]
})
} catch (error) {
set({
driverError: error instanceof Error ? error.message : '创建驾驶员失败'
})
}
},
updateDriver: async (id, data) => {
try {
const response = await machineryApi.updateDriver(id, data)
const currentList = get().driverList
const updatedList = currentList.map(item =>
item.id === id ? response.data : item
)
set({
driverList: updatedList,
selectedDriver: response.data
})
} catch (error) {
set({
driverError: error instanceof Error ? error.message : '更新驾驶员失败'
})
}
},
deleteDriver: async (id) => {
try {
await machineryApi.deleteDriver(id)
const currentList = get().driverList
const updatedList = currentList.filter(item => item.id !== id)
set({
driverList: updatedList,
selectedDriver: null
})
} catch (error) {
set({
driverError: error instanceof Error ? error.message : '删除驾驶员失败'
})
}
},
setSelectedDriver: (driver) => set({ selectedDriver: driver }),
clearDriverError: () => set({ driverError: null }),
// 监控操作
fetchRealTimeData: async (machineryId) => {
try {
set({ monitoringLoading: true })
const response = await machineryApi.getRealTimeData(machineryId)
set({
realTimeData: response.data,
monitoringLoading: false
})
} catch (error) {
console.error('获取实时数据失败:', error)
set({ monitoringLoading: false })
}
},
fetchMonitoringHistory: async (machineryId, params) => {
try {
set({ monitoringLoading: true })
const response = await machineryApi.getMonitoringHistory(machineryId, {
page: params?.page || 1,
pageSize: params?.pageSize || 50,
...params
})
set({
monitoringData: response.data.items,
monitoringLoading: false
})
} catch (error) {
console.error('获取监控历史失败:', error)
set({ monitoringLoading: false })
}
}
}))
export default useMachineryStore;