提交1 bmad搭建与项目启动 - ok
This commit is contained in:
400
crop-x/src/stores/modules/operation.ts
Normal file
400
crop-x/src/stores/modules/operation.ts
Normal file
@@ -0,0 +1,400 @@
|
||||
import { create } from 'zustand'
|
||||
import { FarmingTask, TaskTemplate, ResourceAllocation, Workflow } from '@api/modules/operation'
|
||||
import { operationApi } from '@api'
|
||||
import { QueryRequest } from '@api/types'
|
||||
|
||||
interface OperationState {
|
||||
// 任务数据
|
||||
taskList: FarmingTask[]
|
||||
selectedTask: FarmingTask | null
|
||||
taskLoading: boolean
|
||||
taskError: string | null
|
||||
taskPagination: {
|
||||
page: number
|
||||
pageSize: number
|
||||
total: number
|
||||
}
|
||||
|
||||
// 模板数据
|
||||
templateList: TaskTemplate[]
|
||||
selectedTemplate: TaskTemplate | null
|
||||
templateLoading: boolean
|
||||
|
||||
// 资源分配数据
|
||||
resourceAllocationList: ResourceAllocation[]
|
||||
selectedResourceAllocation: ResourceAllocation | null
|
||||
resourceLoading: boolean
|
||||
|
||||
// 工作流数据
|
||||
workflowList: Workflow[]
|
||||
selectedWorkflow: Workflow | null
|
||||
workflowLoading: boolean
|
||||
workflowPagination: {
|
||||
page: number
|
||||
pageSize: number
|
||||
total: number
|
||||
}
|
||||
}
|
||||
|
||||
interface OperationActions {
|
||||
// 任务操作
|
||||
fetchTaskList: (params?: QueryRequest) => Promise<void>
|
||||
fetchTaskDetail: (id: string) => Promise<void>
|
||||
createTask: (data: Omit<FarmingTask, 'id' | 'createdAt' | 'updatedAt'>) => Promise<void>
|
||||
updateTask: (id: string, data: Partial<FarmingTask>) => Promise<void>
|
||||
deleteTask: (id: string) => Promise<void>
|
||||
updateTaskStatus: (id: string, status: FarmingTask['status']) => Promise<void>
|
||||
setSelectedTask: (task: FarmingTask | null) => void
|
||||
clearTaskError: () => void
|
||||
|
||||
// 模板操作
|
||||
fetchTemplateList: (params?: QueryRequest) => Promise<void>
|
||||
createTemplate: (data: Omit<TaskTemplate, 'id'>) => Promise<void>
|
||||
updateTemplate: (id: string, data: Partial<TaskTemplate>) => Promise<void>
|
||||
deleteTemplate: (id: string) => Promise<void>
|
||||
|
||||
// 资源分配操作
|
||||
fetchResourceAllocations: (params?: QueryRequest) => Promise<void>
|
||||
allocateResource: (data: Omit<ResourceAllocation, 'id' | 'allocatedDate'>) => Promise<void>
|
||||
returnResource: (id: string) => Promise<void>
|
||||
|
||||
// 工作流操作
|
||||
fetchWorkflowList: (params?: QueryRequest) => Promise<void>
|
||||
fetchWorkflowDetail: (id: string) => Promise<void>
|
||||
createWorkflow: (data: Omit<Workflow, 'id' | 'createdAt' | 'updatedAt'>) => Promise<void>
|
||||
updateWorkflow: (id: string, data: Partial<Workflow>) => Promise<void>
|
||||
deleteWorkflow: (id: string) => Promise<void>
|
||||
setSelectedWorkflow: (workflow: Workflow | null) => void
|
||||
}
|
||||
|
||||
export const useOperationStore = create<OperationState & OperationActions>((set, get) => ({
|
||||
// 初始状态
|
||||
taskList: [],
|
||||
selectedTask: null,
|
||||
taskLoading: false,
|
||||
taskError: null,
|
||||
taskPagination: {
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
total: 0
|
||||
},
|
||||
|
||||
templateList: [],
|
||||
selectedTemplate: null,
|
||||
templateLoading: false,
|
||||
|
||||
resourceAllocationList: [],
|
||||
selectedResourceAllocation: null,
|
||||
resourceLoading: false,
|
||||
|
||||
workflowList: [],
|
||||
selectedWorkflow: null,
|
||||
workflowLoading: false,
|
||||
workflowPagination: {
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
total: 0
|
||||
},
|
||||
|
||||
// 任务操作
|
||||
fetchTaskList: async (params) => {
|
||||
try {
|
||||
set({ taskLoading: true, taskError: null })
|
||||
const response = await operationApi.getTaskList({
|
||||
page: params?.page || 1,
|
||||
pageSize: params?.pageSize || 10,
|
||||
...params
|
||||
})
|
||||
|
||||
set({
|
||||
taskList: response.data.items,
|
||||
taskPagination: {
|
||||
page: response.data.page,
|
||||
pageSize: response.data.pageSize,
|
||||
total: response.data.total
|
||||
},
|
||||
taskLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '获取任务列表失败',
|
||||
taskLoading: false
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
fetchTaskDetail: async (id) => {
|
||||
try {
|
||||
set({ taskLoading: true, taskError: null })
|
||||
const response = await operationApi.getTaskDetail(id)
|
||||
set({
|
||||
selectedTask: response.data,
|
||||
taskLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '获取任务详情失败',
|
||||
taskLoading: false
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
createTask: async (data) => {
|
||||
try {
|
||||
const response = await operationApi.createTask(data)
|
||||
const currentList = get().taskList
|
||||
set({
|
||||
taskList: [response.data, ...currentList]
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '创建任务失败'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
updateTask: async (id, data) => {
|
||||
try {
|
||||
const response = await operationApi.updateTask(id, data)
|
||||
const currentList = get().taskList
|
||||
const updatedList = currentList.map(item =>
|
||||
item.id === id ? response.data : item
|
||||
)
|
||||
set({
|
||||
taskList: updatedList,
|
||||
selectedTask: response.data
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '更新任务失败'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
deleteTask: async (id) => {
|
||||
try {
|
||||
await operationApi.deleteTask(id)
|
||||
const currentList = get().taskList
|
||||
const updatedList = currentList.filter(item => item.id !== id)
|
||||
set({
|
||||
taskList: updatedList,
|
||||
selectedTask: null
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '删除任务失败'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
updateTaskStatus: async (id, status) => {
|
||||
try {
|
||||
const response = await operationApi.updateTaskStatus(id, status)
|
||||
const currentList = get().taskList
|
||||
const updatedList = currentList.map(item =>
|
||||
item.id === id ? response.data : item
|
||||
)
|
||||
set({
|
||||
taskList: updatedList,
|
||||
selectedTask: response.data
|
||||
})
|
||||
} catch (error) {
|
||||
set({
|
||||
taskError: error instanceof Error ? error.message : '更新任务状态失败'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
setSelectedTask: (task) => set({ selectedTask: task }),
|
||||
clearTaskError: () => set({ taskError: null }),
|
||||
|
||||
// 模板操作
|
||||
fetchTemplateList: async (params) => {
|
||||
try {
|
||||
set({ templateLoading: true })
|
||||
const response = await operationApi.getTaskTemplateList({
|
||||
page: params?.page || 1,
|
||||
pageSize: params?.pageSize || 50,
|
||||
...params
|
||||
})
|
||||
set({
|
||||
templateList: response.data.items,
|
||||
templateLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('获取模板列表失败:', error)
|
||||
set({ templateLoading: false })
|
||||
}
|
||||
},
|
||||
|
||||
createTemplate: async (data) => {
|
||||
try {
|
||||
const response = await operationApi.createTaskTemplate(data)
|
||||
const currentList = get().templateList
|
||||
set({
|
||||
templateList: [response.data, ...currentList]
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('创建模板失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
updateTemplate: async (id, data) => {
|
||||
try {
|
||||
const response = await operationApi.updateTaskTemplate(id, data)
|
||||
const currentList = get().templateList
|
||||
const updatedList = currentList.map(item =>
|
||||
item.id === id ? response.data : item
|
||||
)
|
||||
set({
|
||||
templateList: updatedList,
|
||||
selectedTemplate: response.data
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('更新模板失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
deleteTemplate: async (id) => {
|
||||
try {
|
||||
await operationApi.deleteTaskTemplate(id)
|
||||
const currentList = get().templateList
|
||||
const updatedList = currentList.filter(item => item.id !== id)
|
||||
set({
|
||||
templateList: updatedList,
|
||||
selectedTemplate: null
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('删除模板失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
// 资源分配操作
|
||||
fetchResourceAllocations: async (params) => {
|
||||
try {
|
||||
set({ resourceLoading: true })
|
||||
const response = await operationApi.getResourceAllocations({
|
||||
page: params?.page || 1,
|
||||
pageSize: params?.pageSize || 20,
|
||||
...params
|
||||
})
|
||||
set({
|
||||
resourceAllocationList: response.data.items,
|
||||
resourceLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('获取资源分配列表失败:', error)
|
||||
set({ resourceLoading: false })
|
||||
}
|
||||
},
|
||||
|
||||
allocateResource: async (data) => {
|
||||
try {
|
||||
const response = await operationApi.allocateResource(data)
|
||||
const currentList = get().resourceAllocationList
|
||||
set({
|
||||
resourceAllocationList: [response.data, ...currentList]
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('分配资源失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
returnResource: async (id) => {
|
||||
try {
|
||||
await operationApi.returnResource(id)
|
||||
const currentList = get().resourceAllocationList
|
||||
const updatedList = currentList.map(item =>
|
||||
item.id === id ? { ...item, status: 'returned' as const } : item
|
||||
)
|
||||
set({
|
||||
resourceAllocationList: updatedList
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('归还资源失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
// 工作流操作
|
||||
fetchWorkflowList: async (params) => {
|
||||
try {
|
||||
set({ workflowLoading: true })
|
||||
const response = await operationApi.getWorkflowList({
|
||||
page: params?.page || 1,
|
||||
pageSize: params?.pageSize || 10,
|
||||
...params
|
||||
})
|
||||
|
||||
set({
|
||||
workflowList: response.data.items,
|
||||
workflowPagination: {
|
||||
page: response.data.page,
|
||||
pageSize: response.data.pageSize,
|
||||
total: response.data.total
|
||||
},
|
||||
workflowLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('获取工作流列表失败:', error)
|
||||
set({ workflowLoading: false })
|
||||
}
|
||||
},
|
||||
|
||||
fetchWorkflowDetail: async (id) => {
|
||||
try {
|
||||
set({ workflowLoading: true })
|
||||
const response = await operationApi.getWorkflowDetail(id)
|
||||
set({
|
||||
selectedWorkflow: response.data,
|
||||
workflowLoading: false
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('获取工作流详情失败:', error)
|
||||
set({ workflowLoading: false })
|
||||
}
|
||||
},
|
||||
|
||||
createWorkflow: async (data) => {
|
||||
try {
|
||||
const response = await operationApi.createWorkflow(data)
|
||||
const currentList = get().workflowList
|
||||
set({
|
||||
workflowList: [response.data, ...currentList]
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('创建工作流失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
updateWorkflow: async (id, data) => {
|
||||
try {
|
||||
const response = await operationApi.updateWorkflow(id, data)
|
||||
const currentList = get().workflowList
|
||||
const updatedList = currentList.map(item =>
|
||||
item.id === id ? response.data : item
|
||||
)
|
||||
set({
|
||||
workflowList: updatedList,
|
||||
selectedWorkflow: response.data
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('更新工作流失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
deleteWorkflow: async (id) => {
|
||||
try {
|
||||
await operationApi.deleteWorkflow(id)
|
||||
const currentList = get().workflowList
|
||||
const updatedList = currentList.filter(item => item.id !== id)
|
||||
set({
|
||||
workflowList: updatedList,
|
||||
selectedWorkflow: null
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('删除工作流失败:', error)
|
||||
}
|
||||
},
|
||||
|
||||
setSelectedWorkflow: (workflow) => set({ selectedWorkflow: workflow })
|
||||
}))
|
||||
Reference in New Issue
Block a user