feat :修改文件结构
This commit is contained in:
@@ -2,11 +2,10 @@
|
||||
// AppProvider — 应用状态 Provider 组件
|
||||
// ============================================================
|
||||
|
||||
import { useState, useCallback, useEffect, type ReactNode } from 'react';
|
||||
import { useState, useMemo, useCallback, useEffect, type ReactNode } from 'react';
|
||||
import type { Platform, Edition } from '@shared/types';
|
||||
|
||||
import { getPlatform, isDev } from '@/utils/platform';
|
||||
import { parseEdition } from '@shared/constants/app';
|
||||
import { safeIpcOn, safeIpcOff } from '@/utils/ipc';
|
||||
import { AppContext } from '@/contexts/app-context';
|
||||
import type { AppContextValue } from '@/contexts/app-context';
|
||||
@@ -30,12 +29,25 @@ interface AppProviderProps {
|
||||
|
||||
export function AppProvider({ children }: AppProviderProps) {
|
||||
const [platform] = useState<Platform>(getPlatform);
|
||||
const [edition] = useState<Edition>(() => {
|
||||
return parseEdition(import.meta.env.VITE_EDITION);
|
||||
});
|
||||
const [isLoggedIn, setIsLoggedIn] = useState(false);
|
||||
const [user, setUser] = useState<LoginResponseBody | null>(null);
|
||||
|
||||
/**
|
||||
* edition 从登录用户的 account_type 派生(运行时判断,无需构建变量)
|
||||
*
|
||||
* 映射关系:
|
||||
* "individual" → personal ← 个人用户
|
||||
* "company" | "employee" → enterprise ← 企业用户
|
||||
* null(未登录) → personal ← 默认最小功能集
|
||||
*
|
||||
* 安全性:edition 是 useMemo 派生值,不可独立赋值;
|
||||
* 不写入 localStorage,重启/登出后回退默认值,必须重新登录才能确权。
|
||||
*/
|
||||
const edition: Edition = useMemo(() => {
|
||||
if (!user) return 'personal';
|
||||
return user.account_type === 'individual' ? 'personal' : 'enterprise';
|
||||
}, [user]);
|
||||
|
||||
// ---------- 登录 / 退出 ----------
|
||||
|
||||
const login = useCallback(async (auth: LoginResponseBody) => {
|
||||
|
||||
Reference in New Issue
Block a user