Files
pig-farm-controller-fe/src/main.js

97 lines
4.8 KiB
JavaScript
Raw Normal View History

2025-10-22 15:39:42 +08:00
import {createApp} from 'vue';
import {createRouter, createWebHistory} from 'vue-router';
2025-09-19 14:25:20 +08:00
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
2025-10-20 16:14:59 +08:00
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'; // 导入 Element Plus 中文语言包
2025-09-19 14:25:20 +08:00
import App from './App.vue';
2025-10-22 15:39:42 +08:00
import Home from './views/home/Home.vue';
import DeviceList from './views/device/DeviceList.vue';
import PlanList from './views/plan/PlanList.vue';
import LoginForm from './views/home/LoginForm.vue';
import DeviceTemplateList from './views/device/DeviceTemplateList.vue';
2025-10-20 16:31:16 +08:00
// --- 统一导入所有监控视图 ---
import DeviceCommandLogView from './views/monitor/DeviceCommandLogView.vue';
import FeedUsageRecordsView from './views/monitor/FeedUsageRecordsView.vue';
import MedicationLogsView from './views/monitor/MedicationLogsView.vue';
import PendingCollectionsView from './views/monitor/PendingCollectionsView.vue';
import PigBatchLogsView from './views/monitor/PigBatchLogsView.vue';
import PigPurchasesView from './views/monitor/PigPurchasesView.vue';
import PigSalesView from './views/monitor/PigSalesView.vue';
import PigSickLogsView from './views/monitor/PigSickLogsView.vue';
import PigTransferLogsView from './views/monitor/PigTransferLogsView.vue';
import PlanExecutionLogsView from './views/monitor/PlanExecutionLogsView.vue';
import RawMaterialPurchasesView from './views/monitor/RawMaterialPurchasesView.vue';
import RawMaterialStockLogsView from './views/monitor/RawMaterialStockLogsView.vue';
import SensorDataView from './views/monitor/SensorDataView.vue';
import TaskExecutionLogsView from './views/monitor/TaskExecutionLogsView.vue';
import UserActionLogsView from './views/monitor/UserActionLogsView.vue';
import WeighingBatchesView from './views/monitor/WeighingBatchesView.vue';
import WeighingRecordsView from './views/monitor/WeighingRecordsView.vue';
// ---------------------------
2025-09-19 14:25:20 +08:00
// 导入全局样式
import './assets/styles/main.css';
// 配置路由
const routes = [
2025-10-22 15:39:42 +08:00
{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: '/login', component: LoginForm},
2025-10-20 16:31:16 +08:00
2025-10-22 15:39:42 +08:00
// --- 统一注册所有监控路由 ---
{path: '/monitor/device-command-logs', component: DeviceCommandLogView, meta: {requiresAuth: true}},
{path: '/monitor/feed-usage-records', component: FeedUsageRecordsView, meta: {requiresAuth: true}},
{path: '/monitor/medication-logs', component: MedicationLogsView, meta: {requiresAuth: true}},
{path: '/monitor/pending-collections', component: PendingCollectionsView, meta: {requiresAuth: true}},
{path: '/monitor/pig-batch-logs', component: PigBatchLogsView, meta: {requiresAuth: true}},
{path: '/monitor/pig-purchases', component: PigPurchasesView, meta: {requiresAuth: true}},
{path: '/monitor/pig-sales', component: PigSalesView, meta: {requiresAuth: true}},
{path: '/monitor/pig-sick-logs', component: PigSickLogsView, meta: {requiresAuth: true}},
{path: '/monitor/pig-transfer-logs', component: PigTransferLogsView, meta: {requiresAuth: true}},
{path: '/monitor/plan-execution-logs', component: PlanExecutionLogsView, meta: {requiresAuth: true}},
{path: '/monitor/raw-material-purchases', component: RawMaterialPurchasesView, meta: {requiresAuth: true}},
{path: '/monitor/raw-material-stock-logs', component: RawMaterialStockLogsView, meta: {requiresAuth: true}},
{path: '/monitor/sensor-data', component: SensorDataView, meta: {requiresAuth: true}},
{path: '/monitor/task-execution-logs', component: TaskExecutionLogsView, meta: {requiresAuth: true}},
{path: '/monitor/user-action-logs', component: UserActionLogsView, meta: {requiresAuth: true}},
{path: '/monitor/weighing-batches', component: WeighingBatchesView, meta: {requiresAuth: true}},
{path: '/monitor/weighing-records', component: WeighingRecordsView, meta: {requiresAuth: true}},
// ---------------------------
2025-09-19 14:25:20 +08:00
];
const router = createRouter({
2025-10-22 15:39:42 +08:00
history: createWebHistory(),
routes
2025-09-19 14:25:20 +08:00
});
2025-09-30 22:35:36 +08:00
// 全局路由守卫
router.beforeEach((to, from, next) => {
2025-10-22 15:39:42 +08:00
const loggedIn = localStorage.getItem('jwt_token');
2025-09-30 22:35:36 +08:00
2025-10-22 15:39:42 +08:00
if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {
// 如果路由需要认证但用户未登录,则重定向到登录页
next('/login');
} else if (to.path === '/login' && loggedIn) {
// 如果用户已登录但试图访问登录页,则重定向到首页
next('/');
} else {
next(); // 正常放行
}
2025-09-30 22:35:36 +08:00
});
2025-09-19 14:25:20 +08:00
// 创建Vue应用实例
const app = createApp(App);
2025-10-20 16:14:59 +08:00
// 全局配置 Element Plus 为中文
2025-10-22 15:39:42 +08:00
app.use(ElementPlus, {locale: zhCn});
2025-09-19 14:25:20 +08:00
// 使用路由
app.use(router);
// 挂载应用
2025-09-30 22:35:36 +08:00
app.mount('#app');