cabloy 5.1.65 → 5.1.67

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 (340) hide show
  1. package/.claude/skills/cabloy-resource-field-update/SKILL.md +6 -0
  2. package/CHANGELOG.md +55 -0
  3. package/cabloy-docs/.vitepress/config.mjs +1 -1
  4. package/cabloy-docs/backend/crud-workflow.md +33 -0
  5. package/cabloy-docs/backend/master-detail-workflow.md +149 -0
  6. package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
  7. package/cabloy-docs/frontend/cli.md +12 -1
  8. package/cabloy-docs/frontend/command-scene-authoring.md +12 -1
  9. package/cabloy-docs/frontend/component-guide.md +10 -0
  10. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +69 -7
  11. package/cabloy-docs/frontend/table-cell-cookbook.md +10 -0
  12. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +83 -2
  13. package/cabloy-docs/reference/bean-scene-boilerplates.md +9 -4
  14. package/package.json +1 -1
  15. package/vona/packages-cli/cabloy-cli/package.json +1 -1
  16. package/vona/packages-cli/cabloy-cli/src/lib/local.helper.ts +38 -0
  17. package/vona/packages-cli/cli/package.json +1 -1
  18. package/vona/packages-cli/cli-set-api/cli/templates/create/module/boilerplate/_package.json +1 -1
  19. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoBaseName%>.tsx_ +18 -0
  20. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoMutateName%>.tsx_ +17 -0
  21. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoResItemName%>.tsx_ +60 -0
  22. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoViewName%>.tsx_ +17 -0
  23. package/vona/packages-cli/cli-set-api/package.json +2 -2
  24. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.bean.ts +2 -6
  25. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +3 -6
  26. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.suite.ts +1 -1
  27. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.test.ts +2 -6
  28. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.asset.ts +2 -6
  29. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.config.ts +2 -6
  30. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.constant.ts +2 -6
  31. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.error.ts +2 -6
  32. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.lib.ts +2 -6
  33. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.locale.ts +2 -6
  34. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.main.ts +2 -6
  35. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.monkey.ts +2 -6
  36. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.static.ts +2 -6
  37. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.types.ts +2 -6
  38. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crud.ts +2 -6
  39. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudBasic.ts +2 -6
  40. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudStart.ts +2 -6
  41. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.masterDetail.ts +699 -0
  42. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.metadata.ts +1 -2
  43. package/vona/packages-cli/cli-set-api/src/lib/beans.ts +2 -0
  44. package/vona/packages-cli/cli-set-api/src/lib/command/tools.masterDetail.ts +78 -0
  45. package/vona/packages-cli/cli-set-api/src/lib/commands.ts +2 -0
  46. package/vona/packages-vona/vona/package.json +1 -1
  47. package/vona/packages-vona/vona-core/package.json +1 -1
  48. package/vona/packages-vona/vona-core/src/lib/mappedClass/type.ts +1 -0
  49. package/vona/packages-vona/vona-core/src/lib/mappedClass/utils.ts +36 -14
  50. package/vona/packages-vona/vona-mock/package.json +1 -1
  51. package/vona/pnpm-lock.yaml +35 -11
  52. package/vona/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  53. package/vona/src/suite/a-home/modules/home-base/package.json +1 -1
  54. package/vona/src/suite/a-home/modules/home-index/package.json +1 -1
  55. package/vona/src/suite/a-home/modules/home-user/package.json +1 -1
  56. package/vona/src/suite/a-training/modules/training-record/package.json +1 -1
  57. package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +232 -3
  58. package/vona/src/suite/a-training/modules/training-record/src/bean/ssrMenu.record.ts +29 -0
  59. package/vona/src/suite/a-training/modules/training-record/src/config/locale/en-us.ts +9 -1
  60. package/vona/src/suite/a-training/modules/training-record/src/config/locale/zh-cn.ts +9 -1
  61. package/vona/src/suite/a-training/modules/training-record/src/controller/record.ts +59 -0
  62. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectBase.tsx +18 -0
  63. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectMutate.tsx +17 -0
  64. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectResItem.tsx +60 -0
  65. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectView.tsx +17 -0
  66. package/vona/src/suite/a-training/modules/training-record/src/dto/recordCreate.tsx +45 -0
  67. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectReq.tsx +38 -0
  68. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectRes.tsx +11 -0
  69. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +39 -0
  70. package/vona/src/suite/a-training/modules/training-record/src/dto/recordUpdate.tsx +45 -0
  71. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +42 -0
  72. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +23 -6
  73. package/vona/src/suite/a-training/modules/training-record/src/model/record.ts +15 -2
  74. package/vona/src/suite/a-training/modules/training-record/src/service/record.ts +50 -0
  75. package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +138 -0
  76. package/vona/src/suite/a-training/modules/training-recordsubject/package.json +53 -0
  77. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/index.ts +198 -0
  78. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/locales.ts +18 -0
  79. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/this.ts +2 -0
  80. package/vona/src/suite/a-training/modules/training-recordsubject/src/bean/meta.index.ts +12 -0
  81. package/vona/src/suite/a-training/modules/training-recordsubject/src/bean/meta.version.ts +21 -0
  82. package/vona/src/suite/a-training/modules/training-recordsubject/src/config/locale/en-us.ts +9 -0
  83. package/vona/src/suite/a-training/modules/training-recordsubject/src/config/locale/zh-cn.ts +9 -0
  84. package/vona/src/suite/a-training/modules/training-recordsubject/src/entity/subject.tsx +42 -0
  85. package/vona/src/suite/a-training/modules/training-recordsubject/src/index.ts +2 -0
  86. package/vona/src/suite/a-training/modules/training-recordsubject/src/model/subject.ts +10 -0
  87. package/vona/src/suite/a-training/modules/training-recordsubject/tsconfig.build.json +11 -0
  88. package/vona/src/suite/a-training/modules/training-recordsubject/tsconfig.json +7 -0
  89. package/vona/src/suite/a-training/modules/training-student/package.json +1 -1
  90. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +8 -1
  91. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +8 -1
  92. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +17 -2
  93. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordMutate.tsx +12 -17
  94. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordResItem.tsx +26 -5
  95. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordView.tsx +12 -14
  96. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +6 -4
  97. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +3 -6
  98. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +1 -1
  99. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +14 -1
  100. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +14 -1
  101. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +2 -4
  102. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +22 -5
  103. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +69 -15
  104. package/vona/src/suite/a-training/package.json +1 -0
  105. package/vona/src/suite/a-training/tsconfig.json +3 -0
  106. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/package.json +1 -1
  107. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/package.json +1 -1
  108. package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +2 -2
  109. package/vona/src/suite-vendor/a-auth/modules/auth-oauth/package.json +2 -2
  110. package/vona/src/suite-vendor/a-auth/modules/auth-simple/package.json +2 -2
  111. package/vona/src/suite-vendor/a-auth/package.json +2 -2
  112. package/vona/src/suite-vendor/a-cabloy/modules/a-cabloy/package.json +2 -2
  113. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +2 -2
  114. package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/package.json +2 -2
  115. package/vona/src/suite-vendor/a-cabloy/modules/a-socket/package.json +2 -2
  116. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +2 -2
  117. package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/package.json +2 -2
  118. package/vona/src/suite-vendor/a-cabloy/modules/a-status/package.json +2 -2
  119. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  120. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +2 -2
  121. package/vona/src/suite-vendor/a-captcha/modules/captcha-simple/package.json +2 -2
  122. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  123. package/vona/src/suite-vendor/a-paypal/modules/a-paypal/package.json +2 -2
  124. package/vona/src/suite-vendor/a-paypal/package.json +1 -1
  125. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +2 -2
  126. package/vona/src/suite-vendor/a-vona/modules/a-aspectutils/package.json +2 -2
  127. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +2 -2
  128. package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/package.json +2 -2
  129. package/vona/src/suite-vendor/a-vona/modules/a-body/package.json +2 -2
  130. package/vona/src/suite-vendor/a-vona/modules/a-broadcast/package.json +2 -2
  131. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +2 -2
  132. package/vona/src/suite-vendor/a-vona/modules/a-caching/package.json +2 -2
  133. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +2 -2
  134. package/vona/src/suite-vendor/a-vona/modules/a-election/package.json +2 -2
  135. package/vona/src/suite-vendor/a-vona/modules/a-error/package.json +2 -2
  136. package/vona/src/suite-vendor/a-vona/modules/a-event/package.json +2 -2
  137. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +2 -2
  138. package/vona/src/suite-vendor/a-vona/modules/a-hmr/package.json +2 -2
  139. package/vona/src/suite-vendor/a-vona/modules/a-hmrbase/package.json +2 -2
  140. package/vona/src/suite-vendor/a-vona/modules/a-index/package.json +2 -2
  141. package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +2 -2
  142. package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +2 -2
  143. package/vona/src/suite-vendor/a-vona/modules/a-locale/package.json +2 -2
  144. package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +2 -2
  145. package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +2 -2
  146. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +2 -2
  147. package/vona/src/suite-vendor/a-vona/modules/a-menu/package.json +2 -2
  148. package/vona/src/suite-vendor/a-vona/modules/a-meta/package.json +2 -2
  149. package/vona/src/suite-vendor/a-vona/modules/a-onion/package.json +2 -2
  150. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +2 -2
  151. package/vona/src/suite-vendor/a-vona/modules/a-openapischema/package.json +2 -2
  152. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +2 -2
  153. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/const/decorator.ts +3 -1
  154. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/schema/makeSchemaLikes.ts +21 -17
  155. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/utils.ts +44 -2
  156. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +2 -2
  157. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +6 -2
  158. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +13 -4
  159. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/utils.ts +1 -1
  160. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +37 -16
  161. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +2 -2
  162. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +2 -2
  163. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +2 -2
  164. package/vona/src/suite-vendor/a-vona/modules/a-play/package.json +2 -2
  165. package/vona/src/suite-vendor/a-vona/modules/a-printtip/package.json +2 -2
  166. package/vona/src/suite-vendor/a-vona/modules/a-queue/package.json +2 -2
  167. package/vona/src/suite-vendor/a-vona/modules/a-redis/package.json +2 -2
  168. package/vona/src/suite-vendor/a-vona/modules/a-redlock/package.json +2 -2
  169. package/vona/src/suite-vendor/a-vona/modules/a-runtime/package.json +2 -2
  170. package/vona/src/suite-vendor/a-vona/modules/a-schedule/package.json +2 -2
  171. package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +2 -2
  172. package/vona/src/suite-vendor/a-vona/modules/a-serialization/package.json +2 -2
  173. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +2 -2
  174. package/vona/src/suite-vendor/a-vona/modules/a-static/package.json +2 -2
  175. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +2 -2
  176. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +2 -2
  177. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
  178. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +2 -2
  179. package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +2 -2
  180. package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +2 -2
  181. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +2 -2
  183. package/vona/src/suite-vendor/a-vona/modules/a-web/src/lib/decorator/bean.ts +26 -5
  184. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +2 -2
  185. package/vona/src/suite-vendor/a-vona/modules/a-zod/package.json +2 -2
  186. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  187. package/zova/packages-cli/cli/package.json +3 -3
  188. package/zova/packages-cli/cli-set-front/cli/templates/create/component/boilerplateDetailsActionBulk/controller.tsx_ +31 -0
  189. package/zova/packages-cli/cli-set-front/cli/templates/create/module/boilerplate/_package.json +1 -1
  190. package/zova/packages-cli/cli-set-front/cli/templates/rest/component.ts +21 -0
  191. package/zova/packages-cli/cli-set-front/cli/templates/rest/render.ts +4 -0
  192. package/zova/packages-cli/cli-set-front/package.json +3 -3
  193. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.bean.ts +2 -6
  194. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.mock.ts +2 -6
  195. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +3 -6
  196. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.suite.ts +1 -1
  197. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.asset.ts +2 -6
  198. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.config.ts +2 -6
  199. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.constant.ts +2 -6
  200. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.error.ts +2 -6
  201. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.icon.ts +2 -6
  202. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.lib.ts +2 -6
  203. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.locale.ts +2 -6
  204. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.main.ts +2 -6
  205. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.mainSys.ts +2 -6
  206. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkey.ts +2 -6
  207. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkeySys.ts +2 -6
  208. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.types.ts +2 -6
  209. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.config.ts +1 -4
  210. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +2 -2
  211. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherRender.ts +2 -6
  212. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherStyle.ts +2 -6
  213. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentEmits.ts +2 -6
  214. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentGeneric.ts +2 -6
  215. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentModel.ts +2 -6
  216. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentProps.ts +2 -6
  217. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentSlots.ts +2 -6
  218. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstRender.ts +2 -6
  219. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstStyle.ts +2 -6
  220. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageParams.ts +2 -6
  221. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageQuery.ts +2 -6
  222. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.renameComponent.ts +2 -6
  223. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -2
  224. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreateComponent.ts +2 -6
  225. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreatePage.ts +2 -6
  226. package/zova/packages-zova/zova/package.json +2 -2
  227. package/zova/pnpm-lock.yaml +695 -791
  228. package/zova/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  229. package/zova/src/suite/a-demo/modules/demo-todo/package.json +1 -1
  230. package/zova/src/suite/a-devui/modules/devui-adapter/package.json +1 -1
  231. package/zova/src/suite/a-home/modules/home-api/package.json +1 -1
  232. package/zova/src/suite/a-home/modules/home-base/package.json +1 -1
  233. package/zova/src/suite/a-home/modules/home-icon/package.json +1 -1
  234. package/zova/src/suite/a-home/modules/home-indexadmin/package.json +1 -1
  235. package/zova/src/suite/a-home/modules/home-indexweb/package.json +1 -1
  236. package/zova/src/suite/a-home/modules/home-layoutadmin/package.json +1 -1
  237. package/zova/src/suite/a-home/modules/home-layoutempty/package.json +1 -1
  238. package/zova/src/suite/a-home/modules/home-layoutweb/package.json +1 -1
  239. package/zova/src/suite/a-home/modules/home-login/package.json +1 -1
  240. package/zova/src/suite/a-home/modules/home-passport/package.json +1 -1
  241. package/zova/src/suite/a-home/modules/home-theme/package.json +1 -1
  242. package/zova/src/suite/a-training/modules/training-student/package.json +3 -2
  243. package/zova/src/suite/cabloy-basic/modules/basic-adapter/package.json +1 -1
  244. package/zova/src/suite/cabloy-basic/modules/basic-app/package.json +1 -1
  245. package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +131 -13
  246. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +15 -0
  247. package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +23 -5
  248. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +30 -4
  249. package/zova/src/suite/cabloy-basic/modules/basic-captcha/package.json +1 -1
  250. package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +1 -1
  251. package/zova/src/suite/cabloy-basic/modules/basic-commandssync/package.json +1 -1
  252. package/zova/src/suite/cabloy-basic/modules/basic-currency/package.json +1 -1
  253. package/zova/src/suite/cabloy-basic/modules/basic-date/package.json +1 -1
  254. package/zova/src/suite/cabloy-basic/modules/basic-details/package.json +7 -2
  255. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockForm.ts +31 -0
  256. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/index.ts +149 -2
  257. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/command.delete.tsx +47 -0
  258. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionDelete.tsx +52 -0
  259. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionOperationsRow.tsx +44 -6
  260. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionUpdate.tsx +73 -0
  261. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionView.tsx +64 -0
  262. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.lineNumber.tsx +30 -0
  263. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/actionCreate/controller.tsx +29 -5
  264. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +28 -12
  265. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockForm/controller.tsx +53 -0
  266. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockTable/controller.tsx +7 -2
  267. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockToolbarBulk/controller.tsx +3 -1
  268. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/formFieldDetails/controller.tsx +24 -12
  269. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/en-us.ts +4 -0
  270. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/zh-cn.ts +4 -0
  271. package/zova/src/suite/cabloy-basic/modules/basic-details/src/index.ts +1 -0
  272. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/index.ts +1 -0
  273. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/utils.ts +12 -0
  274. package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +172 -0
  275. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/detail.ts +18 -0
  276. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/details.ts +11 -0
  277. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/dialogForm.ts +22 -0
  278. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/index.ts +2 -0
  279. package/zova/src/suite/cabloy-basic/modules/basic-form/package.json +1 -1
  280. package/zova/src/suite/cabloy-basic/modules/basic-input/package.json +1 -1
  281. package/zova/src/suite/cabloy-basic/modules/basic-page/package.json +1 -1
  282. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/package.json +1 -1
  283. package/zova/src/suite/cabloy-basic/modules/basic-resource/package.json +52 -0
  284. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/component/formFieldResourcePicker.ts +31 -0
  285. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/index.ts +103 -0
  286. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/this.ts +2 -0
  287. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/bean/tableCell.resourcePicker.tsx +46 -0
  288. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/formFieldResourcePicker/controller.tsx +157 -0
  289. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/index.ts +1 -0
  290. package/zova/src/suite/cabloy-basic/modules/basic-resource/tsconfig.build.json +13 -0
  291. package/zova/src/suite/cabloy-basic/modules/basic-resource/tsconfig.json +5 -0
  292. package/zova/src/suite/cabloy-basic/modules/basic-select/package.json +1 -1
  293. package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +1 -1
  294. package/zova/src/suite/cabloy-basic/modules/basic-text/package.json +1 -1
  295. package/zova/src/suite/cabloy-basic/package.json +1 -0
  296. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +2 -2
  297. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx +1 -2
  298. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  299. package/zova/src/suite-vendor/a-zova/modules/a-api/package.json +2 -2
  300. package/zova/src/suite-vendor/a-zova/modules/a-app/package.json +2 -2
  301. package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +2 -2
  302. package/zova/src/suite-vendor/a-zova/modules/a-behavior/package.json +2 -2
  303. package/zova/src/suite-vendor/a-zova/modules/a-behaviors/package.json +2 -2
  304. package/zova/src/suite-vendor/a-zova/modules/a-boundary/package.json +2 -2
  305. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/command/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  306. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandBulk/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  307. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandDetailsRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +20 -0
  308. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  309. package/zova/src/suite-vendor/a-zova/modules/a-command/package.json +4 -3
  310. package/zova/src/suite-vendor/a-zova/modules/a-command/src/types/command.ts +2 -0
  311. package/zova/src/suite-vendor/a-zova/modules/a-fetch/package.json +2 -2
  312. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +2 -2
  313. package/zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx +1 -0
  314. package/zova/src/suite-vendor/a-zova/modules/a-icon/package.json +2 -2
  315. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +2 -2
  316. package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +2 -2
  317. package/zova/src/suite-vendor/a-zova/modules/a-meta/package.json +2 -2
  318. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +2 -2
  319. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useQuery.ts +2 -1
  320. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +3 -3
  321. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/lib/schema.ts +20 -4
  322. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +4 -0
  323. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/action.ts +2 -1
  324. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/detail.ts +10 -0
  325. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/details.ts +4 -1
  326. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/index.ts +1 -0
  327. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +2 -0
  328. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +2 -2
  329. package/zova/src/suite-vendor/a-zova/modules/a-routerstack/package.json +2 -2
  330. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +2 -2
  331. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +2 -2
  332. package/zova/src/suite-vendor/a-zova/modules/a-ssrhmr/package.json +2 -2
  333. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +2 -2
  334. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +2 -2
  335. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/detailsActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +24 -0
  336. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +4 -3
  337. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +5 -3
  338. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +2 -2
  339. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +3 -3
  340. package/zova/src/suite-vendor/a-zova/package.json +26 -26
@@ -0,0 +1,31 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerBlockFormProps } from '../../component/blockForm/controller.jsx';
7
+
8
+ import { ControllerBlockForm } from '../../component/blockForm/controller.jsx';
9
+ export type ZBlockFormProps = {
10
+ controllerRef?: (ref: ControllerBlockForm) => void;
11
+ } & ControllerBlockFormProps;
12
+
13
+ type ControllerInnerProps = TypeControllerInnerProps<
14
+ ControllerBlockFormProps,
15
+ keyof typeof ControllerBlockForm.$propsDefault
16
+ >;
17
+ declare module 'zova-module-basic-details' {
18
+ export interface ControllerBlockForm {
19
+ $props: ControllerInnerProps;
20
+ }
21
+ }
22
+
23
+ export const ZBlockForm = defineComponent((_props: ZBlockFormProps) => {
24
+ useController(ControllerBlockForm, undefined, undefined);
25
+ return () => {};
26
+ }, prepareComponentOptions(ControllerBlockForm.$componentOptions));
27
+ declare module 'zova-module-a-bean' {
28
+ export interface IVonaComponentRecord {
29
+ 'basic-details:blockForm': ControllerBlockFormProps;
30
+ }
31
+ }
@@ -1,7 +1,43 @@
1
1
  // eslint-disable
2
+ /** service: begin */
3
+ export * from '../service/detail.jsx';
4
+
5
+ import 'zova-module-a-bean';
6
+ declare module 'zova-module-a-bean' {
7
+
8
+ export interface IServiceRecord {
9
+ 'basic-details:detail': never;
10
+ }
11
+
12
+
13
+ }
14
+ declare module 'zova-module-basic-details' {
15
+
16
+ export interface ServiceDetail {
17
+ /** @internal */
18
+ get scope(): ScopeModuleBasicDetails;
19
+ }
20
+
21
+ export interface ServiceDetail {
22
+ get $beanFullName(): 'basic-details.service.detail';
23
+ get $onionName(): 'basic-details:detail';
24
+
25
+ }
26
+ }
27
+ /** service: end */
28
+ /** service: begin */
29
+ import { ServiceDetail } from '../service/detail.jsx';
30
+ import 'zova';
31
+ declare module 'zova' {
32
+ export interface IBeanRecordGeneral {
33
+ 'basic-details.service.detail': ServiceDetail;
34
+ }
35
+ }
36
+ /** service: end */
2
37
  /** controller: begin */
3
38
  export * from '../component/actionCreate/controller.jsx';
4
39
  export * from '../component/blockDetails/controller.jsx';
40
+ export * from '../component/blockForm/controller.jsx';
5
41
  export * from '../component/blockTable/controller.jsx';
6
42
  export * from '../component/blockToolbarBulk/controller.jsx';
7
43
  export * from '../component/formFieldDetails/controller.jsx';
@@ -23,6 +59,11 @@ declare module 'zova-module-basic-details' {
23
59
  get scope(): ScopeModuleBasicDetails;
24
60
  }
25
61
 
62
+ export interface ControllerBlockForm {
63
+ /** @internal */
64
+ get scope(): ScopeModuleBasicDetails;
65
+ }
66
+
26
67
  export interface ControllerBlockTable {
27
68
  /** @internal */
28
69
  get scope(): ScopeModuleBasicDetails;
@@ -42,6 +83,7 @@ declare module 'zova-module-basic-details' {
42
83
  /** controller: begin */
43
84
  import { ControllerActionCreate } from '../component/actionCreate/controller.jsx';
44
85
  import { ControllerBlockDetails } from '../component/blockDetails/controller.jsx';
86
+ import { ControllerBlockForm } from '../component/blockForm/controller.jsx';
45
87
  import { ControllerBlockTable } from '../component/blockTable/controller.jsx';
46
88
  import { ControllerBlockToolbarBulk } from '../component/blockToolbarBulk/controller.jsx';
47
89
  import { ControllerFormFieldDetails } from '../component/formFieldDetails/controller.jsx';
@@ -50,6 +92,7 @@ declare module 'zova' {
50
92
  export interface IBeanRecordLocal {
51
93
  'basic-details.controller.actionCreate': ControllerActionCreate;
52
94
  'basic-details.controller.blockDetails': ControllerBlockDetails;
95
+ 'basic-details.controller.blockForm': ControllerBlockForm;
53
96
  'basic-details.controller.blockTable': ControllerBlockTable;
54
97
  'basic-details.controller.blockToolbarBulk': ControllerBlockToolbarBulk;
55
98
  'basic-details.controller.formFieldDetails': ControllerFormFieldDetails;
@@ -62,6 +105,8 @@ export * from './component/actionCreate.js';
62
105
  import { ZActionCreate } from './component/actionCreate.js';
63
106
  export * from './component/blockDetails.js';
64
107
  import { ZBlockDetails } from './component/blockDetails.js';
108
+ export * from './component/blockForm.js';
109
+ import { ZBlockForm } from './component/blockForm.js';
65
110
  export * from './component/blockTable.js';
66
111
  import { ZBlockTable } from './component/blockTable.js';
67
112
  export * from './component/blockToolbarBulk.js';
@@ -71,6 +116,7 @@ import { ZFormFieldDetails } from './component/formFieldDetails.js';
71
116
  export const components = {
72
117
  'actionCreate': ZActionCreate,
73
118
  'blockDetails': ZBlockDetails,
119
+ 'blockForm': ZBlockForm,
74
120
  'blockTable': ZBlockTable,
75
121
  'blockToolbarBulk': ZBlockToolbarBulk,
76
122
  'formFieldDetails': ZFormFieldDetails,
@@ -80,6 +126,7 @@ declare module 'zova' {
80
126
  export interface IComponentRecord {
81
127
  'basic-details:actionCreate': ControllerActionCreate;
82
128
  'basic-details:blockDetails': ControllerBlockDetails;
129
+ 'basic-details:blockForm': ControllerBlockForm;
83
130
  'basic-details:blockTable': ControllerBlockTable;
84
131
  'basic-details:blockToolbarBulk': ControllerBlockToolbarBulk;
85
132
  'basic-details:formFieldDetails': ControllerFormFieldDetails;
@@ -87,6 +134,7 @@ export interface IComponentRecord {
87
134
  export interface IZovaComponentRecord {
88
135
  'basic-details:actionCreate': typeof ZActionCreate;
89
136
  'basic-details:blockDetails': typeof ZBlockDetails;
137
+ 'basic-details:blockForm': typeof ZBlockForm;
90
138
  'basic-details:blockTable': typeof ZBlockTable;
91
139
  'basic-details:blockToolbarBulk': typeof ZBlockToolbarBulk;
92
140
  'basic-details:formFieldDetails': typeof ZFormFieldDetails;
@@ -94,19 +142,42 @@ export interface IZovaComponentRecord {
94
142
  }
95
143
  /** components: end */
96
144
  /** tableCell: begin */
145
+ export * from '../bean/tableCell.actionDelete.jsx';
97
146
  export * from '../bean/tableCell.actionOperationsRow.jsx';
147
+ export * from '../bean/tableCell.actionUpdate.jsx';
148
+ export * from '../bean/tableCell.actionView.jsx';
149
+ export * from '../bean/tableCell.lineNumber.jsx';
150
+ import { ITableCellOptionsActionDelete } from '../bean/tableCell.actionDelete.jsx';
98
151
  import { ITableCellOptionsActionOperationsRow } from '../bean/tableCell.actionOperationsRow.jsx';
152
+ import { ITableCellOptionsActionUpdate } from '../bean/tableCell.actionUpdate.jsx';
153
+ import { ITableCellOptionsActionView } from '../bean/tableCell.actionView.jsx';
154
+ import { ITableCellOptionsLineNumber } from '../bean/tableCell.lineNumber.jsx';
99
155
  import 'zova-module-a-table';
100
156
  declare module 'zova-module-a-table' {
101
157
 
102
158
  export interface ITableCellRecord {
103
- 'basic-details:actionOperationsRow': ITableCellOptionsActionOperationsRow;
159
+ 'basic-details:actionDelete': ITableCellOptionsActionDelete;
160
+ 'basic-details:actionOperationsRow': ITableCellOptionsActionOperationsRow;
161
+ 'basic-details:actionUpdate': ITableCellOptionsActionUpdate;
162
+ 'basic-details:actionView': ITableCellOptionsActionView;
163
+ 'basic-details:lineNumber': ITableCellOptionsLineNumber;
104
164
  }
105
165
 
106
166
 
107
167
  }
108
168
  declare module 'zova-module-basic-details' {
109
169
 
170
+ export interface TableCellActionDelete {
171
+ /** @internal */
172
+ get scope(): ScopeModuleBasicDetails;
173
+ }
174
+
175
+ export interface TableCellActionDelete {
176
+ get $beanFullName(): 'basic-details.tableCell.actionDelete';
177
+ get $onionName(): 'basic-details:actionDelete';
178
+ get $onionOptions(): ITableCellOptionsActionDelete;
179
+ }
180
+
110
181
  export interface TableCellActionOperationsRow {
111
182
  /** @internal */
112
183
  get scope(): ScopeModuleBasicDetails;
@@ -116,18 +187,94 @@ declare module 'zova-module-basic-details' {
116
187
  get $beanFullName(): 'basic-details.tableCell.actionOperationsRow';
117
188
  get $onionName(): 'basic-details:actionOperationsRow';
118
189
  get $onionOptions(): ITableCellOptionsActionOperationsRow;
190
+ }
191
+
192
+ export interface TableCellActionUpdate {
193
+ /** @internal */
194
+ get scope(): ScopeModuleBasicDetails;
195
+ }
196
+
197
+ export interface TableCellActionUpdate {
198
+ get $beanFullName(): 'basic-details.tableCell.actionUpdate';
199
+ get $onionName(): 'basic-details:actionUpdate';
200
+ get $onionOptions(): ITableCellOptionsActionUpdate;
201
+ }
202
+
203
+ export interface TableCellActionView {
204
+ /** @internal */
205
+ get scope(): ScopeModuleBasicDetails;
206
+ }
207
+
208
+ export interface TableCellActionView {
209
+ get $beanFullName(): 'basic-details.tableCell.actionView';
210
+ get $onionName(): 'basic-details:actionView';
211
+ get $onionOptions(): ITableCellOptionsActionView;
212
+ }
213
+
214
+ export interface TableCellLineNumber {
215
+ /** @internal */
216
+ get scope(): ScopeModuleBasicDetails;
217
+ }
218
+
219
+ export interface TableCellLineNumber {
220
+ get $beanFullName(): 'basic-details.tableCell.lineNumber';
221
+ get $onionName(): 'basic-details:lineNumber';
222
+ get $onionOptions(): ITableCellOptionsLineNumber;
119
223
  }
120
224
  }
121
225
  /** tableCell: end */
122
226
  /** tableCell: begin */
227
+ import { TableCellActionDelete } from '../bean/tableCell.actionDelete.jsx';
123
228
  import { TableCellActionOperationsRow } from '../bean/tableCell.actionOperationsRow.jsx';
229
+ import { TableCellActionUpdate } from '../bean/tableCell.actionUpdate.jsx';
230
+ import { TableCellActionView } from '../bean/tableCell.actionView.jsx';
231
+ import { TableCellLineNumber } from '../bean/tableCell.lineNumber.jsx';
124
232
  import 'zova';
125
233
  declare module 'zova' {
126
234
  export interface IBeanRecordGeneral {
127
- 'basic-details.tableCell.actionOperationsRow': TableCellActionOperationsRow;
235
+ 'basic-details.tableCell.actionDelete': TableCellActionDelete;
236
+ 'basic-details.tableCell.actionOperationsRow': TableCellActionOperationsRow;
237
+ 'basic-details.tableCell.actionUpdate': TableCellActionUpdate;
238
+ 'basic-details.tableCell.actionView': TableCellActionView;
239
+ 'basic-details.tableCell.lineNumber': TableCellLineNumber;
128
240
  }
129
241
  }
130
242
  /** tableCell: end */
243
+ /** command: begin */
244
+ export * from '../bean/command.delete.jsx';
245
+ import { ICommandOptionsDelete } from '../bean/command.delete.jsx';
246
+ import 'zova-module-a-command';
247
+ declare module 'zova-module-a-command' {
248
+
249
+ export interface ICommandRecord {
250
+ 'basic-details:delete': ICommandOptionsDelete;
251
+ }
252
+
253
+
254
+ }
255
+ declare module 'zova-module-basic-details' {
256
+
257
+ export interface CommandDelete {
258
+ /** @internal */
259
+ get scope(): ScopeModuleBasicDetails;
260
+ }
261
+
262
+ export interface CommandDelete {
263
+ get $beanFullName(): 'basic-details.command.delete';
264
+ get $onionName(): 'basic-details:delete';
265
+ get $onionOptions(): ICommandOptionsDelete;
266
+ }
267
+ }
268
+ /** command: end */
269
+ /** command: begin */
270
+ import { CommandDelete } from '../bean/command.delete.jsx';
271
+ import 'zova';
272
+ declare module 'zova' {
273
+ export interface IBeanRecordGeneral {
274
+ 'basic-details.command.delete': CommandDelete;
275
+ }
276
+ }
277
+ /** command: end */
131
278
  /** locale: begin */
132
279
  import { locales } from './locales.js';
133
280
  /** locale: end */
@@ -0,0 +1,47 @@
1
+ import type {
2
+ ICommandExecute,
3
+ ICommandDetailsRowOptionsBase,
4
+ NextCommandExecute,
5
+ } from 'zova-module-a-command';
6
+ import type { IJsxRenderContextBase, IJsxRenderContextDetails } from 'zova-module-a-openapi';
7
+ import type { IJsxRenderContextTableCell } from 'zova-module-a-table';
8
+
9
+ import { isNil } from '@cabloy/utils';
10
+ import { BeanBase } from 'zova';
11
+ import { Command } from 'zova-module-a-command';
12
+
13
+ export type TypeCommandDeleteResult = unknown;
14
+
15
+ export interface ICommandOptionsDelete extends ICommandDetailsRowOptionsBase<TypeCommandDeleteResult> {}
16
+
17
+ type DetailItem = Record<string, any>;
18
+
19
+ @Command<ICommandOptionsDelete>()
20
+ export class CommandDelete extends BeanBase implements ICommandExecute {
21
+ execute(
22
+ _options: ICommandOptionsDelete,
23
+ renderContext: IJsxRenderContextBase,
24
+ next: NextCommandExecute,
25
+ ) {
26
+ const { $celScope } = renderContext as IJsxRenderContextDetails;
27
+ const $$details = $celScope.$$details;
28
+ if (!$$details) throw new Error('should provide $$details in cell scope');
29
+ const { cellContext } = renderContext as IJsxRenderContextTableCell;
30
+ const row = cellContext?.row;
31
+ if (!row) throw new Error('should provide row in cell context');
32
+ const detailItem = row.original as DetailItem;
33
+ const detailItemIndex = row.index;
34
+ const detailItemId = detailItem.id;
35
+ const detailItems = $$details.data as DetailItem[];
36
+ if (!isNil(detailItemId)) {
37
+ $$details.data = detailItems.map(item => {
38
+ return item.id === detailItemId ? { ...item, deleted: true } : item;
39
+ });
40
+ } else {
41
+ $$details.data = detailItems.filter((_item, index) => {
42
+ return index !== detailItemIndex;
43
+ });
44
+ }
45
+ return next();
46
+ }
47
+ }
@@ -0,0 +1,52 @@
1
+ import type { IResourceDetailsActionRowOptionsBase } from 'zova-module-a-openapi';
2
+ import type {
3
+ IJsxRenderContextTableCell,
4
+ ITableCellRender,
5
+ NextTableCellRender,
6
+ } from 'zova-module-a-table';
7
+
8
+ import { BeanBase } from 'zova';
9
+ import { ZIcon } from 'zova-module-a-icon';
10
+ import { TableCell } from 'zova-module-a-table';
11
+
12
+ import { ICommandOptionsDelete } from './command.delete.jsx';
13
+
14
+ declare module 'zova-module-a-openapi' {
15
+ export interface IResourceDetailsActionRowRecord {
16
+ 'basic-details:actionDelete'?: ITableCellOptionsActionDelete;
17
+ }
18
+ }
19
+
20
+ export interface ITableCellOptionsActionDelete extends IResourceDetailsActionRowOptionsBase {}
21
+
22
+ @TableCell<ITableCellOptionsActionDelete>({
23
+ class: 'btn btn-outline btn-error join-item',
24
+ })
25
+ export class TableCellActionDelete extends BeanBase implements ITableCellRender {
26
+ render(
27
+ options: ITableCellOptionsActionDelete,
28
+ renderContext: IJsxRenderContextTableCell,
29
+ _next: NextTableCellRender,
30
+ ) {
31
+ const { $host } = renderContext;
32
+ return (
33
+ <button
34
+ class={options.class}
35
+ type="button"
36
+ onClick={async () => {
37
+ const confirmed = await $host.$performCommand('basic-commands:confirm', {
38
+ text: this.scope.locale.DeleteConfirm(),
39
+ });
40
+ if (!confirmed) return;
41
+ await $host.$performCommand(
42
+ 'basic-details:delete',
43
+ options as Partial<ICommandOptionsDelete>,
44
+ renderContext,
45
+ );
46
+ }}
47
+ >
48
+ <ZIcon name="::delete" width={24}></ZIcon>
49
+ </button>
50
+ );
51
+ }
52
+ }
@@ -1,16 +1,21 @@
1
1
  import type {
2
2
  IResourceDetailsActionRowOptionsBase,
3
3
  IResourceRenderDetailsActionRowOptionsAction,
4
+ TypeTableCellRenderComponent,
4
5
  } from 'zova-module-a-openapi';
5
6
  import type {
6
7
  IJsxRenderContextTableCell,
8
+ IJsxRenderContextTableColumn,
7
9
  ITableCellRender,
8
10
  NextTableCellRender,
9
11
  } from 'zova-module-a-table';
10
12
 
13
+ import { VNode } from 'vue';
11
14
  import { BeanBase } from 'zova';
12
15
  import { TableCell } from 'zova-module-a-table';
13
16
 
17
+ import { checkPermission } from '../lib/utils.js';
18
+
14
19
  declare module 'zova-module-a-openapi' {
15
20
  export interface IResourceDetailsActionRowRecord {
16
21
  'basic-details:actionOperationsRow'?: ITableCellOptionsActionOperationsRow;
@@ -21,14 +26,47 @@ export interface ITableCellOptionsActionOperationsRow extends IResourceDetailsAc
21
26
  actions?: IResourceRenderDetailsActionRowOptionsAction[];
22
27
  }
23
28
 
24
- @TableCell<ITableCellOptionsActionOperationsRow>()
29
+ @TableCell<ITableCellOptionsActionOperationsRow>({
30
+ class: 'join',
31
+ })
25
32
  export class TableCellActionOperationsRow extends BeanBase implements ITableCellRender {
33
+ async checkVisible(
34
+ options: ITableCellOptionsActionOperationsRow,
35
+ renderContext: IJsxRenderContextTableColumn,
36
+ ): Promise<boolean> {
37
+ const { $celScope, $$table } = renderContext;
38
+ const actions = options.actions;
39
+ if (!actions || actions.length === 0) return false;
40
+ // renders
41
+ const renders: TypeTableCellRenderComponent[] = [];
42
+ for (const action of actions) {
43
+ const actionName = action.name;
44
+ const actionRender = action.render;
45
+ const permissionHint = action.options?.permission;
46
+ if (checkPermission($celScope.formMeta!.formScene!, permissionHint)) {
47
+ if (!actionRender) throw new Error(`should specify action render: ${actionName}`);
48
+ renders.push(actionRender);
49
+ }
50
+ }
51
+ await $$table.cellRenderPrepare(renders);
52
+ return renders.length > 0;
53
+ }
54
+
26
55
  render(
27
- _options: ITableCellOptionsActionOperationsRow,
28
- _renderContext: IJsxRenderContextTableCell,
29
- next: NextTableCellRender,
56
+ options: ITableCellOptionsActionOperationsRow,
57
+ renderContext: IJsxRenderContextTableCell,
58
+ _next: NextTableCellRender,
30
59
  ) {
31
- return <div>sssss</div>;
32
- return next();
60
+ const { $celScope, $$table } = renderContext;
61
+ const actions = options.actions;
62
+ if (!actions || actions.length === 0) return;
63
+ const domActions: VNode[] = [];
64
+ actions.forEach((action, index) => {
65
+ const permissionHint = action.options?.permission;
66
+ if (!checkPermission($celScope.formMeta!.formScene!, permissionHint)) return;
67
+ const options2 = Object.assign({ key: index }, action.options);
68
+ domActions.push($$table.cellRender(action.render!, options2, renderContext));
69
+ });
70
+ return <div class={options.class}>{domActions}</div>;
33
71
  }
34
72
  }
@@ -0,0 +1,73 @@
1
+ import type { IResourceDetailsActionRowOptionsBase } from 'zova-module-a-openapi';
2
+ import type {
3
+ IJsxRenderContextTableCell,
4
+ ITableCellRender,
5
+ NextTableCellRender,
6
+ } from 'zova-module-a-table';
7
+ import type { AppModalItem, IModalDialogOptions } from 'zova-module-basic-app';
8
+
9
+ import { BeanBase, deepExtend } from 'zova';
10
+ import { TypeFormOnSubmitData } from 'zova-module-a-form';
11
+ import { IIconRecord, ZIcon } from 'zova-module-a-icon';
12
+ import { TableCell } from 'zova-module-a-table';
13
+
14
+ import { ServiceDetail } from '../service/detail.jsx';
15
+ import { IDialogFormOptions } from '../types/dialogForm.js';
16
+
17
+ declare module 'zova-module-a-openapi' {
18
+ export interface IResourceDetailsActionRowRecord {
19
+ 'basic-details:actionUpdate'?: ITableCellOptionsActionUpdate;
20
+ }
21
+ }
22
+
23
+ export interface ITableCellOptionsActionUpdate extends IResourceDetailsActionRowOptionsBase {
24
+ dialogOptions?: IModalDialogOptions & { icon?: keyof IIconRecord; title?: string };
25
+ }
26
+
27
+ @TableCell<ITableCellOptionsActionUpdate>({
28
+ class: 'btn btn-outline btn-primary join-item',
29
+ })
30
+ export class TableCellActionUpdate extends BeanBase implements ITableCellRender {
31
+ render(
32
+ options: ITableCellOptionsActionUpdate,
33
+ renderContext: IJsxRenderContextTableCell,
34
+ _next: NextTableCellRender,
35
+ ) {
36
+ const { ctx, $celScope, cellContext } = renderContext;
37
+ return (
38
+ <button
39
+ class={options.class}
40
+ type="button"
41
+ onClick={async () => {
42
+ const $$details = $celScope.$$details;
43
+ if (!$$details) throw new Error('should provide $$details in cell scope');
44
+ const detailItem = cellContext.row.original as Record<string, any>;
45
+ const detailItemIndex = cellContext.row.index;
46
+ const serverDetail = await ctx.bean._newBean(ServiceDetail, true, {
47
+ locale: this.scope.locale,
48
+ schema: $$details.schemaForm,
49
+ data: deepExtend({}, detailItem),
50
+ formScene: 'edit',
51
+ schemaScene: 'form',
52
+ icon: options.dialogOptions?.icon,
53
+ title: options.dialogOptions?.title ?? this.scope.locale.EditDetail(),
54
+ dialogOptions: options.dialogOptions,
55
+ onSubmitData: (
56
+ data: TypeFormOnSubmitData<Record<string, any>>,
57
+ dialog: AppModalItem,
58
+ ) => {
59
+ const detailItemNew = deepExtend({}, detailItem, data.value);
60
+ $$details.data = $$details.data.map((item, index) => {
61
+ return index === detailItemIndex ? detailItemNew : item;
62
+ });
63
+ dialog.close();
64
+ },
65
+ } satisfies IDialogFormOptions);
66
+ serverDetail.openDialogForm();
67
+ }}
68
+ >
69
+ <ZIcon name="::draft" width={24}></ZIcon>
70
+ </button>
71
+ );
72
+ }
73
+ }
@@ -0,0 +1,64 @@
1
+ import type { IResourceDetailsActionRowOptionsBase } from 'zova-module-a-openapi';
2
+ import type {
3
+ IJsxRenderContextTableCell,
4
+ ITableCellRender,
5
+ NextTableCellRender,
6
+ } from 'zova-module-a-table';
7
+
8
+ import { BeanBase } from 'zova';
9
+ import { IIconRecord } from 'zova-module-a-icon';
10
+ import { TableCell } from 'zova-module-a-table';
11
+ import { IModalDialogOptions } from 'zova-module-basic-app';
12
+
13
+ import { ServiceDetail } from '../service/detail.jsx';
14
+ import { IDialogFormOptions } from '../types/dialogForm.js';
15
+
16
+ declare module 'zova-module-a-openapi' {
17
+ export interface IResourceDetailsActionRowRecord {
18
+ 'basic-details:actionView'?: ITableCellOptionsActionView;
19
+ }
20
+ }
21
+
22
+ export interface ITableCellOptionsActionView extends IResourceDetailsActionRowOptionsBase {
23
+ dialogOptions?: IModalDialogOptions & { icon?: keyof IIconRecord; title?: string };
24
+ }
25
+
26
+ @TableCell<ITableCellOptionsActionView>({
27
+ class: 'hover:text-blue-500',
28
+ })
29
+ export class TableCellActionView extends BeanBase implements ITableCellRender {
30
+ render(
31
+ options: ITableCellOptionsActionView,
32
+ renderContext: IJsxRenderContextTableCell,
33
+ next: NextTableCellRender,
34
+ ) {
35
+ const { ctx, $celScope, cellContext } = renderContext;
36
+ const value = next();
37
+ return (
38
+ <a
39
+ class={options.class}
40
+ href="#"
41
+ onClick={async e => {
42
+ e.preventDefault();
43
+ e.stopPropagation();
44
+ const $$details = $celScope.$$details;
45
+ if (!$$details) throw new Error('should provide $$details in cell scope');
46
+ const detailItem = cellContext.row.original as Record<string, any>;
47
+ const serverDetail = await ctx.bean._newBean(ServiceDetail, true, {
48
+ locale: this.scope.locale,
49
+ schema: $$details.schemaForm,
50
+ data: detailItem,
51
+ formScene: 'view',
52
+ schemaScene: 'form-view',
53
+ icon: options.dialogOptions?.icon,
54
+ title: options.dialogOptions?.title ?? this.scope.locale.EditDetail(),
55
+ dialogOptions: options.dialogOptions,
56
+ } satisfies IDialogFormOptions);
57
+ serverDetail.openDialogForm();
58
+ }}
59
+ >
60
+ {value}
61
+ </a>
62
+ );
63
+ }
64
+ }
@@ -0,0 +1,30 @@
1
+ import type { IResourceTableCellOptionsBase } from 'zova-module-a-openapi';
2
+ import type {
3
+ IJsxRenderContextTableCell,
4
+ ITableCellRender,
5
+ NextTableCellRender,
6
+ } from 'zova-module-a-table';
7
+
8
+ import { BeanBase } from 'zova';
9
+ import { TableCell } from 'zova-module-a-table';
10
+
11
+ declare module 'zova-module-a-openapi' {
12
+ export interface IResourceTableCellRecord {
13
+ 'basic-details:lineNumber'?: ITableCellOptionsLineNumber;
14
+ }
15
+ }
16
+
17
+ export interface ITableCellOptionsLineNumber extends IResourceTableCellOptionsBase {}
18
+
19
+ @TableCell<ITableCellOptionsLineNumber>()
20
+ export class TableCellLineNumber extends BeanBase implements ITableCellRender {
21
+ render(
22
+ _options: ITableCellOptionsLineNumber,
23
+ renderContext: IJsxRenderContextTableCell,
24
+ _next: NextTableCellRender,
25
+ ) {
26
+ const { cellContext } = renderContext;
27
+ const row = cellContext?.row;
28
+ return row.index + 1;
29
+ }
30
+ }
@@ -3,9 +3,15 @@ import type {
3
3
  IJsxRenderContextDetails,
4
4
  IResourceDetailsActionBulkOptionsBase,
5
5
  } from 'zova-module-a-openapi';
6
+ import type { AppModalItem, IModalDialogOptions } from 'zova-module-basic-app';
6
7
 
7
8
  import { BeanControllerBase, Use } from 'zova';
8
9
  import { Controller } from 'zova-module-a-bean';
10
+ import { TypeFormOnSubmitData } from 'zova-module-a-form';
11
+ import { IIconRecord } from 'zova-module-a-icon';
12
+
13
+ import { ServiceDetail } from '../../service/detail.jsx';
14
+ import { IDialogFormOptions } from '../../types/dialogForm.js';
9
15
 
10
16
  declare module 'zova-module-a-openapi' {
11
17
  export interface IResourceDetailsActionBulkRecord {
@@ -13,7 +19,9 @@ declare module 'zova-module-a-openapi' {
13
19
  }
14
20
  }
15
21
 
16
- export interface ControllerActionCreateProps extends IResourceDetailsActionBulkOptionsBase {}
22
+ export interface ControllerActionCreateProps extends IResourceDetailsActionBulkOptionsBase {
23
+ dialogOptions?: IModalDialogOptions & { icon?: keyof IIconRecord; title?: string };
24
+ }
17
25
 
18
26
  @Controller()
19
27
  export class ControllerActionCreate extends BeanControllerBase {
@@ -23,16 +31,32 @@ export class ControllerActionCreate extends BeanControllerBase {
23
31
  @Use({ injectionScope: 'host' })
24
32
  $$renderContext: IJsxRenderContextDetails;
25
33
 
26
- protected async __init__() {}
27
-
28
34
  protected render() {
29
35
  return (
30
36
  <button
31
37
  class={this.$props.class}
32
38
  type="button"
33
39
  onClick={async () => {
34
- console.log('create');
35
- // await this.$performCommand('basic-commands:create', this.$props, this.$$renderContext);
40
+ const { $$details } = this.$$renderContext;
41
+ const serverDetail = await this.bean._newBean(ServiceDetail, true, {
42
+ locale: this.scope.locale,
43
+ schema: $$details.schemaForm,
44
+ data: {},
45
+ formScene: 'create',
46
+ schemaScene: 'form-create',
47
+ icon: this.$props.dialogOptions?.icon,
48
+ title: this.$props.dialogOptions?.title ?? this.scope.locale.AddDetail(),
49
+ dialogOptions: this.$props.dialogOptions,
50
+ onSubmitData: (
51
+ data: TypeFormOnSubmitData<Record<string, any>>,
52
+ dialog: AppModalItem,
53
+ ) => {
54
+ const detailItem = data.value;
55
+ $$details.data = [...$$details.data, detailItem];
56
+ dialog.close();
57
+ },
58
+ } satisfies IDialogFormOptions);
59
+ serverDetail.openDialogForm();
36
60
  }}
37
61
  >
38
62
  {this.scope.locale.AddDetail()}