releaseModal.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <!-- 上传资源模态框 -->
  3. <a-modal
  4. title="发布课程"
  5. style="width: 800px"
  6. v-model:visible="uploadModalVisible"
  7. @ok="handleUploadOk"
  8. @cancel="handleUploadCancel"
  9. >
  10. <a-form :model="uploadForm" :label-col="{ span: 6 }" :wrapper-col="{ span: 16 }">
  11. <!-- <a-form-item label="资源名称" name="resourceName">
  12. <a-input v-model:value="uploadForm.resourceName" placeholder="请输入资源名称" />
  13. </a-form-item> -->
  14. <!-- <a-form-item label="资源类型" name="resourceType">
  15. <a-select v-model:value="uploadForm.resourceType" placeholder="请选择资源类型">
  16. <a-select-option value="type1">类型1</a-select-option>
  17. <a-select-option value="type2">类型2</a-select-option>
  18. </a-select>
  19. </a-form-item>
  20. <a-form-item label="课程名称" name="courseName">
  21. <a-input v-model:value="uploadForm.courseName" placeholder="请输入课程名称" />
  22. </a-form-item> -->
  23. <a-form-item label="资源描述" name="courseDesc">
  24. <a-textarea v-model:value="uploadForm.resourceDesc" placeholder="请输入课程介绍" :rows="4" />
  25. </a-form-item>
  26. <a-form-item label="上传封面" name="coverImageId">
  27. <coverUpload @handleChangeCover="handleChangeCover" @handleRemoveCover="handleRemoveCover"></coverUpload>
  28. </a-form-item>
  29. </a-form>
  30. </a-modal>
  31. </template>
  32. <script setup>
  33. import { ref, reactive } from 'vue'
  34. import { Modal, Upload } from 'ant-design-vue'
  35. import { PlusOutlined } from '@ant-design/icons-vue'
  36. import coverUpload from './coverUpload/index.vue'
  37. import tool from '@/utils/tool'
  38. // const props = defineProps({
  39. // isState: {
  40. // type: Number,
  41. // required: true,
  42. // default: 0
  43. // }
  44. // })
  45. const headers = ref({
  46. token: tool.data.get('TOKEN')
  47. })
  48. const action = ref('http://192.168.31.80:9003/api/webapp/dev/file/uploadMinioReturnId')
  49. const emit = defineEmits(['close', 'confirm'])
  50. // 表单数据
  51. const uploadForm = reactive({
  52. // resourceName: null,
  53. // resourceType: null,
  54. // courseName: null,
  55. resourceDesc: null,
  56. coverImageId: '123'
  57. })
  58. // 封面文件列表
  59. const coverFileList = ref([])
  60. const fileList = ref([])
  61. const uploadModalVisible = ref(true)
  62. // 显示上传模态框
  63. // const showUploadModal = () => {
  64. // uploadModalVisible.value = true
  65. // }
  66. // 关闭模态框
  67. const handleUploadCancel = () => {
  68. // uploadModalVisible.value = false
  69. Object.assign(uploadForm, {
  70. // resourceName: null,
  71. resourceDesc: null,
  72. // courseName: null,
  73. // courseDesc: null,
  74. coverImageId: null
  75. })
  76. fileList.value = []
  77. coverFileList.value = []
  78. emit('close')
  79. }
  80. const handleUploadOk = () => {
  81. // 这里可以添加实际的上传逻辑
  82. console.log('Upload confirmed:', uploadForm.fileId, fileList.value, coverFileList.value)
  83. emit('confirm', uploadForm)
  84. // uploadModalVisible.value = false
  85. Object.assign(uploadForm, {
  86. // resourceName: null,
  87. // resourceType: null,
  88. // courseName: null,
  89. resourceDesc: null,
  90. coverImageId: null
  91. })
  92. fileList.value = []
  93. coverFileList.value = []
  94. }
  95. // 封面文件id
  96. const handleChangeCover = (fileId) => {
  97. uploadForm.coverImageId = fileId
  98. }
  99. // 移除封面文件
  100. const handleRemoveCover = () => {
  101. uploadForm.coverImageId = null
  102. }
  103. </script>
  104. <style scoped>
  105. .upload-area {
  106. border: 2px dashed #3ca9f5;
  107. padding: 40px;
  108. text-align: center;
  109. }
  110. .upload-area p {
  111. margin: 10px 0;
  112. }
  113. .file-item {
  114. display: flex;
  115. align-items: center;
  116. margin: 10px 0;
  117. }
  118. .file-item .ant-progress {
  119. flex: 1;
  120. margin: 0 10px;
  121. }
  122. .ant-upload-picture-card-wrapper .ant-upload-list-item-info .ant-upload-list-item-filename {
  123. display: block; /* 确保文件名显示为块级元素 */
  124. margin-top: 8px; /* 调整文件名与图片之间的间距 */
  125. }
  126. </style>