You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.8 KiB

1 week ago
<?php
namespace Database\Seeders;
use App\Models\Menu;
use App\Models\ResearchDirection;
use App\Models\Role;
use App\Models\Teacher;
use Illuminate\Database\Seeder;
class SystemExtensionSeeder extends Seeder
{
public function run(): void
{
$gridRole = Role::query()->updateOrCreate(
['code' => 'grid_member'],
[
'name' => '网格员',
'remark' => '仅可编辑与跟进已配置高校及研究方向范围内的老师',
'sort' => 100,
'status' => 1,
]
);
$systemRoot = Menu::query()->where('path', '/system')->whereNull('parent_id')->first();
if (! $systemRoot) {
return;
}
$directionMenu = Menu::query()->firstOrCreate(
['path' => '/system/research-directions', 'parent_id' => $systemRoot->id],
[
'name' => 'SystemResearchDirections',
'title' => '研究方向',
'component' => 'system/research-directions/index',
'icon' => 'Collection',
'sort' => 45,
'visible' => 1,
'keep_alive' => 0,
'permission_code' => null,
'status' => 1,
]
);
$gridMenu = Menu::query()->firstOrCreate(
['path' => '/system/grid-members', 'parent_id' => $systemRoot->id],
[
'name' => 'SystemGridMembers',
'title' => '网格员管理',
'component' => 'system/grid-members/index',
'icon' => 'UserFilled',
'sort' => 46,
'visible' => 1,
'keep_alive' => 0,
'permission_code' => null,
'status' => 1,
]
);
$superAdmin = Role::query()->where('code', 'super_admin')->first();
if ($superAdmin) {
$superAdmin->menus()->syncWithoutDetaching([
$directionMenu->id,
$gridMenu->id,
]);
}
$talentMenus = Menu::query()
->whereIn('path', ['/talent', '/teachers', '/demands'])
->pluck('id')
->all();
$gridRole->menus()->syncWithoutDetaching($talentMenus);
$gridRole->menus()->detach($directionMenu->id);
$this->seedResearchDirectionsFromTeachers();
}
protected function seedResearchDirectionsFromTeachers(): void
{
$names = \Illuminate\Support\Facades\DB::table('research_directions')
->orderBy('name')
->pluck('name');
$sort = 0;
foreach ($names as $name) {
ResearchDirection::query()->firstOrCreate(
['name' => $name],
['sort' => $sort++, 'status' => 1]
);
}
}
}