Files
ReelShortWeb/src/views/permission/MenuManagementView.vue
T

99 lines
3.8 KiB
Vue

<!-- Author: fruit.com.cn -->
<script setup>
import { AppIcons } from '@/constants/icons'
import { menuIconNames, useMenuManagement } from '@/views/permission/composables/useMenuManagement'
import PageHeading from '@/views/components/PageHeading.vue'
const { treeData, loading, form, parentOptions, resetForm, selectNode, saveMenu, deleteMenu } =
useMenuManagement()
</script>
<template>
<PageHeading eyebrow="后台管理" title="菜单管理" description="维护系统菜单结构、路由与按钮权限。">
<el-button type="primary" @click="resetForm(0)">
<AppIcon :icon="AppIcons.add" />
新增菜单
</el-button>
</PageHeading>
<div class="menu-editor-layout">
<section v-loading="loading" class="panel menu-tree-panel">
<div class="panel-heading">
<div><h2>系统菜单</h2></div>
</div>
<el-tree
:data="treeData"
node-key="id"
default-expand-all
highlight-current
:expand-on-click-node="false"
@node-click="selectNode"
/>
</section>
<section class="panel menu-form-panel">
<div class="panel-heading">
<div
><h2>{{ form.id ? '编辑菜单' : '新增菜单' }}</h2></div
>
<el-button v-if="form.id" type="danger" @click="deleteMenu">删除菜单</el-button>
</div>
<el-form label-width="110px" label-position="right" class="menu-editor-form">
<el-form-item label="菜单名称" required>
<el-input v-model="form.title" maxlength="20" />
</el-form-item>
<el-form-item label="菜单类型">
<el-radio-group v-model="form.type">
<el-radio label="CATALOG">目录</el-radio>
<el-radio label="MENU">菜单</el-radio>
<el-radio label="BUTTON">按钮</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="上级菜单">
<el-select v-model="form.parentId">
<el-option
v-for="item in parentOptions"
:key="item.id"
:label="item.label"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.type !== 'BUTTON'" label="路由地址" required>
<el-input v-model="form.routePath" placeholder="目录填 /content,子菜单填 dramas" />
</el-form-item>
<el-form-item v-if="form.type === 'MENU'" label="路由名称">
<el-input v-model="form.routeName" placeholder="例如 dramas" />
</el-form-item>
<el-form-item v-if="form.type === 'MENU'" label="组件路径">
<el-input
v-model="form.component"
placeholder="例如 views/contentManagement/DramaManagementView"
/>
</el-form-item>
<el-form-item label="权限标识">
<el-input v-model="form.permissionCode" placeholder="例如 drama:list" />
</el-form-item>
<el-form-item v-if="form.type === 'CATALOG'" label="菜单图标">
<el-select v-model="form.icon" clearable placeholder="请选择">
<el-option v-for="icon in menuIconNames" :key="icon" :label="icon" :value="icon" />
</el-select>
</el-form-item>
<el-form-item label="菜单排序">
<el-input-number v-model="form.sort" :min="1" :max="999" />
</el-form-item>
<el-form-item label="是否显示">
<el-switch v-model="form.visible" :active-value="1" :inactive-value="0" />
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="form.status" :active-value="1" :inactive-value="0" />
</el-form-item>
</el-form>
<div class="menu-form-footer">
<el-button type="primary" @click="saveMenu">保存菜单</el-button>
</div>
</section>
</div>
</template>