// ============================================================================= // 企微IT智能服务台 — 坐席工作台路由配置 // ============================================================================= // 说明:定义页面路由映射 // 包括: // 1. /login → 登录页(简单的用户名密码表单) // 2. /workspace → 坐席工作台(需要认证) // 3. /agent-preview → v0.5.4 BC/DR 应急页坐席视图(公开) // 4. / → 重定向到 /workspace // ============================================================================= import { createRouter, createWebHistory } from 'vue-router' // -------------------------------------------------------------------------- // 路由配置 // -------------------------------------------------------------------------- const routes = [ { // 根路径重定向到工作台 path: '/', redirect: '/workspace', }, { // 登录页面 path: '/login', name: 'Login', component: () => import('@/views/Login.vue'), meta: { title: '坐席登录', requiresAuth: false }, }, { // 坐席工作台主页面 path: '/workspace', name: 'Workspace', component: () => import('@/views/Workspace.vue'), meta: { title: '坐席工作台', requiresAuth: true }, }, // v0.5.4 BC/DR 应急页坐席视图 { path: '/agent-preview', name: 'AgentPreview', component: () => import('@/views/AgentPreviewView.vue'), meta: { title: '坐席助手', requiresAuth: false }, }, ] // -------------------------------------------------------------------------- // 创建路由实例 // -------------------------------------------------------------------------- // createWebHistory: 使用 HTML5 History 模式,基础路径 /itagent/(与IT数据平台共享域名) const router = createRouter({ history: createWebHistory('/itagent/'), routes, }) // -------------------------------------------------------------------------- // 路由守卫 — 检查登录状态 // -------------------------------------------------------------------------- // 访问需要认证的页面前,检查 localStorage 中是否有 token // 没有 token 则跳转到登录页 router.beforeEach((to, _from, next) => { // 设置页面标题 if (to.meta.title) { document.title = `${to.meta.title} - IT智能服务台` } // ======================================================================== // Portal Token 传递:从 URL 参数 ?token=xxx 读取并保存到 localStorage // ======================================================================== const urlParams = new URLSearchParams(window.location.search) const urlToken = urlParams.get('token') if (urlToken) { // 保存 token 到坐席端 localStorage key localStorage.setItem('agent_token', urlToken) // 同时保存到 portal_token key(方便跨端共享) localStorage.setItem('portal_token', urlToken) // 清除 URL 参数,避免刷新页面重复读取 const cleanUrl = window.location.pathname window.history.replaceState({}, '', cleanUrl) } // 检查是否需要认证 const requiresAuth = to.meta.requiresAuth !== false // 默认需要认证 const token = localStorage.getItem('agent_token') // v0.5.4 BC/DR 应急页(agent-preview)不需 Portal token // 它的鉴权由 /emergency 入口的企微 JS-SDK 完成 if (to.name === 'AgentPreview') { next() return } if (requiresAuth && !token) { // 需要认证但没有 token,跳转到 Portal 统一入口 window.location.href = '/itportal/' } else if (to.path === '/login' && token) { // 已登录用户访问登录页,跳转到工作台 next({ path: '/workspace' }) } else { next() } }) export default router