插件菜单
框架标准菜单定义
平台管理端菜单项 niucloud-core 下 resources/core/loader/menu/admin.json
站点管理端菜单项 niucloud-core 下 resources/core/loader/menu/site.json
如下图所示

niucloud-admin框架首次安装系统时,会自动加载上面的两个菜单字典到数据表中sys_menu表中。一定要注意。niucloud-admin框架的设计机制,切记!开发者不允许直接在sys_menu数据表中进行菜单项的操作,而必须在菜单字典中修改编辑。
修改菜单注意事项
- 
每次修改编辑了菜单字典,必须要刷新菜单缓存(开发工具/平台菜单/重置菜单),才能更新到数据表sys_menu中 
- 
插件开发时,有针对于菜单的处理,安装插件后一定要首先在站点套餐中勾选菜单项,界面才会生效 常常,我们开发了菜单功能,发现界面怎么都没有按照预定的想法变化,就是忽略了上面的步骤。如下图所示 
- 
由于java编译运行,menu文件已经加载到内存,修改之后重启,然后点击重置菜单才有效 


插件中菜单定义
插件中也可以自定义菜单项,niucloud-admin框架对于插件的约束是宽容的,插件可以对整个系统的菜单项进行操作。甚至可以操作标准菜单定义。插件中菜单项的定义位置与标准菜单项的定义方式几乎相同。
例如lgcms插件
平台管理端端菜单项在lg_cms下 resources/lg_cms/loader/menu/admin.json
站点管理端菜单项 lg_cms 下 resources/lg_cms/loader/menu/site.json
插件安装时,这两个地方定义的菜单项的结构,框架会自动装载到菜单数据表sys_menu中
如下图所示

特殊处理:
在niucloud框架的站点端中,当本站点只有一个应用时应用的一级菜单不作显示, 二级菜单作为一级菜单展示。
注意!插件安装,卸载时,系统会自动装载,删除菜单,不需要开发者在插件的安装、卸载脚本中对于菜单做相关处理
例如新建的lg_cms插件配置菜单如下,注意约定插件菜单关键字用插件名称前缀
/***************************admin.json菜单*****/
{
  "menu": [
  ],
  "delete": [
  ]
}
/**************************site.json菜单配置***/
{
  "menu": [
    {
      "menu_name": "内容管理系统",
      "menu_short_name": "",
      "menu_key": "lg_cms",
      "parent_key": "",
      "menu_type": 0,
      "icon": "",
      "api_url": "",
      "router_path": "",
      "view_path": "",
      "methods": "",
      "sort": 100,
      "status": 1,
      "is_show": 1,
      "children": [
        {
          "menu_name": "内容管理系统",
          "menu_short_name": "",
          "menu_key": "lg_cms_hello_world",
          "parent_key": "",
          "menu_type": 1,
          "icon": "",
          "api_url": "lg_cms/hello_world",
          "router_path": "lg_cms/hello_world",
          "view_path": "hello_world/index",
          "methods": "get",
          "sort": 100,
          "status": 1,
          "is_show": 1
        }
      ]
    }
  ],
  "delete": [
  ]
}menu_name      菜单的标题,出现在菜单项上的文字                                  
menu_key       菜单的关键字,这个必须唯一,添加父子菜单,删除等操作键,预定插件菜单关键字用插件名称做前缀
menu_type      菜单类型,0表示目录 1表示菜单 2表示功能按钮
icon           菜单的图标
api_url        菜单对应的后台api接口地址,作用是控制api接口权限与菜单权限控制一致,并非实际调用URL
router_path    路由地址,表示实际的菜单调用网址URL,菜单调用路由的开发,请参考相关开发说明
view_path      view文件地址,表示实际前端view文件地址,一般的,路由地址与view文件地址不一致
methods        请求方法,与api_url 对应,包括GET, POST, PUT, DELETE
sort           排序号,排序号越大,越靠前
status         状态,1表示启用,0表示禁用  (暂时没有作用)
is_show        菜单是否可见 1表示可见  0表示隐藏系统菜单的特殊处理
"delete":[] 针对修改系统菜单处理方式,可以删除系统菜单,设置对应key值,也可删除不需要的菜单处理, 这个只是插件菜单的处理方式。用于删除系统菜单(sys_menu表中软删除)。
通过上面的方式,插件中可以针对框架的某个菜单项进行软删除,替换菜单功能为自己的功能。
例如,我们开发一个软件,发现框架本身的会员列表不符合要求,我们不应该直接修改框架的会员列表功能,而应该软删除框架自带的会员列表菜单,然后全新开发一套会员列表功能。新建会员列表菜单路由到自己开发的会员列表功能。 这样的好处是,框架进行升级时,可以完全兼容升级。
由于java编译运行,menu文件已经加载到内存,修改之后重启,然后点击重置菜单才有效
