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); } }