ControllerHasDeviceRelatedGrid.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Traits;
  3. use App\Admin\Repositories\PartTrack;
  4. use App\Admin\Repositories\ServiceTrack;
  5. use App\Admin\Repositories\SoftwareTrack;
  6. use App\Support\Data;
  7. use Dcat\Admin\Grid;
  8. trait ControllerHasDeviceRelatedGrid
  9. {
  10. /**
  11. * 查看某个设备下面的全部关联配件&软件&服务程序,并且返回它们的渲染集合.
  12. *
  13. * @param $device_id
  14. *
  15. * @return array
  16. */
  17. public static function hasDeviceRelated($device_id): array
  18. {
  19. $result = [];
  20. // 配件
  21. $grid = Grid::make(new PartTrack(['part', 'part.category', 'part.vendor']), function (Grid $grid) use ($device_id) {
  22. $grid->model()->where('device_id', '=', $device_id);
  23. $grid->tableCollapse(false);
  24. $grid->withBorder();
  25. $grid->column('id');
  26. $grid->column('part.category.name');
  27. $grid->column('part.asset_number')->link(function () {
  28. if (!empty($this->part)) {
  29. return admin_route('part.records.show', [$this->part['id']]);
  30. }
  31. });
  32. $grid->column('part.specification');
  33. $grid->column('part.sn');
  34. $grid->column('part.vendor.name');
  35. $grid->disableToolbar();
  36. $grid->disableBatchActions();
  37. $grid->disableRowSelector();
  38. $grid->disableActions();
  39. });
  40. $result['part'] = $grid;
  41. // 软件
  42. $grid = Grid::make(new SoftwareTrack(['software', 'software.category', 'software.vendor']), function (Grid $grid) use ($device_id) {
  43. $grid->model()->where('device_id', '=', $device_id);
  44. $grid->tableCollapse(false);
  45. $grid->withBorder();
  46. $grid->column('id');
  47. $grid->column('software.category.name');
  48. $grid->column('software.name')->link(function () {
  49. if (!empty($this->software)) {
  50. return admin_route('software.records.show', [$this->software['id']]);
  51. }
  52. });
  53. $grid->column('software.version');
  54. $grid->column('software.distribution')->using(Data::distribution());
  55. $grid->column('software.vendor.name');
  56. $grid->disableToolbar();
  57. $grid->disableBatchActions();
  58. $grid->disableRowSelector();
  59. $grid->disableActions();
  60. });
  61. $result['software'] = $grid;
  62. // 服务
  63. $grid = Grid::make(new ServiceTrack(['service']), function (Grid $grid) use ($device_id) {
  64. $grid->model()->where('device_id', '=', $device_id);
  65. $grid->tableCollapse(false);
  66. $grid->withBorder();
  67. $grid->column('id');
  68. $grid->column('service.name')->link(function () {
  69. if (!empty($this->service)) {
  70. return admin_route('service.records.show', [$this->service['id']]);
  71. }
  72. });
  73. $grid->disableToolbar();
  74. $grid->disableBatchActions();
  75. $grid->disableRowSelector();
  76. $grid->disableActions();
  77. });
  78. $result['service'] = $grid;
  79. return $result;
  80. }
  81. }