SiteAlbumFolder.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. namespace App\Admin\Repositories;
  3. use App\Models\SiteAlbumFolder as Model;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. class SiteAlbumFolder extends EloquentRepository
  6. {
  7. /**
  8. * Model.
  9. *
  10. * @var string
  11. */
  12. protected $eloquentClass = Model::class;
  13. /*
  14. * 改写列表显示返回的数据
  15. */
  16. public function get(Grid\Model|\Dcat\Admin\Grid\Model $model)
  17. {
  18. // 获取模型对象
  19. $obj = $this->model();
  20. // 获取数据
  21. $tree = $obj->orderBy('order', 'desc')->orderBy('id', 'asc')->get();
  22. $treeData = $tree->toArray();
  23. // 构建树形结构
  24. $data=buildTree($treeData);
  25. // 转换成一维数组
  26. $data=flattenTree($data);
  27. return $model->makePaginator(
  28. count($data), // 传入总记录数
  29. $data // 传入数据二维数组
  30. );
  31. }
  32. public static function selectMainOptions(\Closure $closure = null)
  33. {
  34. if (!$closure) {
  35. $closure = function ($query) {
  36. $query = $query->where("enabled", 1)->orderBy('order', 'desc')->orderBy('id', 'asc');
  37. return $query;
  38. };
  39. }
  40. $selectOptions = Model::class::selectOptions($closure);
  41. //只显示2层
  42. foreach ($selectOptions as $key => $value) {
  43. if (substr_count($value,'&nbsp;') > 8) {
  44. unset($selectOptions[$key]);
  45. }
  46. }
  47. return $selectOptions;
  48. }
  49. // 调用模型方法
  50. public static function selectOptions(\Closure $closure = null,$lan = 'cn')
  51. {
  52. if (!$closure) {
  53. $closure = function ($query) {
  54. $query = $query->where('enabled', 1);
  55. $query = $query->orderBy('order', 'desc')->orderBy('id', 'asc');
  56. return $query;
  57. };
  58. }
  59. $model = new Model();
  60. if ($lan == 'en') {
  61. $selectOptions = $model->selectOptionsEn($closure);
  62. } else {
  63. $selectOptions = $model->selectOptions($closure);
  64. }
  65. return $selectOptions;
  66. }
  67. public static function siteAlbumFolderSelectOptions($inIds) {
  68. $ids = self::findIdsWithParents($inIds);
  69. $result = self::selectOptions(function ($query) use ($ids) {
  70. $query = $query->wherein('id', $ids);
  71. $query = $query->where('enabled', 1);
  72. $query = $query->orderBy('order', 'desc')->orderBy('id', 'asc');
  73. return $query;
  74. });
  75. unset($result[0]);
  76. return $result;
  77. }
  78. public static function siteAlbumFolderSelectOptionsEn($inIds) {
  79. $ids = self::findIdsWithParents($inIds);
  80. $result = self::selectOptions(function ($query) use ($ids) {
  81. $query = $query->wherein('id', $ids);
  82. $query = $query->where('enabled', 1);
  83. $query = $query->orderBy('order', 'desc')->orderBy('id', 'asc');
  84. return $query;
  85. },'en');
  86. unset($result[0]);
  87. return $result;
  88. }
  89. public static function siteAlbumFolderSelectOptionsAll($lang = 'en') {
  90. $result = self::selectOptions(function ($query) {
  91. $query = $query->where('enabled', 1);
  92. $query = $query->orderBy('order', 'desc')->orderBy('id', 'asc');
  93. return $query;
  94. },$lang);
  95. unset($result[0]);
  96. return $result;
  97. }
  98. /**
  99. * 递归查找包括 $inIds 在内的所有记录及其父 ID 的记录
  100. *
  101. * @param array $inIds 初始 ID 数组
  102. * @param array $resultIds 结果 ID 数组(递归时使用)
  103. * @return array
  104. */
  105. public static function findIdsWithParents(array $inIds, array &$resultIds = []): array
  106. {
  107. $model = new Model();
  108. // 查询当前 ID 数组对应的记录
  109. $folders = $model->whereIn('id', $inIds)->get();
  110. foreach ($folders as $folder) {
  111. // 如果当前记录的 ID 尚未加入结果数组,则加入
  112. if (!in_array($folder->id, $resultIds)) {
  113. $resultIds[] = $folder->id;
  114. }
  115. // 如果当前记录有父 ID,则递归查找父记录
  116. if ($folder->parent_id) {
  117. self::findIdsWithParents([$folder->parent_id], $resultIds);
  118. }
  119. }
  120. return $resultIds;
  121. }
  122. public static function getAllFolderTabs()
  123. {
  124. $model = new Model();
  125. $folders = $model->where('enabled', 1)->orderBy('order', 'desc')->orderBy('id', 'asc')->get();
  126. $tabs = [];
  127. foreach ($folders as $folder) {
  128. $tabs[$folder->id] = json_decode($folder->show_tabs);
  129. }
  130. return $tabs;
  131. }
  132. }