vue2使用vuedraggable实现拖拽删除添加重置功能

news2024/11/17 15:30:04

需求:要输入xx阶段,之后输入后显示但是要可以自己手动排序和删除,以免写错了,并且做了判断,如果重复输入的话会提示,不会让他添加,点击重置功能后一键清空所有输入


1.效果

2.下载插件

我直接下的最新版

npm install vuedraggable

3.页面导入注册

导入
import Draggable from "vuedraggable";
注册
  components: {
    Draggable
  },

4.讲解部分代码(完整代码最下面)

4.1添加内容

some方法:相当于||运算符,只要在数组中有一个是符合判断条件的那么返回的就为ture

    addStage() {
      if (this.formLabelAlign.stage) {
        // 使用some方法遍历数组,如果存在相同值则返回true,否则返回false
        const isDuplicate = this.listStage.some((item) => {
          return item.name === this.formLabelAlign.stage;
        });
        if (isDuplicate) {
          // 如果存在相同值,则提示错误并返回false
          this.$message.error("输入重复,请重新输入!");
          return false;
        } else {
          // 否则,将新元素添加到数组中
          this.listStage.push({ name: this.formLabelAlign.stage});
        }
      } else {
        this.$message.error("施工阶段不允许为空!!");
      }
    },

4.2单个删除

这边比对的是index索引值,只要索引值相同那么就查到元素在数组中的索引值,之后再删除

indexOf:方法返回的是要查找的元素在数组中的索引位置,如果没找到则返回-1。

splice:方法,第一个是要删除的索引位置,第二个是从该位置删几个元素

 deleteEle(ind) {
      this.listStage.forEach((item,index) => {
        if(ind === index){
          const index = this.listStage.indexOf(item);
          this.listStage.splice(index, 1);
        }
      });
    },

 4.3样式

这几个都是插件自带的样式,可以自行更改

    .list-complete-item.sortable-chosen {
      background: #4ab7bd;
    }

    .list-complete-item.sortable-ghost {
      background: #30b08f;
    }

    .list-complete-enter,
    .list-complete-leave-active {
      opacity: 0;
    }

5.完整代码

样式和我录的会有差别哈,这是我特地剪切出来的,不是原版,操作是没问题的,样式需要自行更改。

<template>
    <div class="content-box">
        <div class="container">
    <el-button @click="openDialog()">打开弹窗</el-button>
    <el-dialog
      title="添加类型"
      :visible.sync="addProjectTypeDiglog"
      width="30%"
    >
      <el-form label-position="left" label-width="80px" :model="formLabelAlign">
        <el-form-item label="类型">
          <el-input v-model="formLabelAlign.name"></el-input>
        </el-form-item>
        <el-form-item label="阶段">
          <div class="from_item">
            <el-input
              v-model="formLabelAlign.stage"
              placeholder="请输入阶段"
            ></el-input>
            <el-button type="success" @click="addStage()" size="small" plain
              >添加</el-button
            >
            <el-button
              type="primary"
              size="small"
              @click="templateStage()"
              plain
              >模版</el-button
            >
            <el-button type="info" size="small" @click="resetStage()" plain
              >重置</el-button
            >
          </div>
        </el-form-item>
      </el-form>
      <draggable :list="listStage" class="list-group" ghost-class="ghost">
        <div
          v-for="(element, index) in listStage"
          :key="index"
          class="list-complete-item"
        >
          <div class="list-complete-item-handle">
            {{ element.name }}
          </div>
          <div style="position: absolute; right: 0px">
            <span
              style="float: right; margin-top: -25px; margin-right: 15px"
              @click="deleteEle(index)"
            >
              <i style="color: #ff4949" class="el-icon-delete" />
            </span>
          </div>
        </div>
      </draggable>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addProjectTypeDiglog = false">取 消</el-button>
        <el-button type="primary" @click="sureStage()">确 定</el-button>
      </span>
    </el-dialog>
  </div>
  </div>
</template>

<script>
import Draggable from "vuedraggable";
export default {
  components: {
    Draggable
  },
  data() {
    return {
      addProjectTypeDiglog: false,//添加工程类型的弹窗
      templateDialog:false,//模版弹窗
      formLabelAlign: {
        name: "",
        stage: "",
        type: "",
      },
      listStage: [{ name: "John",id:0 }, { name: "Joao",id:1 }, { name: "Jean",id:2 }],
      index:2
    };
  },
  mounted() {

  },
  methods: {
    openDialog(){
      this.addProjectTypeDiglog=true;
    },
    addStage() {
      if (this.formLabelAlign.stage) {
        // 使用some方法遍历数组,如果存在相同值则返回true,否则返回false
        const isDuplicate = this.listStage.some((item) => {
          return item.name === this.formLabelAlign.stage;
        });
        if (isDuplicate) {
          // 如果存在相同值,则提示错误并返回false
          this.$message.error("输入重复,请重新输入!");
          return false;
        } else {
          // 否则,将新元素添加到数组中
          this.listStage.push({ name: this.formLabelAlign.stage});
        }
      } else {
        this.$message.error("施工阶段不允许为空!!");
      }
    },
    deleteEle(ind) {
      this.listStage.forEach((item,index) => {
        if(ind === index){
          const index = this.listStage.indexOf(item);
          this.listStage.splice(index, 1);
        }
      });
    },
    resetStage() {
      this.listStage = [];
    },
  }
};
</script>

<style lang="scss" scoped>
  // 拖拽的样式设置
  .list-group {
    .list-complete-item {
      // width: 80%;
      cursor: pointer;
      position: relative;
      font-size: 16px;
      padding: 10px 12px;
      margin: 0 0 4px 80px;
      border: 1px solid #bfcbd9;
      transition: all 1s;
    }

    .list-complete-item-handle {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      margin-right: 50px;
    }
    .list-complete-item.sortable-chosen {
      background: #4ab7bd;
    }

    .list-complete-item.sortable-ghost {
      background: #30b08f;
    }

    .list-complete-enter,
    .list-complete-leave-active {
      opacity: 0;
    }
  }
</style>

文章到此结束,希望对你有所帮助~~有问题可以在评论区联系我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】自动化构建工具:make/Makefile

​&#x1f47b;内容专栏&#xff1a; Linux操作系统基础 &#x1f428;本文概括&#xff1a; 工具使用的背景、理解make/makefile工具、探索工作原理(文件修改时间的对比)、.PHONY伪目标、特性等。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1…

18.3 【Linux】登录文件的轮替(logrotate)

18.3.1 logrotate 的配置文件 logrotate 主要是针对登录文件来进行轮替的动作&#xff0c;他必须要记载“ 在什么状态下才将登录文件进行轮替”的设置。logrotate 这个程序的参数配置文件在&#xff1a; /etc/logrotate.conf /etc/logrotate.d/ logrotate.conf 才是主要的参…

无涯教程-JavaScript - ADDRESS函数

描述 给定指定的行号和列号,您可以使用ADDRESS函数获取工作表中单元格的地址。 如,ADDRESS(2,3)返回$C $2。再举一个Example,ADDRESS(77,300)返回$KN $77。您可以使用其他函数(如ROW和COLUMN函数)为ADDRESS函数提供行号和列号参数。 语法 ADDRESS (row_num, column_num, [a…

跨境电商和TikTok广告:突破地理界限的机会

随着全球数字化的快速发展&#xff0c;跨境电商已经成为了现代商业的关键驱动力。同时&#xff0c;TikTok作为一款全球范围内广受欢迎的社交媒体平台&#xff0c;也在商业领域崭露头角。 本文将探讨跨境电商如何与TikTok广告相结合&#xff0c;为企业提供突破地理界限的机会。…

苹果宣布9月26日发布全新macOS Sonoma系统 新增不少实用功能

苹果公司在召开的特别活动中&#xff0c;宣布将于 9 月 26 日正式发布 macOS Sonoma&#xff0c;用户可以打开“设置”->“通用”->“软件更新”路径进行更新&#xff0c;新版本主要增强空间函数、为 AirPods 测试自适应音频、个性化音量和对话感知等新功能。 macOS Sono…

1.0零基础尝试DCM通讯(c-store)

前言 本项目是对医院放疗及相关设备的互通互联。对dcm文件及数据协议是本项目的基础。 今天在项目组成员支持下,对dcm通讯进行了初步的尝试,有人之路,这个过程可以说是非常愉快,于是乎准备将这个愉快的过程记录,方便自己查阅和后来人。 c-store 本次的安装和测试使用的…

乔哈里视窗:助力项目团队高效沟通

项目研发通常涉及多个团队成员、不同的职能部门和利益相关者&#xff0c;如果干系人间缺乏沟通&#xff0c;缺乏对项目目标、需求的共识和理解&#xff0c;团队成员间容易产生隔阂和矛盾&#xff0c;无法有效协调和管理&#xff0c;导致项目无法按时交付、质量下降、成本增加等…

视频怎么压缩?把视频压缩的小一点这样做

视频压缩在我们的生活和工作中有着广泛的应用需求&#xff0c;是一种减少视频文件大小的方法&#xff0c;可以给我们带来以下几个方面的作用&#xff1a; 1、减少存储空间占用&#xff1a;视频压缩可以显著减少视频的大小&#xff0c;从而腾出更多的存储空间&#xff0c;对于手…

一套精简的springboot后台管理系统

概述 本后台管理系统&#xff0c;基于SpringBoot2.0 Spring Data Jpa Thymeleaf Shiro 开发的后台管理系统&#xff0c;采用分模块的方式便于开发和维护&#xff0c;拓展性高&#xff0c;可作为您后台开发的基础框架 详细 运行截图&#xff1a; 项目结构&#xff1a; 详细…

EndNote21 | 杂志输出样式(参考文献格式模板)下载及安装

EndNote | 杂志输出样式下载及安装 一、参考文献格式下载二、参考文献格式安装 在《 Endnote: 文献条目的添加编辑引用文献全称与缩写的互相转换》文章中&#xff0c;介绍了如何手动编辑杂志输出样式&#xff0c;本文主要介绍如何从官网快速下载并安装所需杂志输出样式。 一、…

程序单实例运行的一种实现

技术背景知识 来自《Windows核心编程》 创建自定义段 Section 来自《Windows核心编程》 举例&#xff08;获取当前总共运行的实例数&#xff09; 创建自定义段并设置属性 #include "stdafx.h" #include "MFCApplication1.h" #include "MFC…

恒运资本:三大利好来袭,人民币直线拉升!股市能否大反攻?

早盘&#xff0c;又有突发&#xff01; 9月15日&#xff0c;远洋集团在港交所公告&#xff0c;鉴于其流动性严重状况&#xff0c;经集团审慎考虑&#xff0c;将暂停其一切境外债款&#xff08;包含下述境外美元证券&#xff09;项下的付款&#xff0c;直至全体重组及╱或延期解…

JDK API文档地址(中文和英文)

JDK1.6 JDK 1.6 中文手册 JDK1.8 Java 8 中文版 - 在线API手册 - 码工具 Java 官方文档 |官方教程|Java 官方文档 API中文手册|Java 官方文档参考文档_w3cschool 网上还有很多百度网盘中也有 JDK17 https://doc.qzxdp.cn/jdk/17/zh/api/index.html 英文文档 所有版本 …

uniapp微信小程序地图实现周边

官方说明&#xff1a;小程序JavascriptSDK使用指南 - 微信小程序解决方案 | 腾讯位置服务https://lbs.qq.com/product/miniapp/jssdk/ 先申请腾讯地图的开发者密钥&#xff0c;申请地址&#xff1a;腾讯位置服务 - 立足生态&#xff0c;连接未来 申请密钥时&#xff0c;需要勾…

【MySQL基础|第三篇】--- 详谈SQL中的DQL语句

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言 DQL&…

浙江工商大学MBA项目哪些人在报考?职务、就业、薪资……

9月下旬到10月下旬是每一年全国研究生网上报名的时间&#xff0c;这段时间内很多MBA考生要确定自己最终一志愿报考的学校和专业&#xff0c;在浙江省内&#xff0c;如果不想报考浙江大学的话&#xff0c;那么其余还有8个MBA项目可以选择。本期杭州达立易考教育为大家整理了浙工…

使用 kind 搭建 Kubernetes学习环境

什么是 kind &#xff1f; kind &#xff08; Kubernetes in Docker &#xff09; 让 你 能 够 在 本 地 计 算 机 上 运 行 Kubernetes 。 使 用 这 个 工 具 需 要 你 安 装 Docker 或 者 Podman 。 kind 将 Kubernetes 所需要的所有组件&#xff0c; 全部部署在一个 Docker …

微信小程序 非机动车车辆充电维修管理系统

本课题要求实现一套非机动车车辆管理系统&#xff0c;系统主要包括&#xff08;管理员服务端和学生微信端、车辆管理员微信端、辅导员服务端、车辆管理员服务端、辅导员微信端&#xff09;六个模块功能。 设计并实现了非机动车车辆管理系统。系统选用java语言&#xff0c;应用S…

【Android取证篇】华为设备跳出“允许USB调试“界面方法的不同方法

【Android取证篇】华为设备跳出"允许USB调试"界面方法的不同方法 华为设备在鸿蒙OS3系统之后&#xff0c;部分设备启用"允许USB调试"方式会有所变化&#xff0c;再次做个记录—【蘇小沐】 1.实验环境 系统版本Windows 11 专业工作站版22H2&#xff08;2…

【送书活动】朋友圈大佬都去读研了,这份备考书单我码住了

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…