TenantController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Models\Tenant;
  4. use Encore\Admin\Controllers\AdminController;
  5. use Encore\Admin\Form;
  6. use Encore\Admin\Grid;
  7. use Encore\Admin\Show;
  8. use Encore\Admin\Widgets\Table;
  9. class TenantController extends AdminController
  10. {
  11. protected $title = '租户';
  12. protected $description = '';
  13. /**
  14. * Make a grid builder.
  15. *
  16. * @return Grid
  17. */
  18. protected function grid()
  19. {
  20. $grid = new Grid(new Tenant(['domains']));
  21. $grid->model()->orderByDesc('created_at');
  22. $databaseConfig = config('database.connections');
  23. $grid->column('id')->copyable();
  24. $grid->column('name')->copyable();
  25. $grid->column('company_name')->copyable();
  26. $grid->column('email');
  27. $grid->column('tenancy_db_connection')->expand(function ($model) use ($databaseConfig) {
  28. $config = $databaseConfig[$model->tenancy_db_connection] ?? [];
  29. return new Table(['name', 'config'], [
  30. [
  31. $model->tenancy_db_connection,
  32. json_encode(['host' => $config['host'], 'port' => $config['port'], 'database' => $config['database']])
  33. ]
  34. ]);
  35. });
  36. $grid->column('domains')->display(function ($domains) {
  37. if (count($domains) == 0) {
  38. return '-';
  39. }
  40. $domainString = '';
  41. foreach ($domains as &$domain) {
  42. $domainString .= $domain['domain'].'<br/>';
  43. }
  44. return $domainString;
  45. });
  46. $grid->column('expired_at')->datetime();
  47. $grid->created_at()->display(function ($createdAt) {
  48. return date('Y-m-d H:i:s', strtotime($createdAt));
  49. });
  50. $grid->updated_at()->display(function ($updateAt) {
  51. return date('Y-m-d H:i:s', strtotime($updateAt));
  52. });
  53. $grid->actions(function (Grid\Displayers\Actions $actions) {
  54. $actions->disableDelete();
  55. });
  56. $grid->filter(function (Grid\Filter $filter) {
  57. $filter->like('name');
  58. });
  59. return $grid;
  60. }
  61. /**
  62. * Make a show builder.
  63. *
  64. * @param mixed $id
  65. *
  66. * @return Show
  67. */
  68. protected function detail($id)
  69. {
  70. $show = new Show(Tenant::query()->findOrFail($id));
  71. $show->field('id');
  72. $show->field('name');
  73. $show->field('company_name');
  74. $show->field('email');
  75. $show->field('tenancy_db_connection');
  76. $show->field('expired_at');
  77. $show->field('created_at');
  78. $show->field('updated_at');
  79. $show->domains('domains', function ($domain) {
  80. $domain->id();
  81. $domain->domain();
  82. $domain->created_at();
  83. $domain->updated_at();
  84. $domain->resource('/admin/domain');
  85. });
  86. $show->users('users', function ($user) {
  87. $user->id();
  88. $user->username();
  89. $user->created_at();
  90. $user->updated_at();
  91. $user->resource('/admin/globalUser');
  92. });
  93. return $show;
  94. }
  95. /**
  96. * Make a form builder.
  97. *
  98. * @return Form
  99. */
  100. protected function form()
  101. {
  102. $databaseConfig = config('database.connections');
  103. $databaseConnections = [];
  104. foreach ($databaseConfig as $key => $item) {
  105. $databaseConnections[$key] = $key;
  106. }
  107. $form = new Form(new Tenant(['domains', 'users']));
  108. // 从URL中获取 tenant_id
  109. $tenantId = request()->route('tenant_id');
  110. $form->tab('basicInfo', function (Form $form) use ($databaseConnections, $tenantId) {
  111. $form->text('id')->rules('required')->default($tenantId); // 设置默认值为 tenant_id
  112. $form->text('name')->required();
  113. $form->text('company_name')->icon('')->required();
  114. $form->text('email');
  115. $form->radio('tenancy_db_connection')
  116. ->options($databaseConnections)->default('mysql')->required();
  117. $form->datetime('expired_at');
  118. })->tab('domains', function (Form $form) {
  119. $form->hasMany('domains', '', function (Form\NestedForm $form) {
  120. $form->text('domain')->required();
  121. });
  122. });
  123. return $form;
  124. }
  125. }