首页 > 其他分享 >一个简单的vuedraggle练习

一个简单的vuedraggle练习

时间:2022-10-18 09:55:38浏览次数:56  
标签:flex name vuedraggle 2px 练习 label item 简单 display

在vue项目中npm i vuedraggable引入

页面中

<template>
    <div class="row">
      <div class="col-1">
        <h3>组件</h3>
        <draggable 
             class="list-group-1" 
             :list="list1" 
             :group="{ name: 'people', pull: 'clone', put: false }"
             :clone="cloneDog"
             @change="log">
          <div
            class="list-group-item1"
            v-for="(element, index) in list1"
            :key="element.name"
          >
            <el-button style="width:80%" @click="add(element)">
                {{ element.name }}
            </el-button>
            
          </div>
        </draggable>
      </div>
  
      <div class="col-2">
        <h3>生成</h3>
        <el-form label-width="80px">
        <draggable class="list-group-2" 
        :list="list2" group="people" @change="log">
       
          <div
            class="list-group-item"
            v-for="(element, index) in list2"
            :key="index"
            @click="chooseItem(element,index)"
          >
          <el-form-item :label="element.label" style="width:80%">   
            <div v-if="element.name=='输入框'">        
                <el-input :placeholder="element.placeholder" v-model="element.data" />      
            </div>
            <div v-if="element.name=='下拉'">
                <el-select v-model="element.data" :placeholder="element.placeholder">
                    <el-option
                    v-for="item in element.options"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value">
                    </el-option>
                </el-select>
            </div>
            <div v-if="element.name=='单选'">
              <el-radio-group v-model="element.data">
                <el-radio v-for="item in element.options"  :label="item.value">{{item.label}}</el-radio>
              </el-radio-group>
            </div>
            <div v-if="element.name=='计数器'">
              <el-input-number v-model="element.data"></el-input-number>
            </div>
            
          </el-form-item> 
          <el-button @click="del(index)"  size="mini" class="el-icon-delete delbtn"></el-button>   
          </div> 
     
        
        </draggable>
      </el-form> 
      </div>
      <div class="col-3">
        <h3>属性</h3>
        <el-form label-width="80px" >
         
          <el-form-item label="标题" v-if="itemList.name">
             <el-input v-model="itemList.label"></el-input>
           </el-form-item>
           <el-form-item label="提示" v-if="itemList.name">
             <el-input v-model="itemList.placeholder"></el-input>
           </el-form-item>
           <el-form-item label="选项" v-if="itemList.name=='单选' ||  itemList.name=='下拉'">
            <div v-for="item in itemList.options">
              label:
              <el-input style="width: 30%;" v-model="item.label"></el-input>
              value:
              <el-input style="width: 40%;" v-model="item.value"></el-input>
              
            </div>
            <el-button @click="addOption(itemList.options)">添加</el-button>
           </el-form-item>
        </el-form>
      </div>
    </div>
  </template>
  <script>
  import draggable from "vuedraggable";
  export default {
    name: "custom-clone",
    display: "custom Clone",
    order: 3,
    components: {
      draggable
    },
    data() {
      return {
        list1: [
          { name: "输入框", id: 1 ,label:'输入框'},
          { name: "下拉", id:2 ,options:[{value:'1',label:'1'}]},
          { name: "单选", id: 3 ,options:[{value:'1',label:'1'}]},
          { name: "计数器", id: 4 ,label:'计数器'},
        ],
        list2: [
         
        ],
        itemList:{
          name:null
        },
        itemIndex:null
      };
    },
    methods: {
      //新增组件
      add(e){
        this.list2.push(e)
        // this.chooseItem(e)
      },
      //删除组件
      del:function(e){
         console.log(e)
         this.list2.splice(e,1)
      },
      //编辑属性
      chooseItem(e,index){
        this.itemList=this.list2[index]
        this.itemIndex=index
      },
      clone: function(el) {
        return {
          name: el.name + " cloned"
        };
      },
      log: function(evt) {
        window.console.log(evt);
      },
      addOption(){
          let item ={
            label:'',
            value:''
          }
          this.list2[this.itemIndex].options.push(item)
      },
      //克隆组件
      cloneDog(e) {
        console.log("e",e)
        console.log(this.list1)
        // return{
        //   name:e.name,
        //   options:e.options,
        //   label:e.label
        // }
        return JSON.parse(JSON.stringify(e))
      }
    }
  };
  </script>
  <style>
   .row{
    display: flex;
   } 
   .col-1{
    width: calc(25% - 2px);
    border: 1px solid black;
    height: calc(100vh - 2px) ;
    overflow: auto;
   }
   .col-2{
    width: calc(50% - 2px);
    border: 1px solid black;
    height: calc(100vh - 2px) ;
    overflow: auto;
   }
   .col-3{
    width: calc(25% - 2px);
    border: 1px solid black;
    height: calc(100vh - 2px) ;
    overflow: auto;
   }
   .list-group-item{
    display: flex;
    min-height: 40px;
    margin-bottom: 20px;
    border: 1px solid black;
   }
   .list-group-item .el-form-item{
    margin-bottom: 0!important;
   }
   .list-group-item1{
    text-align: center;
    align-items: center;
    width: 50%;
    margin-bottom: 10px;
   }
   .list-group-1{
    display: flex;
    flex-wrap: wrap;
   }
   .list-group-2{
    display: flex;
    flex-direction: column;
   }
   .delbtn{
     display: none;
   }
   .delbtn:hover{
    height: 40px;
    display: block;
   }
  </style>

结果

 

标签:flex,name,vuedraggle,2px,练习,label,item,简单,display
From: https://www.cnblogs.com/brxfdgjmy/p/16801599.html

相关文章

  • 【MySQL练习】多表查询练习(二)
    查看代码:数据库和表数据创建CREATEDATABASE`wudang`;USE`wudang`;CREATETABLE`t_dept`(`id`INT(11)NOTNULLAUTO_INCREMENT,`deptName`VARCHAR(30)DEFAU......
  • 一篇文章带你了解网页框架——Vue简单入门
    一篇文章带你了解网页框架——Vue简单入门这篇文章将会介绍我们前端入门级别的框架——Vue的简单使用如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文......
  • react.js+easyui 做一个简单的商品表
    效果图:    importReactfrom'react';import{Form,FormField,Layout,DataList,LayoutPanel,Panel,Label,CheckBox,TextBox,Tabs,TabPanel,DateBox,......
  • 简单的Dos命令
    简单的Dos命令打开CMD的方式常用的Dos命令*所有的符号皆为因为符*#盘符切换E:#查看当前目录下的所有文件dir#切换目录cd目录的名字(E:\java)cd......
  • 拦截器的简单使用
    概念Java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可......
  • Stream流简单使用
    创建流/***创建流*/@TestpublicvoidtestOne(){List<Author>authorList=newArrayList<>();authorList.add(Author.buil......
  • 【汇编】最简单的汇编程序:实现清屏(.asm源码)
    项目环境编译环境:搭建一个nasm2.8的编译环境。镜像文件:采用winhex_18.2刷入编码。虚拟机:采用Bochs-2.4.5。项目软件傻瓜式环境配置。解压文件到D盘能直接使用。程序介绍汇编......
  • 【汇编】封装实现界面绘制,一个简单的记事本(.asm源码)
    项目环境编译环境:搭建一个nasm2.8的编译环境。镜像文件:采用winhex_18.2刷入编码。虚拟机:采用Bochs-2.4.5。项目软件傻瓜式环境配置。解压文件到D盘能直接使用。运行结果程序......
  • dremio HomeFileSystemStoragePlugin简单介绍
    使用过dremio的同学应该了解dremio对于每个用户会支持一个@的导航(小房子标记)参考接口效果restapi请求的,会包含一个containerTypehome的就是HomeFileSystemStorage......
  • 软件测试很简单么?
    有个不是很好笑的笑话,说的是某某公司扫地的大妈都可以做软件测试,某某公司看门的大爷都可以做软件测试。导致现在还有很多人对测试的认知都停留在这个层面上。想当初,个人也......