上传组件新增拖动排序属性

This commit is contained in:
RuoYi 2025-04-30 10:30:16 +08:00
parent ad54ded7c9
commit 4f32a048a4
2 changed files with 54 additions and 5 deletions

View File

@ -33,7 +33,7 @@
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link>
<div class="ele-upload-list__item-content-action">
<el-link :underline="false" @click="handleDelete(index)" type="danger" v-if="!disabled">删除</el-link>
<el-link :underline="false" @click="handleDelete(index)" type="danger" v-if="!disabled">&nbsp;删除</el-link>
</div>
</li>
</transition-group>
@ -42,6 +42,7 @@
<script setup>
import { getToken } from "@/utils/auth"
import Sortable from 'sortablejs'
const props = defineProps({
modelValue: [String, Object, Array],
@ -78,6 +79,11 @@ const props = defineProps({
disabled: {
type: Boolean,
default: false
},
//
drag: {
type: Boolean,
default: true
}
})
@ -204,9 +210,29 @@ function listToString(list, separator) {
}
return strs != '' ? strs.substr(0, strs.length - 1) : ''
}
</script>
//
onMounted(() => {
if (props.drag) {
nextTick(() => {
const element = document.querySelector('.upload-file-list')
Sortable.create(element, {
ghostClass: 'file-upload-darg',
onEnd: (evt) => {
const movedItem = fileList.value.splice(evt.oldIndex, 1)[0]
fileList.value.splice(evt.newIndex, 0, movedItem)
emit('update:modelValue', listToString(fileList.value))
}
})
})
}
})
</script>
<style scoped lang="scss">
.file-upload-darg {
opacity: 0.5;
background: #c8ebfb;
}
.upload-file-uploader {
margin-bottom: 5px;
}
@ -215,6 +241,7 @@ function listToString(list, separator) {
line-height: 2;
margin-bottom: 10px;
position: relative;
transition: none !important;
}
.upload-file-list .ele-upload-list__item-content {
display: flex;

View File

@ -48,6 +48,7 @@
<script setup>
import { getToken } from "@/utils/auth"
import Sortable from 'sortablejs'
const props = defineProps({
modelValue: [String, Object, Array],
@ -63,23 +64,28 @@ const props = defineProps({
//
limit: {
type: Number,
default: 5,
default: 5
},
// (MB)
fileSize: {
type: Number,
default: 5,
default: 5
},
// , ['png', 'jpg', 'jpeg']
fileType: {
type: Array,
default: () => ["png", "jpg", "jpeg"],
default: () => ["png", "jpg", "jpeg"]
},
//
isShowTip: {
type: Boolean,
default: true
},
//
drag: {
type: Boolean,
default: true
}
})
const { proxy } = getCurrentInstance()
@ -211,6 +217,22 @@ function listToString(list, separator) {
}
return strs != "" ? strs.substr(0, strs.length - 1) : ""
}
//
onMounted(() => {
if (props.drag) {
nextTick(() => {
const element = document.querySelector('.el-upload-list')
Sortable.create(element, {
onEnd: (evt) => {
const movedItem = fileList.value.splice(evt.oldIndex, 1)[0]
fileList.value.splice(evt.newIndex, 0, movedItem)
emit('update:modelValue', listToString(fileList.value))
}
})
})
}
})
</script>
<style scoped lang="scss">