fix(data): 清理旧数据并保护服务端写入
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { LogOut, User, KeyRound, Eye, EyeOff, Phone, Mail, Loader2, Check } from 'lucide-react';
|
||||
import { LogOut, User, KeyRound, Eye, EyeOff, Mail, Loader2, Check } from 'lucide-react';
|
||||
import { useAuthStore } from '@/stores/useAuthStore';
|
||||
import { useMemberStore } from '@/stores/useMemberStore';
|
||||
import { FieldError } from '@/components/FieldError';
|
||||
@@ -60,9 +60,7 @@ export default function ProfilePage() {
|
||||
{role?.name ?? '-'} <span className="mx-1.5 text-white/40">·</span> {deptName}
|
||||
</p>
|
||||
<div className="flex items-center gap-3 mt-2 text-xs text-white/70">
|
||||
{user.phone && (
|
||||
<span className="flex items-center gap-1"><Phone className="h-3 w-3" />{user.phone}</span>
|
||||
)}
|
||||
<span className="flex items-center gap-1"><User className="h-3 w-3" />{user.username}</span>
|
||||
{user.email && (
|
||||
<span className="flex items-center gap-1"><Mail className="h-3 w-3" />{user.email}</span>
|
||||
)}
|
||||
@@ -113,9 +111,8 @@ function InfoForm() {
|
||||
const member = members.find((m) => m.id === user.id);
|
||||
|
||||
const [name, setName] = useState(member?.name ?? user.name);
|
||||
const [phone, setPhone] = useState(member?.phone ?? user.phone);
|
||||
const [email, setEmail] = useState(member?.email ?? user.email);
|
||||
const [errors, setErrors] = useState<{ name?: string; phone?: string; email?: string }>({});
|
||||
const [errors, setErrors] = useState<{ name?: string; email?: string }>({});
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [savedAt, setSavedAt] = useState(0);
|
||||
|
||||
@@ -133,7 +130,6 @@ function InfoForm() {
|
||||
|
||||
const handleReset = () => {
|
||||
setName(member?.name ?? user.name);
|
||||
setPhone(member?.phone ?? user.phone);
|
||||
setEmail(member?.email ?? user.email);
|
||||
setErrors({});
|
||||
};
|
||||
@@ -143,8 +139,6 @@ function InfoForm() {
|
||||
const errs: typeof errors = {};
|
||||
if (!name.trim()) errs.name = '请输入姓名';
|
||||
else if (name.trim().length > 20) errs.name = '姓名最长 20 字符';
|
||||
if (!phone.trim()) errs.phone = '请输入手机号';
|
||||
else if (!/^1[3-9]\d{9}$/.test(phone.trim())) errs.phone = '手机号格式错误';
|
||||
if (!email.trim()) errs.email = '请输入邮箱';
|
||||
else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim())) errs.email = '邮箱格式错误';
|
||||
setErrors(errs);
|
||||
@@ -152,7 +146,7 @@ function InfoForm() {
|
||||
|
||||
setSubmitting(true);
|
||||
setTimeout(() => {
|
||||
updateMember(user.id, { name: name.trim(), phone: phone.trim(), email: email.trim() });
|
||||
updateMember(user.id, { name: name.trim(), email: email.trim() });
|
||||
refreshUser();
|
||||
setSubmitting(false);
|
||||
setSavedAt(Date.now());
|
||||
@@ -168,9 +162,8 @@ function InfoForm() {
|
||||
<input value={name} onChange={(e) => setName(e.target.value)} className="h-9 w-full rounded-lg border border-[var(--line)] bg-[var(--bg-card)] px-3 text-[13px] focus:border-[var(--accent)] focus:outline-none" />
|
||||
<FieldError message={errors.name} />
|
||||
</Field>
|
||||
<Field label="手机号" required>
|
||||
<input value={phone} onChange={(e) => setPhone(e.target.value)} placeholder="11位手机号" className="h-9 w-full rounded-lg border border-[var(--line)] bg-[var(--bg-card)] px-3 text-[13px] focus:border-[var(--accent)] focus:outline-none" />
|
||||
<FieldError message={errors.phone} />
|
||||
<Field label="用户名">
|
||||
<input value={member?.username ?? user.username} disabled className="h-9 w-full rounded-lg border border-[var(--line)] bg-zinc-50 px-3 font-mono text-[13px] text-[var(--ink-soft)] cursor-not-allowed" />
|
||||
</Field>
|
||||
<Field label="邮箱" required>
|
||||
<input value={email} onChange={(e) => setEmail(e.target.value)} placeholder="name@company.com" className="h-9 w-full rounded-lg border border-[var(--line)] bg-[var(--bg-card)] px-3 text-[13px] focus:border-[var(--accent)] focus:outline-none" />
|
||||
|
||||
Reference in New Issue
Block a user