Merge branch 'Breach' of https://git.yinlihupo.cn/LiuRui/DJKB into Breach

This commit is contained in:
2025-08-28 15:03:41 +08:00
3 changed files with 69 additions and 14 deletions

View File

@@ -17,37 +17,37 @@ const routes = [
path: '/login',
name: 'Login',
component: Login,
// meta: { requiresAuth: false }
meta: { requiresAuth: false }
},
{
path: '/sale',
name: 'Sale',
component: Sale,
// meta: { requiresAuth: true, minLevel: 1 }
meta: { requiresAuth: true, minLevel: 1 }
},
{
path: '/manager',
name: 'Manager',
component: Manager,
// meta: { requiresAuth: true, minLevel: 2 }
meta: { requiresAuth: true, minLevel: 2 }
},
{
path: '/senior-manager',
name: 'SeniorManager',
component: SeniorManager,
// meta: { requiresAuth: true, minLevel: 3 }
meta: { requiresAuth: true, minLevel: 3 }
},
{
path: '/second-top',
name: 'SecondTop',
component: SecondTop,
// meta: { requiresAuth: true, minLevel: 4 }
meta: { requiresAuth: true, minLevel: 4 }
},
{
path: '/top',
name: 'Top',
component: TopOne,
// meta: { requiresAuth: true, minLevel: 5 }
meta: { requiresAuth: true, minLevel: 5 }
}
]
@@ -57,9 +57,47 @@ const router = createRouter({
})
// 路由守卫
router.beforeEach((to, from, next) => {
router.beforeEach(async (to, from, next) => {
const userStore = useUserStore()
// 检查URL参数中是否包含token和用户信息来自其他页面的跳转
const urlToken = to.query.token
const urlUsername = to.query.username
const urlLevel = to.query.level
// 如果URL中包含token和用户信息进行自动登录
if (urlToken && urlUsername && urlLevel) {
try {
// 解码用户名URL编码的中文
const decodedUsername = decodeURIComponent(urlUsername)
// 直接设置用户信息到store跳过API验证因为token来自可信源
userStore.login(urlToken, decodedUsername, parseInt(urlLevel), '', '')
// 根据用户等级跳转到对应页面
const defaultRoutes = {
1: '/sale',
2: '/manager',
3: '/senior-manager',
4: '/second-top',
5: '/top'
}
const targetRoute = defaultRoutes[parseInt(urlLevel)] || '/sale'
// 如果当前路由就是目标路由,直接通过;否则重定向
if (to.path === targetRoute) {
next()
} else {
next(targetRoute)
}
return
} catch (error) {
console.error('自动登录失败:', error)
// 如果自动登录失败,继续正常的路由守卫逻辑
}
}
// 如果路由不需要认证,直接通过
if (!to.meta.requiresAuth) {
next()

View File

@@ -5,8 +5,8 @@ import { useUserStore } from '@/stores/user'
// 创建axios实例
const service = axios.create({
// baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径支持完整URL
baseURL: 'http://192.168.15.121:8890' || '', // API基础路径支持完整URL
baseURL: 'https://mldash.nycjy.cn/' || '', // API基础路径支持完整URL
// baseURL: 'http://192.168.15.121:8890' || '', // API基础路径支持完整URL
timeout: 100000, // 请求超时时间
headers: {
'Content-Type': 'application/json;charset=UTF-8'
@@ -32,7 +32,7 @@ service.interceptors.request.use(
_t: Date.now()
}
}
// https://mldash.nycjy.cn/login
// 显示加载状态
if (config.showLoading !== false) {
// 可以在这里添加全局loading

View File

@@ -552,12 +552,25 @@ const cancelSecuritySetup = () => {
}
// Token验证登录函数
const handleTokenLogin = async (token) => {
const handleTokenLogin = async (token, username = null, userLevel = null) => {
loading.value = true
errorMessage.value = ''
try {
// 使用token进行验证登录
// 如果URL中包含用户信息直接使用跳过API验证
if (username && userLevel) {
// 解码用户名
const decodedUsername = decodeURIComponent(username)
// 直接设置用户信息到store
userStore.login(token, decodedUsername, parseInt(userLevel), '', '')
// 根据用户等级跳转到对应页面
navigateToUserPage(parseInt(userLevel))
return
}
// 使用token进行API验证登录
const response = await http.post('/api/v1/token_login', {
token: token
})
@@ -586,9 +599,13 @@ const handleTokenLogin = async (token) => {
// 组件挂载时检查路由参数中的token
onMounted(() => {
const token = route.query.token
const username = route.query.username
const userLevel = route.query.level
if (token) {
// 如果路由参数中有token直接进行token验证登录
handleTokenLogin(token)
// 如果路由参数中有token进行token验证登录
// 如果同时有用户信息直接使用否则通过API验证
handleTokenLogin(token, username, userLevel)
}
})
</script>