MenuConfig.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. class MenuConfig extends Model
  6. {
  7. use HasFactory;
  8. protected $table = 'menu_configs';
  9. protected $fillable = [
  10. 'menu_key',
  11. 'menu_label',
  12. 'menu_group',
  13. 'menu_url',
  14. 'sort_order',
  15. 'is_managed',
  16. 'is_active',
  17. 'description',
  18. ];
  19. protected $casts = [
  20. 'is_managed' => 'boolean',
  21. 'is_active' => 'boolean',
  22. 'sort_order' => 'integer',
  23. ];
  24. /**
  25. * 获取所有启用的菜单配置
  26. */
  27. public static function getActiveConfigs()
  28. {
  29. return self::where('is_active', true)
  30. ->orderBy('sort_order')
  31. ->get();
  32. }
  33. /**
  34. * 获取所有启用的受管理菜单配置
  35. */
  36. public static function getManagedConfigs()
  37. {
  38. return self::where('is_active', true)
  39. ->where('is_managed', true)
  40. ->orderBy('sort_order')
  41. ->get();
  42. }
  43. /**
  44. * 检查菜单是否受管理
  45. */
  46. public static function isManaged(string $menuKey): bool
  47. {
  48. $config = self::where('menu_key', $menuKey)->first();
  49. return $config && $config->is_managed && $config->is_active;
  50. }
  51. /**
  52. * 切换菜单管理状态
  53. */
  54. public static function toggleManaged(string $menuKey): bool
  55. {
  56. $config = self::where('menu_key', $menuKey)->first();
  57. if ($config) {
  58. $config->is_managed = !$config->is_managed;
  59. return $config->save();
  60. }
  61. return false;
  62. }
  63. /**
  64. * 初始化默认菜单配置
  65. */
  66. public static function initializeDefaultConfigs(): void
  67. {
  68. $defaultMenus = [
  69. 'dashboard' => [
  70. 'label' => '仪表盘',
  71. 'group' => '管理',
  72. 'url' => '/admin',
  73. 'sort' => 0,
  74. ],
  75. 'exam-history' => [
  76. 'label' => '考试历史',
  77. 'group' => '管理',
  78. 'url' => '/admin/exam-history',
  79. 'sort' => 1,
  80. ],
  81. 'exam-analysis' => [
  82. 'label' => '考试分析',
  83. 'group' => '分析',
  84. 'url' => '/admin/exam-analysis',
  85. 'sort' => 2,
  86. ],
  87. 'ocr-paper-grading' => [
  88. 'label' => 'OCR试卷批改',
  89. 'group' => '工具',
  90. 'url' => '/admin/ocr-paper-grading',
  91. 'sort' => 3,
  92. ],
  93. 'intelligent-exam-generation' => [
  94. 'label' => '智能出卷',
  95. 'group' => '工具',
  96. 'url' => '/admin/intelligent-exam-generation',
  97. 'sort' => 4,
  98. ],
  99. 'knowledge-graph' => [
  100. 'label' => '知识图谱',
  101. 'group' => '分析',
  102. 'url' => '/admin/knowledge-graph',
  103. 'sort' => 5,
  104. ],
  105. 'student-management' => [
  106. 'label' => '学生管理',
  107. 'group' => '管理',
  108. 'url' => '/admin/student-management',
  109. 'sort' => 6,
  110. ],
  111. 'teacher-management' => [
  112. 'label' => '老师管理',
  113. 'group' => '管理',
  114. 'url' => '/admin/teacher-management',
  115. 'sort' => 7,
  116. ],
  117. ];
  118. foreach ($defaultMenus as $key => $data) {
  119. self::updateOrCreate(
  120. ['menu_key' => $key],
  121. [
  122. 'menu_label' => $data['label'],
  123. 'menu_group' => $data['group'],
  124. 'menu_url' => $data['url'],
  125. 'sort_order' => $data['sort'],
  126. 'is_managed' => true,
  127. 'is_active' => true,
  128. ]
  129. );
  130. }
  131. }
  132. }