cabloy 5.1.149 → 5.1.150

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 (80) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +2 -1
  3. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +1 -0
  4. package/CHANGELOG.md +22 -0
  5. package/CLAUDE.md +1 -0
  6. package/package.json +1 -1
  7. package/repo-docs/backend/dto-guide.md +7 -6
  8. package/repo-docs/backend/dto-infer-generation.md +25 -5
  9. package/repo-docs/frontend/a-model-under-the-hood.md +38 -0
  10. package/repo-docs/frontend/a-openapi-under-the-hood.md +13 -2
  11. package/repo-docs/frontend/form-layout-guide.md +26 -9
  12. package/repo-docs/frontend/model-resource-best-practices.md +2 -0
  13. package/repo-docs/frontend/model-resource-cookbook.md +7 -1
  14. package/repo-docs/frontend/use-state-data-best-practices.md +44 -0
  15. package/repo-docs/frontend/zova-form-source-reading-map.md +26 -9
  16. package/repo-docs/frontend/zova-form-under-the-hood.md +11 -0
  17. package/repo-docs/fullstack/one-to-one-companion-resource-guide.md +1 -1
  18. package/repo-e2e/specs/a-commerce.spec.ts +40 -0
  19. package/vona/packages-cli/cli/package.json +1 -1
  20. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/controller/{{resourceName}}.ts_ +2 -2
  21. package/vona/packages-cli/cli-set-api/package.json +1 -1
  22. package/vona/pnpm-lock.yaml +83 -75
  23. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +108 -108
  24. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectResItem.tsx +12 -0
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/sku.ts +19 -1
  26. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuPresentation.test.ts +53 -4
  27. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +148 -148
  28. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAdjust.tsx +37 -3
  29. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +2 -2
  30. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +7 -6
  31. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +1 -1
  32. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +7 -6
  33. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +10 -7
  34. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +4 -4
  35. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +39 -67
  36. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +56 -37
  37. package/zova/packages-zova/zova/package.json +2 -2
  38. package/zova/pnpm-lock.yaml +2 -2
  39. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -0
  40. package/zova/src/suite/a-commerce/modules/commerce-trade/package.json +6 -1
  41. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/component/tableCellActionAdjustStock.ts +34 -0
  42. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +81 -6
  43. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeStockBalance.ts +32 -0
  44. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +44 -44
  45. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +356 -338
  46. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeStockBalance.ts +17 -0
  47. package/zova/src/suite/a-commerce/modules/commerce-trade/src/bean/tableCell.actionAdjustStock.tsx +35 -0
  48. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionAdjustStock/controller.tsx +138 -0
  49. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +3 -0
  50. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +3 -0
  51. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/stockBalance.ts +36 -0
  52. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +4 -4
  53. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +8 -8
  54. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +11 -11
  55. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +2 -2
  56. package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +2 -0
  57. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  58. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +2 -1
  59. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/test/model/resource.types.ts +11 -0
  60. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  61. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +1 -1
  62. package/zova/src/suite-vendor/a-zova/modules/a-form/src/lib/formLayout.ts +58 -9
  63. package/zova/src/suite-vendor/a-zova/modules/a-form/test/lib/formLayout.test.ts +157 -0
  64. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  65. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.persister.ts +3 -1
  66. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useQuery.ts +11 -13
  67. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useState.ts +9 -7
  68. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useStateGeneral.ts +5 -12
  69. package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/queryPersister.ts +17 -0
  70. package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/queryRefetch.ts +34 -0
  71. package/zova/src/suite-vendor/a-zova/modules/a-model/src/types/query.ts +27 -3
  72. package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/queryPersister.test.ts +115 -0
  73. package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/queryRefetch.test.ts +84 -0
  74. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  75. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/lib/schema.ts +27 -5
  76. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +2 -2
  77. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +4 -0
  78. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/schema.ts +2 -5
  79. package/zova/src/suite-vendor/a-zova/modules/a-openapi/test/lib/schema.test.ts +179 -0
  80. package/zova/src/suite-vendor/a-zova/package.json +4 -4
@@ -24,14 +24,14 @@ export interface IControllerOptions<%=argv.resourceNameCapitalize%> extends IDec
24
24
  })
25
25
  @Resource()
26
26
  export class Controller<%=argv.resourceNameCapitalize%> extends BeanBase {
27
- @Web.post({ summary: $locale('<%=argv.resourceNameCapitalize%>Create') })
27
+ @Web.post('', { summary: $locale('<%=argv.resourceNameCapitalize%>Create') })
28
28
  @Api.body(v.tableIdentity())
29
29
  @Passport.rbac()
30
30
  async create(@Arg.body() <%=argv.resourceName%>: Dto<%=argv.resourceNameCapitalize%>Create): Promise<TableIdentity> {
31
31
  return (await this.scope.service.<%=argv.resourceName%>.create(<%=argv.resourceName%>)).id;
32
32
  }
33
33
 
34
- @Web.get({ summary: $locale('<%=argv.resourceNameCapitalize%>Select') })
34
+ @Web.get('', { summary: $locale('<%=argv.resourceNameCapitalize%>Select') })
35
35
  @Api.body(Dto<%=argv.resourceNameCapitalize%>SelectRes)
36
36
  @Passport.rbac()
37
37
  async select(@Arg.filter(Dto<%=argv.resourceNameCapitalize%>SelectReq) params: IQueryParams<Model<%=argv.resourceNameCapitalize%>>): Promise<Dto<%=argv.resourceNameCapitalize%>SelectRes> {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli-set-api",
3
- "version": "1.1.139",
3
+ "version": "1.1.140",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli-set-api",
6
6
  "keywords": [
@@ -545,9 +545,6 @@ importers:
545
545
 
546
546
  .zova-rest/cabloy-basic-admin:
547
547
  dependencies:
548
- '@tanstack/query-core':
549
- specifier: ^5.101.1
550
- version: 5.101.2
551
548
  '@tanstack/vue-query':
552
549
  specifier: ^5.101.1
553
550
  version: 5.101.2(vue@3.5.39(typescript@5.9.3))
@@ -564,8 +561,8 @@ importers:
564
561
  specifier: npm:@cabloy/zod@4.3.8
565
562
  version: '@cabloy/zod@4.3.8'
566
563
  zova:
567
- specifier: ^5.1.153
568
- version: 5.1.153(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
564
+ specifier: ^5.1.154
565
+ version: 5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
569
566
  zova-jsx:
570
567
  specifier: ^1.1.88
571
568
  version: 1.1.88(typescript@5.9.3)
@@ -582,8 +579,8 @@ importers:
582
579
  specifier: ^5.1.34
583
580
  version: 5.1.34
584
581
  zova-module-a-form:
585
- specifier: ^5.1.48
586
- version: 5.1.48(vue@3.5.39(typescript@5.9.3))
582
+ specifier: ^5.1.49
583
+ version: 5.1.49(vue@3.5.39(typescript@5.9.3))
587
584
  zova-module-a-icon:
588
585
  specifier: ^5.1.27
589
586
  version: 5.1.27
@@ -779,9 +776,6 @@ importers:
779
776
 
780
777
  .zova-rest/cabloy-commerce-admin:
781
778
  dependencies:
782
- '@tanstack/query-core':
783
- specifier: ^5.101.1
784
- version: 5.101.2
785
779
  '@tanstack/vue-query':
786
780
  specifier: ^5.101.1
787
781
  version: 5.101.2(vue@3.5.39(typescript@5.9.3))
@@ -798,11 +792,11 @@ importers:
798
792
  specifier: npm:@cabloy/zod@4.3.8
799
793
  version: '@cabloy/zod@4.3.8'
800
794
  zova:
801
- specifier: ^5.1.151
802
- version: 5.1.151(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
795
+ specifier: ^5.1.154
796
+ version: 5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
803
797
  zova-jsx:
804
- specifier: ^1.1.86
805
- version: 1.1.86(typescript@5.9.3)
798
+ specifier: ^1.1.88
799
+ version: 1.1.88(typescript@5.9.3)
806
800
  zova-module-a-api:
807
801
  specifier: ^5.1.22
808
802
  version: 5.1.22
@@ -816,8 +810,8 @@ importers:
816
810
  specifier: ^5.1.34
817
811
  version: 5.1.34
818
812
  zova-module-a-form:
819
- specifier: ^5.1.47
820
- version: 5.1.47(vue@3.5.39(typescript@5.9.3))
813
+ specifier: ^5.1.49
814
+ version: 5.1.49(vue@3.5.39(typescript@5.9.3))
821
815
  zova-module-a-icon:
822
816
  specifier: ^5.1.27
823
817
  version: 5.1.27
@@ -831,8 +825,8 @@ importers:
831
825
  specifier: ^5.1.50
832
826
  version: 5.1.50
833
827
  zova-module-a-pay:
834
- specifier: ^5.0.6
835
- version: 5.0.6
828
+ specifier: ^5.0.7
829
+ version: 5.0.7
836
830
  zova-module-a-router:
837
831
  specifier: ^5.1.34
838
832
  version: 5.1.34
@@ -840,8 +834,8 @@ importers:
840
834
  specifier: ^5.1.34
841
835
  version: 5.1.34
842
836
  zova-module-a-ssr:
843
- specifier: ^5.1.37
844
- version: 5.1.37
837
+ specifier: ^5.1.38
838
+ version: 5.1.38
845
839
  zova-module-a-style:
846
840
  specifier: ^5.1.35
847
841
  version: 5.1.35
@@ -849,11 +843,11 @@ importers:
849
843
  specifier: ^5.1.38
850
844
  version: 5.1.38(vue@3.5.39(typescript@5.9.3))
851
845
  zova-module-pay-mock:
852
- specifier: ^5.0.4
853
- version: 5.0.4
846
+ specifier: ^5.0.5
847
+ version: 5.0.5
854
848
  zova-module-rest-resource:
855
- specifier: ^5.1.45
856
- version: 5.1.45
849
+ specifier: ^5.1.46
850
+ version: 5.1.46
857
851
 
858
852
  packages-cli/cabloy-cli:
859
853
  dependencies:
@@ -8959,18 +8953,12 @@ packages:
8959
8953
  zova-core@5.1.86:
8960
8954
  resolution: {integrity: sha512-DoyHChxGUAefZ3OimhCJLFHD/ft8eoMLtlHkow8zh67n/6FVv4me7LYP0O0itzUcG5GskFUfBn6q72e3QoRzEg==}
8961
8955
 
8962
- zova-core@5.1.87:
8963
- resolution: {integrity: sha512-CANgp5A86nKkpx0YpGg5sQLnm93ZWLS8Sq3eMN/Pmf505EgSs7oJ8PSyKYa4eHknRbJwDAGHzqrKNQyARrLbKA==}
8964
-
8965
8956
  zova-core@5.1.88:
8966
8957
  resolution: {integrity: sha512-YZ8z1GHE5iAo/khgP8/gnrRN8bUkv80cVvxDzmGSG5p/CEqQpHhcrC8lUH48fbuc4BgeGMTRlZoB+uNopYnALQ==}
8967
8958
 
8968
8959
  zova-jsx@1.1.86:
8969
8960
  resolution: {integrity: sha512-cGGv9tsu8MuPjHM055n8On3MhuTnhdpk00VDpMN3eiljnMCQiiiW3McIDMxMkuXXJFgCJvshkDhQ9VR7EZhcsg==}
8970
8961
 
8971
- zova-jsx@1.1.87:
8972
- resolution: {integrity: sha512-sUq/v9cn1gPdVvE4VI1xZbsI/G36dBCIZcCB5LW3s75tg7ntZ8y6n8rjJVa6VZK0WHE0ZU8dfYd0AGtEHEyCrw==}
8973
-
8974
8962
  zova-jsx@1.1.88:
8975
8963
  resolution: {integrity: sha512-DusZAiEor+lrYwsbxrWFhTBjYTArg6ldxuo323ly1GJ39jmNeF+vRDc8liDQF1czstp0fnJtuMNxQCEBaCasxg==}
8976
8964
 
@@ -9004,6 +8992,9 @@ packages:
9004
8992
  zova-module-a-form@5.1.48:
9005
8993
  resolution: {integrity: sha512-/YuNFocyP3P6THVrSebi1jRm5+og7YOleBWc7gPzqKUFWTmxN7XBbomRidQWXSRenSd7AWBjNgO3OajhOdswlw==}
9006
8994
 
8995
+ zova-module-a-form@5.1.49:
8996
+ resolution: {integrity: sha512-p/faHaDELk2xH4TbuXQ9E+vIUZ4yZYS4URFF0HtrJ+bXDBMCJmjOl3H0encedLh9ZS0dGYpvejHPh3nLvw27JA==}
8997
+
9007
8998
  zova-module-a-icon@5.1.27:
9008
8999
  resolution: {integrity: sha512-KAvHkK6YsN2H5iQgl2IBQHIvvFDnfzPCxDzuQyTnAiCgSczD/UFO6bLZqWVT2m/qfsmJXMzWAWHPdU02J3ANZQ==}
9009
9000
 
@@ -9082,12 +9073,18 @@ packages:
9082
9073
  zova-suite-a-zova@5.1.152:
9083
9074
  resolution: {integrity: sha512-P/dcMb2fcMpnmDMlrgvpddWUbupnvohD1Jp60VYWoqI0JcWMlYTJvWQWrwszDqiMvMiOTH5mmQBTws0KzbsXpA==}
9084
9075
 
9076
+ zova-suite-a-zova@5.1.153:
9077
+ resolution: {integrity: sha512-Q7R6GL5O/Tlqk4cnFYumMR2eeCwAqfnTtFrYQuuQMpz7BmYhAPmMmJQWF2reHlRjG6B4dbOPZ5pxl1iWagY7PA==}
9078
+
9085
9079
  zova@5.1.151:
9086
9080
  resolution: {integrity: sha512-ORpFNcMYRmoWtIGIGGswPpeLgrYiax9prStB3Em0umUFGxVLPg9Yt0R1/psFlFgcC9WionitSz4WBhjvcra8Xw==}
9087
9081
 
9088
9082
  zova@5.1.153:
9089
9083
  resolution: {integrity: sha512-2c+4lhgZgIzM6a066eRU/Ru6CvrSTwRsq1SgsSj+NuLOxUXoj+JPvwUezuRRmBCTukpRMd2nfw8u6vWHzVArTA==}
9090
9084
 
9085
+ zova@5.1.154:
9086
+ resolution: {integrity: sha512-QF0f+wwLeuf18hsmZj1/3G/AQ9cNQYMKZiCoBBsTDh7oIhaxsmI5wxtjo59HiOEkk5ZmWPHqwjA4iepTLoKqeg==}
9087
+
9091
9088
  zwitch@1.0.5:
9092
9089
  resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
9093
9090
 
@@ -15392,37 +15389,6 @@ snapshots:
15392
15389
  transitivePeerDependencies:
15393
15390
  - typescript
15394
15391
 
15395
- zova-core@5.1.87(typescript@5.9.3):
15396
- dependencies:
15397
- '@cabloy/compose': link:packages-utils/compose
15398
- '@cabloy/extend': link:packages-utils/extend
15399
- '@cabloy/json5': link:packages-utils/json5
15400
- '@cabloy/localeutil': link:packages-utils/localeutil
15401
- '@cabloy/logger': 1.1.25
15402
- '@cabloy/module-info': 2.0.3
15403
- '@cabloy/utils': link:packages-utils/utils
15404
- '@cabloy/vue-compiler-sfc': 3.5.14
15405
- '@cabloy/vue-reactivity': 3.5.16
15406
- '@cabloy/vue-router': 4.4.16(vue@3.5.39(typescript@5.9.3))
15407
- '@cabloy/vue-runtime-core': 3.5.57
15408
- '@cabloy/vue-runtime-dom': 3.5.13
15409
- '@cabloy/vue-server-renderer': 3.5.18(vue@3.5.39(typescript@5.9.3))
15410
- '@cabloy/word-utils': 2.1.14
15411
- '@cabloy/zod-errors-custom': link:packages-utils/zod-errors-custom
15412
- '@cabloy/zod-openapi': link:packages-utils/zod-openapi
15413
- '@cabloy/zod-query': link:packages-utils/zod-query
15414
- '@types/js-cookie': 3.0.6
15415
- '@types/ms': 2.1.0
15416
- '@vue/shared': 3.5.36
15417
- deep-equal: 2.2.3
15418
- ms: 2.1.3
15419
- reflect-metadata: 0.2.2
15420
- vue: 3.5.39(typescript@5.9.3)
15421
- vue-plugin-render-freeze: 2.0.4(vue@3.5.39(typescript@5.9.3))
15422
- zod: '@cabloy/zod@4.3.8'
15423
- transitivePeerDependencies:
15424
- - typescript
15425
-
15426
15392
  zova-core@5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3):
15427
15393
  dependencies:
15428
15394
  '@cabloy/compose': link:packages-utils/compose
@@ -15465,17 +15431,6 @@ snapshots:
15465
15431
  transitivePeerDependencies:
15466
15432
  - typescript
15467
15433
 
15468
- zova-jsx@1.1.87(typescript@5.9.3):
15469
- dependencies:
15470
- '@cabloy/compose': link:packages-utils/compose
15471
- '@cabloy/utils': link:packages-utils/utils
15472
- '@cabloy/word-utils': 2.1.14
15473
- typestyle: 2.4.0
15474
- vue: 3.5.39(typescript@5.9.3)
15475
- zova-core: 5.1.87(typescript@5.9.3)
15476
- transitivePeerDependencies:
15477
- - typescript
15478
-
15479
15434
  zova-jsx@1.1.88(typescript@5.9.3):
15480
15435
  dependencies:
15481
15436
  '@cabloy/compose': link:packages-utils/compose
@@ -15526,6 +15481,14 @@ snapshots:
15526
15481
  - '@vue/composition-api'
15527
15482
  - vue
15528
15483
 
15484
+ zova-module-a-form@5.1.49(vue@3.5.39(typescript@5.9.3)):
15485
+ dependencies:
15486
+ '@tanstack/vue-form': 1.33.2(vue@3.5.39(typescript@5.9.3))
15487
+ '@tanstack/vue-store': 0.11.0(vue@3.5.39(typescript@5.9.3))
15488
+ transitivePeerDependencies:
15489
+ - '@vue/composition-api'
15490
+ - vue
15491
+
15529
15492
  zova-module-a-icon@5.1.27: {}
15530
15493
 
15531
15494
  zova-module-a-interceptor@5.1.31: {}
@@ -15613,7 +15576,7 @@ snapshots:
15613
15576
  '@cabloy/word-utils': 2.1.14
15614
15577
  defu: 6.1.7
15615
15578
  luxon: 3.7.2
15616
- zova-jsx: 1.1.87(typescript@5.9.3)
15579
+ zova-jsx: 1.1.88(typescript@5.9.3)
15617
15580
  transitivePeerDependencies:
15618
15581
  - typescript
15619
15582
  - vue
@@ -15652,7 +15615,7 @@ snapshots:
15652
15615
  zova-module-a-boundary: 5.1.22
15653
15616
  zova-module-a-command: 5.1.34
15654
15617
  zova-module-a-fetch: 5.1.25
15655
- zova-module-a-form: 5.1.47(vue@3.5.39(typescript@5.9.3))
15618
+ zova-module-a-form: 5.1.48(vue@3.5.39(typescript@5.9.3))
15656
15619
  zova-module-a-icon: 5.1.27
15657
15620
  zova-module-a-interceptor: 5.1.31
15658
15621
  zova-module-a-logger: 5.1.28
@@ -15662,7 +15625,7 @@ snapshots:
15662
15625
  zova-module-a-router: 5.1.34
15663
15626
  zova-module-a-routerstack: 5.1.27
15664
15627
  zova-module-a-routertabs: 5.1.34
15665
- zova-module-a-ssr: 5.1.37
15628
+ zova-module-a-ssr: 5.1.38
15666
15629
  zova-module-a-ssrhmr: 5.1.23
15667
15630
  zova-module-a-ssrserver: 5.1.26
15668
15631
  zova-module-a-style: 5.1.35
@@ -15710,6 +15673,40 @@ snapshots:
15710
15673
  - typescript
15711
15674
  - vue
15712
15675
 
15676
+ zova-suite-a-zova@5.1.153(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15677
+ dependencies:
15678
+ zova-module-a-api: 5.1.22
15679
+ zova-module-a-app: 5.1.26
15680
+ zova-module-a-bean: 5.1.33
15681
+ zova-module-a-behavior: 5.1.26
15682
+ zova-module-a-behaviors: 5.1.22
15683
+ zova-module-a-boundary: 5.1.22
15684
+ zova-module-a-command: 5.1.34
15685
+ zova-module-a-fetch: 5.1.25
15686
+ zova-module-a-form: 5.1.49(vue@3.5.39(typescript@5.9.3))
15687
+ zova-module-a-icon: 5.1.27
15688
+ zova-module-a-interceptor: 5.1.31
15689
+ zova-module-a-logger: 5.1.28
15690
+ zova-module-a-meta: 5.1.22
15691
+ zova-module-a-model: 5.1.35(vue@3.5.39(typescript@5.9.3))
15692
+ zova-module-a-openapi: 5.1.50
15693
+ zova-module-a-router: 5.1.34
15694
+ zova-module-a-routerstack: 5.1.27
15695
+ zova-module-a-routertabs: 5.1.34
15696
+ zova-module-a-ssr: 5.1.38
15697
+ zova-module-a-ssrhmr: 5.1.23
15698
+ zova-module-a-ssrserver: 5.1.26
15699
+ zova-module-a-style: 5.1.35
15700
+ zova-module-a-table: 5.1.38(vue@3.5.39(typescript@5.9.3))
15701
+ zova-module-a-zod: 5.1.37
15702
+ zova-module-a-zova: 5.1.103(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15703
+ transitivePeerDependencies:
15704
+ - '@vue/composition-api'
15705
+ - debug
15706
+ - supports-color
15707
+ - typescript
15708
+ - vue
15709
+
15713
15710
  zova@5.1.151(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15714
15711
  dependencies:
15715
15712
  zova-core: 5.1.86(typescript@5.9.3)
@@ -15732,6 +15729,17 @@ snapshots:
15732
15729
  - typescript
15733
15730
  - vue
15734
15731
 
15732
+ zova@5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15733
+ dependencies:
15734
+ zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
15735
+ zova-suite-a-zova: 5.1.153(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15736
+ transitivePeerDependencies:
15737
+ - '@vue/composition-api'
15738
+ - debug
15739
+ - supports-color
15740
+ - typescript
15741
+ - vue
15742
+
15735
15743
  zwitch@1.0.5: {}
15736
15744
 
15737
15745
  zwitch@2.0.4: {}
@@ -357,114 +357,6 @@ declare module 'vona-module-a-orm' {
357
357
  }
358
358
  }
359
359
  /** model: end */
360
- /** service: begin */
361
- export * from '../service/category.ts';
362
- export * from '../service/product.ts';
363
- export * from '../service/sku.ts';
364
-
365
- import 'vona-module-a-bean';
366
- declare module 'vona-module-a-bean' {
367
-
368
- export interface IServiceRecord {
369
- 'commerce-catalog:category': never;
370
- 'commerce-catalog:product': never;
371
- 'commerce-catalog:sku': never;
372
- }
373
-
374
-
375
- }
376
- declare module 'vona-module-commerce-catalog' {
377
-
378
- export interface ServiceCategory {
379
- /** @internal */
380
- get scope(): ScopeModuleCommerceCatalog;
381
- }
382
-
383
- export interface ServiceCategory {
384
- get $beanFullName(): 'commerce-catalog.service.category';
385
- get $onionName(): 'commerce-catalog:category';
386
- }
387
-
388
- export interface ServiceProduct {
389
- /** @internal */
390
- get scope(): ScopeModuleCommerceCatalog;
391
- }
392
-
393
- export interface ServiceProduct {
394
- get $beanFullName(): 'commerce-catalog.service.product';
395
- get $onionName(): 'commerce-catalog:product';
396
- }
397
-
398
- export interface ServiceSku {
399
- /** @internal */
400
- get scope(): ScopeModuleCommerceCatalog;
401
- }
402
-
403
- export interface ServiceSku {
404
- get $beanFullName(): 'commerce-catalog.service.sku';
405
- get $onionName(): 'commerce-catalog:sku';
406
- }
407
- }
408
- /** service: end */
409
- /** service: begin */
410
- import type { ServiceCategory } from '../service/category.ts';
411
- import type { ServiceProduct } from '../service/product.ts';
412
- import type { ServiceSku } from '../service/sku.ts';
413
- export interface IModuleService {
414
- 'category': ServiceCategory;
415
- 'product': ServiceProduct;
416
- 'sku': ServiceSku;
417
- }
418
- /** service: end */
419
- /** service: begin */
420
-
421
- import 'vona';
422
- declare module 'vona' {
423
- export interface IBeanRecordGeneral {
424
- 'commerce-catalog.service.category': ServiceCategory;
425
- 'commerce-catalog.service.product': ServiceProduct;
426
- 'commerce-catalog.service.sku': ServiceSku;
427
- }
428
- }
429
- /** service: end */
430
- /** meta: begin */
431
- export * from '../bean/meta.index.ts';
432
- export * from '../bean/meta.version.ts';
433
- import type { IMetaOptionsIndex } from 'vona-module-a-index';
434
- import 'vona-module-a-meta';
435
- declare module 'vona-module-a-meta' {
436
-
437
- export interface IMetaRecord {
438
- 'commerce-catalog:index': IMetaOptionsIndex;
439
- 'commerce-catalog:version': never;
440
- }
441
-
442
-
443
- }
444
- declare module 'vona-module-commerce-catalog' {
445
-
446
- export interface MetaIndex {
447
- /** @internal */
448
- get scope(): ScopeModuleCommerceCatalog;
449
- }
450
-
451
- export interface MetaIndex {
452
- get $beanFullName(): 'commerce-catalog.meta.index';
453
- get $onionName(): 'commerce-catalog:index';
454
- get $onionOptions(): IMetaOptionsIndex;
455
- }
456
-
457
- export interface MetaVersion {
458
- /** @internal */
459
- get scope(): ScopeModuleCommerceCatalog;
460
- }
461
-
462
- export interface MetaVersion {
463
- get $beanFullName(): 'commerce-catalog.meta.version';
464
- get $onionName(): 'commerce-catalog:version';
465
- }
466
- }
467
- /** meta: end */
468
360
  /** dto: begin */
469
361
  export * from '../dto/categoryCreate.tsx';
470
362
  export * from '../dto/categorySelectReq.tsx';
@@ -803,6 +695,114 @@ import 'vona-module-a-openapi';
803
695
  }
804
696
 
805
697
  /** controller: end */
698
+ /** service: begin */
699
+ export * from '../service/category.ts';
700
+ export * from '../service/product.ts';
701
+ export * from '../service/sku.ts';
702
+
703
+ import 'vona-module-a-bean';
704
+ declare module 'vona-module-a-bean' {
705
+
706
+ export interface IServiceRecord {
707
+ 'commerce-catalog:category': never;
708
+ 'commerce-catalog:product': never;
709
+ 'commerce-catalog:sku': never;
710
+ }
711
+
712
+
713
+ }
714
+ declare module 'vona-module-commerce-catalog' {
715
+
716
+ export interface ServiceCategory {
717
+ /** @internal */
718
+ get scope(): ScopeModuleCommerceCatalog;
719
+ }
720
+
721
+ export interface ServiceCategory {
722
+ get $beanFullName(): 'commerce-catalog.service.category';
723
+ get $onionName(): 'commerce-catalog:category';
724
+ }
725
+
726
+ export interface ServiceProduct {
727
+ /** @internal */
728
+ get scope(): ScopeModuleCommerceCatalog;
729
+ }
730
+
731
+ export interface ServiceProduct {
732
+ get $beanFullName(): 'commerce-catalog.service.product';
733
+ get $onionName(): 'commerce-catalog:product';
734
+ }
735
+
736
+ export interface ServiceSku {
737
+ /** @internal */
738
+ get scope(): ScopeModuleCommerceCatalog;
739
+ }
740
+
741
+ export interface ServiceSku {
742
+ get $beanFullName(): 'commerce-catalog.service.sku';
743
+ get $onionName(): 'commerce-catalog:sku';
744
+ }
745
+ }
746
+ /** service: end */
747
+ /** service: begin */
748
+ import type { ServiceCategory } from '../service/category.ts';
749
+ import type { ServiceProduct } from '../service/product.ts';
750
+ import type { ServiceSku } from '../service/sku.ts';
751
+ export interface IModuleService {
752
+ 'category': ServiceCategory;
753
+ 'product': ServiceProduct;
754
+ 'sku': ServiceSku;
755
+ }
756
+ /** service: end */
757
+ /** service: begin */
758
+
759
+ import 'vona';
760
+ declare module 'vona' {
761
+ export interface IBeanRecordGeneral {
762
+ 'commerce-catalog.service.category': ServiceCategory;
763
+ 'commerce-catalog.service.product': ServiceProduct;
764
+ 'commerce-catalog.service.sku': ServiceSku;
765
+ }
766
+ }
767
+ /** service: end */
768
+ /** meta: begin */
769
+ export * from '../bean/meta.index.ts';
770
+ export * from '../bean/meta.version.ts';
771
+ import type { IMetaOptionsIndex } from 'vona-module-a-index';
772
+ import 'vona-module-a-meta';
773
+ declare module 'vona-module-a-meta' {
774
+
775
+ export interface IMetaRecord {
776
+ 'commerce-catalog:index': IMetaOptionsIndex;
777
+ 'commerce-catalog:version': never;
778
+ }
779
+
780
+
781
+ }
782
+ declare module 'vona-module-commerce-catalog' {
783
+
784
+ export interface MetaIndex {
785
+ /** @internal */
786
+ get scope(): ScopeModuleCommerceCatalog;
787
+ }
788
+
789
+ export interface MetaIndex {
790
+ get $beanFullName(): 'commerce-catalog.meta.index';
791
+ get $onionName(): 'commerce-catalog:index';
792
+ get $onionOptions(): IMetaOptionsIndex;
793
+ }
794
+
795
+ export interface MetaVersion {
796
+ /** @internal */
797
+ get scope(): ScopeModuleCommerceCatalog;
798
+ }
799
+
800
+ export interface MetaVersion {
801
+ get $beanFullName(): 'commerce-catalog.meta.version';
802
+ get $onionName(): 'commerce-catalog:version';
803
+ }
804
+ }
805
+ /** meta: end */
806
806
  /** ssrMenu: begin */
807
807
  export * from '../bean/ssrMenu.category.ts';
808
808
  export * from '../bean/ssrMenu.product.ts';
@@ -3,6 +3,7 @@ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
3
3
  import { Api, v } from 'vona-module-a-openapiutils';
4
4
  import { $Dto } from 'vona-module-a-orm';
5
5
  import { Dto } from 'vona-module-a-web';
6
+ import { z } from 'zod';
6
7
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
7
8
 
8
9
  import { $locale } from '../.metadata/locales.ts';
@@ -62,11 +63,22 @@ export class DtoSkuSelectResItem extends $Dto.get(() => ModelSku, {
62
63
  product: { columns: ['id', 'title'] },
63
64
  },
64
65
  }) {
66
+ @Api.field(
67
+ v.title($locale('Available')),
68
+ v.required(),
69
+ z.number().int().nonnegative(),
70
+ ZovaRender.order(5),
71
+ )
72
+ available: number;
73
+
65
74
  @Api.field(
66
75
  v.title($locale('Operations')),
67
76
  ZovaRender.order(1, 'max'),
68
77
  ZovaRender.cell('basic-table:actionOperationsRow', {
69
78
  actions: [
79
+ ZovaRender.tableActionRow('commerce-trade:actionAdjustStock', {
80
+ permission: { actionInherit: 'update' },
81
+ }),
70
82
  ZovaRender.tableActionRow('basic-table:actionUpdate'),
71
83
  ZovaRender.tableActionRow('basic-table:actionDelete'),
72
84
  ],
@@ -28,13 +28,31 @@ export class ServiceSku extends BeanBase {
28
28
  }
29
29
 
30
30
  async select(params?: IQueryParams<ModelSku>): Promise<DtoSkuSelectRes> {
31
- return await this.scope.model.sku.selectAndCount({
31
+ const result = await this.scope.model.sku.selectAndCount({
32
32
  ...params,
33
33
  include: {
34
34
  ...params?.include,
35
35
  product: { columns: ['id', 'title'] },
36
36
  },
37
37
  });
38
+ if (result.list.length === 0) return result as unknown as DtoSkuSelectRes;
39
+
40
+ const balances = await this.$scope.commerceTrade.model.stockBalance.select({
41
+ columns: ['skuId', 'available'],
42
+ where: {
43
+ skuId: result.list.map(sku => sku.id),
44
+ },
45
+ });
46
+ const availableBySkuId = new Map(
47
+ balances.map(balance => [String(balance.skuId), balance.available]),
48
+ );
49
+ return {
50
+ ...result,
51
+ list: result.list.map(sku => ({
52
+ ...sku,
53
+ available: availableBySkuId.get(String(sku.id)) ?? 0,
54
+ })),
55
+ } as DtoSkuSelectRes;
38
56
  }
39
57
 
40
58
  async view(id: TableIdentity): Promise<DtoSkuView | undefined> {