更新记录

1.0.5(2026-01-14) 下载此版本

增加defaultValue配置

1.0.4(2026-01-13) 下载此版本

日常功能修复

1.0.3(2026-01-12) 下载此版本

新增step类型(实验性)

查看更多

平台兼容性

uni-app(4.66)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟

liaction-info-card

组件介绍

liaction-info-card 是一个数据驱动通用的信息卡片组件,用于展示结构化的信息列表,支持多种交互方式和灵活的配置。

功能特性

  • 灵活的布局结构:支持头部、自定义内容、详情列表和底部插槽
  • 🎨 多样化的数据展示:支持普通文本、状态徽章、链接和可编辑项
  • 🔗 强大的交互能力:支持卡片点击、头部点击、列表项点击和链接点击
  • ✏️ 可编辑功能:支持直接在卡片内编辑内容
  • 🎯 灵活的配置选项:支持自定义样式、可见性控制和内容格式化
  • 📱 响应式设计:适配不同屏幕尺寸

属性说明

属性名 类型 默认值 说明
className String '' 自定义类名
title String '' 卡片标题
iconSrc String '' 卡片图标
detailItems Array [] 详情列表数据
data Object {} 数据源对象
hasCustomContent Boolean false 是否显示自定义内容插槽
enableDefaultBorder Boolean false 是否启用默认边框
showHeader Boolean true 是否显示头部区域
headerClass String '' 自定义头部类名
listClass String '' 自定义列表类名
hasRightContent Boolean false 是否显示右侧内容区域
visible Boolean true 控制整个组件的显示隐藏
containerStyle Object {} 自定义容器样式
headerPadding String '10px 16px' 自定义头部内边距
isCollapsible Boolean false 是否启用折叠功能
collapsed Boolean true 初始折叠状态
showCount Number 3 折叠状态下显示的列表项数量
expandText String '查看更多' 展开按钮文本
collapseText String '收起' 收起按钮文本
toggleButtonClass String '' 自定义折叠按钮类名
toggleButtonWrapperClass String '' 自定义折叠按钮容器类名
expandIconType String 'down' 展开图标类型
collapseIconType String 'up' 收起图标类型
iconSize Number 14 图标大小
iconColor String '#666666' 图标颜色
toggleButtonTextClass String '' 自定义折叠按钮文本类名
layout String 'horizontal' 布局方式,可选值:horizontal(水平)、vertical(垂直)
labelFlex String/Number undefined 水平布局下标签的flex宽度配置(全局)
contentFlex String/Number undefined 水平布局下内容的flex宽度配置(全局)

事件说明

事件名 参数 说明
link-click { item, data } 链接点击事件
item-click { item, data, event } 列表项点击事件
edit-start { item, data } 开始编辑事件
edit-complete { item, value, data } 编辑完成事件
input { item, value, data } 输入事件
edit-cancel { item, data } 取消编辑事件
header-click { data, event } 头部点击事件
click { data, event } 卡片点击事件
collapse-change { collapsed, data } 折叠状态变化事件
radio-click { item, data } Radio选项点击事件
checkbox-click { item, data } Checkbox选项点击事件
upload { item, files, newFiles, data } 文件上传事件
file-delete { item, files, deletedFile, index, data } 文件删除事件
selected-items-click { item, data } 选择标签点击事件
selected-item-delete { item, selectedItem, index, data } 选择标签删除事件
items-change { action, items, item, oldItem, newItem, index, removedItems } 列表项变化事件
export { items, data } 导出数据事件
validate { item, isValid, error } 单个项验证事件
validate-all { items, errors, isValid } 全部项验证事件
batch-edit-start { items } 批量编辑开始事件
batch-edit-save { items, values, data } 批量编辑保存事件
batch-edit-cancel { items } 批量编辑取消事件
batch-remove { items } 批量移除事件
batch-set-visibility { items, visible } 批量设置可见性事件
batch-set-disabled { items, disabled } 批量设置禁用状态事件

detailItems 配置项

属性名 类型 说明 可选值
label String 标签文本 -
key String 数据字段名,支持嵌套属性(如 'user.name') -
type String 数据类型 'edit', 'textarea', 'rich-text', 'upload', 'checklist', 'selected-items', 'custom'
isStatusBadge Boolean 是否为状态徽章 true/false
isLink Boolean 是否为链接类型 true/false
isRadio Boolean 是否为Radio类型 true/false
radioValue String/Number Radio选项值 -
radioLabel String Radio选项文本 -
radioColor String Radio选中颜色 -
radioSize Number Radio尺寸 -
isCheckbox Boolean 是否为Checkbox类型 true/false
checkboxValue String/Number Checkbox选项值 -
checkboxLabel String Checkbox选项文本 -
checkboxColor String Checkbox选中颜色 -
checkboxSize Number Checkbox尺寸 -
items Array Radio/Checkbox/Checklist选项列表,用于配置多个选项 -
listType String 检查事项列表类型 'ordered', 'unordered', 'custom'
listItems Array 检查事项列表项 -
selectText String 选择标签按钮文本 -
showLinkIcon Boolean 是否显示链接图标 true/false
clickable Boolean 是否可点击 true/false
visible Boolean 是否可见 true/false
layout String 布局方式(覆盖全局配置) 'horizontal', 'vertical'
verticalAlign String 垂直对齐方式 'left', 'center', 'right'
labelAlign String 标签对齐方式(优先级高于verticalAlign) 'left', 'center', 'right'
contentAlign String 内容对齐方式(优先级高于verticalAlign) 'left', 'center', 'right'
editIconAlign String 编辑图标对齐方式 'top', 'center', 'bottom'
labelFlex String/Number 水平布局下标签的flex宽度配置(item级别,覆盖全局配置) -
contentFlex String/Number 水平布局下内容的flex宽度配置(item级别,覆盖全局配置) -
formatter Function 数据格式化函数 (value, data) => formattedValue
formatterOptions Object 格式化器选项 -
className String 自定义类名 -
labelClass String 自定义标签类名 -
badgeClass String 自定义徽章类名 -
inputType String 编辑框类型 'text', 'number', 'email' 等
placeholder String 编辑框占位符 -
maxlength Number 编辑框最大长度 -
allowEmpty Boolean 是否允许为空 true/false
disabled Boolean 是否禁用 true/false
directEdit Boolean 是否为直接编辑模式 true/false
validateRule String 内置验证规则 'required', 'email', 'phone', 'number'
validator Function 自定义验证函数 (value, item, data) => boolean
validateOnInput Boolean 是否在输入时实时验证 true/false
onInput Function 输入回调函数 (item, value, data) => void
onClick Function 点击回调函数 (item, data) => void
onEditStart Function 开始编辑回调 (item, data) => void
onEditComplete Function 编辑完成回调 (item, value, data) => void
onEditCancel Function 取消编辑回调 (item, data) => void
onLinkClick Function 链接点击回调 (item, data) => void
onRadioClick Function Radio点击回调 (item, data) => void
onCheckboxClick Function Checkbox点击回调 (item, data) => void
onUpload Function 上传回调 (item, files, data) => void
onFileDelete Function 文件删除回调 (item, files, deletedFile, index, data) => void
onSelectedItemsClick Function 选择标签点击回调 (item, data) => void
onSelectedItemDelete Function 选择标签删除回调 (item, selectedItem, index, data) => void
onItemClick Function 列表项点击回调 (item, data, event) => void
onHeaderClick Function 头部点击回调 (data, event) => void
onCardClick Function 卡片点击回调 (data, event) => void
selectable String 可选择类型 'label', 'content', 'both'
events Array/Object 事件配置,支持配置多种事件 -
slot String 自定义插槽名称 -
showLabel Boolean 是否显示标签 true/false
showContent Boolean 是否显示内容 true/false
directUpload Boolean 是否为直接上传模式 true/false
accept String 上传文件类型 -
maxSize Number 上传文件最大大小 -
maxCount Number 最大上传数量 -
defaultContent String 富文本默认内容 -
rows Number 文本域行数 -
min Number 数字输入最小值 -
max Number 数字输入最大值 -
step Number 数字输入步长 -
integerOnly Boolean 是否只允许整数输入 true/false
disabledInput Boolean 是否禁用输入框 true/false
editable Boolean 是否可编辑 true/false
defaultValue String/Number 默认值 -

items 配置项(适用于Radio、Checkbox和Checklist类型)

当isRadio、isCheckbox或type为'checklist'时,可以通过items配置项来定义多个选项,每个选项支持以下属性:

Radio/Checkbox选项属性

属性名 类型 说明 可选值
value String/Number 选项值(优先级高于radioValue/checkboxValue) -
label String 选项文本(优先级高于radioLabel/checkboxLabel) -
color String 选中颜色(优先级高于radioColor/checkboxColor) -
size Number 尺寸(优先级高于radioSize/checkboxSize) -
disabled Boolean 是否禁用 true/false
className String 自定义类名 -

Checklist选项属性

属性名 类型 说明 可选值
title String 检查事项分组标题 -
listType String 检查事项列表类型 'ordered', 'unordered', 'custom'
listItems Array 检查事项列表项 -
className String 自定义类名 -
style Object 自定义样式 -

使用示例

1. 基本使用

<template>
  <liaction-info-card 
    :title="'基本信息卡片'"
    :detail-items="detailItems"
    :data="data"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        name: '张三',
        age: 25,
        gender: '男'
      },
      detailItems: [
        { label: '姓名', key: 'name' },
        { label: '年龄', key: 'age' },
        { label: '性别', key: 'gender' }
      ]
    }
  }
}
</script>

2. 带有链接的示例

<template>
  <liaction-info-card 
    :title="'链接类型示例'"
    :detail-items="detailItems"
    :data="data"
    @link-click="handleLinkClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        website: 'https://example.com',
        document: '文档中心'
      },
      detailItems: [
        { label: '官方网站', key: 'website', isLink: true, showLinkIcon: true },
        { label: '文档中心', key: 'document', isLink: true, showLinkIcon: true }
      ]
    }
  },
  methods: {
    handleLinkClick({ item, data }) {
      console.log('链接点击', item, data);
    }
  }
}
</script>

3. 可编辑项示例

<template>
  <liaction-info-card 
    :title="'可编辑项示例'"
    :detail-items="detailItems"
    :data="data"
    @edit-complete="handleEditComplete"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        username: 'user123',
        email: 'user@example.com'
      },
      detailItems: [
        { 
          label: '用户名', 
          key: 'username', 
          type: 'edit', 
          inputType: 'text',
          allowEmpty: false 
        },
        { 
          label: '邮箱', 
          key: 'email', 
          type: 'edit', 
          inputType: 'email',
          placeholder: '请输入邮箱' 
        }
      ]
    }
  },
  methods: {
    handleEditComplete({ item, value, data }) {
      console.log('编辑完成', item.label, value);
    }
  }
}
</script>

4. 自定义标题背景

<template>
  <liaction-info-card 
    :title="'自定义标题背景'"
    :detail-items="detailItems"
    :data="data"
    :header-class="'custom-header-bg'"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        field1: '值1',
        field2: '值2'
      },
      detailItems: [
        { label: '字段1', key: 'field1' },
        { label: '字段2', key: 'field2' }
      ]
    }
  }
}
</script>

<style scoped>
/* 自定义标题背景样式 */
:deep(.custom-header-bg) {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  border-bottom-color: transparent;
}

:deep(.custom-header-bg .info-card__title) {
  color: white;
}
</style>

5. 布局方式示例

<template>
  <view class="demo-container">
    <!-- 水平布局(默认) -->
    <liaction-info-card 
      :title="'水平布局示例'"
      :detail-items="layoutItems"
      :data="layoutData"
      :layout="'horizontal'"
      class="demo-card"
    >
    </liaction-info-card>

    <!-- 垂直布局 -->
    <liaction-info-card 
      :title="'垂直布局示例'"
      :detail-items="layoutItems"
      :data="layoutData"
      :layout="'vertical'"
      class="demo-card"
    >
    </liaction-info-card>

    <!-- 垂直布局 + 不同对齐方式 -->
    <liaction-info-card 
      :title="'垂直布局对齐方式'"
      :detail-items="verticalAlignItems"
      :data="verticalAlignData"
      :layout="'vertical'"
      class="demo-card"
    >
    </liaction-info-card>

    <!-- 水平布局 + flex宽度配置 -->
    <liaction-info-card 
      :title="'水平布局flex宽度配置'"
      :detail-items="flexItems"
      :data="flexData"
      :layout="'horizontal'"
      :label-flex="1"  <!-- 全局标签flex配置 -->
      :content-flex="2"  <!-- 全局内容flex配置 -->
      class="demo-card"
    >
    </liaction-info-card>
  </view>
</template>

<script>
export default {
  data() {
    return {
      layoutData: {
        name: '张三',
        age: 25,
        gender: '男'
      },
      layoutItems: [
        { label: '姓名', key: 'name' },
        { label: '年龄', key: 'age' },
        { label: '性别', key: 'gender' }
      ],
      verticalAlignData: {
        leftItem: '左对齐内容',
        centerItem: '居中对齐内容',
        rightItem: '右对齐内容'
      },
      verticalAlignItems: [
        { label: '左对齐', key: 'leftItem', verticalAlign: 'left' },
        { label: '居中对齐', key: 'centerItem', verticalAlign: 'center' },
        { label: '右对齐', key: 'rightItem', verticalAlign: 'right' },
        // label和content分别对齐
        { 
          label: 'label左对齐,content居中对齐', 
          key: 'centerItem', 
          labelAlign: 'left', 
          contentAlign: 'center' 
        }
      ],
      flexData: {
        name: '张三',
        phone23: '138xxxxxxx',
        email: 'xxx@example.com',
        address: 'xxxxxxxxxxxxxxxxxx88号'
      },
      flexItems: [
        { label: '姓名', key: 'name' },  // 使用全局flex配置
        { 
          label: '电话', 
          key: 'phone23', 
          labelFlex: 1.5,  // item级别覆盖全局配置
          contentFlex: 2.5
        },
        { 
          label: '邮箱', 
          key: 'email', 
          labelFlex: '100px'  // 使用固定宽度
        },
        { 
          label: '地址', 
          key: 'address', 
          contentFlex: 'auto'  // 自动宽度
        }
      ]
    }
  }
}
</script>

<style scoped>
.demo-container {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.demo-card {
  margin: 0;
}
</style>

6. Radio类型示例

6.1 传统配置方式(多个item共享同一label)

<template>
  <liaction-info-card 
    :title="'Radio类型示例'"
    :detail-items="radioItems"
    :data="radioData"
    :layout="'vertical'"
    class="demo-card"
    @radio-click="handleRadioClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      radioData: {
        gender: 'male',
        status: 'active'
      },
      radioItems: [
        // 性别单选组
        { 
          label: '性别', 
          key: 'gender', 
          isRadio: true, 
          radioValue: 'male',
          radioLabel: '男',
          radioColor: '#007bff'
        },
        { 
          label: '性别', 
          key: 'gender', 
          isRadio: true, 
          radioValue: 'female',
          radioLabel: '女',
          radioColor: '#007bff'
        },
        // 状态单选组
        { 
          label: '状态', 
          key: 'status', 
          isRadio: true, 
          radioValue: 'active',
          radioLabel: '激活',
          radioColor: '#4CAF50',
          radioSize: 22
        },
        { 
          label: '状态', 
          key: 'status', 
          isRadio: true, 
          radioValue: 'inactive',
          radioLabel: '禁用',
          radioColor: '#F44336'
        }
      ]
    }
  },
  methods: {
    handleRadioClick({ item, data }) {
      console.log('Radio点击', item.radioLabel, item.radioValue, data);
    }
  }
}
</script>

6.2 新配置方式(单个item包含items数组)

<template>
  <liaction-info-card 
    :title="'Radio类型示例(新配置方式)'"
    :detail-items="radioItemsNew"
    :data="radioData"
    :layout="'vertical'"
    class="demo-card"
    @radio-click="handleRadioClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      radioData: {
        gender: 'male',
        status: 'active'
      },
      radioItemsNew: [
        // 性别单选组 - 使用items配置
        { 
          label: '性别', 
          key: 'gender', 
          isRadio: true, 
          items: [
            { 
              value: 'male',
              label: '男',
              color: '#007bff'
            },
            { 
              value: 'female',
              label: '女',
              color: '#007bff'
            }
          ]
        },
        // 状态单选组 - 使用items配置
        { 
          label: '状态', 
          key: 'status', 
          isRadio: true, 
          items: [
            { 
              value: 'active',
              label: '激活',
              color: '#4CAF50',
              size: 22
            },
            { 
              value: 'inactive',
              label: '禁用',
              color: '#F44336'
            },
            { 
              value: 'pending',
              label: '待处理',
              color: '#FFC107'
            },
            { 
              value: 'processing',
              label: '处理中',
              color: '#00BCD4',
              size: 18
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleRadioClick({ item, data }) {
      console.log('Radio点击', item.radioLabel, item.radioValue, data);
    }
  }
}
</script>

7. Checkbox类型示例

7.1 传统配置方式(多个item共享同一label)

<template>
  <liaction-info-card 
    :title="'Checkbox类型示例'"
    :detail-items="checkboxItems"
    :data="checkboxData"
    :layout="'vertical'"
    class="demo-card"
    @checkbox-click="handleCheckboxClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      checkboxData: {
        hobbies: ['reading', 'music'],
        status: ['active', 'processing']
      },
      checkboxItems: [
        // 爱好多选组
        { 
          label: '爱好', 
          key: 'hobbies', 
          isCheckbox: true, 
          checkboxValue: 'reading',
          checkboxLabel: '阅读',
          checkboxColor: '#007bff'
        },
        { 
          label: '爱好', 
          key: 'hobbies', 
          isCheckbox: true, 
          checkboxValue: 'music',
          checkboxLabel: '音乐',
          checkboxColor: '#007bff'
        },
        { 
          label: '爱好', 
          key: 'hobbies', 
          isCheckbox: true, 
          checkboxValue: 'sports',
          checkboxLabel: '运动',
          checkboxColor: '#007bff'
        }
      ]
    }
  },
  methods: {
    handleCheckboxClick({ item, data }) {
      console.log('Checkbox点击', item.checkboxLabel, item.checkboxValue, data);
    }
  }
}
</script>

7.2 新配置方式(单个item包含items数组)

<template>
  <liaction-info-card 
    :title="'Checkbox类型示例(新配置方式)'"
    :detail-items="checkboxItemsNew"
    :data="checkboxData"
    :layout="'vertical'"
    class="demo-card"
    @checkbox-click="handleCheckboxClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      checkboxData: {
        hobbies: ['reading', 'music'],
        status: ['active', 'processing']
      },
      checkboxItemsNew: [
        // 爱好多选组 - 使用items配置
        { 
          label: '爱好', 
          key: 'hobbies', 
          isCheckbox: true, 
          items: [
            { 
              value: 'reading',
              label: '阅读',
              color: '#007bff'
            },
            { 
              value: 'music',
              label: '音乐',
              color: '#007bff'
            },
            { 
              value: 'sports',
              label: '运动',
              color: '#007bff'
            },
            { 
              value: 'travel',
              label: '旅行',
              color: '#007bff'
            }
          ]
        },
        // 状态多选组 - 使用items配置
        { 
          label: '状态', 
          key: 'status', 
          isCheckbox: true, 
          items: [
            { 
              value: 'active',
              label: '激活',
              color: '#4CAF50',
              size: 22
            },
            { 
              value: 'inactive',
              label: '禁用',
              color: '#F44336'
            },
            { 
              value: 'pending',
              label: '待处理',
              color: '#FFC107'
            },
            { 
              value: 'processing',
              label: '处理中',
              color: '#00BCD4',
              size: 18
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleCheckboxClick({ item, data }) {
      console.log('Checkbox点击', item.checkboxLabel, item.checkboxValue, data);
    }
  }
}
</script>

8. 完整交互示例

<template>
  <liaction-info-card 
    :title="'完整交互示例'"
    :icon-src="'/static/logo.png'"
    :detail-items="detailItems"
    :data="data"
    :has-right-content="true"
    @click="handleCardClick"
    @header-click="handleHeaderClick"
  >
    <template #header-right>
      <text class="header-right-text">更多</text>
    </template>
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        name: '交互示例',
        value: '12345',
        status: '正常',
        detail: '详情信息'
      },
      detailItems: [
        { label: '名称', key: 'name' },
        { label: '数值', key: 'value', type: 'edit', inputType: 'number' },
        { label: '状态', key: 'status', isStatusBadge: true, badgeClass: 'status-success' },
        { label: '详情', key: 'detail', isLink: true, showLinkIcon: true }
      ]
    }
  },
  methods: {
    handleCardClick() {
      console.log('卡片点击');
    },
    handleHeaderClick() {
      console.log('头部点击');
    }
  }
}
</script>

8. 折叠功能示例

<template>
  <liaction-info-card 
    :title="'可折叠信息卡片'"
    :detail-items="detailItems"
    :data="data"
    :is-collapsible="true"
    :collapsed="true"
    :show-count="3"
    :expand-text="'查看更多'"
    :collapse-text="'收起'"
    @collapse-change="handleCollapseChange"
    class="demo-card"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      data: {
        field1: '值1',
        field2: '值2',
        field3: '值3',
        field4: '值4',
        field5: '值5',
        field6: '值6',
        field7: '值7',
        field8: '值8'
      },
      detailItems: [
        { label: '字段1', key: 'field1' },
        { label: '字段2', key: 'field2' },
        { label: '字段3', key: 'field3' },
        { label: '字段4', key: 'field4' },
        { label: '字段5', key: 'field5' },
        { label: '字段6', key: 'field6' },
        { label: '字段7', key: 'field7' },
        { label: '字段8', key: 'field8' }
      ]
    }
  },
  methods: {
    handleCollapseChange({ collapsed, data }) {
      console.log('折叠状态变化', collapsed, data);
    }
  }
}
</script>

9. 检查事项(Checklist)类型示例

<template>
  <liaction-info-card 
    :title="'检查事项示例'"
    :detail-items="checklistItems"
    :data="checklistData"
    :layout="'vertical'"
    class="demo-card"
    @item-click="handleItemClick"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      checklistData: {},
      checklistItems: [
        {
          label: '检查事项',
          key: 'checklist',
          type: 'checklist',
          items: [
            {
              title: '检查事项一:经营资质',
              listType: 'ordered',
              listItems: [
                '是否取得道路运输经营许可',
                '是否取得道路客运班线经营许可',
                '是否存在超越许可事项,从事道路客运经营的'
              ]
            },
            {
              title: '检查事项二:车辆资质',
              listType: 'unordered',
              listItems: [
                '车辆技术等级是否符合要求',
                '车辆类型等级是否符合要求',
                '车辆是否按规定安装卫星定位装置'
              ]
            }
          ],
          events: [
            {
              name: 'item-click',
              handler: (item, data) => {
                console.log(`点击了检查事项: ${item.label}`);
              }
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleItemClick({ item, data, event }) {
      console.log('检查事项点击', item, data, event);
    }
  }
}
</script>

10. 选择标签(Selected-Items)类型示例

<template>
  <liaction-info-card 
    :title="'选择标签示例'"
    :detail-items="selectedItems"
    :data="selectedItemsData"
    :layout="'vertical'"
    class="demo-card"
    @selected-items-click="handleSelectedItemsClick"
    @selected-item-delete="handleSelectedItemDelete"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      selectedItemsData: {
        inspectors: ['李潇潇', '王红红', '刘兰兰'],
        skills: ['JavaScript', 'Vue.js', 'React', 'Node.js']
      },
      selectedItems: [
        {
          label: '检查人员',
          key: 'inspectors',
          type: 'selected-items',
          selectText: '选择',
          events: [
            {
              name: 'selected-items-click',
              handler: (item, data) => {
                console.log(`点击了选择标签: ${item.label}`);
              }
            },
            {
              name: 'selected-item-delete',
              handler: (item, index, value, data) => {
                console.log(`删除了${item.label}中的第${index + 1}项: ${value}`);
              }
            }
          ]
        },
        {
          label: '技能标签',
          key: 'skills',
          type: 'selected-items',
          selectText: '添加技能',
          events: [
            {
              name: 'selected-items-click',
              handler: (item, data) => {
                console.log(`点击了技能标签: ${item.label}`);
              }
            },
            {
              name: 'selected-item-delete',
              handler: (item, index, value, data) => {
                console.log(`删除了技能标签: ${value}`);
              }
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleSelectedItemsClick({ item, data }) {
      console.log('选择标签点击', item, data);
    },
    handleSelectedItemDelete({ item, selectedItem, index, data }) {
      console.log('选择标签删除', item, selectedItem, index, data);
    }
  }
}
</script>

11. 富文本(Rich-Text)类型示例

<template>
  <liaction-info-card 
    :title="'富文本示例'"
    :detail-items="richTextItems"
    :data="richTextData"
    class="demo-card"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      richTextData: {
        richContent: '<p>这是一段<span style="color: #007bff; font-weight: bold;">富文本</span>内容,支持<span style="background-color: #ffeb3b;">HTML</span>格式。</p>'
      },
      richTextItems: [
        {
          label: '富文本内容',
          key: 'richContent',
          type: 'rich-text',
          defaultContent: '<p>这是一段默认的富文本内容。</p>',
          selectable: 'content'
        }
      ]
    }
  }
}
</script>

12. 文件上传(Upload)类型示例

<template>
  <liaction-info-card 
    :title="'文件上传示例'"
    :detail-items="uploadItems"
    :data="uploadData"
    :layout="'vertical'"
    class="demo-card"
    @upload="handleUpload"
    @file-delete="handleFileDelete"
  >
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      uploadData: {
        file: [
          { name: '文档1.pdf', size: 2580000, type: 'application/pdf' },
          { name: '图片1.jpg', size: 1250000, type: 'image/jpeg' }
        ]
      },
      uploadItems: [
        {
          label: '上传文件',
          key: 'file',
          type: 'upload',
          placeholder: '点击上传文件',
          accept: '*/*',
          contentAlign: 'center',
          directUpload: true,
          maxCount: 5,
          events: [
            {
              name: 'upload',
              handler: (item, files, newFiles, data) => {
                console.log('文件上传', item, files, newFiles, data);
              }
            },
            {
              name: 'file-delete',
              handler: (item, files, deletedFile, index, data) => {
                console.log('文件删除', item, files, deletedFile, index, data);
              }
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleUpload({ item, files, newFiles, data }) {
      console.log('文件上传', item, files, newFiles, data);
    },
    handleFileDelete({ item, files, deletedFile, index, data }) {
      console.log('文件删除', item, files, deletedFile, index, data);
    }
  }
}
</script>

13. 自定义折叠按钮示例

<template>
  <liaction-info-card 
    :title="'自定义折叠按钮'"
    :detail-items="detailItems"
    :data="data"
    :is-collapsible="true"
    :collapsed="collapsed"
    :show-count="2"
    @collapse-change="handleCollapseChange"
    class="demo-card"
  >
    <!-- 完全自定义折叠/展开按钮 -->
    <template #toggle-button="{ collapsed, toggle }">
      <view class="custom-toggle-button" @click="toggle">
        <text class="custom-toggle-text">
          {{ collapsed ? '展开详情' : '收起详情' }}
        </text>
        <view class="custom-toggle-icon" :class="{ 'icon-expanded': !collapsed }">
          <!-- 自定义箭头图标 -->
          <text class="arrow">▼</text>
        </view>
      </view>
    </template>
  </liaction-info-card>
</template>

<script>
export default {
  data() {
    return {
      collapsed: true,
      data: {
        field1: '值1',
        field2: '值2',
        field3: '值3',
        field4: '值4',
        field5: '值5'
      },
      detailItems: [
        { label: '字段1', key: 'field1' },
        { label: '字段2', key: 'field2' },
        { label: '字段3', key: 'field3' },
        { label: '字段4', key: 'field4' },
        { label: '字段5', key: 'field5' }
      ]
    }
  },
  methods: {
    handleCollapseChange({ collapsed }) {
      this.collapsed = collapsed;
      console.log('折叠状态变化', collapsed);
    }
  }
}
</script>

<style scoped>
/* 自定义折叠按钮样式 */
.custom-toggle-button {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 10px 20px;
  background-color: #007bff;
  color: white;
  border-radius: 20px;
  cursor: pointer;
  transition: all 0.3s ease;
  margin: 12px 0;
}

.custom-toggle-button:active {
  background-color: #0056b3;
  transform: scale(0.98);
}

.custom-toggle-text {
  font-size: 14px;
  font-weight: 500;
}

.custom-toggle-icon {
  transition: transform 0.3s ease;
}

.custom-toggle-icon.icon-expanded {
  transform: rotate(180deg);
}

.arrow {
  font-size: 12px;
  font-weight: bold;
}
</style>

插槽说明

header

  • 作用:自定义头部内容
  • 参数:无

header-right

  • 作用:自定义头部右侧内容
  • 参数:无

footer

  • 作用:自定义底部内容
  • 参数:无

toggle-button

  • 作用:自定义折叠/展开按钮
  • 参数
    • collapsed:当前折叠状态(Boolean)
    • toggle:触发折叠/展开的事件(Function)

radio-icon

  • 作用:自定义Radio图标
  • 参数
    • radioItem:当前Radio项的数据
    • isSelected:当前Radio项是否选中(Boolean)
    • isDisabled:当前Radio项是否禁用(Boolean)
    • size:Radio尺寸(Number)
    • color:Radio颜色(String)

checkbox-icon

  • 作用:自定义Checkbox图标
  • 参数
    • checkboxItem:当前Checkbox项的数据
    • isSelected:当前Checkbox项是否选中(Boolean)
    • isDisabled:当前Checkbox项是否禁用(Boolean)
    • size:Checkbox尺寸(Number)
    • color:Checkbox颜色(String)

自定义项插槽

<liaction-info-card :detail-items="detailItems" :data="data">
  <template #item-slot-name="{ item, data }">
    <!-- 自定义内容 -->
    <text>{{ item.label }}: {{ data[item.key] }}</text>
  </template>
</liaction-info-card>

注意事项

  • 嵌套属性:支持通过点语法访问嵌套属性(如 user.name
  • 数据格式化:可以通过 formatter 函数自定义数据显示格式
  • 编辑验证:支持通过 validator 函数自定义验证逻辑
  • 事件冒泡:编辑状态下会阻止事件冒泡,避免触发不必要的点击事件
  • 样式穿透:自定义样式时需要使用 ::v-deep:deep() 语法

浏览器兼容性

  • 支持 H5、微信小程序、支付宝小程序等 uni-app 支持的平台
  • 支持现代浏览器

相关组件

作者

liaction-ui 团队

许可证

MIT License

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。