Skip to content

xtf-grid

组件说明

xtf-grid 是宫格组件,用于展示等分网格布局。支持数据驱动和插槽模式、自定义列数、间距、图标/图片/文字组合、徽标、骨架屏和级联动画,适用于功能入口、分类导航和图片网格等场景。


基础用法

1. 数据驱动模式

通过 items 传入网格数据,通过 columns 设置列数:

vue
<template>
  <xtf-grid :items="gridItems" :columns="4" icon-size="lg" clickable @item-click="onItemClick" />
</template>

<script>
export default {
  data() {
    return {
      gridItems: [
        { icon: 'home', title: '首页' },
        { icon: 'search', title: '搜索' },
        { icon: 'favorite', title: '收藏' },
        { icon: 'settings', title: '设置' },
        { icon: 'person', title: '我的' },
        { icon: 'notifications', title: '消息' },
        { icon: 'shopping_cart', title: '购物车' },
        { icon: 'history', title: '历史' }
      ]
    }
  },
  methods: {
    onItemClick(data) {
      console.log('点击:', data.item.title)
    }
  }
}
</script>

2. 插槽模式

使用 xtf-grid-item 自定义每一项内容:

vue
<template>
  <xtf-grid :columns="3" clickable>
    <xtf-grid-item v-for="item in menuList" :key="item.title" :title="item.title" :icon="item.icon">
      <template #icon>
        <xtf-icon :name="item.icon" size="lg" theme="primary" variant="soft" />
      </template>
    </xtf-grid-item>
  </xtf-grid>
</template>

<script>
export default {
  data() {
    return {
      menuList: [
        { icon: 'receipt_long', title: '账单' },
        { icon: 'account_balance_wallet', title: '钱包' },
        { icon: 'local_atm', title: '提现' }
      ]
    }
  }
}
</script>

3. 带图片和描述

通过 items 中的 imagedesc 字段展示图片网格:

vue
<template>
  <xtf-grid :items="imageItems" :columns="2" variant="soft" item-radius="20" />
</template>

<script>
export default {
  data() {
    return {
      imageItems: [
        { image: '/static/product1.jpg', title: '商品A', desc: '¥99.00' },
        { image: '/static/product2.jpg', title: '商品B', desc: '¥199.00' }
      ]
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
itemsArray[]网格数据数据驱动
columnsString | Number3列数布局
gapString | Number20间距布局
rowGapString | Number''行间距布局
columnGapString | Number''列间距布局
autoRowsString | Number''自动行高布局
mediaRatioString''媒体宽高比媒体
paddingString | Number0外边距布局
itemPaddingString | Number24项内边距布局
itemRadiusString | Number28项圆角样式
itemMinHeightString | Number0项最小高度布局
iconSizeString | Number'lg'图标尺寸图标
mediaWidthString | Number''媒体宽度媒体
mediaHeightString | Number''媒体高度媒体
mediaRadiusString | Number''媒体圆角媒体
imageWidth / imageHeightString | Number''图片宽度/高度图片尺寸
alignString'center'对齐方式布局
contentAlignString'center'内容对齐布局
sectionTitleString''分区标题标题
sectionDescString''分区描述描述
themeString'primary'主题色主题
variantString'soft'变体样式样式
borderBooleantrue是否显示边框边框
squareBooleanfalse是否方形形状
activeEffectString'scale'点击效果交互
activeScaleString | Number''点击缩放比例交互
activeShadowString''点击阴影交互
clickableBooleanfalse是否可点击交互
dividerBooleanfalse是否显示分割线分割线
dividerInsetString | Number0分割线内缩分割线
dividerColorString''分割线颜色分割线
emptyTextString''空状态文字空状态
emptyDescString''空状态描述空状态
emptyIconString'grid_view'空状态图标空状态
emptyIconSizeString | Number'lg'空状态图标尺寸空状态
cascadeBooleanfalse是否级联动画动画
cascadeStepString | Number60级联步进(ms)动画
layoutString'header'布局模式布局
customClassString''自定义类名样式覆盖
customStyleString | Object''自定义样式动态样式覆盖

事件

事件名称触发时机回调参数参数说明
item-click点击网格项时触发({ item, index })项数据和索引
click点击网格项时触发({ item, index })item-click 同时触发

插槽

插槽名称说明
default插槽模式下的网格项
item数据模式下的自定义项内容
icon自定义图标
header自定义头部
footer自定义底部
badge自定义徽标
section自定义分区标题
empty自定义空状态

插槽使用示例

vue
<template>
  <xtf-grid :items="items" :columns="2" clickable @click="onClick" @item-click="onClick">
    <template #item="{ item }"><xtf-text :text="item.title + '(自定义内容)'" /></template>
    <template #empty><xtf-empty type="search" /></template>
  </xtf-grid>
</template>

<script>
export default {
  data() {
    return { items: [{ title: '账单' }, { title: '统计' }] }
  },
  methods: {
    onClick(payload) {
      console.log(payload)
    }
  }
}
</script>

主题说明

  • 图标使用 xtf-icon 组件
  • 文字使用 xtf-text 组件
  • 徽标使用 xtf-badge 组件
  • 支持 primarysuccesswarningdangerinfo 主题色
  • 支持 softsurfacecardglassplain 变体样式

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖相关 CSS 变量。

MIT Licensed