状态组件

简介

状态组件用于在表格列中展示带有颜色标识的状态信息,支持自定义状态映射,适用于展示订单状态、审核状态等场景。

用法示例

基础用法

use plugin\xbCode\builder\Builder;

// 创建表格
Builder::crud(function($builder) {
  // 添加状态列
  $builder->addColumnStatus('status', '状态', [
    0 => '待审核',
    1 => '已通过',
    2 => '已拒绝'
  ]);
});

自定义配置

Builder::crud(function($builder) {
  // 使用回调函数自定义配置
  $builder->addColumnStatus('order_status', '订单状态', [
    'pending' => '待支付',
    'paid' => '已支付',
    'shipped' => '已发货',
    'completed' => '已完成',
    'cancelled' => '已取消'
  ], function($component) {
    $component->width(120);
    $component->remark('订单当前状态');
  });
  
  // 使用数组配置
  $builder->addColumnStatus('audit_status', '审核状态', [
    0 => '待审核',
    1 => '审核中',
    2 => '已通过',
    3 => '已拒绝'
  ], [
    'width' => 100,
    'fixed' => 'left'
  ]);
});

复杂状态映射

Builder::crud(function($builder) {
  // 数字状态映射
  $builder->addColumnStatus('status', '状态', [
    0 => '禁用',
    1 => '启用',
    2 => '维护中'
  ]);
  
  // 字符串状态映射
  $builder->addColumnStatus('payment_status', '支付状态', [
    'unpaid' => '未支付',
    'paying' => '支付中',
    'paid' => '已支付',
    'refunded' => '已退款'
  ]);
});

组件参数

参数名类型默认值说明
namestring必填字段名称,对应数据库字段
labelstring必填列标题,显示在表格头部
mapsarray必填状态映射数组,键为状态值,值为显示文本
optioncallable|array[]配置选项,可以是回调函数或数组

状态组件属性

属性名类型默认值说明
typestringmapping组件类型,固定为 'mapping'
alignstringcenter水平对齐方式(默认居中)
vAlignstringmiddle垂直对齐方式(默认居中)
widthint|string-列宽度
fixedstring-固定列位置:'left'、'right'
remarkstring-列提示信息
classNamestring-CSS 类名
maparray-状态映射配置

状态映射配置(map)

状态组件使用特殊的映射配置来展示不同状态:

[
  '*' => [
    'type' => 'status',
    'source' => $maps  // 状态映射数组
  ]
]

映射数组支持的格式:

  • 数字键:[0 => '状态文本', 1 => '状态文本']
  • 字符串键:['key1' => '状态文本', 'key2' => '状态文本']

使用场景

  • 订单状态展示(待支付、已支付、已发货等)
  • 审核状态展示(待审核、已通过、已拒绝)
  • 用户状态展示(正常、禁用、待激活)
  • 支付状态展示(未支付、已支付、已退款)
  • 物流状态展示(待发货、运输中、已签收)
  • 任务状态展示(待处理、进行中、已完成)

完整示例

use plugin\xbCode\builder\Builder;

Builder::crud(function($builder) {
  // 设置API接口
  $builder->setUrl('/api/orders');
  
  // ID列
  $builder->addColumn('id', 'ID')->width(80);
  
  // 订单号
  $builder->addColumn('order_sn', '订单号')->width(180);
  
  // 支付状态
  $builder->addColumnStatus('pay_status', '支付状态', [
    0 => '未支付',
    1 => '已支付',
    2 => '已退款'
  ], function($component) {
    $component->width(100);
  });
  
  // 订单状态
  $builder->addColumnStatus('order_status', '订单状态', [
    'pending' => '待处理',
    'processing' => '处理中',
    'completed' => '已完成',
    'cancelled' => '已取消'
  ], [
    'width' => 100,
    'remark' => '当前订单处理状态'
  ]);
  
  // 创建时间
  $builder->addColumnDateTime('create_time', '创建时间')->width(160);
});

注意事项

  1. maps 参数是必填的,必须提供状态映射数组
  2. 状态映射的键要与数据库中存储的值对应
  3. 组件会自动根据状态值显示对应的文本
  4. 默认居中对齐显示
  5. 支持数字和字符串类型的状态值
  6. 建议为常用状态组合设置合适的宽度
  7. 可通过 remark 属性添加列提示信息
  8. 状态文本会自动渲染为带颜色的标签样式