PageOrganization.vue 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <div class="safety-platform-container">
  3. <div class="safety-platform-container__header">
  4. <div class="breadcrumb-title"> 应急架构体系 </div>
  5. </div>
  6. <div class="safety-platform-container__main">
  7. <OrgChart :treeData="treeData" @node-click="handleNodeClick" />
  8. </div>
  9. <div class="safety-platform-container__footer" v-if="showOperationBar">
  10. <el-button @click="router.push('team-management')"> 编辑 </el-button>
  11. </div>
  12. </div>
  13. <TeamDetailDrawer ref="teamDetailDrawerRef" :selected-team-id="selectedTeamId" />
  14. </template>
  15. <script setup lang="ts">
  16. import { ref, onMounted } from 'vue';
  17. import { useRouter } from 'vue-router';
  18. import OrgChart from '../components/OrgChart.vue';
  19. import TeamDetailDrawer from './components/TeamDetailDrawer.vue';
  20. import { useUserInfoHook } from '@/views/disaster/hooks';
  21. import useTeamStore from './team-management/store/userTeam';
  22. import { EMERGENCY_PERMISSIONS } from '@/views/emergency/constant';
  23. type OrganizationTreeType = {
  24. id: string;
  25. data: { name: string };
  26. children?: OrganizationTreeType[];
  27. };
  28. const treeData = ref<OrganizationTreeType>({
  29. id: 'root',
  30. data: { name: '应急领导小组' },
  31. children: [
  32. {
  33. id: 'group1',
  34. data: { name: '应急指挥小组' },
  35. },
  36. {
  37. id: 'group2',
  38. data: { name: '应急响应小组' },
  39. },
  40. {
  41. id: 'group3',
  42. data: { name: '应急支援小组' },
  43. },
  44. ],
  45. });
  46. const router = useRouter();
  47. const showOperationBar = ref(false);
  48. const { permissions } = useUserInfoHook();
  49. const { getLeaderTeams } = useTeamStore();
  50. const teamDetailDrawerRef = ref<InstanceType<typeof TeamDetailDrawer>>();
  51. const selectedTeamId = ref<number | null>(null);
  52. const handleNodeClick = (nodeData: any) => {
  53. selectedTeamId.value = Number(nodeData.id);
  54. teamDetailDrawerRef.value?.drawerShow();
  55. };
  56. function convertData(leaderTeams): OrganizationTreeType {
  57. return {
  58. id: leaderTeams.teamId.toString(),
  59. data: {
  60. name: leaderTeams.teamName,
  61. },
  62. children: leaderTeams.children?.map((child) => convertData(child)),
  63. };
  64. }
  65. onMounted(async () => {
  66. showOperationBar.value = Boolean(
  67. permissions.find((item: { code: string }) => item.code === EMERGENCY_PERMISSIONS.ORGANIZATION_MANAGEMENT),
  68. );
  69. const res = await getLeaderTeams();
  70. treeData.value = convertData(res);
  71. });
  72. </script>
  73. <style lang="scss" scoped>
  74. @use '@/styles/page-details-layout.scss' as *;
  75. </style>