43 lines
900 B
TypeScript
43 lines
900 B
TypeScript
import { computed, onMounted, ref } from 'vue';
|
|
import { getToken, logout, setToken } from '@/shared/auth';
|
|
|
|
/**
|
|
* Popup 的登录状态与操作。
|
|
*/
|
|
export const useLogin = () => {
|
|
const token = ref<string | null>(null);
|
|
|
|
/** 当前是否已登录。 */
|
|
const isLoggedIn = computed(() => token.value !== null);
|
|
|
|
/**
|
|
* 登录并保存 token。
|
|
*/
|
|
const handleLogin = async () => {
|
|
const value = 'xxx';
|
|
await setToken(value);
|
|
token.value = value;
|
|
};
|
|
|
|
/**
|
|
* 退出登录并清理本地状态。
|
|
*/
|
|
const handleLogout = async () => {
|
|
await logout();
|
|
token.value = null;
|
|
};
|
|
|
|
/**
|
|
* 组件挂载时,从存储恢复 token。
|
|
*/
|
|
onMounted(async () => {
|
|
token.value = await getToken();
|
|
});
|
|
|
|
return {
|
|
isLoggedIn,
|
|
handleLogin,
|
|
handleLogout,
|
|
};
|
|
};
|