ImageImportForm .vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <!-- <Dialog v-model="dialogVisible" title="标本图片批量导入" width="500">-->
  3. <Dialog :title="dialogTitle" v-model="dialogVisible">
  4. <el-form
  5. ref="formRef"
  6. :model="formData"
  7. :rules="formRules"
  8. label-width="100px"
  9. >
  10. <el-form-item label="照片组名称" prop="groupName">
  11. <el-input v-model="formData.groupName" placeholder="请输入照片组名称" />
  12. </el-form-item>
  13. <el-form-item label="照片组时间" prop="groupDate">
  14. <el-date-picker
  15. v-model="formData.groupDate"
  16. type="date"
  17. value-format="x"
  18. placeholder="选择照片组时间"
  19. />
  20. </el-form-item>
  21. <el-form-item label="照片组简介" prop="groupDescription">
  22. <!-- <Editor v-model="formData.groupDescription" height="150px" />-->
  23. <el-input
  24. v-model="formData.groupDescription"
  25. :rows="3"
  26. type="textarea"
  27. placeholder="请输入照片组简介"
  28. />
  29. </el-form-item>
  30. <el-form-item label="照片组上传" prop="uploadPhotos">
  31. <!-- + '&groupDate=' + formData.groupDate /-->
  32. <el-upload
  33. ref="uploadRef"
  34. v-model:file-list="fileList"
  35. :action="importUrl + '?updateSupport=' + updateSupport + '&groupName=' + formData.groupName + '&groupDescription=' + formData.groupDescription"
  36. :auto-upload="false"
  37. :disabled="formLoading"
  38. :headers="uploadHeaders"
  39. :limit="1"
  40. :on-error="submitFormError"
  41. :on-success="submitFormSuccess"
  42. accept=".zip"
  43. drag
  44. >
  45. <Icon icon="ep:upload" />
  46. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  47. <template #tip>
  48. <div class="el-upload__tip text-center">
  49. <!-- <div class="el-upload__tip">-->
  50. <!-- <el-checkbox v-model="updateSupport" />-->
  51. <!-- 是否更新已经存在的用户数据-->
  52. <!-- </div>-->
  53. <span>仅允许导入zip格式文件。</span>
  54. </div>
  55. </template>
  56. </el-upload>
  57. </el-form-item>
  58. </el-form>
  59. <template #footer >
  60. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  61. <el-button @click="dialogVisible = false">取 消</el-button>
  62. </template>
  63. </Dialog>
  64. </template>
  65. <script lang="ts" setup>
  66. import { useUpload } from "@/components/UploadFile/src/useUpload";
  67. import { getAccessToken } from "@/utils/auth";
  68. import {ref, reactive, defineExpose, defineEmits} from 'vue'
  69. const importUrl =
  70. import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/photosmanage/photo-group/import-package'
  71. defineOptions({ name: 'imageImportForm' })
  72. const dialogVisible = ref(false) // 弹窗的是否展示
  73. const dialogTitle = ref('') // 弹窗的标题
  74. const formLoading = ref(false) // 表单的加载中
  75. const uploadRef = ref()
  76. const message = useMessage() // 消息弹窗
  77. const updateSupport = ref(0) // 是否更新已经存在的用户数据
  78. const fileList = ref([]) // 文件列表
  79. const formData = ref({
  80. id: undefined,
  81. groupName: undefined,
  82. groupDate: undefined,
  83. groupDescription: undefined,
  84. uploadPhotos: undefined
  85. })
  86. const formRules = reactive({
  87. groupName: [{ required: true, message: '照片组名称不能为空', trigger: 'blur' }],
  88. })
  89. const formRef = ref() // 表单 Ref
  90. /** 打开弹窗 */
  91. const open = () => {
  92. dialogVisible.value = true
  93. updateSupport.value = 0
  94. fileList.value = []
  95. resetForm()
  96. }
  97. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  98. //const { httpRequest } = useUpload()
  99. /** 图片上传成功 */
  100. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  101. const submitFormSuccess = (response: any) => {
  102. console.log('tj',response)
  103. if (response.code !== 0) {
  104. message.error(response.msg)
  105. formLoading.value = false
  106. return
  107. }
  108. formLoading.value = false
  109. dialogVisible.value = false
  110. // 发送操作成功的事件
  111. emit('success')
  112. }
  113. /** 上传错误提示 */
  114. const submitFormError = (): void => {
  115. message.error('上传失败,请您重新上传!')
  116. formLoading.value = false
  117. }
  118. const uploadHeaders = ref() // 上传 Header 头
  119. /** 提交表单 */
  120. const submitForm = async () => {
  121. if (fileList.value.length == 0) {
  122. message.error('请上传文件')
  123. return
  124. }
  125. uploadHeaders.value = {
  126. Authorization: 'Bearer ' + getAccessToken(),
  127. }
  128. formLoading.value = true
  129. uploadRef.value!.submit()
  130. // 发送操作成功的事件
  131. emit('success')
  132. }
  133. /** 重置表单 */
  134. const resetForm = async (): Promise<void> => {
  135. formData.value = {
  136. id: undefined,
  137. groupName: undefined,
  138. groupDate: undefined,
  139. groupDescription: undefined,
  140. uploadPhotos: undefined
  141. }
  142. // 重置上传状态和文件
  143. formLoading.value = false
  144. await nextTick()
  145. uploadRef.value?.clearFiles()
  146. }
  147. </script>