From 059a29a8d524d5385b9c5cbac46a905bfbcfc00d Mon Sep 17 00:00:00 2001 From: JustMe Date: Fri, 16 Oct 2026 18:30:59 +0800 Subject: [PATCH] feat(web): ask for a display name when creating an account [CI] --- web/src/features/home/AccountPanel.tsx | 8 +++++--- web/src/store/account.ts | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/web/src/features/home/AccountPanel.tsx b/web/src/features/home/AccountPanel.tsx index 1f9de12..d9d2572 100644 --- a/web/src/features/home/AccountPanel.tsx +++ b/web/src/features/home/AccountPanel.tsx @@ -25,6 +25,7 @@ export function AccountPanel({ variant = 'default' }: { variant?: 'default' | 'a const refreshShares = useShares((s) => s.refresh); const [register, setRegister] = useState(true); const [username, setUsername] = useState(''); + const [displayName, setDisplayName] = useState(''); const [password, setPassword] = useState(''); const [confirm, setConfirm] = useState(''); const [message, setMessage] = useState(''); @@ -63,8 +64,8 @@ export function AccountPanel({ variant = 'default' }: { variant?: 'default' | 'a if (creating && password !== confirm) { setMessage('两次输入的密码不一致'); return; } setMessage(''); try { - if (unlockUsername) await unlockPasskey(password, remember); else await login(username, password, register, remember); - setPassword(''); setConfirm(''); + if (unlockUsername) await unlockPasskey(password, remember); else await login(username, password, register, remember, displayName); + setPassword(''); setConfirm(''); setDisplayName(''); await Promise.all([refreshChannels(), refreshShares()]); setMessage(register ? '账号已创建,资源保险库已同步。' : '已登录,资源保险库已同步。'); const pending = useChannels.getState().pendingLink; @@ -90,13 +91,14 @@ export function AccountPanel({ variant = 'default' }: { variant?: 'default' | 'a : null} {unlockUsername ?

已用Passkey确认账号,请输入账号密码解锁资源。

: null} + {creating ? : null} {creating ? : null} {creating ? : null} - {creating ?

账号 ID 是登录用的唯一标识,不是显示名称;显示名称可在登录后的个人资料里设置。密码用于在本机加密你的资源保险库,忘记后无法找回,请妥善保管。

: null} + {creating ?

账号 ID 是登录用的唯一标识,注册后不能改;个人名称是其他成员看到的名字,留空就显示账号 ID,之后可在个人资料里修改。密码用于在本机加密你的资源保险库,忘记后无法找回,请妥善保管。

: null}
diff --git a/web/src/store/account.ts b/web/src/store/account.ts index 6bbfd36..24533cc 100644 --- a/web/src/store/account.ts +++ b/web/src/store/account.ts @@ -12,7 +12,7 @@ import { loginWithPasskey, passkeyApi } from '@/core-bridge/passkeys'; interface AccountState extends AccountStatus { busy: boolean; hydrated: boolean; - login: (username: string, password: string, create: boolean, remember?: boolean) => Promise; + login: (username: string, password: string, create: boolean, remember?: boolean, displayName?: string) => Promise; passkeyLogin: (username: string, remember: boolean) => Promise; unlockPasskey: (password: string, remember: boolean) => Promise; cancelPasskey: () => Promise; @@ -46,10 +46,12 @@ export const useAccount = create()((set, get) => ({ catch (error) { set({ busy: false, unlockUsername: undefined, error: error instanceof Error ? error.message : '账号解锁失败' }); throw error; } }, cancelPasskey: async () => { await passkeyApi.cancel(); set({ unlockUsername: undefined, error: undefined }); }, - login: async (username, password, create, remember = true) => { + login: async (username, password, create, remember = true, displayName = '') => { set({ busy: true, error: undefined }); try { - const status = create ? await accountApi.register(username, password, remember) : await accountApi.login(username, password, remember); + let status = create ? await accountApi.register(username, password, remember) : await accountApi.login(username, password, remember); + // 注册时填的个人名称:账号已经建好,这一步失败不算注册失败,之后可在个人资料里补 + if (create && displayName.trim()) status = await accountApi.updatePersonal(displayName.trim()).catch(() => status); clearViews(); await refreshResources(); set({ ...status, busy: false, hydrated: true }); } catch (error) {