grid->column($field, $label)->display(function ($value) {
// 如果是枚举对象,获取其值
if (is_object($value) && method_exists($value, 'value')) {
$value = $value->value;
}
$pointTypes = [
1 => '经验积分',
2 => '成就积分',
3 => '活动积分',
4 => '签到积分',
5 => '推荐积分',
];
$pointLabels = [
1 => 'primary',
2 => 'success',
3 => 'warning',
4 => 'info',
5 => 'danger',
];
$typeName = $pointTypes[$value] ?? "积分{$value}";
$labelClass = $pointLabels[$value] ?? 'default';
return "{$typeName}";
});
}
/**
* 添加积分余额列
*
* 整数积分显示,带千分位分隔符
*
* @param string $field 字段名
* @param string $label 标签名
* @return Column
*/
public function columnBalance(string $field = 'balance', string $label = '积分余额'): Column
{
return $this->grid->column($field, $label)->display(function ($value) {
return number_format($value);
})->sortable();
}
/**
* 添加操作积分数量列
*
* 整数积分显示,包括正负值的颜色区分
*
* @param string $field 字段名
* @param string $label 标签名
* @return Column
*/
public function columnAmount(string $field = 'amount', string $label = '操作积分'): Column
{
return $this->grid->column($field, $label)->display(function ($value) {
$formattedValue = number_format(abs($value));
if ($value > 0) {
return "+{$formattedValue}";
} elseif ($value < 0) {
return "-{$formattedValue}";
} else {
return "{$formattedValue}";
}
})->sortable();
}
/**
* 添加操作类型列
*
* 复用价值:高 - 统一处理操作类型的显示,使用枚举类型
*
* @param string $field 字段名
* @param string $label 标签名
* @return Column
*/
public function columnOperateType(string $field = 'operate_type', string $label = '操作类型'): Column
{
return $this->grid->column($field, $label)->display(function ($value) {
// 如果是枚举对象,获取其值
if (is_object($value) && method_exists($value, 'value')) {
$value = $value->value;
}
$operateTypes = LOG_TYPE::getAllTypes();
$operateLabels = [
0 => 'default',
1 => 'success',
2 => 'primary',
3 => 'info',
4 => 'warning',
5 => 'success',
6 => 'success',
7 => 'danger',
8 => 'warning',
9 => 'info',
10 => 'info',
11 => 'primary',
12 => 'warning',
13 => 'success',
14 => 'success',
15 => 'danger',
];
$typeName = $operateTypes[$value] ?? "操作{$value}";
$labelClass = $operateLabels[$value] ?? 'default';
return "{$typeName}";
});
}
/**
* 添加时间戳格式化列
*
* 复用价值:高 - 统一处理时间戳的格式化显示
*
* @param string $field 字段名
* @param string $label 标签名
* @param string $format 日期格式
* @return Column
*/
public function columnTimestamp(string $field, string $label, string $format = 'Y-m-d H:i:s'): Column
{
return $this->grid->column($field, $label)->display(function ($value) use ($format) {
return $value ? date($format, $value) : '';
})->sortable();
}
/**
* 添加积分数量格式化
*
* 复用价值:高 - 统一处理积分数量的格式化显示
*
* @param string $field 字段名
* @param string $label 标签名
* @return Column
*/
public function columnPoints(string $field, string $label): Column
{
return $this->grid->column($field, $label)->display(function ($value) {
return number_format($value);
})->sortable();
}
/**
* 添加用户积分组合列
*
* 复用价值:高 - 将用户ID和积分类型组合显示,提高信息密度
*
* @param string $userIdField 用户ID字段名
* @param string $pointIdField 积分类型字段名
* @param string $label 标签名
* @return Column
*/
public function columnUserPoint(string $userIdField = 'user_id', string $pointIdField = 'point_id', string $label = '用户/积分'): Column
{
return $this->grid->column($userIdField, $label)->display(function ($userId) use ($pointIdField) {
$pointId = $this->{$pointIdField};
$pointTypes = [
1 => '经验积分',
2 => '成就积分',
3 => '活动积分',
4 => '签到积分',
5 => '推荐积分',
];
if (is_object($pointId)) {
$pointId = $pointId->value;
}
$pointName = $pointTypes[$pointId] ?? "积分{$pointId}";
return "ID: {$userId}
类型: {$pointName}";
});
}
/**
* 添加积分流转信息组合列
*
* 复用价值:高 - 将积分流转的来源和目标信息组合显示
*
* @param string $label 标签名
* @return Column
*/
public function columnCirculationInfo(string $label = '流转信息'): Column
{
return $this->grid->column('user_id', $label)->display(function ($userId) {
$fromPointId = $this->from_point_id;
$toPointId = $this->to_point_id;
$pointTypes = [
1 => '经验积分',
2 => '成就积分',
3 => '活动积分',
4 => '签到积分',
5 => '推荐积分',
];
if (is_object($fromPointId)) {
$fromPointId = $fromPointId->value;
}
if (is_object($toPointId)) {
$toPointId = $toPointId->value;
}
$fromPointName = $pointTypes[$fromPointId] ?? "积分{$fromPointId}";
$toPointName = $pointTypes[$toPointId] ?? "积分{$toPointId}";
return "用户: {$userId}
从: {$fromPointName}
到: {$toPointName}";
});
}
/**
* 添加积分转账信息组合列
*
* 复用价值:高 - 将转账的来源和目标用户信息组合显示
*
* @param string $label 标签名
* @return Column
*/
public function columnTransferInfo(string $label = '转账信息'): Column
{
return $this->grid->column('from_user_id', $label)->display(function ($fromUserId) {
$toUserId = $this->to_user_id;
$pointId = $this->point_id;
$pointTypes = [
1 => '经验积分',
2 => '成就积分',
3 => '活动积分',
4 => '签到积分',
5 => '推荐积分',
];
if (is_object($pointId)) {
$pointId = $pointId->value;
}
$pointName = $pointTypes[$pointId] ?? "积分{$pointId}";
return "从: 用户{$fromUserId}
到: 用户{$toUserId}
类型: {$pointName}";
});
}
/**
* 添加状态列
*
* @param string $field 字段名
* @param string $label 标签名
* @return Column
*/
public function columnStatus(string $field = 'status', string $label = '状态'): Column
{
return $this->grid->column($field, $label)->using([
0 => '待处理',
1 => '已完成',
2 => '已失败',
])->label([
0 => 'warning',
1 => 'success',
2 => 'danger',
]);
}
}