SiteMenu.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace App\Models;
  3. use Carbon\Carbon;
  4. use Dcat\Admin\Traits\HasDateTimeFormatter;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Dcat\Admin\Traits\ModelTree;
  7. class SiteMenu extends Model
  8. {
  9. use HasDateTimeFormatter;
  10. use ModelTree;
  11. protected $table = 'site_menu';
  12. protected $parentColumn = 'parent_id';
  13. // 排序字段名称,默认值为 order
  14. protected $orderColumn = 'order';
  15. // 标题字段名称,默认值为 title
  16. protected $titleColumn = 'title';
  17. protected $casts = [
  18. 'created_at' => 'datetime:Y-m-d H:i:s',
  19. 'updated_at' => 'datetime:Y-m-d H:i:s',
  20. 'menu_config' => 'json', // 将 menu_config 字段转换为数组
  21. ];
  22. protected $fillable = [
  23. 'parent_id',
  24. 'order',
  25. 'title',
  26. 'uri',
  27. 'show',
  28. 'menu_type',
  29. 'menu_config',
  30. 'menu_location',
  31. 'dist_id',
  32. ];
  33. /**
  34. * @return 批量生成菜单
  35. */
  36. public function createMenuBatch($data) {
  37. $parentIdArray = [];
  38. $i = 0;
  39. foreach ($data as $item) {
  40. $parentId = $item['parentId'] == 0 ? 0 : $parentIdArray[$item['parentId']];
  41. $i++;
  42. $row = $this->create([
  43. 'parent_id' => $parentId,
  44. 'title' => $item['title'],
  45. 'order' => $i,
  46. 'dist_id'=>$item['distId'],
  47. 'uri' => $item['uri'],
  48. 'menu_type' => $item['menuType'],
  49. 'menu_config' => $item['menuConfig'],
  50. 'menu_location' => $item['menuLocation'],//0顶部 1底部
  51. 'show' => 1,
  52. 'created_at'=>Carbon::now(),
  53. 'updated_at'=>Carbon::now(),
  54. ]);
  55. $parentIdArray[$i] = $row->id;
  56. }
  57. }
  58. public function generateUri($menuType,$menuConfig,$distId,$isId = true) {
  59. switch ($menuType) {
  60. case 0: //选择产品
  61. $uri ="/";
  62. break;
  63. case 1: //集合
  64. if ($menuConfig['collections_type'] == 0) {
  65. $distProductCategory = new DistProductCategory();
  66. $row = $distProductCategory->where('dist_id', $distId)->where('id', $menuConfig['product_category'])->first();
  67. //产品分类
  68. $slug = $isId ? $row->id : $row->slug;
  69. $uri = $row ? config('dictionary.site_url.product_category').'/'.$slug : "/";
  70. } else if ($menuConfig['collections_type'] == 1) {
  71. $sitePagesTag = new SitePagesTag();
  72. $row = $sitePagesTag->where('dist_id', $distId)->where('id', $menuConfig['pages_tag'])->first();
  73. $slug = $isId ? $row->id : $row->slug;
  74. //文章标签
  75. $uri = $row ? config('dictionary.site_url.tags').'/'.$slug : "/";
  76. } else if ($menuConfig['collections_type'] == 2) {
  77. $distProductCategory = new DistVideoCategory();
  78. $row = $distProductCategory->where('dist_id', $distId)->where('id', $menuConfig['video_category'])->first();
  79. $slug = $isId ? $row->id : $row->slug;
  80. $uri = $row ? config('dictionary.site_url.video_category').'/'.$slug : "/";
  81. }
  82. break;
  83. case 2: //选择产品
  84. $distProduct = new DistProduct();
  85. $row = $distProduct->where('dist_id', $distId)->where('id', $menuConfig['product'])->first();
  86. $slug = $isId ? $row->id : $row->slug;
  87. $uri = $row ? config('dictionary.site_url.products').'/' .$slug : "/";
  88. break;
  89. case 3: //选择页面
  90. $sitePages = new SitePages();
  91. $row = $sitePages->where('dist_id', $distId)->where('id', $menuConfig['pages'])->first();
  92. $slug = $isId ? $row->id : $row->slug;
  93. $uri = $row ? config('dictionary.site_url.pages').'/'.$slug : "/";
  94. break;
  95. case 4: //选择页面
  96. $sitePages = new SitePages();
  97. $row = $sitePages->where('dist_id', $distId)->where('id', $menuConfig['landing_page'])->first();
  98. $slug = $isId ? $row->id : $row->slug;
  99. $uri = $row ? config('dictionary.site_url.pages').'/'.$slug : "/";
  100. break;
  101. case 5: //视频
  102. $distVideo = new DistVideo();
  103. $row = $distVideo->where('dist_id', $distId)->where('id', $menuConfig['videos'])->first();
  104. $slug = $isId ? $row->id : $row->slug;
  105. $uri = $row ? config('dictionary.site_url.video').'/'.$slug : "/";
  106. break;
  107. case 10: //url
  108. $uri = $menuConfig['url'];
  109. break;
  110. }
  111. return $uri;
  112. }
  113. }