# Table 表格

資料表格。支援排序(受控 / 非受控)、列篩選、列寬拖曳、多級表頭(children 無限巢狀)與固定列;設定 height 後啟用虛擬捲動(rowHeight 需與實際行高一致)。

表格
<template>
  <div style="max-width: 760px">
    <p class="demo-note">size="small" + maxHeight + 預設排序(defaultSortProp/defaultSortOrder)+ 篩選</p>
    <LhTable
      :data="rows"
      :columns="columns"
      size="small"
      stripe
      border
      :max-height="200"
      row-key="name"
      default-sort-prop="dynasty"
      default-sort-order="asc"
      :default-filtered-values="{ dynasty: ['宋'] }"
    >
      <template #price="{ value }">
        <span style="color: var(--lh-primary-color); font-weight: 600">{{ value }}</span>
      </template>
    </LhTable>
    <p class="demo-note">「朝代」列預設升序且預篩「宋」;表頭篩選按鈕可改條件。</p>
    <p class="demo-note" style="margin-top: 16px">巢狀表頭(children)+ resizable 拖寬 + formatter + 自訂 sorter</p>
    <LhTable :data="rows2" :columns="groupColumns" border :height="180" :row-height="40" :sorter="dynastySorter">
      <template #price="{ value }">
        <span style="color: var(--lh-primary-color); font-weight: 600">{{ value }}</span>
      </template>
    </LhTable>
    <p class="demo-note">「流傳」列用 formatter 格式化為「宮藏/民間」;「估價」列可拖寬(resizable)。</p>
  </div>
</template>

<script>
export default {
  data: () => ({
    rows: [
      { name: '溪山行旅圖', dynasty: '宋', price: 1800 },
      { name: '富春山居圖', dynasty: '元', price: 2600 },
      { name: '千里江山圖', dynasty: '宋', price: 3200 },
      { name: '清明上河圖', dynasty: '宋', price: 1500 },
      { name: '韓熙載夜宴圖', dynasty: '五代', price: 2100 },
    ],
    rows2: [
      { name: '溪山行旅圖', dynasty: '宋', provenance: '宮藏', price: 1800 },
      { name: '富春山居圖', dynasty: '元', provenance: '宮藏', price: 2600 },
      { name: '清明上河圖', dynasty: '宋', provenance: '宮藏', price: 1500 },
      { name: '照夜白圖', dynasty: '唐', provenance: '民間', price: 980 },
    ],
    columns: [
      { prop: 'name', label: '畫作', width: 160 },
      {
        prop: 'dynasty',
        label: '朝代',
        width: 120,
        sortable: true,
        filters: [
          { text: '宋', value: '宋' },
          { text: '元', value: '元' },
          { text: '五代', value: '五代' },
        ],
      },
      { prop: 'price', label: '估價(萬)', width: 140, align: 'right', slot: 'price' },
    ],
    groupColumns: [
      {
        label: '藏品資訊',
        children: [
          { prop: 'name', label: '畫作', width: 150 },
          {
            prop: 'provenance',
            label: '流傳',
            width: 100,
            formatter: (r) => (r.provenance === '宮藏' ? '宮藏' : '民間'),
          },
        ],
      },
      {
        label: '估值',
        children: [
          { prop: 'dynasty', label: '朝代', width: 90, sortable: true },
          { prop: 'price', label: '估價(萬)', width: 130, align: 'right', resizable: true, slot: 'price' },
        ],
      },
    ],
  }),
  methods: {
    dynastySorter(a, b) {
      const order = ['唐', '五代', '宋', '元']
      return order.indexOf(String(a.dynasty)) - order.indexOf(String(b.dynasty))
    },
  },
}
</script>

# Props

屬性 說明 類型 預設值
data 行資料 LhTableRow[] []
columns 列配置 LhTableColumn[] []
height 表體高度(設定後啟用虛擬捲動;數字為 px) number \| string —
maxHeight 非虛擬模式下的最大高度 number \| string —
rowHeight 虛擬捲動行高(需與實際行高一致) number —
stripe / border 斑馬紋 / 儲存格邊框 boolean false
size 尺寸 'small' \| 'default' \| 'large' 'default'
rowKey 行鍵欄位名 string —
defaultSortProp / defaultSortOrder 預設排序列 / 方向 string / LhTableSortOrder —
sorter 自訂排序函式 (a, b) => number —
resizable 開啟列寬拖曳(仍需列級 resizable 配合,且列須為數字 width) boolean false
defaultFilteredValues 預設篩選狀態(非受控,鍵為列 prop) Record<string, (string \| number)[]> —
filteredValues 受控篩選狀態(:filtered-values.sync) Record<string, (string \| number)[]> —
sx sx 快速佈局屬性 — —

# Events

sortChange ({ prop, order })、filterChange ({ prop, values })、columnResize ({ prop, width })、update:filteredValues、rowClick (row, index)

# Slots

插槽 說明
<列 slot 名> 自訂儲存格,作用域參數 { row, column, index, value }(列由 column.slot 指定)
empty 無資料時內容(預設「暫無資料」)

# 無障礙

表頭 role="row" + 可排序列 aria-sort,表體 role="row"; 篩選面板為 role="menu",拖寬把手設 aria-label 與 tabindex,支援鍵盤左右調整。

Copyright © 2024-2026 风默文学 | 宁ICP备2024006574号 | 公安备案徽标苏公网安备32040002010537