feat: 菜单新增 active_menu 字段

This commit is contained in:
JaguarJack
2023-03-01 15:11:53 +08:00
parent b81d4796ff
commit bcf3d9ec34
11 changed files with 145 additions and 103 deletions

View File

@@ -26,6 +26,7 @@ use Modules\Permissions\Enums\MenuType;
* @property $type
* @property $hidden
* @property $sort
* @property $active_menu
* @property $creator_id
* @property $created_at
* @property $updated_at
@@ -35,19 +36,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', 'is_inner', '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', 'active_menu', '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','is_inner','sort','created_at','updated_at'];
protected array $fields = ['id','parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','hidden','active_menu','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','is_inner', 'hidden','sort'];
protected array $form = ['parent_id','permission_name','route','icon','module','permission_mark','component','redirect','keepalive','type','active_menu', 'hidden','sort'];
/**
* @var array

View File

@@ -28,7 +28,6 @@ return new class () extends Migration {
$table->string('redirect')->nullable()->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();

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::table('permissions', function (Blueprint $table) {
if (Schema::hasColumn('permissions', 'is_inner')) {
$table->removeColumn('is_inner');
}
$table->string('active_menu')->default('')->comment('访问内页时,需要激活的菜单栏')->after('sort');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
}
};

View File

@@ -32,20 +32,6 @@
<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">
@@ -92,6 +78,16 @@
</el-form-item>
</div>
</div>
<div>
<el-form-item label="激活菜单" prop="active_menu" v-if="isMenu">
<div class="w-full flex flex-row">
<el-input v-model="formData.active_menu" name="active_menu" clearable class="w-3/4" />
<el-tooltip effect="dark" :content="activeMenuIntro" raw-content placement="top">
<div class="text-red-500 cursor-pointer w-1/4 ml-2 justify-center flex">说明</div>
</el-tooltip>
</div>
</el-form-item>
</div>
<div class="flex justify-end">
<el-button type="primary" @click="submitForm(form)">{{ $t('system.confirm') }}</el-button>
</div>
@@ -115,6 +111,9 @@ const props = defineProps({
api: String,
})
const activeMenuIntro =
'<div>如果是访问内页的菜单路由,例如创建文章 create/post, 虽然它隶属于文章列表,但实际上并不会嵌套在文章列表路由里</div><div>而是单独的一个路由,并且是不显示在左侧菜单的。所以在访问它的时候,需要左侧菜单高亮,则需要设置该参数</div>'
const { formData, form, loading, submitForm, close, beforeCreate, beforeUpdate } = useCreate(props.api, props.primary)
// 选择 icon
@@ -128,13 +127,12 @@ 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)