# MatchGroupingItem 分组卡片

分组卡片组件,用于展示分组信息,支持成员头像展示和操作按钮,适用于比赛分组、团队展示等场景。

# 引入

import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';

# 代码演示

# 基础用法

展示基础的分组信息,包括分组名称、成员头像列表和操作按钮。

<template>
  <PressMatchGroupingItem
    group-name="第 1 组"
    :members="memberList"
    :show-action="true"
    action-text="开始比赛"
    @action-click="handleActionClick"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';
import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';

interface Member {
  id: string | number;
  name: string;
  avatar?: string;
}

const memberList = ref<Member[]>([
  {
    id: 1,
    name: '张三',
    avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
  },
  {
    id: 2,
    name: '李四',
    avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
  },
  {
    id: 3,
    name: '王五',
    avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
  },
]);

const handleActionClick = () => {
  console.log('开始比赛');
};
</script>

# 无操作按钮

不显示操作按钮,仅展示分组信息。

<template>
  <PressMatchGroupingItem
    group-name="第 2 组"
    :members="memberList"
    :show-action="false"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';
import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';

const memberList = ref([
  { id: 1, name: '张三', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
  { id: 2, name: '李四', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
]);
</script>

# 自定义按钮文案

自定义操作按钮的文字内容。

<template>
  <PressMatchGroupingItem
    group-name="第 3 组"
    :members="memberList"
    :show-action="true"
    action-text="查看详情"
    @action-click="handleViewDetail"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';
import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';

const memberList = ref([
  { id: 1, name: '张三', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
  { id: 2, name: '李四', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
]);

const handleViewDetail = () => {
  console.log('查看详情');
};
</script>

# 自定义操作按钮

通过插槽自定义操作按钮区域,可以添加多个按钮或其他内容。

<template>
  <PressMatchGroupingItem
    group-name="第 4 组"
    :members="memberList"
  >
    <template #ctrls-btn>
      <PressButton
        type="default"
        size="small"
        style="margin-right: 8px;"
        @click="handleEdit"
      >
        编辑
      </PressButton>
      <PressButton
        type="primary"
        size="small"
        @click="handleStart"
      >
        开始比赛
      </PressButton>
    </template>
  </PressMatchGroupingItem>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';
import { PressButton } from 'press-ui';

const memberList = ref([
  { id: 1, name: '张三', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
  { id: 2, name: '李四', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
]);

const handleEdit = () => {
  console.log('编辑分组');
};

const handleStart = () => {
  console.log('开始比赛');
};
</script>

# 自定义样式

通过 CSS 变量自定义组件样式。

<template>
  <PressMatchGroupingItem
    group-name="自定义样式组"
    :members="memberList"
    :show-action="true"
    action-text="开始比赛"
    customl-class="my-grouping-item"
    @action-click="handleActionClick"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';
import PressMatchGroupingItem from 'press-next/press-match-grouping-item/press-match-grouping-item.vue';

const memberList = ref([
  { id: 1, name: '张三', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
  { id: 2, name: '李四', avatar: 'https://img.yzcdn.cn/vant/cat.jpeg' },
]);

const handleActionClick = () => {
  console.log('开始比赛');
};
</script>

<style>
.my-grouping-item {
  --pmgi-header-bg: #f0f9ff;
  --pmgi-header-title-color: #0369a1;
  --pmgi-avatar-size: 1.2rem;
  --pmgi-card-border-radius: .16rem;
}
</style>

# API

# Props

参数 说明 类型 默认值
customl-class 自定义类名 string -
group-name 分组名称 string -
members 成员列表 Member[] []
show-action 是否显示操作按钮 boolean false
action-text 操作按钮文字 string '开始比赛'

# Member 数据结构

属性 说明 类型 必填
id 成员ID string | number
name 成员姓名 string
avatar 成员头像URL string

# Events

事件名 说明 回调参数
action-click 点击操作按钮时触发 -

# Slots

名称 说明
ctrls-btn 自定义操作按钮区域

# 主题定制

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。

# 样式变量

# 间距系统

名称 默认值 描述
--pmgi-list-gap $spacing-md 头像列表间距
--pmgi-header-padding-lr $spacing-lg 头部左右内边距
--pmgi-header-right-mr $spacing-lg 头部右侧外边距
--pmgi-body-padding-tb $spacing-xl 主体上下内边距
--pmgi-body-padding-lr $spacing-lg 主体左右内边距
--pmgi-ctrls-mt $spacing-lg 控制按钮上边距

# 尺寸系统

名称 默认值 描述
--pmgi-card-min-height 1.44rem 卡片最小高度
--pmgi-avatar-size 1rem 头像尺寸
--pmgi-header-title-max-width 3rem 头部标题最大宽度
--pmgi-header-height .72rem 头部高度
--pmgi-ctrls-btn-width 3.2rem 控制按钮宽度

# 颜色系统

名称 默认值 描述
--pmgi-bg-color $color-surface-default 背景色
--pmgi-card-border-color none 边框颜色
--pmgi-header-info-text-color $color-text-secondary 信息文字颜色
--pmgi-header-bg $color-divider-light 头部背景色
--pmgi-header-left-bg $color-surface-brand-light2 头部左侧背景色
--pmgi-header-title-color $color-text-primary 头部标题颜色
--pmgi-header-icon-color $color-text-primary 头部图标颜色
--pmgi-avatar-border-color $color-divider-light 成员头像边框颜色
--pmgi-avatar-bg-color $color-surface-default 成员头像背景色

# 字体系统

名称 默认值 描述
--pmgi-header-title-font-size $font-size-md 头部标题字体大小
--pmgi-header-title-font-weight $font-weight-bold 头部标题字体粗细
--pmgi-header-icon-font-size $font-size-xl 头部图标字体大小
--pmgi-header-info-font-size $font-size-sm 信息字体大小

# 圆角系统

名称 默认值 描述
--pmgi-card-border-radius .12rem 卡片圆角
--pmgi-avatar-border-radius 50% 头像圆角

# 阴影系统

名称 默认值 描述
--pmgi-card-shadow none 卡片阴影

# 其他

名称 默认值 描述
--pmgi-header-clip-path polygon(0 0, calc(100% - 12px) 0, 100% 100%, 100% 100%, 0 100%) 卡片切角

# 常见问题

# 如何自定义操作按钮?

使用 ctrls-btn 插槽可以完全自定义操作按钮区域:

<template>
  <PressMatchGroupingItem :members="members">
    <template #ctrls-btn>
      <PressButton @click="handleCustomAction">
        自定义按钮
      </PressButton>
    </template>
  </PressMatchGroupingItem>
</template>

# 成员头像列表如何横向滚动?

组件已内置横向滚动功能,当成员数量较多时会自动启用横向滚动,并隐藏滚动条以保持美观。

# 如何修改头部的切角样式?

通过 CSS 变量 --pmgi-header-clip-path 可以自定义头部左侧的切角形状:

.custom-grouping {
  --pmgi-header-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); /* 移除切角 */
}

# 如何显示成员总数?

组件头部右侧会自动显示"共有X支队伍",数量根据 members 数组长度自动计算。