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

我直接下的最新版
npm install vuedraggable
- 导入
- import Draggable from "vuedraggable";
- 注册
- components: {
- Draggable
- },
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("施工阶段不允许为空!!");
- }
- },
这边比对的是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);
- }
- });
- },
这几个都是插件自带的样式,可以自行更改
- .list-complete-item.sortable-chosen {
- background: #4ab7bd;
- }
-
- .list-complete-item.sortable-ghost {
- background: #30b08f;
- }
-
- .list-complete-enter,
- .list-complete-leave-active {
- opacity: 0;
- }
样式和我录的会有差别哈,这是我特地剪切出来的,不是原版,操作是没问题的,样式需要自行更改。
- <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
- type="primary"
- size="small"
- @click="templateStage()"
- plain
- >模版
- >
- <el-button type="info" size="small" @click="resetStage()" plain
- >重置
- >
- 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>
文章到此结束,希望对你有所帮助~~有问题可以在评论区联系我
-
相关阅读:
2. gin中间件注意事项、路由拆分与注册技巧
Qt实现一个漂亮的等待加载界面
学习OpenCV(蝴蝶书/C++)相关——2.MacOS下使用LLDB调试cpp程序
FreeRTOS两个死机原因(中断调用接口异常)【杂记】
[NPUCTF2020]Mersenne twister
Antd Pro项目接入qiankun微前端
测试9年,面试华为要薪1万,华为员工:公司没这么低工资的岗
线性代数-3
铁路关基保护新规发布!铁路软件供应链安全洞察与治理思路
ClickHouse多级磁盘和冷热数据分离实践
-
原文地址:https://blog.csdn.net/qq_44278289/article/details/132898757
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU