OrganizationView.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <div class="min-h-screen bg-gray-50">
  3. <!-- Top Navigation -->
  4. <header class="bg-white border-b">
  5. <div class="flex items-center justify-between px-4 py-2">
  6. <div class="flex items-center space-x-2">
  7. <span class="text-xl font-medium">组织架构</span>
  8. </div>
  9. <div class="flex items-center space-x-4">
  10. <MessageCircle class="w-6 h-6 text-blue-500" />
  11. <Bell class="w-6 h-6 text-blue-500" />
  12. <Settings class="w-6 h-6 text-gray-400" />
  13. <div class="w-8 h-8 rounded-full bg-gray-200"></div>
  14. </div>
  15. </div>
  16. </header>
  17. <!-- Main Content -->
  18. <main class="flex-1 p-6">
  19. <div class="department-section">
  20. <div class="department-header">
  21. <h2 class="text-xl font-semibold">组织架构</h2>
  22. </div>
  23. <div class="department-content">
  24. <!-- Department Columns -->
  25. <div v-for="dept in departments" :key="dept.name" class="department-column">
  26. <div class="department-head">
  27. <div class="avatar">
  28. <UserCircle class="w-12 h-12 text-blue-500" />
  29. </div>
  30. <div class="head-info">
  31. <div class="name text-lg font-semibold">{{ dept.name }}</div>
  32. <div class="title text-gray-500">{{ dept.title }}</div>
  33. </div>
  34. </div>
  35. <div class="staff-list">
  36. <div v-for="(staff, index) in dept.staff" :key="index" class="staff-item">
  37. <User class="w-5 h-5 text-gray-400 mr-2" />
  38. <span>{{ staff.name }} - {{ staff.title }}</span>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </main>
  45. </div>
  46. </template>
  47. <script setup>
  48. import { MessageCircle, Bell, Settings, UserCircle, User } from 'lucide-vue-next'
  49. const departments = [
  50. {
  51. name: '技术部门',
  52. title: '信息架构部门主任',
  53. staff: [
  54. { name: '职员A', title: '职位' },
  55. { name: '职员B', title: '职位' },
  56. { name: '职员C', title: '职位' },
  57. { name: '职员D', title: '职位' },
  58. { name: '职员E', title: '职位' },
  59. { name: '职员F', title: '职位' },
  60. { name: '职员G', title: '职位' },
  61. { name: '职员H', title: '职位' },
  62. { name: '职员I', title: '职位' },
  63. { name: '职员J', title: '职位' }
  64. ]
  65. },
  66. {
  67. name: '市场部门',
  68. title: '市场部门主任',
  69. staff: [
  70. { name: '职员A', title: '职位' },
  71. { name: '职员B', title: '职位' },
  72. { name: '职员C', title: '职位' },
  73. { name: '职员D', title: '职位' },
  74. { name: '职员E', title: '职位' },
  75. { name: '职员F', title: '职位' },
  76. { name: '职员G', title: '职位' },
  77. { name: '职员H', title: '职位' },
  78. { name: '职员I', title: '职位' },
  79. { name: '职员J', title: '职位' }
  80. ]
  81. },
  82. {
  83. name: '销售部门',
  84. title: '销售部门主任',
  85. staff: [
  86. { name: '职员A', title: '职位' },
  87. { name: '职员B', title: '职位' },
  88. { name: '职员C', title: '职位' },
  89. { name: '职员D', title: '职位' },
  90. { name: '职员E', title: '职位' },
  91. { name: '职员F', title: '职位' },
  92. { name: '职员G', title: '职位' },
  93. { name: '职员H', title: '职位' },
  94. { name: '职员I', title: '职位' },
  95. { name: '职员J', title: '职位' }
  96. ]
  97. }
  98. ]
  99. </script>
  100. <style scoped>
  101. .department-section {
  102. @apply bg-white rounded-lg shadow p-6;
  103. }
  104. .department-header {
  105. @apply mb-6;
  106. }
  107. .department-content {
  108. @apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6;
  109. }
  110. .department-column {
  111. @apply border rounded-lg p-4;
  112. }
  113. .department-head {
  114. @apply flex items-center gap-4 p-4 bg-[#E8F0FF] rounded-lg mb-4;
  115. }
  116. .avatar {
  117. @apply w-12 h-12 rounded-full overflow-hidden flex items-center justify-center;
  118. }
  119. .head-info {
  120. @apply flex flex-col;
  121. }
  122. .name {
  123. @apply font-semibold;
  124. }
  125. .title {
  126. @apply text-sm text-gray-600;
  127. }
  128. .staff-list {
  129. @apply space-y-2;
  130. }
  131. .staff-item {
  132. @apply flex items-center gap-2 p-2 hover:bg-gray-50 rounded cursor-pointer text-sm text-gray-600;
  133. }
  134. </style>