vue3 列表页开发【选择展示列】功能

目录

背景描述:

开发流程:

详细开发流程:

总结:


背景描述:

这个功能是基于之前写的   封装列表页  的功能继续写的,加了一个选择展示列的功能,可以随时控制表格里展示那些列的数据,如图,大概样式是这样:


开发流程:

基本上和封装列表页的流程相似,这里不做多余描述,只是需要从父组件里传递tableColumn,也可以在本组件定义

tableColumn除了控制表格的column,还有就是【选择列】的功能的数据从这里来,这里可以设置哪些需要显示与隐藏,如下:

const tableColumn = ref([
  {
    column_id: 'op_name',
    column_name: '操作人',
    default_display: true,
    sortable: true,
    minWidth: 100
  },
  {
    column_id: 'op_roles',
    column_name: '角色',
    default_display: true,
    sortable: true,
    minWidth: 150
  },
 //....
  {
    column_id: 'create_at',
    column_name: '名称12',
    default_display: true,
    sortable: true,
    minWidth: 170
  },
  {
    column_id: 'update_at',
    column_name: '名称13',
    default_display: false,
    sortable: true,
    minWidth: 170
  }
])

详细开发流程:

提示:这里描述项目中遇到的问题:

1.选择展示列

<el-col :span="12">
          <el-popover placement="bottom" trigger="click" :width="300">
            <template #reference>
              <el-button class="right-button" type="default">
                <el-icon><Filter /></el-icon>
              </el-button>
            </template>

            <span style="margin: 0 10px 0 0; font-size: 14px">选择展示列</span>
            <el-select v-model="selectedColumns" multiple collapse-tags :teleported="false" @change="selectColumns">
              <el-option
                v-for="(item, index) in tableCol"
                :key="item.column_id"
                :disabled="index == 0"
                :label="item.column_name"
                :value="item.column_id"
              ></el-option>
            </el-select>
          </el-popover>
        </el-col>

这里的tableCol是从父组件传的tableColumn, tableCol.value = props.tableColumn

2.已选择的展示列怎么控制表格的列显隐

// 已选的展示列
const selectedColumns = ref([])
//选择展示列
const selectColumns = () => {
  showTableCol.value = []
  let arr = []
  if (selectedColumns.value.length && selectedColumns.value.length != 0) {
    selectedColumns.value.forEach((element) => {
      tableCol.value.forEach((item, index) => {
        if (index == 0) {
          item.default_display = true
        }
        item.default_display = false
        if (element == item.column_id || index == 0) {  //比如至少要选择第一列,不能一列都不显示
          arr.push(index)
        }
      })
    })
    arr = [...new Set(arr)]
    arr.forEach((element) => {
      tableCol.value[element].default_display = true
    })

    let dataTable = tableCol.value.filter((item, index) => {
      return item.default_display
    })
    showTableCol.value = dataTable
  } else {
    let dataTable = []
    dataTable = tableCol.value.filter((item) => {
      return item.default_display
    })
    dataTable.forEach((item) => {
      selectedColumns.value.push(item.column_id)
    })
    showTableCol.value = dataTable
  }
}

3. 表格的列显示

 <el-table
        v-loading="loading"
        :data="tableData"
        class="table-small-custom"
        height="calc(100vh - 240px)"
        stripe
        @sort-change="changeTableSort"
      >
        <el-table-column type="index" width="70" label="序号">
          <template #default="scope">
            <span v-text="getIndex(scope.$index)"></span>
          </template>
        </el-table-column>
        <el-table-column
          v-for="(col, index) in showTableCol"
          :key="index"
          :prop="col.column_id"
          :label="col.column_name"
          :min-width="col.minWidth"
          :sortable="col.sortable"
          :is-show-overflow-tooltip="true"
        />
      </el-table>

这里表格的渲染是通过v-for  showTableCol ,主要就是这个。

over


总结:

目前我经常是通过这个方式写【选择展示列】功能,过滤那部分,没怎么考虑最优解,反正数据也不多,直接这样写了,如果有更合适的方式,欢迎分享~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML百科展示面是一个用于展示HTML(超文本标记语言)相关知识和信息的网。它是为了方便用户了解和学习HTML而创建的一个在线资源。 该展示面的设计和布局应该简洁明了,让用户能够轻松找到所需的信息。面的导航菜单应该包含HTML的基本概念、标签、属性、语法等主要内容。这些菜单可以是一个列表或者是一个侧边栏,以便用户可以点击并跳转到相应的面。 在每个面上,相关信息应该以易于理解和使用的方式展示。可以使用适当的标题、子标题、段落和图表等来组织和呈现内容。对于每个HTML标签和属性,应该提供详细的解释和示例,让用户能够更好地理解其作用和用法。 为了增加互动性和更好地学习体验,可以添加一些实例和练习题供用户练习和测试。这些示例可以是一些简单的HTML代码片段,用户可以自行输入并查看效果。 此外,面应该易于浏览和搜索。可以提供一个搜索框,让用户可以根据关键词快速找到想要的信息。还可以在每个面的底部添加导航链接,使用户可以方便地跳转到其他相关面。 最后,为了确保面内容的准确性和更新性,应该经常审查和更新面内容。可以在面上添加一个反馈按钮,让用户可以反馈错误或提供更好的建议。 总之,HTML百科展示面应该是一个易于使用、美观、内容丰富并提供良好学习体验的面,让用户能够快速了解和学习HTML知识。 ### 回答2: HTML百科展示面是一个用于展示HTML相关知识的网。在这个面中,可以包含HTML语法、标签、属性和常用的代码示例等内容。 面的布局可以采用传统的网布局,包括标题、导航栏和内容区域。标题可以简洁明了地说明这个面是关于HTML的百科展示。导航栏可以包含HTML相关的主题,例如HTML基础、标签、属性和表单等,方便用户浏览和查找感兴趣的内容。 在面的内容区域,可以逐步展开HTML知识点。可以首先介绍HTML的基本概念和作用,接着详细讲解HTML标签的用法和常见属性及其取值。针对常见的标签,可以给出实际的代码示例,展示标签的具体用法和效果。同时,还可以介绍常用的CSS样式,如颜色、字体、边框等,以及如何在HTML中使用它们。 此外,可以在面中插入交互元素,如按钮、链接和折叠面板等,用于用户自主选择感兴趣的知识点进行学习。还可以提供一个搜索框,方便用户根据关键词查找相关的HTML知识。 最后,为了增加面的可读性和吸引力,可以添加一些配图,用图文并茂的方式展示某些HTML标签的用法和效果。 总之,HTML百科展示面应该具备简洁明了的布局、详细全面的HTML知识点,以及交互和可视化的展示手段,帮助用户更好地理解和学习HTML。 ### 回答3: HTML 百科展示面是一个用来展示与HTML相关知识的网。作为一种标记语言,HTML (Hypertext Markup Language) 用于创建网结构和内容。这个展示面的目的是向用户提供关于HTML的详细信息,包括标签、属性、元素以及常用的编码技巧和最佳实践。 首先,该面应该包含一个简洁明了的导航栏,其中出了各个HTML主题的链接,例如基础标签、文本格式化、图像和链接等。这样用户可以根据自己的需求选择他们感兴趣的主题,从而更快地找到相关的信息。 对于每个主题,应该提供简要但详细的介绍,解释该主题在HTML中的作用和用法。展示面可以使用易于阅读的排版方式,例如使用不同的字体、颜色和大小来突出显示关键点。 为了更好地帮助用户理解和掌握HTML,面还可以提供一些实例代码和实时预览功能。用户可以看到代码的效果,并通过修改代码来实时查看更改后的结果。这样可以更加直观地展示HTML标签和属性的作用。 此外,展示面还可以包括一些常见问题和解答,以及一些有用的资源和链接,帮助用户进一步扩展和深入了解HTML。这些资源可以包括编辑器推荐、在线教程和HTML规范的链接。 最后,展示面应该是响应式设计的,能够适应不同设备和屏幕大小。这样用户无论是在电脑上还是在手机上都能方便地访问和使用。 总之,HTML百科展示面应该提供简洁明了的导航栏、详细的主题介绍、实例代码和实时预览功能、常见问题和解答以及相关资源的链接。它的目标是通过有效的展示和交互,帮助用户更好地掌握和运用HTML。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值