TenantController.php 4.1 KB

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