| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- /**
- * 用户管理工具
- * 处理用户信息、权限、状态等相关功能
- * 适配mobile2工程
- */
- import { userStorage } from '@/common/storage';
- /**
- * 用户信息管理
- */
- export const userManager = {
- /**
- * 获取当前用户信息
- */
- getCurrentUser() {
- const userInfo = userStorage.getUserInfo();
- if (!userInfo || !userInfo.user) {
- return null;
- }
- const user = userInfo.user;
- const permissions = userInfo.permissions || [];
- const roles = userInfo.roles || [];
- return {
- // 基本信息
- userId: user.userId,
- userName: user.userName,
- nickName: user.nickName || user.userName,
- email: user.email,
- phoneNumber: user.phoneNumber,
- sex: user.sex,
- avatar: user.avatar,
- // 部门信息
- deptId: user.deptId,
- deptName: user?.deptName || '',
- // 状态信息
- status: user.status,
- createTime: user.createTime,
- loginDate: user.loginDate,
- // 权限信息
- permissions,
- roles,
- // 扩展信息
- remark: user.remark,
- };
- },
- /**
- * 检查用户是否拥有指定权限
- * @param {string} permission 权限标识
- */
- hasPermission(permission) {
- if (!permission) return true;
- const userInfo = this.getCurrentUser();
- if (!userInfo || !userInfo.permissions) {
- return false;
- }
- return userInfo.permissions.includes(permission);
- },
- /**
- * 检查用户是否拥有指定角色
- * @param {string} role 角色标识
- */
- hasRole(role) {
- if (!role) return true;
- const userInfo = this.getCurrentUser();
- if (!userInfo || !userInfo.roles) {
- return false;
- }
- return userInfo.roles.some((r) => r.roleKey === role);
- },
- /**
- * 检查用户是否为管理员
- */
- isAdmin() {
- return this.hasRole('admin') || this.hasRole('super_admin');
- },
- /**
- * 获取用户显示名称
- */
- getDisplayName() {
- const user = this.getCurrentUser();
- if (!user) return '未登录';
- return user.nickName || user.userName || '用户';
- },
- /**
- * 格式化用户信息用于显示
- */
- formatUserForDisplay() {
- const user = this.getCurrentUser();
- if (!user) return null;
- return {
- name: this.getDisplayName(),
- avatar: user.avatar || '/static/logo.png',
- deptName: user.deptName || '未设置部门',
- status: user.status,
- loginDate: user.loginDate,
- };
- },
- /**
- * 检查用户状态是否正常
- */
- isUserStatusNormal() {
- const user = this.getCurrentUser();
- if (!user) return false;
- // 0 = 正常,1 = 停用
- return user.status === '0' || user.status === 0;
- },
- /**
- * 获取用户完整信息字符串
- */
- getUserInfoString() {
- const user = this.getCurrentUser();
- if (!user) return '未登录用户';
- const info = [
- `用户名: ${user.userName || '未知'}`,
- `昵称: ${user.nickName || '未设置'}`,
- `部门: ${user.deptName || '未分配'}`,
- `邮箱: ${user.email || '未设置'}`,
- `手机: ${user.phoneNumber || '未设置'}`,
- ];
- if (user.loginDate) {
- info.push(`登录时间: ${new Date(user.loginDate).toLocaleString()}`);
- }
- return info.join('\n');
- },
- /**
- * 更新用户信息(仅更新本地缓存)
- * @param {Object} updatedInfo 更新的信息
- */
- updateUserInfo(updatedInfo) {
- const currentInfo = userStorage.getUserInfo();
- if (!currentInfo) return false;
- try {
- const newInfo = {
- ...currentInfo,
- user: {
- ...currentInfo.user,
- ...updatedInfo,
- },
- };
- uni.setStorageSync('userInfo', JSON.stringify(newInfo));
- console.log('用户信息已更新', updatedInfo);
- return true;
- } catch (error) {
- console.error('更新用户信息失败:', error);
- return false;
- }
- },
- };
- /**
- * 用户状态管理
- */
- export const userState = {
- /**
- * 检查并处理登录状态
- */
- autoLoginCheck() {
- if (!userStorage.isLoggedIn()) {
- console.log('用户未登录,跳转到登录页');
- uni.reLaunch({
- url: '/pages/login/index',
- });
- return false;
- }
- return true;
- },
- /**
- * 处理登录成功
- * @param {Object} loginResult 登录结果
- * @param {Object} userInfo 用户信息
- */
- handleLoginSuccess(loginResult, userInfo) {
- try {
- // 保存登录信息
- userStorage.saveLoginInfo(loginResult, userInfo);
- // 可以在这里添加其他登录成功后的处理
- console.log('登录成功处理完成', {
- user: userInfo?.user?.userName,
- hasToken: !!loginResult?.access_token,
- });
- return true;
- } catch (error) {
- console.error('登录成功处理失败:', error);
- return false;
- }
- },
- /**
- * 处理登录失败
- * @param {Error} error 错误信息
- */
- handleLoginError(error) {
- console.error('登录失败:', error);
- // 清除可能残留的登录信息
- userStorage.clearAll();
- // 显示错误提示
- uni.showToast({
- title: '登录失败',
- icon: 'error',
- duration: 2000,
- });
- },
- /**
- * 处理退出登录
- */
- async handleLogout() {
- try {
- // 清除本地数据
- userStorage.clearAll();
- // 跳转到登录页
- uni.reLaunch({
- url: '/pages/login/index',
- });
- console.log('退出登录处理完成');
- return true;
- } catch (error) {
- console.error('退出登录处理失败:', error);
- return false;
- }
- },
- };
- /**
- * 默认导出用户管理器
- */
- export default userManager;
|