feat: module new feat

This commit is contained in:
JaguarJack 2023-01-10 17:46:05 +08:00
parent e5e1f8bc55
commit c2f68d349f
7 changed files with 682 additions and 10 deletions

View File

@ -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);
}
}

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -0,0 +1,601 @@
<?php
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
return new class extends Seeder
{
/**
* Run the seeder.
*
* @return void
*/
public function run(): void
{
$menus = $this->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,
),
),
),
),
),
);
}
};

View File

@ -32,6 +32,20 @@
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" name="sort" :min="1" />
</el-form-item>
<el-form-item label="内页" prop="is_inner" v-if="isMenu">
<el-radio-group v-model="formData.is_inner">
<el-radio
v-for="item in [
{ label: '是', value: 1 },
{ label: '否', value: 2 },
]"
:key="item.value"
:label="item.value"
name="hidden"
>{{ item.label }}</el-radio
>
</el-radio-group>
</el-form-item>
</div>
<div>
<el-form-item label="父级菜单" prop="parent_id">
@ -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<boolean>(true)
const isMenu = ref<boolean>(false)

View File

@ -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