| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <?php
- namespace App\Module\Point\AdminControllers\Helper;
- use App\Module\Point\Enums\LOG_TYPE;
- use App\Module\Point\Enums\POINT_TYPE;
- use App\Module\Point\Services\AccountService;
- use Dcat\Admin\Grid\Column;
- /**
- * 列表页辅助特性
- *
- * 提供积分模块后台控制器的列表页构建功能的具体实现
- * 只保留具有复用价值的方法
- */
- trait GridHelperTrait
- {
- /**
- * 添加积分类型列
- *
- * 复用价值:高 - 统一处理积分类型的显示,使用枚举类型
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnPointId(string $field = 'point_id', string $label = '积分类型'): Column
- {
- return $this->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 "<span class='label label-{$labelClass}'>{$typeName}</span>";
- });
- }
- /**
- * 添加积分余额列
- *
- * 整数积分显示,带千分位分隔符
- *
- * @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 "<span class='text-success'>+{$formattedValue}</span>";
- } elseif ($value < 0) {
- return "<span class='text-danger'>-{$formattedValue}</span>";
- } else {
- return "<span>{$formattedValue}</span>";
- }
- })->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 "<span class='label label-{$labelClass}'>{$typeName}</span>";
- });
- }
- /**
- * 添加时间戳格式化列
- *
- * 复用价值:高 - 统一处理时间戳的格式化显示
- *
- * @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}<br>类型: {$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}<br>从: {$fromPointName}<br>到: {$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}<br>到: 用户{$toUserId}<br>类型: {$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',
- ]);
- }
- }
|