foix
This commit is contained in:
parent
e6fc30de4a
commit
f28f07240d
|
|
@ -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<Project[]>([])
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [searchTerm, setSearchTerm] = useState('')
|
||||
const [editingProject, setEditingProject] = useState<Project | null>(null)
|
||||
const [showCreateForm, setShowCreateForm] = useState(false)
|
||||
const [formData, setFormData] = useState<FormData>({
|
||||
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 (
|
||||
<div className="p-6">
|
||||
{/* 页面标题 */}
|
||||
<div className="mb-6">
|
||||
<h1 className="text-2xl font-bold text-gray-900">项目管理</h1>
|
||||
<p className="text-gray-600 mt-2">管理项目信息,包括项目目录、商品信息等</p>
|
||||
</div>
|
||||
|
||||
{/* 搜索和操作栏 */}
|
||||
<ProjectSearchBar
|
||||
searchTerm={searchTerm}
|
||||
onSearchChange={setSearchTerm}
|
||||
onCreateNew={handleCreateNew}
|
||||
/>
|
||||
|
||||
{/* 项目列表 */}
|
||||
<ProjectList
|
||||
projects={projects}
|
||||
loading={loading}
|
||||
searchTerm={searchTerm}
|
||||
onEdit={handleEditProject}
|
||||
onDelete={handleDeleteProject}
|
||||
onOpenDirectory={handleOpenDirectory}
|
||||
onCreateNew={handleCreateNew}
|
||||
/>
|
||||
|
||||
{/* 项目表单 */}
|
||||
<ProjectForm
|
||||
isOpen={showCreateForm}
|
||||
isEditing={!!editingProject}
|
||||
formData={formData}
|
||||
onFormDataChange={setFormData}
|
||||
onSubmit={handleSubmitForm}
|
||||
onCancel={handleCancelForm}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default ProjectManagePage
|
||||
Loading…
Reference in New Issue