ControllerHasCustomColumns.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace App\Traits;
  3. use App\Grid;
  4. use App\Models\CustomColumn;
  5. use App\Show;
  6. use Dcat\Admin\Form\Field;
  7. use Dcat\Admin\Form\Row;
  8. trait ControllerHasCustomColumns
  9. {
  10. /**
  11. * 构建自定义字段Form结构.
  12. *
  13. * @param $custom_column
  14. * @param \Dcat\Admin\Form\Row $row
  15. * @return \Dcat\Admin\Form\Field
  16. */
  17. public static function makeForm($custom_column, Row $row): Field
  18. {
  19. switch ($custom_column->type) {
  20. case 'date':
  21. $row = $row->date($custom_column->name, $custom_column->nick_name);
  22. break;
  23. case 'dateTime':
  24. $row = $row->datetime($custom_column->name, $custom_column->nick_name);
  25. break;
  26. case 'integer':
  27. $row = $row->number($custom_column->name, $custom_column->nick_name);
  28. break;
  29. case 'double':
  30. case 'float':
  31. $row = $row->currency($custom_column->name, $custom_column->nick_name);
  32. break;
  33. case 'longText':
  34. $row = $row->textarea($custom_column->name, $custom_column->nick_name);
  35. break;
  36. case 'select':
  37. $options = [];
  38. foreach ($custom_column->select_options as $select_option) {
  39. $options[$select_option['item']] = $select_option['item'];
  40. }
  41. $row = $row->select($custom_column->name, $custom_column->nick_name)
  42. ->options($options);
  43. break;
  44. default:
  45. $row = $row->text($custom_column->name, $custom_column->nick_name);
  46. }
  47. if ($custom_column->must == 1) {
  48. $row->width()->required();
  49. }
  50. return $row;
  51. }
  52. /**
  53. * 构建自定义字段Detail结构.
  54. *
  55. * @param $table_name
  56. * @param Show $show
  57. * @param $column_sorts
  58. * @return Show
  59. */
  60. public static function makeDetail($table_name, Show $show, $column_sorts): Show
  61. {
  62. foreach (self::getCustomColumns($table_name) as $custom_column) {
  63. $show->field($custom_column->name, $custom_column->nick_name, $column_sorts);
  64. }
  65. return $show;
  66. }
  67. /**
  68. * 获取自定义字段.
  69. *
  70. * @param $table_name
  71. *
  72. * @return mixed
  73. */
  74. public static function getCustomColumns($table_name): mixed
  75. {
  76. return CustomColumn::where('table_name', $table_name)->get();
  77. }
  78. /**
  79. * 构建自定义字段Grid结构.
  80. *
  81. * @param $table_name
  82. * @param Grid $grid
  83. * @param $column_sorts
  84. *
  85. * @return Grid
  86. */
  87. public static function makeGrid($table_name, Grid $grid, $column_sorts): Grid
  88. {
  89. foreach (self::getCustomColumns($table_name) as $custom_column) {
  90. $grid->column($custom_column->name, $custom_column->nick_name, $column_sorts);
  91. }
  92. return $grid;
  93. }
  94. /**
  95. * 构建自定义字段QuickSearch结构.
  96. *
  97. * @param $table_name
  98. *
  99. * @return array
  100. */
  101. public static function makeQuickSearch($table_name): array
  102. {
  103. $keys = [];
  104. foreach (self::getCustomColumns($table_name) as $custom_column) {
  105. array_push($keys, $custom_column->name);
  106. }
  107. return $keys;
  108. }
  109. /**
  110. * 构建自定义字段Filter结构.
  111. *
  112. * @param $table_name
  113. * @param $filter
  114. */
  115. public static function makeFilter($table_name, $filter)
  116. {
  117. foreach (self::getCustomColumns($table_name) as $custom_column) {
  118. if ($custom_column->type == 'select') {
  119. $options = [];
  120. foreach ($custom_column->select_options as $select_option) {
  121. $options[$select_option['item']] = $select_option['item'];
  122. }
  123. $filter->equal($custom_column->name, $custom_column->nick_name)->select($options);
  124. } else {
  125. $filter->equal($custom_column->name, $custom_column->nick_name);
  126. }
  127. }
  128. }
  129. }