view.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div class="safety-platform-container">
  3. <header class="safety-platform-container__header">
  4. <div class="breadcrumb-title">
  5. <BreadcrumbBack />
  6. 查看非公共区域责任区域
  7. </div>
  8. </header>
  9. <main class="safety-platform-container__main">
  10. <el-form ref="formRef" label-width="auto" :model="formValue">
  11. <el-form-item label="楼号">
  12. <el-input disabled v-model="formValue.buildingNo" size="large" style="width: 50%" />
  13. </el-form-item>
  14. <el-form-item label="楼层">
  15. <el-input disabled v-model="formValue.buildingArea" size="large" style="width: 50%" />
  16. </el-form-item>
  17. <el-form-item label="房间/区域">
  18. <el-input disabled v-model="formValue.floorRoomNo" size="large" style="width: 50%" />
  19. </el-form-item>
  20. <el-form-item label="功能名称">
  21. <el-input disabled v-model="formValue.nameFunction" size="large" style="width: 50%" />
  22. </el-form-item>
  23. <el-form-item label="安全责任所/中心">
  24. <el-cascader
  25. disabled
  26. v-model="formValue.safetyResponsibleCenterId"
  27. style="width: 50%"
  28. size="large"
  29. :options="firstLevelDepts"
  30. :props="cascaderProp"
  31. :show-all-levels="false"
  32. />
  33. </el-form-item>
  34. <el-form-item label="安全责任所/中心负责人">
  35. <el-select disabled v-model="formValue.safetyCenterManager" size="large" style="width: 50%">
  36. <el-option
  37. v-for="item in safetyCenterManagerOptions"
  38. :key="item.value"
  39. :label="item.label"
  40. :value="item.value"
  41. />
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item label="安全责任部门">
  45. <el-cascader
  46. disabled
  47. v-model="formValue.safetyResponsibleDepartmentId"
  48. style="width: 50%"
  49. size="large"
  50. :options="firstLevelDepts"
  51. :props="cascaderProp"
  52. :show-all-levels="false"
  53. />
  54. </el-form-item>
  55. <el-form-item label="安全责任部门负责人">
  56. <el-select disabled v-model="formValue.safetyDepartmentManager" size="large" style="width: 50%">
  57. <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item label="安全具体责任人">
  61. <el-select disabled v-model="formValue.safetySpecificPerson" size="large" style="width: 50%">
  62. <el-option v-for="item in userOptions" :key="item.value" :label="item.label" :value="item.value" />
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="安全具体责任人联系方式">
  66. <el-input disabled v-model="formValue.safetyPersonContact" size="large" style="width: 50%" />
  67. </el-form-item>
  68. </el-form>
  69. </main>
  70. <footer class="safety-platform-container__footer">
  71. <el-button type="primary" @click="$router.push({ name: 'areaResponsibilities:nonPublic' })">返回</el-button>
  72. </footer>
  73. </div>
  74. </template>
  75. <script lang="ts" setup>
  76. import { ref, reactive, onMounted } from 'vue';
  77. import { useRoute } from 'vue-router';
  78. import { ElMessage } from 'element-plus';
  79. import { getAllDepartments } from '@/api/auth/dept';
  80. import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
  81. import {
  82. areaCheckListQueryDetail,
  83. queryAvailableUserList,
  84. } from '@/api/production-safety/responsibility-implementation';
  85. const route = useRoute();
  86. const userOptions = ref<any[]>([]);
  87. const safetyCenterManagerOptions = ref<any[]>([]);
  88. const firstLevelDepts = ref<any[]>([]);
  89. const cascaderProp = { value: 'id', label: 'deptName', checkStrictly: true };
  90. const formValue = reactive({
  91. buildingNo: '',
  92. buildingArea: '',
  93. floorRoomNo: '',
  94. nameFunction: '',
  95. safetyResponsibleCenter: '',
  96. safetyResponsibleCenterId: [],
  97. safetyCenterManager: null as number | null,
  98. safetyResponsibleDepartment: '',
  99. safetyResponsibleDepartmentId: [],
  100. safetyDepartmentManager: null as number | null,
  101. safetySpecificPerson: null as number | null,
  102. safetyPersonContact: '',
  103. });
  104. const getDeptData = async () => {
  105. const res = await getAllDepartments();
  106. firstLevelDepts.value = formatDeptTree(res);
  107. };
  108. const getUserData = (optionList: any, deptName) => {
  109. return queryAvailableUserList({
  110. pageNumber: 1,
  111. pageSize: 200,
  112. queryParam: { deptName },
  113. }).then((res: any) => {
  114. optionList.value = (res.records || []).map((u: any) => ({
  115. value: u.id,
  116. label: u.realname,
  117. }));
  118. });
  119. };
  120. const handlAreaCheckListQueryDetail = async () => {
  121. const id = route.query.id;
  122. if (!id) return;
  123. try {
  124. const res: any = await areaCheckListQueryDetail({ id });
  125. if (res) {
  126. Object.assign(formValue, res);
  127. // 1. 解析级联 ID 数组
  128. try {
  129. if (typeof res.safetyResponsibleCenterId === 'string') {
  130. formValue.safetyResponsibleCenterId = JSON.parse(res.safetyResponsibleCenterId);
  131. }
  132. if (typeof res.safetyResponsibleDepartmentId === 'string') {
  133. formValue.safetyResponsibleDepartmentId = JSON.parse(res.safetyResponsibleDepartmentId);
  134. }
  135. } catch (e) {
  136. console.error('解析部门ID路径失败', e);
  137. }
  138. // 2. 类型转换
  139. formValue.safetyCenterManager = res.safetyCenterManager ? Number(res.safetyCenterManager) : null;
  140. formValue.safetyDepartmentManager = res.safetyDepartmentManager ? Number(res.safetyDepartmentManager) : null;
  141. formValue.safetySpecificPerson = res.safetySpecificPerson ? Number(res.safetySpecificPerson) : null;
  142. // 3. 补全人员名单以显示姓名
  143. if (formValue.safetyResponsibleCenter) {
  144. getUserData(safetyCenterManagerOptions, formValue.safetyResponsibleCenter);
  145. }
  146. if (formValue.safetyResponsibleDepartment) {
  147. getUserData(userOptions, formValue.safetyResponsibleDepartment);
  148. }
  149. if(formValue.safetySpecificPerson) {
  150. getUserData(userOptions, undefined);
  151. }
  152. }
  153. } catch (err) {
  154. ElMessage.error('获取详情失败');
  155. }
  156. };
  157. onMounted(async () => {
  158. await getDeptData();
  159. handlAreaCheckListQueryDetail();
  160. });
  161. </script>
  162. <style lang="scss" scoped>
  163. @use '@/styles/page-main-layout.scss' as *;
  164. @use '@/styles/page-details-layout.scss' as *;
  165. @use '@/styles/basic-table-action.scss' as *;
  166. </style>