column('id', '订单ID')->sortable();
$grid->column('out_order_id', '外部订单ID')->copyable();
// 用户信息列
$grid->column('user_id', '用户ID')->link(function ($value) {
return admin_url("users/{$value}");
});
$grid->column('out_user_id', '外部用户ID');
// 应用信息列
$grid->column('transferApp.title', '划转应用')->link(function () {
return admin_url("transfer/apps/{$this->transfer_app_id}");
});
// 类型和状态列
$grid->column('type', '类型')->using(self::getTypeLabels())->label(self::getTypeColors());
$grid->column('status', '状态')->using(self::getStatusLabels())->label(self::getStatusColors());
// 金额信息列
$grid->column('amount', '内部金额')->display(function ($value) {
return number_format($value, 2);
})->sortable();
$grid->column('out_amount', '外部金额')->display(function ($value) {
return number_format($value, 2);
})->sortable();
$grid->column('exchange_rate', '汇率')->display(function ($value) {
return number_format($value, 4);
});
// 时间信息列
$grid->column('created_at', '创建时间')->sortable();
$grid->column('processed_at', '处理时间');
$grid->column('completed_at', '完成时间');
// 错误信息列
$grid->column('error_message', '错误信息')->limit(50)->help('点击查看完整错误信息');
// 备注列
$grid->column('remark', '备注')->limit(30);
}
/**
* 配置应用表格列
*
* @param Grid $grid
* @return void
*/
public static function appColumns(Grid $grid): void
{
// 基本信息列
$grid->column('id', '应用ID')->sortable();
$grid->column('keyname', '应用标识')->copyable();
$grid->column('title', '应用名称')->link(function () {
return admin_url("transfer/apps/{$this->id}");
});
$grid->column('description', '描述')->limit(50);
// 外部应用信息列
$grid->column('out_id', '外部应用ID');
$grid->column('out_id2', '外部应用ID2');
$grid->column('out_id3', '外部应用ID3');
// 配置信息列
$grid->column('currency_id', '货币类型');
$grid->column('fund_id', '资金账户类型');
$grid->column('exchange_rate', '汇率')->display(function ($value) {
return number_format($value, 4);
});
// 状态列
$grid->column('is_enabled', '状态')->switch([
'on' => ['value' => 1, 'text' => '启用', 'color' => 'success'],
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
]);
// API配置状态列
$grid->column('api_status', 'API配置')->display(function () {
$status = [];
if ($this->order_callback_url) $status[] = '回调';
if ($this->order_in_info_url) $status[] = '转入查询';
if ($this->order_out_create_url) $status[] = '转出创建';
if ($this->order_out_info_url) $status[] = '转出查询';
if (empty($status)) {
return '内部模式';
}
return '' . implode('、', $status) . '';
});
// 统计信息列
$grid->column('orders_count', '订单数量')->display(function () {
return $this->orders()->count();
});
// 时间列
$grid->column('created_at', '创建时间')->sortable();
$grid->column('updated_at', '更新时间');
}
/**
* 配置表格工具栏
*
* @param Grid $grid
* @return void
*/
public static function configureTools(Grid $grid): void
{
// 批量操作
$grid->batchActions(function (Grid\Tools\BatchActions $batch) {
$batch->disableDelete(); // 禁用批量删除
});
// 导出功能
$grid->export()->rows(function (array $rows) {
foreach ($rows as $index => &$row) {
// 格式化导出数据
if (isset($row['type'])) {
$row['type'] = TransferType::from($row['type'])->getDescription();
}
if (isset($row['status'])) {
$row['status'] = TransferStatus::from($row['status'])->getDescription();
}
}
return $rows;
});
// 刷新按钮
$grid->tools(function (Grid\Tools $tools) {
$tools->append('
刷新
');
});
}
/**
* 获取类型标签映射
*
* @return array
*/
protected static function getTypeLabels(): array
{
$labels = [];
foreach (TransferType::cases() as $type) {
$labels[$type->value] = $type->getDescription();
}
return $labels;
}
/**
* 获取类型颜色映射
*
* @return array
*/
protected static function getTypeColors(): array
{
$colors = [];
foreach (TransferType::cases() as $type) {
$colors[$type->value] = $type->getColor();
}
return $colors;
}
/**
* 获取状态标签映射
*
* @return array
*/
protected static function getStatusLabels(): array
{
$labels = [];
foreach (TransferStatus::cases() as $status) {
$labels[$status->value] = $status->getDescription();
}
return $labels;
}
/**
* 获取状态颜色映射
*
* @return array
*/
protected static function getStatusColors(): array
{
$colors = [];
foreach (TransferStatus::cases() as $status) {
$colors[$status->value] = $status->getColor();
}
return $colors;
}
/**
* 配置分页
*
* @param Grid $grid
* @param int $perPage
* @return void
*/
public static function configurePagination(Grid $grid, int $perPage = 20): void
{
$grid->paginate($perPage);
$grid->perPages([10, 20, 50, 100]);
}
/**
* 配置排序
*
* @param Grid $grid
* @param string $column
* @param string $direction
* @return void
*/
public static function configureSort(Grid $grid, string $column = 'created_at', string $direction = 'desc'): void
{
$grid->model()->orderBy($column, $direction);
}
}