form.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <script setup lang="ts">
  2. import { reactive, ref } from "vue";
  3. import { formUpload } from "@/api/mock";
  4. import { message } from "@/utils/message";
  5. import { createFormData } from "@pureadmin/utils";
  6. import UploadIcon from "~icons/ri/upload-2-line?width=26&height=26";
  7. const formRef = ref();
  8. const uploadRef = ref();
  9. const validateForm = reactive({
  10. fileList: [],
  11. date: ""
  12. });
  13. const submitForm = formEl => {
  14. if (!formEl) return;
  15. formEl.validate(valid => {
  16. if (valid) {
  17. // 多个 file 在一个接口同时上传
  18. const formData = createFormData({
  19. files: validateForm.fileList.map(file => ({ raw: file.raw })), // file 文件
  20. date: validateForm.date // 别的字段
  21. });
  22. formUpload(formData)
  23. .then(({ success }) => {
  24. if (success) {
  25. message("提交成功", { type: "success" });
  26. } else {
  27. message("提交失败");
  28. }
  29. })
  30. .catch(error => {
  31. message(`提交异常 ${error}`, { type: "error" });
  32. });
  33. } else {
  34. return false;
  35. }
  36. });
  37. };
  38. const resetForm = formEl => {
  39. if (!formEl) return;
  40. formEl.resetFields();
  41. };
  42. </script>
  43. <template>
  44. <el-form ref="formRef" :model="validateForm" label-width="82px">
  45. <el-form-item
  46. label="附件"
  47. prop="fileList"
  48. :rules="[{ required: true, message: '附件不能为空' }]"
  49. >
  50. <el-upload
  51. ref="uploadRef"
  52. v-model:file-list="validateForm.fileList"
  53. drag
  54. multiple
  55. action="#"
  56. class="w-[200px]!"
  57. :auto-upload="false"
  58. >
  59. <div class="el-upload__text">
  60. <UploadIcon class="m-auto mb-2" />
  61. 可点击或拖拽上传
  62. </div>
  63. </el-upload>
  64. </el-form-item>
  65. <el-form-item
  66. label="日期"
  67. prop="date"
  68. :rules="[{ required: true, message: '日期不能为空' }]"
  69. >
  70. <el-date-picker
  71. v-model="validateForm.date"
  72. type="datetime"
  73. class="w-[200px]!"
  74. placeholder="请选择日期时间"
  75. value-format="YYYY-MM-DD HH:mm:ss"
  76. />
  77. </el-form-item>
  78. <el-form-item>
  79. <el-button type="primary" text bg @click="submitForm(formRef)">
  80. 提交
  81. </el-button>
  82. <el-button text bg @click="resetForm(formRef)">重置</el-button>
  83. </el-form-item>
  84. </el-form>
  85. </template>