vue+iview 动态调整Table的列顺序
需求:因table列太多,且每个部门关注的信息不一样,拖来拖去不方便观看,客户想让Table列可以拖动,且可以保存顺序。
但是搞动态拖动太难了,我不会,于是改为操作columns数据
思路:
<Table :columns="columns" :data="data1"></Table>
Table里的columns是提前在data里写好的,可以把columns对象转成json字符串存在localStorage或者数据库里,vue开始渲染页面前修改columns的值(vue生命周期),然后再进行渲染,
客户在调整完毕后,重新渲染一下Table组件
我这里是另外写一个弹窗页modal,操作主页table的列顺序
这部分代码是主页代码,只展示了table部分,弹窗页代码在下面
orderOK方法是弹窗页完成后执行,逻辑是给columns赋值,然后改变table的key,使table重新渲染
beforeMount方法是vue生命周期,具体我也忘了,大概应该是vue编译代码生成html之前运行,读取localStorage,没有就存一个,有就用有的。
这里我只允许调整第二列以后的顺序,所以看到 i=2 不要疑惑,业务需要
data () {
return {
tabKey: 0,
tableData: [],
columns:[
{title: 'Name', key: 'name'},
{title: 'Age',key: 'age'}
]
}
}
<Table :key="tabKey" :data="tableData" :columns="columns"> </Table>
methods: {
orderOk () {
let col = JSON.parse(window.localStorage.getItem("VoyageCol"))
for (var i = 2; i < col.length; i++) {
this.columns[i] = col[i]
}
this.tabKey += 1
this.$Message.success('调整成功')
},
beforeMount () {
if (window.localStorage.getItem("VoyageCol") == null) {
window.localStorage.setItem("VoyageCol", JSON.stringify(this.columns));
} else {
let col = JSON.parse(window.localStorage.getItem("VoyageCol"))
for (var i = 2; i < col.length; i++) {//只调整第二列以后的列
this.columns[i] = col[i]
}
}
}
}
新增一个button按钮,点击出现一个弹窗modal,里面一个table,把columns传进去当做table的data
这部分代码是弹窗页代码,主要是读取localStorage给他的table当数据进行操作,排序完以后点确定再存进去,然后调用主页orderOK方法刷新主页table
//本来想自己做按钮实现上移下移,发现iview框架的Table自带draggable属性,可以实现行的上下拖动,省了无数代码
<Modal v-model="modal" title="调整列名顺序" @on-ok="orderOk">
<Table draggable :columns="columns" :data="orderData" height="460" @on-drag-drop="onDragDrop"></Table>
</Modal>
methods: {
orderOk () {
window.localStorage.setItem("VoyageCol", JSON.stringify(this.orderData));
this.$emit('orderOk')
},
onDragDrop (first, end) {
//转成int型,方便后续使用
first = parseInt(first)
end = parseInt(end)
if (first <= 1 || end <= 1) {
this.$Message.warning('前两列禁止移动')
} else {
let tmp = this.orderData[first]
if (first < end) {
for (var i = first + 1; i <= end; i++) {
this.orderData.splice(i - 1, 1, this.orderData[i])
}
this.orderData.splice(end, 1, tmp)
}
if (first > end) {
for (var i = first; i > end; i--) {
this.orderData.splice(i, 1, this.orderData[i - 1])
}
this.orderData.splice(end, 1, tmp)
}
}
}
},
mounted () {
this.orderData = JSON.parse(window.localStorage.getItem("VoyageCol"))
}
}
样式如下:

vue+iview 动态调整Table的列顺序的更多相关文章
- 调整DataTable的列顺序
地址:https://www.cnblogs.com/gaocong/p/6490159.html 标题:DataTable 修改列名 删除列 调整列顺序 DataTable myDt =dt; // ...
- vue+iview中的table表格导出excel表格
一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 ...
- vue+iview实现一行平均五列布局
iview 的栅格布局是以 html代码部分: <Row :gutter="20"> <Col style="float: left;width: 20 ...
- vue中获取滚动table的可视页面宽度,调整表头与列对齐(每列宽度不都相同)
mounted() { // 在mounted中监听表格scroll事件 this.$refs.scrollTable.addEventListener( 'scroll',(event) => ...
- Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...
- 使用element-ui 组件动态合并table的行/列(第二次修改)
这是第二次修改,在通过调用后台接口返回来的时候,发现了代码中的问题:现在将博客中错误的地方改过来,添加备注 文章需求:动态实现table表格中行/列的自动合并 使用框架及UI类库:Vue+Elemen ...
- DataTable 删除列 调整列顺序 修改列标题名称
DataTable dt = new DataTable(); //删除列 dt.Columns.Remove("Sex"); dt.Columns.Remove("Ag ...
- 转--DataTable 修改列名 删除列 调整列顺序
DataTable myDt =dt; //删除列 myDt.Columns.Remove("minArea"); myDt.Columns.Remove("maxAre ...
- DataTable 修改列名 删除列 调整列顺序
DataTable myDt =dt;//删除列myDt.Columns.Remove("minArea");myDt.Columns.Remove("maxArea&q ...
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...
随机推荐
- Nacos与OpenFeign开发
目录 1.前言 2.生产者 3.消费者 4.扩展 1.前言 我的话是微服务B调用微服务A的controller层 2.生产者 微服务A请求接口如下: @GetMapping("/listUn ...
- 2.C/C++的const
1.C语言的const修饰的变量都有空间 2.C语言的const修饰的全局变量具有外部链接属性 3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作) ...
- CSPS2019 括号树 题解
链的部分分 我们设f[i]表示以i结尾的括号序列有多少个,那么i的实际答案就是f的前缀和 显然,所有左括号和不能匹配的右括号的f均为0 对于每一个能匹配的右括号i,我们找到与之匹配的左括号p,以i结尾 ...
- python爬取今日的bing壁纸
#!/usr/bin/python #你要的文件夹是 E://pics// ps:没有的话帮你建一个 import requests import os from datetime import da ...
- 分析document文档中script标签获取抖音无水印视频
思路分析 使用 playwright 模拟浏览器打开分享链接 获取 播放页面 html 信息 解析 播放页面的 video标签,video标签的src属性就是视频的地址 这种模式会触发抖音的风控机制 ...
- idea创建Spring项目时选择Maven还是Spring initializr?
今天在使用idea创建Spring项目时不知道选择Maven还是Spring initializr 接着都实验了一下,其实本质是一样的,使用"spring initializr"创 ...
- QML和QT
推荐一些学习qml教程 Qt官方的QML教程: https://doc.qt.io/qt-5/qtqml-index.html,这是一个由Qt官方提供的完整的QML教程,包含了所有基本知识和高级语法. ...
- VideoPipe可视化视频结构化框架更新总结(2023-3-30)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1696 ...
- pandas之样本操作
随机抽样,是统计学中常用的一种方法,它可以帮助我们从大量的数据中快速地构建出一组数据分析模型.在 Pandas 中,如果想要对数据集进行随机抽样,需要使用 sample() 函数.sample() 函 ...
- FTP FileZilla 425 Can't open data connection for transfer of "/" 错误: 读取目录列表失败
如图所示: 在谷歌百度搜了很多资料都没有解决,主动被动模式端口入站规则什么能设置的都设置了结果还是不行,尝试换了一个软件用了FTP Rush就直接可以连上了. 具体原因有空再查找吧,目前问题算是解决了 ...