draggable 功能管理页面 - 可拖拽排序

页面效果:
在这里插入图片描述
不喜欢废话,上代码:
先 npm i -S vuedraggable
再在页面中引用

<template>
  <div class="fund1">
    <van-sticky>
      <ph-layout-header title="全部服务">
        <template #left>
          <img
            class="leftarrow"
            v-if="isShowIcon"
            :src="$staticPath.getImage('/AccountOpen/leftarrow.png')"
            @click="backHandle()"
          />
          <span class="clone_text" v-else @click="closeHandle()">{
   {
    '取消' }}</span>
        </template>
        <template #right @click="gotoPage('/enchashment/enchashment-index')">
          <span v-if="isShowIcon" @click="clickIconHandle()" class="manage">管理</span>
          <span v-else @click="preservationIconHandle()" class="manage">保存</span>
        </template>
      </ph-layout-header>
    </van-sticky>
    <div class="icon_index_box">
      <p>首页服务</p>
      <div class="col">
        <!-- 
          delay="100" 长按100之后才可以拖拽,因为会跟点击角标的 X号 事件有冲突
          filter=".img-hover" class名为.img-hover 不可以拖拽
          :disabled="disabled" 设置默认不可拖拽
           -->
        <draggable
          v-model="cfgIconInfoDoListIndex"
          delay="100"
          filter=".img-hover"
          animation="300"
          :disabled="disabled"
          :move="onMove"
        >
          <transition-group class="span_text">
            <div v-for="(item, index) in cfgIconInfoDoListIndex" :key="item.id" class="img_box">
              <div v-if="item.defaultFlag == '1'" class="img-hover">
                <p>
                  <img
                    :src="item.iconUrl"
                    @click="isClick && gotoIconUrl(item.urlType, item.url)"
                  />
                </p>
                <p>{
   {
    item.iconName }}</p>
              </div>
              <div v-else class="img-hover1">
                <p>
                  <img
                    :src="item.iconUrl"
                    @click="isClick && gotoIconUrl(item.urlType, item.url)"
                  />
                  <img
                    :src="$staticPath.getImage('/TabMainPage/delete_icon.png')"
                    class="delete_img"
                    v-if="item.defaultFlag == '0' && !isShowIcon"
                    @click="deleteIconHandle(index)"
                  />
                </p>
                <p>{
   {
    item.iconName }}</p>
              </div>
            </div>
          </transition-group>
        </draggable>
      </div>
      <div class="tips">以上工具已显示在首页</div>
    </div>
    <div
      class="icon_index_box"
      style="border-bottom: none"
      v-for="(value, key) in cfgIconInfoDoListAll"
      :key="key"
    >
      <p style="margin-top: 28px">{
   {
    key }}</p>
      <div class="col">
        <div class="span_text">
          <div v-for="(item, i) in value" :key="item.id" class="img_box">
            <div class="img-hover" @click="isClick && gotoIconUrl(item.urlType, item.url)">
              <p>
                <img :src="item.iconUrl" />
                <img
                  :src="$staticPath.getImage('/TabMainPage/add_icon3.png')"
                  class="add_img"
                  v-if="!isShowIcon && hasCurrentIcon(item)"
                  @click="addIconHandle(key, i)"
                />
              </p>
              <p>{
   {
    item.iconName }}</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import draggable from 'vuedraggable';
export default {
   
  components: {
   
    draggable
  },
  data() {
   
    return {
   
      cfgIconInfoDoListIndex: [], // 首页显示图标
      cfgIconInfoDoListNoFix: [],
      cfgIconInfoDoListAll: {
   },
      isShowIcon: true, //是否展示角标,
      disabled: true,
      isClick: true,
      obj: {
   }
    };
  },
  beforeCreate() {
   
    document.querySelector('body').style.background = '#fdfbfb';
  },
  created() {
   
    this.queryIconList();
  },
  mounted() {
   },
  methods: {
   
    /** 因为有默认icon不可拖拽,所以每行展示四个,如果只有三个默认icon的话,把可拖拽的托上面去就可以移动了,所以要给他不可移动 */
    onMove(e) {
   
      if (e.relatedContext.element.commonUseFlag == 1 && e.relatedContext.element.defaultFlag == 1)
        return false;
      return true;
    },
    /** 查询所有的数据 */
    queryIconList() {
   
      // var key = 'cfgIconInfoDoListAll';
      // // 还是需要
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值