import { useState, useEffect } from 'react'; import { Settings, Settings2 } from 'lucide-react'; import Modal from '../components/Modal'; import { GlassButton, GlassInput, GlassSelect } from '../components/ui'; import useStore from '../store/useStore'; import * as dictionaryService from '../services/dictionary'; /** * ProfileModal 组件 * 用户资料模态框,支持查看和编辑模式 * @param {Object} props * @param {boolean} props.isOpen - 是否打开 * @param {Function} props.onClose - 关闭回调 */ const ProfileModal = ({ isOpen, onClose }) => { const { registrationData, lifeEvents, scripts, updateRegistration, saveUserProfile, clear } = useStore(); // 编辑模式状态 const [isEditing, setIsEditing] = useState(false); const [isSaving, setIsSaving] = useState(false); // 字典数据状态 const [zodiacOptions, setZodiacOptions] = useState([]); const [mbtiOptions, setMbtiOptions] = useState([]); const [genderOptions, setGenderOptions] = useState([]); // 编辑表单状态 const [editForm, setEditForm] = useState({ nickname: registrationData.nickname, profession: registrationData.profession || '', gender: registrationData.gender || '', mbti: registrationData.mbti, zodiac: registrationData.zodiac, hobbies: registrationData.hobbies?.join(',') || '' }); // 同步 registrationData 到 editForm useEffect(() => { setEditForm({ nickname: registrationData.nickname, profession: registrationData.profession || '', gender: registrationData.gender || '', mbti: registrationData.mbti, zodiac: registrationData.zodiac, hobbies: registrationData.hobbies?.join(',') || '' }); }, [registrationData]); // 加载字典数据 useEffect(() => { const loadDictionaries = async () => { try { const [zodiacList, mbtiList, genderList] = await Promise.all([ dictionaryService.getZodiacList(), dictionaryService.getMbtiList(), dictionaryService.getGenderList() ]); setZodiacOptions([{ value: '', label: '请选择星座' }, ...dictionaryService.transformToOptions(zodiacList)]); setMbtiOptions([{ value: '', label: '请选择MBTI' }, ...dictionaryService.transformToOptions(mbtiList)]); setGenderOptions([{ value: '', label: '请选择性别' }, ...dictionaryService.transformToOptions(genderList)]); } catch (error) { console.error('加载字典数据失败:', error); setZodiacOptions([{ value: '', label: '请选择星座' }]); setMbtiOptions([{ value: '', label: '请选择MBTI' }]); setGenderOptions([{ value: '', label: '请选择性别' }]); } }; if (isOpen) { loadDictionaries(); } }, [isOpen]); /** * 处理保存 */ const handleSave = async () => { setIsSaving(true); try { updateRegistration({ nickname: editForm.nickname, profession: editForm.profession, gender: editForm.gender, mbti: editForm.mbti, zodiac: editForm.zodiac, hobbies: editForm.hobbies.split(/[,,]/).map(s => s.trim()).filter(s => s) }); await saveUserProfile(); setIsEditing(false); } catch (error) { console.error('保存失败:', error); // 即使后端保存失败,本地已更新 setIsEditing(false); } finally { setIsSaving(false); } }; /** * 处理取消编辑 */ const handleCancel = () => { setEditForm({ nickname: registrationData.nickname, profession: registrationData.profession || '', gender: registrationData.gender || '', mbti: registrationData.mbti, zodiac: registrationData.zodiac, hobbies: registrationData.hobbies?.join(',') || '' }); setIsEditing(false); }; /** * 处理清除数据 */ const handleClear = () => { if (confirm('确定要删除所有记录吗?此操作不可逆。')) { clear(); } }; /** * 渲染查看模式 */ const renderViewMode = () => (
{registrationData.mbti || '-'} | {registrationData.zodiac || '-'}
在这里调整你的人生航向基础信息