52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import React, { useEffect, useState } from "react";
|
|
import Taro from "@tarojs/taro";
|
|
import { View } from "@tarojs/components";
|
|
import { check_login_status } from "@/services/loginService";
|
|
|
|
export function getCurrentFullPath(): string {
|
|
const pages = Taro.getCurrentPages();
|
|
const currentPage = pages.at(-1);
|
|
|
|
if (currentPage) {
|
|
console.log(currentPage, "currentPage get");
|
|
const route = currentPage.route;
|
|
const options = currentPage.options || {};
|
|
|
|
const query = Object.keys(options)
|
|
.map((key) => `${key}=${options[key]}`)
|
|
.join("&");
|
|
|
|
return query ? `/${route}?${query}` : `/${route}`;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
export default function withAuth<P extends object>(
|
|
WrappedComponent: React.ComponentType<P>,
|
|
) {
|
|
const ComponentWithAuth: React.FC<P> = (props: P) => {
|
|
const [authed, setAuthed] = useState(false);
|
|
useEffect(() => {
|
|
const is_login = check_login_status();
|
|
setAuthed(is_login);
|
|
|
|
if (!is_login) {
|
|
const currentPage = getCurrentFullPath();
|
|
// Taro.redirectTo({
|
|
// url: `/pages/login/index/index${
|
|
// currentPage ? `?redirect=${encodeURIComponent(currentPage)}` : ''
|
|
// }`,
|
|
// })
|
|
}
|
|
}, []);
|
|
|
|
// if (!authed) {
|
|
// return <View style={{ width: '100vh', height: '100vw', backgroundColor: 'white', position: 'fixed', top: 0, left: 0, zIndex: 999 }} /> // 空壳,避免 children 渲染出错
|
|
// }
|
|
|
|
return <WrappedComponent {...props} />;
|
|
};
|
|
|
|
return ComponentWithAuth;
|
|
}
|