model()->orderByDesc('created_at'); $databaseConfig = config('database.connections'); $grid->column('id')->copyable(); $grid->column('name')->copyable(); $grid->column('company_name')->copyable(); $grid->column('email'); $grid->column('tenancy_db_connection')->expand(function ($model) use ($databaseConfig) { $config = $databaseConfig[$model->tenancy_db_connection] ?? []; return new Table(['name', 'config'], [ [ $model->tenancy_db_connection, json_encode(['host' => $config['host'], 'port' => $config['port'], 'database' => $config['database']]) ] ]); }); $grid->column('domains')->display(function ($domains) { if (count($domains) == 0) { return '-'; } $domainString = ''; foreach ($domains as &$domain) { $domainString .= $domain['domain'].'
'; } return $domainString; }); $grid->column('expired_at')->datetime(); $grid->created_at()->display(function ($createdAt) { return date('Y-m-d H:i:s', strtotime($createdAt)); }); $grid->updated_at()->display(function ($updateAt) { return date('Y-m-d H:i:s', strtotime($updateAt)); }); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableDelete(); }); $grid->filter(function (Grid\Filter $filter) { $filter->like('name'); }); return $grid; } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { $show = new Show(Tenant::query()->findOrFail($id)); $show->field('id'); $show->field('name'); $show->field('company_name'); $show->field('email'); $show->field('tenancy_db_connection'); $show->field('expired_at'); $show->field('created_at'); $show->field('updated_at'); $show->domains('domains', function ($domain) { $domain->id(); $domain->domain(); $domain->created_at(); $domain->updated_at(); $domain->resource('/admin/domain'); }); $show->users('users', function ($user) { $user->id(); $user->username(); $user->created_at(); $user->updated_at(); $user->resource('/admin/globalUser'); $user->panel()->tools(function ($tools) { $tools->disableEdit(); $tools->disableDelete(); })->hide(); $user->disableCreateButton(); $user->disableActions(); }); $show->panel()->tools(function ($tools) { $tools->disableDelete(); }); return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $databaseConfig = config('database.connections'); $databaseConnections = []; foreach ($databaseConfig as $key => $item) { $databaseConnections[$key] = $key; } $form = new Form(new Tenant(['domains', 'users'])); // 从URL中获取 tenant_id $tenantId = request()->route('tenant_id'); $form->tab('basicInfo', function (Form $form) use ($databaseConnections, $tenantId) { $form->text('id')->rules('required')->default($tenantId); // 设置默认值为 tenant_id $form->text('name')->required(); $form->text('company_name')->icon('fa-sitemap')->required(); $form->text('email')->required(); $form->radio('tenancy_db_connection') ->options($databaseConnections)->default('mysql')->required(); $form->datetime('expired_at')->required(); })->tab('domains', function (Form $form) { $form->hasMany('domains', '', function (Form\NestedForm $form) { $form->text('domain')->required(); }); }); return $form; } }