diff --git a/package.json b/package.json
index 1f44331d..46133187 100644
--- a/package.json
+++ b/package.json
@@ -9,11 +9,12 @@
},
"dependencies": {
"@types/color": "^3.0.3",
+ "@types/crypto-js": "^4.1.1",
"@types/keymaster": "^1.6.30",
"animate.css": "^4.1.1",
"axios": "0.23.0",
"color": "^4.2.3",
- "crypto-ts": "^1.0.2",
+ "crypto-js": "^4.1.1",
"echarts-liquidfill": "^3.1.0",
"highlight.js": "^11.5.0",
"html2canvas": "^1.4.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1f16f11d..4d65f563 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2,6 +2,7 @@ lockfileVersion: 5.3
specifiers:
'@types/color': ^3.0.3
+ '@types/crypto-js': ^4.1.1
'@types/keymaster': ^1.6.30
'@types/node': ^16.11.26
'@typescript-eslint/eslint-plugin': ^5.18.0
@@ -15,7 +16,7 @@ specifiers:
animate.css: ^4.1.1
axios: 0.23.0
color: ^4.2.3
- crypto-ts: ^1.0.2
+ crypto-js: ^4.1.1
default-passive-events: ^2.0.0
echarts: ^5.3.2
echarts-liquidfill: ^3.1.0
@@ -53,11 +54,12 @@ specifiers:
dependencies:
'@types/color': 3.0.3
+ '@types/crypto-js': 4.1.1
'@types/keymaster': 1.6.30
animate.css: 4.1.1
axios: 0.23.0
color: 4.2.3
- crypto-ts: 1.0.2
+ crypto-js: 4.1.1
echarts-liquidfill: 3.1.0_echarts@5.3.2
highlight.js: 11.5.0
html2canvas: 1.4.1
@@ -624,6 +626,10 @@ packages:
'@types/color-convert': 2.0.0
dev: false
+ /@types/crypto-js/4.1.1:
+ resolution: {integrity: sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==}
+ dev: false
+
/@types/estree/0.0.39:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
@@ -1491,13 +1497,8 @@ packages:
which: 2.0.2
dev: true
- /crypto-ts/1.0.2:
- resolution: {integrity: sha512-TcBWwF8ghYhVd/qPSwvY4nsbDZRN/PVxQ1Uc8ryRLiX4M4C5XSPyIhVgR4M5mIhrQEnWIktLcrv+FIqhKk2t3g==}
- peerDependencies:
- '@angular/common': '>= 5.0.0'
- '@angular/core': '>= 5.0.0'
- dependencies:
- tslib: 1.14.1
+ /crypto-js/4.1.1:
+ resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==}
dev: false
/css-line-break/2.1.0:
@@ -4016,6 +4017,7 @@ packages:
/tslib/1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: true
/tslib/2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts
index af5c92bf..d709043c 100644
--- a/src/enums/pageEnum.ts
+++ b/src/enums/pageEnum.ts
@@ -30,7 +30,7 @@ export enum PageEnum {
// 我的项目
BASE_HOME_ITEMS = '/project/items',
- BASE_HOME_ITEMS_NAME = 'Project-Ttems',
+ BASE_HOME_ITEMS_NAME = 'Project-Items',
// 我的模板
BASE_HOME_TEMPLATE = '/project/my-template',
diff --git a/src/layout/components/LayoutFooter/index.vue b/src/layout/components/LayoutFooter/index.vue
index 081c0bc0..d6e9c485 100644
--- a/src/layout/components/LayoutFooter/index.vue
+++ b/src/layout/components/LayoutFooter/index.vue
@@ -1,12 +1,19 @@
diff --git a/src/router/router-guards.ts b/src/router/router-guards.ts
index 9b550a8c..aedb0667 100644
--- a/src/router/router-guards.ts
+++ b/src/router/router-guards.ts
@@ -1,6 +1,6 @@
import { Router } from 'vue-router';
import { PageEnum } from '@/enums/pageEnum'
-
+import { loginCheck } from '@/utils'
export function createRouterGuards(router: Router) {
// 前置
@@ -11,6 +11,13 @@ export function createRouterGuards(router: Router) {
if (isErrorPage === -1) {
next({ name: PageEnum.ERROR_PAGE_NAME_404 })
}
+
+ if (!loginCheck()) {
+ if (to.name === PageEnum.BASE_LOGIN_NAME) {
+ next()
+ }
+ next({ name: PageEnum.BASE_LOGIN_NAME })
+ }
next()
})
diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts
index 96989aa2..f3530da9 100644
--- a/src/utils/crypto.ts
+++ b/src/utils/crypto.ts
@@ -1,29 +1,34 @@
-import * as CryptoJS from 'crypto-ts'
-// 加密
-const AES_KEY = 'mt'
+import CryptoJS from 'crypto-js'
+import { isString } from './type'
+const KEY = 'mt'
+
+/**
+ * * 加密
+ * @param data { string }
+ * @returns
+ */
export const cryptoEncode = (data: string): string => {
- if (typeof data !== 'string') return ''
+ if (!isString(data)) return ''
// 加密
- const key = CryptoJS.enc.Utf8.parse(AES_KEY)
- const str = JSON.stringify(data)
- const encryptedData = CryptoJS.AES.encrypt(str, key, {
+ const encryptedData = CryptoJS.AES.encrypt(data, KEY, {
mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.PKCS7,
- iv: CryptoJS.enc.Utf8.parse(AES_KEY)
- })
- return encryptedData.toString()
+ padding: CryptoJS.pad.Pkcs7
+ }).toString()
+ return encryptedData
}
-// 解密
+
+/**
+ * * 解密
+ * @param data { string }
+ * @returns
+ */
export const cryptoDecode = (data: string): string => {
- if (typeof data !== 'string') return ''
- const encryptedHexStr = CryptoJS.enc.Utf8.parse(data)
- const encryptedBase64Str = CryptoJS.enc.Utf8.stringify(encryptedHexStr)
- const key = CryptoJS.enc.Utf8.parse(AES_KEY)
- const decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
+ if (!isString(data)) return ''
+ // 解密
+ const decryptedData = CryptoJS.AES.decrypt(data, KEY, {
mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.PKCS7,
- iv: CryptoJS.enc.Utf8.parse(AES_KEY)
+ padding: CryptoJS.pad.Pkcs7
})
return decryptedData.toString(CryptoJS.enc.Utf8)
}
diff --git a/src/utils/router.ts b/src/utils/router.ts
index a790bf7a..f2bf6142 100644
--- a/src/utils/router.ts
+++ b/src/utils/router.ts
@@ -1,8 +1,11 @@
import { useRoute } from 'vue-router'
import { ResultEnum } from '@/enums/httpEnum'
import { ErrorPageNameMap, PageEnum } from '@/enums/pageEnum'
-import router from '@/router'
import { docPath, giteeSourceCodePath } from '@/settings/pathConst'
+import { cryptoDecode } from './crypto'
+import { StorageEnum } from '@/enums/storageEnum'
+import { clearLocalStorage, getLocalStorage } from './storage'
+import router from '@/router'
/**
* * 根据名字跳转路由
@@ -101,6 +104,7 @@ export const reloadRoutePage = () => {
* * 退出
*/
export const logout = () => {
+ clearLocalStorage(StorageEnum.GO_LOGIN_INFO_STORE)
routerTurnByName(PageEnum.BASE_LOGIN_NAME)
}
@@ -128,6 +132,10 @@ export const openGiteeSourceCode = () => {
openNewWindow(giteeSourceCodePath)
}
+/**
+ * * 判断是否是预览页
+ * @returns boolean
+ */
export const isPreview = () => {
return document.location.hash.includes('preview')
}
@@ -152,3 +160,21 @@ export const fetchRouteParams = () => {
export const goHome = () => {
routerTurnByName(PageEnum.BASE_HOME_NAME)
}
+
+/**
+ * * 判断是否登录(现阶段是有 login 数据即可)
+ * @return boolean
+ */
+export const loginCheck = () => {
+ try {
+ const info = getLocalStorage(StorageEnum.GO_LOGIN_INFO_STORE)
+ if (!info) return false
+ const decodeInfo = cryptoDecode(info)
+ if (decodeInfo) {
+ return true
+ }
+ return false
+ } catch (error) {
+ return false
+ }
+}
\ No newline at end of file
diff --git a/src/utils/storage.ts b/src/utils/storage.ts
index 420d9e1f..60e7c7e8 100644
--- a/src/utils/storage.ts
+++ b/src/utils/storage.ts
@@ -18,7 +18,7 @@
* @param k 键名
* @returns any
*/
-export const getLocalStorage = (k: string) => {
+ export const getLocalStorage = (k: string) => {
const item = window.localStorage.getItem(k)
try {
return item ? JSON.parse(item) : item
@@ -27,6 +27,14 @@ export const getLocalStorage = (k: string) => {
}
}
+/**
+ * * 清除本地会话数据
+ * @param name
+ */
+ export const clearLocalStorage = (name: string) => {
+ window.localStorage.removeItem(name)
+}
+
/**
* * 存储临时会话数据
* @param k 键名
@@ -52,4 +60,12 @@ export const getSessionStorage: (k: string) => any = (k: string) => {
} catch (err) {
return item
}
+}
+
+/**
+ * * 清除本地会话数据
+ * @param name
+ */
+export const clearSessioStorage = (name: string) => {
+ window.sessionStorage.removeItem(name)
}
\ No newline at end of file
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 3edaa7f2..e439aa42 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -116,11 +116,6 @@