Vue拖拽组件列表实现动态页面配置

2023-05-16

需求描述

最近在做一个后台系统,有一个功能产品需求是页面分为左右两部分,通过右边的组件列表来动态配置左边的页面视图,并且左边由组件拼装起来的视图,可以实现上下拖拽改变顺序,也可以删除。

根据这个需求我做了下面这个demo。

功能分解

  • 右边的组件列表,可以通过拖拽克隆到左边,拖拽结束后右边组件列表数量不会减少
  • 左边的组件可以展开或收起
  • 左边的组件可以上下拖拽,删除,但不可向右边拖拽
  • 左边组件拖拽过程中不改变其展开和收起状态

demo截图

1449188-20190616160536528-811292874.png

代码地址

vue-draggable-list

代码预览

<template>
  <div class="row">
    <div class="col-5">
      <h3>组件配置页面展示</h3>
      <draggable
        tag="el-collapse"
        class="dragArea list-group"
        :list="list2"
        group="comp"
        @change="log"
      >
        <el-collapse
          class="list-group-item left"
          v-for="(element,index) in list2"
          :key="index"
          v-model="activeNames"
          @change="handleChange"
        >
          <el-collapse-item :name="element.id">
            <template slot="title">
              <span>{{element.name}}</span>
              <i class="el-icon-circle-close" @click.stop="deleteItem(index)"></i>
            </template>
            <div>{{ element.content }}</div>
          </el-collapse-item>
        </el-collapse>
      </draggable>
    </div>

    <div class="col-5">
      <h3>可用组件列表</h3>
      <draggable
        class="dragArea list-group"
        :list="list1"
        :group="{ name: 'comp', pull: 'clone', put: false }"
        @change="log"
      >
        <div class="list-group-item" v-for="element in list1" :key="element.id">{{ element.name }}</div>
      </draggable>
    </div>
  </div>
</template>
<script>
import draggable from "vuedraggable";
export default {
  name: "clone",
  display: "Clone",
  order: 2,
  components: {
    draggable
  },
  data() {
    return {
      list1: [
        { name: "组件1", id: 1, content: "内容内容内容。。。。" },
        { name: "组件2", id: 2, content: "内容内容内容。。。。" },
        { name: "组件3", id: 3, content: "内容内容内容。。。。" },
        { name: "组件4", id: 4, content: "内容内容内容。。。。" },
        { name: "组件5", id: 5, content: "内容内容内容。。。。" },
        { name: "组件6", id: 6, content: "内容内容内容。。。。" },
        { name: "组件7", id: 7, content: "内容内容内容。。。。" }
      ],
      list2: [],
      activeNames: [],
      count: 0
    };
  },

  methods: {
    log: function(evt) {
      console.log(evt);
      if (evt.added) {
        this.count += 1;
        const item = evt.added.element;
        const idx = this.list2.findIndex(e => e.id === item.id);
        let temp = JSON.parse(JSON.stringify(this.list2));
        temp[idx].id = this.count;
        this.list2 = temp;
      }
    },
    handleChange: function() {},
    deleteItem: function(index) {
      this.list2.splice(index, 1);
    }
  }
};
</script>

转载于:https://www.cnblogs.com/dora-zc/p/11031847.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue拖拽组件列表实现动态页面配置 的相关文章

随机推荐

  • android 编译突然出错,错误原因 Could not resolve com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+....

    错误追根是因为微信支付依赖的错误 解决办法 xff1a 微信支付依赖版本 43 号改为微信支付依赖最新版本 在这里https bintray com wechat sdk team maven可以查看到wechat sdk的最新版本号 xf
  • 浏览器相关知识

    1 认识浏览器 浏览器是把在互联网上找到的文本文档翻译成网页 xff0c 网页包括图形 音频 视频和文本等 2 浏览器的主要功能 展示网页资源 xff0c 即请求服务器并将请求的结果显示在浏览器窗口中 资源的格式一般是HTML xff0c
  • linux vnc的默认端口修改

    linux vnc的默认端口修改 2014 02 08 20 01 28 分类 xff1a LINUX vnc的默认端口是5901 xff0c 这个说法是不对的 vnc并不是只有一个端口 以前另一个文章介绍了nvcserver的配置用户的过
  • redis配置

    1 Redis 3 2x配置文件详解 2 3 4 默认redis不是以后台进程的方式启动 xff0c 如果需要在后台运行 xff0c 需要将这个值设置成yes 5 以后台方式启动的时候 xff0c redis会写入默认的进程文件 var r
  • Cosmos OpenSSD架构分析--FSC

    接口速度 xff1a type bw read75 s1s 75 s 8k 1s 61 104m swrite 1300 s 1s 1300 s 8k 1s 61 6m serase3 8ms 1s 3 8ms 8k 256 1s 61 5
  • 单片机的栈

    导读 xff1a 在C语言的世界里 xff0c 栈的地位非常举足轻重 xff0c 许多错误都可能和栈设置有关 xff0c 那么该如何确定栈的大小 xff1f 今天分享一点栈知识 xff0c 帮助你确定栈的大小 xff0c 参考链接请点击下方
  • GPS数据接收 串口调试感受

    注册这个账户也有一段日子了 xff0c 不知不觉已经研2了 xff0c 时间过的好快 xff0c 研3的学长已经答辩完 xff0c 马上要离开学校去工作了 xff0c 在南京 xff0c 一份不错的工作 这学期已经过去一个月了 xff0c
  • 使用VNC访问Windows桌面

    1 背景介绍 两台电脑 xff0c 一个笔记本 xff0c 一个台式机 笔记本上装的是Windows 10 通过上网小助手上网 xff08 P S 上网小助手 Stupid Policy xff09 台式机上装的是Ubuntu 14 04L
  • Maven 与 IntelliJ IDEA 的完美结合<转>

    转载地址 xff1a http www open open com lib view open1388650391891 html 你是否正在学习Maven xff1f 是否因为Maven难用而又不得不用而苦恼 xff1f 是否对Eclip
  • Cannot install ubuntu or other linux flavours on citrix Xen server

    Citrix Xen sucks When u try to install linux stuff on its Xen servers u will get an error complaining errors like below
  • web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

    问题描述 最近将公司官网样式进行了调整 xff0c 部署到服务器后访问发现页面展示不正常 xff0c 但是刷新之后就会展示正常 问题分析 研究之后发现可能的原因有 css文件过大 xff0c 加载缓慢本地缓存问题 xff0c 虽然服务器修改
  • 目标检测篇-FPN论文精读

    1 FPN网络结构 基于feature pyrimid来检测不同scale的object xff0c 共有4种思路 a 使用图像金字塔构建特征金字塔 在每个图像尺度上独立计算的 b 只使用单一尺度的特征 c 重用由卷积神经网络计算的金字塔特
  • VNC的安装和常用命令

    主要参考文章 xff1a http www cnblogs com coderzh archive 2008 07 16 1243990 html http os 51cto com art 201005 201136 all htm ht
  • Deepin debian安装Libreoffice

    Libreoffice LibreOffice 是一款功能强大的办公软件 xff0c 默认使用开放文档格式 OpenDocument Format ODF 并支持 docx xlsx pptx 等其他格式 它包含了 Writer Calc
  • 小波变换——哈尔小波,Haar

    哈尔小波转换是于1909年由Alfr d Haar所提出 xff0c 是小波变换 xff08 Wavelet transform xff09 中最简单的一种变换 xff0c 也是最早提出的小波变换 Alfr d Haar xff0c 188
  • 一个字节多少位

    前几天笔试发现这个问题有点模糊 xff0c 囧 xff0c 记录一下 xff1a 1字节 xff08 byte xff09 61 8位 xff08 bit xff09 在16位的系统中 xff08 比如8086微机 xff09 1字 xff
  • java 基础排序(冒泡、插入、选择、快速)算法回顾

    java 基础排序 xff08 冒泡 插入 选择 快速 xff09 算法回顾 冒泡排序 code private static void bubbleSort int array int temp for int i 61 0 i lt a
  • Houdini Python开发实战 课程笔记

    P2 43 P3 43 P4 43 P5 基础 xff1a 1 Houdini中使用Python的地方 2 Textport xff1a 可使用cd ls等路径操作的命令 xff08 命令前加 xff0c 可在python中使用 xff09
  • Houdini Mac 添加external editor

    我的尝试 xff08 没有成功 xff09 xff1a 1 找到houdini env文件 2 修改env文件 xff0c 添加 EDITOR 61 34 Applications Sublime Text app Contents Sha
  • Vue拖拽组件列表实现动态页面配置

    需求描述 最近在做一个后台系统 xff0c 有一个功能产品需求是页面分为左右两部分 xff0c 通过右边的组件列表来动态配置左边的页面视图 xff0c 并且左边由组件拼装起来的视图 xff0c 可以实现上下拖拽改变顺序 xff0c 也可以删