index.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <script setup>
  2. import { ref } from 'vue'
  3. import { Menu as IconMenu, Monitor, Bell, Location, Setting } from '@element-plus/icons-vue'
  4. import DeviceManagement from './components/device-management.vue'
  5. import AlarmManagement from './components/alarm-management.vue'
  6. const componentsMap = {
  7. DeviceManagement,
  8. AlarmManagement
  9. }
  10. const isCollapse = ref(false)
  11. const activeIndex = ref('1')
  12. const currentComponent = ref(DeviceManagement)
  13. const handleSelect = (key) => {
  14. if (key === '1') {
  15. currentComponent.value = componentsMap.DeviceManagement
  16. } else if (key === '2') {
  17. currentComponent.value = componentsMap.AlarmManagement
  18. }
  19. }
  20. </script>
  21. <template>
  22. <div class="flex h-screen bg-gray-100">
  23. <!-- Sidebar -->
  24. <div
  25. class="bg-dark transition-all duration-300 text-white"
  26. :class="isCollapse ? 'w-16' : 'w-64'"
  27. >
  28. <div class="p-4 flex items-center justify-between border-b border-gray-700">
  29. <h1 v-if="!isCollapse" class="text-xl font-bold">智能井盖管理</h1>
  30. <el-button
  31. type="text"
  32. @click="isCollapse = !isCollapse"
  33. class="text-white"
  34. >
  35. <el-icon><IconMenu /></el-icon>
  36. </el-button>
  37. </div>
  38. <el-menu
  39. default-active="1"
  40. class="border-none"
  41. :collapse="isCollapse"
  42. background-color="#1f2937"
  43. text-color="#fff"
  44. active-text-color="#409EFF"
  45. @select="handleSelect"
  46. >
  47. <el-menu-item index="1">
  48. <el-icon><Monitor /></el-icon>
  49. <template #title>设备管理</template>
  50. </el-menu-item>
  51. <el-menu-item index="2">
  52. <el-icon><Bell /></el-icon>
  53. <template #title>报警管理</template>
  54. </el-menu-item>
  55. </el-menu>
  56. </div>
  57. <!-- Main Content -->
  58. <div class="flex-1 overflow-auto">
  59. <!-- <div class="bg-white p-4 shadow-sm flex justify-between items-center">
  60. <div class="text-lg font-medium">
  61. {{ currentComponent === 'DeviceManagement' ? '设备管理' : '报警管理' }}
  62. </div>
  63. <div class="flex items-center gap-4">
  64. <el-badge :value="3" class="mr-4">
  65. <el-icon class="text-xl cursor-pointer"><Bell /></el-icon>
  66. </el-badge>
  67. <el-avatar size="small" src="https://placeholder.svg?height=32&width=32" />
  68. <span>管理员</span>
  69. </div>
  70. </div> -->
  71. <div class="p-6">
  72. <component :is="currentComponent"></component>
  73. </div>
  74. </div>
  75. </div>
  76. </template>