TenantController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Models\GlobalUser;
  4. use App\Models\Tenant;
  5. use Encore\Admin\Controllers\AdminController;
  6. use Encore\Admin\Form;
  7. use Encore\Admin\Grid;
  8. use Encore\Admin\Show;
  9. use Encore\Admin\Widgets\Table;
  10. class TenantController extends AdminController
  11. {
  12. protected $title = '租户';
  13. protected $description = '';
  14. /**
  15. * Make a grid builder.
  16. *
  17. * @return Grid
  18. */
  19. protected function grid()
  20. {
  21. $grid = new Grid(new Tenant(['domains']));
  22. $grid->model()->orderByDesc('created_at');
  23. $databaseConfig = config('database.connections');
  24. $grid->column('id')->copyable();
  25. $grid->column('name');
  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('email');
  74. $show->field('tenancy_db_connection');
  75. $show->field('expired_at');
  76. $show->field('created_at');
  77. $show->field('updated_at');
  78. $show->domains('domains', function ($domain) {
  79. $domain->id();
  80. $domain->domain();
  81. $domain->created_at();
  82. $domain->updated_at();
  83. $domain->resource('/admin/domain');
  84. });
  85. $show->users('users', function ($user) {
  86. $user->id();
  87. $user->username();
  88. $user->created_at();
  89. $user->updated_at();
  90. $user->resource('/admin/globalUser');
  91. });
  92. return $show;
  93. }
  94. /**
  95. * Make a form builder.
  96. *
  97. * @return Form
  98. */
  99. protected function form()
  100. {
  101. $databaseConfig = config('database.connections');
  102. $databaseConnections = [];
  103. foreach ($databaseConfig as $key => $item) {
  104. $databaseConnections[$key] = $key;
  105. }
  106. $form = new Form(new Tenant(['domains', 'users']));
  107. // 从URL中获取 tenant_id
  108. $tenantId = request()->route('tenant_id');
  109. $form->tab('基本信息', function (Form $form) use ($databaseConnections, $tenantId) {
  110. $form->text('id')->rules('required')->default($tenantId); // 设置默认值为 tenant_id
  111. $form->text('name');
  112. $form->text('email');
  113. $form->radio('tenancy_db_connection')
  114. ->options($databaseConnections)->default('mysql');;
  115. $form->datetime('expired_at');
  116. })->tab('域名', function (Form $form) {
  117. $form->hasMany('domains', 'domains', function (Form\NestedForm $form) {
  118. $form->text('domain');
  119. });
  120. });
  121. $form->hasMany("users", 'users', function (Form\NestedForm $form) {
  122. $form->text('username')->value($form->id);
  123. $form->text('tenant_id')->value($form->id);
  124. });
  125. return $form;
  126. }
  127. }