| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- "use strict";
- const common_vendor = require("../common/vendor.js");
- const utils_api = require("./api.js");
- const TOKEN_KEY = "user_token";
- const USER_INFO_KEY = "user_info";
- let statusCheckTimer = null;
- const STATUS_CHECK_INTERVAL = 1e4;
- let isShowingDisabledModal = false;
- const setToken = (token) => {
- common_vendor.index.setStorageSync(TOKEN_KEY, token);
- };
- const getToken = () => {
- return common_vendor.index.getStorageSync(TOKEN_KEY) || null;
- };
- const removeToken = () => {
- common_vendor.index.removeStorageSync(TOKEN_KEY);
- };
- const setUserInfo = (userInfo) => {
- common_vendor.index.setStorageSync(USER_INFO_KEY, JSON.stringify(userInfo));
- };
- const getUserInfo = () => {
- const userInfo = common_vendor.index.getStorageSync(USER_INFO_KEY);
- return userInfo ? JSON.parse(userInfo) : null;
- };
- const removeUserInfo = () => {
- common_vendor.index.removeStorageSync(USER_INFO_KEY);
- };
- const isLoggedIn = () => {
- return !!getToken();
- };
- const logout = () => {
- stopStatusCheck();
- removeToken();
- removeUserInfo();
- };
- const wxSilentLogin = async (loginCode) => {
- try {
- console.log("[静默登录] 开始检查用户状态, code:", loginCode);
- const result = await utils_api.wxSilentLoginApi({ loginCode });
- console.log("[静默登录] 后端响应:", result);
- if (result.code === 200 && result.data.isSign === "true" && result.data.token) {
- setToken(result.data.token);
- console.log("[静默登录] 老用户登录成功");
- await fetchAndSaveUserInfo();
- startStatusCheck();
- }
- return result.data;
- } catch (error) {
- console.error("[静默登录] 失败:", error);
- throw error;
- }
- };
- const wxPhoneLogin = async (params) => {
- try {
- console.log("[手机号登录] 开始验证手机号");
- const result = await utils_api.wxPhoneLoginApi(params);
- console.log("[手机号登录] 后端响应:", result);
- if (result.code === 200 && result.data.isSign === "true" && result.data.token) {
- setToken(result.data.token);
- console.log("[手机号登录] 已注册用户登录成功");
- await fetchAndSaveUserInfo();
- startStatusCheck();
- }
- return result.data;
- } catch (error) {
- console.error("[手机号登录] 失败:", error);
- throw error;
- }
- };
- const wxCompleteUserInfo = async (userInfo) => {
- try {
- console.log("[完善信息] 提交用户信息");
- const result = await utils_api.wxCompleteUserInfoApi(userInfo);
- console.log("[完善信息] 后端响应:", result);
- if (result.code === 200 && result.data.token) {
- setToken(result.data.token);
- console.log("[完善信息] 注册成功");
- await fetchAndSaveUserInfo();
- startStatusCheck();
- return true;
- } else {
- throw new Error(result.message || "注册失败");
- }
- } catch (error) {
- console.error("[完善信息] 失败:", error);
- throw error;
- }
- };
- const fetchAndSaveUserInfo = async () => {
- try {
- const result = await utils_api.getUserInfoApi();
- if (result.code === 200 && result.data) {
- setUserInfo(result.data);
- console.log("[用户信息] 获取成功");
- }
- } catch (error) {
- console.error("[用户信息] 获取失败:", error);
- }
- };
- const refreshUserInfo = async () => {
- if (!isLoggedIn()) {
- return null;
- }
- try {
- const result = await utils_api.getUserInfoApi();
- if (result.code === 200 && result.data) {
- const userInfo = {
- nickname: result.data.nickname || "",
- avatar: result.data.avatar || "",
- phone: result.data.phone || "",
- status: result.data.status || 0
- };
- if (userInfo.status === 1) {
- console.log("[用户状态] 账号已被禁用,自动退出登录");
- handleUserDisabled();
- return null;
- }
- setUserInfo(userInfo);
- console.log("[刷新用户状态] 成功, status:", userInfo.status);
- return userInfo;
- }
- } catch (error) {
- console.warn("[刷新用户状态] 失败:", error.message);
- }
- return getUserInfo();
- };
- const handleUserDisabled = () => {
- if (isShowingDisabledModal) {
- return;
- }
- isShowingDisabledModal = true;
- stopStatusCheck();
- logout();
- common_vendor.index.showModal({
- title: "账号已禁用",
- content: "您的账号已被禁用,如有疑问请联系客服",
- showCancel: false,
- confirmText: "我知道了",
- success: () => {
- isShowingDisabledModal = false;
- common_vendor.index.switchTab({ url: "/pages/mine/mine" });
- }
- });
- };
- const startStatusCheck = () => {
- if (statusCheckTimer) {
- return;
- }
- if (!isLoggedIn()) {
- return;
- }
- console.log("[状态检查] 启动定时检查");
- checkUserStatus();
- statusCheckTimer = setInterval(() => {
- checkUserStatus();
- }, STATUS_CHECK_INTERVAL);
- };
- const stopStatusCheck = () => {
- if (statusCheckTimer) {
- console.log("[状态检查] 停止定时检查");
- clearInterval(statusCheckTimer);
- statusCheckTimer = null;
- }
- };
- const checkUserStatus = async () => {
- if (!isLoggedIn()) {
- stopStatusCheck();
- return;
- }
- try {
- const result = await utils_api.getUserInfoApi();
- if (result.code === 200 && result.data) {
- if (result.data.status === 1) {
- console.log("[状态检查] 检测到账号被禁用");
- handleUserDisabled();
- }
- }
- } catch (error) {
- console.warn("[状态检查] 检查失败:", error.message);
- }
- };
- const checkLogin = (callback) => {
- if (isLoggedIn()) {
- return true;
- }
- common_vendor.index.showModal({
- title: "登录提示",
- content: '此功能需要登录后使用,请点击"立即登录"按钮进行授权',
- showCancel: false,
- confirmText: "我知道了"
- });
- return false;
- };
- exports.checkLogin = checkLogin;
- exports.getUserInfo = getUserInfo;
- exports.isLoggedIn = isLoggedIn;
- exports.logout = logout;
- exports.refreshUserInfo = refreshUserInfo;
- exports.setUserInfo = setUserInfo;
- exports.startStatusCheck = startStatusCheck;
- exports.stopStatusCheck = stopStatusCheck;
- exports.wxCompleteUserInfo = wxCompleteUserInfo;
- exports.wxPhoneLogin = wxPhoneLogin;
- exports.wxSilentLogin = wxSilentLogin;
|