Files
mini-programs/src/utils/helper.ts
2025-11-30 22:59:45 +08:00

125 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Taro from "@tarojs/taro";
import { check_login_status, get_user_info } from "@/services/loginService";
import { useUser } from "@/store/userStore";
// 普通函数,不调用 useLoad
export const sceneRedirectLogic = (options, defaultPage: string) => {
if (!options.scene) return;
try {
const decoded = decodeURIComponent(options.scene || "");
const params: Record<string, string> = {};
decoded.split("&").forEach((pair) => {
const [key, value] = pair.split("=");
if (key) params[key] = value ? decodeURIComponent(value) : "";
});
const query = Object.entries(params)
.map(([k, v]) => `${k}=${encodeURIComponent(v)}`)
.join("&");
Taro.redirectTo({
url: query ? `/${defaultPage}?${query}` : `/${defaultPage}`,
});
} catch (e) {
console.error(e);
}
};
// 获取当前页面路径
const getCurrentPagePath = (): string => {
const pages = Taro.getCurrentPages();
const currentPage = pages[pages.length - 1];
return currentPage ? `/${currentPage.route}${currentPage.options ? '?' + Object.entries(currentPage.options).map(([k, v]) => `${k}=${encodeURIComponent(v as string)}`).join('&') : ''}` : '';
};
// 跳转到登录页
const navigateToLogin = (currentPath?: string) => {
const path = currentPath || getCurrentPagePath();
(Taro as any).navigateTo({
url: `/login_pages/index/index${path ? `?redirect=${encodeURIComponent(path)}` : ''}`,
});
};
// 检查登录状态,如果未登录则跳转到登录页
export const requireLogin = (): boolean => {
const isLoggedIn = check_login_status();
if (!isLoggedIn) {
navigateToLogin();
return false;
}
return true;
};
// 检查登录状态和手机号,如果未登录或没有手机号则跳转到登录页绑定手机号
export const requireLoginWithPhone = (): boolean => {
// 先检查登录状态
const isLoggedIn = check_login_status();
if (!isLoggedIn) {
navigateToLogin();
return false;
}
// 检查是否有手机号
// 优先从 store 中获取用户信息
const userInfo = useUser.getState().user;
let phone = (userInfo as any)?.phone;
// 如果 store 中没有,尝试从本地存储获取
if (!phone || phone.trim() === '') {
const localUserInfo = get_user_info();
phone = localUserInfo?.phone;
}
// 如果用户信息中没有手机号,或者手机号为空
if (!phone || phone.trim() === '') {
console.log('用户未绑定手机号,跳转到登录页绑定');
navigateToLogin();
return false;
}
return true;
};
export function navto(url) {
Taro.navigateTo({
url: url,
});
}
export function toast(message) {
Taro.showToast({ title: message, icon: "none" });
}
// 将·作为连接符插入到标签文本之间
export function insertDotInTags(tags: string[]) {
if (!tags) return [];
return tags.join("-·-").split("-");
}
// 格式化NTRP水平显示统一保留一位小数
export function formatNtrpDisplay(val) {
if (!val || val === "0" || val === 0) return val;
const num = Number(val);
if (isNaN(num)) return val;
return num.toFixed(1);
}
export function genNTRPRequirementText(min, max) {
if (min && max && min !== max) {
return `${formatNtrpDisplay(min)} - ${formatNtrpDisplay(max)} 之间`;
} else if (max === "1") {
return "无要求";
} else if (max) {
return `${formatNtrpDisplay(max)} 以上`;
}
return "-";
}
export function isPhoneNumber(str) {
return /^1[3-9]\d{9}$/.test(str);
}