Skip to content

Commit

Permalink
修复登录 bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Akiraka committed Nov 21, 2023
2 parents 19df5fa + c783a6e commit f151e56
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 113 deletions.
10 changes: 9 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,19 @@ COPY package*.json ./
RUN npm install -g cnpm --registry=https://registry.npmmirror.com
RUN cnpm install
COPY . .
<<<<<<< HEAD
RUN npm run build:prod
=======
RUN npm run build
>>>>>>> c783a6ef305ea32ac430b5826a7a13ab5898515d

# production stage
FROM registry.cn-shanghai.aliyuncs.com/lwmeng/nginx
COPY --from=build-stage /app/dist /usr/share/nginx/html

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
<<<<<<< HEAD
CMD ["nginx", "-g", "daemon off;"]
=======
CMD ["nginx", "-g", "daemon off;"]
>>>>>>> c783a6ef305ea32ac430b5826a7a13ab5898515d
60 changes: 25 additions & 35 deletions src/layout/components/Avatar/index.vue
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
<template>
<a-dropdown position="bl" :style="{ top: '52px' }">
<div class="avatar-container">
<a-space class="avatar">
<a-avatar :size="32" :style="{ backgroundColor: '#3370ff' }">
<img alt="avatar" :src="userInfo.avatar" />
<img alt="avatar" :src="userInfo?.avatar" />
</a-avatar>
<div class="user-info">
<div class="user-info-name">{{ userInfo.name }}</div>
<!-- <div class="user-info-desc">{{ userInfo.introduction }}</div> -->
</div>
</div>
<a-typography-text bold>{{ userInfo?.name }}</a-typography-text>
</a-space>
<template #content>
<a-doption @click="$router.push('/profile')">
<template #icon>
<icon-settings />
</template>
<template #default>用户设置</template>
<template #default>个人设置</template>
</a-doption>
<a-doption @click="handleLogout()">
<a-doption @click="handleLogout">
<template #icon>
<icon-export />
</template>
<template #default>退出登陆</template>
<template #default>退出登录</template>
</a-doption>
</template>
</a-dropdown>
Expand All @@ -29,48 +26,41 @@
<script setup>
import { getCurrentInstance } from 'vue';
import { storeToRefs } from 'pinia';
import {
IconSettings,
IconExport,
} from '@arco-design/web-vue/es/icon';
import { IconSettings, IconExport } from '@arco-design/web-vue/es/icon';
import { useUserStore } from '@/store/userInfo';
import { clearLocalStorage } from '@/utils/storage';
import { usePermissionStore } from '@/store/permission'
const store = useUserStore();
const permissionStore = usePermissionStore();
const { userInfo } = storeToRefs(store);
const { proxy } = getCurrentInstance();
const handleLogout = () => {
proxy.$modal.warning({
title: '提示',
content: '确定注销并退出登陆系统吗',
content: '确定注销并退出登录系统吗?',
hideCancel: false,
onOk: () => {
window.sessionStorage.removeItem('token');
clearLocalStorage();
window.sessionStorage.clear();
store.userLogout();
permissionStore.ClearMenuList();
proxy.$router.push('/login');
},
});
};
</script>
<style lang="scss" scoped>
.avatar-container {
display: flex;
cursor: pointer;
.user-info {
margin-left: 10px;
&-name {
color: var(--color-text-1);
font-weight: 700;
padding-top: 8px;
}
&-desc {
color: var(--color-text-1);
font-size: 12px;
line-height: 1.4;
}
}
.avatar {
// padding: 0px 5px;
// line-height: 50px;
// text-align: center;
// transition: all 0.3s ease-in-out;
// cursor: pointer;
// &:hover {
// background-color: #e5e5e5;
// }
}
</style>
</style>
33 changes: 15 additions & 18 deletions src/router/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,31 +62,28 @@ const router = createRouter({
// beforeEach router
router.beforeEach(async (to, from, next) => {
const store = useUserStore();

const permissionStore = usePermissionStore();

// 获取系统配置信息
await store.getSysConfig();
if (!store.sysConfig){
await store.getSysConfig();
}

// 判断用户Token是否获取
if (to.name !== 'login' && !store.token) {
if (!store.token && to.name !== 'login') {
next({ name: 'login' });
} else {
// 判断判断权限有无获取
if (store.token && store.roles.length === 0) {
store.getUserInfo();
if (store.token && !store.roles) {
await store.getUserInfo();
await permissionStore.getMenuRole();

permissionStore.addRouters.forEach((route) => {
router.addRoute('/', route);
});
// next(to.fullPath);
// 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由
next({ ...to, replace: true })
} else {
next();
}

}
});

Expand All @@ -102,14 +99,14 @@ router.afterEach((to) => {
}

// Vincent 2023004 修复加载水印的bug
if (store.userInfo != undefined){
if ( store.userInfo.name != undefined ) {
Watermark.set(store.userInfo.name)
} else {
Watermark.out() // 清除水印
}
} else{
Watermark.out() // 清除水印
}
// if (store.userInfo != undefined){
// if ( store.userInfo.name != undefined ) {
// Watermark.set(store.userInfo.name)
// } else {
// Watermark.out() // 清除水印
// }
// } else{
// Watermark.out() // 清除水印
// }
});
export default router;
53 changes: 31 additions & 22 deletions src/store/userInfo.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,57 @@
import { defineStore } from 'pinia';
import { setLocalStorage, getLocalStorage } from '@/utils/storage';
import { storage } from '@/utils/storage';
import { getInfo } from '@/api/admin/sys-user';
import { getAppConfig } from '@/api/admin/login';

export const useUserStore = defineStore('user', {
state: () => {
return {
token: window.sessionStorage.getItem('token') || '',
uid: window.sessionStorage.getItem('uid') || '',
sysConfig: getLocalStorage('sysConfig'),
userInfo: '',
token: storage.getItem('token') || null,
uid: storage.getItem('uid') || null,
sysConfig: null,
userInfo: null,
}
},
getters: {
roles: (state) => state.userInfo.roles || [],
roles: (state) => state?.userInfo?.roles,
},
actions: {
setToken(token) {
this.token = token;

window.sessionStorage.setItem('token', token);
// Akiraka 20230504 设置缓存 token
storage.setItem('token', token);
},
async getUserInfo() {
try {
const res = await getInfo();
// window.sessionStorage.setItem('uid', res.data.userId);
window.localStorage.setItem('uid', res.data.userId);
this.userInfo = res.data;
const { data } = await getInfo();
// storage.setItem('userInfo', res.data);
storage.setItem('uid', data.userId);
this.userInfo = data;
} catch (err) {
console.error(err);
}
},
async getSysConfig() {
try {
const res = await getAppConfig();
setLocalStorage('sysConfig', res.data);
this.sysConfig = res.data;
} catch (err) {
console.error(err);
const sysConfig = storage.getItem('sysConfig');
if (sysConfig) {
this.sysConfig = sysConfig;
} else {
try {
const { data, code, errorMessage } = await getAppConfig();
if ( code === 200 ) {
storage.setItem('sysConfig', data);
this.sysConfig = data;
}
} catch (err) {
console.error(err);
}
}
},
userLogout() {
this.token = null;
this.userInfo = null;
// Akiraka 20230504 清除缓存 token
storage.removeItem('token');
}
},
userLogout() {
this.token = null;
this.userInfo = null;
}
})
2 changes: 1 addition & 1 deletion src/utils/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useUserStore } from '../store/userInfo'

// create an axios instance
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_URL,
baseUrl: import.meta.env.VITE_APP_BASE_URL,
timeout: 8000,
});

Expand Down
60 changes: 25 additions & 35 deletions src/utils/storage.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,31 @@
// LocalStorage

/**
* 存储LocalStorage
* @param {string, Object} name
* @param {*} value
*/
export const setLocalStorage = (name, value) => {
if (!name) throw new Error('name must be specified');
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
window.localStorage.setItem(name, value);
}
export const storage = {
getKeys() {
const keys = [];
for (let i = 0; i < window.localStorage.length; i++) {
keys.push(window.localStorage.key(i));
}

/**
* 获取LocalStorage
* @param {string, Object} name
* @returns
*/
export const getLocalStorage = (name) => {
if(!name) throw new Error('name must be specified');
const value = window.localStorage.getItem(name);
return JSON.parse(value);
}
return keys;
},
setItem(key, val) {
if (typeof key !== 'string') {
key = key.toString();
}

/**
* 移除指定name
* @param {*} name
*/
export const removeLocalStorage = (name) => {
if (!name) throw new Error('name must be specified');
window.localStorage.removeItem(name);
}
if (key === undefined || key.trim().length === 0) throw new Error('key 参数不能为空或者undefined');

/**
* 清空所有LocalStorage
*/
export const clearLocalStorage = () => {
window.localStorage.clear();
window.localStorage.setItem(key, JSON.stringify(val));
},
getItem(key) {
const val = window.localStorage.getItem(key);
return JSON.parse(val);
},
clearAllKeys() {
window.localStorage.clear();
},
removeItem(key) {
window.localStorage.removeItem(key);
}
}
2 changes: 1 addition & 1 deletion vite.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default defineConfig({
port: 1798,
proxy: {
'/api/v1': {
target: 'http://127.0.0.1:8000',
target: 'http://117.50.186.148:8000',
}
}
},
Expand Down

0 comments on commit f151e56

Please sign in to comment.