inspectorEdit.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div class="common-dialog">
  3. <div class="common-dialog-content">
  4. <div class="common-dialog-title-box">
  5. <i class="common-dialog-title-icon" />
  6. <div>修改巡查人员</div>
  7. </div>
  8. <div class="common-dialog-box">
  9. <el-form ref="form" :model="formData" :rules="rules" label-width="120px" class="custom-disabled">
  10. <!-- <el-form-item label="姓名:" prop="nick_name">-->
  11. <!-- <el-input v-model="formData.nick_name" style="width: 468px !important" />-->
  12. <!-- </el-form-item>-->
  13. <el-form-item label="姓名:" prop="nick_name">
  14. <el-tree-select
  15. v-model="formData.nick_name"
  16. :data="treeData"
  17. :props="defaultProps"
  18. node-key="id"
  19. :render-after-expand="false"
  20. style="width: 468px"
  21. filterable
  22. disabled
  23. />
  24. </el-form-item>
  25. <el-form-item label="粤政易组织:" prop="ancestors_names">
  26. <el-input v-model="formData.ancestors_names" style="width: 468px !important" disabled />
  27. </el-form-item>
  28. <el-form-item label="联系方式:" prop="phonenumber">
  29. <el-input v-model="formData.phonenumber" style="width: 468px !important" disabled />
  30. </el-form-item>
  31. <!-- <el-form-item label="责任区划:" prop="area_code">-->
  32. <!-- <el-input v-model="formData.area_code" style="width: 468px !important" />-->
  33. <!-- </el-form-item>-->
  34. <el-form-item label="责任区划:" prop="area">
  35. <el-tree-select
  36. v-model="formData.area"
  37. :load="loadNodes"
  38. lazy
  39. node-key="id"
  40. :props="{ label: 'label', value: 'id', children: 'children', isLeaf: 'isShowSelect' }"
  41. :render-after-expand="false"
  42. style="width: 468px"
  43. check-strictly
  44. />
  45. </el-form-item>
  46. </el-form>
  47. <div class="common-dialog-footer">
  48. <el-button @click="closeDialog">取消</el-button>
  49. <el-button type="primary" @click="submitForm">确定</el-button>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </template>
  55. <script setup lang="ts">
  56. import {
  57. inspectorDetail,
  58. inspectorDivision,
  59. inspectorUpload,
  60. phoneList,
  61. userList
  62. } from '@/api/inspectionWork/inspector';
  63. import { reactive, ref, watch } from 'vue';
  64. import { ElMessage } from 'element-plus';
  65. import { getRegionalTree } from '@/api/PreventionResponsible';
  66. const emits = defineEmits(['close']);
  67. const treeData = ref([]);
  68. const formattedDivisionData = ref([]);
  69. const rawDivisionData = ref([]);
  70. const props = defineProps<{
  71. eventId: string | number;
  72. }>();
  73. const formData = ref({
  74. // user_id: '',
  75. // nick_name: '',
  76. // phonenumber: '',
  77. // yzy_account: '',
  78. // area_code: ''
  79. });
  80. // 表单验证规则
  81. const rules = ref({
  82. nick_name: [{ required: true, message: '请选择姓名', trigger: 'change' }],
  83. yzy_account: [{ required: true, message: '请输入粤政易组织', trigger: 'blur' }],
  84. phonenumber: [{ required: true, message: '请输入联系方式', trigger: 'blur' }],
  85. area_code: [{ required: true, message: '请选择责任区划', trigger: 'change' }]
  86. });
  87. const fetchDetail = async () => {
  88. const response = await inspectorDetail(props.eventId);
  89. if (response.code === 200) {
  90. formData.value = response.data;
  91. } else {
  92. ElMessage.error(response.msg);
  93. }
  94. };
  95. const loadNodes = (node, resolve) => {
  96. node.data.id = !node.data.id ? 0 : node.data.id;
  97. getRegionalTree(node.data.id).then((res) => {
  98. resolve(res.data);
  99. })
  100. }
  101. watch(
  102. () => props.eventId,
  103. (newVal) => {
  104. if (newVal) {
  105. fetchDetail();
  106. }
  107. },
  108. { immediate: true }
  109. );
  110. const closeDialog = () => {
  111. emits('close');
  112. };
  113. const findNode = (nodes, code) => {
  114. for (let i = 0; i < nodes.length; i++) {
  115. const node = nodes[i];
  116. if (node.code === code) {
  117. return node;
  118. }
  119. if (node.children && node.children.length > 0) {
  120. const found = findNode(node.children, code);
  121. if (found) {
  122. return found;
  123. }
  124. }
  125. }
  126. return null;
  127. };
  128. // 提交表单
  129. const submitForm = async () => {
  130. try {
  131. let area_codeCode = '';
  132. // 确保在提交前有选中的区划
  133. if (formData.value.area_code) {
  134. const selectedDivision = findNode(formattedDivisionData.value, formData.value.area_code);
  135. if (selectedDivision) {
  136. area_codeCode = selectedDivision.code;
  137. } else {
  138. ElMessage.error('请选择责任区划。');
  139. return;
  140. }
  141. }
  142. if (!area_codeCode) {
  143. ElMessage.error('请选择责任区划。');
  144. return;
  145. }
  146. // 假设表单已经通过验证
  147. const response = await inspectorUpload(formData.value);
  148. if (response.code === 200) {
  149. ElMessage.success('提交成功');
  150. closeDialog(); // 关闭对话框
  151. } else {
  152. ElMessage.error(response.msg);
  153. }
  154. } catch (error) {
  155. ElMessage.error('提交失败,请检查输入信息。');
  156. }
  157. };
  158. // const fetchPhoneList = async () => {
  159. // const response = await phoneList();
  160. // treeData.value = response.data;
  161. // };
  162. const defaultProps = reactive({
  163. children:'children',
  164. label:'label',
  165. disabled:(node) => {
  166. return node.deptType && !node.children;
  167. }
  168. })
  169. const fetchDivisionData = async () => {
  170. const response = await inspectorDivision();
  171. if (response.code === 200) {
  172. rawDivisionData.value = response.data;
  173. formattedDivisionData.value = rawDivisionData.value;
  174. } else {
  175. ElMessage.error(response.msg);
  176. }
  177. };
  178. const onDivisionChange = (value) => {
  179. // 确认选中的项存在
  180. const selectedDivision = findNode(formattedDivisionData.value, value);
  181. if (!selectedDivision) {
  182. ElMessage.warning('未找到匹配的责任区划。');
  183. // 将选中的值重置为 null 或空字符串,防止后续逻辑错误
  184. formData.value.area_code = null;
  185. } else {
  186. console.log('Selected Division:', selectedDivision); // 调试输出
  187. }
  188. };
  189. onMounted(() => {
  190. // fetchPhoneList();
  191. fetchDivisionData();
  192. });
  193. </script>
  194. <style scoped>
  195. .custom-disabled {
  196. :deep(.el-select__wrapper.is-disabled),
  197. :deep(.el-input__wrapper) {
  198. background-color: #ffffff !important;
  199. }
  200. :deep(.el-select__wrapper.is-disabled .el-select__selected-item),
  201. :deep(.el-input__inner) {
  202. color: rgba(0, 0, 0, 0.85) !important;
  203. -webkit-text-fill-color: rgba(0, 0, 0, 0.85) !important;
  204. }
  205. }
  206. </style>