OrganizationView.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <div class="org-chart-container">
  3. <!-- Left Sidebar -->
  4. <div class="sidebar">
  5. <div class="logo-section">
  6. <span class="product-name">门户系统</span>
  7. </div>
  8. <div class="menu-section">
  9. <div class="menu-title">菜单类别标题</div>
  10. <ul class="menu-items">
  11. <li>
  12. <a href="#/portal" class="menu-item-content">
  13. <Home class="w-5 h-5 mr-3" />
  14. 首页
  15. </a>
  16. </li>
  17. <li>
  18. <a href="#/organization" class="menu-item-content active">
  19. <Users class="w-5 h-5 mr-3" />
  20. 组织架构
  21. </a>
  22. </li>
  23. <li>
  24. <a href="#/userlist" class="menu-item-content">
  25. <List class="w-5 h-5 mr-3" />
  26. 用户列表信息
  27. </a>
  28. </li>
  29. <li>
  30. <a href="#" class="menu-item-content">
  31. <LayoutGrid class="w-5 h-5 mr-3" />
  32. 系统模块1
  33. </a>
  34. </li>
  35. <li>
  36. <a href="#" class="menu-item-content">
  37. <LayoutGrid class="w-5 h-5 mr-3" />
  38. 系统模块2
  39. </a>
  40. </li>
  41. </ul>
  42. </div>
  43. </div>
  44. <!-- Main Content -->
  45. <div class="main-content">
  46. <div class="breadcrumb">
  47. <Home class="text-gray-500" />
  48. <span>/</span>
  49. <span class="text-blue-500">组织架构</span>
  50. </div>
  51. <div class="department-section">
  52. <div class="department-header">
  53. <h2>技术部门</h2>
  54. <button class="close-btn">
  55. <X class="w-5 h-5 text-gray-500" />
  56. </button>
  57. </div>
  58. <div class="department-content">
  59. <!-- Department Columns -->
  60. <div v-for="dept in departments" :key="dept.name" class="department-column">
  61. <div class="department-head">
  62. <div class="avatar">
  63. <div class="w-12 h-12 rounded-full bg-gray-200"></div>
  64. </div>
  65. <div class="head-info">
  66. <div class="name">{{ dept.name }}</div>
  67. <div class="title">{{ dept.title }}</div>
  68. </div>
  69. </div>
  70. <div class="staff-list">
  71. <div v-for="(staff, index) in dept.staff" :key="index" class="staff-item">
  72. <ChevronDown class="text-gray-400" />
  73. <span>{{ staff.name }} - {{ staff.title }}</span>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. </template>
  82. <script setup>
  83. import {
  84. Home, Users, List, LayoutGrid,
  85. X, ChevronDown
  86. } from 'lucide-vue-next'
  87. const departments = [
  88. {
  89. name: '张三',
  90. title: '信息架构部门主任',
  91. staff: [
  92. { name: '职员A', title: '职位' },
  93. { name: '职员B', title: '职位' },
  94. { name: '职员C', title: '职位' },
  95. { name: '职员D', title: '职位' },
  96. { name: '职员E', title: '职位' },
  97. { name: '职员F', title: '职位' },
  98. { name: '职员G', title: '职位' },
  99. { name: '职员H', title: '职位' },
  100. { name: '职员I', title: '职位' },
  101. { name: '职员J', title: '职位' }
  102. ]
  103. },
  104. {
  105. name: '李四',
  106. title: '信息架构部门主任',
  107. staff: [
  108. { name: '职员A', title: '职位' },
  109. { name: '职员B', title: '职位' },
  110. { name: '职员C', title: '职位' },
  111. { name: '职员D', title: '职位' },
  112. { name: '职员E', title: '职位' },
  113. { name: '职员F', title: '职位' },
  114. { name: '职员G', title: '职位' },
  115. { name: '职员H', title: '职位' },
  116. { name: '职员I', title: '职位' },
  117. { name: '职员J', title: '职位' }
  118. ]
  119. },
  120. {
  121. name: '王五',
  122. title: '信息架构部门主任',
  123. staff: [
  124. { name: '职员A', title: '职位' },
  125. { name: '职员B', title: '职位' },
  126. { name: '职员C', title: '职位' },
  127. { name: '职员D', title: '职位' },
  128. { name: '职员E', title: '职位' },
  129. { name: '职员F', title: '职位' },
  130. { name: '职员G', title: '职位' },
  131. { name: '职员H', title: '职位' },
  132. { name: '职员I', title: '职位' },
  133. { name: '职员J', title: '职位' }
  134. ]
  135. }
  136. ]
  137. </script>
  138. <style scoped>
  139. .org-chart-container {
  140. @apply flex min-h-screen bg-white;
  141. }
  142. .sidebar {
  143. @apply w-64 bg-[#08002E] text-white flex flex-col;
  144. }
  145. .logo-section {
  146. @apply flex items-center gap-2 p-4 border-b border-white/10;
  147. }
  148. .product-name {
  149. @apply text-lg font-semibold;
  150. }
  151. .menu-section {
  152. @apply p-4;
  153. }
  154. .menu-title {
  155. @apply text-sm text-gray-300 mb-4;
  156. }
  157. .menu-items {
  158. @apply space-y-2;
  159. }
  160. .menu-item-content {
  161. @apply flex items-center gap-2 p-2 rounded hover:bg-white/10 cursor-pointer;
  162. }
  163. .menu-item-content.active {
  164. @apply bg-white/10;
  165. }
  166. .main-content {
  167. @apply flex-1 p-6;
  168. }
  169. .breadcrumb {
  170. @apply flex items-center gap-2 text-sm text-gray-600 mb-6;
  171. }
  172. .department-section {
  173. @apply bg-white rounded-lg shadow;
  174. }
  175. .department-header {
  176. @apply flex justify-between items-center p-4 border-b;
  177. }
  178. .department-header h2 {
  179. @apply text-xl font-semibold;
  180. }
  181. .close-btn {
  182. @apply p-2 hover:bg-gray-100 rounded;
  183. }
  184. .department-content {
  185. @apply grid grid-cols-3 gap-6 p-6;
  186. }
  187. .department-column {
  188. @apply border rounded-lg p-4;
  189. }
  190. .department-head {
  191. @apply flex items-center gap-4 p-4 bg-[#E8F0FF] rounded-lg mb-4;
  192. }
  193. .avatar {
  194. @apply w-12 h-12 rounded-full overflow-hidden;
  195. }
  196. .head-info {
  197. @apply flex flex-col;
  198. }
  199. .name {
  200. @apply font-semibold;
  201. }
  202. .title {
  203. @apply text-sm text-gray-600;
  204. }
  205. .staff-list {
  206. @apply space-y-2;
  207. }
  208. .staff-item {
  209. @apply flex items-center gap-2 p-2 hover:bg-gray-50 rounded cursor-pointer text-sm text-gray-600;
  210. }
  211. </style>