|
|
@@ -64,20 +64,15 @@
|
|
|
]"
|
|
|
>
|
|
|
<vue-draggable
|
|
|
- v-model="sortList"
|
|
|
+ :list="localItems"
|
|
|
v-bind="draggableOptions"
|
|
|
class="list-group"
|
|
|
- @start="isDragging = true"
|
|
|
- @end="
|
|
|
- () => {
|
|
|
- isDragging = false
|
|
|
- }
|
|
|
- "
|
|
|
- @update="updateSort"
|
|
|
+ @end="handleDragEnd"
|
|
|
>
|
|
|
<li
|
|
|
- v-for="(file, index) in displayedList"
|
|
|
+ v-for="(file, index) in localItems"
|
|
|
:key="index"
|
|
|
+ v-show="isExpanded || index < 5"
|
|
|
:class="['el-upload-list__item', focusing ? 'focusing' : '']"
|
|
|
tabindex="0"
|
|
|
@focus="focusing = true"
|
|
|
@@ -91,6 +86,7 @@
|
|
|
:title="file"
|
|
|
@click.stop="handlePreview(index)"
|
|
|
>
|
|
|
+ <i class="el-icon-rank draggable" v-if="editable" />
|
|
|
<i class="el-icon-document" />{{ file | ellipsis }}
|
|
|
</a>
|
|
|
<label class="tools">
|
|
|
@@ -112,10 +108,6 @@
|
|
|
<el-divider direction="vertical" />
|
|
|
<template v-if="editable">
|
|
|
<!--默认附件上传 -->
|
|
|
- <!-- <el-tooltip effect="dark" content="拖拽排序" placement="bottom-start">
|
|
|
- <el-link type="info" :underline="false" icon="ibps-icon-arrows" class="draggable"> </el-link>
|
|
|
- </el-tooltip>
|
|
|
- <el-divider direction="vertical" /> -->
|
|
|
<el-tooltip
|
|
|
effect="dark"
|
|
|
content="重新选择"
|
|
|
@@ -258,8 +250,6 @@ export default {
|
|
|
listType: 'text',
|
|
|
focusing: false,
|
|
|
defaultDisabled: true,
|
|
|
- sortList: [],
|
|
|
- isDragging: false,
|
|
|
draggableOptions: {
|
|
|
handle: '.draggable',
|
|
|
ghostClass: 'sortable-ghost',
|
|
|
@@ -268,15 +258,16 @@ export default {
|
|
|
animation: 200,
|
|
|
axis: 'y'
|
|
|
},
|
|
|
- isExpanded: false
|
|
|
+ isExpanded: false,
|
|
|
+ localItems: [] // 本地拷贝用于拖拽
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
// 是否允许上传
|
|
|
uploadable() {
|
|
|
if (this.readonly) return false
|
|
|
- if (!this.multiple && this.items.length >= 1) return false
|
|
|
- if (this.multiple && this.limit && this.items.length >= this.limit)
|
|
|
+ if (!this.multiple && this.localItems.length >= 1) return false
|
|
|
+ if (this.multiple && this.limit && this.localItems.length >= this.limit)
|
|
|
return false
|
|
|
return true
|
|
|
},
|
|
|
@@ -288,10 +279,19 @@ export default {
|
|
|
return 30 * length + 'px'
|
|
|
},
|
|
|
shouldShowButton() {
|
|
|
- return this.items.length > 5
|
|
|
+ return this.localItems.length > 5
|
|
|
},
|
|
|
displayedList() {
|
|
|
- return this.isExpanded ? this.items : this.items.slice(0, 5)
|
|
|
+ return this.isExpanded ? this.localItems : this.localItems.slice(0, 5)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ items: {
|
|
|
+ handler(val) {
|
|
|
+ this.localItems = [...(val || [])]
|
|
|
+ },
|
|
|
+ immediate: true,
|
|
|
+ deep: true
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
@@ -338,6 +338,10 @@ export default {
|
|
|
handlePreview(index) {
|
|
|
this.$emit('action-event', 'preview', index)
|
|
|
},
|
|
|
+ // 处理拖拽排序事件
|
|
|
+ handleSortEvent({ oldIndex, newIndex, sortedItems }) {
|
|
|
+ this.$emit('sort-change', sortedItems)
|
|
|
+ },
|
|
|
// 默认上传模块
|
|
|
httpRequest(options) {
|
|
|
return uploadFile(options.file, {})
|
|
|
@@ -461,10 +465,11 @@ export default {
|
|
|
}
|
|
|
this.$emit('action-event', 'confirm', data)
|
|
|
},
|
|
|
- updateSort({ to, from, item, clone, oldIndex, newlndex }) {
|
|
|
- // console.log(to, from, item, clone, oldIndex, newlndex)
|
|
|
- // console.log(this.value)
|
|
|
- // console.log(this.sortList)
|
|
|
+ handleDragEnd(evt) {
|
|
|
+ const { oldIndex, newIndex } = evt
|
|
|
+ if (oldIndex === newIndex) return
|
|
|
+ // 通知 selector.vue 处理排序
|
|
|
+ this.$emit('action-event', 'sort', newIndex, { oldIndex, newIndex })
|
|
|
}
|
|
|
}
|
|
|
}
|