Files
pig-farm-controller-fe/src/main.js
2025-10-20 15:48:08 +08:00

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');