添加目录、菜单、控件

This commit is contained in:
陈淳
2022-09-09 18:15:10 +08:00
parent c15c43dba4
commit ef26567850
9 changed files with 75 additions and 34 deletions

Binary file not shown.

View File

@@ -148,6 +148,13 @@
<param name="menu"></param> <param name="menu"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Yi.Framework.ApiMicroservice.Controllers.MenuController.Add(Yi.Framework.Model.Models.MenuEntity)">
<summary>
插入
</summary>
<param name="menu"></param>
<returns></returns>
</member>
<member name="M:Yi.Framework.ApiMicroservice.Controllers.MenuController.GetMenuTree"> <member name="M:Yi.Framework.ApiMicroservice.Controllers.MenuController.GetMenuTree">
<summary> <summary>
得到树形菜单 得到树形菜单

View File

@@ -37,7 +37,20 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpGet] [HttpGet]
public async Task<Result> GetList([FromQuery] MenuEntity menu) public async Task<Result> GetList([FromQuery] MenuEntity menu)
{ {
return Result.Success().SetData(await _iMenuService.SelctGetList(menu)); var p= await _iMenuService.SelctGetList(menu);
p.ForEach(m => m.Children = new List<MenuEntity>());
return Result.Success().SetData(p);
}
/// <summary>
/// 插入
/// </summary>
/// <param name="menu"></param>
/// <returns></returns>
[HttpPost]
public async Task<Result> Add(MenuEntity menu)
{
return Result.Success().SetData(await _iMenuService._repository.InsertReturnSnowflakeIdAsync(menu));
} }

View File

@@ -104,5 +104,15 @@ namespace Yi.Framework.Model.Models
///</summary> ///</summary>
[SugarColumn(ColumnName="Remark" )] [SugarColumn(ColumnName="Remark" )]
public string Remark { get; set; } public string Remark { get; set; }
/// <summary>
/// 组件路径
///</summary>
[SugarColumn(ColumnName="Component" )]
public string Component { get; set; }
/// <summary>
/// 路由参数
///</summary>
[SugarColumn(ColumnName="Query" )]
public string Query { get; set; }
} }
} }

View File

@@ -124,14 +124,22 @@ namespace Yi.Framework.Service
{ {
userRoleMenu.RoleCodes.Add(role.RoleCode); userRoleMenu.RoleCodes.Add(role.RoleCode);
foreach (var menu in role.Menus) if (role.Menus.IsNotNull())
{ {
if (!string.IsNullOrEmpty(menu.PermissionCode)) foreach (var menu in role.Menus)
{ {
userRoleMenu.PermissionCodes.Add(menu.PermissionCode);
userRoleMenu.Menus.Add(menu);
if (!string.IsNullOrEmpty(menu.PermissionCode))
{
userRoleMenu.PermissionCodes.Add(menu.PermissionCode);
userRoleMenu.Menus.Add(menu);
}
} }
} }
//刚好可以去除一下多余的导航属性 //刚好可以去除一下多余的导航属性
role.Menus = null; role.Menus = null;
userRoleMenu.Roles.Add(role); userRoleMenu.Roles.Add(role);

View File

@@ -36,7 +36,7 @@ export function roleMenuTreeselect(roleId) {
// 新增菜单 // 新增菜单
export function addMenu(data) { export function addMenu(data) {
return request({ return request({
url: '/system/menu', url: '/menu/add',
method: 'post', method: 'post',
data: data data: data
}) })

View File

@@ -157,6 +157,7 @@ export function mergeRecursive(source, target) {
* @param {*} children 孩子节点字段 默认 'children' * @param {*} children 孩子节点字段 默认 'children'
*/ */
export function handleTree(data, id, parentId, children) { export function handleTree(data, id, parentId, children) {
let config = { let config = {
id: id || 'id', id: id || 'id',
parentId: parentId || 'parentId', parentId: parentId || 'parentId',

View File

@@ -106,8 +106,8 @@
<el-tree-select <el-tree-select
v-model="form.parentId" v-model="form.parentId"
:data="menuOptions" :data="menuOptions"
:props="{ value: 'menuId', label: 'menuName', children: 'children' }" :props="{ value: 'id', label: 'menuName', children: 'children' }"
value-key="menuId" value-key="id"
placeholder="选择上级菜单" placeholder="选择上级菜单"
check-strictly check-strictly
/> />
@@ -122,8 +122,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="form.menuType != 1"> <el-col :span="24" v-if="form.menuType != 2">
<el-form-item label="菜单图标" prop="icon"> <el-form-item label="菜单图标" prop="menuIcon">
<el-popover <el-popover
placement="bottom-start" placement="bottom-start"
:width="540" :width="540"
@@ -132,11 +132,11 @@
@show="showSelectIcon" @show="showSelectIcon"
> >
<template #reference> <template #reference>
<el-input v-model="form.icon" placeholder="点击选择图标" @click="showSelectIcon" v-click-outside="hideSelectIcon" readonly> <el-input v-model="form.menuIcon" placeholder="点击选择图标" @click="showSelectIcon" v-click-outside="hideSelectIcon" readonly>
<template #prefix> <template #prefix>
<svg-icon <svg-icon
v-if="form.icon" v-if="form.menuIcon"
:icon-class="form.icon" :icon-class="form.menuIcon"
class="el-input__icon" class="el-input__icon"
style="height: 32px;width: 16px;" style="height: 32px;width: 16px;"
/> />
@@ -167,14 +167,16 @@
</el-tooltip>是否外链 </el-tooltip>是否外链
</span> </span>
</template> </template>
<el-radio-group v-model="form.isFrame"> <el-radio-group v-model="form.isLink">
<el-radio label="0"></el-radio> <el-radio :label=true></el-radio>
<el-radio label="1"></el-radio> <el-radio :label=false></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="form.menuType != 1"> <el-col :span="12" v-if="form.menuType != 1">
<el-form-item prop="path"> <el-form-item prop="router">
<template #label> <template #label>
<span> <span>
<el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top"> <el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top">
@@ -183,7 +185,7 @@
路由地址 路由地址
</span> </span>
</template> </template>
<el-input v-model="form.path" placeholder="请输入路由地址" /> <el-input v-model="form.router" placeholder="请输入路由地址" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="form.menuType == 2"> <el-col :span="12" v-if="form.menuType == 2">
@@ -201,7 +203,7 @@
</el-col> </el-col>
<el-col :span="12" v-if="form.menuType != 0"> <el-col :span="12" v-if="form.menuType != 0">
<el-form-item> <el-form-item>
<el-input v-model="form.perms" placeholder="请输入权限标识" maxlength="100" /> <el-input v-model="form.permissionCode" placeholder="请输入权限标识" maxlength="100" />
<template #label> <template #label>
<span> <span>
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top"> <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top">
@@ -236,8 +238,8 @@
</span> </span>
</template> </template>
<el-radio-group v-model="form.isCache"> <el-radio-group v-model="form.isCache">
<el-radio label="0">缓存</el-radio> <el-radio :label=true>缓存</el-radio>
<el-radio label="1">不缓存</el-radio> <el-radio :label=false>不缓存</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@@ -251,7 +253,7 @@
显示状态 显示状态
</span> </span>
</template> </template>
<el-radio-group v-model="form.visible"> <el-radio-group v-model="form.isShow">
<el-radio <el-radio
v-for="dict in sys_show_hide" v-for="dict in sys_show_hide"
:key="dict.value" :key="dict.value"
@@ -270,7 +272,7 @@
菜单状态 菜单状态
</span> </span>
</template> </template>
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.isDeleted">
<el-radio <el-radio
v-for="dict in sys_normal_disable" v-for="dict in sys_normal_disable"
:key="dict.value" :key="dict.value"
@@ -320,7 +322,7 @@ const data = reactive({
rules: { rules: {
menuName: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }], menuName: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }],
orderNum: [{ required: true, message: "菜单顺序不能为空", trigger: "blur" }], orderNum: [{ required: true, message: "菜单顺序不能为空", trigger: "blur" }],
path: [{ required: true, message: "路由地址不能为空", trigger: "blur" }] router: [{ required: true, message: "路由地址不能为空", trigger: "blur" }]
}, },
}); });
@@ -354,13 +356,13 @@ function reset() {
menuId: undefined, menuId: undefined,
parentId: 0, parentId: 0,
menuName: undefined, menuName: undefined,
icon: undefined, menuIcon: undefined,
menuType: "M", menuType: 0,
orderNum: undefined, orderNum: 0,
isFrame: "1", isLink: false,
isCache: "0", isCache: false,
visible: "0", isShow: true,
isDeleted: "0" isDeleted: false
}; };
proxy.resetForm("menuRef"); proxy.resetForm("menuRef");
} }
@@ -371,7 +373,7 @@ function showSelectIcon() {
} }
/** 选择图标 */ /** 选择图标 */
function selected(name) { function selected(name) {
form.value.icon = name; form.value.menuIcon = name;
showChooseIcon.value = false; showChooseIcon.value = false;
} }
/** 图标外层点击隐藏下拉列表 */ /** 图标外层点击隐藏下拉列表 */
@@ -395,8 +397,8 @@ function resetQuery() {
function handleAdd(row) { function handleAdd(row) {
reset(); reset();
getTreeselect(); getTreeselect();
if (row != null && row.menuId) { if (row != null && row.id) {
form.value.parentId = row.menuId; form.value.parentId = row.id;
} else { } else {
form.value.parentId = 0; form.value.parentId = 0;
} }