@gadmin2n/schematics 0.0.69 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/canvas.prisma +45 -0
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/example.prisma +24 -23
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +93 -90
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Audit.ts +70 -0
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +3 -3
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Page.ts +70 -0
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/PageResource.ts +70 -0
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Resource.ts +70 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RolePages.ts +70 -0
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RoleResource.ts +70 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/SavedQuery.ts +70 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/User.ts +70 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +95 -2
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +4 -2
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +7 -1
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/config/index.ts +1 -3
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +1 -1
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +6 -5
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +157 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +290 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/permission-manage.ts +184 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/prismaModels.ts +143 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/sync-resources.ts +100 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/syncDataMngtPages.ts +119 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +1 -3
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +109 -143
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +5 -2
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.spec.ts +20 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.ts +81 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.dto.ts +49 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.module.ts +11 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.spec.ts +334 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.ts +249 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +2 -1
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.ts +2 -2
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.ts +17 -4
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +7737 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.env +1 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.eslintrc.json +38 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.prettierignore +2 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/web/dev-shell-entry.html +49 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -2
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +137 -111
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +46 -44
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +32 -12
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +74 -23
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +9 -9
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +57 -31
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +53 -24
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SqlModal.tsx +148 -72
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +190 -16
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +914 -63
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/agentAttributes.ts +17 -8
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/index.ts +0 -10
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +969 -46
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/pagePathUtils.ts +66 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/promptGenerator.ts +85 -25
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/propPatcher.ts +84 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +16 -20
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/index.ts +4 -4
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +13 -13
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +15 -16
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +15 -15
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -2
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +896 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +219 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +159 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +192 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +1034 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +8 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +509 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +66 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +552 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +263 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +35 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +207 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +382 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +135 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +53 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +8 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +1 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +31 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +9 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +39349 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +19 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +12 -12
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +22 -26
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +13 -9
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +4 -4
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +22 -37
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +4 -4
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +10 -10
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +1 -1
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +113 -65
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +14 -14
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +1 -1
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +2 -2
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/index.ts +1 -1
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +21 -21
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +17 -13
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/http.ts +26 -5
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +221 -51
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +3 -3
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +199 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +335 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +56 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +401 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +129 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/SkillMenu.tsx +202 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/UndoConfirm.tsx +36 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/index.tsx +8 -0
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +835 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/audit-log.enum.ts +8 -8
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/index.ts +1 -1
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +120 -70
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-name-initials.ts +3 -3
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-random-color.ts +11 -11
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +16 -19
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +1 -1
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +99 -73
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -27
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/page-tree.ts +74 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +95 -51
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.tsx +7 -3
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +15 -15
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchDelete.ts +10 -10
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperations.ts +8 -7
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperationsCore.ts +10 -10
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchUpdate.ts +10 -10
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +36 -27
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useECharts.tsx +144 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +4 -4
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +34 -34
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +8 -4
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRowSelection.ts +1 -1
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +55 -41
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +8 -8
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +9 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +193 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +194 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +81 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +37 -37
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +23 -31
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +34 -35
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +1 -1
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +4 -6
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +41 -34
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +33 -20
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +87 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasEditPage.tsx +192 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +409 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +1372 -0
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +384 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +476 -0
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/ComponentThumbnail.tsx +135 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/IsolatedLivePreview.tsx +101 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +236 -0
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +200 -0
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasApi.ts +92 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +25 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +875 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +126 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasI18n.ts +11 -0
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +115 -0
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ChartViewerConfigModal.tsx +217 -0
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +153 -0
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +211 -0
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +90 -0
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +87 -0
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +204 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +1153 -0
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/index.tsx +2 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +45 -0
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +45 -0
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +108 -0
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/create.tsx +105 -0
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +121 -0
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/index.tsx +4 -0
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +237 -0
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +74 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +29 -20
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +3 -3
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +7 -3
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +58 -23
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +206 -122
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +8 -4
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +1 -1
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +345 -190
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +1 -1
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +341 -340
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +2 -2
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +2 -2
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +41 -24
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +64 -36
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +2 -2
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +78 -40
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +3 -3
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +4 -4
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +19 -9
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +45 -47
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +4 -4
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +1 -1
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +121 -147
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +1 -1
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +2 -2
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +2 -2
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +25 -19
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -5
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +10 -10
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +31 -26
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +76 -71
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/setupTests.ts +1 -1
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -1
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -3
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +1 -1
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -1
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +42 -25
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +1193 -32
  220. package/package.json +1 -1
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/seedDataMngtPages.ts +0 -258
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentPanel.tsx +0 -497
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/skills.ts +0 -464
@@ -1,17 +1,180 @@
1
1
  import { AgentType } from './agentAttributes';
2
2
 
3
+ export interface QuickSelectOption {
4
+ label: string;
5
+ value: string;
6
+ }
7
+
3
8
  export interface InspectorAction {
4
9
  label: string;
5
- /** Sub-skill ID from skills.ts */
6
- subSkillId: string;
7
- /** Parent skill ID */
8
- skillId: string;
10
+ /** Skill folder name (e.g. "ui-config-update"). null if no matching skill. */
11
+ skill: string | null;
9
12
  /** Prompt template. Use {resource} and {field} as placeholders. */
10
13
  promptTemplate?: string;
11
- /** If true, show a free-text input instead of pre-filled prompt */
14
+ /**
15
+ * Optional text prepended BEFORE the user's input (for requiresInput actions).
16
+ * e.g. "修改为:" → generates "修改为:\n{userInput}"
17
+ * Defaults to "修改为:" if not set and no promptSuffix is present.
18
+ */
19
+ promptPrefix?: string;
20
+ /**
21
+ * Optional text appended AFTER the user's input (for requiresInput actions).
22
+ * Use this to add constraint notes or guidelines that should follow the user's request,
23
+ * e.g. "注意:BulkActions 是公共组件,不可直接修改其源码。"
24
+ */
25
+ promptSuffix?: string;
26
+ /** If true, show a free-text input instead of pre-filled prompt (for "其他" catch-all) */
12
27
  freeInput?: boolean;
28
+ /**
29
+ * If true, show a modal asking the user to fill in supplementary details
30
+ * before sending the prompt. The user's input is appended to promptTemplate.
31
+ */
32
+ requiresInput?: boolean;
33
+ /** Placeholder text shown in the supplementary-input modal */
34
+ inputPlaceholder?: string;
35
+ /**
36
+ * If true, show a confirmation dialog before sending the prompt.
37
+ * Use this for destructive or hard-to-reverse actions.
38
+ */
39
+ requiresConfirm?: boolean;
40
+ /** Description shown inside the confirmation dialog */
41
+ confirmDescription?: string;
42
+ /**
43
+ * If set, renders a dynamic sub-menu listing fields not yet shown on the page.
44
+ * User picks a field, then sees a confirmation dialog — no textarea needed.
45
+ * 'add-after' / 'add-before' controls the generated prompt wording.
46
+ */
47
+ fieldSubMenu?: 'add-after' | 'add-before';
48
+ /** Sub-menu children — renders as a nested Ant Design sub-menu */
49
+ children?: InspectorAction[];
50
+
51
+ // ── 快捷操作类型(不走 agent)──────────────────────────────────────────────
52
+
53
+ /** 快捷输入框:弹出输入框,用户填入新值,前端直接替换 JSX code 中的 prop */
54
+ quickInput?: boolean;
55
+ quickInputPlaceholder?: string;
56
+
57
+ /** 快捷下拉:弹出 Select,用户选择后前端直接替换 prop 值 */
58
+ quickSelect?: boolean;
59
+ quickSelectOptions?: QuickSelectOption[];
60
+
61
+ /**
62
+ * 快捷开关:点击后直接切换 boolean prop,无需弹框。
63
+ * labelWhenActive: 当 prop 为 true 时显示的 label。
64
+ * labelWhenInactive: 当 prop 为 false 时显示的 label。
65
+ * defaultValue: prop 缺省时认为的初始值。
66
+ */
67
+ quickToggle?: boolean;
68
+ labelWhenActive?: string;
69
+ labelWhenInactive?: string;
70
+ defaultValue?: boolean;
71
+
72
+ /** 弹出自由对话框:走 agent 自由对话(skill 为 null) */
73
+ openDialog?: boolean;
74
+ dialogPlaceholder?: string;
75
+
76
+ /** 所有快捷操作共用:要操作的 prop 名称 */
77
+ propName?: string;
78
+
79
+ /**
80
+ * If set, this item triggers a named action callback in SkillMenu
81
+ * instead of sending a prompt to the agent.
82
+ */
83
+ actionKey?: 'editData' | 'deleteData' | 'addData' | 'addPage';
13
84
  }
14
85
 
86
+ /**
87
+ * SkillMenu 快捷操作配置。
88
+ * 每个 key 对应一类页面,SkillMenu 根据当前页面类型按需读取。
89
+ *
90
+ * 现有 key:
91
+ * page — "本页面" 固定区块(数据管理页可用)
92
+ * project — "本项目" 固定区块(始终显示)
93
+ * formPage — 表单页专属(pageType === 'create' | 'edit')
94
+ *
95
+ * 扩展示例(未来按需添加):
96
+ * listPage — 列表页专属
97
+ * showPage — 详情页专属
98
+ */
99
+ export const SKILL_MENU_CONFIG: Record<string, InspectorAction[]> = {
100
+ /** "本项目" 固定区块,始终显示 */
101
+ project: [
102
+ {
103
+ label: '添加新的数据表',
104
+ skill: null,
105
+ actionKey: 'addData',
106
+ },
107
+ {
108
+ label: '添加新页面',
109
+ skill: null,
110
+ actionKey: 'addPage',
111
+ },
112
+ ],
113
+
114
+ /** "本页面" 固定区块,所有gadmin2的CRUD数据管理页可用 */
115
+ page: [
116
+ {
117
+ label: '修改数据表',
118
+ skill: null,
119
+ actionKey: 'editData',
120
+ },
121
+ {
122
+ label: '删除数据表及页面',
123
+ skill: null,
124
+ actionKey: 'deleteData',
125
+ },
126
+ ],
127
+
128
+ /** 表单页(create / edit)专属操作 */
129
+ formPage: [
130
+ {
131
+ label: '将表单改为多步骤向导',
132
+ skill: 'form-wizard-steps',
133
+ requiresInput: true,
134
+ inputPlaceholder:
135
+ '请描述步骤划分,例如:\n第一步:基本信息(名称、类型)\n第二步:配置参数\n第三步:确认提交',
136
+ },
137
+ {
138
+ label: "将创建页改为'只编辑不新增'",
139
+ skill: 'form-singleton-form',
140
+ requiresConfirm: true,
141
+ confirmDescription:
142
+ '将把当前创建页改为单例表单模式:只保留编辑功能,不允许新增记录。',
143
+ },
144
+ {
145
+ label: '保存成功后弹提示/跳转',
146
+ skill: 'form-post-save-alert',
147
+ requiresInput: true,
148
+ inputPlaceholder:
149
+ '请描述保存后的行为,例如:\n- 显示"保存成功"提示后跳转回列表页\n- 弹窗显示提交编号,关闭后留在当前页',
150
+ },
151
+ {
152
+ label: '在表单顶部添加说明横幅',
153
+ skill: 'form-help-alert',
154
+ requiresInput: true,
155
+ inputPlaceholder:
156
+ '请输入横幅说明文字,例如:\n此表单提交后不可修改,请仔细核对后再提交。',
157
+ },
158
+ {
159
+ label: '在表单底部添加文档链接',
160
+ skill: 'form-external-help-links',
161
+ requiresInput: true,
162
+ inputPlaceholder:
163
+ '请提供链接文字和 URL,例如:\n链接文字"查看配置文档",URL: https://docs.example.com\n链接文字"权限申请指引",URL: https://wiki.example.com/permissions',
164
+ },
165
+ {
166
+ label: '表单根据当前业务隔离数据',
167
+ skill: 'form-business-isolation',
168
+ requiresConfirm: true,
169
+ confirmDescription:
170
+ '将为当前表单添加业务隔离逻辑:新建/编辑时自动注入当前业务标识(studio_id)。注意:列表页的数据过滤需另行配置 permanentFilter(参考 list-search-filter skill)。',
171
+ },
172
+ ],
173
+
174
+ // listPage: [...], // 未来扩展
175
+ // showPage: [...], // 未来扩展
176
+ };
177
+
15
178
  export interface InspectedElementInfo {
16
179
  type: AgentType;
17
180
  field?: string;
@@ -35,76 +198,836 @@ function showF(resource: string, field: string): string {
35
198
  return `${resource} 详情页的 "${field}" 字段`;
36
199
  }
37
200
 
38
- export function getInspectorActions(info: InspectedElementInfo): InspectorAction[] {
201
+ export function getInspectorActions(
202
+ info: InspectedElementInfo,
203
+ ): InspectorAction[] {
39
204
  const { type, resource, field } = info;
40
205
  const r = resource;
41
206
  const f = field || '';
42
207
 
43
208
  switch (type) {
44
- case 'table-column':
209
+ case 'list-column':
45
210
  return [
46
- { label: '不显示',subSkillId: 'column-visibility', skillId: 'list-customization', promptTemplate: `隐藏 ${col(r, f)}` },
47
- { label: '修改样式', subSkillId: 'column-render', skillId: 'list-customization', promptTemplate: `自定义 ${col(r, f)}的渲染样式` },
48
- { label: '修改描述', subSkillId: 'page-i18n', skillId: 'i18n', promptTemplate: `修改 ${col(r, f)}的显示名称` },
49
- { label: '固定列', subSkillId: 'fixed-column', skillId: 'list-customization', promptTemplate: `将 ${col(r, f)}固定到左侧/右侧` },
50
- { label: '行内编辑', subSkillId: 'inline-edit', skillId: 'list-customization', promptTemplate: `为 ${col(r, f)}启用行内编辑` },
51
- { label: '排序', subSkillId: 'ui-config', skillId: 'ui-config', promptTemplate: `为 ${col(r, f)}添加排序` },
52
- { label: '筛选', subSkillId: 'ui-config', skillId: 'ui-config', promptTemplate: `为 ${col(r, f)}添加筛选` },
53
- { label: '其他', subSkillId: 'list-customization', skillId: 'list-customization', freeInput: true },
211
+ {
212
+ label: '不显示(仅页面)',
213
+ skill: 'ui-config-update',
214
+ promptTemplate: `隐藏 ${col(r, f)}(仅页面不显示)`,
215
+ requiresConfirm: true,
216
+ confirmDescription: `将从 ${r} 列表页面中隐藏 "${f}" 列。数据库字段不受影响,可随时恢复显示。`,
217
+ },
218
+ {
219
+ label: '修改字段值展示样式',
220
+ skill: 'list-column-render',
221
+ promptTemplate: `自定义 ${col(r, f)} 的渲染样式`,
222
+ requiresInput: true,
223
+ inputPlaceholder:
224
+ '请描述样式要求,例如:用颜色区分状态,ACTIVE 显示绿色,INACTIVE 显示红色',
225
+ },
226
+ {
227
+ label: '修改表头描述(label)',
228
+ skill: 'page-i18n',
229
+ promptTemplate: `修改 ${col(r, f)} 的显示名称(通过 i18n 翻译文件)`,
230
+ requiresInput: true,
231
+ inputPlaceholder:
232
+ '请分别提供中文和英文名称,例如:\n中文:审核状态\n英文:Review Status\n(翻译 key:resources.{resourceName}.fields.{fieldName})',
233
+ },
234
+ {
235
+ label: '固定列',
236
+ skill: 'list-column-fixed',
237
+ promptTemplate: `将 ${col(r, f)} 固定到左侧/右侧`,
238
+ requiresInput: true,
239
+ inputPlaceholder: '请指定固定方向:左 / 右',
240
+ },
241
+ {
242
+ label: '支持行内编辑',
243
+ skill: 'list-column-inline-edit',
244
+ promptTemplate: `为 ${col(r, f)} 启用行内编辑`,
245
+ requiresConfirm: true,
246
+ confirmDescription: `将为 ${r} 列表的 "${f}" 列开启行内编辑,用户可直接在表格中修改该字段的值。`,
247
+ },
248
+ {
249
+ label: '添加表头排序',
250
+ skill: 'ui-config-update',
251
+ promptTemplate: `为 ${col(r, f)} 添加排序`,
252
+ requiresConfirm: true,
253
+ confirmDescription: `将为 ${r} 列表的 "${f}" 列添加点击排序功能。`,
254
+ },
255
+ {
256
+ label: '移除表头排序',
257
+ skill: 'ui-config-update',
258
+ promptTemplate: `移除 ${col(r, f)} 的排序`,
259
+ requiresConfirm: true,
260
+ confirmDescription: `将移除 ${r} 列表 "${f}" 列的排序功能。`,
261
+ },
262
+ {
263
+ label: '添加表头搜索',
264
+ skill: 'ui-config-update',
265
+ promptTemplate: `为 ${col(r, f)} 添加搜索过滤`,
266
+ requiresConfirm: true,
267
+ confirmDescription: `将为 ${r} 列表的 "${f}" 列添加表头搜索过滤。`,
268
+ },
269
+ {
270
+ label: '移除表头搜索',
271
+ skill: 'ui-config-update',
272
+ promptTemplate: `移除 ${col(r, f)} 的搜索过滤`,
273
+ requiresConfirm: true,
274
+ confirmDescription: `将移除 ${r} 列表 "${f}" 列的表头搜索过滤。`,
275
+ },
276
+ {
277
+ label: '在其后面添加展示字段',
278
+ skill: 'ui-config-update',
279
+ promptTemplate: `在 ${r} ${col(r, f)} 后面添加展示字段`,
280
+ fieldSubMenu: 'add-after',
281
+ },
282
+ {
283
+ label: '在其前面添加展示字段',
284
+ skill: 'ui-config-update',
285
+ promptTemplate: `在 ${r} ${col(r, f)} 前面添加展示字段`,
286
+ fieldSubMenu: 'add-before',
287
+ },
288
+ {
289
+ label: '在列中添加关联字段',
290
+ skill: 'list-extend-prisma-select',
291
+ promptTemplate: `为 ${col(r, f)} 添加关联字段展示`,
292
+ requiresInput: true,
293
+ inputPlaceholder:
294
+ '请描述要添加的关联字段,例如:添加 author.name 作者姓名',
295
+ },
296
+ {
297
+ label: '自定义',
298
+ skill: null,
299
+ requiresInput: true,
300
+ promptTemplate: `对 ${r} 列表中的 "${f}" 列进行修改`,
301
+ promptPrefix: '要求:\n',
302
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
303
+ },
54
304
  ];
55
305
 
56
306
  case 'form-field':
57
307
  return [
58
- { label: '不显示',subSkillId: 'form-field-dependencies', skillId: 'form-customization', promptTemplate: `隐藏 ${formF(r, f)}` },
59
- { label: '修改样式', subSkillId: 'form-customization', skillId: 'form-customization', promptTemplate: `自定义 ${formF(r, f)}的组件` },
60
- { label: '添加提示', subSkillId: 'field-tooltip', skillId: 'form-customization', promptTemplate: `为 ${formF(r, f)}添加 Tooltip` },
61
- { label: '添加校验', subSkillId: 'custom-validator', skillId: 'form-customization', promptTemplate: `为 ${formF(r, f)}添加校验规则` },
62
- { label: '字段联动', subSkillId: 'form-field-dependencies', skillId: 'form-customization', promptTemplate: `为 ${formF(r, f)}添加联动依赖` },
63
- { label: '其他', subSkillId: 'form-customization', skillId: 'form-customization', freeInput: true },
308
+ {
309
+ label: '不显示',
310
+ skill: 'ui-config-update',
311
+ promptTemplate: `隐藏 ${formF(r, f)}(仅页面不显示)`,
312
+ requiresConfirm: true,
313
+ confirmDescription: `将从 ${r} 表单中隐藏 "${f}" 字段。数据库字段不受影响,可随时恢复显示。`,
314
+ },
315
+ {
316
+ label: '彻底删除字段',
317
+ skill: 'prisma-schema-update',
318
+ promptTemplate: `彻底删除 ${formF(r, f)}:先用 prisma-schema-update 从数据库删除字段,再用 ui-config-update 从页面配置中移除该字段`,
319
+ requiresConfirm: true,
320
+ confirmDescription: `将从数据库和表单页面中彻底删除 "${f}" 字段。此操作不可逆,字段的历史数据也将全部清除。`,
321
+ },
322
+ {
323
+ label: '修改描述(label)',
324
+ skill: 'page-i18n',
325
+ promptTemplate: `修改 ${formF(r, f)} 的显示名称(通过 i18n 翻译文件)`,
326
+ requiresInput: true,
327
+ inputPlaceholder:
328
+ '请分别提供中文和英文名称,例如:\n中文:游戏名称\n英文:Game Name\n(翻译 key:resources.{resourceName}.fields.{fieldName})',
329
+ },
330
+ {
331
+ label: '字段旁添加帮助提示(含链接)',
332
+ skill: 'form-field-tooltip',
333
+ promptTemplate: `为 ${formF(r, f)} 添加 Tooltip 帮助提示(可包含链接)`,
334
+ requiresInput: true,
335
+ inputPlaceholder:
336
+ '请描述提示内容,例如:\n提示文字"详见配置文档",链接 https://docs.example.com\n或纯文字:此字段用于关联上游系统的唯一标识',
337
+ },
338
+ {
339
+ label: '字段联动(显/隐)',
340
+ skill: 'form-field-dependencies',
341
+ promptTemplate: `为 ${formF(r, f)} 添加联动依赖(显/隐依赖其他字段)`,
342
+ requiresInput: true,
343
+ inputPlaceholder:
344
+ '请描述联动条件,例如:当"类型"字段值为"高级"时才显示此字段',
345
+ },
346
+ {
347
+ label: '自定义校验逻辑',
348
+ skill: 'form-custom-validator',
349
+ promptTemplate: `为 ${formF(r, f)} 添加自定义校验规则`,
350
+ requiresInput: true,
351
+ inputPlaceholder: '请描述校验规则,例如:必须是正整数且不超过 100',
352
+ },
353
+ {
354
+ label: '改为级联选择器',
355
+ skill: 'form-cascader-component',
356
+ promptTemplate: `将 ${formF(r, f)} 替换为级联选择器`,
357
+ requiresInput: true,
358
+ inputPlaceholder:
359
+ '请描述级联层级和数据来源,例如:省 → 市 → 区,数据来自 /api/regions',
360
+ },
361
+ {
362
+ label: '改为自动补全输入方式',
363
+ skill: 'prisma-schema-update',
364
+ promptTemplate: `将 ${formF(r, f)} 改为 @FormItem(AutoComplete),建议值从后端已有数据动态加载`,
365
+ requiresConfirm: true,
366
+ confirmDescription: `将把 ${formF(r, f)} 的表单控件改为自动补全输入框(AutoComplete)。用户可以自由输入任意新值,同时系统会自动将该字段的历史值作为输入建议。`,
367
+ },
368
+ {
369
+ label: '修改字段类型',
370
+ skill: 'prisma-schema-update',
371
+ promptTemplate: `修改 ${formF(r, f)} 的表单控件类型(@FormItem 注解)`,
372
+ requiresInput: true,
373
+ inputPlaceholder:
374
+ '请说明要改为什么控件类型,例如:改为下拉选择(Select DRAFT|PUBLISHED)、改为开关(Boolean)、改为多行文本(Text)、改为数字输入框(Number)',
375
+ },
376
+ {
377
+ label: '在其后面添加输入字段',
378
+ skill: 'ui-config-update',
379
+ promptTemplate: `在 ${formF(r, f)} 后面添加输入字段`,
380
+ fieldSubMenu: 'add-after',
381
+ },
382
+ {
383
+ label: '在其前面添加输入字段',
384
+ skill: 'ui-config-update',
385
+ promptTemplate: `在 ${formF(r, f)} 前面添加输入字段`,
386
+ fieldSubMenu: 'add-before',
387
+ },
388
+ {
389
+ label: '字段选项从关联接口动态加载',
390
+ skill: 'form-load-related-data',
391
+ promptTemplate: `为 ${formF(r, f)} 的选项从关联接口动态加载`,
392
+ requiresInput: true,
393
+ inputPlaceholder:
394
+ '请描述数据来源接口,例如:从 /api/games 加载游戏列表作为下拉选项',
395
+ },
396
+ {
397
+ label: '提交前/回填时转换字段数据',
398
+ skill: 'form-data-transform',
399
+ promptTemplate: `为 ${formF(r, f)} 添加数据转换逻辑(提交前或回填时)`,
400
+ requiresInput: true,
401
+ inputPlaceholder:
402
+ '请描述转换规则,例如:提交前将数组转为逗号分隔字符串,回填时再拆回数组',
403
+ },
404
+ {
405
+ label: '自定义',
406
+ skill: null,
407
+ requiresInput: true,
408
+ promptTemplate: `对 ${r} 表单中的 "${f}" 字段进行修改`,
409
+ promptPrefix: '要求:\n',
410
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
411
+ },
64
412
  ];
65
413
 
66
414
  case 'show-field':
67
415
  return [
68
- { label: '不显示',subSkillId: 'field-render', skillId: 'show-customization', promptTemplate: `隐藏 ${showF(r, f)}` },
69
- { label: '修改样式', subSkillId: 'field-render', skillId: 'show-customization', promptTemplate: `自定义 ${showF(r, f)}的显示方式` },
70
- { label: '修改描述', subSkillId: 'page-i18n', skillId: 'i18n', promptTemplate: `修改 ${showF(r, f)}的标签` },
71
- { label: '其他', subSkillId: 'show-customization', skillId: 'show-customization', freeInput: true },
416
+ {
417
+ label: '不显示',
418
+ skill: 'ui-config-update',
419
+ promptTemplate: `隐藏 ${showF(r, f)}`,
420
+ requiresConfirm: true,
421
+ confirmDescription: `将从 ${r} 详情页中隐藏 "${f}" 字段。数据库字段不受影响,可随时恢复显示。`,
422
+ },
423
+ {
424
+ label: '修改字段值展示样式',
425
+ skill: 'show-field-render',
426
+ promptTemplate: `自定义 ${showF(r, f)} 的显示方式`,
427
+ requiresInput: true,
428
+ inputPlaceholder:
429
+ '请描述样式要求,例如:将 JSON 格式化展示,或用颜色标签渲染状态',
430
+ },
431
+ {
432
+ label: '修改描述(label)',
433
+ skill: 'page-i18n',
434
+ promptTemplate: `修改 ${showF(r, f)} 的标签名称(通过 i18n 翻译文件)`,
435
+ requiresInput: true,
436
+ inputPlaceholder:
437
+ '请分别提供中文和英文名称,例如:\n中文:审核状态\n英文:Review Status\n(翻译 key:resources.{resourceName}.fields.{fieldName})',
438
+ },
439
+ {
440
+ label: '在其后面添加展示字段',
441
+ skill: 'ui-config-update',
442
+ promptTemplate: `在 ${r} "${showF(r, f)}" 后面添加展示字段`,
443
+ fieldSubMenu: 'add-after',
444
+ },
445
+ {
446
+ label: '在其前面添加展示字段',
447
+ skill: 'ui-config-update',
448
+ promptTemplate: `在 ${r} "${showF(r, f)}" 前面添加展示字段`,
449
+ fieldSubMenu: 'add-before',
450
+ },
451
+ {
452
+ label: '自定义',
453
+ skill: null,
454
+ requiresInput: true,
455
+ promptTemplate: `对 ${r} 详情页的 "${f}" 字段进行修改`,
456
+ promptPrefix: '要求:\n',
457
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
458
+ },
72
459
  ];
73
460
 
74
- case 'search-bar':
461
+ case 'list-search-bar':
75
462
  return [
76
- { label: '不显示',subSkillId: 'list-customization', skillId: 'list-customization', promptTemplate: `隐藏 ${r} 列表的搜索栏` },
77
- { label: '自定义搜索', subSkillId: 'list-customization', skillId: 'list-customization', promptTemplate: `自定义 ${r} 列表的搜索栏` },
78
- { label: '其他', subSkillId: 'list-customization', skillId: 'list-customization', freeInput: true },
463
+ {
464
+ label: '增加 模糊匹配 过滤',
465
+ skill: 'list-search-filter',
466
+ promptTemplate: `为 ${r} 搜索栏添加模糊匹配过滤(通过修改ui配置)`,
467
+ requiresInput: true,
468
+ inputPlaceholder: '请填写要添加模糊搜索的字段名,例如:name、title',
469
+ },
470
+ {
471
+ label: '增加 下拉 过滤',
472
+ skill: 'list-search-filter',
473
+ promptTemplate: `为 ${r} 搜索栏添加 Select 下拉过滤`,
474
+ requiresInput: true,
475
+ inputPlaceholder:
476
+ '请填写字段名及选项来源,例如:字段 status,选项 ACTIVE|INACTIVE;或字段 gameId,选项来自关联表 game 的 name 字段',
477
+ },
478
+ {
479
+ label: '增加 checkbox 过滤',
480
+ skill: 'list-search-filter',
481
+ promptTemplate: `为 ${r} 搜索栏添加 Checkbox 多选过滤`,
482
+ requiresInput: true,
483
+ inputPlaceholder:
484
+ '请填写字段名及选项,例如:字段 category,选项:技术|产品|运营',
485
+ },
486
+ {
487
+ label: '增加 radio 过滤',
488
+ skill: 'list-search-filter',
489
+ promptTemplate: `为 ${r} 搜索栏添加 Radio 单选过滤`,
490
+ requiresInput: true,
491
+ inputPlaceholder:
492
+ '请填写字段名及选项,例如:字段 type,选项:全部|在线|离线',
493
+ },
494
+ {
495
+ label: '添加固定过滤(不可清除)',
496
+ skill: 'list-search-filter',
497
+ promptTemplate: `为 ${r} 列表页添加不可被用户清除的固定过滤条件(permanentFilter)`,
498
+ requiresInput: true,
499
+ inputPlaceholder:
500
+ '请描述固定过滤条件,例如:始终只显示 status=ACTIVE 的数据,或按当前用户 ID 过滤',
501
+ },
502
+ {
503
+ label: '移除 过滤字段',
504
+ skill: 'list-search-filter',
505
+ promptTemplate: `从 ${r} 搜索栏删除过滤字段`,
506
+ requiresInput: true,
507
+ inputPlaceholder: '请填写要删除的过滤字段名',
508
+ },
509
+ {
510
+ label: '修改描述(label)',
511
+ skill: 'page-i18n',
512
+ promptTemplate: `修改 ${r} 搜索栏某个过滤字段的显示名称(通过 i18n 翻译文件)`,
513
+ requiresInput: true,
514
+ inputPlaceholder:
515
+ '请填写字段名,并分别提供中文和英文名称,例如:\n字段:status\n中文:审核状态\n英文:Review Status\n(翻译 key:resources.{resourceName}.fields.{fieldName})',
516
+ },
517
+ {
518
+ label: '自定义',
519
+ skill: null,
520
+ requiresInput: true,
521
+ promptTemplate: `对 ${r} 列表页的搜索栏进行修改`,
522
+ promptPrefix: '要求:\n',
523
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
524
+ },
79
525
  ];
80
526
 
81
527
  case 'list-header':
82
528
  return [
83
- { label: '不显示',subSkillId: 'conditional-create-button', skillId: 'list-customization', promptTemplate: `隐藏 ${r} 列表的头部按钮` },
84
- { label: '自定义按钮', subSkillId: 'list-customization', skillId: 'list-customization', promptTemplate: `自定义 ${r} 列表的头部按钮` },
85
- { label: '自定义导出', subSkillId: 'export-customization', skillId: 'list-customization', promptTemplate: `自定义 ${r} 列表的导出功能` },
86
- { label: '自定义导入', subSkillId: 'import-customization', skillId: 'list-customization', promptTemplate: `自定义 ${r} 列表的导入功能` },
87
- { label: '其他', subSkillId: 'list-customization', skillId: 'list-customization', freeInput: true },
529
+ {
530
+ label: '新建按钮',
531
+ skill: null,
532
+ children: [
533
+ {
534
+ label: '按条件显示',
535
+ skill: 'list-createbtn-customization',
536
+ promptTemplate: `为 ${r} 列表页工具栏新建按钮添加条件显示逻辑`,
537
+ requiresInput: true,
538
+ inputPlaceholder:
539
+ '请描述显示条件,例如:仅角色为 GPU_ADMIN 时才显示新建按钮',
540
+ },
541
+ {
542
+ label: '修改描述(label)',
543
+ skill: 'page-i18n',
544
+ promptTemplate: `修改 ${r} 列表页工具栏新建按钮的显示名称(通过 i18n 翻译文件)`,
545
+ requiresInput: true,
546
+ inputPlaceholder:
547
+ '请分别提供中文和英文,例如:\n中文:新建游戏\n英文:Create Game',
548
+ },
549
+ {
550
+ label: '移除',
551
+ skill: 'list-createbtn-customization',
552
+ promptTemplate: `从 ${r} 列表页工具栏移除新建按钮`,
553
+ requiresConfirm: true,
554
+ confirmDescription: `将从 ${r} 列表页工具栏中移除新建按钮,用户将无法从该页面新建记录。`,
555
+ },
556
+ ],
557
+ },
558
+ {
559
+ label: '导入按钮',
560
+ skill: null,
561
+ children: [
562
+ {
563
+ label: '按条件显示',
564
+ skill: 'list-import-customization',
565
+ promptTemplate: `为 ${r} 列表页工具栏添加按条件显示的 导入按钮`,
566
+ requiresInput: true,
567
+ inputPlaceholder: '请描述显示条件',
568
+ },
569
+ {
570
+ label: '修改描述(label)',
571
+ skill: 'page-i18n',
572
+ promptTemplate: `修改 ${r} 列表页工具栏导入按钮的显示名称(通过 i18n 翻译文件)`,
573
+ requiresInput: true,
574
+ inputPlaceholder: '请分别提供中文和英文',
575
+ },
576
+ {
577
+ label: '移除',
578
+ skill: 'list-import-customization',
579
+ promptTemplate: `从 ${r} 列表页工具栏移除 CSV 导入`,
580
+ requiresConfirm: true,
581
+ confirmDescription: `将从 ${r} 列表页工具栏中移除 CSV 导入按钮。`,
582
+ },
583
+ {
584
+ label: '自定义导入行为',
585
+ skill: 'list-import-customization',
586
+ requiresInput: true,
587
+ promptTemplate: `修改 ${r} 列表页工具栏的导入行为`,
588
+ },
589
+ ],
590
+ },
591
+ {
592
+ label: '导出按钮',
593
+ skill: null,
594
+ children: [
595
+ {
596
+ label: '按条件显示',
597
+ skill: 'list-export-customization',
598
+ promptTemplate: `为 ${r} 列表页工具栏添加按条件显示的 导出按钮`,
599
+ requiresInput: true,
600
+ inputPlaceholder: '请描述显示条件',
601
+ },
602
+ {
603
+ label: '修改描述(label)',
604
+ skill: 'page-i18n',
605
+ promptTemplate: `修改 ${r} 列表页工具栏导出按钮的显示名称(通过 i18n 翻译文件)`,
606
+ requiresInput: true,
607
+ inputPlaceholder: '请分别提供中文和英文',
608
+ },
609
+ {
610
+ label: '移除',
611
+ skill: 'list-export-customization',
612
+ promptTemplate: `从 ${r} 列表页工具栏移除 导出按钮`,
613
+ requiresConfirm: true,
614
+ confirmDescription: `将从 ${r} 列表页工具栏中移除 导出按钮。`,
615
+ },
616
+ {
617
+ label: '自定义导出行为',
618
+ requiresInput: true,
619
+ skill: 'list-export-customization',
620
+ promptTemplate: `修改 ${r} 列表页工具栏的导出行为`,
621
+ },
622
+ ],
623
+ },
624
+ {
625
+ label: '刷新按钮',
626
+ skill: null,
627
+ children: [
628
+ {
629
+ label: '添加',
630
+ skill: 'list-refresh-customization',
631
+ promptTemplate: `为 ${r} 列表页工具栏添加刷新按钮`,
632
+ requiresConfirm: true,
633
+ confirmDescription: `将在 ${r} 列表页工具栏中添加刷新按钮。`,
634
+ },
635
+ {
636
+ label: '修改描述(label)',
637
+ skill: 'page-i18n',
638
+ promptTemplate: `修改 ${r} 列表页工具栏刷新按钮的显示名称(通过 i18n 翻译文件)`,
639
+ requiresInput: true,
640
+ inputPlaceholder: '请分别提供中文和英文',
641
+ },
642
+ {
643
+ label: '移除',
644
+ skill: 'list-refresh-customization',
645
+ promptTemplate: `从 ${r} 列表页工具栏移除刷新按钮`,
646
+ requiresConfirm: true,
647
+ confirmDescription: `将从 ${r} 列表页工具栏中移除刷新按钮。`,
648
+ },
649
+ ],
650
+ },
651
+ {
652
+ label: '全只读模式',
653
+ skill: 'list-readonly-mode',
654
+ promptTemplate: `将 ${r} 列表页设置为全只读模式(移除所有写操作)`,
655
+ requiresConfirm: true,
656
+ confirmDescription: `将 ${r} 列表页设为只读模式,移除新建、编辑、删除等所有写操作入口。`,
657
+ },
658
+ {
659
+ label: '添加列显示/隐藏控制面板',
660
+ skill: 'list-column-visibility',
661
+ promptTemplate: `为 ${r} 列表页工具栏添加列显示/隐藏控制面板`,
662
+ requiresConfirm: true,
663
+ confirmDescription: `将在 ${r} 列表页工具栏中添加列显示/隐藏控制面板,用户可自定义显示哪些列。`,
664
+ },
665
+ {
666
+ label: '自定义',
667
+ skill: null,
668
+ requiresInput: true,
669
+ promptTemplate: `对 ${r} 列表页的工具栏区域(ListPageHeader 组件)进行修改`,
670
+ promptPrefix: '要求:\n',
671
+ promptSuffix: `注意:ListPageHeader 是公共组件,不可直接修改其源码。\n请优先通过调整列表页中 ListPageHeader 的 render props 来实现;\n如果 render props 无法满足需求,再在列表页内创建局部组件来替代。`,
672
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
673
+ },
674
+ ];
675
+
676
+ case 'list-row-actions':
677
+ return [
678
+ {
679
+ label: '添加操作按钮',
680
+ skill: 'list-custom-row-actions',
681
+ promptTemplate: `为 ${r} 列表页行操作添加自定义按钮(通过CHANGE_STATUS配置 或者 自定义行操作)`,
682
+ requiresInput: true,
683
+ inputPlaceholder:
684
+ '请描述按钮的名称、修改的状态字段和变更目标的值,例如:添加"发布"按钮,将 status 字段从 PENDING 改为 APPROVED' +
685
+ '\n或者\n' +
686
+ '请描述按钮名称和要调用的接口,例如:添加"审核"按钮,点击后调用 POST /api/approve/:id',
687
+ },
688
+ {
689
+ label: '添加 跳转至外部链接 按钮',
690
+ skill: 'list-row-action-external',
691
+ promptTemplate: `为 ${r} 列表页行操作添加跳转链接按钮`,
692
+ requiresInput: true,
693
+ inputPlaceholder:
694
+ '请描述按钮名称和跳转目标,例如:添加"查看报表"按钮,跳转到 /reports/:id',
695
+ },
696
+ {
697
+ label: '添加 跳转至站内页面 按钮',
698
+ skill: 'list-row-action-link',
699
+ promptTemplate: `为 ${r} 列表页行操作添加站内页面跳转按钮`,
700
+ requiresInput: true,
701
+ inputPlaceholder:
702
+ '请描述按钮名称和目标页面,例如:添加"查看详情"按钮,跳转到 /orders/:id/detail',
703
+ },
704
+ {
705
+ label: '按条件显示 编辑 按钮 ',
706
+ skill: 'ui-config-update',
707
+ promptTemplate: `为 ${r} 列表页的 编辑 按钮添加条件显示逻辑(EDIT)`,
708
+ requiresInput: true,
709
+ inputPlaceholder:
710
+ '请描述隐藏条件,例如:当 status 为 PUBLISHED 时隐藏 编辑 按钮',
711
+ },
712
+ {
713
+ label: '自定义',
714
+ skill: null,
715
+ requiresInput: true,
716
+ promptTemplate: `对 ${r} 列表页的行操作区域(RowActions 组件)进行修改`,
717
+ promptPrefix: '要求:\n',
718
+ promptSuffix: `注意:RowActions 是公共组件,不可直接修改其源码。\n请优先通过调整列表页中 RowActions 的 render props 来实现;\n如果 render props 无法满足需求,再在列表页内创建局部组件来替代。`,
719
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
720
+ },
721
+ ];
722
+
723
+ case 'list-bulk-actions':
724
+ return [
725
+ {
726
+ label: '"批量删除"功能',
727
+ skill: null,
728
+ children: [
729
+ {
730
+ label: '添加',
731
+ skill: 'list-bulk-actions-batch-delete-promise',
732
+ promptTemplate: `为 ${r} 列表页添加批量删除`,
733
+ requiresConfirm: true,
734
+ confirmDescription: `将为 ${r} 列表页添加批量删除功能,用户可勾选多行后一键删除。`,
735
+ },
736
+ {
737
+ label: '移除',
738
+ skill: 'list-bulk-actions-batch-delete-promise',
739
+ promptTemplate: `从 ${r} 列表页移除批量删除`,
740
+ requiresConfirm: true,
741
+ confirmDescription: `将从 ${r} 列表页移除批量删除功能。`,
742
+ },
743
+ ],
744
+ },
745
+ {
746
+ label: '"批量编辑"功能',
747
+ skill: null,
748
+ children: [
749
+ {
750
+ label: '添加(固定值,如状态)',
751
+ skill: 'list-bulk-actions-batch-modify-modal',
752
+ promptTemplate: `为 ${r} 列表页添加批量编辑弹窗(固定值)`,
753
+ requiresInput: true,
754
+ inputPlaceholder:
755
+ '请描述要批量修改的字段和固定值,例如:将 status 批量设为 PUBLISHED',
756
+ },
757
+ {
758
+ label: '添加(用户输入)',
759
+ skill: 'list-bulk-actions-batch-modify-modal',
760
+ promptTemplate: `为 ${r} 列表页添加批量编辑弹窗(用户输入)`,
761
+ requiresInput: true,
762
+ inputPlaceholder:
763
+ '请描述要批量编辑的字段,例如:让用户输入 remark 后批量更新',
764
+ },
765
+ {
766
+ label: '移除',
767
+ skill: 'list-bulk-actions-batch-modify-modal',
768
+ promptTemplate: `从 ${r} 列表页移除批量编辑弹窗`,
769
+ requiresConfirm: true,
770
+ confirmDescription: `将从 ${r} 列表页移除批量编辑弹窗。`,
771
+ },
772
+ ],
773
+ },
774
+ {
775
+ label: '"批量导出"功能',
776
+ skill: null,
777
+ children: [
778
+ {
779
+ label: '添加',
780
+ skill: 'ui-config-update',
781
+ promptTemplate: `开启 ${r} 列表页的批量导出功能`,
782
+ requiresConfirm: true,
783
+ confirmDescription: `将开启 ${r} 列表页的批量导出功能,用户可勾选多行后执行批量导出。`,
784
+ },
785
+ {
786
+ label: '移除',
787
+ skill: 'ui-config-update',
788
+ promptTemplate: `从 ${r} 列表页移除批量导出`,
789
+ requiresConfirm: true,
790
+ confirmDescription: `将从 ${r} 列表页移除批量导出功能。`,
791
+ },
792
+ ],
793
+ },
794
+ {
795
+ label: '自定义',
796
+ skill: null,
797
+ requiresInput: true,
798
+ promptTemplate: `对 ${r} 列表页的批量操作区域(BulkActions 组件)进行修改`,
799
+ promptPrefix: '要求:\n',
800
+ promptSuffix: `注意:BulkActions 是公共组件,不可直接修改其源码。\n请优先通过调整列表页中 BulkActions 的 render props(如 renderDeleteButton、extraActions 等)来实现;\n如果 render props 无法满足需求,再在列表页内创建局部组件来替代。`,
801
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
802
+ },
803
+ ];
804
+
805
+ case 'app-title':
806
+ return [
807
+ {
808
+ label: '修改标题文字',
809
+ skill: 'header-customization',
810
+ promptTemplate: `修改网站标题文字`,
811
+ requiresInput: true,
812
+ inputPlaceholder:
813
+ '请描述修改内容,例如:\n- 改为"xxx 管理后台"\n- 隐藏标题只保留 Logo',
814
+ },
815
+ {
816
+ label: '修改Logo',
817
+ skill: 'header-customization',
818
+ promptTemplate: `修改网站 Logo`,
819
+ requiresInput: true,
820
+ inputPlaceholder:
821
+ '请描述修改内容,例如:\n- 替换为图片 Logo(提供图片路径或 URL)\n- 修改 Logo 颜色\n- 隐藏 Logo',
822
+ },
823
+ {
824
+ label: '自定义',
825
+ skill: null,
826
+ requiresInput: true,
827
+ promptTemplate: `对页面标题和 Logo 区域进行修改`,
828
+ promptPrefix: '要求:\n',
829
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
830
+ },
88
831
  ];
89
832
 
90
- case 'row-actions':
833
+ case 'app-header':
91
834
  return [
92
- { label: '不显示',subSkillId: 'readonly-mode', skillId: 'list-customization', promptTemplate: `隐藏 ${r} 列表的行操作按钮` },
93
- { label: '自定义操作', subSkillId: 'custom-row-actions', skillId: 'list-customization', promptTemplate: `自定义 ${r} 列表的行操作` },
94
- { label: '添加链接跳转', subSkillId: 'row-action-link', skillId: 'list-customization', promptTemplate: `为 ${r} 列表添加行操作链接跳转` },
95
- { label: '添加外部链接', subSkillId: 'row-action-external', skillId: 'list-customization', promptTemplate: `为 ${r} 列表添加行操作外部链接` },
96
- { label: '添加弹窗+API', subSkillId: 'row-action-modal-api', skillId: 'list-customization', promptTemplate: `为 ${r} 列表添加行操作弹窗和 API 调用` },
97
- { label: '其他', subSkillId: 'list-customization', skillId: 'list-customization', freeInput: true },
835
+ {
836
+ label: '修改业务(游戏)选择器',
837
+ skill: 'header-customization',
838
+ promptTemplate: `修改顶部导航的业务(游戏)选择器`,
839
+ requiresInput: true,
840
+ inputPlaceholder:
841
+ '请描述修改内容,例如:\n- 隐藏选择器\n- 修改宽度为 200px\n- 默认选中第一项',
842
+ },
843
+ {
844
+ label: '修改语言切换',
845
+ skill: 'header-customization',
846
+ promptTemplate: `修改顶部导航的语言切换`,
847
+ requiresInput: true,
848
+ inputPlaceholder:
849
+ '请描述修改内容,例如:\n- 隐藏语言切换\n- 只保留中文,移除多语言切换',
850
+ },
851
+ {
852
+ label: '修改用户信息(头像/用户名)',
853
+ skill: 'header-customization',
854
+ promptTemplate: `修改顶部导航的用户信息区`,
855
+ requiresInput: true,
856
+ inputPlaceholder:
857
+ '请描述修改内容,例如:\n- 隐藏用户名,只显示头像\n- 隐藏头像和用户名\n- 点击用户名跳转到个人主页',
858
+ },
859
+ {
860
+ label: '修改整体样式',
861
+ skill: 'header-customization',
862
+ promptTemplate: `修改顶部导航的整体样式`,
863
+ requiresInput: true,
864
+ inputPlaceholder:
865
+ '请描述修改内容,例如:\n- 背景色改为深色 #001529\n- 高度改为 48px\n- 左侧添加系统标题文字',
866
+ },
867
+ {
868
+ label: '自定义',
869
+ skill: null,
870
+ requiresInput: true,
871
+ promptTemplate: `对顶部导航栏(App Header 组件)进行修改`,
872
+ promptPrefix: '要求:\n',
873
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
874
+ },
98
875
  ];
99
876
 
100
- case 'bulk-actions':
877
+ case 'show-header':
101
878
  return [
102
- { label: '不显示',subSkillId: 'list-customization', skillId: 'list-customization', promptTemplate: `隐藏 ${r} 列表的批量操作` },
103
- { label: '批量修改弹窗', subSkillId: 'batch-modify-modal', skillId: 'list-customization', promptTemplate: `为 ${r} 列表添加批量修改弹窗` },
104
- { label: '批量删除', subSkillId: 'batch-delete-promise', skillId: 'list-customization', promptTemplate: `为 ${r} 列表自定义批量删除` },
105
- { label: '其他', subSkillId: 'list-customization', skillId: 'list-customization', freeInput: true },
879
+ {
880
+ label: '编辑按钮',
881
+ skill: null,
882
+ children: [
883
+ {
884
+ label: '显示(按条件)',
885
+ skill: 'show-readonly-header',
886
+ promptTemplate: `为 ${r} 详情页编辑按钮添加条件显示逻辑`,
887
+ requiresInput: true,
888
+ inputPlaceholder:
889
+ '请描述显示条件,例如:仅角色为 ADMIN 时才显示编辑按钮',
890
+ },
891
+ {
892
+ label: '修改描述(label)',
893
+ skill: 'page-i18n',
894
+ promptTemplate: `修改 ${r} 详情页编辑按钮的显示名称(通过 i18n 翻译文件)`,
895
+ requiresInput: true,
896
+ inputPlaceholder:
897
+ '请分别提供中文和英文,例如:\n中文:修改\n英文:Edit',
898
+ },
899
+ {
900
+ label: '移除',
901
+ skill: 'show-readonly-header',
902
+ promptTemplate: `从 ${r} 详情页移除编辑按钮`,
903
+ requiresConfirm: true,
904
+ confirmDescription: `将从 ${r} 详情页移除编辑按钮,用户将无法从详情页跳转到编辑页。`,
905
+ },
906
+ ],
907
+ },
908
+ {
909
+ label: '复制按钮',
910
+ skill: null,
911
+ children: [
912
+ {
913
+ label: '添加',
914
+ skill: 'show-readonly-header',
915
+ promptTemplate: `为 ${r} 详情页添加复制按钮`,
916
+ requiresConfirm: true,
917
+ confirmDescription: `将为 ${r} 详情页添加复制按钮,用户可一键复制当前记录。`,
918
+ },
919
+ {
920
+ label: '显示(按条件)',
921
+ skill: 'show-readonly-header',
922
+ promptTemplate: `为 ${r} 详情页复制按钮添加条件显示逻辑`,
923
+ requiresInput: true,
924
+ inputPlaceholder: '请描述显示条件',
925
+ },
926
+ {
927
+ label: '修改描述(label)',
928
+ skill: 'page-i18n',
929
+ promptTemplate: `修改 ${r} 详情页复制按钮的显示名称(通过 i18n 翻译文件)`,
930
+ requiresInput: true,
931
+ inputPlaceholder:
932
+ '请分别提供中文和英文,例如:\n中文:复制\n英文:Clone',
933
+ },
934
+ {
935
+ label: '移除',
936
+ skill: 'show-readonly-header',
937
+ promptTemplate: `从 ${r} 详情页移除复制按钮`,
938
+ requiresConfirm: true,
939
+ confirmDescription: `将从 ${r} 详情页移除复制按钮。`,
940
+ },
941
+ ],
942
+ },
943
+ {
944
+ label: '删除按钮',
945
+ skill: null,
946
+ children: [
947
+ {
948
+ label: '显示(按条件)',
949
+ skill: 'show-readonly-header',
950
+ promptTemplate: `为 ${r} 详情页删除按钮添加条件显示逻辑`,
951
+ requiresInput: true,
952
+ inputPlaceholder:
953
+ '请描述显示条件,例如:当 status 为 PUBLISHED 时隐藏删除按钮',
954
+ },
955
+ {
956
+ label: '修改描述(label)',
957
+ skill: 'page-i18n',
958
+ promptTemplate: `修改 ${r} 详情页删除按钮的显示名称(通过 i18n 翻译文件)`,
959
+ requiresInput: true,
960
+ inputPlaceholder:
961
+ '请分别提供中文和英文,例如:\n中文:删除\n英文:Delete',
962
+ },
963
+ {
964
+ label: '移除',
965
+ skill: 'show-readonly-header',
966
+ promptTemplate: `从 ${r} 详情页移除删除按钮`,
967
+ requiresConfirm: true,
968
+ confirmDescription: `将从 ${r} 详情页移除删除按钮。`,
969
+ },
970
+ ],
971
+ },
972
+ {
973
+ label: '刷新按钮',
974
+ skill: null,
975
+ children: [
976
+ {
977
+ label: '添加',
978
+ skill: 'show-readonly-header',
979
+ promptTemplate: `为 ${r} 详情页添加刷新按钮`,
980
+ requiresConfirm: true,
981
+ confirmDescription: `将为 ${r} 详情页添加刷新按钮。`,
982
+ },
983
+ {
984
+ label: '修改描述(label)',
985
+ skill: 'page-i18n',
986
+ promptTemplate: `修改 ${r} 详情页刷新按钮的显示名称(通过 i18n 翻译文件)`,
987
+ requiresInput: true,
988
+ inputPlaceholder:
989
+ '请分别提供中文和英文,例如:\n中文:刷新\n英文:Refresh',
990
+ },
991
+ {
992
+ label: '移除',
993
+ skill: 'show-readonly-header',
994
+ promptTemplate: `从 ${r} 详情页移除刷新按钮`,
995
+ requiresConfirm: true,
996
+ confirmDescription: `将从 ${r} 详情页移除刷新按钮。`,
997
+ },
998
+ ],
999
+ },
1000
+ {
1001
+ label: '添加 自定义操作按钮(可调接口)',
1002
+ skill: 'show-readonly-header',
1003
+ promptTemplate: `为 ${r} 详情页工具栏添加自定义操作按钮`,
1004
+ promptPrefix: '要求:\n',
1005
+ requiresInput: true,
1006
+ inputPlaceholder:
1007
+ '请描述按钮名称和要调用的接口,例如:添加"审核通过"按钮,点击后调用 POST /api/approve/:id',
1008
+ },
1009
+ {
1010
+ label: '全只读模式(移除所有写操作)',
1011
+ skill: 'show-readonly-header',
1012
+ promptTemplate: `将 ${r} 详情页设为只读模式,移除编辑、复制、删除按钮`,
1013
+ requiresConfirm: true,
1014
+ confirmDescription: `将 ${r} 详情页设为只读模式,移除编辑、复制、删除按钮,用户只能查看不能修改。`,
1015
+ },
1016
+ {
1017
+ label: '自定义',
1018
+ skill: null,
1019
+ requiresInput: true,
1020
+ promptTemplate: `对 ${r} 详情页的操作工具栏(show header 区域)进行修改`,
1021
+ promptPrefix: '要求:\n',
1022
+ inputPlaceholder: '请描述你希望 AI 执行的自定义操作',
1023
+ },
106
1024
  ];
107
1025
 
1026
+ case 'canvas-component': {
1027
+ // Canvas 组件的操作已迁移到右键菜单,检查元素面板不再显示
1028
+ return [];
1029
+ }
1030
+
108
1031
  default:
109
1032
  return [];
110
1033
  }