fix(core): 测试清单 行4-15 — 记住我7天/工作台布局/商品创建选择弹窗/上传图持久化/清空筛选
- 记住我7天:勾选才持久化token+预填用户名,7天过期强制重登(localStorage vs sessionStorage) - 工作台:最近项目进度/状态列对齐、快捷&提示卡片圆角边框、余额按钮金额左对齐 - 商品创建成功改为复用弹窗,选择 继续创建/去新建项目;主图随创建上传持久化 - 商品卡显示真实主图、点视频进详情视频项目tab - 商品库/视频项目补 清空筛选 按钮 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import type { FormEvent } from "react";
|
||||
import { Eye, EyeOff, LockKeyhole, UserRound } from "lucide-react";
|
||||
import { api } from "../api";
|
||||
import { api, getRemember, setRemember as persistRemember } from "../api";
|
||||
import type { Team, User } from "../types";
|
||||
import type { AuthMode } from "./route-config";
|
||||
|
||||
@@ -36,10 +36,12 @@ export function AuthScreen({
|
||||
}: {
|
||||
initialMode: AuthMode;
|
||||
onModeChange: (mode: AuthMode) => void;
|
||||
onAuthed: (payload: { token: string; user: User; team: Team }) => void | Promise<void>;
|
||||
onAuthed: (payload: { token: string; user: User; team: Team; remember?: boolean }) => void | Promise<void>;
|
||||
}) {
|
||||
const [username, setUsername] = useState("");
|
||||
const remembered = getRemember();
|
||||
const [username, setUsername] = useState(remembered?.username || "");
|
||||
const [password, setPassword] = useState("");
|
||||
const [remember, setRemember] = useState(Boolean(remembered));
|
||||
const [showPwd, setShowPwd] = useState(false);
|
||||
const [fieldErrors, setFieldErrors] = useState<FieldErrors>({});
|
||||
const [error, setError] = useState("");
|
||||
@@ -92,12 +94,14 @@ export function AuthScreen({
|
||||
try {
|
||||
const checkingStartedAt = Date.now();
|
||||
const payload = await api.login({ username: username.trim(), password });
|
||||
// 记住我:勾选则存用户名 + 7 天有效期,token 落 localStorage;否则只存当前会话
|
||||
persistRemember(username.trim(), remember);
|
||||
await completeProgressStage(checkingStartedAt);
|
||||
setLoginProgress("verified");
|
||||
await wait(LOGIN_PROGRESS_STAGE_MS);
|
||||
setLoginProgress("entering");
|
||||
await wait(LOGIN_PROGRESS_STAGE_MS);
|
||||
await onAuthed(payload);
|
||||
await onAuthed({ ...payload, remember });
|
||||
} catch (err) {
|
||||
setLoginProgress(null);
|
||||
const raw = err instanceof Error ? err.message : "";
|
||||
@@ -167,7 +171,7 @@ export function AuthScreen({
|
||||
</div>
|
||||
</div>
|
||||
<div className="row-between">
|
||||
<label><input type="checkbox" defaultChecked /> 记住我 7 天</label>
|
||||
<label><input type="checkbox" checked={remember} onChange={(event) => setRemember(event.target.checked)} /> 记住我 7 天</label>
|
||||
<a href="#" onClick={(event) => { event.preventDefault(); showToast("重置密码", "请联系团队超管重置你的登录密码"); }}>忘记密码?</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user