zoukankan      html  css  js  c++  java
  • vuedraggable 拖拽 应用 不同列表之间的拖拽

    vuedraggable 拖拽 应用 不同列表之间的拖拽
    npm install vuedraggable


    main.js 文件
    import VueDraggable from 'vuedraggable';

    Vue.use(VueDraggable);
    <template>
      <div>
        <el-row style="55%;float: left;" class="model">
          <el-col class="model-box" :span="5" v-for="(item,index) in banks" :key="index">
            <!-- <img src="../../../img/icon-3.png" /> -->
            <div class="name">{{item.name}}</div>
          </el-col>
        </el-row>
        <el-row style="40%;float: left;">
          <el-col :span="16">
            <div class="drag-box">
              <div class="drag-box-item">
                <p class="title">银行排序</p>
                <div class="item-title">注:可拖动银行进行排序展示</div>
                <el-row class="leftHeight">
                  <el-col :span="3">
                    <div v-for="i in banks.length" :key="i" class="drag-num">{{i}}、</div>
                  </el-col>
                  <el-col :span="21">
                    <draggable v-model="banks" :options="dragOptions">
                      <transition-group tag="div" id="banks" class="item-ul">
                        <div v-for="a in banks" :key="a.id" class="drag-list">{{a.name}}</div>
                      </transition-group>
                    </draggable>
                  </el-col>
                </el-row>
              </div>
            </div>
            <el-form>
              <div class="drag-box">
                <div class="drag-box-item">
                  <el-row class="title">
                    <el-col :span="14">银行卡片排序</el-col>
                    <el-col :span="10">
                      <el-form-item label="选择银行:">
                        <el-select
                          v-model="searchForm.bankId"
                          placeholder="请选择"
                          @change="getCardListByBankId"
                        >
                          <el-option label="全部" value></el-option>
                          <el-option
                            v-for="(item, index) in banks"
                            :key="index"
                            :label="item.name"
                            :value="item.id"
                          ></el-option>
                        </el-select>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <div class="item-title">注:可拖动卡片进行排序展示</div>
                  <el-row class="leftHeight">
                    <el-col :span="21">
                      <draggable v-model="cardList" :options="dragOptions2">
                        <transition-group tag="div" id="cardList" class="item-ul">
                          <div v-for="c in cardList" :key="c.id" class="drag-list">{{c.name}}</div>
                        </transition-group>
                      </draggable>
                    </el-col>
                  </el-row>
                </div>
              </div>
              <div class="btns text-center">
                <el-button type="primary" class="send" @click.native="sendChange">提交</el-button>
                <el-button @click.native="removeChange">取消</el-button>
              </div>
            </el-form>
          </el-col>
        </el-row>
      </div>
    </template>

    <script>
    import draggable from 'vuedraggable';
    import { mapGetters } from 'vuex';
    import BaseExtend from '@/extends/base.extend';
    import OrgSelect from '@/components/OrgSelect';

    export default {
      extends: BaseExtend,
      components: {
        OrgSelect,
        draggable
      },
      data() {
        return {
          // 银行列表
          banks: [],
          cardList: [],
          searchForm: {
            bankId: ''
          },
          endBank: [],
          endCard: [],
          // 拖动 参数
          dragOptions: {
            animation: 120,
            scroll: true,
            sort: true,
            group: 'sortlist',
            ghostClass: 'ghost-style'
          },
          // 参数
          dragOptions2: {
            animation: 120,
            scroll: true,
            sort: true,
            group: 'sortCardlist',
            ghostClass: 'ghost-style'
          }
        };
      },
      computed: {
        myHeader: function() {
          return {
            // eslint-disable-next-line
            authToken: window.localStorage.getItem('token')
          };
        }
      },
      created() {
        this.getBank();
      },
      methods: {
        //获取排序银行列表
        getBank: function() {
          this.$api.getDistBankSortList().then(res => {
            if (res.success) {
              this.banks = res.data;
            }
          });
        },
        // 根据银行id获取所属该银行的信用卡类型
        getCardListByBankId: function() {
          this.cardList = [];
          this.$api.getDistCardSortList(this.searchForm).then(res => {
            if (res.success) {
              this.cardList = res.data;
            }
          });
        },
        // 提交
        sendChange: function() {
          const form = {
            card_sort: [],
            bankCardStr: []
          };
          this.banks.forEach((item, index) => {
            item.sort = index + 1;
          });
          this.cardList.forEach((item, index) => {
            item.sort = index + 1;
          });
          form.bankCardStr = JSON.stringify(this.cardList);
          form.bankStr = JSON.stringify(this.banks);
          this.$api.distConfigSetupSort(form).then(res => {
            if (res.success) {
              this.successMessage('修改成功');
            }
          });
        },
        // 取消
        removeChange: function() {
          this.getBank();
        }

      }
    };
    </script>

    <style scoped>
    .btns {
      margin-top: 60px;
    }
    .btns .send {
      margin-right: 30px;
    }
    .title {
      margin-bottom: 20px;
    }
    .drag-box {
      padding: 10px 0;
    }
    .drag-box-item {
      padding: 15px;
      background-color: #eee;
      border-radius: 6px;
      border: 1px #e1e4e8 solid;
    }
    .item-title {
      color: #666;
      font-size: 12px;
    }
    .drag-num {
      font-size: 14px;
      color: #333;
      line-height: 41px;
      margin: 10px 5px 10px 0;
    }
    .leftHeight {
      max-height: 300px;
      overflow: scroll;
    }
    .leftHeight::-webkit-scrollbar {
       0;
    }
    .drag-list {
      font-size: 14px;
      color: #333;
      padding: 10px;
      margin: 10px 0;
      background-color: #fff;
      border-radius: 6px;
      cursor: pointer;
      border: 1px #e1e4e8 solid;
      /* -webkit-transition: border 0.3s ease-in;
      transition: border 0.3s ease-in; */
    }
    .drag-list:hover {
      border: 1px solid #20a0ff;
    }
    .ghost-style {
      display: block;
      color: transparent;
      border-style: dashed;
    }
    .model {
      margin: 5% 3% 5% 1%;
      padding: 20px;
      border: 1px solid #888888;
      border-radius: 10px;
       30%;
      float: left;
      text-align: center;
    }
    .model-box {
      border: 1px solid #e8e8e8;
      border-radius: 10px;
      padding: 5px;
      margin: 0.5% 2% 3% 2%;
      height: 100px;
    }
    .model-box div.name {
      white-space: nowrap;
      text-overflow: ellipsis;
      overflow: hidden;
      word-break: break-all;
    }
    </style>
    
    
     
     
  • 相关阅读:
    EMQ X v4.3 正式发布:性能大幅提升,更好用的多语言扩展
    全新 EMQ X Cloud 物联网云平台重磅发布
    MQTT 和 CoAP 在 EMQ X 世界的一次「约会」
    Python MQTT 异步框架 —— HBMQTT
    EMQ X 团队:连接数亿关键 IoT 设备|EMQ 2021 全球招聘季
    让每一个来自社区的声音被听见、有回响:EMQ X 开源项目正式采用 RFC 流程
    Kuiper 1.1.2 正式发布
    Xamarin.Forms iOS打包上传AppStore,奇妙的崩溃 EXC_CRASH (SIGABRT)
    大数据系列修炼-Scala课程01
    文本摘要简述
  • 原文地址:https://www.cnblogs.com/FACESCORE/p/12510373.html
Copyright © 2011-2022 走看看