PhotoGroupForm.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="100px"
  8. v-loading="formLoading"
  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-form-item>
  24. <el-form-item label="创建时间" prop="createdAt">
  25. <el-date-picker
  26. v-model="formData.createdAt"
  27. type="date"
  28. value-format="x"
  29. placeholder="选择创建时间"
  30. />
  31. </el-form-item>
  32. <el-form-item label="照片组上传" prop="uploadPhotos">
  33. <!-- <UploadFile v-model="formData.uploadPhotos" />-->
  34. <el-upload
  35. ref="uploadRef"
  36. v-model:file-list="fileList"
  37. drag
  38. :action="importUrl + '?updateSupport=' + updateSupport"
  39. :on-success="submitFormSuccess"
  40. style="max-width:250px;max-height: 30vh;margin-left: 20px"
  41. :auto-upload="false"
  42. :disabled="formLoading"
  43. :limit="1"
  44. :on-error="submitFormError"
  45. :http-request="httpRequest"
  46. >
  47. <el-icon class="el-icon--upload"><upload-filled /></el-icon>
  48. <div class="el-upload__text">
  49. <em>请上传图片压缩包</em>
  50. <span>仅允许导入jpg、png、gif 格式文件。</span>
  51. </div>
  52. <template #tip>
  53. <div class="el-upload__tip">
  54. <el-checkbox v-model="updateSupport" />
  55. 是否更新已经存在的标本图片
  56. </div>
  57. </template>
  58. </el-upload>
  59. </el-form-item>
  60. </el-form>
  61. <template #footer>
  62. <!-- <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>-->
  63. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  64. <el-button @click="dialogVisible = false">取 消</el-button>
  65. </template>
  66. </Dialog>
  67. </template>
  68. <script setup lang="ts">
  69. import { PhotoGroupApi, PhotoGroupVO } from '@/api/museums/photogroup'
  70. import {UploadFilled} from "@element-plus/icons-vue";
  71. import {useUpload} from "@/components/UploadFile/src/useUpload";
  72. const importUrl =
  73. import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/photosmanage/photo-group/createe'
  74. /** 博物馆照片组 表单 */
  75. defineOptions({ name: 'PhotoGroupForm' })
  76. const { t } = useI18n() // 国际化
  77. const message = useMessage() // 消息弹窗
  78. const fileList = ref([]) // 文件列表
  79. const dialogVisible = ref(false) // 弹窗的是否展示
  80. const dialogTitle = ref('') // 弹窗的标题
  81. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  82. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  83. const updateSupport = ref(0) // 是否更新已经存在的用户数据
  84. const formData = ref({
  85. id: undefined,
  86. groupName: undefined,
  87. groupDate: undefined,
  88. groupDescription: undefined,
  89. createdAt: undefined,
  90. uploadPhotos: undefined
  91. })
  92. const formRules = reactive({
  93. groupName: [{ required: true, message: '照片组名称不能为空', trigger: 'blur' }],
  94. groupDate: [{ required: true, message: '照片组时间不能为空', trigger: 'blur' }]
  95. })
  96. const formRef = ref() // 表单 Ref
  97. /** 打开弹窗 */
  98. const open = async (type: string, id?: number) => {
  99. dialogVisible.value = true
  100. dialogTitle.value = t('action.' + type)
  101. formType.value = type
  102. resetForm()
  103. // 修改时,设置数据
  104. if (id) {
  105. formLoading.value = true
  106. try {
  107. formData.value = await PhotoGroupApi.getPhotoGroup(id)
  108. } finally {
  109. formLoading.value = false
  110. }
  111. }
  112. }
  113. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  114. const { httpRequest } = useUpload()
  115. /** 提交表单 */
  116. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  117. const submitForm = async () => {
  118. // 校验表单
  119. await formRef.value.validate()
  120. // 提交请求
  121. formLoading.value = true
  122. try {
  123. const data = formData.value as unknown as PhotoGroupVO
  124. if (formType.value === 'create') {
  125. await PhotoGroupApi.createPhotoGroup(data)
  126. message.success(t('common.createSuccess'))
  127. } else {
  128. await PhotoGroupApi.updatePhotoGroup(data)
  129. message.success(t('common.updateSuccess'))
  130. }
  131. dialogVisible.value = false
  132. // 发送操作成功的事件
  133. emit('success')
  134. } finally {
  135. formLoading.value = false
  136. }
  137. }
  138. /** 重置表单 */
  139. const resetForm = () => {
  140. formData.value = {
  141. id: undefined,
  142. groupName: undefined,
  143. groupDate: undefined,
  144. groupDescription: undefined,
  145. createdAt: undefined,
  146. uploadPhotos: undefined
  147. }
  148. formRef.value?.resetFields()
  149. }
  150. /** 图片上传成功 */
  151. const submitFormSuccess = (response: any) => {
  152. console.log('tj',response)
  153. if (response.code !== 0) {
  154. message.error(response.msg)
  155. formLoading.value = false
  156. return
  157. }
  158. formLoading.value = false
  159. dialogVisible.value = false
  160. // 发送操作成功的事件
  161. }
  162. /** 上传错误提示 */
  163. const submitFormError = (): void => {
  164. message.error('上传失败,请您重新上传!')
  165. formLoading.value = false
  166. }
  167. </script>