import { currentUser as mockCurrentUser } from '@/data/mock' const APPLY_KEY = 'aimill_hr_applications' const DRAFT_KEY = 'aimill_hr_application_drafts' const APPROVAL_KEY = 'aimill_hr_approval_results' const TRAINING_KEY = 'aimill_hr_training_progress' const PROFILE_KEY = 'aimill_hr_profile_changes' const AUTH_KEY = 'aimill_hr_auth' const REMEMBER_KEY = 'aimill_hr_remembered_account' const PASSWORD_MEMO_KEY = 'passwordMemo' const PASSWORD_INFO_KEY = 'passInfo' const TOKEN_KEY = 'token' const USER_INFO_KEY = 'userInfo' const TREE_KEY = 'treeList' const AUTHORITIES_KEY = 'authorities' const CURRENT_USER_KEY = 'currentUser' const API_INFO_KEY = 'apiInfo' export const DEMO_ACCOUNT = 'ZY20230128' export const DEMO_PASSWORD = '123456' export function saveLoginSession(data, account) { const userInfo = data && typeof data === 'object' ? data : {} const token = userInfo.token || `demo-token-${Date.now()}` const normalizedAccount = String(account || userInfo.loginName || '').trim().toUpperCase() uni.setStorageSync(TOKEN_KEY, token) uni.setStorageSync(USER_INFO_KEY, { ...userInfo, token, loginName: normalizedAccount }) uni.setStorageSync(AUTH_KEY, { account: normalizedAccount, loggedInAt: Date.now() }) } export function login(account, password, remember = true) { const normalizedAccount = String(account || '').trim().toUpperCase() if (normalizedAccount !== DEMO_ACCOUNT || String(password) !== DEMO_PASSWORD) { return false } saveLoginSession({ token: `demo-token-${Date.now()}`, sessionId: 'demo-session', userId: normalizedAccount, userName: '陈晓雨', loginName: normalizedAccount, }, normalizedAccount) saveRememberedCredentials({ account: normalizedAccount, password, rememberPassword: remember, }) savePermissionData([], []) return true } export function logout() { [AUTH_KEY, TOKEN_KEY, USER_INFO_KEY, TREE_KEY, AUTHORITIES_KEY, CURRENT_USER_KEY].forEach((key) => uni.removeStorageSync(key), ) } export function isLoggedIn() { return Boolean(uni.getStorageSync(TOKEN_KEY) && uni.getStorageSync(USER_INFO_KEY)) } // 服务器模式下需要的是真实 token(demo 登录的是 demo-token- 开头,残留时视为无效) export function hasServerAuth() { const token = uni.getStorageSync(TOKEN_KEY) const userInfo = uni.getStorageSync(USER_INFO_KEY) return Boolean(token && userInfo && !String(token).startsWith('demo-token-')) } export function getRememberedAccount() { return getRememberedCredentials().account } export function saveRememberedCredentials({ account, password, rememberPassword }) { const normalizedAccount = String(account || '').trim() if (!rememberPassword) { uni.removeStorageSync(PASSWORD_MEMO_KEY) uni.removeStorageSync(PASSWORD_INFO_KEY) uni.removeStorageSync(REMEMBER_KEY) return } uni.setStorageSync(PASSWORD_MEMO_KEY, '1') uni.setStorageSync(PASSWORD_INFO_KEY, { username: normalizedAccount, passwd: String(password || '') }) uni.setStorageSync(REMEMBER_KEY, normalizedAccount) } export function getRememberedCredentials() { const remembered = uni.getStorageSync(PASSWORD_INFO_KEY) || {} const rememberPassword = uni.getStorageSync(PASSWORD_MEMO_KEY) === '1' return { account: remembered.username || uni.getStorageSync(REMEMBER_KEY) || '', password: rememberPassword ? remembered.passwd || '' : '', rememberPassword, } } export function savePermissionData(tree, authorities) { uni.setStorageSync(TREE_KEY, JSON.stringify(Array.isArray(tree) ? tree : [])) uni.setStorageSync(AUTHORITIES_KEY, JSON.stringify(Array.isArray(authorities) ? authorities : [])) } export function getLoginUser() { return uni.getStorageSync(USER_INFO_KEY) || null } export function saveCurrentUser(data) { if (!data) return uni.setStorageSync(CURRENT_USER_KEY, data) } // 把 /system/account/getLoginUser 的 CurrentUserVO 映射成页面里使用的字段 function mapCurrentUser(vo) { if (!vo || typeof vo !== 'object') return null const name = String(vo.name || '') return { id: vo.jobNumber || vo.loginName || '', name, initials: name ? name.charAt(0) : '', department: vo.deptName || '', position: vo.postName || '', company: vo.groupName || '', phone: vo.phone || '', entryDate: vo.entryDate || '', workAge: vo.workAge || '', raw: vo, } } function isServerMode() { const info = uni.getStorageSync(API_INFO_KEY) return Boolean(info && info.mode === 'server') } // 演示模式 → mock 数据;服务器模式 → 接口返回的数据;服务器模式未拉到则返回 null export function getCurrentUser() { if (!isServerMode()) return mockCurrentUser const stored = uni.getStorageSync(CURRENT_USER_KEY) return mapCurrentUser(stored) } export function getAuthCredentials() { const userInfo = uni.getStorageSync(USER_INFO_KEY) || {} return { token: userInfo.token || '', sessionId: userInfo.sessionId || '', } } export function clearDemoStorage() { [APPLY_KEY, DRAFT_KEY, APPROVAL_KEY, TRAINING_KEY, PROFILE_KEY].forEach((key) => uni.removeStorageSync(key), ) } export function getApplications() { const saved = uni.getStorageSync(APPLY_KEY) return Array.isArray(saved) ? saved : [] } export function addApplication(item) { const list = getApplications() list.unshift({ ...item, id: Date.now(), status: '审批中', createdAt: formatNow() }) uni.setStorageSync(APPLY_KEY, list) return list } export function saveDraft(type, form) { const drafts = uni.getStorageSync(DRAFT_KEY) || {} drafts[type] = { ...form, savedAt: formatNow() } uni.setStorageSync(DRAFT_KEY, drafts) } export function getDraft(type) { const drafts = uni.getStorageSync(DRAFT_KEY) || {} return drafts[type] || null } export function removeDraft(type) { const drafts = uni.getStorageSync(DRAFT_KEY) || {} delete drafts[type] uni.setStorageSync(DRAFT_KEY, drafts) } export function getApprovalResults() { const saved = uni.getStorageSync(APPROVAL_KEY) return saved && typeof saved === 'object' ? saved : {} } export function setApprovalResult(id, status, comment = '') { const results = getApprovalResults() results[id] = { status, comment, handledAt: formatNow() } uni.setStorageSync(APPROVAL_KEY, results) return results[id] } export function getTrainingProgress(defaults) { const saved = uni.getStorageSync(TRAINING_KEY) || {} return defaults.map((item) => ({ ...item, progress: saved[item.id] ?? item.progress })) } export function setTrainingProgress(id, progress) { const saved = uni.getStorageSync(TRAINING_KEY) || {} saved[id] = progress uni.setStorageSync(TRAINING_KEY, saved) } export function saveProfileChange(item) { const list = uni.getStorageSync(PROFILE_KEY) || [] list.unshift({ ...item, id: Date.now(), status: '审核中', createdAt: formatNow() }) uni.setStorageSync(PROFILE_KEY, list) return list } export function formatNow() { const d = new Date() const pad = (n) => String(n).padStart(2, '0') return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}` }