import React, { useState, useEffect } from 'react'; import { Card, Typography, Button, Form, Input, Select, DatePicker, InputNumber, Radio, Space, message, Divider, Row, Col } from 'antd'; import { SaveOutlined, ArrowLeftOutlined } from '@ant-design/icons'; import { useNavigate } from 'react-router-dom'; import axios from 'axios'; import dayjs from 'dayjs'; import FileUpload from '../../components/FileUpload'; import { useAuthStore } from '../../store/authStore'; const { Title, Paragraph } = Typography; const { Option } = Select; const { TextArea } = Input; interface Customer { id: number; name: string; } interface User { id: number; name: string; department?: string; } const BudgetProjectCreate: React.FC = () => { const [isMobile, setIsMobile] = useState(false); const [loading, setLoading] = useState(false); const [customers, setCustomers] = useState([]); const [users, setUsers] = useState([]); const [form] = Form.useForm(); const [attachments, setAttachments] = useState([]); const [surveyPhotos, setSurveyPhotos] = useState([]); const navigate = useNavigate(); const { user: currentUser } = useAuthStore(); const isAdmin = currentUser?.role === 'admin'; // 检查权限,如果不是管理员,重定向到列表页面 useEffect(() => { if (!isAdmin) { message.error('您没有权限访问此页面'); navigate('/budget-projects'); } }, [isAdmin, navigate]); // const { user: currentUser } = useAuthStore(); // 表单监听值 const intermediaryFeeType = Form.useWatch('intermediary_fee_type', form); useEffect(() => { const checkMobile = () => setIsMobile(window.innerWidth <= 768); checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); useEffect(() => { fetchCustomers(); fetchUsers(); }, []); const fetchCustomers = async () => { try { const res = await axios.get('/api/customers'); if (res.data.success) setCustomers(res.data.data); } catch (error) { console.error('获取客户列表失败:', error); } }; const fetchUsers = async () => { try { const res = await axios.get('/api/users'); if (res.data.success) setUsers(res.data.data); } catch (error) { console.error('获取用户列表失败:', error); } }; const handleSubmit = async () => { try { const values = await form.validateFields(); setLoading(true); const projectData = { ...values, attachments, survey_photos: surveyPhotos, survey_date: values.survey_date?.format('YYYY-MM-DD'), status: 'negotiating', }; const res = await axios.post('/api/budget-projects', projectData, { headers: { 'x-user-role': 'admin' // 创建预算项目需要管理员权限 } }); if (res.data.success) { message.success('创建成功'); navigate('/budget-projects'); } } catch (error: any) { if (error.response?.data?.error) { message.error(error.response.data.error); } else { message.error('创建失败'); } } finally { setLoading(false); } }; return (
新建商谈项目
创建新的商谈项目,添加项目基本信息
{/* 基本信息 */} 基本信息 {/* 居间人信息 */} 居间人信息 固定金额 百分比 {/* 项目详情 */} 项目详情