feat: 2023主题适配新登录模式
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB |
@@ -3,9 +3,11 @@ import {ref} from "vue";
|
||||
|
||||
export const useAdminData = defineStore('adminData', () => {
|
||||
const adminPassword = ref(localStorage.getItem('adminPassword') || '');
|
||||
const isAdmin = ref(!!localStorage.getItem('adminPassword'));
|
||||
function updateAdminPwd(pwd: string) {
|
||||
adminPassword.value = pwd;
|
||||
isAdmin.value = true;
|
||||
localStorage.setItem('adminPassword', pwd);
|
||||
}
|
||||
return { adminPassword,updateAdminPwd };
|
||||
return { adminPassword,updateAdminPwd,isAdmin };
|
||||
});
|
||||
|
||||
@@ -8,7 +8,7 @@ const instance = axios.create({
|
||||
instance.interceptors.request.use(
|
||||
(config: any) => {
|
||||
config.headers= {
|
||||
'Authorization': localStorage.getItem('adminPassword') || '',
|
||||
'Authorization': 'Bearer '+ localStorage.getItem('adminPassword') || '',
|
||||
}
|
||||
return config;
|
||||
});
|
||||
@@ -24,6 +24,7 @@ instance.interceptors.response.use(
|
||||
return Promise.reject(response.data);
|
||||
}
|
||||
}, (error:any) => {
|
||||
localStorage.clear()
|
||||
ElMessage.error(error.response.data.detail);
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<el-container v-if="isLogin" style="height: 100vh;width: 100vw;position: relative;user-select: none">
|
||||
<el-container v-if="adminData.isAdmin" style="height: 100vh;width: 100vw;position: relative;user-select: none">
|
||||
<el-header>
|
||||
<el-menu mode="horizontal" router :default-active="route.path">
|
||||
<el-menu-item v-for="menu in menus" :index="menu.path" :key="menu.path">{{menu.name}}</el-menu-item>
|
||||
<el-menu-item style="float: right" @click="toggleDark(!isDark)">{{ t('admin.menu.color') }}</el-menu-item>
|
||||
<el-menu-item style="float: right" @click="adminData.updateAdminPwd('');isLogin=false">{{ t('admin.menu.signout') }}</el-menu-item>
|
||||
<el-menu-item style="float: right" @click="logout()">{{ t('admin.menu.signout') }}</el-menu-item>
|
||||
</el-menu>
|
||||
</el-header>
|
||||
<el-main>
|
||||
@@ -29,7 +29,6 @@
|
||||
import { useDark, useToggle } from '@vueuse/core';
|
||||
import { ref } from "vue";
|
||||
const isDark = useDark()
|
||||
const isLogin = ref(false);
|
||||
const toggleDark = useToggle(isDark)
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useAdminData } from "@/stores/adminData";
|
||||
@@ -71,19 +70,23 @@ const refreshLoginStatus = () => {
|
||||
request({
|
||||
url: '/admin/login',
|
||||
method: 'post',
|
||||
data: {
|
||||
password: adminData.adminPassword,
|
||||
},
|
||||
}).then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
isLogin.value = true;
|
||||
adminData.updateAdminPwd(res.detail.token);
|
||||
ElMessage.success(t('admin.login.loginSuccess'));
|
||||
} else {
|
||||
localStorage.clear();
|
||||
ElMessage.error(t('admin.login.loginError'));
|
||||
}
|
||||
});
|
||||
};
|
||||
if (adminData.adminPassword !== '') {
|
||||
refreshLoginStatus();
|
||||
}
|
||||
const logout = () => {
|
||||
localStorage.clear();
|
||||
};
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
||||
Reference in New Issue
Block a user