diff --git a/modules/Develop/Support/ModuleInstall.php b/modules/Develop/Support/ModuleInstall.php index e903388..0d47ab4 100644 --- a/modules/Develop/Support/ModuleInstall.php +++ b/modules/Develop/Support/ModuleInstall.php @@ -5,6 +5,7 @@ namespace Modules\Develop\Support; use Catch\CatchAdmin; use Catch\Exceptions\FailedException; use Catch\Facade\Zipper; +use Illuminate\Support\Facades\File; /** * module install @@ -63,5 +64,7 @@ class ModuleInstall $zipRepository->getArchive()->extractTo(CatchAdmin::getModulePath($title)); $this->installWithTitle($title); + + File::delete($zip); } } diff --git a/modules/Permissions/Models/Permissions.php b/modules/Permissions/Models/Permissions.php index 238600a..2130799 100644 --- a/modules/Permissions/Models/Permissions.php +++ b/modules/Permissions/Models/Permissions.php @@ -7,6 +7,7 @@ namespace Modules\Permissions\Models; use Catch\Base\CatchModel as Model; use Catch\CatchAdmin; use Catch\Enums\Status; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Relations\HasMany; use Modules\Permissions\Enums\MenuStatus; use Modules\Permissions\Enums\MenuType; @@ -34,19 +35,19 @@ class Permissions extends Model { protected $table = 'permissions'; - protected $fillable = ['id', 'parent_id', 'permission_name', 'route', 'icon', 'module', 'permission_mark', 'component', 'redirect', 'keepalive', 'type', 'hidden', 'sort', 'creator_id', 'created_at', 'updated_at', 'deleted_at']; + protected $fillable = ['id', 'parent_id', 'permission_name', 'route', 'icon', 'module', 'permission_mark', 'component', 'redirect', 'keepalive', 'type', 'hidden', 'is_inner', 'sort', 'creator_id', 'created_at', 'updated_at', 'deleted_at']; /** * @var array */ - protected array $fields = ['id','parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','hidden','sort','created_at','updated_at']; + protected array $fields = ['id','parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','hidden','is_inner','sort','created_at','updated_at']; protected bool $isPaginate = false; /** * @var array */ - protected array $form = ['parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','hidden','sort']; + protected array $form = ['parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','is_inner', 'hidden','sort']; /** * @var array @@ -89,6 +90,17 @@ class Permissions extends Model 'status' => MenuStatus::class ]; + /** + * is inner + * + * @return Attribute + */ + public function isInner(): Attribute + { + return Attribute::make( + get: fn($value) => $value == 1 + ); + } /** * is hidden diff --git a/modules/Permissions/Providers/Installer.php b/modules/Permissions/Providers/Installer.php index 2b79edb..d82aa1f 100644 --- a/modules/Permissions/Providers/Installer.php +++ b/modules/Permissions/Providers/Installer.php @@ -10,8 +10,9 @@ class Installer extends ModuleInstaller { // TODO: Implement info() method. return [ - 'name' => '权限管理', - 'path' => 'Permissions', + 'title' => '权限管理', + 'name' => 'permissions', + 'path' => 'permissions', 'keywords' => '权限, 角色, 部门', 'description' => '权限管理模块', 'provider' => PermissionsServiceProvider::class diff --git a/modules/Permissions/database/migrations/2022_12_07_103318_create_permissions.php b/modules/Permissions/database/migrations/2022_12_07_103318_create_permissions.php index d723bfe..e34eccd 100644 --- a/modules/Permissions/database/migrations/2022_12_07_103318_create_permissions.php +++ b/modules/Permissions/database/migrations/2022_12_07_103318_create_permissions.php @@ -26,10 +26,11 @@ return new class () extends Migration { $table->string('permission_mark', 100)->default('')->comment('权限标识,使用 @ 分割'); $table->string('component')->comment('组件'); $table->string('redirect')->nullable()->comment('跳转地址'); - $table->tinyInteger('keepalive')->default('1')->comment('1 缓存 2 不缓存'); - $table->tinyInteger('type')->default('1')->comment('1 目录 2 菜单 3 按钮'); - $table->tinyInteger('hidden')->default('1')->comment('1 显示 2 隐藏'); - $table->integer('sort')->default('1')->comment('排序'); + $table->tinyInteger('keepalive')->default(1)->comment('1 缓存 2 不缓存'); + $table->tinyInteger('type')->default(1)->comment('1 目录 2 菜单 3 按钮'); + $table->tinyInteger('is_inner')->default(2)->comment('1 是 2 否'); + $table->tinyInteger('hidden')->default(1)->comment('1 显示 2 隐藏'); + $table->integer('sort')->default(1)->comment('排序'); $table->creatorId(); $table->createdAt(); $table->updatedAt(); diff --git a/modules/Permissions/database/seeder/PermissionsMenusSeeder.php b/modules/Permissions/database/seeder/PermissionsMenusSeeder.php new file mode 100644 index 0000000..27bde15 --- /dev/null +++ b/modules/Permissions/database/seeder/PermissionsMenusSeeder.php @@ -0,0 +1,601 @@ +menus(); + + importTreeData($menus, 'permissions'); + } + + + public function menus(): array + { + return array ( + 0 => + array ( + 'id' => 1, + 'parent_id' => 0, + 'permission_name' => '权限管理', + 'route' => '/permission', + 'icon' => 'arrow-down-on-square-stack', + 'module' => 'permissions', + 'permission_mark' => '', + 'component' => '/admin/layout/index.vue', + 'redirect' => NULL, + 'keepalive' => 1, + 'type' => 1, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 0, + 'created_at' => 1670579928, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 2, + 'parent_id' => 1, + 'permission_name' => '角色管理', + 'route' => 'roles', + 'icon' => 'arrow-left-circle', + 'module' => 'permissions', + 'permission_mark' => 'Roles', + 'component' => '/Permissions/views/roles/index.vue', + 'redirect' => NULL, + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 6, + 'creator_id' => 0, + 'created_at' => 1670579968, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 53, + 'parent_id' => 2, + 'permission_name' => '列表', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Roles@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671526858, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 54, + 'parent_id' => 2, + 'permission_name' => '新增', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Roles@store', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 2, + 'creator_id' => 1, + 'created_at' => 1671526858, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 2 => + array ( + 'id' => 55, + 'parent_id' => 2, + 'permission_name' => '读取', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Roles@show', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 3, + 'creator_id' => 1, + 'created_at' => 1671526858, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 3 => + array ( + 'id' => 56, + 'parent_id' => 2, + 'permission_name' => '更新', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Roles@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 4, + 'creator_id' => 1, + 'created_at' => 1671526858, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 4 => + array ( + 'id' => 57, + 'parent_id' => 2, + 'permission_name' => '删除', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Roles@destroy', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 5, + 'creator_id' => 1, + 'created_at' => 1671526858, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + ), + ), + 1 => + array ( + 'id' => 3, + 'parent_id' => 1, + 'permission_name' => '菜单管理', + 'route' => 'permissions', + 'icon' => 'finger-print', + 'module' => 'permissions', + 'permission_mark' => 'Permissions', + 'component' => '/Permissions/views/permissions/index.vue', + 'redirect' => NULL, + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 0, + 'created_at' => 1670641371, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 27, + 'parent_id' => 3, + 'permission_name' => '列表', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671524755, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 28, + 'parent_id' => 3, + 'permission_name' => '新增', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@store', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 2, + 'creator_id' => 1, + 'created_at' => 1671524755, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 2 => + array ( + 'id' => 29, + 'parent_id' => 3, + 'permission_name' => '读取', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@show', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 3, + 'creator_id' => 1, + 'created_at' => 1671524755, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 3 => + array ( + 'id' => 30, + 'parent_id' => 3, + 'permission_name' => '更新', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 4, + 'creator_id' => 1, + 'created_at' => 1671524756, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 4 => + array ( + 'id' => 31, + 'parent_id' => 3, + 'permission_name' => '删除', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@destroy', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 5, + 'creator_id' => 1, + 'created_at' => 1671524756, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 5 => + array ( + 'id' => 32, + 'parent_id' => 3, + 'permission_name' => '禁用/启用', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Permissions@enable', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 6, + 'creator_id' => 1, + 'created_at' => 1671524756, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + ), + ), + 2 => + array ( + 'id' => 4, + 'parent_id' => 1, + 'permission_name' => '岗位管理', + 'route' => 'jobs', + 'icon' => 'globe-americas', + 'module' => 'permissions', + 'permission_mark' => 'Jobs', + 'component' => '/Permissions/views/jobs/index.vue', + 'redirect' => NULL, + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 0, + 'created_at' => 1670641399, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 21, + 'parent_id' => 4, + 'permission_name' => '列表', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 22, + 'parent_id' => 4, + 'permission_name' => '新增', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@store', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 2, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 2 => + array ( + 'id' => 23, + 'parent_id' => 4, + 'permission_name' => '读取', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@show', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 3, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 3 => + array ( + 'id' => 24, + 'parent_id' => 4, + 'permission_name' => '更新', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 4, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 4 => + array ( + 'id' => 25, + 'parent_id' => 4, + 'permission_name' => '删除', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@destroy', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 5, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 5 => + array ( + 'id' => 26, + 'parent_id' => 4, + 'permission_name' => '禁用/启用', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Jobs@enable', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 6, + 'creator_id' => 1, + 'created_at' => 1671524747, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + ), + ), + 3 => + array ( + 'id' => 5, + 'parent_id' => 1, + 'permission_name' => '部门管理', + 'route' => 'departments', + 'icon' => 'table-cells', + 'module' => 'permissions', + 'permission_mark' => 'Departments', + 'component' => '/Permissions/views/departments/index.vue', + 'redirect' => NULL, + 'keepalive' => 1, + 'type' => 2, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 0, + 'created_at' => 1670641426, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + 'children' => + array ( + 0 => + array ( + 'id' => 12, + 'parent_id' => 5, + 'permission_name' => '列表', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@index', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671501850, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 1 => + array ( + 'id' => 13, + 'parent_id' => 5, + 'permission_name' => '新增', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@store', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671501861, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 2 => + array ( + 'id' => 14, + 'parent_id' => 5, + 'permission_name' => '读取', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@show', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671501872, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 3 => + array ( + 'id' => 15, + 'parent_id' => 5, + 'permission_name' => '更新', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@update', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671517311, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 4 => + array ( + 'id' => 16, + 'parent_id' => 5, + 'permission_name' => '删除', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@destroy', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 1, + 'creator_id' => 1, + 'created_at' => 1671517324, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + 5 => + array ( + 'id' => 17, + 'parent_id' => 5, + 'permission_name' => '禁用/启用', + 'route' => '', + 'icon' => '', + 'module' => 'permissions', + 'permission_mark' => 'Departments@enable', + 'component' => '', + 'redirect' => '', + 'keepalive' => 1, + 'type' => 3, + 'hidden' => 1, + 'sort' => 6, + 'creator_id' => 1, + 'created_at' => 1671524493, + 'updated_at' => 1672798090, + 'deleted_at' => 0, + ), + ), + ), + ), + ), +); + } +}; diff --git a/modules/Permissions/views/permissions/form/create.vue b/modules/Permissions/views/permissions/form/create.vue index f39013d..a8e9d78 100644 --- a/modules/Permissions/views/permissions/form/create.vue +++ b/modules/Permissions/views/permissions/form/create.vue @@ -32,6 +32,20 @@ + + + {{ item.label }} + +
@@ -111,12 +125,14 @@ const closeSelectIcon = () => { const defaultSort = 1 const defaultKeepalive = 1 const defaultHidden = 1 - +const defaultIsInner = 2 // 初始化 formData.value.sort = defaultSort formData.value.keepalive = defaultKeepalive formData.value.type = MenuType.TOP_TYPE formData.value.hidden = defaultHidden +formData.value.is_inner = defaultIsInner + // 默认目录 const isTop = ref(true) const isMenu = ref(false) diff --git a/modules/Permissions/views/router.ts b/modules/Permissions/views/router.ts new file mode 100644 index 0000000..6f7c6ee --- /dev/null +++ b/modules/Permissions/views/router.ts @@ -0,0 +1,38 @@ +import { RouteRecordRaw } from 'vue-router' + +// @ts-ignore +const router: RouteRecordRaw[] = [ + { + path: '/permission', + component: () => import('/admin/layout/index.vue'), + meta: { title: '权限管理', icon: 'user' }, + children: [ + { + path: 'roles', + name: 'roles', + meta: { title: '角色管理', icon: 'home' }, + component: () => import('./roles/index.vue'), + }, + { + path: 'permissions', + name: 'permissions', + meta: { title: '菜单管理', icon: 'home' }, + component: () => import('./permissions/index.vue'), + }, + { + path: 'jobs', + name: 'jobs', + meta: { title: '岗位管理', icon: 'home' }, + component: () => import('./jobs/index.vue'), + }, + { + path: 'departments', + name: 'departments', + meta: { title: '部门管理', icon: 'home' }, + component: () => import('./departments/index.vue'), + }, + ], + }, +] + +// export default router