Blame view
src/components/DragSelect/index.vue
1.3 KB
d7d9c38c2 auto commit the c... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<template> <el-select ref="dragSelect" v-model="selectVal" v-bind="$attrs" class="drag-select" multiple v-on="$listeners"> <slot /> </el-select> </template> <script> import Sortable from 'sortablejs' export default { name: 'DragSelect', props: { value: { type: Array, required: true } }, computed: { selectVal: { get() { return [...this.value] }, set(val) { this.$emit('input', [...val]) } } }, mounted() { this.setSort() }, methods: { setSort() { const el = this.$refs.dragSelect.$el.querySelectorAll('.el-select__tags > span')[0] this.sortable = Sortable.create(el, { ghostClass: 'sortable-ghost', // Class name for the drop placeholder, setData: function(dataTransfer) { dataTransfer.setData('Text', '') // to avoid Firefox bug // Detail see : https://github.com/RubaXa/Sortable/issues/1012 }, onEnd: evt => { const targetRow = this.value.splice(evt.oldIndex, 1)[0] this.value.splice(evt.newIndex, 0, targetRow) } }) } } } </script> <style scoped> .drag-select >>> .sortable-ghost { opacity: .8; color: #fff!important; background: #42b983!important; } .drag-select >>> .el-tag { cursor: pointer; } </style> |