dataManagementADD.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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="unit">
  13. <el-input v-model="formData.unit" style="width: 468px !important" />
  14. </el-form-item>
  15. <el-form-item label="维护单位:" prop="maintainUnit">
  16. <el-input v-model="formData.maintainUnit" style="width: 468px !important" />
  17. </el-form-item>
  18. <el-form-item label="人防专业监理工程师:" prop="engineer">
  19. <el-input v-model="formData.engineer" style="width: 468px !important" />
  20. </el-form-item>
  21. <el-form-item label="建设地点:" prop="location">
  22. <el-input v-model="formData.location" style="width: 468px !important" />
  23. </el-form-item>
  24. <el-form-item label="操作方式:" prop="operation">
  25. <el-input v-model="formData.operation" style="width: 468px !important" />
  26. </el-form-item>
  27. <el-form-item label="应建人防地下室面积(㎡):" prop="plannedArea">
  28. <el-input v-model="formData.plannedArea" style="width: 468px !important" />
  29. </el-form-item>
  30. <el-form-item label="实建人防地下室面积(㎡):" prop="actualArea">
  31. <el-input v-model="formData.actualArea" style="width: 468px !important" />
  32. </el-form-item>
  33. <el-form-item label="更新时间:" prop="updateTime">
  34. <el-input v-model="formData.updateTime" style="width: 468px !important" />
  35. </el-form-item>
  36. </el-form>
  37. <div class="common-dialog-footer">
  38. <el-button @click="closeDialog">取消</el-button>
  39. <el-button type="primary" @click="submitForm">确定</el-button>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </template>
  45. <script setup lang="ts">
  46. import { addPersonnel } from '@/api/dataManagement/dataManagement';
  47. import { ref } from 'vue';
  48. import { ElMessage } from 'element-plus';
  49. import { useRouter } from 'vue-router';
  50. const emits = defineEmits(['close']);
  51. const formData = ref({
  52. id: '',
  53. name: '',
  54. unit: '',
  55. maintainUnit: '',
  56. engineer: '',
  57. location: '',
  58. operation: '',
  59. plannedArea: '',
  60. actualArea: '',
  61. updateTime: ''
  62. });
  63. const rules = ref({
  64. name: [{ required: true, message: '工程名称不能为空', trigger: 'blur' }],
  65. unit: [{ required: true, message: '建设单位不能为空', trigger: 'blur' }],
  66. maintainUnit: [{ required: true, message: '维护单位不能为空', trigger: 'blur' }],
  67. engineer: [{ required: true, message: '人防专业监理工程师不能为空', trigger: 'blur' }],
  68. location: [{ required: true, message: '建设地点不能为空', trigger: 'blur' }],
  69. operation: [{ required: true, message: '操作方式不能为空', trigger: 'blur' }],
  70. plannedArea: [{ required: true, message: '应建人防地下室面积不能为空', trigger: 'blur' }],
  71. actualArea: [{ required: true, message: '实建人防地下室面积不能为空', trigger: 'blur' }],
  72. updateTime: [{ required: true, message: '更新时间不能为空', trigger: 'blur' }]
  73. });
  74. const form = ref(null); // 定义 form 变量
  75. const closeDialog = () => {
  76. emits('close');
  77. };
  78. const router = useRouter();
  79. // 提交表单
  80. const submitForm = async () => {
  81. try {
  82. await form.value.validate();
  83. const payload = {
  84. personnel_list: [formData.value]
  85. };
  86. const response = await addPersonnel(payload);
  87. if (response.code === 200) {
  88. ElMessage.success('提交成功');
  89. closeDialog();
  90. emits('refresh');
  91. } else {
  92. ElMessage.error(response.msg || '提交失败,请稍后再试');
  93. }
  94. } catch (error) {
  95. ElMessage.error('表单验证失败,请检查输入');
  96. }
  97. };
  98. </script>
  99. <style scoped></style>