feat: 构建系统重构 + VCHSM 架构迁移 + 右键菜单修复 + 尺寸参数统一
## 构建、打包与分发系统重构 (build/) - 构建系统收敛至 build/ 目录:build.mjs + electron-builder.js + 6 个脚本 - electron-builder 配置从 package.json 提取为 build/electron-builder.js - 新增 --edition (personal/enterprise) 和 --channel (stable/beta/alpha) 参数 - OSS 路径按渠道隔离 - 新增 pre-build-check.mjs:Git/CHANGELOG/版本/环境变量校验 - 新增 bump-version.mjs:版本号管理 + CHANGELOG 自动生成 - updater.ts 发送 channel/edition/deviceFingerprint - 新增 src/shared/utils/rollout.ts 灰度测试工具 - 新增 10 条 NPM 脚本 ## VCHSM 五层架构迁移 - 7 个业务模块 + ~500 处导入路径同步 ## 修复 - MediaCardContextMenu 改用共享 ContextMenu 组件 - ComboBox 尺寸参数显示统一 (size-format.ts) ## 文档 - UpdateA.md / build/README.md / README.md / .env.example 更新 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
// ============================================================
|
||||
// auth-persistence — 本地认证偏好持久化(记住账号 / 自动登录)
|
||||
//
|
||||
// 职责:
|
||||
// - 存储/读取登录表单偏好(用户名回填、记住密码、自动登录标记)
|
||||
// - 纯 localStorage 操作,不依赖 React
|
||||
// - 密码从不持久化(安全性由 JWT + safeStorage 保障)
|
||||
//
|
||||
// 与 auth-token.ts 的分工:
|
||||
// auth-token.ts → JWT token 生命周期(refresh/access,safeStorage 加密)
|
||||
// auth-persistence.ts → 登录表单偏好(localStorage 明文,仅用户名/标记)
|
||||
// ============================================================ */
|
||||
|
||||
const STORAGE_KEY = 'ele-heixiu-auth';
|
||||
|
||||
interface StoredAuth {
|
||||
/** 上次登录的用户名(表单回填用) */
|
||||
username: string;
|
||||
/** 是否记住用户名(勾选后表单自动回填用户名) */
|
||||
remember: boolean;
|
||||
/** 是否勾选了自动登录(AppProvider 据此决定启动时是否刷新 token) */
|
||||
autoLogin: boolean;
|
||||
}
|
||||
|
||||
function readAuth(): StoredAuth | null {
|
||||
try {
|
||||
const raw = localStorage.getItem(STORAGE_KEY);
|
||||
if (!raw) return null;
|
||||
return JSON.parse(raw) as StoredAuth;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function writeAuth(auth: StoredAuth): void {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify(auth));
|
||||
} catch {
|
||||
/* 静默 */
|
||||
}
|
||||
}
|
||||
|
||||
// ---------- 公共 API ----------
|
||||
|
||||
/** 读取自动登录标记(AppProvider 启动时调用) */
|
||||
export function getAutoLoginFlag(): boolean {
|
||||
return readAuth()?.autoLogin || false;
|
||||
}
|
||||
|
||||
/** 仅清除自动登录标记(保留用户名,下次还能回填表单) */
|
||||
export function clearAutoLoginFlag(): void {
|
||||
const auth = readAuth();
|
||||
if (!auth) return;
|
||||
writeAuth({ ...auth, autoLogin: false });
|
||||
}
|
||||
|
||||
/** 清除所有保存的认证偏好 */
|
||||
export function clearSavedAuth(): void {
|
||||
try {
|
||||
localStorage.removeItem(STORAGE_KEY);
|
||||
} catch {
|
||||
/* 静默 */
|
||||
}
|
||||
}
|
||||
|
||||
/** 保存认证偏好(登录成功时调用) */
|
||||
export function saveAuth(username: string, remember: boolean, autoLogin: boolean): void {
|
||||
writeAuth({ username, remember, autoLogin });
|
||||
}
|
||||
|
||||
/** 读取已保存的用户名(表单回填用) */
|
||||
export function getSavedUsername(): string {
|
||||
return readAuth()?.username || '';
|
||||
}
|
||||
|
||||
/** 读取记住密码标记 */
|
||||
export function getSavedRemember(): boolean {
|
||||
return readAuth()?.remember || false;
|
||||
}
|
||||
|
||||
/** 读取自动登录标记 */
|
||||
export function getSavedAutoLogin(): boolean {
|
||||
return readAuth()?.autoLogin || false;
|
||||
}
|
||||
Reference in New Issue
Block a user