index.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div class="home-page">
  3. <div class="card">
  4. <div class="card-title">常用菜单</div>
  5. <div class="menu-grid">
  6. <div
  7. v-for="item in commonMenus"
  8. :key="item.id"
  9. class="menu-item"
  10. @click="go(item.path)"
  11. >
  12. <div class="menu-icon">{{ item.title.slice(0, 1) }}</div>
  13. <div class="menu-title">{{ item.title }}</div>
  14. </div>
  15. </div>
  16. <el-empty v-if="!commonMenus.length" description="暂无常用菜单" />
  17. </div>
  18. </div>
  19. </template>
  20. <script setup lang="ts">
  21. import { storeToRefs } from 'pinia'
  22. import usePortalMenuStore from '@/store/modules/portalMenu'
  23. const router = useRouter()
  24. const portalMenuStore = usePortalMenuStore()
  25. const { getCommonMenus: commonMenus } = storeToRefs(portalMenuStore as any)
  26. onMounted(async () => {
  27. if (!portalMenuStore.loaded) {
  28. await portalMenuStore.loadPortalMenus()
  29. }
  30. })
  31. const go = (path: string) => {
  32. router.push(path)
  33. }
  34. </script>
  35. <style scoped lang="scss">
  36. .home-page {
  37. min-height: calc(100vh - 50px);
  38. padding: 16px;
  39. background: #f5f7fa;
  40. }
  41. .card {
  42. background: #fff;
  43. border-radius: 10px;
  44. padding: 16px;
  45. box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
  46. }
  47. .card-title {
  48. font-size: 16px;
  49. font-weight: 600;
  50. margin-bottom: 12px;
  51. color: #303133;
  52. }
  53. .menu-grid {
  54. display: grid;
  55. grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  56. gap: 12px;
  57. }
  58. .menu-item {
  59. border: 1px solid #ebeef5;
  60. border-radius: 8px;
  61. padding: 12px;
  62. cursor: pointer;
  63. transition: all 0.2s;
  64. &:hover {
  65. border-color: #409eff;
  66. transform: translateY(-1px);
  67. }
  68. }
  69. .menu-icon {
  70. width: 32px;
  71. height: 32px;
  72. border-radius: 50%;
  73. background: #ecf5ff;
  74. color: #409eff;
  75. display: flex;
  76. align-items: center;
  77. justify-content: center;
  78. font-weight: 600;
  79. margin-bottom: 8px;
  80. }
  81. .menu-title {
  82. font-size: 13px;
  83. color: #606266;
  84. }
  85. </style>