当前位置:   article > 正文

VUE2/3:element ui table表格的显隐列(若依框架)_elementui表格隐藏列

elementui表格隐藏列

若依框架自带一个组件,封装了关于表格,展示和隐藏表格列的功能;

使用效果就是这样的,在表格上面,三个框,从左到右分别是隐藏上面搜索,刷新列表,和显隐列的功能;

 

 一、下面的代码放到RightToolbar/index.vue下,
  1. <template>
  2. <div class="top-right-btn" :style="style">
  3. <el-row>
  4. <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
  5. <el-button circle icon="Search" @click="toggleSearch()" />
  6. </el-tooltip>
  7. <el-tooltip class="item" effect="dark" content="刷新" placement="top">
  8. <el-button circle icon="Refresh" @click="refresh()" />
  9. </el-tooltip>
  10. <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
  11. <el-button circle icon="Menu" @click="showColumn()" />
  12. </el-tooltip>
  13. </el-row>
  14. <el-dialog :title="title" v-model="open" append-to-body>
  15. <el-transfer
  16. :titles="['显示', '隐藏']"
  17. v-model="value"
  18. :data="columns"
  19. @change="dataChange"
  20. ></el-transfer>
  21. </el-dialog>
  22. </div>
  23. </template>
  24. <script setup>
  25. const props = defineProps({
  26. showSearch: {
  27. type: Boolean,
  28. default: true,
  29. },
  30. columns: {
  31. type: Array,
  32. },
  33. search: {
  34. type: Boolean,
  35. default: true,
  36. },
  37. gutter: {
  38. type: Number,
  39. default: 10,
  40. },
  41. })
  42. const emits = defineEmits(['update:showSearch', 'queryTable']);
  43. // 显隐数据
  44. const value = ref([]);
  45. // 弹出层标题
  46. const title = ref("显示/隐藏");
  47. // 是否显示弹出层
  48. const open = ref(false);
  49. const style = computed(() => {
  50. const ret = {};
  51. if (props.gutter) {
  52. ret.marginRight = `${props.gutter / 2}px`;
  53. }
  54. return ret;
  55. });
  56. // 搜索
  57. function toggleSearch() {
  58. emits("update:showSearch", !props.showSearch);
  59. }
  60. // 刷新
  61. function refresh() {
  62. emits("queryTable");
  63. }
  64. // 右侧列表元素变化
  65. function dataChange(data) {
  66. for (let item in props.columns) {
  67. const key = props.columns[item].key;
  68. props.columns[item].visible = !data.includes(key);
  69. }
  70. }
  71. // 打开显隐列dialog
  72. function showColumn() {
  73. open.value = true;
  74. }
  75. // 显隐列初始默认隐藏列
  76. for (let item in props.columns) {
  77. if (props.columns[item].visible === false) {
  78. value.value.push(parseInt(item));
  79. }
  80. }
  81. </script>
  82. <style lang='scss' scoped>
  83. :deep(.el-transfer__button) {
  84. border-radius: 50%;
  85. display: block;
  86. margin-left: 0px;
  87. }
  88. :deep(.el-transfer__button:first-child) {
  89. margin-bottom: 10px;
  90. }
  91. .my-el-transfer {
  92. text-align: center;
  93. }
  94. </style>
二、main.js文件里封装
  1. // 自定义表格工具组件
  2. import RightToolbar from '@/components/RightToolbar'
  3. app.component('RightToolbar', RightToolbar)

放到main.js全局挂载,使用的时候无须引入

三、具体代码
  1. <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
  2. <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
  3. <el-table-column type="selection" width="50" />
  4. <el-table-column label="用户编号" key="userId" prop="userId" v-if="columns[0].visible" />
  5. <el-table-column label="用户名称" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
  6. <el-table-column label="用户昵称" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
  7. <el-table-column label="部门" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
  8. <el-table-column label="手机号码" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
  9. <el-table-column label="状态" key="status" v-if="columns[5].visible">
  10. </el-table-column>
  11. <el-table-column label="创建时间" prop="createTime" v-if="columns[6].visible" width="160">
  12. </el-table-column>
  13. </el-table>

 下面是一页中必须有的,showSearch要定义,是控制表单是否显示的

columns也是必须有的,把表格的每一项按顺序写,表格里每一项需要控制的要写v-if="columns[0].visible"  0就是key值

  1. const showSearch = ref(true);
  2. // 列显隐信息
  3. const columns = ref([
  4. { key: 0, label: `用户编号`, visible: true },
  5. { key: 1, label: `用户名称`, visible: true },
  6. { key: 2, label: `用户昵称`, visible: true },
  7. { key: 3, label: `部门`, visible: true },
  8. { key: 4, label: `手机号码`, visible: true },
  9. { key: 5, label: `状态`, visible: true },
  10. { key: 6, label: `创建时间`, visible: true }
  11. ]);
  12. /** 查询用户列表 */
  13. function getList() {
  14. loading.value = true;
  15. listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
  16. loading.value = false;
  17. userList.value = res.rows;
  18. total.value = res.total;
  19. });
  20. };
四、效果展示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/297232
推荐阅读