TenantController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. $user->panel()->tools(function ($tools) {
  93. $tools->disableEdit();
  94. $tools->disableDelete();
  95. })->hide();
  96. $user->disableCreateButton();
  97. $user->disableActions();
  98. });
  99. $show->panel()->tools(function ($tools) {
  100. $tools->disableDelete();
  101. });
  102. return $show;
  103. }
  104. /**
  105. * Make a form builder.
  106. *
  107. * @return Form
  108. */
  109. protected function form()
  110. {
  111. $databaseConfig = config('database.connections');
  112. $databaseConnections = [];
  113. foreach ($databaseConfig as $key => $item) {
  114. $databaseConnections[$key] = $key;
  115. }
  116. $form = new Form(new Tenant(['domains', 'users']));
  117. // 从URL中获取 tenant_id
  118. $tenantId = request()->route('tenant_id');
  119. $form->tab('basicInfo', function (Form $form) use ($databaseConnections, $tenantId) {
  120. $form->text('id')->rules('required')->default($tenantId); // 设置默认值为 tenant_id
  121. $form->text('name')->required();
  122. $form->text('company_name')->icon('fa-sitemap')->required();
  123. $form->text('email')->required();
  124. $form->radio('tenancy_db_connection')
  125. ->options($databaseConnections)->default('mysql')->required();
  126. $form->datetime('expired_at')->required();
  127. })->tab('domains', function (Form $form) {
  128. $form->hasMany('domains', '', function (Form\NestedForm $form) {
  129. $form->text('domain')->required();
  130. });
  131. });
  132. return $form;
  133. }
  134. }