You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
7.2 KiB

{"ast":null,"code":"import { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useStore } from 'vuex';\nimport { Document, Plus, List, User, Location } from '@element-plus/icons-vue';\nimport { ElMessage, ElMessageBox } from 'element-plus';\nexport default {\n __name: 'index',\n setup(__props, {\n expose: __expose\n }) {\n __expose();\n const route = useRoute();\n const router = useRouter();\n const store = useStore();\n const userInfo = computed(() => store.state.userInfo);\n const handleLogout = async () => {\n try {\n await ElMessageBox.confirm('确定要退出登录吗?', '提示', {\n type: 'warning',\n confirmButtonText: '确定',\n cancelButtonText: '取消'\n });\n\n // 直接清除本地存储的用户信息和 token\n store.dispatch('logout');\n ElMessage.success('已退出登录');\n router.push('/login');\n } catch (error) {\n if (error !== 'cancel') {\n console.error('退出失败:', error);\n }\n }\n };\n const __returned__ = {\n route,\n router,\n store,\n userInfo,\n handleLogout,\n computed,\n get useRoute() {\n return useRoute;\n },\n get useRouter() {\n return useRouter;\n },\n get useStore() {\n return useStore;\n },\n get Document() {\n return Document;\n },\n get Plus() {\n return Plus;\n },\n get List() {\n return List;\n },\n get User() {\n return User;\n },\n get Location() {\n return Location;\n },\n get ElMessage() {\n return ElMessage;\n },\n get ElMessageBox() {\n return ElMessageBox;\n }\n };\n Object.defineProperty(__returned__, '__isScriptSetup', {\n enumerable: false,\n value: true\n });\n return __returned__;\n }\n};","map":{"version":3,"names":["computed","useRoute","useRouter","useStore","Document","Plus","List","User","Location","ElMessage","ElMessageBox","route","router","store","userInfo","state","handleLogout","confirm","type","confirmButtonText","cancelButtonText","dispatch","success","push","error","console"],"sources":["D:/IDEAproject/Front-end logistics/src/components/layout/index.vue"],"sourcesContent":["<template>\r\n <el-container class=\"layout-container\">\r\n <el-aside width=\"200px\">\r\n <div class=\"logo\">物流管理系统</div>\r\n <el-menu\r\n :router=\"true\"\r\n :default-active=\"route.path\"\r\n >\r\n <!-- 普通用户菜单 - 管理员也可见 -->\r\n <el-menu-item \r\n v-if=\"userInfo.roles?.includes('ROLE_USER') || userInfo.roles?.includes('ROLE_ADMIN')\"\r\n index=\"/orders/my\"\r\n >\r\n <el-icon><Document /></el-icon>\r\n <span>我的订单</span>\r\n </el-menu-item>\r\n \r\n <!-- 仓库管理员菜单 -->\r\n <template v-if=\"userInfo.roles?.includes('ROLE_WAREHOUSE_ADMIN')\">\r\n <el-menu-item index=\"/orders/create\">\r\n <el-icon><Plus /></el-icon>\r\n <span>创建订单</span>\r\n </el-menu-item>\r\n <el-menu-item index=\"/admin/orders\">\r\n <el-icon><List /></el-icon>\r\n <span>订单管理</span>\r\n </el-menu-item>\r\n </template>\r\n\r\n <!-- 管理员和物流管理员菜单 -->\r\n <el-menu-item \r\n v-if=\"userInfo.roles?.includes('ROLE_ADMIN') || userInfo.roles?.includes('ROLE_LOGISTICS_ADMIN')\"\r\n index=\"/admin/orders\"\r\n >\r\n <el-icon><List /></el-icon>\r\n <span>订单管理</span>\r\n </el-menu-item>\r\n\r\n <!-- 仅管理员菜单 -->\r\n <template v-if=\"userInfo.roles?.includes('ROLE_ADMIN')\">\r\n <el-menu-item index=\"/admin/users\">\r\n <el-icon><User /></el-icon>\r\n <span>用户管理</span>\r\n </el-menu-item>\r\n <el-menu-item index=\"/admin/locations\">\r\n <el-icon><Location /></el-icon>\r\n <span>中转点管理</span>\r\n </el-menu-item>\r\n </template>\r\n </el-menu>\r\n </el-aside>\r\n \r\n <el-container>\r\n <el-header>\r\n <div class=\"header-right\">\r\n <span>{{ userInfo.username }}</span>\r\n <el-button type=\"text\" @click=\"handleLogout\">退出登录</el-button>\r\n </div>\r\n </el-header>\r\n \r\n <el-main>\r\n <router-view></router-view>\r\n </el-main>\r\n </el-container>\r\n </el-container>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\nimport { useRoute, useRouter } from 'vue-router'\r\nimport { useStore } from 'vuex'\r\nimport { Document, Plus, List, User, Location } from '@element-plus/icons-vue'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\n\r\nconst route = useRoute()\r\nconst router = useRouter()\r\nconst store = useStore()\r\n\r\nconst userInfo = computed(() => store.state.userInfo)\r\n\r\nconst handleLogout = async () => {\r\n try {\r\n await ElMessageBox.confirm('确定要退出登录吗?', '提示', {\r\n type: 'warning',\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消'\r\n })\r\n \r\n // 直接清除本地存储的用户信息和 token\r\n store.dispatch('logout')\r\n ElMessage.success('已退出登录')\r\n router.push('/login')\r\n } catch (error) {\r\n if (error !== 'cancel') {\r\n console.error('退出失败:', error)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.layout-container {\r\n height: 100vh;\r\n}\r\n\r\n.logo {\r\n height: 60px;\r\n line-height: 60px;\r\n text-align: center;\r\n font-size: 20px;\r\n font-weight: bold;\r\n color: #409EFF;\r\n border-bottom: 1px solid #DCDFE6;\r\n}\r\n\r\n.el-aside {\r\n background-color: #fff;\r\n border-right: 1px solid #DCDFE6;\r\n}\r\n\r\n.el-header {\r\n background-color: #fff;\r\n border-bottom: 1px solid #DCDFE6;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n padding: 0 20px;\r\n}\r\n\r\n.header-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 20px;\r\n}\r\n\r\n.el-main {\r\n background-color: #f5f5f5;\r\n padding: 20px;\r\n}\r\n</style> "],"mappings":"AAoEA,SAASA,QAAQ,QAAQ,KAAK;AAC9B,SAASC,QAAQ,EAAEC,SAAS,QAAQ,YAAY;AAChD,SAASC,QAAQ,QAAQ,MAAM;AAC/B,SAASC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,QAAQ,yBAAyB;AAC9E,SAASC,SAAS,EAAEC,YAAY,QAAQ,cAAc;;;;;;;IAEtD,MAAMC,KAAK,GAAGV,QAAQ,CAAC,CAAC;IACxB,MAAMW,MAAM,GAAGV,SAAS,CAAC,CAAC;IAC1B,MAAMW,KAAK,GAAGV,QAAQ,CAAC,CAAC;IAExB,MAAMW,QAAQ,GAAGd,QAAQ,CAAC,MAAMa,KAAK,CAACE,KAAK,CAACD,QAAQ,CAAC;IAErD,MAAME,YAAY,GAAG,MAAAA,CAAA,KAAY;MAC/B,IAAI;QACF,MAAMN,YAAY,CAACO,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;UAC5CC,IAAI,EAAE,SAAS;UACfC,iBAAiB,EAAE,IAAI;UACvBC,gBAAgB,EAAE;QACpB,CAAC,CAAC;;QAEF;QACAP,KAAK,CAACQ,QAAQ,CAAC,QAAQ,CAAC;QACxBZ,SAAS,CAACa,OAAO,CAAC,OAAO,CAAC;QAC1BV,MAAM,CAACW,IAAI,CAAC,QAAQ,CAAC;MACvB,CAAC,CAAC,OAAOC,KAAK,EAAE;QACd,IAAIA,KAAK,KAAK,QAAQ,EAAE;UACtBC,OAAO,CAACD,KAAK,CAAC,OAAO,EAAEA,KAAK,CAAC;QAC/B;MACF;IACF,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}