lobster_menu_canonical_init.sql 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. -- ============================================================================
  2. -- 数字员工菜单规范同步初始化脚本(2026-06-27)
  3. -- 与 fs-agent V20260727_01 / ApplyLobsterCanonicalMenus 配套
  4. --
  5. -- 销售端 company_menu / tenant_company_menu 保留 8 项 + 节点详情 29926 等:
  6. -- 32481,29949,29905,29950,29934,29906,3008,29912
  7. -- 管理端 sys_menu / tenant_sys_menu 额外保留管理专属子菜单:
  8. -- 29933,29925,29963,29964,29951,29907,29908,29909,29965,29966
  9. -- 下线冗余/重复菜单:29937,29939,29947,29938,29944,29936,29946,
  10. -- 29948,29922,29920,29941,29923,29924,29940,29942,29943,29945,3006,3007 等
  11. --
  12. -- 使用说明:
  13. -- 主库模板库执行 PART A
  14. -- 租户库 ylrz_saas 逐租户执行 PART B
  15. -- ============================================================================
  16. -- ######################################################################
  17. -- PART A :主库 sys_menu + company_menu
  18. -- ######################################################################
  19. -- A.1 清理角色关联中的非白名单菜单
  20. DELETE FROM sys_role_menu WHERE menu_id IN (
  21. SELECT menu_id FROM (
  22. SELECT menu_id FROM sys_menu
  23. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  24. AND menu_id NOT IN (
  25. 29900,32481,29949,29905,29950,29934,29906,3008,29912,29926,
  26. 29933,29925,29963,29964,29951,29907,29908,29909,29965,29966
  27. )
  28. ) t
  29. );
  30. DELETE FROM company_role_menu WHERE menu_id IN (
  31. SELECT menu_id FROM (
  32. SELECT menu_id FROM company_menu
  33. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  34. AND menu_id NOT IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926)
  35. ) t
  36. );
  37. -- A.2 删除非白名单菜单项
  38. DELETE FROM sys_menu
  39. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  40. AND menu_id NOT IN (
  41. 29900,32481,29949,29905,29950,29934,29906,3008,29912,29926,
  42. 29933,29925,29963,29964,29951,29907,29908,29909,29965,29966
  43. );
  44. DELETE FROM sys_menu
  45. WHERE menu_id IN (29937, 29939)
  46. OR path IN ('evolution', 'token-stats')
  47. OR component IN ('lobster/evolution/index', 'lobster/token-stats/index');
  48. DELETE FROM company_menu
  49. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  50. AND menu_id NOT IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926);
  51. DELETE FROM company_menu
  52. WHERE menu_id IN (29937, 29939,29925,29951,29963,29964,29907,29908,29909,29933,29965,29966)
  53. OR path IN ('evolution', 'token-stats','semantic-keywords','sensitive-words','prompt','sales-corpus','api-registry','qdrant','industry-corpus-matrix','udd-debug');
  54. -- A.3 重建 sys_menu(UNHEX 保证中文名称)
  55. REPLACE INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, icon, visible, status, is_frame, is_cache, perms, create_by, create_time, remark) VALUES
  56. (29900, CONVERT(UNHEX('4149E695B0E5AD97E59198E5B7A5') USING utf8mb4), 0, 100, '/lobster', '', 'M', 'el-icon-cpu', '0', '0', 0, 0, NULL, 'admin', NOW(), 'AI Digital Employee'),
  57. (32481, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E6A8A1E69DBF') USING utf8mb4), 29900, 1, 'workflowLobster', 'company/workflowLobster/index', 'C', 'el-icon-share', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  58. (29949, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E689A7E8A18C') USING utf8mb4), 29900, 2, 'workflow-execution', 'lobster/workflow-execution/index', 'C', 'el-icon-guide', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  59. (29905, CONVERT(UNHEX('E5AE9EE4BE8BE79B91E68EA7') USING utf8mb4), 29900, 3, 'instance', 'lobster/instance/index', 'C', 'el-icon-monitor', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  60. (29950, CONVERT(UNHEX('E5AEA2E688B7E794BBE5838F') USING utf8mb4), 29900, 4, 'profile', 'lobster/profile/hub', 'C', 'el-icon-user', '0', '0', 0, 0, 'workflow:lobster:profile', 'admin', NOW(), NULL),
  61. (29934, CONVERT(UNHEX('E5AFB9E5A496E8A792E889B2E9858DE7BDAE') USING utf8mb4), 29900, 5, 'identity-config', 'lobster/identity-config/index', 'C', 'el-icon-view', '0', '0', 0, 0, 'workflow:lobster:identity', 'admin', NOW(), NULL),
  62. (29906, CONVERT(UNHEX('E8AF9DE69CAFE4BC98E58C96E5AEA1E6A0B8') USING utf8mb4), 29900, 6, 'optimization', 'lobster/optimization/index', 'C', 'el-icon-eye-open', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'unified optimization audit'),
  63. (3008, CONVERT(UNHEX('E58AA8E68081E88A82E782B9E5AEA1E689B9') USING utf8mb4), 29900, 7, 'dynamic-impl', 'lobster/dynamic-impl/index', 'C', 'el-icon-connection', '0', '0', 0, 0, 'workflow:lobster:audit', 'admin', NOW(), NULL),
  64. (29912, CONVERT(UNHEX('E8819AE59088E8818AE5A4A9') USING utf8mb4), 29900, 8, 'chat-aggregate', 'lobster/chat-aggregate/index', 'C', 'el-icon-message', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  65. (29926, CONVERT(UNHEX('E88A82E782B9E8AFA6E68385') USING utf8mb4), 29900, 99, 'node-detail', 'lobster/node-detail/index', 'C', 'el-icon-document', '1', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'hidden route'),
  66. (29933, CONVERT(UNHEX('E8AFADE4B989E585B3E994AEE8AF8D') USING utf8mb4), 29900, 19, 'semantic-keywords', 'lobster/semantic-keywords/index', 'C', 'el-icon-key', '0', '0', 0, 0, 'workflow:lobster:semantic', 'admin', NOW(), 'lobster_tenant_keywords'),
  67. (29925, CONVERT(UNHEX('E6958FE6849FE8AF8DE5BA93') USING utf8mb4), 29900, 20, 'sensitive-words', 'lobster/sensitive-words/index', 'C', 'el-icon-warning', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  68. (29963, CONVERT(UNHEX('E8BF9DE7A681E8AF8DE5BA93') USING utf8mb4), 29900, 21, 'forbidden-words', 'lobster/replace-words/index', 'C', 'el-icon-warning', '0', '0', 0, 0, 'workflow:lobster:replace', 'admin', NOW(), NULL),
  69. (29964, CONVERT(UNHEX('E69893E99499E8AF8DE5BA93') USING utf8mb4), 29900, 22, 'typo-words', 'lobster/replace-words/index', 'C', 'el-icon-edit', '0', '0', 0, 0, 'workflow:lobster:replace', 'admin', NOW(), NULL),
  70. (29951, CONVERT(UNHEX('E59091E9878FE79FA5E8AF86E5BA93') USING utf8mb4), 29900, 23, 'qdrant', 'lobster/qdrant/index', 'C', 'el-icon-collection', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'Qdrant vector KB'),
  71. (29907, CONVERT(UNHEX('E68F90E7A4BAE8AF8DE7AEA1E79086') USING utf8mb4), 29900, 24, 'prompt', 'lobster/prompt/index', 'C', 'el-icon-edit', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  72. (29908, CONVERT(UNHEX('E99480E586A0E8AFADE69699E5ADA6E4B9A0') USING utf8mb4), 29900, 25, 'sales-corpus', 'lobster/sales-corpus/index', 'C', 'el-icon-star', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  73. (29909, CONVERT(UNHEX('E68EA5E58FA3E6B3A8E5868CE4B8ADE5BF83') USING utf8mb4), 29900, 26, 'api-registry', 'lobster/api-registry/index', 'C', 'el-icon-nested', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  74. (29965, CONVERT(UNHEX('E8A18CE4B89AE8AFADE69699E79FA9E998B5') USING utf8mb4), 29900, 27, 'industry-corpus-matrix', 'lobster/industry-corpus-matrix/index', 'C', 'el-icon-grid', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'UDD industry corpus matrix'),
  75. (29966, CONVERT(UNHEX('E6B7B1E5BAA6E5AFB9E8AF9DE8B083E8AF95') USING utf8mb4), 29900, 28, 'udd-debug', 'lobster/udd-debug/index', 'C', 'el-icon-bug', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'UDD debug');
  76. -- A.4 同步 company_menu(销售端子集)
  77. INSERT IGNORE INTO company_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, company_id, remark)
  78. SELECT s.menu_id, s.menu_name, s.parent_id, s.order_num, s.path, s.component, s.is_frame, s.is_cache, s.menu_type, s.visible, s.status, s.perms, s.icon, s.create_by, s.create_time, c.company_id, s.remark
  79. FROM sys_menu s
  80. CROSS JOIN (SELECT DISTINCT company_id FROM company_menu WHERE company_id IS NOT NULL) c
  81. WHERE s.menu_id IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926)
  82. AND NOT EXISTS (SELECT 1 FROM company_menu x WHERE x.menu_id = s.menu_id AND x.company_id = c.company_id);
  83. UPDATE company_menu cm
  84. INNER JOIN sys_menu sm ON cm.menu_id = sm.menu_id
  85. SET cm.menu_name = sm.menu_name, cm.parent_id = sm.parent_id, cm.order_num = sm.order_num,
  86. cm.path = sm.path, cm.component = sm.component, cm.is_frame = sm.is_frame, cm.is_cache = sm.is_cache,
  87. cm.menu_type = sm.menu_type, cm.visible = sm.visible, cm.status = sm.status, cm.perms = sm.perms,
  88. cm.icon = sm.icon, cm.remark = sm.remark
  89. WHERE sm.menu_id IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926);
  90. DELETE FROM company_menu
  91. WHERE (menu_id = 29900 OR parent_id = 29900)
  92. AND menu_id NOT IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926);
  93. -- A.5 补全角色授权
  94. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  95. SELECT r.role_id, s.menu_id FROM sys_role_menu r CROSS JOIN sys_menu s
  96. WHERE r.menu_id = 29900 AND s.parent_id = 29900 AND s.menu_type = 'C' AND s.visible = '0'
  97. AND NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = r.role_id AND x.menu_id = s.menu_id);
  98. INSERT IGNORE INTO company_role_menu (role_id, menu_id)
  99. SELECT r.role_id, s.menu_id FROM company_role_menu r CROSS JOIN sys_menu s
  100. WHERE r.menu_id = 29900 AND s.parent_id = 29900 AND s.menu_type = 'C' AND s.visible = '0'
  101. AND s.menu_id IN (29900,32481,29949,29905,29950,29934,29906,3008,29912)
  102. AND NOT EXISTS (SELECT 1 FROM company_role_menu x WHERE x.role_id = r.role_id AND x.menu_id = s.menu_id);
  103. -- ######################################################################
  104. -- PART B :逐租户 tenant_sys_menu + tenant_company_menu(模板库执行)
  105. -- ######################################################################
  106. -- ######################################################################
  107. DELETE FROM tenant_sys_menu
  108. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  109. AND menu_id NOT IN (
  110. 29900,32481,29949,29905,29950,29934,29906,3008,29912,29926,
  111. 29933,29925,29963,29964,29951,29907,29908,29909,29965,29966
  112. );
  113. DELETE FROM tenant_sys_menu
  114. WHERE menu_id IN (29937, 29939)
  115. OR path IN ('evolution', 'token-stats')
  116. OR component IN ('lobster/evolution/index', 'lobster/token-stats/index');
  117. DELETE FROM tenant_company_menu
  118. WHERE (menu_id = 29900 OR parent_id = 29900 OR parent_id = 29901)
  119. AND menu_id NOT IN (29900,32481,29949,29905,29950,29934,29906,3008,29912,29926);
  120. DELETE FROM tenant_company_menu
  121. WHERE menu_id IN (29937, 29939,29925,29951,29963,29964,29907,29908,29909,29933,29965,29966)
  122. OR path IN ('evolution', 'token-stats','semantic-keywords','sensitive-words','prompt','sales-corpus','api-registry','qdrant','industry-corpus-matrix','udd-debug');
  123. REPLACE INTO tenant_sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, icon, visible, status, is_frame, is_cache, perms, create_by, create_time, remark) VALUES
  124. (29900, CONVERT(UNHEX('4149E695B0E5AD97E59198E5B7A5') USING utf8mb4), 0, 100, '/lobster', '', 'M', 'el-icon-cpu', '0', '0', 0, 0, NULL, 'admin', NOW(), 'AI Digital Employee'),
  125. (32481, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E6A8A1E69DBF') USING utf8mb4), 29900, 1, 'workflowLobster', 'company/workflowLobster/index', 'C', 'el-icon-share', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  126. (29949, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E689A7E8A18C') USING utf8mb4), 29900, 2, 'workflow-execution', 'lobster/workflow-execution/index', 'C', 'el-icon-guide', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  127. (29905, CONVERT(UNHEX('E5AE9EE4BE8BE79B91E68EA7') USING utf8mb4), 29900, 3, 'instance', 'lobster/instance/index', 'C', 'el-icon-monitor', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  128. (29950, CONVERT(UNHEX('E5AEA2E688B7E794BBE5838F') USING utf8mb4), 29900, 4, 'profile', 'lobster/profile/hub', 'C', 'el-icon-user', '0', '0', 0, 0, 'workflow:lobster:profile', 'admin', NOW(), NULL),
  129. (29934, CONVERT(UNHEX('E5AFB9E5A496E8A792E889B2E9858DE7BDAE') USING utf8mb4), 29900, 5, 'identity-config', 'lobster/identity-config/index', 'C', 'el-icon-view', '0', '0', 0, 0, 'workflow:lobster:identity', 'admin', NOW(), NULL),
  130. (29906, CONVERT(UNHEX('E8AF9DE69CAFE4BC98E58C96E5AEA1E6A0B8') USING utf8mb4), 29900, 6, 'optimization', 'lobster/optimization/index', 'C', 'el-icon-eye-open', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'unified optimization audit'),
  131. (3008, CONVERT(UNHEX('E58AA8E68081E88A82E782B9E5AEA1E689B9') USING utf8mb4), 29900, 7, 'dynamic-impl', 'lobster/dynamic-impl/index', 'C', 'el-icon-connection', '0', '0', 0, 0, 'workflow:lobster:audit', 'admin', NOW(), NULL),
  132. (29912, CONVERT(UNHEX('E8819AE59088E8818AE5A4A9') USING utf8mb4), 29900, 8, 'chat-aggregate', 'lobster/chat-aggregate/index', 'C', 'el-icon-message', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  133. (29926, CONVERT(UNHEX('E88A82E782B9E8AFA6E68385') USING utf8mb4), 29900, 99, 'node-detail', 'lobster/node-detail/index', 'C', 'el-icon-document', '1', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'hidden route'),
  134. (29933, CONVERT(UNHEX('E8AFADE4B989E585B3E994AEE8AF8D') USING utf8mb4), 29900, 19, 'semantic-keywords', 'lobster/semantic-keywords/index', 'C', 'el-icon-key', '0', '0', 0, 0, 'workflow:lobster:semantic', 'admin', NOW(), 'lobster_tenant_keywords'),
  135. (29925, CONVERT(UNHEX('E6958FE6849FE8AF8DE5BA93') USING utf8mb4), 29900, 20, 'sensitive-words', 'lobster/sensitive-words/index', 'C', 'el-icon-warning', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  136. (29963, CONVERT(UNHEX('E8BF9DE7A681E8AF8DE5BA93') USING utf8mb4), 29900, 21, 'forbidden-words', 'lobster/replace-words/index', 'C', 'el-icon-warning', '0', '0', 0, 0, 'workflow:lobster:replace', 'admin', NOW(), NULL),
  137. (29964, CONVERT(UNHEX('E69893E99499E8AF8DE5BA93') USING utf8mb4), 29900, 22, 'typo-words', 'lobster/replace-words/index', 'C', 'el-icon-edit', '0', '0', 0, 0, 'workflow:lobster:replace', 'admin', NOW(), NULL),
  138. (29951, CONVERT(UNHEX('E59091E9878FE79FA5E8AF86E5BA93') USING utf8mb4), 29900, 23, 'qdrant', 'lobster/qdrant/index', 'C', 'el-icon-collection', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'Qdrant vector KB'),
  139. (29907, CONVERT(UNHEX('E68F90E7A4BAE8AF8DE7AEA1E79086') USING utf8mb4), 29900, 24, 'prompt', 'lobster/prompt/index', 'C', 'el-icon-edit', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  140. (29908, CONVERT(UNHEX('E99480E586A0E8AFADE69699E5ADA6E4B9A0') USING utf8mb4), 29900, 25, 'sales-corpus', 'lobster/sales-corpus/index', 'C', 'el-icon-star', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  141. (29909, CONVERT(UNHEX('E68EA5E58FA3E6B3A8E5868CE4B8ADE5BF83') USING utf8mb4), 29900, 26, 'api-registry', 'lobster/api-registry/index', 'C', 'el-icon-nested', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  142. (29965, CONVERT(UNHEX('E8A18CE4B89AE8AFADE69699E79FA9E998B5') USING utf8mb4), 29900, 27, 'industry-corpus-matrix', 'lobster/industry-corpus-matrix/index', 'C', 'el-icon-grid', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'UDD industry corpus matrix'),
  143. (29966, CONVERT(UNHEX('E6B7B1E5BAA6E5AFB9E8AF9DE8B083E8AF95') USING utf8mb4), 29900, 28, 'udd-debug', 'lobster/udd-debug/index', 'C', 'el-icon-bug', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'UDD debug');
  144. REPLACE INTO tenant_company_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, icon, visible, status, is_frame, is_cache, perms, create_by, create_time, remark) VALUES
  145. (29900, CONVERT(UNHEX('4149E695B0E5AD97E59198E5B7A5') USING utf8mb4), 0, 100, '/lobster', '', 'M', 'el-icon-cpu', '0', '0', 0, 0, NULL, 'admin', NOW(), 'AI Digital Employee'),
  146. (32481, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E6A8A1E69DBF') USING utf8mb4), 29900, 1, 'workflowLobster', 'company/workflowLobster/index', 'C', 'el-icon-share', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  147. (29949, CONVERT(UNHEX('E5B7A5E4BD9CE6B581E689A7E8A18C') USING utf8mb4), 29900, 2, 'workflow-execution', 'lobster/workflow-execution/index', 'C', 'el-icon-guide', '0', '0', 0, 0, 'workflow:lobster:edit', 'admin', NOW(), NULL),
  148. (29905, CONVERT(UNHEX('E5AE9EE4BE8BE79B91E68EA7') USING utf8mb4), 29900, 3, 'instance', 'lobster/instance/index', 'C', 'el-icon-monitor', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  149. (29950, CONVERT(UNHEX('E5AEA2E688B7E794BBE5838F') USING utf8mb4), 29900, 4, 'profile', 'lobster/profile/hub', 'C', 'el-icon-user', '0', '0', 0, 0, 'workflow:lobster:profile', 'admin', NOW(), NULL),
  150. (29934, CONVERT(UNHEX('E5AFB9E5A496E8A792E889B2E9858DE7BDAE') USING utf8mb4), 29900, 5, 'identity-config', 'lobster/identity-config/index', 'C', 'el-icon-view', '0', '0', 0, 0, 'workflow:lobster:identity', 'admin', NOW(), NULL),
  151. (29906, CONVERT(UNHEX('E8AF9DE69CAFE4BC98E58C96E5AEA1E6A0B8') USING utf8mb4), 29900, 6, 'optimization', 'lobster/optimization/index', 'C', 'el-icon-eye-open', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'unified optimization audit'),
  152. (3008, CONVERT(UNHEX('E58AA8E68081E88A82E782B9E5AEA1E689B9') USING utf8mb4), 29900, 7, 'dynamic-impl', 'lobster/dynamic-impl/index', 'C', 'el-icon-connection', '0', '0', 0, 0, 'workflow:lobster:audit', 'admin', NOW(), NULL),
  153. (29912, CONVERT(UNHEX('E8819AE59088E8818AE5A4A9') USING utf8mb4), 29900, 8, 'chat-aggregate', 'lobster/chat-aggregate/index', 'C', 'el-icon-message', '0', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), NULL),
  154. (29926, CONVERT(UNHEX('E88A82E782B9E8AFA6E68385') USING utf8mb4), 29900, 99, 'node-detail', 'lobster/node-detail/index', 'C', 'el-icon-document', '1', '0', 0, 0, 'workflow:lobster:query', 'admin', NOW(), 'hidden route');