EmergencyOrganization.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div>
  3. <div class="container-title">
  4. <span class="line"></span>
  5. <span class="title">应急队伍</span>
  6. </div>
  7. <div class="organization-container">
  8. <el-tabs v-model="activeTeamId" tab-position="left" @tab-change="fetchTeamMembers">
  9. <el-tab-pane v-for="team in teamList" :key="team.id" :label="team.teamName" :name="team.id">
  10. <div v-if="teamMembers.length === 0" class="no-team-member">暂无人员信息</div>
  11. <div class="team-member" v-for="member in teamMembers" :key="member.id">
  12. <div class="member-info">
  13. <div class="member-name">{{ member.realname }}</div>
  14. <div class="mobile">{{ member.mobile }}</div>
  15. </div>
  16. <div class="member-job">{{ member.title }}</div>
  17. </div>
  18. </el-tab-pane>
  19. </el-tabs>
  20. </div>
  21. </div>
  22. </template>
  23. <script setup lang="ts">
  24. import { onMounted, ref } from 'vue';
  25. import {
  26. QueryTeamListRes,
  27. getEmergencyTeamList,
  28. QueryTeamPersonnelListRes,
  29. getEmergencyTeamMemberList,
  30. } from '@/api/command-center';
  31. const activeTeamId = ref<number>();
  32. const teamList = ref<QueryTeamListRes[]>([]);
  33. const teamMembers = ref<QueryTeamPersonnelListRes[]>([]);
  34. const fetchTeamMembers = async () => {
  35. if (!activeTeamId.value) return;
  36. teamMembers.value = await getEmergencyTeamMemberList(activeTeamId.value);
  37. };
  38. onMounted(async () => {
  39. teamList.value = await getEmergencyTeamList();
  40. if (teamList.value.length > 0) {
  41. activeTeamId.value = teamList.value[0].id;
  42. fetchTeamMembers();
  43. }
  44. });
  45. </script>
  46. <style scoped lang="scss">
  47. .container-title {
  48. height: 24px;
  49. display: flex;
  50. align-items: center;
  51. margin: 10px 0;
  52. font-weight: 500;
  53. font-size: 16px;
  54. color: #000000;
  55. .line {
  56. width: 3px;
  57. height: 16px;
  58. background: #1777ff;
  59. margin-right: 10px;
  60. }
  61. .title {
  62. margin-right: 12px;
  63. }
  64. }
  65. .organization-container {
  66. height: calc(100% - 49px);
  67. margin-top: 15px;
  68. padding-bottom: 10px;
  69. .team-member {
  70. width: 100%;
  71. height: 51px;
  72. border-bottom: 1px solid rgba(151, 151, 151, 0.13);
  73. padding: 0 10px 0 0;
  74. margin-bottom: 10px;
  75. .member-info {
  76. display: flex;
  77. justify-content: space-between;
  78. font-weight: 500;
  79. font-size: 16px;
  80. color: #333333;
  81. .member-name {
  82. overflow: hidden;
  83. text-overflow: ellipsis;
  84. white-space: nowrap;
  85. }
  86. .mobile {
  87. font-weight: 400;
  88. }
  89. }
  90. .member-job {
  91. font-weight: 400;
  92. font-size: 14px;
  93. color: #666666;
  94. margin-top: 5px;
  95. overflow: hidden;
  96. text-overflow: ellipsis;
  97. white-space: nowrap;
  98. }
  99. }
  100. .no-team-member {
  101. position: absolute;
  102. top: 50%;
  103. left: 50%;
  104. transform: translate(-50%, -50%);
  105. }
  106. }
  107. :deep(.el-tabs) {
  108. width: 100%;
  109. height: 100%;
  110. .el-tabs__header {
  111. width: 130px;
  112. border-right: 1px solid #e9e9e9;
  113. }
  114. .el-tabs__nav-wrap {
  115. width: 100%;
  116. }
  117. .el-tabs__nav {
  118. white-space: unset;
  119. }
  120. .el-tabs__item {
  121. height: auto;
  122. font-weight: 400;
  123. font-size: 14px;
  124. color: rgba(0, 0, 0, 0.65);
  125. padding: 10px;
  126. }
  127. .el-tabs__item.is-active {
  128. font-weight: 500;
  129. font-size: 14px;
  130. color: #1890ff;
  131. background: #e7f7ff;
  132. }
  133. .el-tabs__content {
  134. overflow: auto;
  135. }
  136. }
  137. </style>