vue + element-ui 穿梭框+上下移动、置顶置底功能

这篇具有很好参考价值的文章主要介绍了vue + element-ui 穿梭框+上下移动、置顶置底功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

预览效果: 

vue + element-ui 穿梭框+上下移动、置顶置底功能

代码 :文章来源地址https://www.toymoban.com/news/detail-506519.html

<template>
    <el-dialog
        title="字段显示与排序设置(提示:位置越靠上的越靠近列表左侧)"
        :visible.sync="dialogShow"
        width="850px"
    >
        <div class="transform-box">
            <el-transfer
                v-model="chooseColumn"
                filterable
                :props="{
                    key: 'key',
                    label: 'label'
                }"
                :titles="['隐藏字段', '显示字段']"
                :format="{
                    noChecked: '${total}',
                    hasChecked: '${checked}/${total}'
                }"
                target-order="push"
                :data="optionsList"
                @right-check-change="choose"
            >
                <el-button
                    v-for="btn in btnList"
                    :key="btn.key"
                    class="transer-footer"
                    slot="right-footer"
                    size="mini"
                    @click="handleChange(btn.key)"
                    >{{ btn.label }}</el-button
                >
            </el-transfer>
        </div>
        <span slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submit" size="mini"
                >确 定</el-button
            >
        </span>
    </el-dialog>
</template>
<script>
import _ from "lodash";

export default {
    props: {
        initList: {
            type: Array,
            default: () => []
        }
    },
    watch: {
        initList(val) {
            this.getList(val);
        },
        dialogShow(val) {
            val && this.getList();
        }
    },
    data() {
        return {
            optionsList: [],
            chooseColumn: [],
            chooseItem: [],
            dialogShow: false,
            btnList: [
                {
                    label: "上移",
                    key: "up"
                },
                {
                    label: "下移",
                    key: "down"
                },
                {
                    label: "置顶",
                    key: "top"
                },
                {
                    label: "置底",
                    key: "bottom"
                }
            ]
        };
    },
    methods: {
        getList(list) {
            this.optionsList = [];
            const data = [];
            const dataList = list || this.initList || [];
            _.forEach(dataList, (item, index) => {
                data.push(_.assign({}, { key: index }, item));
            });
            this.optionsList = data;
        },
        isShowDialog() {
            this.dialogShow = !this.dialogShow;
        },
        //右侧选中
        choose(value) {
            this.chooseItem = value;
        },
        // 位移
        handleChange(type) {
            let index = 0;
            if (
                _.isArray(this.chooseItem) &&
                _.isArray(this.chooseColumn) &&
                this.chooseItem.length == 1
            ) {
                _.find(this.chooseColumn, (val, idx) => {
                    if (val == this.chooseItem) {
                        index = idx;
                    }
                });
                let isCanChange = true;
                if ((type === "top" || type === "up") && index == 0) {
                    this.$message("没有上移的空间了");
                    isCanChange = false;
                } else if (
                    (type === "bottom" || type === "down") &&
                    index == this.chooseColumn.length - 1
                ) {
                    this.$message("没有下移的空间了");
                    isCanChange = false;
                }
                if (isCanChange) {
                    const changeIndex = type === "up" ? index - 1 : index;
                    let changeItem = _.cloneDeep(
                        this.chooseColumn[changeIndex]
                    );
                    this.chooseColumn.splice(changeIndex, 1);
                    switch (type) {
                        case "top":
                            this.chooseColumn.splice(0, 0, changeItem);
                            break;
                        case "bottom":
                            this.chooseColumn.splice(
                                this.chooseColumn.length,
                                0,
                                changeItem
                            );
                            break;
                        case "up":
                            this.chooseColumn.splice(index, 0, changeItem);
                            break;
                        case "down":
                            this.chooseColumn.splice(index + 1, 0, changeItem);
                            break;
                    }
                }
            } else {
                this.$message.error("只能选择一条数据进行上下移动");
                return;
            }
        },
        submit() {
            console.log(this.chooseColumn);
        }
    }
};
</script>

<style>
.el-transfer-panel {
    width: 300px;
    padding-bottom: 50px;
}
</style>

到了这里,关于vue + element-ui 穿梭框+上下移动、置顶置底功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue+element ui表格穿梭框

    需求: 1.数据移动:左侧数据可移入右侧,右侧数据可移除回到左侧,且移回后顺序不改变 2.可进行模糊查询 (初始数据为请求后端接口获取,数据移动、模糊查询均为前端实现)

    2024年02月11日
    浏览(90)
  • vue+element ui 完成 树形数据穿梭框

    element ui中的穿梭框只能实现平铺数据的穿梭,这次的需求是要树形数据穿梭,所以写的是tree组件自己组合的穿梭框

    2024年02月15日
    浏览(31)
  • element-ui 移动端适配修改

    页面布局组件 通过col和row实现对页面进行24栏栅格布局,但在移动端,栅格会出现过小的现象,因此限制span和gutter以及flex等属性在pc端有效。 分栏偏移会使得移动端布局超出屏幕,因此也限制了offset以及响应式布局的属性等在pc端有效。 form表单组件 form 表单组件默认的lab

    2023年04月17日
    浏览(32)
  • 随手记:使用sortable.js 实现element-ui el-table 表格上下拖拽排序

    需求场景: 表格可以实现上下拖拽row实现新排序 首先,安装sortable.js  引入表格排  全局挂在组件 使用页面引入 使用sortable.js表格一定要有唯一的row-key,一般绑定的是id,不然拖拽会不生效 data声明 sortableContainer: null,为的是后面如果有需要可以做销毁操作   因为我这里是表

    2024年02月22日
    浏览(37)
  • element-ui的el-select在ios移动端的兼容性适配

    今天的我在做一个 h5 的项目,发现 element-plus (我使用的版本是 2.2.19 )里的 el-select 在 ios 上需要点击2次才能打开下拉框。经过很久的研究和查阅无数资料(包括百度、谷歌搜索到的),都没有解决这个问题。最后我探究里面的根本原因,最后才自己找到解决方案, 可以仔

    2024年01月18日
    浏览(31)
  • Vue与Element-UI

    Vue.js是一套用于构建用户界面的 渐进式 框架。 渐进式 是指,它既可以作为一个库使用,又可以作为一个框架使用 ,两个之间自如选择。库是不具有侵略性,在原有项目可以引入作为第三方依赖使用;框架是具有侵入性的,整个项目是用vue构建的。 前端技术栈的发展主要经

    2024年02月16日
    浏览(32)
  • 基于element-ui el-dialog组件封装,可缩放+可移动的弹窗组件

    源码下载 改组件继承el-dialog组件百分之95属性,可直接对el-dialog进行替换。在项目中我的命名为: vue代码 :搞成组件,路径随意,推荐统一放在组件目录下 拖动及缩放操作js代码: 将skdialog.js注册为指令: 目录: 指令使用:(v-指令名称(SkDialogDrag)) 效果图: 注:吃水

    2024年02月03日
    浏览(44)
  • vue element-ui悬浮显示

    1.输入框 这样添加的时候calculationFormulaName默认添加的undefined 会报错 需要更改为 2.列表显示

    2024年02月08日
    浏览(35)
  • vue element-ui 常用事件方法

    已安装 elementUI 并正确引入 参数 说明 :action 是执行上传动作的 后台接口 ,本文置空采用 http-request 取而代之拦截请求,进行文件上传 :multiple=\\\"true\\\" 设置 是否可以同时选中多个文件上传 ,这个也是input type=\\\'file\\\'的属性 :limit=\\\"1\\\" 上传文件数量,设置 最多可以上传的文件数量 ,

    2023年04月14日
    浏览(40)
  • Element-ui配合vue上传图片

    这里为大家介绍饿了吗ui配合vue封装一个图片上传的组件  首先大家先看一个饿了吗ui文档的各个钩子函数的介绍! on-preview这个属性我们一般用来预览图片时使用 on-remove这个属性时文件被删除时执行 一般我们在这里面进行数组的筛选 让它保证为最新数组 on-change当文件被选择

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包