添加登陆页

This commit is contained in:
张成
2025-08-23 20:19:33 +08:00
parent ff928bb8b6
commit 5179d1aa09
20 changed files with 2773 additions and 7 deletions

View File

@@ -0,0 +1,220 @@
import Taro from '@tarojs/taro';
// 微信用户信息接口
export interface WechatUserInfo {
user_id: string;
username: string;
avatar: string;
gender: number;
city: string;
province: string;
country: string;
}
// 登录响应接口
export interface LoginResponse {
success: boolean;
message: string;
token?: string;
user_info?: WechatUserInfo;
}
// 微信授权登录
export const wechat_auth_login = async (): Promise<LoginResponse> => {
try {
// 先进行微信登录获取code
const login_result = await Taro.login();
if (!login_result.code) {
return {
success: false,
message: '微信登录失败'
};
}
// 获取用户信息
const user_profile = await get_user_profile();
// 模拟发送到后端换取登录状态
// const response = await Taro.request({
// url: '/api/wechat/login',
// method: 'POST',
// data: {
// code: login_result.code,
// user_info: user_profile
// }
// });
// 模拟成功响应
return {
success: true,
message: '微信登录成功',
token: 'wx_token_' + Date.now(),
user_info: user_profile
};
} catch (error) {
return {
success: false,
message: '微信授权失败,请重试'
};
}
};
// 手机号验证码登录接口参数
export interface PhoneLoginParams {
phone: string;
verification_code: string;
}
// 手机号验证码登录
export const phone_auth_login = async (params: PhoneLoginParams): Promise<LoginResponse> => {
try {
// 模拟网络请求延迟
await new Promise(resolve => setTimeout(resolve, 1000));
// 模拟验证码验证
if (params.verification_code === '123456') {
const user_info: WechatUserInfo = {
user_id: 'phone_' + Date.now(),
username: `用户${params.phone.slice(-4)}`,
avatar: '',
gender: 0,
city: '',
province: '',
country: ''
};
return {
success: true,
message: '登录成功',
token: 'phone_token_' + Date.now(),
user_info
};
} else {
return {
success: false,
message: '验证码错误'
};
}
} catch (error) {
return {
success: false,
message: '网络错误,请稍后重试'
};
}
};
// 获取用户信息
export const get_user_profile = (): Promise<WechatUserInfo> => {
return new Promise((resolve, reject) => {
Taro.getUserProfile({
desc: '用于完善用户资料',
success: (res) => {
const profile = res.userInfo;
const user_data: WechatUserInfo = {
user_id: 'wx_' + Date.now(),
username: profile.nickName || '微信用户',
avatar: profile.avatarUrl || '',
gender: profile.gender || 0,
city: profile.city || '',
province: profile.province || '',
country: profile.country || ''
};
resolve(user_data);
},
fail: reject
});
});
};
// 保存用户登录状态
export const save_login_state = (token: string, user_info: WechatUserInfo) => {
try {
Taro.setStorageSync('user_token', token);
Taro.setStorageSync('user_info', user_info);
Taro.setStorageSync('is_logged_in', true);
Taro.setStorageSync('login_time', Date.now());
} catch (error) {
console.error('保存登录状态失败:', error);
}
};
// 清除登录状态
export const clear_login_state = () => {
try {
Taro.removeStorageSync('user_token');
Taro.removeStorageSync('user_info');
Taro.removeStorageSync('is_logged_in');
Taro.removeStorageSync('login_time');
} catch (error) {
console.error('清除登录状态失败:', error);
}
};
// 检查是否已登录
export const check_login_status = (): boolean => {
try {
const is_logged_in = Taro.getStorageSync('is_logged_in');
const token = Taro.getStorageSync('user_token');
const login_time = Taro.getStorageSync('login_time');
// 检查登录是否过期7天
if (login_time && Date.now() - login_time > 7 * 24 * 60 * 60 * 1000) {
clear_login_state();
return false;
}
return !!(is_logged_in && token);
} catch (error) {
return false;
}
};
// 获取用户信息
export const get_user_info = (): WechatUserInfo | null => {
try {
return Taro.getStorageSync('user_info') || null;
} catch (error) {
return null;
}
};
// 获取用户token
export const get_user_token = (): string | null => {
try {
return Taro.getStorageSync('user_token') || null;
} catch (error) {
return null;
}
};
// 检查微信登录状态
export const check_wechat_login = async (): Promise<boolean> => {
try {
const check_result = await Taro.checkSession();
// Taro.checkSession 返回的是 { errMsg: string }
return check_result.errMsg === 'checkSession:ok';
} catch (error) {
return false;
}
};
// 刷新登录状态
export const refresh_login_status = async (): Promise<boolean> => {
try {
// 检查微信登录状态
const is_valid = await check_wechat_login();
if (!is_valid) {
// 微信登录已过期,需要重新登录
clear_login_state();
return false;
}
// 检查本地存储的登录状态
return check_login_status();
} catch (error) {
console.error('刷新登录状态失败:', error);
return false;
}
};