element的表格index自定义_element 实现自定义表格列

在我们开发PC端的项目使用表单时,尤其是crm系统,应该经常会遇到这样的需求, 用户需要根据设置来自定义显示列。 查了element的官方文档, 并没有此类组件, 所以手动封装了一个简单的组件, 希望能在大家开发此类需求时能够有所帮助。

效果图

具体效果图如下:

自定义显示列 (可实现拖拽进行排序,点击选中,再次点击取消选中)

81bfbcdc98778a13e579ae38cd00973e.png

按照用户已设置好的字段排序/显示/隐藏每一列

1349300e32e466f9a8b8ed810b4a467e.png

setTable组件

首先实现拖拽排序的话我们需要借助一个插件:

npm install vuedraggable -S

具体的组件代码如下, 代码内已写有详细的注释,在这里就不过多赘述了。。

setTable.vue

拖动区块调整显示顺序

{ {menu.name}}

选择显示列

class="item"

:class="{active:menu.active}"

v-for="menu of fields"

:key="menu.field"

@click="onSelect(menu)"

>{ {menu.name}}

取 消

确 定

import draggable from "vuedraggable";

import { getFields, setFields, getFieldControl } from "@/api/user";

export default {

name: "setTable",

inject: ["reload"],

props: {

types: String,

},

components: {

draggable,

},

data() {

return {

dialogVisible: false,

fields: [],//全部菜单

selected: [],//已选中菜单

};

},

watch: {

selected: {

handler(oldVal, newVal) {

if (this.fields.length === 0) {

return;

}

newVal.map((i) => {

this.fields.map((j) => {

if (i.field === j.field) {

// 如果已选中数组内已有相同字段, 则active为true。active主要用来控制全部菜单选中/未选中的样式

j.active = true;

}

});

});

},

},

},

mounted() {

//为了防止火狐浏览器拖拽的时候以新标签打开

document.body.ondrop = function (event) {

event.preventDefault();

event.stopPropagation();

};

},

methods: {

async getData() {

// 获取全部菜单数据

const { data: fields } = await getFields({

types: this.ty

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值