reliefTalentsEdit.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <div class="common-dialog">
  3. <div class="common-dialog-content">
  4. <div class="common-dialog-title-box">
  5. <h3 class="common-dialog-title">编辑救援人才</h3>
  6. </div>
  7. <div class="common-dialog-box">
  8. <el-form ref="form" :model="formData" :rules="rules" label-width="auto">
  9. <el-form-item label="姓名:" prop="name">
  10. <el-input v-model="formData.name" style="width: 468px !important" />
  11. </el-form-item>
  12. <el-form-item label="联系电话:" prop="contact_number">
  13. <el-input v-model="formData.contact_number" style="width: 468px !important" />
  14. </el-form-item>
  15. <el-form-item label="性别:" prop="gender">
  16. <el-input v-model="formData.gender" style="width: 468px !important" />
  17. </el-form-item>
  18. <el-form-item label="现在地址:" prop="current_address">
  19. <el-input v-model="formData.current_address" placeholder="请输入现在地址" style="width: 468px !important" readonly>
  20. <template #append>
  21. <el-button type="primary" @click="openMapDialog">地图定位</el-button>
  22. </template>
  23. </el-input>
  24. </el-form-item>
  25. <el-form-item label="职务:" prop="position">
  26. <el-input v-model="formData.position" style="width: 468px !important" />
  27. </el-form-item>
  28. <el-form-item label="所属救援人员单位:" prop="unit_name">
  29. <el-input v-model="formData.unit_name" style="width: 468px !important" />
  30. </el-form-item>
  31. </el-form>
  32. <div class="common-dialog-footer">
  33. <el-button @click="closeDialog">取消</el-button>
  34. <el-button type="primary" @click="submitForm">确定</el-button>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. <!-- 地图弹窗 -->
  40. <company-map v-model:visible="mapDialogVisible" :latAndLong="formData.lnglat" :address="formData.current_address" @confirm="handleMapChange"></company-map>
  41. </template>
  42. <script setup lang="ts">
  43. import { ref, onMounted } from 'vue';
  44. import { ElMessage } from 'element-plus';
  45. import { getPersonnel2,uploadPersonnel } from '@/api/comprehensiveGuarantee/reliefResourceManagement/reliefTalents';
  46. const emits = defineEmits(['close']);
  47. const props = defineProps<{
  48. eventId: string | number;
  49. }>();
  50. const formData = ref({
  51. name: '',
  52. contact_number: '',
  53. gender: '',
  54. current_address: '',
  55. lnglat: [],
  56. longitude: '', // 经度
  57. latitude: '', // 纬度
  58. position: '',
  59. unit_name: ''
  60. });
  61. const rules = ref({
  62. name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
  63. contact_number: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }],
  64. gender: [{ required: true, message: '性别不能为空', trigger: 'blur' }],
  65. current_address: [{ required: true, message: '地址不能为空', trigger: 'blur' }],
  66. position: [{ required: true, message: '职务不能为空', trigger: 'blur' }],
  67. unit_name: [{ required: true, message: '所属救援人员单位不能为空', trigger: 'blur' }]
  68. });
  69. const closeDialog = () => {
  70. emits('close');
  71. };
  72. // 地图定位
  73. const mapDialogVisible = ref(false);
  74. const openMapDialog = () => {
  75. mapDialogVisible.value = true;
  76. };
  77. const handleMapChange = (data) => {
  78. formData.value.current_address = data.address;
  79. formData.value.lnglat = data.lnglat;
  80. formData.value.longitude = data.lnglat[0];
  81. formData.value.latitude = data.lnglat[1];
  82. mapDialogVisible.value = false;
  83. };
  84. const fetchPersonnelData = async () => {
  85. const response = await getPersonnel2(props.eventId);
  86. if (response.code === 200) {
  87. formData.value = response.personnel;
  88. } else {
  89. ElMessage.error('未找到相关数据');
  90. }
  91. };
  92. const submitForm = async () => {
  93. // 假设表单已经通过验证
  94. const response = await uploadPersonnel(props.eventId, formData.value );
  95. if (response.code === 200) {
  96. ElMessage.success('提交成功');
  97. closeDialog();
  98. emits('refresh');
  99. } else {
  100. ElMessage.error(response.msg);
  101. }
  102. };
  103. onMounted(() => {
  104. fetchPersonnelData();
  105. });
  106. </script>
  107. <style scoped></style>