vue element el-transfer adds drag function

vue element el-transfer adds drag function

The Core Asset Management Project requires el-transfer to add drag-and-drop sorting and drag-and-drop functions to the left, right, up, and down sides;
The original component does not support dragging, so we need to use a third-party component sortablejs

First install

 sudo npm i sortablejs --save-dev

HTML code

  <template>
  <el-transfer ref="transfer" id="transfer" v-model="value" :data="data">
   <span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
  </el-transfer>
</template>```

create

  <script>

   import Sortable from 'sortablejs'

   export default {
      data() {
        const generateData = _ => {
          const data = []; for (let i = 1; i <= 15; i++) {
            data.push({
              key: i,
              label: `option ${i}`,
              disabled: i % 4 === 0 });
          } return data;
        }; return {
          data: generateData(),
          value: [1, 4],
          draggingKey : null }
      },
      mounted() {
        const transfer = this.$refs.transfer.$el
        const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
        const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
        const rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(rightEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.value[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            }//Solve the problem of undefined when dragging the last item on the right from the right to the left this.$set(this.value,oldIndex,this.value[newIndex])  
            this.$set(this.value,newIndex,temp)
          }
        })
        const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(leftEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.data[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            } //Solve the problem of undefined when dragging the last item on the right from the right to the left this.$set(this.data,oldIndex,this.data[newIndex]) 
            this.$set(this.data,newIndex,temp)
          }
        })
        leftPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        leftPanel.ondrop = (ev) => {
          ev.preventDefault();
          const index = this.value.indexOf(this.draggingKey) if(index !== -1){ this.value.splice(index,1)
          }
        }
        rightPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        rightPanel.ondrop = (ev) => {
          ev.preventDefault(); if(this.value.indexOf(this.draggingKey) === -1){ this.value.push(this.draggingKey)
          }
        }
      },
      methods: {
        drag(ev,option) { this.draggingKey = option.key
        }
      }

    } 
</script>

This is the end of this article about adding drag-and-drop function to vue element el-transfer. For more related element el-transfer drag-and-drop content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Vue+abp WeChat scan code login implementation code example
  • How to encapsulate the table component of Vue Element
  • Example code for implementing dynamic column filtering in vue+element table
  • Sharing tips on using vue element and nuxt
  • Implementation of vue+elementui universal pop-up window (add+edit)
  • Vue+element UI realizes tree table
  • Vue+elementUI dynamically adds form items and adds verification code details
  • Vue uses element-ui to implement form validation
  • Vue Element front-end application development integrates ABP framework front-end login

<<:  About uniApp editor WeChat sliding problem

>>:  React-native sample code to implement the shopping cart sliding deletion effect

Recommend

Detailed example of using typescript to encapsulate axios in Vue3

This axios package is used in the vue3 demo. For ...

js realizes horizontal and vertical sliders

Recently, when I was doing a practice project, I ...

MySQL Failover Notes: Application-Aware Design Detailed Explanation

1. Introduction As we all know, in the applicatio...

Summary of 7 types of logs in MySQL

There are the following log files in MySQL: 1: re...

Detailed explanation of the principle of Docker image layering

Base image The base image has two meanings: Does ...

Why does your height:100% not work?

Why doesn't your height:100% work? This knowl...

Util module in node.js tutorial example detailed explanation

Table of contents Starting from type judgment Str...

Configure selenium environment based on linux and implement operation

1. Using Selenium in Linux 1. Install Chrome Inst...

Solution to inconsistent display of cursor size in input box

The cursor size in the input box is inconsistent T...

In-depth study of how to use positioning in CSS (summary)

Introduction to Positioning in CSS position attri...

Six weird and useful things about JavaScript

Table of contents 1. Deconstruction Tips 2. Digit...

Border-radius IE8 compatible processing method

According to canisue (http://caniuse.com/#search=...

Implementation of Docker deployment of Django+Mysql+Redis+Gunicorn+Nginx

I. Introduction Docker technology is very popular...