cabloy 5.1.98 → 5.1.100

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 (141) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/hooks/contract-loop-gate.ts +151 -44
  3. package/CHANGELOG.md +28 -0
  4. package/CLAUDE.md +2 -0
  5. package/cabloy-docs/.vitepress/config.mjs +4 -0
  6. package/cabloy-docs/backend/controller-aop-guide.md +0 -1
  7. package/cabloy-docs/frontend/a-openapi-under-the-hood.md +1 -1
  8. package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +1 -1
  9. package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +1 -1
  10. package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +1 -1
  11. package/cabloy-docs/frontend/model-resource-owner-pattern.md +1 -1
  12. package/cabloy-docs/frontend/model-state-guide.md +3 -1
  13. package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +2 -2
  14. package/cabloy-docs/frontend/resource-list-page-deep-dive.md +1 -1
  15. package/cabloy-docs/frontend/rest-resource-source-reading-map.md +2 -2
  16. package/cabloy-docs/frontend/rest-resource-under-the-hood.md +4 -4
  17. package/cabloy-docs/frontend/use-state-data-best-practices.md +384 -0
  18. package/package.json +1 -1
  19. package/scripts/upgrade.ts +2 -0
  20. package/vona/packages-cli/cli/package.json +1 -1
  21. package/vona/packages-cli/cli-set-api/package.json +1 -1
  22. package/vona/packages-vona/vona/package.json +1 -1
  23. package/vona/packages-vona/vona-core/package.json +1 -1
  24. package/vona/packages-vona/vona-core/src/lib/bean/beanBase.ts +9 -9
  25. package/vona/packages-vona/vona-mock/package.json +1 -1
  26. package/vona/pnpm-lock.yaml +56 -56
  27. package/vona/pnpm-workspace.yaml +1 -1
  28. package/vona/src/suite/a-training/modules/training-record/src/bean/fileScene.dossierFile.ts +22 -0
  29. package/vona/src/suite/a-training/modules/training-record/src/bean/meta.version.ts +1 -0
  30. package/vona/src/suite/a-training/modules/training-record/src/config/locale/en-us.ts +1 -0
  31. package/vona/src/suite/a-training/modules/training-record/src/config/locale/zh-cn.ts +1 -0
  32. package/vona/src/suite/a-training/modules/training-record/src/dto/recordDossierFileView.ts +47 -0
  33. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +13 -0
  34. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +13 -0
  35. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +16 -5
  36. package/vona/src/suite/a-training/modules/training-record/src/index.ts +2 -0
  37. package/vona/src/suite/a-training/modules/training-record/src/lib/index.ts +1 -0
  38. package/vona/src/suite/a-training/modules/training-record/src/lib/resolveDossierFiles.ts +34 -0
  39. package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +209 -123
  40. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +1 -0
  41. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +1 -0
  42. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +18 -1
  43. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +0 -2
  44. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +1 -0
  45. package/vona/src/suite-vendor/a-file/modules/a-file/package.json +5 -3
  46. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileUploadPolicy.ts +28 -0
  47. package/vona/src/suite-vendor/a-file/modules/a-file/src/controller/file.ts +8 -0
  48. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyRequest.ts +15 -0
  49. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyResponse.ts +30 -0
  50. package/vona/src/suite-vendor/a-file/package.json +2 -2
  51. package/vona/src/suite-vendor/a-image/modules/a-image/package.json +1 -1
  52. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +27 -0
  53. package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +8 -0
  54. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyRequest.ts +15 -0
  55. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyResponse.ts +27 -0
  56. package/vona/src/suite-vendor/a-image/modules/image-native/package.json +1 -1
  57. package/vona/src/suite-vendor/a-image/modules/image-native/src/controller/image.ts +1 -1
  58. package/vona/src/suite-vendor/a-image/package.json +1 -1
  59. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  60. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  61. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/.metadata/index.ts +24 -9
  62. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +87 -73
  63. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permissionActionByRoles.ts +27 -0
  64. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permissionUser.ts +20 -0
  65. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  66. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/service/startup.ts +4 -3
  67. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +1 -1
  68. package/vona/src/suite-vendor/a-vona/modules/a-upload/src/bean/interceptor.upload.ts +5 -1
  69. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  70. package/vona/src/suite-vendor/a-vona/modules/a-user/src/.metadata/index.ts +0 -13
  71. package/vona/src/suite-vendor/a-vona/modules/a-user/src/lib/passport.ts +0 -7
  72. package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +1 -1
  73. package/vona/src/suite-vendor/a-vona/modules/a-version/src/bean/meta.version.ts +2 -24
  74. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  75. package/zova/packages-utils/zova-jsx/package.json +2 -2
  76. package/zova/packages-zova/zova/package.json +3 -3
  77. package/zova/packages-zova/zova-core/package.json +1 -1
  78. package/zova/packages-zova/zova-core/src/bean/beanBase.ts +9 -13
  79. package/zova/pnpm-lock.yaml +24 -9
  80. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/controller.tsx +2 -2
  81. package/zova/src/suite/a-demo/modules/demo-todo/src/page/todo/controller.tsx +2 -2
  82. package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/controller.tsx +2 -2
  83. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +2 -2
  84. package/zova/src/suite/a-home/modules/home-login/src/page/login/controller.tsx +2 -2
  85. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +5 -1
  86. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockTable/controller.tsx +20 -15
  87. package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +6 -1
  88. package/zova/src/suite/cabloy-basic/modules/basic-file/cli/openapi.config.ts +9 -0
  89. package/zova/src/suite/cabloy-basic/modules/basic-file/package.json +58 -0
  90. package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/component/formFieldFile.ts +31 -0
  91. package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/index.ts +222 -0
  92. package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/locales.ts +7 -0
  93. package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/this.ts +2 -0
  94. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/file.ts +121 -0
  95. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/baseURL.ts +5 -0
  96. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/index.ts +3 -0
  97. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/schemas.ts +306 -0
  98. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/types.ts +5718 -0
  99. package/zova/src/suite/cabloy-basic/modules/basic-file/src/apiSchema/file.ts +40 -0
  100. package/zova/src/suite/cabloy-basic/modules/basic-file/src/bean/tableCell.file.tsx +187 -0
  101. package/zova/src/suite/cabloy-basic/modules/basic-file/src/component/formFieldFile/controller.tsx +534 -0
  102. package/zova/src/suite/cabloy-basic/modules/basic-file/src/config/locale/en-us.ts +15 -0
  103. package/zova/src/suite/cabloy-basic/modules/basic-file/src/config/locale/zh-cn.ts +15 -0
  104. package/zova/src/suite/cabloy-basic/modules/basic-file/src/index.ts +4 -0
  105. package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/file.ts +74 -0
  106. package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/index.ts +1 -0
  107. package/zova/src/suite/cabloy-basic/modules/basic-file/src/model/file.ts +23 -0
  108. package/zova/src/suite/cabloy-basic/modules/basic-file/src/types/file.ts +12 -0
  109. package/zova/src/suite/cabloy-basic/modules/basic-file/src/types/index.ts +1 -0
  110. package/zova/src/suite/cabloy-basic/modules/basic-file/tsconfig.build.json +13 -0
  111. package/zova/src/suite/cabloy-basic/modules/basic-file/tsconfig.json +5 -0
  112. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/index.ts +61 -0
  113. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/image.ts +38 -1
  114. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/imageNativeImage.ts +31 -0
  115. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/schemas.ts +52 -0
  116. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/types.ts +614 -1
  117. package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/image.ts +10 -0
  118. package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/imageNativeImage.ts +13 -0
  119. package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +126 -53
  120. package/zova/src/suite/cabloy-basic/modules/basic-image/src/model/image.ts +23 -0
  121. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +44 -4
  122. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx +17 -12
  123. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx +2 -2
  124. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/formFieldResourcePicker/controller.tsx +2 -2
  125. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/controller.tsx +7 -2
  126. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/render.tsx +34 -33
  127. package/zova/src/suite/cabloy-basic/package.json +1 -0
  128. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  129. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +5 -3
  130. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx +2 -2
  131. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx +2 -2
  132. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  133. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  134. package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/utils.ts +17 -17
  135. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  136. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +8 -3
  137. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  138. package/zova/src/suite-vendor/a-zova/package.json +4 -4
  139. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +0 -17
  140. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/guard.userName.ts +0 -35
  141. /package/vona/patches/{zova-core@5.1.76.patch → zova-core@5.1.77.patch} +0 -0
@@ -16,7 +16,7 @@ overrides:
16
16
  zod: npm:@cabloy/zod@4.3.8
17
17
 
18
18
  patchedDependencies:
19
- zova-core@5.1.76: 0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54
19
+ zova-core@5.1.77: 0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54
20
20
 
21
21
  importers:
22
22
 
@@ -501,11 +501,11 @@ importers:
501
501
  specifier: npm:@cabloy/zod@4.3.8
502
502
  version: '@cabloy/zod@4.3.8'
503
503
  zova:
504
- specifier: ^5.1.131
505
- version: 5.1.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
504
+ specifier: ^5.1.132
505
+ version: 5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
506
506
  zova-jsx:
507
- specifier: ^1.1.76
508
- version: 1.1.76(typescript@5.9.3)
507
+ specifier: ^1.1.77
508
+ version: 1.1.77(typescript@5.9.3)
509
509
  zova-module-a-api:
510
510
  specifier: ^5.1.21
511
511
  version: 5.1.21
@@ -528,11 +528,11 @@ importers:
528
528
  specifier: ^5.1.29
529
529
  version: 5.1.29
530
530
  zova-module-a-model:
531
- specifier: ^5.1.30
532
- version: 5.1.30(vue@3.5.39(typescript@5.9.3))
531
+ specifier: ^5.1.31
532
+ version: 5.1.31(vue@3.5.39(typescript@5.9.3))
533
533
  zova-module-a-openapi:
534
- specifier: ^5.1.42
535
- version: 5.1.42
534
+ specifier: ^5.1.43
535
+ version: 5.1.43
536
536
  zova-module-a-router:
537
537
  specifier: ^5.1.29
538
538
  version: 5.1.29
@@ -549,8 +549,8 @@ importers:
549
549
  specifier: ^5.1.37
550
550
  version: 5.1.37(vue@3.5.39(typescript@5.9.3))
551
551
  zova-module-rest-resource:
552
- specifier: ^5.1.40
553
- version: 5.1.40
552
+ specifier: ^5.1.41
553
+ version: 5.1.41
554
554
 
555
555
  .zova-rest/cabloy-basic-web:
556
556
  dependencies:
@@ -573,11 +573,11 @@ importers:
573
573
  specifier: npm:@cabloy/zod@4.3.8
574
574
  version: '@cabloy/zod@4.3.8'
575
575
  zova:
576
- specifier: ^5.1.131
577
- version: 5.1.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
576
+ specifier: ^5.1.132
577
+ version: 5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
578
578
  zova-jsx:
579
- specifier: ^1.1.76
580
- version: 1.1.76(typescript@5.9.3)
579
+ specifier: ^1.1.77
580
+ version: 1.1.77(typescript@5.9.3)
581
581
  zova-module-a-api:
582
582
  specifier: ^5.1.21
583
583
  version: 5.1.21
@@ -600,11 +600,11 @@ importers:
600
600
  specifier: ^5.1.29
601
601
  version: 5.1.29
602
602
  zova-module-a-model:
603
- specifier: ^5.1.30
604
- version: 5.1.30(vue@3.5.39(typescript@5.9.3))
603
+ specifier: ^5.1.31
604
+ version: 5.1.31(vue@3.5.39(typescript@5.9.3))
605
605
  zova-module-a-openapi:
606
- specifier: ^5.1.42
607
- version: 5.1.42
606
+ specifier: ^5.1.43
607
+ version: 5.1.43
608
608
  zova-module-a-router:
609
609
  specifier: ^5.1.29
610
610
  version: 5.1.29
@@ -621,8 +621,8 @@ importers:
621
621
  specifier: ^5.1.37
622
622
  version: 5.1.37(vue@3.5.39(typescript@5.9.3))
623
623
  zova-module-rest-resource:
624
- specifier: ^5.1.40
625
- version: 5.1.40
624
+ specifier: ^5.1.41
625
+ version: 5.1.41
626
626
 
627
627
  packages-cli/cabloy-cli:
628
628
  dependencies:
@@ -1517,13 +1517,13 @@ importers:
1517
1517
  src/suite-vendor/a-file:
1518
1518
  dependencies:
1519
1519
  vona-module-a-file:
1520
- specifier: ^5.0.1
1520
+ specifier: ^5.0.4
1521
1521
  version: link:modules/a-file
1522
1522
  vona-module-file-cloudflare:
1523
- specifier: ^5.0.1
1523
+ specifier: ^5.0.3
1524
1524
  version: link:modules/file-cloudflare
1525
1525
  vona-module-file-native:
1526
- specifier: ^5.0.1
1526
+ specifier: ^5.0.3
1527
1527
  version: link:modules/file-native
1528
1528
 
1529
1529
  src/suite-vendor/a-file/modules/a-file:
@@ -1625,7 +1625,7 @@ importers:
1625
1625
  src/suite-vendor/a-test:
1626
1626
  dependencies:
1627
1627
  vona-module-test-file:
1628
- specifier: ^5.0.1
1628
+ specifier: ^5.0.4
1629
1629
  version: link:modules/test-file
1630
1630
 
1631
1631
  src/suite-vendor/a-test/modules/test-auth:
@@ -7948,11 +7948,11 @@ packages:
7948
7948
  peerDependencies:
7949
7949
  zod: ^3.25.28 || ^4
7950
7950
 
7951
- zova-core@5.1.76:
7952
- resolution: {integrity: sha512-/GVKWYywNkBwBC59x44OAG6l9LMF5k6rAj6/OHVbwAsN9Xo67StNTxC8x8PfS2PeziHrawuHlMefm1xcOaiWzg==}
7951
+ zova-core@5.1.77:
7952
+ resolution: {integrity: sha512-PfB5yaHVZ8U8Fjeyju3m9OGe1PjXH26HTjkA9jvl+KK9l3t/lzdEVP4s03/4zEggvPz7pkwek1heLuMaQRmX/Q==}
7953
7953
 
7954
- zova-jsx@1.1.76:
7955
- resolution: {integrity: sha512-oi/Q7k112dI1StQx6gX2m2UBbesKDOriNwZIwYs2tzDJXGDi0Lfn4F6oKM6RBWDhyZAswTBo+qd+bohFldRDaA==}
7954
+ zova-jsx@1.1.77:
7955
+ resolution: {integrity: sha512-TnjesMVt7wSvwjP4XDOg9m2MacbL5xgMrdLtU9XhhPHm3gYuNV/hzr2vQ788k/z+WWQdHsqRvTy6Ngr/GDr6zg==}
7956
7956
 
7957
7957
  zova-module-a-api@5.1.21:
7958
7958
  resolution: {integrity: sha512-qjm/hfjC4/+7Ap/uzJfBzV0PwRlp2idEmEKwCZYxquaXq6QtJBbTWTznw1iukT4lkJZip2KFkjOvXTzdvZA2UA==}
@@ -7993,11 +7993,11 @@ packages:
7993
7993
  zova-module-a-meta@5.1.21:
7994
7994
  resolution: {integrity: sha512-7vsLOMw1UQEZ+8qbBaiz9t4n3N7AU1jxpaiSIIky7hBvKO9nuHq+e7FONpj9poa8WeHkYoflBg/8imKBy/IlNw==}
7995
7995
 
7996
- zova-module-a-model@5.1.30:
7997
- resolution: {integrity: sha512-DrOXf0ZPe0ZW/ZlXeBCmletEuxCD55MMs/1AHmGavXLridqNvbhkwhHpFHah+hM69+F2VeU05ToJc0PLjN5gmA==}
7996
+ zova-module-a-model@5.1.31:
7997
+ resolution: {integrity: sha512-/6MV5xSklEkain5t0vsZ37ImyIihutCu7ymytq5RFG0QbeKtbSAI/IB6TS2mfkjLkiy97SmDJbuiLGso7Cg/Gw==}
7998
7998
 
7999
- zova-module-a-openapi@5.1.42:
8000
- resolution: {integrity: sha512-pTyh+EWIxFoAj6cvKTudNd22yjhsHW71R20OcbKSOgmJ5vsOeL5gXdcT79GE+sME36myNdceCVnvIOeskuv4Uw==}
7999
+ zova-module-a-openapi@5.1.43:
8000
+ resolution: {integrity: sha512-xJKvSPl1AZnH7EpgEd9a3u3IEpJfnou19DKre/7TL1KdiTdfNThLrmmkdP1UNYlUHUgCczcGUwZDdMiE9gdxwA==}
8001
8001
 
8002
8002
  zova-module-a-router@5.1.29:
8003
8003
  resolution: {integrity: sha512-7vIXOf0aPUXvZAFC9hM1JQyNwmQAG+EtSbQ1et8+iP6roff8yUhhq50Dw8PFU5eb7hjk1TTxpUFhCTvev5JZqQ==}
@@ -8026,17 +8026,17 @@ packages:
8026
8026
  zova-module-a-zod@5.1.36:
8027
8027
  resolution: {integrity: sha512-4gEjxJBelVOA84aP2XWSNSmzQr+AYh14Ha5QCj9yZIpSnEajSgYLoyLw4dwiVcscuEw7xAAOOnWbZS9uXSpJzg==}
8028
8028
 
8029
- zova-module-a-zova@5.1.91:
8030
- resolution: {integrity: sha512-qQxAHgieRrEjxMGvlHzKB2MDm0ZQXgtyqkSZZWV3RqCl5eLnm2jDWszGqP976uNKKC4bfS6FdgLAo2ltEgRadA==}
8029
+ zova-module-a-zova@5.1.92:
8030
+ resolution: {integrity: sha512-RxHSKnBDMuBKwx0cJoPOIvq/DV6Xhji2yZ/lBgJTMrWOYVsHux/PbDc+vlAU+Aie2K0RiZ2ytR3mPBpMxpmexg==}
8031
8031
 
8032
- zova-module-rest-resource@5.1.40:
8033
- resolution: {integrity: sha512-rMqZaXSK6nJ4LW2O1yO/jZqxI7joCiWylzjutMTKpx7EfNmtK1t1nVoWFd+gCTxqgbbv9uXh0vfFaSFA7GKYFg==}
8032
+ zova-module-rest-resource@5.1.41:
8033
+ resolution: {integrity: sha512-7Y8rLmHdw0pynlWqsyHPWuCWFLwr/0HsNvfef64cPw91LRujf/7OlulVWqH8ZoFNioZZUpfumB+t/+mICoYfFg==}
8034
8034
 
8035
- zova-suite-a-zova@5.1.130:
8036
- resolution: {integrity: sha512-1Eu1uMrr95YAS1Lm5JXBIGcegv58efACxIIkhw0MvfCfnxlQIs2Ox/igesvdT1jROdCLqa4WG7C5Dfx16I/GXw==}
8035
+ zova-suite-a-zova@5.1.131:
8036
+ resolution: {integrity: sha512-NRPt3ahLwHg+rLuA2VXRbEmrg/bTdgwdQmU9C8nj9R0+E1f0ehbbsUWJFQFN6hJNco5+rDDSDfBlvejf4z6L1w==}
8037
8037
 
8038
- zova@5.1.131:
8039
- resolution: {integrity: sha512-pKgkRd7/pdZmsF1/7PeTdpDRTg7ZKgk/pSMvFdt+d28+lYj5ZDxYez/r17lq8qs6VVTrBo1GC8R4RXYEHMS4Vw==}
8038
+ zova@5.1.132:
8039
+ resolution: {integrity: sha512-lQK1VRnwthDx0qayS7kdElyfAmvPEhlt6sk/2jK5mTbqojsjuDNkrEa9Ck2Q78fag800U6pDwV83o6CRbSUTeA==}
8040
8040
 
8041
8041
  zwitch@1.0.5:
8042
8042
  resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
@@ -13855,7 +13855,7 @@ snapshots:
13855
13855
  dependencies:
13856
13856
  zod: '@cabloy/zod@4.3.8'
13857
13857
 
13858
- zova-core@5.1.76(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3):
13858
+ zova-core@5.1.77(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3):
13859
13859
  dependencies:
13860
13860
  '@cabloy/compose': link:packages-utils/compose
13861
13861
  '@cabloy/extend': link:packages-utils/extend
@@ -13884,14 +13884,14 @@ snapshots:
13884
13884
  transitivePeerDependencies:
13885
13885
  - typescript
13886
13886
 
13887
- zova-jsx@1.1.76(typescript@5.9.3):
13887
+ zova-jsx@1.1.77(typescript@5.9.3):
13888
13888
  dependencies:
13889
13889
  '@cabloy/compose': link:packages-utils/compose
13890
13890
  '@cabloy/utils': link:packages-utils/utils
13891
13891
  '@cabloy/word-utils': 2.1.14
13892
13892
  typestyle: 2.4.0
13893
13893
  vue: 3.5.39(typescript@5.9.3)
13894
- zova-core: 5.1.76(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3)
13894
+ zova-core: 5.1.77(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3)
13895
13895
  transitivePeerDependencies:
13896
13896
  - typescript
13897
13897
 
@@ -13935,7 +13935,7 @@ snapshots:
13935
13935
 
13936
13936
  zova-module-a-meta@5.1.21: {}
13937
13937
 
13938
- zova-module-a-model@5.1.30(vue@3.5.39(typescript@5.9.3)):
13938
+ zova-module-a-model@5.1.31(vue@3.5.39(typescript@5.9.3)):
13939
13939
  dependencies:
13940
13940
  '@tanstack/query-core': 5.101.2
13941
13941
  '@tanstack/query-persist-client-core': 5.101.2
@@ -13947,7 +13947,7 @@ snapshots:
13947
13947
  - '@vue/composition-api'
13948
13948
  - vue
13949
13949
 
13950
- zova-module-a-openapi@5.1.42:
13950
+ zova-module-a-openapi@5.1.43:
13951
13951
  dependencies:
13952
13952
  '@cabloy/json-schema-to-zod': 2.6.5
13953
13953
  openapi3-ts: 4.6.0
@@ -13992,7 +13992,7 @@ snapshots:
13992
13992
  '@cabloy/zod-query': link:packages-utils/zod-query
13993
13993
  zod: '@cabloy/zod@4.3.8'
13994
13994
 
13995
- zova-module-a-zova@5.1.91(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
13995
+ zova-module-a-zova@5.1.92(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
13996
13996
  dependencies:
13997
13997
  '@cabloy/compose': link:packages-utils/compose
13998
13998
  '@cabloy/deps': link:packages-utils/deps
@@ -14003,14 +14003,14 @@ snapshots:
14003
14003
  '@cabloy/word-utils': 2.1.14
14004
14004
  defu: 6.1.7
14005
14005
  luxon: 3.7.2
14006
- zova-jsx: 1.1.76(typescript@5.9.3)
14006
+ zova-jsx: 1.1.77(typescript@5.9.3)
14007
14007
  transitivePeerDependencies:
14008
14008
  - typescript
14009
14009
  - vue
14010
14010
 
14011
- zova-module-rest-resource@5.1.40: {}
14011
+ zova-module-rest-resource@5.1.41: {}
14012
14012
 
14013
- zova-suite-a-zova@5.1.130(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14013
+ zova-suite-a-zova@5.1.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14014
14014
  dependencies:
14015
14015
  zova-module-a-api: 5.1.21
14016
14016
  zova-module-a-app: 5.1.24
@@ -14025,8 +14025,8 @@ snapshots:
14025
14025
  zova-module-a-interceptor: 5.1.29
14026
14026
  zova-module-a-logger: 5.1.26
14027
14027
  zova-module-a-meta: 5.1.21
14028
- zova-module-a-model: 5.1.30(vue@3.5.39(typescript@5.9.3))
14029
- zova-module-a-openapi: 5.1.42
14028
+ zova-module-a-model: 5.1.31(vue@3.5.39(typescript@5.9.3))
14029
+ zova-module-a-openapi: 5.1.43
14030
14030
  zova-module-a-router: 5.1.29
14031
14031
  zova-module-a-routerstack: 5.1.26
14032
14032
  zova-module-a-routertabs: 5.1.32
@@ -14036,7 +14036,7 @@ snapshots:
14036
14036
  zova-module-a-style: 5.1.32
14037
14037
  zova-module-a-table: 5.1.37(vue@3.5.39(typescript@5.9.3))
14038
14038
  zova-module-a-zod: 5.1.36
14039
- zova-module-a-zova: 5.1.91(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14039
+ zova-module-a-zova: 5.1.92(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14040
14040
  transitivePeerDependencies:
14041
14041
  - '@vue/composition-api'
14042
14042
  - debug
@@ -14044,10 +14044,10 @@ snapshots:
14044
14044
  - typescript
14045
14045
  - vue
14046
14046
 
14047
- zova@5.1.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14047
+ zova@5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14048
14048
  dependencies:
14049
- zova-core: 5.1.76(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3)
14050
- zova-suite-a-zova: 5.1.130(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14049
+ zova-core: 5.1.77(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3)
14050
+ zova-suite-a-zova: 5.1.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14051
14051
  transitivePeerDependencies:
14052
14052
  - '@vue/composition-api'
14053
14053
  - debug
@@ -53,4 +53,4 @@ allowBuilds:
53
53
  vue-demi: true
54
54
 
55
55
  patchedDependencies:
56
- zova-core@5.1.76: patches/zova-core@5.1.76.patch
56
+ zova-core@5.1.77: patches/zova-core@5.1.77.patch
@@ -0,0 +1,22 @@
1
+ import { BeanBase } from 'vona';
2
+ import { FileScene } from 'vona-module-a-file';
3
+
4
+ @FileScene({
5
+ upload: {
6
+ maxSize: 20 * 1024 * 1024,
7
+ mimeTypes: [
8
+ 'application/pdf',
9
+ 'application/msword',
10
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
11
+ 'application/vnd.ms-excel',
12
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
13
+ 'application/zip',
14
+ 'application/x-zip-compressed',
15
+ 'text/plain',
16
+ ],
17
+ extensions: ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.zip', '.txt'],
18
+ multiple: true,
19
+ public: false,
20
+ },
21
+ })
22
+ export class FileSceneDossierFile extends BeanBase {}
@@ -18,6 +18,7 @@ export class MetaVersion extends BeanBase implements IMetaVersionUpdate {
18
18
  table.decimal(entityRecord.averageScore, 8, 2).comment(entityRecord.$comment.averageScore);
19
19
  table.dateTime(entityRecord.trainingTime).comment(entityRecord.$comment.trainingTime);
20
20
  table.json(entityRecord.sceneImageIds).comment(entityRecord.$comment.sceneImageIds);
21
+ table.json(entityRecord.dossierFileIds).comment(entityRecord.$comment.dossierFileIds);
21
22
  table.string(entityRecord.description, 255).comment(entityRecord.$comment.description);
22
23
  });
23
24
  }
@@ -9,6 +9,7 @@ export default {
9
9
  TrainingRecordName: 'Training Record Name',
10
10
  TrainingTime: 'Training Time',
11
11
  ScenePhotos: 'Scene Photos',
12
+ DossierFiles: 'Dossier Files',
12
13
  AddTrainingRecord: 'Add Student Training Record',
13
14
  EditTrainingRecord: 'Edit Student Training Record',
14
15
  ViewTrainingRecord: 'View Student Training Record',
@@ -9,6 +9,7 @@ export default {
9
9
  TrainingRecordName: '培训记录名称',
10
10
  TrainingTime: '培训时间',
11
11
  ScenePhotos: '现场照片',
12
+ DossierFiles: '培训档案附件',
12
13
  AddTrainingRecord: '添加学生培训记录',
13
14
  EditTrainingRecord: '编辑学生培训记录',
14
15
  ViewTrainingRecord: '查看学生培训记录',
@@ -0,0 +1,47 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
3
+
4
+ import { Api, v } from 'vona-module-a-openapiutils';
5
+ import { Dto } from 'vona-module-a-web';
6
+ import z from 'zod';
7
+
8
+ export interface IDtoOptionsRecordDossierFileView extends IDecoratorDtoOptions {}
9
+
10
+ @Dto<IDtoOptionsRecordDossierFileView>()
11
+ export class DtoRecordDossierFileView {
12
+ @Api.field(v.tableIdentity())
13
+ id: TableIdentity;
14
+
15
+ @Api.field(z.string())
16
+ provider: string;
17
+
18
+ @Api.field(z.string())
19
+ clientName: string;
20
+
21
+ @Api.field(v.optional(), z.string())
22
+ fileScene?: string;
23
+
24
+ @Api.field(v.optional())
25
+ filename?: string;
26
+
27
+ @Api.field(v.optional())
28
+ contentType?: string;
29
+
30
+ @Api.field(v.optional())
31
+ size?: number;
32
+
33
+ @Api.field(v.optional())
34
+ public?: boolean;
35
+
36
+ @Api.field(v.optional())
37
+ uploadedAt?: Date;
38
+
39
+ @Api.field(v.optional(), z.record(z.string(), z.unknown()))
40
+ meta?: Record<string, unknown>;
41
+
42
+ @Api.field(z.string())
43
+ downloadUrl: string;
44
+
45
+ @Api.field(v.default(true))
46
+ signed: boolean;
47
+ }
@@ -7,7 +7,9 @@ import { Dto } from 'vona-module-a-web';
7
7
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
8
8
 
9
9
  import { $locale } from '../.metadata/locales.ts';
10
+ import { resolveDossierFiles } from '../lib/resolveDossierFiles.ts';
10
11
  import { ModelRecord } from '../model/record.ts';
12
+ import { DtoRecordDossierFileView } from './recordDossierFileView.ts';
11
13
 
12
14
  export interface IDtoOptionsRecordSelectResItem extends IDecoratorDtoOptions {}
13
15
 
@@ -37,6 +39,17 @@ export class DtoRecordSelectResItem extends $Dto.get(() => ModelRecord) {
37
39
  )
38
40
  sceneImages?: DtoImageView[];
39
41
 
42
+ @Api.field(
43
+ v.title($locale('DossierFiles')),
44
+ ZovaRender.visible(false),
45
+ v.optional(),
46
+ v.serializerTransform('a-serialization:custom', {
47
+ custom: resolveDossierFiles,
48
+ }),
49
+ v.array(DtoRecordDossierFileView),
50
+ )
51
+ dossierFiles?: DtoRecordDossierFileView[];
52
+
40
53
  @Api.field(
41
54
  v.title($locale('Operations')),
42
55
  ZovaRender.order(1, 'max'),
@@ -7,9 +7,11 @@ import { Dto } from 'vona-module-a-web';
7
7
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
8
8
 
9
9
  import { $locale } from '../.metadata/locales.ts';
10
+ import { resolveDossierFiles } from '../lib/resolveDossierFiles.ts';
10
11
  import { ModelRecord } from '../model/record.ts';
11
12
  import { DtoDetailRecordSubjectResItem } from './detailRecordSubjectResItem.tsx';
12
13
  import { DtoDetailRecordSubjectView } from './detailRecordSubjectView.tsx';
14
+ import { DtoRecordDossierFileView } from './recordDossierFileView.ts';
13
15
 
14
16
  export interface IDtoOptionsRecordView extends IDecoratorDtoOptions {}
15
17
 
@@ -49,6 +51,17 @@ export class DtoRecordView extends $Dto.get(() => ModelRecord, {
49
51
  )
50
52
  sceneImages?: DtoImageView[];
51
53
 
54
+ @Api.field(
55
+ v.title($locale('DossierFiles')),
56
+ ZovaRender.visible(false),
57
+ v.optional(),
58
+ v.serializerTransform('a-serialization:custom', {
59
+ custom: resolveDossierFiles,
60
+ }),
61
+ v.array(DtoRecordDossierFileView),
62
+ )
63
+ dossierFiles?: DtoRecordDossierFileView[];
64
+
52
65
  @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordSubjectResItem))
53
66
  _trainingRecordSubjects?: DtoDetailRecordSubjectResItem[];
54
67
  }
@@ -89,11 +89,8 @@ export class EntityRecord extends EntityBase {
89
89
  ZovaRender.order(7),
90
90
  ZovaRender.field('basic-image:formFieldImage', {
91
91
  imageScene: 'training-record:sceneImage',
92
- multiple: true,
93
- maxCount: 9,
92
+ maxCount: 3,
94
93
  relationName: 'sceneImages',
95
- accept: ['image/png', 'image/jpeg', 'image/webp'],
96
- maxSize: 2 * 1024 * 1024,
97
94
  enableCrop: false,
98
95
  resize: {
99
96
  width: 1280,
@@ -108,6 +105,20 @@ export class EntityRecord extends EntityBase {
108
105
  )
109
106
  sceneImageIds?: TableIdentity[];
110
107
 
111
- @Api.field(v.title($locale('Description')), v.optional(), ZovaRender.order(8))
108
+ @Api.field(
109
+ v.title($locale('DossierFiles')),
110
+ v.optional(),
111
+ ZovaRender.order(8),
112
+ ZovaRender.field('basic-file:formFieldFile', {
113
+ fileScene: 'training-record:dossierFile',
114
+ relationName: 'dossierFiles',
115
+ maxCount: 3,
116
+ }),
117
+ ZovaRender.cell('basic-file:file', { relationName: 'dossierFiles' }),
118
+ v.array(v.tableIdentity()),
119
+ )
120
+ dossierFileIds?: TableIdentity[];
121
+
122
+ @Api.field(v.title($locale('Description')), v.optional(), ZovaRender.order(9))
112
123
  description?: string;
113
124
  }
@@ -1,4 +1,6 @@
1
+ export * from './bean/fileScene.dossierFile.ts';
1
2
  export * from './bean/imageScene.sceneImage.ts';
3
+ export * from './dto/recordDossierFileView.ts';
2
4
  export * from './lib/index.ts';
3
5
  export * from './.metadata/locales.ts';
4
6
  export * from './.metadata/index.ts';
@@ -1,2 +1,3 @@
1
1
  export * from './onEffectForAverageScore.tsx';
2
2
  export * from './onEffectForTrainingRecordSubjects.tsx';
3
+ export * from './resolveDossierFiles.ts';
@@ -0,0 +1,34 @@
1
+ import type { TableIdentity } from 'table-identity';
2
+ import type { VonaContext } from 'vona';
3
+
4
+ import type { DtoRecordDossierFileView } from '../dto/recordDossierFileView.ts';
5
+
6
+ export async function resolveDossierFiles(
7
+ this: VonaContext,
8
+ _value: unknown,
9
+ data: { dossierFileIds?: TableIdentity[] },
10
+ ): Promise<DtoRecordDossierFileView[]> {
11
+ const dossierFileIds = data.dossierFileIds;
12
+ if (!dossierFileIds?.length) return [];
13
+ const items: Array<DtoRecordDossierFileView | undefined> = await Promise.all(
14
+ dossierFileIds.map(async dossierFileId => {
15
+ const file = await this.bean.file.get(dossierFileId);
16
+ if (!file || file.fileScene !== 'training-record:dossierFile') return undefined;
17
+ return {
18
+ id: file.id,
19
+ provider: String(file.provider),
20
+ clientName: file.clientName,
21
+ fileScene: file.fileScene ? String(file.fileScene) : undefined,
22
+ filename: file.filename,
23
+ contentType: file.contentType,
24
+ size: file.size,
25
+ public: file.public,
26
+ uploadedAt: file.uploadedAt,
27
+ meta: file.meta as Record<string, unknown> | undefined,
28
+ downloadUrl: await this.bean.file.getDownloadUrl(file.id),
29
+ signed: !file.public,
30
+ } satisfies DtoRecordDossierFileView;
31
+ }),
32
+ );
33
+ return items.filter((item): item is DtoRecordDossierFileView => !!item);
34
+ }