58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
import { createApp } from 'vue';
|
|
import { createRouter, createWebHistory } from 'vue-router';
|
|
import ElementPlus from 'element-plus';
|
|
import 'element-plus/dist/index.css';
|
|
|
|
import App from './App.vue';
|
|
import Home from './components/Home.vue';
|
|
import DeviceList from './components/DeviceList.vue';
|
|
import PlanList from './components/PlanList.vue';
|
|
import LoginForm from './components/LoginForm.vue';
|
|
import DeviceTemplateList from './components/DeviceTemplateList.vue'; // 导入设备模板列表组件
|
|
import DeviceCommandLogView from './views/monitor/DeviceCommandLogView.vue'; // 导入设备命令日志视图
|
|
|
|
// 导入全局样式
|
|
import './assets/styles/main.css';
|
|
|
|
// 配置路由
|
|
const routes = [
|
|
{ path: '/', component: Home, meta: { requiresAuth: true } },
|
|
{ path: '/devices', component: DeviceList, meta: { requiresAuth: true } },
|
|
{ path: '/device-templates', component: DeviceTemplateList, meta: { requiresAuth: true } }, // 添加设备模板路由
|
|
{ path: '/plans', component: PlanList, meta: { requiresAuth: true } },
|
|
{ path: '/monitor/device-command-logs', component: DeviceCommandLogView, meta: { requiresAuth: true } }, // 添加设备命令日志路由
|
|
{ path: '/login', component: LoginForm }
|
|
];
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes
|
|
});
|
|
|
|
// 全局路由守卫
|
|
router.beforeEach((to, from, next) => {
|
|
const loggedIn = localStorage.getItem('jwt_token');
|
|
|
|
if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {
|
|
// 如果路由需要认证但用户未登录,则重定向到登录页
|
|
next('/login');
|
|
} else if (to.path === '/login' && loggedIn) {
|
|
// 如果用户已登录但试图访问登录页,则重定向到首页
|
|
next('/');
|
|
} else {
|
|
next(); // 正常放行
|
|
}
|
|
});
|
|
|
|
// 创建Vue应用实例
|
|
const app = createApp(App);
|
|
|
|
// 使用Element Plus组件库
|
|
app.use(ElementPlus);
|
|
|
|
// 使用路由
|
|
app.use(router);
|
|
|
|
// 挂载应用
|
|
app.mount('#app');
|