Преглед на файлове

feat:添加iot模块的功能权限和菜单

xiwa преди 2 години
родител
ревизия
8df36940b6

+ 4152 - 2521
data/init/sys_menu.json

@@ -1,2521 +1,4152 @@
- [
-    {
-      "id": 1,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": null,
-      "icon": "system",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "系统管理",
-      "menuType": "M",
-      "orderNum": 1,
-      "parentId": 0,
-      "path": "system",
-      "perms": "",
-      "queryParam": "",
-      "remark": "系统管理目录",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": 1,
-   
-      "component": null,
-      "icon": "monitor",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "系统监控",
-      "menuType": "M",
-      "orderNum": 23,
-      "parentId": 0,
-      "path": "monitor",
-      "perms": "",
-      "queryParam": "",
-      "remark": "系统监控目录",
-      "status": "0",
-      "visible": "0"
-    },
-   {
-     "id": 3,
-     "createBy": 1,
-     "createDept": 103,
-
-     "updateBy": 1,
-
-     "component": null,
-     "icon": "tool",
-     "isCache": "0",
-     "isFrame": "1",
-     "menuName": "系统工具",
-     "menuType": "M",
-     "orderNum": 24,
-     "parentId": 0,
-     "path": "tool",
-     "perms": "",
-     "queryParam": "",
-     "remark": "系统工具目录",
-     "status": "0",
-     "visible": "0"
-   },
-    {
-      "id": 4,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": 1,
-      
-      "component": null,
-      "icon": "guide",
-      "isCache": "0",
-      "isFrame": "0",
-      "menuName": "铱塔官网",
-      "menuType": "M",
-      "orderNum": 25,
-      "parentId": 0,
-      "path": "http://iotkit-open-source.gitee.io/document",
-      "perms": "",
-      "queryParam": "",
-      "remark": "铱塔官网",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 6,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": 1,
-      "component": null,
-      "icon": "chart",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户管理",
-      "menuType": "M",
-      "orderNum": 22,
-      "parentId": 0,
-      "path": "tenant",
-      "perms": "",
-      "queryParam": "",
-      "remark": "租户管理目录",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 100,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/user/index",
-      "icon": "user",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户管理",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 1,
-      "path": "user",
-      "perms": "system:user:list",
-      "queryParam": "",
-      "remark": "用户管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 101,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/role/index",
-      "icon": "peoples",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色管理",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 1,
-      "path": "role",
-      "perms": "system:role:list",
-      "queryParam": "",
-      "remark": "角色管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 102,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/menu/index",
-      "icon": "tree-table",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "菜单管理",
-      "menuType": "C",
-      "orderNum": 3,
-      "parentId": 1,
-      "path": "menu",
-      "perms": "system:menu:list",
-      "queryParam": "",
-      "remark": "菜单管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 103,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/dept/index",
-      "icon": "tree",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "部门管理",
-      "menuType": "C",
-      "orderNum": 4,
-      "parentId": 1,
-      "path": "dept",
-      "perms": "system:dept:list",
-      "queryParam": "",
-      "remark": "部门管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 104,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/post/index",
-      "icon": "post",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位管理",
-      "menuType": "C",
-      "orderNum": 5,
-      "parentId": 1,
-      "path": "post",
-      "perms": "system:post:list",
-      "queryParam": "",
-      "remark": "岗位管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 105,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/dict/index",
-      "icon": "dict",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典管理",
-      "menuType": "C",
-      "orderNum": 6,
-      "parentId": 1,
-      "path": "dict",
-      "perms": "system:dict:list",
-      "queryParam": "",
-      "remark": "字典管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 106,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/config/index",
-      "icon": "edit",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数设置",
-      "menuType": "C",
-      "orderNum": 7,
-      "parentId": 1,
-      "path": "sysconfig",
-      "perms": "system:config:list",
-      "queryParam": "",
-      "remark": "参数设置菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 107,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/notice/index",
-      "icon": "message",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "通知公告",
-      "menuType": "C",
-      "orderNum": 8,
-      "parentId": 1,
-      "path": "notice",
-      "perms": "system:notice:list",
-      "queryParam": "",
-      "remark": "通知公告菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 108,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "log",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "日志管理",
-      "menuType": "M",
-      "orderNum": 9,
-      "parentId": 1,
-      "path": "log",
-      "perms": "",
-      "queryParam": "",
-      "remark": "日志管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 109,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "monitor/online/index",
-      "icon": "online",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "在线用户",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2,
-      "path": "online",
-      "perms": "monitor:online:list",
-      "queryParam": "",
-      "remark": "在线用户菜单",
-      "status": "0",
-      "visible": "0"
-    },
-   {
-     "id": 115,
-     "createBy": 1,
-     "createDept": 103,
-
-     "updateBy": null,
-     "updateTime": null,
-     "component": "tool/gen/index",
-     "icon": "code",
-     "isCache": "0",
-     "isFrame": "1",
-     "menuName": "代码生成",
-     "menuType": "C",
-     "orderNum": 2,
-     "parentId": 3,
-     "path": "gen",
-     "perms": "tool:gen:list",
-     "queryParam": "",
-     "remark": "代码生成菜单",
-     "status": "0",
-     "visible": "0"
-   },
-    {
-      "id": 118,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/oss/index",
-      "icon": "upload",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "文件管理",
-      "menuType": "C",
-      "orderNum": 10,
-      "parentId": 1,
-      "path": "oss",
-      "perms": "system:oss:list",
-      "queryParam": "",
-      "remark": "文件管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 121,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/tenant/index",
-      "icon": "list",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户管理",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 6,
-      "path": "tenant",
-      "perms": "system:tenant:list",
-      "queryParam": "",
-      "remark": "租户管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 122,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "system/tenantPackage/index",
-      "icon": "form",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐管理",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 6,
-      "path": "tenantPackage",
-      "perms": "system:tenantPackage:list",
-      "queryParam": "",
-      "remark": "租户套餐管理菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 500,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "monitor/operlog/index",
-      "icon": "form",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "操作日志",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 108,
-      "path": "operlog",
-      "perms": "monitor:operlog:list",
-      "queryParam": "",
-      "remark": "操作日志菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 501,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "monitor/logininfor/index",
-      "icon": "logininfor",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "登录日志",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 108,
-      "path": "logininfor",
-      "perms": "monitor:logininfor:list",
-      "queryParam": "",
-      "remark": "登录日志菜单",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1001,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1002,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1003,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1004,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1005,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1006,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "用户导入",
-      "menuType": "F",
-      "orderNum": 6,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:import",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1007,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "重置密码",
-      "menuType": "F",
-      "orderNum": 7,
-      "parentId": 100,
-      "path": "",
-      "perms": "system:user:resetPwd",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1008,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 101,
-      "path": "",
-      "perms": "system:role:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1009,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 101,
-      "path": "",
-      "perms": "system:role:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1010,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 101,
-      "path": "",
-      "perms": "system:role:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1011,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 101,
-      "path": "",
-      "perms": "system:role:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1012,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "角色导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 101,
-      "path": "",
-      "perms": "system:role:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1013,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "菜单查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 102,
-      "path": "",
-      "perms": "system:menu:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1014,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "菜单新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 102,
-      "path": "",
-      "perms": "system:menu:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1015,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "菜单修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 102,
-      "path": "",
-      "perms": "system:menu:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1016,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "菜单删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 102,
-      "path": "",
-      "perms": "system:menu:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1017,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "部门查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 103,
-      "path": "",
-      "perms": "system:dept:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1018,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "部门新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 103,
-      "path": "",
-      "perms": "system:dept:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1019,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "部门修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 103,
-      "path": "",
-      "perms": "system:dept:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1020,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "部门删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 103,
-      "path": "",
-      "perms": "system:dept:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1021,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 104,
-      "path": "",
-      "perms": "system:post:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1022,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 104,
-      "path": "",
-      "perms": "system:post:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1023,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 104,
-      "path": "",
-      "perms": "system:post:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1024,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 104,
-      "path": "",
-      "perms": "system:post:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1025,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "岗位导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 104,
-      "path": "",
-      "perms": "system:post:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1026,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 105,
-      "path": "#",
-      "perms": "system:dict:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1027,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 105,
-      "path": "#",
-      "perms": "system:dict:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1028,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 105,
-      "path": "#",
-      "perms": "system:dict:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1029,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 105,
-      "path": "#",
-      "perms": "system:dict:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1030,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "字典导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 105,
-      "path": "#",
-      "perms": "system:dict:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1031,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 106,
-      "path": "#",
-      "perms": "system:config:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1032,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 106,
-      "path": "#",
-      "perms": "system:config:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1033,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 106,
-      "path": "#",
-      "perms": "system:config:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1034,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 106,
-      "path": "#",
-      "perms": "system:config:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1035,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "参数导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 106,
-      "path": "#",
-      "perms": "system:config:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1036,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "公告查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 107,
-      "path": "#",
-      "perms": "system:notice:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1037,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "公告新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 107,
-      "path": "#",
-      "perms": "system:notice:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1038,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "公告修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 107,
-      "path": "#",
-      "perms": "system:notice:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1039,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "公告删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 107,
-      "path": "#",
-      "perms": "system:notice:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1040,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "操作查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 500,
-      "path": "#",
-      "perms": "monitor:operlog:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1041,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "操作删除",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 500,
-      "path": "#",
-      "perms": "monitor:operlog:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1042,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "日志导出",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 500,
-      "path": "#",
-      "perms": "monitor:operlog:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1043,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "登录查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 501,
-      "path": "#",
-      "perms": "monitor:logininfor:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1044,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "登录删除",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 501,
-      "path": "#",
-      "perms": "monitor:logininfor:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1045,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "日志导出",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 501,
-      "path": "#",
-      "perms": "monitor:logininfor:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1046,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "在线查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 109,
-      "path": "#",
-      "perms": "monitor:online:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1047,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "批量强退",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 109,
-      "path": "#",
-      "perms": "monitor:online:batchLogout",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1048,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "单条强退",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 109,
-      "path": "#",
-      "perms": "monitor:online:forceLogout",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1050,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "账户解锁",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 501,
-      "path": "#",
-      "perms": "monitor:logininfor:unlock",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1055,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "生成查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1056,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "生成修改",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1057,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "生成删除",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1058,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "导入代码",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:import",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1059,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "预览代码",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:preview",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1060,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "生成代码",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 115,
-      "path": "#",
-      "perms": "tool:gen:code",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1600,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "文件查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1601,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "文件上传",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:upload",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1602,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "文件下载",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:download",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1603,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "文件删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1604,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "配置添加",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1605,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "配置编辑",
-      "menuType": "F",
-      "orderNum": 6,
-      "parentId": 118,
-      "path": "#",
-      "perms": "system:oss:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1606,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 121,
-      "path": "#",
-      "perms": "system:tenant:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1607,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 121,
-      "path": "#",
-      "perms": "system:tenant:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1608,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 121,
-      "path": "#",
-      "perms": "system:tenant:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1609,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 121,
-      "path": "#",
-      "perms": "system:tenant:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1610,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 121,
-      "path": "#",
-      "perms": "system:tenant:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1611,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐查询",
-      "menuType": "F",
-      "orderNum": 1,
-      "parentId": 122,
-      "path": "#",
-      "perms": "system:tenantPackage:query",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1612,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐新增",
-      "menuType": "F",
-      "orderNum": 2,
-      "parentId": 122,
-      "path": "#",
-      "perms": "system:tenantPackage:add",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1613,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐修改",
-      "menuType": "F",
-      "orderNum": 3,
-      "parentId": 122,
-      "path": "#",
-      "perms": "system:tenantPackage:edit",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1614,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐删除",
-      "menuType": "F",
-      "orderNum": 4,
-      "parentId": 122,
-      "path": "#",
-      "perms": "system:tenantPackage:remove",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 1615,
-      "createBy": 1,
-      "createDept": 103,
-      
-      "updateBy": null,
-      "updateTime": null,
-      "component": "",
-      "icon": "#",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "租户套餐导出",
-      "menuType": "F",
-      "orderNum": 5,
-      "parentId": 122,
-      "path": "#",
-      "perms": "system:tenantPackage:export",
-      "queryParam": "",
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2200,
-      "createBy": 1,
-      "createDept": 103,
-      "updateBy": 1,
-      "component": null,
-      "icon": "device",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "设备接入",
-      "menuType": "M",
-      "orderNum": 1,
-      "parentId": 0,
-      "path": "/equipment",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2201,
-      "createBy": 1,
-      "createDept": 103,
-      "updateBy": 1,
-      "component": "iot/equipment/categories/index",
-      "icon": "education",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "品类管理",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2200,
-      "path": "categories",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2205,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/equipment/products/index",
-      "icon": "product-management",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "产品管理",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 2200,
-      "path": "products",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2206,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/equipment/devices/list",
-      "icon": "device",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "设备列表",
-      "menuType": "C",
-      "orderNum": 3,
-      "parentId": 2200,
-      "path": "devices",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2207,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/equipment/devices/virtualDevices",
-      "icon": "monitor",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "虚拟设备",
-      "menuType": "C",
-      "orderNum": 4,
-      "parentId": 2200,
-      "path": "virtualDevices",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2208,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": null,
-      "icon": "component",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "通讯组件管理",
-      "menuType": "M",
-      "orderNum": 2,
-      "parentId": 0,
-      "path": "/communication",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2209,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/communication/convertors/index",
-      "icon": "component",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "设备消息转换器",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2208,
-      "path": "convertors",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2210,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/communication/components/index",
-      "icon": "component",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "通讯组件管理",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 2208,
-      "path": "components",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2211,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": null,
-      "icon": "dashboard",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "规则引擎",
-      "menuType": "M",
-      "orderNum": 3,
-      "parentId": 0,
-      "path": "ruleEngine",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2212,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/ruleEngine/ruleSys/index",
-      "icon": "component",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "规则管理",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2211,
-      "path": "ruleSys",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2213,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/ruleEngine/scheduledTask/index",
-      "icon": "component",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "定时任务",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2211,
-      "path": "scheduledTask",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2214,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/equipment/devices/detail",
-      "icon": "",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "设备详情",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2200,
-      "path": "devicesDetail/:id",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "1"
-    },
-    {
-      "id": 2215,
-      "createBy": 1,
-      "createDept": 103,
-    
-      "updateBy": 1,
-   
-      "component": "iot/equipment/devices/virtualDeviceConfig",
-      "icon": "",
-      "isCache": "1",
-      "isFrame": "1",
-      "menuName": "虚拟设备详情",
-      "menuType": "C",
-      "orderNum": 16,
-      "parentId": 2200,
-      "path": "virtualDeviceConfig/:id",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "1"
-    },
-    {
-      "id": 2216,
-      "createBy": 1,
-      "createDept": 103,
-      "updateBy": 1,
-      "component": null,
-      "icon": "message",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "消息中心",
-      "menuType": "M",
-      "orderNum": 4,
-      "parentId": 0,
-      "path": "messageCenter",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2217,
-      "createBy": 1,
-      "createDept": 103,
-
-      "updateBy": 1,
-
-      "component": "iot/messageCenter/list",
-      "icon": "message",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "消息列表",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2216,
-      "path": "messageCenterList",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2218,
-      "createBy": 1,
-      "createDept": 103,
-  
-      "updateBy": 1,
-
-      "component": null,
-      "icon": "cascader",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "通道管理",
-      "menuType": "M",
-      "orderNum": 5,
-      "parentId": 0,
-      "path": "channel",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2219,
-      "createBy": 1,
-      "createDept": 103,
-
-      "updateBy": 1,
-
-      "component": "iot/channel/config",
-      "icon": "system",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "通道配置",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2218,
-      "path": "channelConfig",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2220,
-      "createBy": 1,
-      "createDept": 103,
-     
-      "updateBy": 1,
-    
-      "component": "iot/channel/template",
-      "icon": "system",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "模板配置",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 2218,
-      "path": "template",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2221,
-      "createBy": 1,
-      "createDept": 103,
-     
-      "updateBy": 1,
-     
-      "component": null,
-      "icon": "alart",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "告警中心",
-      "menuType": "M",
-      "orderNum": 6,
-      "parentId": 0,
-      "path": "alarm",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2222,
-      "createBy": 1,
-      "createDept": 103,
-     
-      "updateBy": 1,
-   
-      "component": "iot/alarm/list",
-      "icon": "message",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "告警列表",
-      "menuType": "C",
-      "orderNum": 1,
-      "parentId": 2221,
-      "path": "list",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },
-    {
-      "id": 2223,
-      "createBy": 1,
-      "createDept": 103,
-
-      "updateBy": 1,
-
-      "component": "iot/alarm/config",
-      "icon": "system",
-      "isCache": "0",
-      "isFrame": "1",
-      "menuName": "告警配置",
-      "menuType": "C",
-      "orderNum": 2,
-      "parentId": 2221,
-      "path": "config",
-      "perms": null,
-      "queryParam": null,
-      "remark": "",
-      "status": "0",
-      "visible": "0"
-    },{
-   "id": 2224,
-   "createBy": 1,
-   "createDept": 103,
-
-   "updateBy": 1,
-
-   "component": "contributor/index",
-   "icon": "color",
-   "isCache": "0",
-   "isFrame": "1",
-   "menuName": "平台建设",
-   "menuType": "C",
-   "orderNum": 1,
-   "parentId": 0,
-   "path": "contributor",
-   "perms": null,
-   "queryParam": null,
-   "remark": "",
-   "status": "0",
-   "visible": "0"
- },
-   {
-   "id": 2225,
-   "menuName": "OTA",
-   "parentId": 0,
-   "orderNum": 1,
-   "path": "upgradePack",
-   "component": "iot/ota/upgradePack/index",
-   "queryParam": null,
-   "isFrame": "1",
-   "isCache": "0",
-   "menuType": "C",
-   "visible": "0",
-   "status": "0",
-   "perms": null,
-   "icon": "",
-     "createBy": 1,
-     "createDept": 103,
-     "updateBy": 1
-   }
-  ]
+[
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1,
+    "menuName":"系统管理",
+    "parentId":0,
+    "orderNum":1,
+    "path":"system",
+    "component":null,
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"system",
+    "remark":"系统管理目录",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2,
+    "menuName":"系统监控",
+    "parentId":0,
+    "orderNum":23,
+    "path":"monitor",
+    "component":null,
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"monitor",
+    "remark":"系统监控目录",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":3,
+    "menuName":"系统工具",
+    "parentId":0,
+    "orderNum":24,
+    "path":"tool",
+    "component":null,
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"tool",
+    "remark":"系统工具目录",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":4,
+    "menuName":"铱塔官网",
+    "parentId":0,
+    "orderNum":25,
+    "path":"http://iotkit-open-source.gitee.io/document",
+    "component":null,
+    "queryParam":"",
+    "isFrame":"0",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"guide",
+    "remark":"铱塔官网",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":6,
+    "menuName":"租户管理",
+    "parentId":0,
+    "orderNum":22,
+    "path":"tenant",
+    "component":null,
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"chart",
+    "remark":"租户管理目录",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":100,
+    "menuName":"用户管理",
+    "parentId":1,
+    "orderNum":1,
+    "path":"user",
+    "component":"system/user/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:list",
+    "icon":"user",
+    "remark":"用户管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":101,
+    "menuName":"角色管理",
+    "parentId":1,
+    "orderNum":2,
+    "path":"role",
+    "component":"system/role/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:list",
+    "icon":"peoples",
+    "remark":"角色管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":102,
+    "menuName":"菜单管理",
+    "parentId":1,
+    "orderNum":3,
+    "path":"menu",
+    "component":"system/menu/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:menu:list",
+    "icon":"tree-table",
+    "remark":"菜单管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":103,
+    "menuName":"部门管理",
+    "parentId":1,
+    "orderNum":4,
+    "path":"dept",
+    "component":"system/dept/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dept:list",
+    "icon":"tree",
+    "remark":"部门管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":104,
+    "menuName":"岗位管理",
+    "parentId":1,
+    "orderNum":5,
+    "path":"post",
+    "component":"system/post/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:list",
+    "icon":"post",
+    "remark":"岗位管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":105,
+    "menuName":"字典管理",
+    "parentId":1,
+    "orderNum":6,
+    "path":"dict",
+    "component":"system/dict/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:list",
+    "icon":"dict",
+    "remark":"字典管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":106,
+    "menuName":"参数设置",
+    "parentId":1,
+    "orderNum":7,
+    "path":"sysconfig",
+    "component":"system/config/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:list",
+    "icon":"edit",
+    "remark":"参数设置菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":107,
+    "menuName":"通知公告",
+    "parentId":1,
+    "orderNum":8,
+    "path":"notice",
+    "component":"system/notice/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:notice:list",
+    "icon":"message",
+    "remark":"通知公告菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":108,
+    "menuName":"日志管理",
+    "parentId":1,
+    "orderNum":9,
+    "path":"log",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":"",
+    "icon":"log",
+    "remark":"日志管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":109,
+    "menuName":"在线用户",
+    "parentId":2,
+    "orderNum":1,
+    "path":"online",
+    "component":"monitor/online/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:online:list",
+    "icon":"online",
+    "remark":"在线用户菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":115,
+    "menuName":"代码生成",
+    "parentId":3,
+    "orderNum":2,
+    "path":"gen",
+    "component":"tool/gen/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:list",
+    "icon":"code",
+    "remark":"代码生成菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":118,
+    "menuName":"文件管理",
+    "parentId":1,
+    "orderNum":10,
+    "path":"oss",
+    "component":"system/oss/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:list",
+    "icon":"upload",
+    "remark":"文件管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":121,
+    "menuName":"租户管理",
+    "parentId":6,
+    "orderNum":1,
+    "path":"tenant",
+    "component":"system/tenant/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:list",
+    "icon":"list",
+    "remark":"租户管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":122,
+    "menuName":"租户套餐管理",
+    "parentId":6,
+    "orderNum":2,
+    "path":"tenantPackage",
+    "component":"system/tenantPackage/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:list",
+    "icon":"form",
+    "remark":"租户套餐管理菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":500,
+    "menuName":"操作日志",
+    "parentId":108,
+    "orderNum":1,
+    "path":"operlog",
+    "component":"monitor/operlog/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:operlog:list",
+    "icon":"form",
+    "remark":"操作日志菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":501,
+    "menuName":"登录日志",
+    "parentId":108,
+    "orderNum":2,
+    "path":"logininfor",
+    "component":"monitor/logininfor/index",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:logininfor:list",
+    "icon":"logininfor",
+    "remark":"登录日志菜单",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1001,
+    "menuName":"用户查询",
+    "parentId":100,
+    "orderNum":1,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1002,
+    "menuName":"用户新增",
+    "parentId":100,
+    "orderNum":2,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1003,
+    "menuName":"用户修改",
+    "parentId":100,
+    "orderNum":3,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1004,
+    "menuName":"用户删除",
+    "parentId":100,
+    "orderNum":4,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1005,
+    "menuName":"用户导出",
+    "parentId":100,
+    "orderNum":5,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1006,
+    "menuName":"用户导入",
+    "parentId":100,
+    "orderNum":6,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:import",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1007,
+    "menuName":"重置密码",
+    "parentId":100,
+    "orderNum":7,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:user:resetPwd",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1008,
+    "menuName":"角色查询",
+    "parentId":101,
+    "orderNum":1,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1009,
+    "menuName":"角色新增",
+    "parentId":101,
+    "orderNum":2,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1010,
+    "menuName":"角色修改",
+    "parentId":101,
+    "orderNum":3,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1011,
+    "menuName":"角色删除",
+    "parentId":101,
+    "orderNum":4,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1012,
+    "menuName":"角色导出",
+    "parentId":101,
+    "orderNum":5,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:role:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1013,
+    "menuName":"菜单查询",
+    "parentId":102,
+    "orderNum":1,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:menu:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1014,
+    "menuName":"菜单新增",
+    "parentId":102,
+    "orderNum":2,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:menu:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1015,
+    "menuName":"菜单修改",
+    "parentId":102,
+    "orderNum":3,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:menu:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1016,
+    "menuName":"菜单删除",
+    "parentId":102,
+    "orderNum":4,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:menu:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1017,
+    "menuName":"部门查询",
+    "parentId":103,
+    "orderNum":1,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dept:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1018,
+    "menuName":"部门新增",
+    "parentId":103,
+    "orderNum":2,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dept:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1019,
+    "menuName":"部门修改",
+    "parentId":103,
+    "orderNum":3,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dept:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1020,
+    "menuName":"部门删除",
+    "parentId":103,
+    "orderNum":4,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dept:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1021,
+    "menuName":"岗位查询",
+    "parentId":104,
+    "orderNum":1,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1022,
+    "menuName":"岗位新增",
+    "parentId":104,
+    "orderNum":2,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1023,
+    "menuName":"岗位修改",
+    "parentId":104,
+    "orderNum":3,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1024,
+    "menuName":"岗位删除",
+    "parentId":104,
+    "orderNum":4,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1025,
+    "menuName":"岗位导出",
+    "parentId":104,
+    "orderNum":5,
+    "path":"",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:post:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1026,
+    "menuName":"字典查询",
+    "parentId":105,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1027,
+    "menuName":"字典新增",
+    "parentId":105,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1028,
+    "menuName":"字典修改",
+    "parentId":105,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1029,
+    "menuName":"字典删除",
+    "parentId":105,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1030,
+    "menuName":"字典导出",
+    "parentId":105,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:dict:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1031,
+    "menuName":"参数查询",
+    "parentId":106,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1032,
+    "menuName":"参数新增",
+    "parentId":106,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1033,
+    "menuName":"参数修改",
+    "parentId":106,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1034,
+    "menuName":"参数删除",
+    "parentId":106,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1035,
+    "menuName":"参数导出",
+    "parentId":106,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:config:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1036,
+    "menuName":"公告查询",
+    "parentId":107,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:notice:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1037,
+    "menuName":"公告新增",
+    "parentId":107,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:notice:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1038,
+    "menuName":"公告修改",
+    "parentId":107,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:notice:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1039,
+    "menuName":"公告删除",
+    "parentId":107,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:notice:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1040,
+    "menuName":"操作查询",
+    "parentId":500,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:operlog:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1041,
+    "menuName":"操作删除",
+    "parentId":500,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:operlog:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1042,
+    "menuName":"日志导出",
+    "parentId":500,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:operlog:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1043,
+    "menuName":"登录查询",
+    "parentId":501,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:logininfor:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1044,
+    "menuName":"登录删除",
+    "parentId":501,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:logininfor:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1045,
+    "menuName":"日志导出",
+    "parentId":501,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:logininfor:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1046,
+    "menuName":"在线查询",
+    "parentId":109,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:online:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1047,
+    "menuName":"批量强退",
+    "parentId":109,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:online:batchLogout",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1048,
+    "menuName":"单条强退",
+    "parentId":109,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:online:forceLogout",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1050,
+    "menuName":"账户解锁",
+    "parentId":501,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"monitor:logininfor:unlock",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1055,
+    "menuName":"生成查询",
+    "parentId":115,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1056,
+    "menuName":"生成修改",
+    "parentId":115,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1057,
+    "menuName":"生成删除",
+    "parentId":115,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1058,
+    "menuName":"导入代码",
+    "parentId":115,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:import",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1059,
+    "menuName":"预览代码",
+    "parentId":115,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:preview",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1060,
+    "menuName":"生成代码",
+    "parentId":115,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"tool:gen:code",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1600,
+    "menuName":"文件查询",
+    "parentId":118,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1601,
+    "menuName":"文件上传",
+    "parentId":118,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:upload",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1602,
+    "menuName":"文件下载",
+    "parentId":118,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:download",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1603,
+    "menuName":"文件删除",
+    "parentId":118,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1604,
+    "menuName":"配置添加",
+    "parentId":118,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1605,
+    "menuName":"配置编辑",
+    "parentId":118,
+    "orderNum":6,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:oss:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1606,
+    "menuName":"租户查询",
+    "parentId":121,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1607,
+    "menuName":"租户新增",
+    "parentId":121,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1608,
+    "menuName":"租户修改",
+    "parentId":121,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1609,
+    "menuName":"租户删除",
+    "parentId":121,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1610,
+    "menuName":"租户导出",
+    "parentId":121,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenant:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1611,
+    "menuName":"租户套餐查询",
+    "parentId":122,
+    "orderNum":1,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:query",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1612,
+    "menuName":"租户套餐新增",
+    "parentId":122,
+    "orderNum":2,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:add",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1613,
+    "menuName":"租户套餐修改",
+    "parentId":122,
+    "orderNum":3,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:edit",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1614,
+    "menuName":"租户套餐删除",
+    "parentId":122,
+    "orderNum":4,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:remove",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":1615,
+    "menuName":"租户套餐导出",
+    "parentId":122,
+    "orderNum":5,
+    "path":"#",
+    "component":"",
+    "queryParam":"",
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"system:tenantPackage:export",
+    "icon":"#",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2200,
+    "menuName":"设备接入",
+    "parentId":0,
+    "orderNum":1,
+    "path":"/equipment",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"device",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2201,
+    "menuName":"品类管理",
+    "parentId":2200,
+    "orderNum":1,
+    "path":"categories",
+    "component":"iot/equipment/categories/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:category:list",
+    "icon":"education",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2205,
+    "menuName":"产品管理",
+    "parentId":2200,
+    "orderNum":2,
+    "path":"products",
+    "component":"iot/equipment/products/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:product:list",
+    "icon":"product-management",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2206,
+    "menuName":"设备列表",
+    "parentId":2200,
+    "orderNum":3,
+    "path":"devices",
+    "component":"iot/equipment/devices/list",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:list",
+    "icon":"device",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2207,
+    "menuName":"虚拟设备",
+    "parentId":2200,
+    "orderNum":4,
+    "path":"virtualDevices",
+    "component":"iot/equipment/devices/virtualDevices",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:virtualDevice:list",
+    "icon":"monitor",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2208,
+    "menuName":"通讯组件管理",
+    "parentId":0,
+    "orderNum":2,
+    "path":"/communication",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"component",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2209,
+    "menuName":"设备消息转换器",
+    "parentId":2208,
+    "orderNum":1,
+    "path":"convertors",
+    "component":"iot/communication/convertors/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"component",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2210,
+    "menuName":"通讯组件管理",
+    "parentId":2208,
+    "orderNum":2,
+    "path":"components",
+    "component":"iot/communication/components/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:component:list",
+    "icon":"component",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2211,
+    "menuName":"规则引擎",
+    "parentId":0,
+    "orderNum":3,
+    "path":"ruleEngine",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"dashboard",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2212,
+    "menuName":"规则管理",
+    "parentId":2211,
+    "orderNum":1,
+    "path":"ruleSys",
+    "component":"iot/ruleEngine/ruleSys/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:rule:list",
+    "icon":"component",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2213,
+    "menuName":"定时任务",
+    "parentId":2211,
+    "orderNum":1,
+    "path":"scheduledTask",
+    "component":"iot/ruleEngine/scheduledTask/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:task:list",
+    "icon":"component",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2214,
+    "menuName":"设备详情",
+    "parentId":2200,
+    "orderNum":1,
+    "path":"devicesDetail/:id",
+    "component":"iot/equipment/devices/detail",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"1",
+    "status":"0",
+    "perms":null,
+    "icon":"",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2215,
+    "menuName":"虚拟设备详情",
+    "parentId":2200,
+    "orderNum":16,
+    "path":"virtualDeviceConfig/:id",
+    "component":"iot/equipment/devices/virtualDeviceConfig",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"1",
+    "menuType":"C",
+    "visible":"1",
+    "status":"0",
+    "perms":null,
+    "icon":"",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2216,
+    "menuName":"消息中心",
+    "parentId":0,
+    "orderNum":4,
+    "path":"messageCenter",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"message",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2217,
+    "menuName":"消息列表",
+    "parentId":2216,
+    "orderNum":1,
+    "path":"messageCenterList",
+    "component":"iot/messageCenter/list",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"message",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2218,
+    "menuName":"通道管理",
+    "parentId":0,
+    "orderNum":5,
+    "path":"channel",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"cascader",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2219,
+    "menuName":"通道配置",
+    "parentId":2218,
+    "orderNum":1,
+    "path":"channelConfig",
+    "component":"iot/channel/config",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:list",
+    "icon":"system",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2220,
+    "menuName":"模板配置",
+    "parentId":2218,
+    "orderNum":2,
+    "path":"template",
+    "component":"iot/channel/template",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:list",
+    "icon":"system",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2221,
+    "menuName":"告警中心",
+    "parentId":0,
+    "orderNum":6,
+    "path":"alarm",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"M",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"alart",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2222,
+    "menuName":"告警列表",
+    "parentId":2221,
+    "orderNum":1,
+    "path":"list",
+    "component":"iot/alarm/list",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alert:list",
+    "icon":"message",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2223,
+    "menuName":"告警配置",
+    "parentId":2221,
+    "orderNum":2,
+    "path":"config",
+    "component":"iot/alarm/config",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alertConfig:list",
+    "icon":"system",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":1,
+    "updateTime":null,
+    "id":2224,
+    "menuName":"平台建设",
+    "parentId":0,
+    "orderNum":1,
+    "path":"contributor",
+    "component":"contributor/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":null,
+    "icon":"color",
+    "remark":"",
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":103,
+    "createBy":1,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":2225,
+    "menuName":"OTA",
+    "parentId":0,
+    "orderNum":1,
+    "path":"upgradePack",
+    "component":"iot/ota/upgradePack/index",
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"C",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:ota:list",
+    "icon":"upload",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441851175424069,
+    "menuName":"品类查询",
+    "parentId":2201,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:category:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441851310268485,
+    "menuName":"品类修改",
+    "parentId":2201,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:category:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441851485323333,
+    "menuName":"品类删除",
+    "parentId":2201,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:category:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441853056651333,
+    "menuName":"产品查询",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:product:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441853220675653,
+    "menuName":"产品添加",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:product:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441853285179461,
+    "menuName":"产品修改",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:product:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441862726639685,
+    "menuName":"产品删除",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:product:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441862877970501,
+    "menuName":"物模型查询",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:thingModel:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441862978281541,
+    "menuName":"物模型修改",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:thingModel:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441863058096197,
+    "menuName":"物模型删除",
+    "parentId":2205,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:thingModel:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869217525829,
+    "menuName":"设备查询",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869327724613,
+    "menuName":"设备添加",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869398310981,
+    "menuName":"设备修改",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869530075205,
+    "menuName":"设备删除",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869649666117,
+    "menuName":"设备控制",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:device:ctrl",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441869802405957,
+    "menuName":"设备日志查询",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:deviceLog:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870007808069,
+    "menuName":"设备组查询",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:deviceGroup:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870091001925,
+    "menuName":"设备组添加",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:deviceGroup:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870227968069,
+    "menuName":"设备组修改",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:deviceGroup:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870309814341,
+    "menuName":"设备组删除",
+    "parentId":2206,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:deviceGroup:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870607315013,
+    "menuName":"虚拟设备查询",
+    "parentId":2207,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:virtualDevice:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870717771845,
+    "menuName":"虚拟设备添加",
+    "parentId":2207,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:virtualDevice:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870780928069,
+    "menuName":"虚拟设备修改",
+    "parentId":2207,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:virtualDevice:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":441870881378373,
+    "menuName":"虚拟设备删除",
+    "parentId":2207,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:virtualDevice:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127357415493,
+    "menuName":"组件添加",
+    "parentId":2210,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:component:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127532781637,
+    "menuName":"组件修改",
+    "parentId":2210,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:component:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127596064837,
+    "menuName":"组件查询",
+    "parentId":2210,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:component:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127705182277,
+    "menuName":"组件删除",
+    "parentId":2210,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:component:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127879118917,
+    "menuName":"转换器查询",
+    "parentId":2209,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:converter:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442127985041477,
+    "menuName":"转换器添加",
+    "parentId":2209,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:converter:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442128064598085,
+    "menuName":"转换器修改",
+    "parentId":2209,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:converter:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442128163270725,
+    "menuName":"转换器删除",
+    "parentId":2209,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:converter:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442128593006661,
+    "menuName":"规则查询",
+    "parentId":2212,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:rule:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442128733950021,
+    "menuName":"规则修改",
+    "parentId":2212,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:rule:eidt",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442128795189317,
+    "menuName":"规则删除",
+    "parentId":2212,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:rule:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442129175347269,
+    "menuName":"定时任务查询",
+    "parentId":2213,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:task:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442129320091717,
+    "menuName":"定时任务修改",
+    "parentId":2213,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:task:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442129388187717,
+    "menuName":"定时任务删除",
+    "parentId":2213,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:task:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442130419388485,
+    "menuName":"通道添加",
+    "parentId":2219,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442130475098181,
+    "menuName":"通道修改",
+    "parentId":2219,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442130534805573,
+    "menuName":"通道删除",
+    "parentId":2219,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442130860195909,
+    "menuName":"告警配置查询",
+    "parentId":2223,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alertConfig:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442130932109381,
+    "menuName":"告警配置添加",
+    "parentId":2223,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alertConfig:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442131029889093,
+    "menuName":"告警配置修改",
+    "parentId":2223,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alertConfig:edit",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442131115253829,
+    "menuName":"告警配置删除",
+    "parentId":2223,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alertConfig:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442131294584901,
+    "menuName":"告警查询",
+    "parentId":2222,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:alert:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442143693541445,
+    "menuName":"通道查询",
+    "parentId":2219,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:channel:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442149490409541,
+    "menuName":"OTA查询",
+    "parentId":2225,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:ota:query",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442149580529733,
+    "menuName":"OTA添加",
+    "parentId":2225,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:ota:add",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442149650423877,
+    "menuName":"OTA删除",
+    "parentId":2225,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:ota:remove",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  },
+  {
+    "createDept":null,
+    "createBy":null,
+    "createTime":null,
+    "updateBy":null,
+    "updateTime":null,
+    "id":442149811572805,
+    "menuName":"执行升级",
+    "parentId":2225,
+    "orderNum":1,
+    "path":"",
+    "component":null,
+    "queryParam":null,
+    "isFrame":"1",
+    "isCache":"0",
+    "menuType":"F",
+    "visible":"0",
+    "status":"0",
+    "perms":"iot:ota:upgrade",
+    "icon":"",
+    "remark":null,
+    "children":[
+
+    ]
+  }
+]

+ 6 - 3
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/AlertController.java

@@ -15,6 +15,7 @@ import cc.iotkit.common.api.Request;
 import cc.iotkit.manager.service.AlertService;
 import cc.iotkit.model.alert.AlertConfig;
 import cc.iotkit.model.alert.AlertRecord;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -26,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 
-
 @Api(tags = {"告警中心"})
 @Slf4j
 @RestController
@@ -38,24 +38,28 @@ public class AlertController {
 
 
     @ApiOperation("新增告警中心配置")
+    @SaCheckPermission("iot:alertConfig:add")
     @PostMapping("/createAlertConfig")
     public AlertConfig createAlertConfig(@RequestBody @Validated Request<AlertConfig> request) {
         return alertService.createAlertConfig(request);
     }
 
     @ApiOperation("编辑告警中心配置")
+    @SaCheckPermission("iot:alertConfig:edit")
     @PostMapping("/updateAlertConfig")
     public AlertConfig updateAlertConfig(@RequestBody @Validated Request<AlertConfig> request) {
         return alertService.updateAlertConfig(request);
     }
 
     @ApiOperation("删除告警中心配置")
+    @SaCheckPermission("iot:alertConfig:remove")
     @PostMapping("/deleteAlertConfigById")
     public Boolean deleteAlertConfigById(@RequestBody @Validated Request<Long> request) {
         return alertService.deleteAlertConfigById(request);
     }
 
     @ApiOperation("查询告警中心配置分页")
+    @SaCheckPermission("iot:alertConfig:query")
     @PostMapping("/selectAlertConfigPage")
     public Paging<AlertConfig> selectAlertConfigPage(@RequestBody @Validated PageRequest<AlertConfig> request) {
         return alertService.selectAlertConfigPage(request);
@@ -63,12 +67,11 @@ public class AlertController {
 
 
     @ApiOperation("查询告警消息分页")
+    @SaCheckPermission("iot:alert:query")
     @PostMapping("/selectAlertRecordPage")
     public Paging<AlertRecord> selectAlertRecordPage(@RequestBody @Validated PageRequest<AlertRecord> request) {
         return alertService.selectAlertRecordPage(request);
     }
 
 
-
-
 }

+ 30 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/DeviceController.java

@@ -31,6 +31,7 @@ import cc.iotkit.model.device.DeviceGroup;
 import cc.iotkit.model.device.DeviceInfo;
 import cc.iotkit.model.device.message.DeviceProperty;
 import cc.iotkit.model.device.message.ThingModelMessage;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -61,42 +62,49 @@ public class DeviceController {
 
 
     @ApiOperation(value = "服务调用", notes = "服务调用", httpMethod = "POST")
+    @SaCheckPermission("iot:device:ctrl")
     @PostMapping("/service/invoke")
     public InvokeResult invokeService(@RequestBody @Validated Request<ServiceInvokeBo> request) {
         return new InvokeResult(deviceService.invokeService(request.getData().getDeviceId(), request.getData().getService(), request.getData().getArgs()));
     }
 
     @ApiOperation(value = "属性获取", notes = "属性获取", httpMethod = "POST")
+    @SaCheckPermission("iot:device:ctrl")
     @PostMapping("/service/property/get")
     public InvokeResult invokeServicePropertySet(@RequestBody @Validated  Request<GetDeviceServicePorpertyBo> request) {
         return new InvokeResult(deviceService.getProperty(request.getData().getDeviceId(), request.getData().getPropertyNames(), true));
     }
 
     @ApiOperation(value = "属性设置", notes = "属性设置", httpMethod = "POST")
+    @SaCheckPermission("iot:device:ctrl")
     @PostMapping("/service/property/set")
     public InvokeResult setProperty(@RequestBody @Validated Request<SetDeviceServicePorpertyBo> request) {
         return new InvokeResult(deviceService.setProperty(request.getData().getDeviceId(), request.getData().getArgs()));
     }
 
     @ApiOperation(value = "设备列表", notes = "设备列表", httpMethod = "POST")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/list")
     public Paging<DeviceInfo> getDevices(@Validated @RequestBody PageRequest<DeviceQueryBo> pageRequest) {
         return deviceServiceImpl.getDevices(pageRequest);
     }
 
     @ApiOperation(value = "创建设备")
+    @SaCheckPermission("iot:device:add")
     @PostMapping("/add")
     public boolean createDevice(@RequestBody @Validated Request<DeviceInfoBo> bo) {
         return deviceServiceImpl.addDevice(bo.getData());
     }
 
     @ApiOperation(value = "保存设备")
+    @SaCheckPermission("iot:device:edit")
     @PostMapping("/save")
     public boolean saveDevice(@RequestBody @Validated Request<DeviceInfoBo> bo) {
         return deviceServiceImpl.saveDevice(bo.getData());
     }
 
     @ApiOperation(value = "获取子设备", notes = "获取子设备")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/children/list")
     public List<DeviceInfoVo> getChildren(@Validated @RequestBody PageRequest<String> request) {
         String deviceId = request.getData();
@@ -104,42 +112,49 @@ public class DeviceController {
     }
 
     @ApiOperation("获取网关设备")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/getParentDevices")
     public List<ParentDeviceVo> getParentDevices() {
         return deviceServiceImpl.getParentDevices();
     }
 
     @ApiOperation("获取设备详情")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/detail")
     public DeviceInfo getDetail(@RequestBody @Validated Request<String> request) {
         return deviceServiceImpl.getDetail(request.getData());
     }
 
     @ApiOperation("获取设备详情")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/getByPkDn")
     public DeviceInfo getByPkDn(@Validated @RequestBody Request<DeviceQueryByPkDnBo> query) {
         return deviceServiceImpl.getByPkDn(query.getData().getPk(), query.getData().getDn());
     }
 
     @ApiOperation("删除设备")
+    @SaCheckPermission("iot:device:remove")
     @PostMapping("/delete")
     public boolean deleteDevice(@Validated @RequestBody Request<String> request) {
         return deviceServiceImpl.deleteDevice(request.getData());
     }
 
     @ApiOperation("批量删除设备")
+    @SaCheckPermission("iot:device:remove")
     @PostMapping("/batchDelete")
     public boolean batchDelete(@Validated @RequestBody Request<List<String>> request) {
         return deviceServiceImpl.batchDeleteDevice(request.getData());
     }
 
     @ApiOperation("设备物模型日志")
+    @SaCheckPermission("iot:deviceLog:query")
     @PostMapping("/deviceLogs/list")
     public Paging<ThingModelMessage> logs(@Validated @RequestBody PageRequest<DeviceLogQueryBo> request) {
         return deviceServiceImpl.logs(request);
     }
 
     @ApiOperation("设备属性日志")
+    @SaCheckPermission("iot:deviceLog:query")
     @PostMapping("/deviceProperty/log/list")
     public List<DeviceProperty> getPropertyHistory(@Validated @RequestBody
                                                    Request<DevicePropertyLogQueryBo> query) {
@@ -152,12 +167,14 @@ public class DeviceController {
     }
 
     @ApiOperation("设备解绑")
+    @SaCheckPermission("iot:device:edit")
     @PostMapping("/unbind")
     public boolean unbindDevice(@Validated @RequestBody Request<String> request) {
         return deviceServiceImpl.unbindDevice(request.getData());
     }
 
     @ApiOperation("获取设备物模型")
+    @SaCheckPermission("iot:thingModel:query")
     @PostMapping("/getThingModel")
     public ThingModelVo getThingModel(@Validated @RequestBody Request<String> request) {
         String deviceId = request.getData();
@@ -166,12 +183,14 @@ public class DeviceController {
     }
 
     @ApiOperation("添加标签")
+    @SaCheckPermission("iot:device:edit")
     @PostMapping("/tag/add")
     public boolean addTag(@Validated @RequestBody Request<DeviceTagAddBo> bo) {
         return deviceServiceImpl.addTag(bo.getData());
     }
 
     @ApiOperation("模拟设备上报")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/simulateSend")
     public boolean simulateSend(
             @Validated @RequestBody Request<ThingModelMessageBo> bo) {
@@ -183,6 +202,7 @@ public class DeviceController {
      * 消费设备信息消息(实时推送设备信息)
      */
     @ApiOperation("消费设备信息消息(实时推送设备信息)")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/consumer")
     public DeferredResult<ThingModelMessage> consumerDeviceInfo(
             @Validated @RequestBody Request<DeviceConsumerBo> bo
@@ -195,6 +215,7 @@ public class DeviceController {
      * 获取分组列表
      */
     @ApiOperation(value = "获取分组列表")
+    @SaCheckPermission("iot:deviceGroup:query")
     @PostMapping("/groups/list")
     public Paging<DeviceGroupVo> getDeviceGroups(
             @Validated @RequestBody PageRequest<DeviceGroupBo> pageRequest) {
@@ -205,6 +226,7 @@ public class DeviceController {
      * 添加设备分组
      */
     @ApiOperation(value = "添加设备分组")
+    @SaCheckPermission("iot:deviceGroup:add")
     @PostMapping("/group/add")
     public boolean addGroup(@Validated @RequestBody Request<DeviceGroupBo> group) {
         return deviceServiceImpl.addGroup(group.getData().to(DeviceGroup.class));
@@ -214,6 +236,7 @@ public class DeviceController {
      * 修改设备分组
      */
     @ApiOperation(value = "修改设备分组")
+    @SaCheckPermission("iot:deviceGroup:edit")
     @PostMapping("/group/edit")
     public boolean editGroup(@RequestBody @Validated Request<DeviceGroupBo> bo) {
         return deviceServiceImpl.updateGroup(bo.getData());
@@ -224,6 +247,7 @@ public class DeviceController {
      * 删除分组
      */
     @ApiOperation(value = "删除分组")
+    @SaCheckPermission("iot:deviceGroup:remove")
     @PostMapping("/group/delete")
     public boolean deleteGroup(@Validated @RequestBody Request<String> request) {
         String id = request.getData();
@@ -234,6 +258,7 @@ public class DeviceController {
      * 清空组下所有设备
      */
     @ApiOperation(value = "清空组下所有设备")
+    @SaCheckPermission("iot:deviceGroup:remove")
     @PostMapping("/group/clear")
     public boolean clearGroup(@Validated @RequestBody Request<String> request) {
         String id = request.getData();
@@ -244,6 +269,7 @@ public class DeviceController {
      * 添加设备到组
      */
     @ApiOperation(value = "添加设备到组")
+    @SaCheckPermission("iot:deviceGroup:edit")
     @PostMapping("/group/addDevices")
     public boolean addToGroup(@Validated @RequestBody Request<DeviceAddGroupBo> bo) {
         return deviceServiceImpl.addDevice2Group(bo.getData());
@@ -253,6 +279,7 @@ public class DeviceController {
      * 将设备从组中移除
      */
     @ApiOperation(value = "将设备从组中移除")
+    @SaCheckPermission("iot:deviceGroup:edit")
     @PostMapping("/group/removeDevices")
     public boolean removeDevices(@Validated @RequestBody Request<DeviceAddGroupBo> bo) {
         DeviceAddGroupBo data = bo.getData();
@@ -263,6 +290,7 @@ public class DeviceController {
      * 保存设备配置
      */
     @ApiOperation(value = "保存设备配置")
+    @SaCheckPermission("iot:device:edit")
     @PostMapping("/config/save")
     public boolean saveConfig(@Validated @RequestBody Request<DeviceConfigAddBo> request) {
         DeviceConfig data = request.getData().to(DeviceConfig.class);
@@ -273,6 +301,7 @@ public class DeviceController {
      * 获取设备配置
      */
     @ApiOperation(value = "获取设备配置")
+    @SaCheckPermission("iot:device:query")
     @PostMapping("/config/get")
     public DeviceConfigVo getConfig(@Validated @RequestBody Request<String> request) {
         String deviceId = request.getData();
@@ -283,6 +312,7 @@ public class DeviceController {
      * 设备配置下发
      */
     @ApiOperation(value = "设备配置下发")
+    @SaCheckPermission("iot:device:ctrl")
     @PostMapping("/config/send")
     public InvokeResult sendConfig(@Validated @RequestBody Request<String> bo) {
         String deviceId = bo.getData();

+ 14 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/NotifyController.java

@@ -14,6 +14,7 @@ import cc.iotkit.model.notify.Channel;
 import cc.iotkit.model.notify.ChannelConfig;
 import cc.iotkit.model.notify.ChannelTemplate;
 import cc.iotkit.model.notify.NotifyMessage;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -41,78 +42,91 @@ public class NotifyController {
     private NotifyService notifyService;
 
     @ApiOperation("获取通道类型列表")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/getList")
     public List<Channel> getChannelList() {
         return notifyService.getChannelList();
     }
 
     @ApiOperation("获取通道配置分页列表")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/config/getList")
     public Paging<ChannelConfigVo> getChannelConfigList(@RequestBody @Validated(QueryGroup.class) PageRequest<ChannelConfigBo> request) {
         return notifyService.getChannelConfigList(request);
     }
 
     @ApiOperation("获取通道配置列表")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/config/getAll")
     public List<ChannelConfigVo> getChannelConfigAll() {
         return notifyService.getChannelConfigAll();
     }
 
     @ApiOperation("新增通道配置")
+    @SaCheckPermission("iot:channel:add")
     @PostMapping("/channel/config/add")
     public ChannelConfig addChannelConfig(@RequestBody @Validated(EditGroup.class) Request<ChannelConfig> request) {
         return notifyService.addChannelConfig(request.getData());
     }
 
     @ApiOperation("根据ID获取通道配置")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/config/getById")
     public ChannelConfig getChannelConfigById(@RequestBody @Validated(QueryGroup.class) Request<Long> request) {
         return notifyService.getChannelConfigById(request.getData());
     }
 
     @ApiOperation("修改通道配置")
+    @SaCheckPermission("iot:channel:edit")
     @PostMapping("/channel/config/updateById")
     public ChannelConfig updateChannelConfigById(@RequestBody @Validated Request<ChannelConfig> request) {
         return notifyService.updateChannelConfigById(request.getData());
     }
 
     @ApiOperation("删除通道配置")
+    @SaCheckPermission("iot:channel:remove")
     @PostMapping("/channel/config/delById")
     public Boolean delChannelConfigById(@RequestBody @Validated Request<Long> request) {
         return notifyService.delChannelConfigById(request.getData());
     }
 
     @ApiOperation("获取通道模板列表")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/template/getList")
     public Paging<ChannelTemplateVo> getChannelTemplateList(@RequestBody @Validated(QueryGroup.class) PageRequest<ChannelTemplateBo> request) {
         return notifyService.getChannelTemplateList(request);
     }
 
     @ApiOperation("新增通道模板")
+    @SaCheckPermission("iot:channel:add")
     @PostMapping("/channel/template/add")
     public ChannelTemplate addChannelTemplate(@RequestBody @Validated(EditGroup.class) Request<ChannelTemplateBo> request) {
         return notifyService.addChannelTemplate(request.getData());
     }
 
     @ApiOperation("根据ID获取通道模板")
+    @SaCheckPermission("iot:channel:query")
     @PostMapping("/channel/template/getById")
     public ChannelTemplate getChannelTemplateById(@RequestBody @Validated Request<Long> request) {
         return notifyService.getChannelTemplateById(request.getData());
     }
 
     @ApiOperation("修改通道模板")
+    @SaCheckPermission("iot:channel:edit")
     @PostMapping("/channel/template/updateById")
     public ChannelTemplate updateChannelTemplateById(@RequestBody @Validated Request<ChannelTemplate> request) {
         return notifyService.updateChannelTemplateById(request.getData());
     }
 
     @ApiOperation("删除通道模板")
+    @SaCheckPermission("iot:channel:remove")
     @PostMapping("/channel/template/delById")
     public Boolean delChannelTemplateById(@RequestBody @Validated(EditGroup.class) Request<Long> request) {
         return notifyService.delChannelTemplateById(request.getData());
     }
 
     @ApiOperation("消息列表")
+    @SaCheckPermission("iot:channelMsg:query")
     @PostMapping("/message/getList")
     public Paging<NotifyMessage> messageList(@RequestBody @Validated(QueryGroup.class) PageRequest<NotifyMessage> request) {
         return notifyService.getNotifyMessageList(request);

+ 8 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/OtaController.java

@@ -14,6 +14,7 @@ import cc.iotkit.manager.dto.vo.ota.DeviceUpgradeVo;
 import cc.iotkit.manager.dto.vo.ota.OtaPackageUploadVo;
 import cc.iotkit.manager.service.OtaService;
 import cc.iotkit.model.ota.OtaPackage;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.ObjectUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -41,6 +42,7 @@ public class OtaController extends BaseController {
     private OtaService otaService;
 
     @ApiOperation("升级包上传")
+    @SaCheckPermission("iot:ota:add")
     @PostMapping(value = "/package/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public OtaPackageUploadVo packageUpload(@RequestPart("file") MultipartFile file, @RequestParam("requestId") String requestId) throws Exception {
         if (ObjectUtil.isNull(file)) {
@@ -50,24 +52,28 @@ public class OtaController extends BaseController {
     }
 
     @ApiOperation("新增升级包")
+    @SaCheckPermission("iot:ota:add")
     @PostMapping("/package/add")
     public OtaPackage packageAdd(@RequestBody @Valid Request<OtaPackageBo> request) {
         return otaService.addOtaPackage(request.getData());
     }
 
     @ApiOperation("删除升级包")
+    @SaCheckPermission("iot:ota:remove")
     @PostMapping("/package/delById")
     public Boolean delPackageById(@RequestBody @Valid Request<Long> request) {
         return otaService.delOtaPackageById(request.getData());
     }
 
     @ApiOperation("升级包列表")
+    @SaCheckPermission("iot:ota:query")
     @PostMapping("/package/getList")
     public Paging<OtaPackage> packageList(@RequestBody @Validated PageRequest<OtaPackage> request) {
         return otaService.getOtaPackagePageList(request);
     }
 
     @ApiOperation("OTA升级")
+    @SaCheckPermission("iot:ota:upgrade")
     @PostMapping("/device/upgrade")
     public DeviceUpgradeVo deviceUpgrade(@RequestBody Request<DeviceUpgradeBo> request) {
         String result = otaService.startUpgrade(request.getData().getOtaId(), request.getData().getDeviceIds());
@@ -75,12 +81,14 @@ public class OtaController extends BaseController {
     }
 
     @ApiOperation("设备升级结果查询")
+    @SaCheckPermission("iot:ota:query")
     @PostMapping("/device/detail")
     public Paging<DeviceOtaDetailVo> otaDeviceDetail(@RequestBody PageRequest<DeviceOtaDetailBo> request) {
         return otaService.otaDeviceDetail(request);
     }
 
     @ApiOperation("设备升级批次查询")
+    @SaCheckPermission("iot:ota:query")
     @PostMapping("/device/info")
     public Paging<DeviceOtaInfoVo> otaDeviceInfo(@RequestBody PageRequest<DeviceOtaInfoBo> request) {
         return otaService.otaDeviceInfo(request);

+ 27 - 12
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java

@@ -25,6 +25,7 @@ import cc.iotkit.manager.dto.vo.product.ProductVo;
 import cc.iotkit.manager.dto.vo.productmodel.ProductModelVo;
 import cc.iotkit.manager.dto.vo.thingmodel.ThingModelVo;
 import cc.iotkit.manager.service.IProductService;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckRole;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
@@ -47,14 +48,16 @@ public class ProductController {
     @Autowired
     private IProductService productService;
 
-    @PostMapping("/list")
     @ApiOperation("列表")
+    @SaCheckPermission("iot:product:query")
+    @PostMapping("/list")
     public Paging<ProductVo> getProducts(@Validated @RequestBody
                                          PageRequest<ProductBo> request) {
         return productService.selectPageList(request);
     }
 
     @ApiOperation("新建")
+    @SaCheckPermission("iot:product:add")
     @PostMapping(value = "/add")
     @Log(title = "产品", businessType = BusinessType.INSERT)
     public ProductVo create(@Validated(AddGroup.class) @RequestBody Request<ProductBo> request) {
@@ -62,95 +65,107 @@ public class ProductController {
     }
 
     @ApiOperation(value = "编辑产品")
+    @SaCheckPermission("iot:product:edit")
     @PostMapping("/edit")
     @Log(title = "产品", businessType = BusinessType.UPDATE)
     public boolean edit(@Validated(EditGroup.class) @RequestBody Request<ProductBo> request) {
         return productService.updateEntity(request.getData());
     }
 
-
     @ApiOperation("查看详情")
+    @SaCheckPermission("iot:product:query")
     @PostMapping(value = "/getDetail")
     public ProductVo getDetail(@RequestBody @Validated Request<String> request) {
         return productService.getDetail(request.getData());
     }
 
-
     @ApiOperation("删除产品")
+    @SaCheckPermission("iot:product:remove")
     @PostMapping(value = "/deleteProduct")
     public boolean deleteProduct(@RequestBody @Validated Request<String> request) {
         return productService.deleteProduct(request.getData());
     }
 
-    @PostMapping("/getThingModelByProductKey")
     @ApiOperation("查看物模型")
+    @SaCheckPermission("iot:thingModel:query")
+    @PostMapping("/getThingModelByProductKey")
     public ThingModelVo getThingModelByProductKey(@RequestBody @Validated Request<String> request) {
         return productService.getThingModelByProductKey(request.getData());
     }
 
     @ApiOperation("保存物模型")
+    @SaCheckPermission("iot:thingModel:edit")
     @PostMapping("/thingModel/save")
     public boolean saveThingModel(@Validated @RequestBody Request<ThingModelBo> request) {
         return productService.saveThingModel(request.getData());
     }
 
-    @PostMapping("/thingModel/delete")
     @ApiOperation("删除物模型")
+    @SaCheckPermission("iot:thingModel:remove")
+    @PostMapping("/thingModel/delete")
     @Log(title = "物模型", businessType = BusinessType.DELETE)
     public boolean deleteThingModel(@Validated @RequestBody Request<Long> id) {
         return productService.deleteThingModel(id.getData());
     }
 
 
-    @PostMapping("/category/list")
     @ApiOperation("产品品类分页展示")
+    @SaCheckPermission("iot:category:query")
+    @PostMapping("/category/list")
     public Paging<CategoryVo> getCategories(@Validated @RequestBody PageRequest<CategoryBo> request) {
         return productService.selectCategoryPageList(request);
     }
 
-    @PostMapping("/category/getAll")
     @ApiOperation("产品品类展示")
+    @SaCheckPermission("iot:category:query")
+    @PostMapping("/category/getAll")
     public List<CategoryVo> getCategorieList() {
         return productService.selectCategoryList();
     }
 
-    @SaCheckRole("iot_admin")
     @ApiOperation("品类编辑")
+    @SaCheckRole("iot_admin")
+    @SaCheckPermission("iot:category:edit")
     @PostMapping("/category/edit")
     public boolean saveCategory(@Validated @RequestBody Request<CategoryBo> req) {
 
         return productService.editCategory(req.getData());
     }
 
+    @ApiOperation("删除品类")
     @SaCheckRole("iot_admin")
+    @SaCheckPermission("iot:category:remove")
     @PostMapping("/category/delete")
-    @ApiOperation("删除品类")
     public boolean delCategory(@Validated @RequestBody Request<String> req) {
         return productService.deleteCategory(req.getData());
 
     }
 
     @ApiOperation("上传产品图片")
+    @SaCheckPermission("iot:product:edit")
     @PostMapping("/uploadImg/{productKey}")
     public String uploadImg(@PathVariable("productKey") String productKey,
                             @RequestParam("file") MultipartFile file) {
         return productService.uploadImg(productKey, file);
     }
 
-    @PostMapping("/getModelsByProductKey")
     @ApiModelProperty("获取产品型号")
+    @SaCheckPermission("iot:product:query")
+    @PostMapping("/getModelsByProductKey")
     public List<ProductModelVo> getModels(@Validated @RequestBody Request<String> bo) {
         return productService.getModels(bo.getData());
     }
 
-    @PostMapping("/productModel/edit")
     @ApiOperation("编辑产品型号")
+    @SaCheckPermission("iot:product:edit")
+    @PostMapping("/productModel/edit")
     public boolean saveProductModel(@Validated @RequestBody Request<ProductModelBo> bo) {
         return productService.editProductModel(bo.getData());
     }
 
-    @PostMapping("/productModel/delete")
     @ApiOperation("删除产品型号")
+    @SaCheckPermission("iot:product:remove")
+    @PostMapping("/productModel/delete")
     public boolean deleteProductModel(@Validated @RequestBody Request<String> id) {
         return productService.deleteProductModel(id.getData());
     }

+ 15 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProtocolController.java

@@ -20,6 +20,7 @@ import cc.iotkit.manager.dto.bo.protocolconverter.ProtocolConverterBo;
 import cc.iotkit.manager.dto.vo.protocolcomponent.ProtocolComponentVo;
 import cc.iotkit.manager.dto.vo.protocolconverter.ProtocolConverterVo;
 import cc.iotkit.manager.service.IProtocolService;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +37,7 @@ public class ProtocolController {
     private IProtocolService protocolService;
 
     @ApiOperation("上传Jar包")
+    @SaCheckPermission("iot:component:add")
     @PostMapping("/uploadJar")
     public String uploadJar(
             @RequestParam("id") String id,
@@ -44,12 +46,14 @@ public class ProtocolController {
     }
 
     @ApiOperation("添加组件")
+    @SaCheckPermission("iot:component:add")
     @PostMapping("/addComponent")
     public boolean addComponent(@RequestBody @Validated Request<ProtocolComponentBo> bo) {
         return protocolService.addComponent(bo.getData());
     }
 
     @ApiOperation("修改组件")
+    @SaCheckPermission("iot:component:edit")
     @PostMapping("/editComponent")
     public boolean saveComponent(@RequestBody @Validated Request<ProtocolComponentBo> bo) {
         protocolService.saveComponent(bo.getData());
@@ -57,6 +61,7 @@ public class ProtocolController {
     }
 
     @ApiOperation("获取组件详情")
+    @SaCheckPermission("iot:component:query")
     @PostMapping("/getComponentDetail")
     public ProtocolComponentVo getComponentScript(@Validated @RequestBody Request<String> req) {
         String id = req.getData();
@@ -65,6 +70,7 @@ public class ProtocolController {
     }
 
     @ApiOperation("保存组件脚本")
+    @SaCheckPermission("iot:component:edit")
     @PostMapping("/saveComponentScript")
     public boolean saveComponentScript(@Validated
                                        @RequestBody Request<ProtocolComponentBo> upReq) {
@@ -73,12 +79,14 @@ public class ProtocolController {
 
 
     @ApiOperation("删除组件")
+    @SaCheckPermission("iot:component:remove")
     @PostMapping("/delete")
     public boolean deleteComponent(@Validated @RequestBody Request<String> req) {
         return protocolService.deleteComponent(req.getData());
     }
 
     @ApiOperation("获取组件列表")
+    @SaCheckPermission("iot:component:query")
     @PostMapping("/list")
     public Paging<ProtocolComponentVo> getComponents(@Validated @RequestBody
                                                      PageRequest<ProtocolComponentBo> query) {
@@ -86,24 +94,28 @@ public class ProtocolController {
     }
 
     @ApiOperation("获取转换脚本列表")
+    @SaCheckPermission("iot:converter:query")
     @PostMapping("/converters/list")
     public Paging<ProtocolConverterVo> getConverters(@Validated @RequestBody PageRequest<ProtocolConverterBo> query) {
         return protocolService.selectConvertersPageList(query);
     }
 
     @ApiOperation("新增转换脚本")
+    @SaCheckPermission("iot:converter:add")
     @PostMapping("/converter/add")
     public boolean addConverter(@Validated(AddGroup.class) @RequestBody Request<ProtocolConverterBo> converter) {
         return protocolService.addConverter(converter.getData());
     }
 
     @ApiOperation("修改转换脚本")
+    @SaCheckPermission("iot:converter:edit")
     @PostMapping("/converter/edit")
     public boolean editConverter(@Validated(EditGroup.class) @RequestBody Request<ProtocolConverterBo> req) {
         return protocolService.editConverter(req.getData());
     }
 
     @ApiOperation("获取转换脚本详情")
+    @SaCheckPermission("iot:converter:query")
     @PostMapping("/getConverterScript")
     public ProtocolConverterVo getConverter(@RequestBody Request<String> req) {
         String id = req.getData();
@@ -111,6 +123,7 @@ public class ProtocolController {
     }
 
     @PostMapping("/converterScript/edit")
+    @SaCheckPermission("iot:converter:edit")
     @ApiOperation("保存转换脚本")
     public boolean saveConverterScript(
             @Validated @RequestBody Request<ProtocolConverterBo> req) {
@@ -119,6 +132,7 @@ public class ProtocolController {
     }
 
     @PostMapping("/converter/delete")
+    @SaCheckPermission("iot:converter:remove")
     @ApiOperation("删除转换脚本")
     public boolean deleteConverter(@RequestBody @Validated Request<String> req) {
         String id = req.getData();
@@ -126,6 +140,7 @@ public class ProtocolController {
     }
 
     @PostMapping("/component/changeState")
+    @SaCheckPermission("iot:component:edit")
     @ApiOperation("组件启用/禁用")
     public boolean changeComponentState(@RequestBody @Validated Request<ChangeStateBo> req) {
         return protocolService.changeComponentState(req.getData());

+ 16 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/RuleEngineController.java

@@ -21,6 +21,7 @@ import cc.iotkit.manager.dto.vo.ruleinfo.RuleLogVo;
 import cc.iotkit.manager.dto.vo.taskinfo.TaskInfoVo;
 import cc.iotkit.manager.dto.vo.taskinfo.TaskLogVo;
 import cc.iotkit.manager.service.IRuleEngineService;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -41,6 +42,7 @@ public class RuleEngineController {
     IRuleEngineService ruleEngineService;
 
     @ApiOperation("规则列表")
+    @SaCheckPermission("iot:rule:query")
     @PostMapping("/list")
     public Paging<RuleInfoVo> rules(
             @Validated @RequestBody
@@ -50,12 +52,14 @@ public class RuleEngineController {
     }
 
     @ApiOperation("保存规则")
+    @SaCheckPermission("iot:rule:eidt")
     @PostMapping("/edit")
     public boolean saveRule(@RequestBody @Validated Request<RuleInfoBo> ruleInfoBo) {
         return ruleEngineService.saveRule(ruleInfoBo.getData());
     }
 
     @ApiOperation("暂停规则")
+    @SaCheckPermission("iot:rule:edit")
     @PostMapping("/pause")
     public boolean pauseRule(@Validated @RequestBody Request<String> request) {
         String ruleId = request.getData();
@@ -63,6 +67,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("恢复规则")
+    @SaCheckPermission("iot:rule:edit")
     @PostMapping("/resume")
     public boolean resumeRule(@Validated @RequestBody Request<String> request) {
         String ruleId = request.getData();
@@ -71,6 +76,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("删除规则")
+    @SaCheckPermission("iot:rule:remove")
     @PostMapping("/delete")
     public boolean deleteRule(@Validated @RequestBody Request<String> request) {
         String ruleId = request.getData();
@@ -78,6 +84,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("规则日志")
+    @SaCheckPermission("iot:rule:query")
     @PostMapping("/ruleLog/list")
     public Paging<RuleLogVo> getRuleLogs(
             @Validated @RequestBody PageRequest<RuleLogBo> request
@@ -86,6 +93,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("清理日志")
+    @SaCheckPermission("iot:rule:remove")
     @PostMapping("/ruleLog/clear")
     public boolean clearRuleLogs(@Validated @RequestBody Request<String> request) {
         String ruleId = request.getData();
@@ -94,18 +102,21 @@ public class RuleEngineController {
     }
 
     @ApiOperation("定时任务列表")
+    @SaCheckPermission("iot:task:query")
     @PostMapping("/tasks/list")
     public Paging<TaskInfoVo> tasks(@Validated @RequestBody PageRequest<TaskInfoBo> request) {
         return ruleEngineService.selectTaskPageList(request);
     }
 
     @ApiOperation("保存定时任务")
+    @SaCheckPermission("iot:task:edit")
     @PostMapping("/task/save")
     public boolean saveTask(@Validated @RequestBody Request<TaskInfoBo> taskInfo) {
         return ruleEngineService.saveTask(taskInfo.getData());
     }
 
     @ApiOperation("停止定时任务")
+    @SaCheckPermission("iot:task:edit")
     @PostMapping("/task/pause")
     public boolean pauseTask(@Validated @RequestBody Request<String> request) {
         String taskId = request.getData();
@@ -113,12 +124,14 @@ public class RuleEngineController {
     }
 
     @ApiOperation("恢复定时任务")
+    @SaCheckPermission("iot:task:edit")
     @PostMapping("/task/resume")
     public boolean resumeTask(@Validated @RequestBody Request<String> request) {
         return ruleEngineService.resumeTask(request.getData());
     }
 
     @ApiOperation("更新定时任务")
+    @SaCheckPermission("iot:task:edit")
     @PostMapping("/task/renew")
     public boolean renewTask(@Validated @RequestBody Request<String> request) {
         String taskId = request.getData();
@@ -127,6 +140,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("删除定时任务")
+    @SaCheckPermission("iot:task:remove")
     @PostMapping("/task/delete")
     public boolean deleteTask(@Validated @RequestBody Request<String> request) {
         String taskId = request.getData();
@@ -135,6 +149,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("定时任务日志list")
+    @SaCheckPermission("iot:task:query")
     @PostMapping("/taskLogs/list")
     public Paging<TaskLogVo> getTaskLogs(
             @Validated @RequestBody PageRequest<TaskLogBo> request
@@ -143,6 +158,7 @@ public class RuleEngineController {
     }
 
     @ApiOperation("清除定时任务日志")
+    @SaCheckPermission("iot:task:remove")
     @PostMapping("/taskLogs/clear")
     public boolean clearTaskLogs(@Validated @RequestBody Request<String> request) {
         return ruleEngineService.clearTaskLogs(request.getData());

+ 14 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ScreenController.java

@@ -10,6 +10,7 @@ import cc.iotkit.manager.dto.bo.screen.PublishChangeBo;
 import cc.iotkit.manager.service.IScreenService;
 import cc.iotkit.model.screen.Screen;
 import cc.iotkit.model.screen.ScreenApi;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.ObjectUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -35,12 +36,14 @@ public class ScreenController {
     private IScreenService screenService;
 
     @ApiOperation(value = "获取大屏列表", httpMethod = "POST")
+    @SaCheckPermission("iot:screen:list")
     @PostMapping("/getScreens")
     public Paging<Screen> getBigScreens(@Validated @RequestBody PageRequest<Screen> request) {
         return screenService.getBigScreens(request);
     }
 
     @ApiOperation(value = "上传大屏资源包")
+    @SaCheckPermission("iot:screen:add")
     @PostMapping("/uploadResourceFile")
     public Long uploadResourceFile(@RequestParam("file") MultipartFile file,
                                    @RequestBody @Validated Request<Long> id){
@@ -52,6 +55,7 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "获取大屏接口")
+    @SaCheckPermission("iot:screen:list")
     @PostMapping("/getScreenApis")
     public List<ScreenApi> getScreenApis(@RequestBody @Validated Request<Long> id) {
         if (ObjectUtil.isEmpty(id.getData())) {
@@ -61,12 +65,14 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "获取默认大屏")
+    @SaCheckPermission("iot:screen:query")
     @PostMapping("/getDefaultScreen")
     public Screen getDefaultScreen() {
         return screenService.getDefaultScreen();
     }
 
     @ApiOperation(value = "同步资源包接口")
+    @SaCheckPermission("iot:screen:query")
     @PostMapping("/syncResourceApis")
     public List<ScreenApi> syncResourceApis(@RequestBody @Validated Request<Long> id) {
         if (ObjectUtil.isEmpty(id.getData())) {
@@ -76,6 +82,7 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "预览接口")
+    @SaCheckPermission("iot:screen:query")
     @PostMapping("/previewApis")
     public void previewApis(@RequestBody  @Validated Request<List<ScreenApi>> screenApis) {
         if (ObjectUtil.isNull(screenApis.getData()) || screenApis.getData().isEmpty()) {
@@ -85,6 +92,7 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "保存大屏接口")
+    @SaCheckPermission("iot:screen:edit")
     @PostMapping("/saveScreenApis")
     public void saveScreenApis(@RequestBody @Validated Request<List<ScreenApi>> screenApis) {
         if (ObjectUtil.isNull(screenApis.getData()) || screenApis.getData().isEmpty()) {
@@ -94,30 +102,35 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "调试模式转换")
+    @SaCheckPermission("iot:screen:edit")
     @PostMapping("/debugModeChange")
     public void debugMode(@RequestBody @Validated Request<DebugChangeBo> debugChange) {
         screenService.debugModeChange(debugChange.getData());
     }
 
     @ApiOperation(value = "添加大屏")
+    @SaCheckPermission("iot:screen:add")
     @PostMapping("/addScreen")
     public void addScreen(@RequestBody @Validated Request<Screen> screen) {
         screenService.addBigScreen(screen.getData());
     }
 
     @ApiOperation(value = "保存大屏")
+    @SaCheckPermission("iot:screen:edit")
     @PostMapping("/saveScreen")
     public void saveScreen(@RequestBody @Validated Request<Screen> screen) {
         screenService.saveBigScreen(screen.getData());
     }
 
     @ApiOperation(value = "发布状态改变")
+    @SaCheckPermission("iot:screen:edit")
     @PostMapping("/publishStatusChange")
     public void publishStatusChange(@RequestBody @Validated Request<PublishChangeBo> req) {
         screenService.publishStatusChange(req.getData());
     }
 
     @ApiOperation(value = "设置默认大屏")
+    @SaCheckPermission("iot:screen:edit")
     @PostMapping("/setDefaultScreen")
     public void setDefaultScreen(@RequestBody @Validated Request<Long> id) {
         if (ObjectUtil.isEmpty(id.getData())) {
@@ -127,6 +140,7 @@ public class ScreenController {
     }
 
     @ApiOperation(value = "删除大屏", httpMethod = "POST")
+    @SaCheckPermission("iot:screen:remove")
     @PostMapping("/deleteScreen")
     public void deleteScreen(@RequestBody @Validated Request<Long> id) {
         if (ObjectUtil.isEmpty(id.getData())) {

+ 12 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/VirtualDeviceController.java

@@ -25,6 +25,7 @@ import cc.iotkit.model.device.VirtualDevice;
 import cc.iotkit.model.device.VirtualDeviceLog;
 import cc.iotkit.temporal.IVirtualDeviceLogData;
 import cc.iotkit.virtualdevice.VirtualManager;
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -53,6 +54,7 @@ public class VirtualDeviceController {
     private IVirtualDeviceLogData virtualDeviceLogData;
 
     @ApiOperation("获取虚拟设备列表")
+    @SaCheckPermission("iot:virtualDevice:query")
     @PostMapping("/list")
     public Paging<VirtualDevice> getDevices(PageRequest<VirtualDevice> pageRequest) {
         return virtualDeviceData.findAll(pageRequest);
@@ -62,6 +64,7 @@ public class VirtualDeviceController {
      * 添加虚拟设备
      */
     @ApiOperation("添加虚拟设备")
+    @SaCheckPermission("iot:virtualDevice:add")
     @PostMapping("/add")
     public void add(@Validated @RequestBody VirtualDevice virtualDevice) {
         virtualDeviceData.save(virtualDevice);
@@ -71,6 +74,7 @@ public class VirtualDeviceController {
      * 修改虚拟设备
      */
     @ApiOperation("修改虚拟设备")
+    @SaCheckPermission("iot:virtualDevice:edit")
     @PostMapping("/modify")
     public void modify(@Validated @RequestBody Request<VirtualDevice> bo) {
         VirtualDevice virtualDevice = bo.getData();
@@ -85,6 +89,7 @@ public class VirtualDeviceController {
      * 获取虚拟设备详情
      */
     @ApiOperation("获取虚拟设备详情")
+    @SaCheckPermission("iot:virtualDevice:query")
     @PostMapping("/getDetail")
     public VirtualDevice detail(@Validated @RequestBody Request<String> bo) {
         return checkOwner(bo.getData());
@@ -94,6 +99,7 @@ public class VirtualDeviceController {
      * 设置虚拟设备状态
      */
     @ApiOperation("设置虚拟设备状态")
+    @SaCheckPermission("iot:virtualDevice:edit")
     @PostMapping("/setState")
     public void setState(@Validated @RequestBody Request<ChangeStateBo> bo) {
         ChangeStateBo data = bo.getData();
@@ -117,6 +123,7 @@ public class VirtualDeviceController {
      * 删除
      */
     @ApiOperation("删除虚拟设备")
+    @SaCheckPermission("iot:virtualDevice:remove")
     @PostMapping("/delete")
     public void delete(@Validated @RequestBody Request<String> bo) {
         String id = bo.getData();
@@ -128,6 +135,7 @@ public class VirtualDeviceController {
      * 删除
      */
     @ApiOperation("批量删除虚拟设备")
+    @SaCheckPermission("iot:virtualDevice:remove")
     @PostMapping("/batchDelete")
     public void batchDelete(@Validated @RequestBody Request<List<String>> ids) {
         virtualDeviceData.deleteByIds(ids.getData());
@@ -137,6 +145,7 @@ public class VirtualDeviceController {
      * 保存脚本
      */
     @ApiOperation("保存脚本")
+    @SaCheckPermission("iot:virtualDevice:edit")
     @PostMapping("/saveScript")
     public void saveScript(@Validated @RequestBody Request<DeviceSaveScriptBo> bo) {
         DeviceSaveScriptBo data = bo.getData();
@@ -151,6 +160,7 @@ public class VirtualDeviceController {
      * 保存关联设备
      */
     @ApiOperation("保存关联设备")
+    @SaCheckPermission("iot:virtualDevice:edit")
     @PostMapping("/saveDevices")
     public void saveDevices(@Validated @RequestBody Request<VirtualSaveDevicesBo> bo) {
         VirtualSaveDevicesBo data = bo.getData();
@@ -165,6 +175,7 @@ public class VirtualDeviceController {
      * 手动执行虚拟设备
      */
     @ApiOperation("手动执行虚拟设备")
+    @SaCheckPermission("iot:virtualDevice:query")
     @PostMapping("/run")
     public void run(@Validated @RequestBody Request<String> bo) {
         String id = bo.getData();
@@ -176,6 +187,7 @@ public class VirtualDeviceController {
      * 取虚拟设备执行日志
      */
     @ApiOperation("取虚拟设备执行日志")
+    @SaCheckPermission("iot:virtualDevice:query")
     @PostMapping("/logs/list")
     public Paging<VirtualDeviceLog> getLogs(
             @Validated @RequestBody PageRequest<DeviceLogQueryBo> bo) {