editMedia.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <el-dialog
  3. title="编辑"
  4. v-model="dialogVisible"
  5. width="500px"
  6. :before-close="handleClose"
  7. :close-on-click-modal="false"
  8. >
  9. <div class="edit-container">
  10. <div class="form-item">
  11. <span class="required">*</span>名称
  12. <el-input v-model="form.name" placeholder="请输入名称"></el-input>
  13. </div>
  14. <div class="form-item">
  15. <span class="required">*</span>分组
  16. <el-select v-model="form.dictId" placeholder="请选择">
  17. <el-option
  18. v-for="group in groupList"
  19. :key="group.id"
  20. :label="group.dictName"
  21. :value="group.id"
  22. ></el-option>
  23. </el-select>
  24. </div>
  25. </div>
  26. <template #footer>
  27. <span class="dialog-footer">
  28. <el-button @click="handleClose">取 消</el-button>
  29. <el-button type="primary" @click="handleConfirm">确 认</el-button>
  30. </span>
  31. </template>
  32. </el-dialog>
  33. </template>
  34. <script setup lang="ts">
  35. import { ref, defineEmits, defineProps, computed, watch } from 'vue';
  36. import { ElMessage } from 'element-plus';
  37. import { editMediaItem } from '@/store/mediaLibrary';
  38. const props = defineProps({
  39. visible: {
  40. type: Boolean,
  41. default: false
  42. },
  43. groupList: {
  44. type: Array,
  45. default: () => []
  46. },
  47. mediaData: {
  48. type: Object,
  49. default: () => ({})
  50. }
  51. });
  52. const emit = defineEmits(['update:visible', 'refresh']);
  53. const dialogVisible = computed({
  54. get: () => props.visible,
  55. set: (val) => emit('update:visible', val)
  56. });
  57. const form = ref({
  58. id: '',
  59. dictId: '',
  60. uploadId: '',
  61. name: '' // 添加文件名字段
  62. });
  63. // 监听媒体数据变化,初始化表单
  64. watch(() => props.mediaData, (newVal) => {
  65. if (newVal && newVal.id) {
  66. form.value.id = newVal.id;
  67. form.value.dictId = newVal.dictId || '';
  68. form.value.uploadId = newVal.uploadId || '';
  69. form.value.name = newVal.name || ''; // 初始化文件名
  70. }
  71. }, { immediate: true, deep: true });
  72. // 关闭弹窗
  73. const handleClose = () => {
  74. dialogVisible.value = false;
  75. };
  76. // 确认编辑
  77. const handleConfirm = async () => {
  78. if (!form.value.dictId) {
  79. ElMessage.warning('请选择分组');
  80. return;
  81. }
  82. if (!form.value.name || !form.value.name.trim()) {
  83. ElMessage.warning('请输入文件名称');
  84. return;
  85. }
  86. try {
  87. await editMediaItem({
  88. id: form.value.id,
  89. dictId: form.value.dictId,
  90. uploadId: form.value.uploadId,
  91. name: form.value.name.trim() // 添加文件名到提交数据
  92. });
  93. ElMessage.success('编辑成功');
  94. handleClose();
  95. emit('refresh');
  96. } catch (error) {
  97. console.error('编辑失败:', error);
  98. ElMessage.error('编辑失败');
  99. }
  100. };
  101. </script>
  102. <style lang="scss" scoped>
  103. .edit-container {
  104. padding: 20px;
  105. }
  106. .form-item {
  107. margin-bottom: 20px;
  108. display: flex;
  109. align-items: center;
  110. .required {
  111. color: #f56c6c;
  112. margin-right: 5px;
  113. }
  114. .el-select, .el-input {
  115. margin-left: 10px;
  116. width: 300px;
  117. }
  118. }
  119. </style>