diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/api/indexMedia.ts b/src/api/indexMedia.ts
index b7e1652..72d60b2 100644
--- a/src/api/indexMedia.ts
+++ b/src/api/indexMedia.ts
@@ -67,11 +67,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess && response.data.code !== responseCode.mediaSuccess && response.data.code !== responseCode.mediaError) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/api/indexMedia.ts b/src/api/indexMedia.ts
index b7e1652..72d60b2 100644
--- a/src/api/indexMedia.ts
+++ b/src/api/indexMedia.ts
@@ -67,11 +67,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess && response.data.code !== responseCode.mediaSuccess && response.data.code !== responseCode.mediaError) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/router/index.ts b/src/router/index.ts
index 579b155..0a2c6fc 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -10,6 +10,7 @@
import useUserStore from '@/store/modules/user'
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
+import { queryString, stripscript } from '@/utils/validate'
const { isLoading } = useNProgress()
@@ -19,112 +20,131 @@
})
router.beforeEach(async (to, from, next) => {
- console.log('to:', to.path)
- const settingsStore = useSettingsStore()
- const userStore = useUserStore()
- const menuStore = useMenuStore()
- const routeStore = useRouteStore()
- settingsStore.app.enableProgress && (isLoading.value = true)
- // 是否已登录
- if (userStore.isLogin) {
- if (to.name === 'login') { // 如果还要进入登录页,直接跳转
- next()
- }
- else {
- if (!userStore.hasUserInfo) {
- // 获取用户信息
- await userStore.getUserInfo()
-
- console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ if (to.name !== 'NoPage') {
+ console.log('to:', to.path)
+ const settingsStore = useSettingsStore()
+ const userStore = useUserStore()
+ const menuStore = useMenuStore()
+ const routeStore = useRouteStore()
+ settingsStore.app.enableProgress && (isLoading.value = true)
+ // 是否已登录
+ if (userStore.isLogin) {
+ if (to.name === 'login') { // 如果还要进入登录页,直接跳转
+ next()
}
- // 是否已根据权限动态生成并注册路由
- if (routeStore.isGenerate) {
- // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
- settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
- // 如果已登录状态下,进入登录页会强制跳转到控制台页面
- if (to.name === 'login') {
- next({
- name: 'index',
- replace: true,
- })
+ else {
+ // 携带token 需要去掉
+ const hrefIdx = window.location.href.indexOf('token') // url中是否携带token
+ if (hrefIdx > -1) {
+ const params = queryString(window.location.href)
+ const token = stripscript(params.token)
+ localStorage.setItem('token', token)
+ localStorage.setItem('tokenBak', 'true')
+ // 刷新页面并隐藏token
+ window.location.href = window.location.href.replace(`?token=${token}`, '')
+ // history.go(0)
}
- // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
- else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
- if (menuStore.sidebarMenus.length > 0) {
+ else {
+ localStorage.setItem('tokenBak', 'false')
+ }
+ if (!userStore.hasUserInfo) {
+ // 获取用户信息
+ await userStore.getUserInfo()
+
+ console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ }
+ // 是否已根据权限动态生成并注册路由
+ if (routeStore.isGenerate) {
+ // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
+ settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
+ // 如果已登录状态下,进入登录页会强制跳转到控制台页面
+ if (to.name === 'login') {
next({
- path: menuStore.sidebarMenusFirstDeepestPath,
+ name: 'index',
replace: true,
})
}
- // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
+ else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
+ if (menuStore.sidebarMenus.length > 0) {
+ next({
+ path: menuStore.sidebarMenusFirstDeepestPath,
+ replace: true,
+ })
+ }
+ // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ else {
+ next()
+ }
+ }
+ // 正常访问页面
else {
next()
}
}
- // 正常访问页面
else {
- next()
- }
- }
- else {
- // 生成动态路由
- switch (settingsStore.app.routeBaseOn) {
- case 'frontend':
- await routeStore.generateRoutesAtFront(asyncRoutes)
- break
- case 'backend':
- await routeStore.generateRoutesAtBack()
- break
- case 'filesystem':
- await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
- // 文件系统生成的路由,需要手动生成导航数据
- switch (settingsStore.menu.baseOn) {
- case 'frontend':
- await menuStore.generateMenusAtFront()
- break
- case 'backend':
- await menuStore.generateMenusAtBack()
- break
- }
- break
- }
- // 注册并记录路由数据
- // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
- const removeRoutes: Function[] = []
- routeStore.flatRoutes.forEach((route) => {
- if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 生成动态路由
+ switch (settingsStore.app.routeBaseOn) {
+ case 'frontend':
+ await routeStore.generateRoutesAtFront(asyncRoutes)
+ break
+ case 'backend':
+ await routeStore.generateRoutesAtBack()
+ break
+ case 'filesystem':
+ await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
+ // 文件系统生成的路由,需要手动生成导航数据
+ switch (settingsStore.menu.baseOn) {
+ case 'frontend':
+ await menuStore.generateMenusAtFront()
+ break
+ case 'backend':
+ await menuStore.generateMenusAtBack()
+ break
+ }
+ break
}
- })
- // 添加静态路由
- if (settingsStore.app.routeBaseOn !== 'filesystem') {
- routeStore.flatSystemRoutes.forEach((route) => {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 注册并记录路由数据
+ // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
+ const removeRoutes: Function[] = []
+ routeStore.flatRoutes.forEach((route) => {
+ if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ }
+ })
+ // 添加静态路由
+ if (settingsStore.app.routeBaseOn !== 'filesystem') {
+ routeStore.flatSystemRoutes.forEach((route) => {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ })
+ }
+ routeStore.setCurrentRemoveRoutes(removeRoutes)
+ // 动态路由生成并注册后,重新进入当前路由
+ next({
+ path: to.path,
+ query: to.query,
+ replace: true,
})
}
- routeStore.setCurrentRemoveRoutes(removeRoutes)
- // 动态路由生成并注册后,重新进入当前路由
+ }
+ }
+ else {
+ // 未登录跳转到登录
+ if (to.name !== 'login') {
next({
- path: to.path,
- query: to.query,
- replace: true,
+ name: 'login',
+ query: {
+ redirect: to.fullPath,
+ },
})
}
+ else {
+ next()
+ }
}
}
else {
- // 未登录跳转到登录
- if (to.name !== 'login') {
- next({
- name: 'login',
- query: {
- redirect: to.fullPath,
- },
- })
- }
- else {
- next()
- }
+ next()
}
})
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/api/indexMedia.ts b/src/api/indexMedia.ts
index b7e1652..72d60b2 100644
--- a/src/api/indexMedia.ts
+++ b/src/api/indexMedia.ts
@@ -67,11 +67,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess && response.data.code !== responseCode.mediaSuccess && response.data.code !== responseCode.mediaError) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/router/index.ts b/src/router/index.ts
index 579b155..0a2c6fc 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -10,6 +10,7 @@
import useUserStore from '@/store/modules/user'
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
+import { queryString, stripscript } from '@/utils/validate'
const { isLoading } = useNProgress()
@@ -19,112 +20,131 @@
})
router.beforeEach(async (to, from, next) => {
- console.log('to:', to.path)
- const settingsStore = useSettingsStore()
- const userStore = useUserStore()
- const menuStore = useMenuStore()
- const routeStore = useRouteStore()
- settingsStore.app.enableProgress && (isLoading.value = true)
- // 是否已登录
- if (userStore.isLogin) {
- if (to.name === 'login') { // 如果还要进入登录页,直接跳转
- next()
- }
- else {
- if (!userStore.hasUserInfo) {
- // 获取用户信息
- await userStore.getUserInfo()
-
- console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ if (to.name !== 'NoPage') {
+ console.log('to:', to.path)
+ const settingsStore = useSettingsStore()
+ const userStore = useUserStore()
+ const menuStore = useMenuStore()
+ const routeStore = useRouteStore()
+ settingsStore.app.enableProgress && (isLoading.value = true)
+ // 是否已登录
+ if (userStore.isLogin) {
+ if (to.name === 'login') { // 如果还要进入登录页,直接跳转
+ next()
}
- // 是否已根据权限动态生成并注册路由
- if (routeStore.isGenerate) {
- // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
- settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
- // 如果已登录状态下,进入登录页会强制跳转到控制台页面
- if (to.name === 'login') {
- next({
- name: 'index',
- replace: true,
- })
+ else {
+ // 携带token 需要去掉
+ const hrefIdx = window.location.href.indexOf('token') // url中是否携带token
+ if (hrefIdx > -1) {
+ const params = queryString(window.location.href)
+ const token = stripscript(params.token)
+ localStorage.setItem('token', token)
+ localStorage.setItem('tokenBak', 'true')
+ // 刷新页面并隐藏token
+ window.location.href = window.location.href.replace(`?token=${token}`, '')
+ // history.go(0)
}
- // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
- else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
- if (menuStore.sidebarMenus.length > 0) {
+ else {
+ localStorage.setItem('tokenBak', 'false')
+ }
+ if (!userStore.hasUserInfo) {
+ // 获取用户信息
+ await userStore.getUserInfo()
+
+ console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ }
+ // 是否已根据权限动态生成并注册路由
+ if (routeStore.isGenerate) {
+ // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
+ settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
+ // 如果已登录状态下,进入登录页会强制跳转到控制台页面
+ if (to.name === 'login') {
next({
- path: menuStore.sidebarMenusFirstDeepestPath,
+ name: 'index',
replace: true,
})
}
- // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
+ else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
+ if (menuStore.sidebarMenus.length > 0) {
+ next({
+ path: menuStore.sidebarMenusFirstDeepestPath,
+ replace: true,
+ })
+ }
+ // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ else {
+ next()
+ }
+ }
+ // 正常访问页面
else {
next()
}
}
- // 正常访问页面
else {
- next()
- }
- }
- else {
- // 生成动态路由
- switch (settingsStore.app.routeBaseOn) {
- case 'frontend':
- await routeStore.generateRoutesAtFront(asyncRoutes)
- break
- case 'backend':
- await routeStore.generateRoutesAtBack()
- break
- case 'filesystem':
- await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
- // 文件系统生成的路由,需要手动生成导航数据
- switch (settingsStore.menu.baseOn) {
- case 'frontend':
- await menuStore.generateMenusAtFront()
- break
- case 'backend':
- await menuStore.generateMenusAtBack()
- break
- }
- break
- }
- // 注册并记录路由数据
- // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
- const removeRoutes: Function[] = []
- routeStore.flatRoutes.forEach((route) => {
- if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 生成动态路由
+ switch (settingsStore.app.routeBaseOn) {
+ case 'frontend':
+ await routeStore.generateRoutesAtFront(asyncRoutes)
+ break
+ case 'backend':
+ await routeStore.generateRoutesAtBack()
+ break
+ case 'filesystem':
+ await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
+ // 文件系统生成的路由,需要手动生成导航数据
+ switch (settingsStore.menu.baseOn) {
+ case 'frontend':
+ await menuStore.generateMenusAtFront()
+ break
+ case 'backend':
+ await menuStore.generateMenusAtBack()
+ break
+ }
+ break
}
- })
- // 添加静态路由
- if (settingsStore.app.routeBaseOn !== 'filesystem') {
- routeStore.flatSystemRoutes.forEach((route) => {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 注册并记录路由数据
+ // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
+ const removeRoutes: Function[] = []
+ routeStore.flatRoutes.forEach((route) => {
+ if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ }
+ })
+ // 添加静态路由
+ if (settingsStore.app.routeBaseOn !== 'filesystem') {
+ routeStore.flatSystemRoutes.forEach((route) => {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ })
+ }
+ routeStore.setCurrentRemoveRoutes(removeRoutes)
+ // 动态路由生成并注册后,重新进入当前路由
+ next({
+ path: to.path,
+ query: to.query,
+ replace: true,
})
}
- routeStore.setCurrentRemoveRoutes(removeRoutes)
- // 动态路由生成并注册后,重新进入当前路由
+ }
+ }
+ else {
+ // 未登录跳转到登录
+ if (to.name !== 'login') {
next({
- path: to.path,
- query: to.query,
- replace: true,
+ name: 'login',
+ query: {
+ redirect: to.fullPath,
+ },
})
}
+ else {
+ next()
+ }
}
}
else {
- // 未登录跳转到登录
- if (to.name !== 'login') {
- next({
- name: 'login',
- query: {
- redirect: to.fullPath,
- },
- })
- }
- else {
- next()
- }
+ next()
}
})
diff --git a/src/router/routes.ts b/src/router/routes.ts
index 917b909..7aa25c1 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -22,6 +22,14 @@
},
},
{
+ path: '/noPage',
+ name: 'NoPage',
+ component: () => import('@/views/noPage.vue'),
+ meta: {
+ title: '找不到页面',
+ },
+ },
+ {
path: '/:all(.*)*',
name: 'notFound',
component: () => import('@/views/[...all].vue'),
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/api/indexMedia.ts b/src/api/indexMedia.ts
index b7e1652..72d60b2 100644
--- a/src/api/indexMedia.ts
+++ b/src/api/indexMedia.ts
@@ -67,11 +67,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess && response.data.code !== responseCode.mediaSuccess && response.data.code !== responseCode.mediaError) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/router/index.ts b/src/router/index.ts
index 579b155..0a2c6fc 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -10,6 +10,7 @@
import useUserStore from '@/store/modules/user'
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
+import { queryString, stripscript } from '@/utils/validate'
const { isLoading } = useNProgress()
@@ -19,112 +20,131 @@
})
router.beforeEach(async (to, from, next) => {
- console.log('to:', to.path)
- const settingsStore = useSettingsStore()
- const userStore = useUserStore()
- const menuStore = useMenuStore()
- const routeStore = useRouteStore()
- settingsStore.app.enableProgress && (isLoading.value = true)
- // 是否已登录
- if (userStore.isLogin) {
- if (to.name === 'login') { // 如果还要进入登录页,直接跳转
- next()
- }
- else {
- if (!userStore.hasUserInfo) {
- // 获取用户信息
- await userStore.getUserInfo()
-
- console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ if (to.name !== 'NoPage') {
+ console.log('to:', to.path)
+ const settingsStore = useSettingsStore()
+ const userStore = useUserStore()
+ const menuStore = useMenuStore()
+ const routeStore = useRouteStore()
+ settingsStore.app.enableProgress && (isLoading.value = true)
+ // 是否已登录
+ if (userStore.isLogin) {
+ if (to.name === 'login') { // 如果还要进入登录页,直接跳转
+ next()
}
- // 是否已根据权限动态生成并注册路由
- if (routeStore.isGenerate) {
- // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
- settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
- // 如果已登录状态下,进入登录页会强制跳转到控制台页面
- if (to.name === 'login') {
- next({
- name: 'index',
- replace: true,
- })
+ else {
+ // 携带token 需要去掉
+ const hrefIdx = window.location.href.indexOf('token') // url中是否携带token
+ if (hrefIdx > -1) {
+ const params = queryString(window.location.href)
+ const token = stripscript(params.token)
+ localStorage.setItem('token', token)
+ localStorage.setItem('tokenBak', 'true')
+ // 刷新页面并隐藏token
+ window.location.href = window.location.href.replace(`?token=${token}`, '')
+ // history.go(0)
}
- // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
- else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
- if (menuStore.sidebarMenus.length > 0) {
+ else {
+ localStorage.setItem('tokenBak', 'false')
+ }
+ if (!userStore.hasUserInfo) {
+ // 获取用户信息
+ await userStore.getUserInfo()
+
+ console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ }
+ // 是否已根据权限动态生成并注册路由
+ if (routeStore.isGenerate) {
+ // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
+ settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
+ // 如果已登录状态下,进入登录页会强制跳转到控制台页面
+ if (to.name === 'login') {
next({
- path: menuStore.sidebarMenusFirstDeepestPath,
+ name: 'index',
replace: true,
})
}
- // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
+ else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
+ if (menuStore.sidebarMenus.length > 0) {
+ next({
+ path: menuStore.sidebarMenusFirstDeepestPath,
+ replace: true,
+ })
+ }
+ // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ else {
+ next()
+ }
+ }
+ // 正常访问页面
else {
next()
}
}
- // 正常访问页面
else {
- next()
- }
- }
- else {
- // 生成动态路由
- switch (settingsStore.app.routeBaseOn) {
- case 'frontend':
- await routeStore.generateRoutesAtFront(asyncRoutes)
- break
- case 'backend':
- await routeStore.generateRoutesAtBack()
- break
- case 'filesystem':
- await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
- // 文件系统生成的路由,需要手动生成导航数据
- switch (settingsStore.menu.baseOn) {
- case 'frontend':
- await menuStore.generateMenusAtFront()
- break
- case 'backend':
- await menuStore.generateMenusAtBack()
- break
- }
- break
- }
- // 注册并记录路由数据
- // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
- const removeRoutes: Function[] = []
- routeStore.flatRoutes.forEach((route) => {
- if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 生成动态路由
+ switch (settingsStore.app.routeBaseOn) {
+ case 'frontend':
+ await routeStore.generateRoutesAtFront(asyncRoutes)
+ break
+ case 'backend':
+ await routeStore.generateRoutesAtBack()
+ break
+ case 'filesystem':
+ await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
+ // 文件系统生成的路由,需要手动生成导航数据
+ switch (settingsStore.menu.baseOn) {
+ case 'frontend':
+ await menuStore.generateMenusAtFront()
+ break
+ case 'backend':
+ await menuStore.generateMenusAtBack()
+ break
+ }
+ break
}
- })
- // 添加静态路由
- if (settingsStore.app.routeBaseOn !== 'filesystem') {
- routeStore.flatSystemRoutes.forEach((route) => {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 注册并记录路由数据
+ // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
+ const removeRoutes: Function[] = []
+ routeStore.flatRoutes.forEach((route) => {
+ if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ }
+ })
+ // 添加静态路由
+ if (settingsStore.app.routeBaseOn !== 'filesystem') {
+ routeStore.flatSystemRoutes.forEach((route) => {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ })
+ }
+ routeStore.setCurrentRemoveRoutes(removeRoutes)
+ // 动态路由生成并注册后,重新进入当前路由
+ next({
+ path: to.path,
+ query: to.query,
+ replace: true,
})
}
- routeStore.setCurrentRemoveRoutes(removeRoutes)
- // 动态路由生成并注册后,重新进入当前路由
+ }
+ }
+ else {
+ // 未登录跳转到登录
+ if (to.name !== 'login') {
next({
- path: to.path,
- query: to.query,
- replace: true,
+ name: 'login',
+ query: {
+ redirect: to.fullPath,
+ },
})
}
+ else {
+ next()
+ }
}
}
else {
- // 未登录跳转到登录
- if (to.name !== 'login') {
- next({
- name: 'login',
- query: {
- redirect: to.fullPath,
- },
- })
- }
- else {
- next()
- }
+ next()
}
})
diff --git a/src/router/routes.ts b/src/router/routes.ts
index 917b909..7aa25c1 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -22,6 +22,14 @@
},
},
{
+ path: '/noPage',
+ name: 'NoPage',
+ component: () => import('@/views/noPage.vue'),
+ meta: {
+ title: '找不到页面',
+ },
+ },
+ {
path: '/:all(.*)*',
name: 'notFound',
component: () => import('@/views/[...all].vue'),
diff --git a/src/utils/validate.ts b/src/utils/validate.ts
index 472373c..0141862 100644
--- a/src/utils/validate.ts
+++ b/src/utils/validate.ts
@@ -7,6 +7,30 @@
return val !== ''
}
+// 提取url params参数
+export function queryString(str: string) {
+ const params = str.split('?')[1] // 截取?号后的字符串即name=itclanCoder&study=css
+ const param = params.split('&') // 通过&符号进行分割即["name=itclanCoder", "study=css"]
+ const obj: { [key: string]: string } = {} // 用一个对象存储目标值
+ for (let i = 0; i < param.length; i++) {
+ // 循环遍历截取出来的param数组
+ const paramsA = param[i].split('=') // 通过split,=继续对数组params每一项进行分割,生成数组["name", "itclanCoder"]
+ const key = paramsA[0] // 取数组项["name", "itclanCoder"]中第0位,即name
+ const value = paramsA[1] // 取数组项["name", "itclanCoder"]中第1位,即itclanCoder
+ obj[key] = value
+ }
+ return obj
+}
+// 去除字符串中的特殊符号
+export function stripscript(s: string) {
+ var pattern = /[[\]\/:*?"<>|#]/
+ var rs = ''
+ for (var i = 0; i < s.length; i++) {
+ rs = rs + s.substr(i, 1).replace(pattern, '')
+ }
+ return rs
+}
+
//
/**
* 判断是否为整数
@@ -23,7 +47,8 @@
* @returns 是否合法
*/
export const isIp = (ip: string): boolean => {
- var rep = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
+ var rep
+ = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
return rep.test(ip)
}
@@ -96,7 +121,8 @@
* @returns {boolean}
*/
export function validateEmail(email: string) {
- const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+ const re
+ = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return re.test(email)
}
@@ -116,7 +142,8 @@
* @returns
*/
export function validateIdCardNo(value: string) {
- const re = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
+ const re
+ = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
return re.test(value)
}
/**
@@ -125,7 +152,8 @@
* @returns
*/
export function validatePhone(value: string) {
- const re = /(\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/
+ const re
+ = /(\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/
return re.test(value)
}
@@ -133,7 +161,8 @@
* 强类型密码验证
*/
export function validatePasswordStrong(value: string) {
- const re = /^(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)(?![0-9\\W]+$)(?![a-zA-Z\\W]+$)[0-9A-Za-z\\W]{6,18}$/
+ const re
+ = /^(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)(?![0-9\\W]+$)(?![a-zA-Z\\W]+$)[0-9A-Za-z\\W]{6,18}$/
return re.test(value)
}
/**
diff --git "a/gm20241028\346\211\223\345\214\205.zip" "b/gm20241028\346\211\223\345\214\205.zip"
new file mode 100644
index 0000000..b2cee12
--- /dev/null
+++ "b/gm20241028\346\211\223\345\214\205.zip"
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 84141e6..12a6978 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -10,5 +10,5 @@
"maxZoom": "13",
"zoom": "10",
"timeGap": 3000,
- "systemType": "sm"
+ "systemType": "gm"
}
diff --git a/src/api/index.ts b/src/api/index.ts
index ae60549..244333e 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -65,11 +65,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()// 携带token
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/api/indexMedia.ts b/src/api/indexMedia.ts
index b7e1652..72d60b2 100644
--- a/src/api/indexMedia.ts
+++ b/src/api/indexMedia.ts
@@ -67,11 +67,27 @@
}
else if (response.data.code !== responseCode.success && response.data.code !== responseCode.hikSuccess && response.data.code !== responseCode.mediaSuccess && response.data.code !== responseCode.mediaError) {
if (response.data.code === responseCode.noPermission) { // token失效状态跳转到登录页
- toLogin()
- if (useUserStore().isLogout === 0) {
- ElMessage.error(response.data.message || '发生错误')
+ // toLogin()
+ // if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ // }
+ // useUserStore().toLogout()
+ const hrefIdx = localStorage.getItem('tokenBak')
+ if (hrefIdx === 'true') {
+ console.log('跳转到404')
+ router.push({
+ path: '/noPage',
+ })
}
- useUserStore().toLogout()
+ else {
+ // token失效状态跳转到登录页
+ toLogin()
+ if (useUserStore().isLogout === 0) {
+ // ElMessage.error(response.data.message || '发生错误')
+ ElMessage.warning(response.data.message || '发生错误')
+ }
+ useUserStore().toLogout()
+ }
}
else if (response.data.code === 500 && response.data.message === '数据格式不正确' && response.data.data) {
const mes = response.data.data.filter((item: any, index: number) => index < 2).join(',')
diff --git a/src/router/index.ts b/src/router/index.ts
index 579b155..0a2c6fc 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -10,6 +10,7 @@
import useUserStore from '@/store/modules/user'
import useMenuStore from '@/store/modules/menu'
import useRouteStore from '@/store/modules/route'
+import { queryString, stripscript } from '@/utils/validate'
const { isLoading } = useNProgress()
@@ -19,112 +20,131 @@
})
router.beforeEach(async (to, from, next) => {
- console.log('to:', to.path)
- const settingsStore = useSettingsStore()
- const userStore = useUserStore()
- const menuStore = useMenuStore()
- const routeStore = useRouteStore()
- settingsStore.app.enableProgress && (isLoading.value = true)
- // 是否已登录
- if (userStore.isLogin) {
- if (to.name === 'login') { // 如果还要进入登录页,直接跳转
- next()
- }
- else {
- if (!userStore.hasUserInfo) {
- // 获取用户信息
- await userStore.getUserInfo()
-
- console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ if (to.name !== 'NoPage') {
+ console.log('to:', to.path)
+ const settingsStore = useSettingsStore()
+ const userStore = useUserStore()
+ const menuStore = useMenuStore()
+ const routeStore = useRouteStore()
+ settingsStore.app.enableProgress && (isLoading.value = true)
+ // 是否已登录
+ if (userStore.isLogin) {
+ if (to.name === 'login') { // 如果还要进入登录页,直接跳转
+ next()
}
- // 是否已根据权限动态生成并注册路由
- if (routeStore.isGenerate) {
- // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
- settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
- // 如果已登录状态下,进入登录页会强制跳转到控制台页面
- if (to.name === 'login') {
- next({
- name: 'index',
- replace: true,
- })
+ else {
+ // 携带token 需要去掉
+ const hrefIdx = window.location.href.indexOf('token') // url中是否携带token
+ if (hrefIdx > -1) {
+ const params = queryString(window.location.href)
+ const token = stripscript(params.token)
+ localStorage.setItem('token', token)
+ localStorage.setItem('tokenBak', 'true')
+ // 刷新页面并隐藏token
+ window.location.href = window.location.href.replace(`?token=${token}`, '')
+ // history.go(0)
}
- // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
- else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
- if (menuStore.sidebarMenus.length > 0) {
+ else {
+ localStorage.setItem('tokenBak', 'false')
+ }
+ if (!userStore.hasUserInfo) {
+ // 获取用户信息
+ await userStore.getUserInfo()
+
+ console.log('index.ts-after userinfo', localStorage.token, userStore.username)
+ }
+ // 是否已根据权限动态生成并注册路由
+ if (routeStore.isGenerate) {
+ // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态
+ settingsStore.menu.menuMode !== 'single' && menuStore.setActived(to.path)
+ // 如果已登录状态下,进入登录页会强制跳转到控制台页面
+ if (to.name === 'login') {
next({
- path: menuStore.sidebarMenusFirstDeepestPath,
+ name: 'index',
replace: true,
})
}
- // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ // 如果未开启控制台,但进入的是控制台页面,则会进入侧边栏导航第一个模块
+ else if (!settingsStore.dashboard.enable && to.name === 'dashboard') {
+ if (menuStore.sidebarMenus.length > 0) {
+ next({
+ path: menuStore.sidebarMenusFirstDeepestPath,
+ replace: true,
+ })
+ }
+ // 如果侧边栏导航第一个模块无法命中,则还是进入控制台页面
+ else {
+ next()
+ }
+ }
+ // 正常访问页面
else {
next()
}
}
- // 正常访问页面
else {
- next()
- }
- }
- else {
- // 生成动态路由
- switch (settingsStore.app.routeBaseOn) {
- case 'frontend':
- await routeStore.generateRoutesAtFront(asyncRoutes)
- break
- case 'backend':
- await routeStore.generateRoutesAtBack()
- break
- case 'filesystem':
- await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
- // 文件系统生成的路由,需要手动生成导航数据
- switch (settingsStore.menu.baseOn) {
- case 'frontend':
- await menuStore.generateMenusAtFront()
- break
- case 'backend':
- await menuStore.generateMenusAtBack()
- break
- }
- break
- }
- // 注册并记录路由数据
- // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
- const removeRoutes: Function[] = []
- routeStore.flatRoutes.forEach((route) => {
- if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 生成动态路由
+ switch (settingsStore.app.routeBaseOn) {
+ case 'frontend':
+ await routeStore.generateRoutesAtFront(asyncRoutes)
+ break
+ case 'backend':
+ await routeStore.generateRoutesAtBack()
+ break
+ case 'filesystem':
+ await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
+ // 文件系统生成的路由,需要手动生成导航数据
+ switch (settingsStore.menu.baseOn) {
+ case 'frontend':
+ await menuStore.generateMenusAtFront()
+ break
+ case 'backend':
+ await menuStore.generateMenusAtBack()
+ break
+ }
+ break
}
- })
- // 添加静态路由
- if (settingsStore.app.routeBaseOn !== 'filesystem') {
- routeStore.flatSystemRoutes.forEach((route) => {
- removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ // 注册并记录路由数据
+ // 记录的数据会在登出时会使用到,不使用 router.removeRoute 是考虑配置的路由可能不一定有设置 name ,则通过调用 router.addRoute() 返回的回调进行删除
+ const removeRoutes: Function[] = []
+ routeStore.flatRoutes.forEach((route) => {
+ if (!/^(https?:|mailto:|tel:)/.test(route.path)) {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ }
+ })
+ // 添加静态路由
+ if (settingsStore.app.routeBaseOn !== 'filesystem') {
+ routeStore.flatSystemRoutes.forEach((route) => {
+ removeRoutes.push(router.addRoute(route as RouteRecordRaw))
+ })
+ }
+ routeStore.setCurrentRemoveRoutes(removeRoutes)
+ // 动态路由生成并注册后,重新进入当前路由
+ next({
+ path: to.path,
+ query: to.query,
+ replace: true,
})
}
- routeStore.setCurrentRemoveRoutes(removeRoutes)
- // 动态路由生成并注册后,重新进入当前路由
+ }
+ }
+ else {
+ // 未登录跳转到登录
+ if (to.name !== 'login') {
next({
- path: to.path,
- query: to.query,
- replace: true,
+ name: 'login',
+ query: {
+ redirect: to.fullPath,
+ },
})
}
+ else {
+ next()
+ }
}
}
else {
- // 未登录跳转到登录
- if (to.name !== 'login') {
- next({
- name: 'login',
- query: {
- redirect: to.fullPath,
- },
- })
- }
- else {
- next()
- }
+ next()
}
})
diff --git a/src/router/routes.ts b/src/router/routes.ts
index 917b909..7aa25c1 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -22,6 +22,14 @@
},
},
{
+ path: '/noPage',
+ name: 'NoPage',
+ component: () => import('@/views/noPage.vue'),
+ meta: {
+ title: '找不到页面',
+ },
+ },
+ {
path: '/:all(.*)*',
name: 'notFound',
component: () => import('@/views/[...all].vue'),
diff --git a/src/utils/validate.ts b/src/utils/validate.ts
index 472373c..0141862 100644
--- a/src/utils/validate.ts
+++ b/src/utils/validate.ts
@@ -7,6 +7,30 @@
return val !== ''
}
+// 提取url params参数
+export function queryString(str: string) {
+ const params = str.split('?')[1] // 截取?号后的字符串即name=itclanCoder&study=css
+ const param = params.split('&') // 通过&符号进行分割即["name=itclanCoder", "study=css"]
+ const obj: { [key: string]: string } = {} // 用一个对象存储目标值
+ for (let i = 0; i < param.length; i++) {
+ // 循环遍历截取出来的param数组
+ const paramsA = param[i].split('=') // 通过split,=继续对数组params每一项进行分割,生成数组["name", "itclanCoder"]
+ const key = paramsA[0] // 取数组项["name", "itclanCoder"]中第0位,即name
+ const value = paramsA[1] // 取数组项["name", "itclanCoder"]中第1位,即itclanCoder
+ obj[key] = value
+ }
+ return obj
+}
+// 去除字符串中的特殊符号
+export function stripscript(s: string) {
+ var pattern = /[[\]\/:*?"<>|#]/
+ var rs = ''
+ for (var i = 0; i < s.length; i++) {
+ rs = rs + s.substr(i, 1).replace(pattern, '')
+ }
+ return rs
+}
+
//
/**
* 判断是否为整数
@@ -23,7 +47,8 @@
* @returns 是否合法
*/
export const isIp = (ip: string): boolean => {
- var rep = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
+ var rep
+ = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
return rep.test(ip)
}
@@ -96,7 +121,8 @@
* @returns {boolean}
*/
export function validateEmail(email: string) {
- const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+ const re
+ = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
return re.test(email)
}
@@ -116,7 +142,8 @@
* @returns
*/
export function validateIdCardNo(value: string) {
- const re = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
+ const re
+ = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
return re.test(value)
}
/**
@@ -125,7 +152,8 @@
* @returns
*/
export function validatePhone(value: string) {
- const re = /(\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/
+ const re
+ = /(\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/
return re.test(value)
}
@@ -133,7 +161,8 @@
* 强类型密码验证
*/
export function validatePasswordStrong(value: string) {
- const re = /^(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)(?![0-9\\W]+$)(?![a-zA-Z\\W]+$)[0-9A-Za-z\\W]{6,18}$/
+ const re
+ = /^(?![0-9]+$)(?![a-zA-Z]+$)(?![0-9a-zA-Z]+$)(?![0-9\\W]+$)(?![a-zA-Z\\W]+$)[0-9A-Za-z\\W]{6,18}$/
return re.test(value)
}
/**
diff --git a/src/views/noPage.vue b/src/views/noPage.vue
new file mode 100644
index 0000000..31a7e8b
--- /dev/null
+++ b/src/views/noPage.vue
@@ -0,0 +1,52 @@
+
+name: NoPage
+meta:
+ title: 找不到页面
+ constant: true
+ layout: false
+
+
+
+
+
+
+
+
+
404
+
+ 抱歉,你访问的页面不存在
+
+
+
+
+
+