diff --git a/src/pages/ProjectManagePage.tsx b/src/pages/ProjectManagePage.tsx new file mode 100644 index 0000000..bee244d --- /dev/null +++ b/src/pages/ProjectManagePage.tsx @@ -0,0 +1,176 @@ +import React, { useState, useEffect } from 'react' +import { ProjectService, Project } from '../services/projectService' +import ProjectSearchBar from '../components/ProjectSearchBar' +import ProjectList from '../components/ProjectList' +import ProjectForm from '../components/ProjectForm' + +interface FormData { + name: string + local_directory: string + product_name: string + product_image: string +} + +const ProjectManagePage: React.FC = () => { + const [projects, setProjects] = useState([]) + const [loading, setLoading] = useState(true) + const [searchTerm, setSearchTerm] = useState('') + const [editingProject, setEditingProject] = useState(null) + const [showCreateForm, setShowCreateForm] = useState(false) + const [formData, setFormData] = useState({ + name: '', + local_directory: '', + product_name: '', + product_image: '' + }) + + useEffect(() => { + loadProjects() + }, []) + + const loadProjects = async () => { + try { + setLoading(true) + const response = await ProjectService.getAllProjects() + if (response.status && response.data) { + setProjects(response.data) + } else { + console.error('Failed to load projects:', response.msg) + } + } catch (error) { + console.error('Failed to load projects:', error) + } finally { + setLoading(false) + } + } + + const handleCreateProject = async () => { + try { + const response = await ProjectService.createProject(formData) + if (response.status && response.data) { + setProjects([...projects, response.data]) + handleCancelForm() + } else { + console.error('创建失败:', response.msg || '未知错误') + } + } catch (error) { + console.error('Failed to create project:', error) + } + } + + const handleUpdateProject = async () => { + if (!editingProject) return + + try { + const response = await ProjectService.updateProject(editingProject.id, formData) + if (response.status && response.data) { + const updatedProjects = projects.map(proj => + proj.id === editingProject.id ? response.data! : proj + ) + setProjects(updatedProjects) + handleCancelForm() + } else { + console.error('更新失败:', response.msg || '未知错误') + } + } catch (error) { + console.error('Failed to update project:', error) + } + } + + const handleDeleteProject = async (projectId: string) => { + if (!confirm('确定要删除这个项目吗?')) return + + try { + const response = await ProjectService.deleteProject(projectId) + if (response.status) { + setProjects(projects.filter(proj => proj.id !== projectId)) + } else { + console.error('删除失败:', response.msg || '未知错误') + } + } catch (error) { + console.error('Failed to delete project:', error) + } + } + + const handleOpenDirectory = async (projectId: string) => { + try { + const response = await ProjectService.openProjectDirectory(projectId) + if (!response.status) { + console.error('打开目录失败:', response.msg || '未知错误') + } + } catch (error) { + console.error('Failed to open directory:', error) + } + } + + const handleEditProject = (project: Project) => { + setEditingProject(project) + setFormData({ + name: project.name, + local_directory: project.local_directory, + product_name: project.product_name, + product_image: project.product_image + }) + setShowCreateForm(true) + } + + const handleCreateNew = () => { + setEditingProject(null) + setFormData({ name: '', local_directory: '', product_name: '', product_image: '' }) + setShowCreateForm(true) + } + + const handleCancelForm = () => { + setEditingProject(null) + setShowCreateForm(false) + setFormData({ name: '', local_directory: '', product_name: '', product_image: '' }) + } + + const handleSubmitForm = () => { + if (editingProject) { + handleUpdateProject() + } else { + handleCreateProject() + } + } + + return ( +
+ {/* 页面标题 */} +
+

项目管理

+

管理项目信息,包括项目目录、商品信息等

+
+ + {/* 搜索和操作栏 */} + + + {/* 项目列表 */} + + + {/* 项目表单 */} + +
+ ) +} + +export default ProjectManagePage