2026-06-14 16:49:18 +08:00
|
|
|
// =============================================================================
|
|
|
|
|
// 企微IT智能服务台 — 坐席工作台路由配置
|
|
|
|
|
// =============================================================================
|
|
|
|
|
// 说明:定义页面路由映射
|
|
|
|
|
// 包括:
|
|
|
|
|
// 1. /login → 登录页(简单的用户名密码表单)
|
|
|
|
|
// 2. /workspace → 坐席工作台(需要认证)
|
2026-06-16 10:07:42 +08:00
|
|
|
// 3. /agent-preview → v0.5.4 BC/DR 应急页坐席视图(公开)
|
|
|
|
|
// 4. / → 重定向到 /workspace
|
2026-06-14 16:49:18 +08:00
|
|
|
// =============================================================================
|
|
|
|
|
|
|
|
|
|
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 },
|
|
|
|
|
},
|
2026-06-16 10:07:42 +08:00
|
|
|
// v0.5.4 BC/DR 应急页坐席视图
|
|
|
|
|
{
|
|
|
|
|
path: '/agent-preview',
|
|
|
|
|
name: 'AgentPreview',
|
|
|
|
|
component: () => import('@/views/AgentPreviewView.vue'),
|
|
|
|
|
meta: { title: '坐席助手', requiresAuth: false },
|
|
|
|
|
},
|
2026-06-14 16:49:18 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
// 创建路由实例
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
// 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')
|
|
|
|
|
|
2026-06-16 10:07:42 +08:00
|
|
|
// v0.5.4 BC/DR 应急页(agent-preview)不需 Portal token
|
|
|
|
|
// 它的鉴权由 /emergency 入口的企微 JS-SDK 完成
|
|
|
|
|
if (to.name === 'AgentPreview') {
|
|
|
|
|
next()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-14 16:49:18 +08:00
|
|
|
if (requiresAuth && !token) {
|
|
|
|
|
// 需要认证但没有 token,跳转到 Portal 统一入口
|
|
|
|
|
window.location.href = '/itportal/'
|
|
|
|
|
} else if (to.path === '/login' && token) {
|
|
|
|
|
// 已登录用户访问登录页,跳转到工作台
|
|
|
|
|
next({ path: '/workspace' })
|
|
|
|
|
} else {
|
|
|
|
|
next()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
export default router
|