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.
214 lines
7.1 KiB
214 lines
7.1 KiB
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\AdminUser;
|
|
use App\Models\Menu;
|
|
use App\Models\Role;
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class AdminInitSeeder extends Seeder
|
|
{
|
|
/**
|
|
* 首期仅同步「角色 ↔ 菜单」。
|
|
* `permissions` 表保留结构供后续按需启用接口级鉴权时再种子化与挂载中间件。
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$role = Role::query()->updateOrCreate(
|
|
['code' => 'super_admin'],
|
|
[
|
|
'name' => '超级管理员',
|
|
'remark' => '预置角色;首期按菜单授权全部系统入口(接口不做 permission 校验)',
|
|
'sort' => 0,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$workbench = Menu::query()->firstOrCreate(
|
|
['path' => '/workbench', 'parent_id' => null],
|
|
[
|
|
'name' => 'Workbench',
|
|
'title' => '工作台',
|
|
'component' => null,
|
|
'icon' => 'Monitor',
|
|
'sort' => 10,
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$dashboard = Menu::query()->updateOrCreate(
|
|
['path' => '/dashboard'],
|
|
[
|
|
'parent_id' => $workbench->id,
|
|
'name' => 'Dashboard',
|
|
'title' => '驾驶舱',
|
|
'component' => 'dashboard/index',
|
|
'icon' => 'Odometer',
|
|
'sort' => 10,
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$radarMap = Menu::query()->updateOrCreate(
|
|
['path' => '/map'],
|
|
[
|
|
'parent_id' => $workbench->id,
|
|
'name' => 'RadarMap',
|
|
'title' => '高校雷达网地图',
|
|
'component' => 'assets/map/index',
|
|
'icon' => 'MapLocation',
|
|
'sort' => 20,
|
|
'visible' => 1,
|
|
'keep_alive' => 1,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$systemRoot = Menu::query()->firstOrCreate(
|
|
['path' => '/system', 'parent_id' => null],
|
|
[
|
|
'name' => 'System',
|
|
'title' => '系统管理',
|
|
'component' => null,
|
|
'icon' => 'Setting',
|
|
'sort' => 900,
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$systemChildren = [
|
|
['/system/users', 'SystemUsers', '用户管理', 'system/users/index', 10, 'User'],
|
|
['/system/roles', 'SystemRoles', '角色管理', 'system/roles/index', 20, 'Key'],
|
|
['/system/menus', 'SystemMenus', '菜单管理', 'system/menus/index', 30, 'Menu'],
|
|
['/system/dict', 'SystemDict', '数据字典', 'system/dict/index', 40, 'Notebook'],
|
|
['/system/audit-logs', 'SystemAuditLogs', '操作日志', 'system/audit-logs/index', 50, 'Tickets'],
|
|
];
|
|
|
|
$menuIds = [$workbench->id, $dashboard->id, $radarMap->id, $systemRoot->id];
|
|
|
|
foreach ($systemChildren as $row) {
|
|
$m = Menu::query()->firstOrCreate(
|
|
['path' => $row[0], 'parent_id' => $systemRoot->id],
|
|
[
|
|
'name' => $row[1],
|
|
'title' => $row[2],
|
|
'component' => $row[3],
|
|
'icon' => $row[5],
|
|
'sort' => $row[4],
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
$menuIds[] = $m->id;
|
|
}
|
|
|
|
$opsRoot = Menu::query()->firstOrCreate(
|
|
['path' => '/operations', 'parent_id' => null],
|
|
[
|
|
'name' => 'Operations',
|
|
'title' => '运营管理',
|
|
'component' => null,
|
|
'icon' => 'Goods',
|
|
'sort' => 50,
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
$menuIds[] = $opsRoot->id;
|
|
|
|
$opsChildren = [
|
|
['/courses', 'OperationsCourses', '课程管理', 'operations/courses/index', 10, 'Notebook'],
|
|
['/activities', 'OperationsActivities', '活动管理', 'operations/activities/index', 20, 'Calendar'],
|
|
['/news', 'OperationsNews', '资讯管理', 'operations/news/index', 30, 'Reading'],
|
|
];
|
|
foreach ($opsChildren as $row) {
|
|
$m = Menu::query()->firstOrCreate(
|
|
['path' => $row[0], 'parent_id' => $opsRoot->id],
|
|
[
|
|
'name' => $row[1],
|
|
'title' => $row[2],
|
|
'component' => $row[3],
|
|
'icon' => $row[5],
|
|
'sort' => $row[4],
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
$menuIds[] = $m->id;
|
|
}
|
|
|
|
$talentRoot = Menu::query()->firstOrCreate(
|
|
['path' => '/talent', 'parent_id' => null],
|
|
[
|
|
'name' => 'Talent',
|
|
'title' => '老师库与跟进',
|
|
'component' => null,
|
|
'icon' => 'User',
|
|
'sort' => 60,
|
|
'visible' => 1,
|
|
'keep_alive' => 0,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
$menuIds[] = $talentRoot->id;
|
|
|
|
foreach (
|
|
[
|
|
['/teachers', 'Teachers', '老师库', 'teachers/index', 10, 'Avatar'],
|
|
['/demands', 'Demands', '需求管理', 'demands/index', 20, 'ChatLineRound'],
|
|
] as $row
|
|
) {
|
|
$m = Menu::query()->firstOrCreate(
|
|
['path' => $row[0], 'parent_id' => $talentRoot->id],
|
|
[
|
|
'name' => $row[1],
|
|
'title' => $row[2],
|
|
'component' => $row[3],
|
|
'icon' => $row[5],
|
|
'sort' => $row[4],
|
|
'visible' => 1,
|
|
'keep_alive' => 1,
|
|
'permission_code' => null,
|
|
'status' => 1,
|
|
]
|
|
);
|
|
$menuIds[] = $m->id;
|
|
}
|
|
|
|
Menu::query()->where('path', '/teachers/:id')->delete();
|
|
|
|
$role->menus()->sync($menuIds);
|
|
|
|
AdminUser::query()->updateOrCreate(
|
|
['username' => 'admin'],
|
|
[
|
|
'password_hash' => Hash::make('Admin@123456'),
|
|
'real_name' => '系统管理员',
|
|
'status' => 1,
|
|
]
|
|
);
|
|
|
|
$admin = AdminUser::query()->where('username', 'admin')->first();
|
|
$admin->roles()->sync([$role->id]);
|
|
}
|
|
}
|