作者:李明骏  历史版本:1  最后编辑:李明骏  更新时间:2024-09-11 09:48

编写版本:v1.2.1
适用版本:v1.2.0+
前置条件:使用的工程需在 Webpack5 版本以上,并使用模块联邦(ModuleFederationPlugin)接入 ui-base-core 项目提供的共享组件

共享组件-列表

一、 效果图

二、 组件路径

baseCore/core-list.vue

源码:ui-base-core/src/components/core-list/index.vue

三、 使用举例

template

<template>
    <List
          pk-key="assetId"
          class="data-asset-search-list"
          border
          :data="listData"
          :columns="columns"
          :pagination="pagination"
          size="default"
          :selection="false"
          :row-handle="rowHandle"
          :row-handle-width="120"
          @action-event="handleActionEvents"
          @size-change="handleSizeChange"
          @current-change="handleCurrentPageChange"
          @selection-change="handleSelectionChange"
        >
          <template #assetType="scope">
            <el-tag :disable-transitions="true" :size="size">{{ getAssetType(scope.row) }}</el-tag>
          </template>
          <template #applyStatus="scope">
            <span>{{ getAssetApplyStatus(scope.row) }}</span>
          </template>
        </List>
</template>

script

import List from 'baseCore/core-list.vue'
......
const listData = []

/**
 * 列表数据加载
 */
function loadListData() {
    ...
}

/**
 * 列定义
 */
const columns = [
  { prop: 'assetName', label: '资产名称', width: 200 },
  { prop: 'assetType', label: '资产来源', width: 100, slotName: 'assetType' },
  { prop: 'dbName', label: '所属库' },
  { prop: 'dbType', label: '数据库类型' },
  { prop: 'assetStatus', label: '资产状态', slotName: 'assetStatus', width: 90 },
  ...
]

/**
 * 分页参数(为空时则不显示分页栏)
 */
const pagination = ref({
  currentPage: 1,
  pageSize: 20,
  total: 0
})

/**
 * 数据操作列定义
 */
const rowHandle = computed(() => {
  const handle = [
    { type: 'primary', label: '查看详情', key: 'detail' },
    { type: 'primary', label: '申请', key: 'apply', hide: (row) => {
      const applyStatus = row.applyStatus
      ...
      // 动态隐藏按钮逻辑
      ...
      return true
    } }
  ]
  return handle
})

/**
 * 操作列点击事件
 */
const handleActionEvents = (scope, key) => {
    // 点击事件处理
    const rows = Array.isArray(scope.row) ? scope.row : [scope.row]
    switch (key) {
        case 'register':
          emits('register', rows)
          break
        case 'delete':
          emits('asset-delete', rows[0])
          break
        default:
          break
      }
}

/**
 * 当前页处理
 */
const handleCurrentPageChange = (val) => {
  pagination.value.currentPage = val
  // 执行加载数据方法
  loadListData()
}

/**
 * 分页总数处理
 */
const handleSizeChange = (val) => {
  pagination.value.pageSize = val
  // 执行加载数据方法
  loadListData()
}

/**
 * 分页选择处理
 */
const handleSelectionChange = (val) => {
  selectionData.value = val
}
 ......

四、 组件API

属性

Prop 名称 类型 默认值 描述
data Array - 表格显示的数据数组。
columns Object - 表格的列配置对象。
pagination Object - 分页配置对象。为空时不显示分页栏
rowHandle Array - 操作列的按钮配置数组。
rowHandleWidth Number - 操作列的宽度。
rowHandleCollapse Boolean false 操作列是否折叠。
rowHandleMoreLabel String 更多 操作列折叠按钮文本。
rowHandleCollapseThreshold Number 3 操作列折叠阈值。
selection Boolean true 是否显示表格的复选框列。
index Boolean false 是否显示表格的序号列。
pageSizes Array [20, 30, 40] 每页显示条数选项数组。
selectionAllData Array - 用于复选框功能的全部数据数组。
pkKey String id 数据的主键字段名称。
border Boolean false 是否显示表格的边框。
size String - 表格的尺寸,可以是 mediumsmalldefault

事件

事件名 说明 返回值
current-change 当前页码改变时触发。 当前页码值
size-change 每页显示条数改变时触发。 每页显示条数值
action-event 执行操作事件时触发。 当前列 scope, 按钮key
selection-change 当选择项发生变化时会触发该事件。 选中的项数组
select-all 当用户手动勾选全选 Checkbox 时触发的事件。 全选状态值

插槽

插槽名 说明
column.slotName 提供给每列的插槽,插槽名是列配置中的 slotName