cloud-web-corejs 1.0.276 → 1.0.277

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 (305) hide show
  1. package/package.json +28 -24
  2. package/src/App.vue +73 -71
  3. package/src/api/user.js +21 -0
  4. package/src/components/baseArea/index.vue +82 -27
  5. package/src/components/baseTabs/mixins.js +5 -1
  6. package/src/components/luckysheet/dialog.vue +1 -1
  7. package/src/components/micro-view-host/contract.js +66 -0
  8. package/src/components/micro-view-host/index.vue +148 -0
  9. package/src/components/table/tableForm.vue +16 -5
  10. package/src/components/table/tableFormMixin.js +35 -7
  11. package/src/components/vb-tabs/x-tabs.vue +167 -143
  12. package/src/components/wf/content.vue +14 -0
  13. package/src/components/wf/content2.vue +4 -2
  14. package/src/components/wf/wf.js +74 -23
  15. package/src/components/wf/wfActionDropdown.vue +85 -0
  16. package/src/components/wf/wfActionItems.js +136 -0
  17. package/src/components/wf/wfAutoConfirm.js +55 -0
  18. package/src/components/wf/wfButtonName.js +60 -0
  19. package/src/components/wf/wfUserRange.js +53 -0
  20. package/src/components/wf/wfUtil.js +373 -295
  21. package/src/components/xform/XFormTabContainer//346/226/260/345/242/236/351/241/265/347/255/276/346/250/241/345/274/217-/346/234/200/347/273/210/345/256/236/347/216/260.md +195 -0
  22. package/src/components/xform/docs/2026-07 table/344/270/216excelExport/344/277/256/345/244/215/345/217/212/345/257/274/345/207/272/344/274/230/345/214/226.md" +57 -0
  23. package/src/components/xform/docs/2026-07 /346/216/222/346/237/245/344/277/256/345/244/215/350/256/260/345/275/225.md" +73 -0
  24. package/src/components/xform/docs/autocomplete /350/207/252/345/212/250/345/256/214/346/210/220/347/273/204/344/273/266/350/257/264/346/230/216.md" +126 -0
  25. package/src/components/xform/docs//345/257/271/346/257/224/345/212/237/350/203/275/350/220/275/345/234/260/346/226/271/346/241/210.md +986 -0
  26. package/src/components/xform/docs//346/225/260/346/215/256/350/241/250/346/240/274/345/212/250/346/200/201/345/210/227 JSON /350/257/264/346/230/216.md" +657 -0
  27. package/src/components/xform/docs//346/240/221/350/241/250rowField/346/224/266/346/225/233-/350/220/275/345/234/260/346/226/207/346/241/243.md +1427 -0
  28. package/src/components/xform/form-designer/designer.js +2085 -2025
  29. package/src/components/xform/form-designer/form-widget/container-widget/containerMixin.js +9 -11
  30. package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +76 -75
  31. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +10 -4
  32. package/src/components/xform/form-designer/form-widget/container-widget/detail-plain-widget.vue +76 -0
  33. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +59 -5
  34. package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +38 -17
  35. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +138 -13
  36. package/src/components/xform/form-designer/form-widget/dialog/formFieldDialog.vue +1 -1
  37. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +1774 -1772
  38. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +2 -3
  39. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +1 -1
  40. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +66 -53
  41. package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +287 -214
  42. package/src/components/xform/form-designer/form-widget/field-widget/button-widget.vue +76 -66
  43. package/src/components/xform/form-designer/form-widget/field-widget/cascader-widget.vue +208 -124
  44. package/src/components/xform/form-designer/form-widget/field-widget/census-widget.vue +3 -9
  45. package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +11 -2
  46. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +7 -6
  47. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +43 -19
  48. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +680 -372
  49. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +879 -763
  50. package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +17 -2
  51. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-bar-mixin.js +3 -9
  52. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-category-mixin.js +3 -9
  53. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-pie-mixin.js +3 -9
  54. package/src/components/xform/form-designer/form-widget/field-widget/mixins/relative-default-mixin.js +107 -0
  55. package/src/components/xform/form-designer/form-widget/field-widget/mixins/relativeDateUtil.js +321 -0
  56. package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -0
  57. package/src/components/xform/form-designer/form-widget/field-widget/mixins/vabsearch-mixin.js +13 -0
  58. package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +13 -8
  59. package/src/components/xform/form-designer/form-widget/field-widget/project-tag-widget.vue +4 -9
  60. package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +3 -0
  61. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +120 -120
  62. package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +4 -0
  63. package/src/components/xform/form-designer/form-widget/field-widget/status-widget.vue +11 -0
  64. package/src/components/xform/form-designer/form-widget/field-widget/switch-widget.vue +9 -1
  65. package/src/components/xform/form-designer/form-widget/field-widget/tempStorage-widget.vue +1 -1
  66. package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +7 -3
  67. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +4 -2
  68. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +36 -5
  69. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +338 -374
  70. package/src/components/xform/form-designer/form-widget/index.vue +6 -1
  71. package/src/components/xform/form-designer/form-widget/indexMixin.js +29 -25
  72. package/src/components/xform/form-designer/index.vue +194 -191
  73. package/src/components/xform/form-designer/indexMixin.js +860 -847
  74. package/src/components/xform/form-designer/setting-panel/dataSource-setting.vue +397 -397
  75. package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +602 -601
  76. package/src/components/xform/form-designer/setting-panel/form-setting.vue +1790 -1483
  77. package/src/components/xform/form-designer/setting-panel/index.vue +2 -7
  78. package/src/components/xform/form-designer/setting-panel/indexMixin.js +370 -335
  79. package/src/components/xform/form-designer/setting-panel/option-items-setting.vue +585 -544
  80. package/src/components/xform/form-designer/setting-panel/property-editor/a-link-editor.vue +1 -1
  81. package/src/components/xform/form-designer/setting-panel/property-editor/a-text-editor.vue +1 -1
  82. package/src/components/xform/form-designer/setting-panel/property-editor/alignType-editor.vue +1 -1
  83. package/src/components/xform/form-designer/setting-panel/property-editor/buttonIcon-editor.vue +14 -15
  84. package/src/components/xform/form-designer/setting-panel/property-editor/censusClass-editor.vue +1 -1
  85. package/src/components/xform/form-designer/setting-panel/property-editor/colorClass-editor.vue +1 -1
  86. package/src/components/xform/form-designer/setting-panel/property-editor/commonAttributeEnabled-editor.vue +3 -3
  87. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/columnRenderDialog.vue +124 -125
  88. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +1151 -957
  89. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +96 -74
  90. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail-plain/detail-plain-editor.vue +75 -0
  91. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/colHeight-editor.vue +1 -1
  92. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +14 -13
  93. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-height-editor.vue +1 -1
  94. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-offset-editor.vue +1 -1
  95. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-pull-editor.vue +1 -1
  96. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-push-editor.vue +1 -1
  97. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-span-editor.vue +4 -4
  98. package/src/components/xform/form-designer/setting-panel/property-editor/container-h5-card/h5-card-editor.vue +124 -124
  99. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +26 -31
  100. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/height-editor.vue +1 -1
  101. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/width-editor.vue +1 -1
  102. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-customClass-editor.vue +119 -119
  103. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tabClass-editor.vue +45 -45
  104. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +340 -342
  105. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellHeight-editor.vue +1 -1
  106. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellWidth-editor.vue +1 -1
  107. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree/tree-customClass-editor.vue +2 -2
  108. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree-pane/tree-pane-editor.vue +1 -1
  109. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/cancelButtonLabel-editor.vue +1 -1
  110. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/okButtonLabel-editor.vue +1 -1
  111. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/title-editor.vue +1 -1
  112. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/width-editor.vue +1 -1
  113. package/src/components/xform/form-designer/setting-panel/property-editor/containerClass-editor.vue +1 -1
  114. package/src/components/xform/form-designer/setting-panel/property-editor/customClass-editor.vue +1 -1
  115. package/src/components/xform/form-designer/setting-panel/property-editor/defaultValue-editor.vue +1 -1
  116. package/src/components/xform/form-designer/setting-panel/property-editor/descriptionsItems-editor.vue +4 -4
  117. package/src/components/xform/form-designer/setting-panel/property-editor/downloadButtonFlag-editor.vue +3 -3
  118. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +6 -2
  119. package/src/components/xform/form-designer/setting-panel/property-editor/dsName-editor.vue +1 -1
  120. package/src/components/xform/form-designer/setting-panel/property-editor/echartHeight-editor.vue +1 -1
  121. package/src/components/xform/form-designer/setting-panel/property-editor/endPlaceholder-editor.vue +1 -1
  122. package/src/components/xform/form-designer/setting-panel/property-editor/field-accessUrl/accessUrl-editor.vue +2 -2
  123. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaDataType-editor.vue +1 -1
  124. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaMinLevel-editor.vue +50 -50
  125. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaName-editor.vue +1 -1
  126. package/src/components/xform/form-designer/setting-panel/property-editor/field-autocomplete/autocomplete-vabSearchName-editor.vue +7 -7
  127. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/addTableData-event-editor.vue +84 -85
  128. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/button-type-editor.vue +1 -1
  129. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/clickBindActions.js +262 -0
  130. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/clickBindEvent-editor.vue +97 -88
  131. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/form-host-event-editor.vue +188 -0
  132. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/icon-editor.vue +14 -15
  133. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +27 -10
  134. package/src/components/xform/form-designer/setting-panel/property-editor/field-cascader/checkStrictly-editor.vue +11 -13
  135. package/src/components/xform/form-designer/setting-panel/property-editor/field-common/keyName-editor.vue +74 -67
  136. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-dateLimit-editor.vue +27 -5
  137. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +35 -18
  138. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-format-editor.vue +1 -1
  139. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-type-editor.vue +1 -1
  140. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-valueFormat-editor.vue +1 -1
  141. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultTime-editor.vue +1 -1
  142. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +35 -18
  143. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-format-editor.vue +1 -1
  144. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-type-editor.vue +1 -1
  145. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-valueFormat-editor.vue +1 -1
  146. package/src/components/xform/form-designer/setting-panel/property-editor/field-divider/contentPosition-editor.vue +1 -1
  147. package/src/components/xform/form-designer/setting-panel/property-editor/field-dropdown-menu/dropdown-menu-editor.vue +59 -59
  148. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-bar-editor.vue +11 -11
  149. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-category-editor.vue +10 -10
  150. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-pie-editor.vue +12 -12
  151. package/src/components/xform/form-designer/setting-panel/property-editor/field-file-upload/file-upload-fileTypes-editor.vue +44 -44
  152. package/src/components/xform/form-designer/setting-panel/property-editor/field-html-text/htmlContent-editor.vue +29 -29
  153. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +6 -6
  154. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +4 -4
  155. package/src/components/xform/form-designer/setting-panel/property-editor/field-number/controlsPosition-editor.vue +1 -1
  156. package/src/components/xform/form-designer/setting-panel/property-editor/field-picture-upload/picture-upload-fileTypes-editor.vue +44 -44
  157. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-button-editor.vue +115 -115
  158. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-detail-button-editor.vue +115 -115
  159. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/highThreshold-editor.vue +1 -1
  160. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/lowThreshold-editor.vue +1 -1
  161. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-defaultValue-editor.vue +1 -1
  162. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-max-editor.vue +1 -1
  163. package/src/components/xform/form-designer/setting-panel/property-editor/field-script/script-editor.vue +4 -4
  164. package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +4 -4
  165. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/fontSize-editor.vue +1 -1
  166. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/textContent-editor.vue +1 -1
  167. package/src/components/xform/form-designer/setting-panel/property-editor/field-status/field-status-editor.vue +3 -3
  168. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/activeText-editor.vue +1 -1
  169. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/inactiveText-editor.vue +1 -1
  170. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/switchWidth-editor.vue +1 -1
  171. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-button-editor.vue +2 -2
  172. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +74 -74
  173. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +3 -3
  174. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +34 -18
  175. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-format-editor.vue +1 -1
  176. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-timeLimit-editor.vue +53 -0
  177. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +35 -18
  178. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-format-editor.vue +1 -1
  179. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchField-editor.vue +2 -2
  180. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchName-editor.vue +2 -2
  181. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload/field-vabUpload-editor.vue +1 -1
  182. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload2/field-vabUpload2-editor.vue +1 -1
  183. package/src/components/xform/form-designer/setting-panel/property-editor/field-vue-page/vue-page-editor.vue +2 -2
  184. package/src/components/xform/form-designer/setting-panel/property-editor/fileMaxSize-editor.vue +1 -1
  185. package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +176 -176
  186. package/src/components/xform/form-designer/setting-panel/property-editor/fixedQuery-editor.vue +39 -0
  187. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +41 -6
  188. package/src/components/xform/form-designer/setting-panel/property-editor/formatType-editor.vue +2 -2
  189. package/src/components/xform/form-designer/setting-panel/property-editor/formula-editor.vue +972 -972
  190. package/src/components/xform/form-designer/setting-panel/property-editor/iconClass-editor.vue +1 -1
  191. package/src/components/xform/form-designer/setting-panel/property-editor/label-editor.vue +1 -1
  192. package/src/components/xform/form-designer/setting-panel/property-editor/labelAlign-editor.vue +1 -1
  193. package/src/components/xform/form-designer/setting-panel/property-editor/labelColor-editor.vue +1 -1
  194. package/src/components/xform/form-designer/setting-panel/property-editor/labelIconPosition-editor.vue +1 -1
  195. package/src/components/xform/form-designer/setting-panel/property-editor/labelWidth-editor.vue +1 -1
  196. package/src/components/xform/form-designer/setting-panel/property-editor/limit-editor.vue +1 -1
  197. package/src/components/xform/form-designer/setting-panel/property-editor/max-editor.vue +1 -1
  198. package/src/components/xform/form-designer/setting-panel/property-editor/maxLength-editor.vue +1 -1
  199. package/src/components/xform/form-designer/setting-panel/property-editor/min-editor.vue +1 -1
  200. package/src/components/xform/form-designer/setting-panel/property-editor/minLength-editor.vue +1 -1
  201. package/src/components/xform/form-designer/setting-panel/property-editor/multipleLimit-editor.vue +1 -1
  202. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +15 -4
  203. package/src/components/xform/form-designer/setting-panel/property-editor/oplog-editor.vue +3 -3
  204. package/src/components/xform/form-designer/setting-panel/property-editor/placeholder-editor.vue +1 -1
  205. package/src/components/xform/form-designer/setting-panel/property-editor/precision-editor.vue +1 -1
  206. package/src/components/xform/form-designer/setting-panel/property-editor/prefixIcon-editor.vue +14 -15
  207. package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +6 -6
  208. package/src/components/xform/form-designer/setting-panel/property-editor/relative-default-block.vue +369 -0
  209. package/src/components/xform/form-designer/setting-panel/property-editor/requiredHint-editor.vue +1 -1
  210. package/src/components/xform/form-designer/setting-panel/property-editor/rows-editor.vue +1 -1
  211. package/src/components/xform/form-designer/setting-panel/property-editor/space-editor-editor.vue +1 -1
  212. package/src/components/xform/form-designer/setting-panel/property-editor/startPlaceholder-editor.vue +1 -1
  213. package/src/components/xform/form-designer/setting-panel/property-editor/step-editor.vue +1 -1
  214. package/src/components/xform/form-designer/setting-panel/property-editor/styleTableClass-editor.vue +1 -1
  215. package/src/components/xform/form-designer/setting-panel/property-editor/styleTitClass-editor.vue +1 -1
  216. package/src/components/xform/form-designer/setting-panel/property-editor/suffixIcon-editor.vue +14 -15
  217. package/src/components/xform/form-designer/setting-panel/property-editor/tempStorage-editor.vue +1 -1
  218. package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +2 -3
  219. package/src/components/xform/form-designer/setting-panel/property-editor/type-editor.vue +1 -1
  220. package/src/components/xform/form-designer/setting-panel/property-editor/uploadTip-editor.vue +1 -1
  221. package/src/components/xform/form-designer/setting-panel/property-editor/uploadURL-editor.vue +1 -1
  222. package/src/components/xform/form-designer/setting-panel/property-editor/urlValueEnabled-editor.vue +91 -0
  223. package/src/components/xform/form-designer/setting-panel/property-editor/validation-editor.vue +1 -1
  224. package/src/components/xform/form-designer/setting-panel/property-editor/validationHint-editor.vue +1 -1
  225. package/src/components/xform/form-designer/setting-panel/property-editor/widgetWidth-editor.vue +1 -1
  226. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +374 -351
  227. package/src/components/xform/form-designer/toolbar-panel/index.vue +266 -103
  228. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +655 -589
  229. package/src/components/xform/form-designer/widget-panel/index.vue +391 -341
  230. package/src/components/xform/form-designer/widget-panel/indexMixin.js +351 -308
  231. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +4642 -4028
  232. package/src/components/xform/form-render/container-item/containerItemMixin.js +76 -61
  233. package/src/components/xform/form-render/container-item/data-table-item.vue +24 -13
  234. package/src/components/xform/form-render/container-item/data-table-mixin.js +5927 -3400
  235. package/src/components/xform/form-render/container-item/detail-h5-item.vue +173 -173
  236. package/src/components/xform/form-render/container-item/detail-item.vue +446 -224
  237. package/src/components/xform/form-render/container-item/detail-plain-item.vue +92 -0
  238. package/src/components/xform/form-render/container-item/list-h5-item.vue +1186 -411
  239. package/src/components/xform/form-render/container-item/tab-item.vue +129 -125
  240. package/src/components/xform/form-render/container-item/table-item.vue +0 -3
  241. package/src/components/xform/form-render/container-item/table2-item.vue +18 -10
  242. package/src/components/xform/form-render/dynamicDialogRender.js +140 -99
  243. package/src/components/xform/form-render/index.vue +8 -8
  244. package/src/components/xform/form-render/indexMixin.js +5299 -3766
  245. package/src/components/xform/form-render/refMixin.js +14 -11
  246. package/src/components/xform/lang/en-US.js +473 -438
  247. package/src/components/xform/lang/en-US_extension.js +4 -0
  248. package/src/components/xform/lang/zh-CN.js +646 -620
  249. package/src/components/xform/mixins/defaultHandle.js +363 -26
  250. package/src/components/xform/mixins/scriptHttp.js +54 -51
  251. package/src/components/xform/utils/attachmentValueUtil.js +239 -0
  252. package/src/components/xform/utils/fixedQueryUtil.js +93 -0
  253. package/src/components/xform/utils/format.js +195 -169
  254. package/src/components/xform/utils/queryParamUtil.js +84 -0
  255. package/src/components/xform/utils/tableColumnHelper.js +7 -8
  256. package/src/components/xform/utils/util.js +1663 -1551
  257. package/src/components/xform/utils/validators.js +100 -48
  258. package/src/index.js +403 -89
  259. package/src/layout/components/AppMain.vue +147 -119
  260. package/src/layout/components/Sidebar/default.vue +109 -59
  261. package/src/layout/components/TagsView/index.vue +1 -1
  262. package/src/layout/components/extractedCode/queryDialog.vue +33 -26
  263. package/src/layout/components/extractedCode/viewDialog.vue +207 -193
  264. package/src/layout/components/langTool.vue +128 -123
  265. package/src/layout/defaultLayout.vue +170 -158
  266. package/src/mixins/wf/index.js +40 -38
  267. package/src/public-path.js +38 -0
  268. package/src/router/modules/system.js +4 -0
  269. package/src/store/config/index.js +945 -669
  270. package/src/utils/pdfUtil.js +428 -70
  271. package/src/views/bd/setting/bd_company_env/dialog.vue +1 -1
  272. package/src/views/bd/setting/formVersion/button.vue +5 -0
  273. package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +21 -10
  274. package/src/views/bd/setting/formVersion/link.vue +5 -0
  275. package/src/views/bd/setting/form_script/edit.vue +1 -0
  276. package/src/views/bd/setting/form_script/edit1.vue +1 -0
  277. package/src/views/bd/setting/form_script/form_list.vue +1 -0
  278. package/src/views/bd/setting/form_script/list.vue +1 -0
  279. package/src/views/bd/setting/form_script/list1.vue +2 -0
  280. package/src/views/bd/setting/form_template/edit.vue +1 -0
  281. package/src/views/bd/setting/form_template/list.vue +2 -0
  282. package/src/views/bd/setting/form_template/mixins/edit.js +77 -74
  283. package/src/views/bd/setting/table_model/edit.vue +16 -29
  284. package/src/views/bd/setting/table_model/list.vue +1 -0
  285. package/src/views/bd/setting/table_model/mixins/edit.js +295 -149
  286. package/src/views/bd/setting/table_model/mixins/zdDialog.js +32 -0
  287. package/src/views/support/export_template/list.vue +1 -1
  288. package/src/views/user/company_info/edit.vue +149 -88
  289. package/src/views/user/form/form_template/dialog.vue +1 -1
  290. package/src/views/user/form/form_template/itemList.vue +1 -1
  291. package/src/views/user/form/form_template/list.vue +1 -1
  292. package/src/views/user/form/form_template_field/dialog.vue +1 -1
  293. package/src/views/user/form/form_type/dialog.vue +1 -1
  294. package/src/views/user/form/form_type/list.vue +1 -1
  295. package/src/views/user/form/report_requestaccess/dialog.vue +1 -1
  296. package/src/views/user/form/report_requestaccess/list.vue +1 -1
  297. package/src/views/user/form/vform/designer.vue +51 -22
  298. package/src/views/user/form/vform/render.vue +21 -23
  299. package/src/views/user/form/view/list.vue +134 -37
  300. package/src/views/user/wf/wfReport/index.vue +24 -1
  301. package/src/views/user/wf/wf_manage/list.vue +8 -4
  302. package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +0 -209
  303. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin - /345/211/257/346/234/254.js" +0 -1639
  304. package/src/views/bd/setting/table_model/mixins/edit copy.js +0 -903
  305. package/src/views/user/menu/voc_list.vue +0 -686
@@ -1,8 +1,23 @@
1
+ /* 日期组件的最小日期支持配置为「当前时间」,此处统一解析。
2
+ 默认值(含「当前时间」与相对偏移)已收敛到 relative-default-mixin,不在此处理。 */
3
+ export const DATE_VALUE_TYPE_NOW = "now";
4
+
1
5
  export default {
2
6
  methods: {
3
7
  getDateLimitOptions() {
4
8
  return this.field.options || {};
5
9
  },
10
+ isNowDateValueType(valueType) {
11
+ return valueType === DATE_VALUE_TYPE_NOW;
12
+ },
13
+ /* 最小日期:固定日期或当前时间 */
14
+ getDateLimitMinValue() {
15
+ const options = this.getDateLimitOptions();
16
+ if (this.isNowDateValueType(options.minDateType)) {
17
+ return new Date();
18
+ }
19
+ return options.minDate;
20
+ },
6
21
  initDateLimitPickerOptions() {
7
22
  const pickerOptions = { ...(this.pickerOptions || {}) };
8
23
  if (["year", "month", "date", "datetime"].includes(this.field.options.type)) {
@@ -79,7 +94,7 @@ export default {
79
94
  const options = this.getDateLimitOptions();
80
95
  const currentTime = time.getTime();
81
96
 
82
- const minDate = this.parseDateLimitValue(options.minDate);
97
+ const minDate = this.parseDateLimitValue(this.getDateLimitMinValue());
83
98
  if (minDate !== null && currentTime < this.normalizeDateLimitDayTime(minDate, false)) {
84
99
  return true;
85
100
  }
@@ -119,7 +134,7 @@ export default {
119
134
  }
120
135
 
121
136
  const options = this.getDateLimitOptions();
122
- const minDate = this.parseDateLimitValue(options.minDate);
137
+ const minDate = this.parseDateLimitValue(this.getDateLimitMinValue());
123
138
  if (minDate !== null && currentTime < this.normalizeDateLimitDayTime(minDate, false)) {
124
139
  return true;
125
140
  }
@@ -376,21 +376,15 @@ modules = {
376
376
  },*/
377
377
  loadDataDefaultHandle() {
378
378
  let reportTemplate = this.getFormRef().reportTemplate;
379
- let formCode = reportTemplate.formCode;
380
379
  let formScriptEnabled = this.field.options.formScriptEnabled || false;
381
380
  let scriptCode = this.field.options.formScriptCode
382
381
  if (!scriptCode) return;
383
382
  let accessParam = this.handleCustomEvent(this.field.options.formScriptParam)
384
383
  return this.formHttp({
385
384
  scriptCode: scriptCode,
386
- data: {
387
- formCode: formCode,
388
- formVersion: reportTemplate.formVersion,
389
- taBm: this.fieldKeyName,
390
- data: {
391
- ...accessParam
392
- }
393
- },
385
+ data: this.buildFormScriptData(reportTemplate, {
386
+ ...accessParam
387
+ }),
394
388
  callback: res => {
395
389
  let rows = res.objx || [];
396
390
  this.setValue(rows)
@@ -248,21 +248,15 @@ modules = {
248
248
  },*/
249
249
  loadDataDefaultHandle() {
250
250
  let reportTemplate = this.getFormRef().reportTemplate;
251
- let formCode = reportTemplate.formCode;
252
251
  let formScriptEnabled = this.field.options.formScriptEnabled || false;
253
252
  let scriptCode = this.field.options.formScriptCode
254
253
  if (!scriptCode) return;
255
254
  let accessParam = this.handleCustomEvent(this.field.options.formScriptParam)
256
255
  return this.formHttp({
257
256
  scriptCode: scriptCode,
258
- data: {
259
- formCode: formCode,
260
- formVersion: reportTemplate.formVersion,
261
- taBm: this.fieldKeyName,
262
- data: {
263
- ...accessParam
264
- }
265
- },
257
+ data: this.buildFormScriptData(reportTemplate, {
258
+ ...accessParam
259
+ }),
266
260
  callback: res => {
267
261
  let rows = res.objx || [];
268
262
  this.setValue(rows)
@@ -171,21 +171,15 @@ modules = {
171
171
  },*/
172
172
  loadDataDefaultHandle() {
173
173
  let reportTemplate = this.getFormRef().reportTemplate;
174
- let formCode = reportTemplate.formCode;
175
174
  let formScriptEnabled = this.field.options.formScriptEnabled || false;
176
175
  let scriptCode = this.field.options.formScriptCode
177
176
  if (!scriptCode) return;
178
177
  let accessParam = this.handleCustomEvent(this.field.options.formScriptParam)
179
178
  return this.formHttp({
180
179
  scriptCode: scriptCode,
181
- data: {
182
- formCode: formCode,
183
- formVersion: reportTemplate.formVersion,
184
- taBm: this.fieldKeyName,
185
- data: {
186
- ...accessParam
187
- }
188
- },
180
+ data: this.buildFormScriptData(reportTemplate, {
181
+ ...accessParam
182
+ }),
189
183
  callback: res => {
190
184
  let rows = res.objx || [];
191
185
  this.setValue(rows)
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 日期/时间组件「相对默认值」的取值入口(date、date-range、time、time-range 共用)。
3
+ *
4
+ * 相对值必须每次初始化重算,绝不能写回 options.defaultValue —— options 会被序列化保存,
5
+ * 写回就变成死值。这里的做法是:先照常跑 initFieldModel(此时 options.defaultValue 为空,
6
+ * 不会填任何值),再在「本该取默认值」的场景下用 initValue 灌入现算的相对值。
7
+ *
8
+ * 放在 initFieldModel 之后灌值还顺带绕开了 utc-transform-mixin:相对值本身就是本地时间,
9
+ * 若参与 UTC→本地转换会再偏一次时区。
10
+ */
11
+ import { resolveDefaultValueFromOptions } from "./relativeDateUtil";
12
+
13
+ export default {
14
+ methods: {
15
+ /**
16
+ * 当前配置对应的相对默认值;未配相对默认值返回 undefined(调用方走静态默认值)。
17
+ * @param {Date} baseDate 基准时刻,仅测试用
18
+ */
19
+ getRelativeDefaultValue(baseDate) {
20
+ return resolveDefaultValueFromOptions(
21
+ this.field?.options,
22
+ this.field?.type,
23
+ baseDate
24
+ );
25
+ },
26
+
27
+ /** @returns {Boolean} 值是否为空(范围组件的空值是空数组) */
28
+ isEmptyFieldValue(value) {
29
+ if (value === null || value === undefined || value === "") {
30
+ return true;
31
+ }
32
+ return Array.isArray(value) && value.length === 0;
33
+ },
34
+
35
+ /**
36
+ * 是否落在「新增时取默认值」的场景。
37
+ * 判定与 fieldMixin.initFieldModel 里的默认值分支保持一致:值为空 + 新增单据/新增明细行。
38
+ * @returns {Boolean}
39
+ */
40
+ willInitDefaultValue() {
41
+ if (!this.field?.formItemFlag) {
42
+ return false;
43
+ }
44
+ const currentData
45
+ = this.tableParam && this.tableParam.row
46
+ ? this.tableParam.row
47
+ : this.formModel;
48
+ if (!currentData) {
49
+ return false;
50
+ }
51
+ if (!this.isEmptyFieldValue(currentData[this.fieldKeyName])) {
52
+ return false;
53
+ }
54
+ if (this.tableParam) {
55
+ return !this.tableParam.row.id; //明细:只有新增行才填默认值
56
+ }
57
+ const dataId = this.getFormRef()?.dataId ?? null;
58
+ return !dataId; //主表:只有新增单据才填默认值
59
+ },
60
+
61
+ /** 取值入口,替代各日期组件 created 里直接调的 initFieldModel */
62
+ initRelativeFieldModel() {
63
+ const relativeValue = this.getRelativeDefaultValue();
64
+ if (relativeValue === undefined) {
65
+ this.initFieldModel();
66
+ return;
67
+ }
68
+ const shouldInit = this.willInitDefaultValue();
69
+ this.initFieldModel();
70
+ if (shouldInit) {
71
+ this.initValue(relativeValue);
72
+ }
73
+ },
74
+
75
+ /*
76
+ * 表单重置:相对模式按重置时刻重算,与新增时同口径;静态默认值维持 fieldMixin 的行为。
77
+ * 这里不委托 fieldMixin.resetField,是为了不把它那条重依赖链(公式引擎、codemirror)
78
+ * 拖进本文件;它对本 mixin 覆盖的日期/时间组件也只多一段附件组件的分支,用不上。
79
+ */
80
+ resetField() {
81
+ if (this.subFormItemFlag) {
82
+ return;
83
+ }
84
+ const relativeValue = this.getRelativeDefaultValue();
85
+ this.setValue(
86
+ relativeValue === undefined
87
+ ? this.field.options.defaultValue
88
+ : relativeValue
89
+ );
90
+ },
91
+
92
+ /* 设计器里改默认值配置后的预览刷新,由 propertyMixin.emitDefaultValueChange 调用 */
93
+ refreshDefaultValue() {
94
+ if (this.designState !== true) {
95
+ return;
96
+ }
97
+ const relativeValue = this.getRelativeDefaultValue();
98
+ if (relativeValue !== undefined) {
99
+ this.fieldModel = relativeValue;
100
+ return;
101
+ }
102
+ if (this.field.options.defaultValue !== undefined) {
103
+ this.fieldModel = this.field.options.defaultValue;
104
+ }
105
+ },
106
+ },
107
+ };
@@ -0,0 +1,321 @@
1
+ /**
2
+ * 日期/时间组件「相对默认值」的统一求值器(date、date-range、time、time-range 共用)。
3
+ *
4
+ * 描述符 { offset, unit, align }:先按 offset 平移 unit,再按 align 对齐到该单位的起/止。
5
+ * {offset: 0, unit: 'day'} → 今天
6
+ * {offset: 7, unit: 'day'} → 7天后
7
+ * {offset: -1, unit: 'month', align: 'start'} → 上月1号
8
+ * {offset: -1, unit: 'month', align: 'end'} → 上月最后一天
9
+ *
10
+ * 老配置 defaultValueType='now'(date/time 的「当前时间」勾选)在此读时归一为 {offset:0},
11
+ * 不改存量表单 JSON,也不做数据迁移。
12
+ */
13
+ import moment from "moment";
14
+
15
+ export const DEFAULT_VALUE_TYPE_NOW = "now";
16
+ export const DEFAULT_VALUE_TYPE_RELATIVE = "relative";
17
+
18
+ /* 日期类单位:date/date-range 可用 */
19
+ export const DATE_UNITS = ["day", "week", "month", "quarter", "year"];
20
+ /* 时间类单位:time/time-range 可用,date 组件在 datetime 类型下也可用 */
21
+ export const TIME_UNITS = ["hour", "minute", "second"];
22
+ export const ALIGN_TYPES = ["none", "start", "end"];
23
+
24
+ export const KIND_DATE = "date";
25
+ export const KIND_TIME = "time";
26
+
27
+ const RANGE_WIDGET_TYPES = ["date-range", "time-range"];
28
+ const TIME_WIDGET_TYPES = ["time", "time-range"];
29
+
30
+ /* el-time-picker 的 value-format 在组件里写死为 HH:mm:ss */
31
+ const TIME_VALUE_FORMAT = "HH:mm:ss";
32
+
33
+ const UNIT_LABELS = {
34
+ day: "天",
35
+ week: "周",
36
+ month: "月",
37
+ quarter: "季",
38
+ year: "年",
39
+ hour: "小时",
40
+ minute: "分钟",
41
+ second: "秒",
42
+ };
43
+
44
+ /** @returns {String} 组件类型对应的求值口径:time/time-range 为时间类,其余按日期类 */
45
+ export function getRelativeKind(widgetType) {
46
+ return TIME_WIDGET_TYPES.includes(widgetType) ? KIND_TIME : KIND_DATE;
47
+ }
48
+
49
+ /** @returns {Boolean} 是否范围组件(值为长度 2 的数组) */
50
+ export function isRangeWidgetType(widgetType) {
51
+ return RANGE_WIDGET_TYPES.includes(widgetType);
52
+ }
53
+
54
+ /** @returns {Array} 该口径下可选的单位;日期类额外放开时分秒(datetime 类型要用) */
55
+ export function getAvailableUnits(kind) {
56
+ return kind === KIND_TIME ? [...TIME_UNITS] : [...DATE_UNITS, ...TIME_UNITS];
57
+ }
58
+
59
+ export function getUnitLabel(unit) {
60
+ return UNIT_LABELS[unit] || unit;
61
+ }
62
+
63
+ /** @returns {Boolean} 该单位是否为时间类(时/分/秒) */
64
+ export function isTimeUnit(unit) {
65
+ return TIME_UNITS.includes(unit);
66
+ }
67
+
68
+ /**
69
+ * 描述符补全:offset 取整、unit/align 落到白名单内。
70
+ * @param {Object} descriptor 原始描述符,可为 null
71
+ * @param {String} kind KIND_DATE / KIND_TIME
72
+ * @returns {Object} { offset, unit, align }
73
+ */
74
+ export function normalizeRelativeDescriptor(descriptor, kind = KIND_DATE) {
75
+ const source
76
+ = descriptor && typeof descriptor === "object" ? descriptor : {};
77
+ const units = getAvailableUnits(kind);
78
+ const offset = Number(source.offset);
79
+ const unit = units.includes(source.unit)
80
+ ? source.unit
81
+ : kind === KIND_TIME
82
+ ? "hour"
83
+ : "day";
84
+ const align = ALIGN_TYPES.includes(source.align) ? source.align : "none";
85
+ return {
86
+ offset: Number.isFinite(offset) ? Math.trunc(offset) : 0,
87
+ unit,
88
+ align,
89
+ };
90
+ }
91
+
92
+ /** 范围描述符补全,两端各自独立 */
93
+ export function normalizeRelativeRangeDescriptor(descriptor, kind = KIND_DATE) {
94
+ const source
95
+ = descriptor && typeof descriptor === "object" ? descriptor : {};
96
+ return {
97
+ start: normalizeRelativeDescriptor(source.start, kind),
98
+ end: normalizeRelativeDescriptor(source.end, kind),
99
+ };
100
+ }
101
+
102
+ /* 周的起止按 ISO 周算(周一为一周之始):moment 未加载中文语言包,
103
+ startOf('week') 会按 en 口径落到周日,与国内习惯不符 */
104
+ function getAlignUnit(unit) {
105
+ return unit === "week" ? "isoWeek" : unit;
106
+ }
107
+
108
+ /**
109
+ * element 的 format/value-format 转 moment 格式。
110
+ * 只有 y(年)和 d(日)两族记号不同,M/H/m/s/A 两边一致。
111
+ */
112
+ export function toMomentFormat(elFormat) {
113
+ const tokenMap = { yyyy: "YYYY", yy: "YY", dd: "DD", d: "D" };
114
+ return String(elFormat).replace(
115
+ /yyyy|yy|dd|d/g,
116
+ (token) => tokenMap[token]
117
+ );
118
+ }
119
+
120
+ /** @returns {Boolean} 该组件的值是否带时分秒 */
121
+ export function hasTimePart(type, valueFormat) {
122
+ if (String(type || "").indexOf("datetime") > -1) {
123
+ return true;
124
+ }
125
+ return /[Hhms]/.test(String(valueFormat || ""));
126
+ }
127
+
128
+ /** "HH:mm:ss" → 把时分秒盖到 moment 实例上;解析不出来就原样返回 */
129
+ function applyTimeOfDay(momentValue, timeText) {
130
+ const matched = /^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/.exec(
131
+ String(timeText || "").trim()
132
+ );
133
+ if (!matched) {
134
+ return momentValue;
135
+ }
136
+ return momentValue.set({
137
+ hour: Number(matched[1]),
138
+ minute: Number(matched[2]),
139
+ second: Number(matched[3] || 0),
140
+ millisecond: 0,
141
+ });
142
+ }
143
+
144
+ /**
145
+ * 求出描述符对应的时刻。
146
+ * @param {Object} descriptor 描述符
147
+ * @param {Object} config { kind, baseDate }
148
+ */
149
+ export function resolveRelativeMoment(descriptor, config = {}) {
150
+ const kind = config.kind || KIND_DATE;
151
+ const { offset, unit, align } = normalizeRelativeDescriptor(
152
+ descriptor,
153
+ kind
154
+ );
155
+ const momentValue = config.baseDate ? moment(config.baseDate) : moment();
156
+ if (offset) {
157
+ momentValue.add(offset, unit);
158
+ }
159
+ if (align === "start") {
160
+ momentValue.startOf(getAlignUnit(unit));
161
+ } else if (align === "end") {
162
+ momentValue.endOf(getAlignUnit(unit));
163
+ }
164
+ return momentValue;
165
+ }
166
+
167
+ /**
168
+ * 按组件的取值格式输出。
169
+ * time 类固定 HH:mm:ss;date 类 valueFormat 为空时 picker 的值是 Date 对象。
170
+ */
171
+ export function formatRelativeMoment(momentValue, config = {}) {
172
+ if ((config.kind || KIND_DATE) === KIND_TIME) {
173
+ return momentValue.format(TIME_VALUE_FORMAT);
174
+ }
175
+ const valueFormat = config.valueFormat;
176
+ if (!valueFormat) {
177
+ return momentValue.toDate();
178
+ }
179
+ if (valueFormat === "timestamp") {
180
+ return momentValue.valueOf();
181
+ }
182
+ return momentValue.format(toMomentFormat(valueFormat));
183
+ }
184
+
185
+ /*
186
+ * 时分秒口径:单位是日期类(天及以上)时,端点时刻取 defaultTime(起 00:00:00 / 止 23:59:59),
187
+ * 保证「当前到+7天」是整天区间,between 查询不会漏掉首尾当天的数据;
188
+ * 单位是时间类(时/分/秒)时用户要的就是时刻精度,不套 defaultTime。
189
+ */
190
+ function shouldApplyDefaultTime(descriptor, config) {
191
+ if (!config.defaultTime) {
192
+ return false;
193
+ }
194
+ if (!hasTimePart(config.type, config.valueFormat)) {
195
+ return false;
196
+ }
197
+ return !isTimeUnit(normalizeRelativeDescriptor(descriptor, config.kind).unit);
198
+ }
199
+
200
+ /**
201
+ * 单值组件的相对默认值。
202
+ * @param {Object} descriptor 描述符
203
+ * @param {Object} config { kind, type, valueFormat, defaultTime, baseDate }
204
+ */
205
+ export function resolveRelativeValue(descriptor, config = {}) {
206
+ const momentValue = resolveRelativeMoment(descriptor, config);
207
+ if (shouldApplyDefaultTime(descriptor, config)) {
208
+ applyTimeOfDay(momentValue, config.defaultTime);
209
+ }
210
+ const value = formatRelativeMoment(momentValue, config);
211
+ /* date 组件的 dates(多选日期)类型,值是数组 */
212
+ return config.type === "dates" ? [value] : value;
213
+ }
214
+
215
+ /**
216
+ * 范围组件的相对默认值,返回长度 2 的数组。
217
+ * config.defaultTime 为 ["00:00:00", "23:59:59"] 这样的两端时刻。
218
+ */
219
+ export function resolveRelativeRangeValue(descriptor, config = {}) {
220
+ const { start, end } = normalizeRelativeRangeDescriptor(
221
+ descriptor,
222
+ config.kind
223
+ );
224
+ const defaultTime = Array.isArray(config.defaultTime)
225
+ ? config.defaultTime
226
+ : [];
227
+ return [
228
+ resolveRelativeValue(start, { ...config, defaultTime: defaultTime[0] }),
229
+ resolveRelativeValue(end, { ...config, defaultTime: defaultTime[1] }),
230
+ ];
231
+ }
232
+
233
+ /** 描述符 → 一句话规则,如「7天后」「1月前·月初」 */
234
+ export function describeRelativeDescriptor(descriptor, kind = KIND_DATE) {
235
+ const { offset, unit, align } = normalizeRelativeDescriptor(descriptor, kind);
236
+ const unitLabel = getUnitLabel(unit);
237
+ let text = "当前";
238
+ if (offset > 0) {
239
+ text = `${offset}${unitLabel}后`;
240
+ } else if (offset < 0) {
241
+ text = `${-offset}${unitLabel}前`;
242
+ }
243
+ if (align === "start") {
244
+ text += `·${unitLabel}初`;
245
+ } else if (align === "end") {
246
+ text += `·${unitLabel}末`;
247
+ }
248
+ return text;
249
+ }
250
+
251
+ /** 设计器预览用:把求值结果转成可读文本 */
252
+ export function toPreviewText(value) {
253
+ if (value === null || value === undefined || value === "") {
254
+ return "";
255
+ }
256
+ if (Array.isArray(value)) {
257
+ return value.map((item) => toPreviewText(item)).join(" ~ ");
258
+ }
259
+ if (value instanceof Date) {
260
+ return moment(value).format("YYYY-MM-DD HH:mm:ss");
261
+ }
262
+ if (typeof value === "number") {
263
+ return moment(value).format("YYYY-MM-DD HH:mm:ss");
264
+ }
265
+ return String(value);
266
+ }
267
+
268
+ /** @returns {Boolean} options 上是否配了相对默认值(含老的 now 勾选) */
269
+ export function isRelativeDefaultType(defaultValueType) {
270
+ return (
271
+ defaultValueType === DEFAULT_VALUE_TYPE_RELATIVE
272
+ || defaultValueType === DEFAULT_VALUE_TYPE_NOW
273
+ );
274
+ }
275
+
276
+ /**
277
+ * 从 options 读出描述符:'now' 归一为 offset 0,'relative' 取 defaultValueRelative。
278
+ * 未配相对默认值返回 null,调用方走原有静态默认值逻辑。
279
+ * @param {Object} options 组件 options
280
+ * @param {String} widgetType 组件类型
281
+ */
282
+ export function getRelativeDescriptor(options, widgetType) {
283
+ const source = options || {};
284
+ if (!isRelativeDefaultType(source.defaultValueType)) {
285
+ return null;
286
+ }
287
+ const kind = getRelativeKind(widgetType);
288
+ const isRange = isRangeWidgetType(widgetType);
289
+ if (source.defaultValueType === DEFAULT_VALUE_TYPE_NOW) {
290
+ /* 老的「当前时间」勾选:两端都取此刻 */
291
+ const now = normalizeRelativeDescriptor(null, kind);
292
+ return isRange ? { start: now, end: { ...now } } : now;
293
+ }
294
+ return isRange
295
+ ? normalizeRelativeRangeDescriptor(source.defaultValueRelative, kind)
296
+ : normalizeRelativeDescriptor(source.defaultValueRelative, kind);
297
+ }
298
+
299
+ /**
300
+ * 组件 options → 相对默认值。未配相对默认值返回 undefined。
301
+ * @param {Object} options 组件 options
302
+ * @param {String} widgetType 组件类型
303
+ * @param {Date} baseDate 基准时刻,仅测试用;不传取当前时刻
304
+ */
305
+ export function resolveDefaultValueFromOptions(options, widgetType, baseDate) {
306
+ const descriptor = getRelativeDescriptor(options, widgetType);
307
+ if (!descriptor) {
308
+ return undefined;
309
+ }
310
+ const source = options || {};
311
+ const config = {
312
+ kind: getRelativeKind(widgetType),
313
+ type: source.type,
314
+ valueFormat: source.valueFormat,
315
+ defaultTime: source.defaultTime,
316
+ baseDate,
317
+ };
318
+ return isRangeWidgetType(widgetType)
319
+ ? resolveRelativeRangeValue(descriptor, config)
320
+ : resolveRelativeValue(descriptor, config);
321
+ }
@@ -0,0 +1,77 @@
1
+ /* 时间组件的最小时间支持配置为「当前时间」,此处统一解析。
2
+ 默认值(含「当前时间」与相对偏移)已收敛到 relative-default-mixin,不在此处理。 */
3
+ export const TIME_VALUE_TYPE_NOW = "now";
4
+
5
+ const MAX_TIME_VALUE = "23:59:59";
6
+
7
+ export default {
8
+ methods: {
9
+ getTimeLimitOptions() {
10
+ return this.field.options || {};
11
+ },
12
+ isNowTimeValueType(valueType) {
13
+ return valueType === TIME_VALUE_TYPE_NOW;
14
+ },
15
+ getNowTimeValue() {
16
+ const now = new Date();
17
+ const pad = (val) => (val < 10 ? "0" + val : String(val));
18
+ return `${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(
19
+ now.getSeconds()
20
+ )}`;
21
+ },
22
+ normalizeTimeValue(val) {
23
+ if (val === null || val === undefined || val === "") {
24
+ return null;
25
+ }
26
+ const matched = /^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/.exec(String(val).trim());
27
+ if (!matched) {
28
+ return null;
29
+ }
30
+ const hour = Number(matched[1]);
31
+ const minute = Number(matched[2]);
32
+ const second = Number(matched[3] || 0);
33
+ if (hour > 23 || minute > 59 || second > 59) {
34
+ return null;
35
+ }
36
+ const pad = (v) => (v < 10 ? "0" + v : String(v));
37
+ return `${pad(hour)}:${pad(minute)}:${pad(second)}`;
38
+ },
39
+ parseTimeLimitValue(val) {
40
+ const normalized = this.normalizeTimeValue(val);
41
+ if (normalized === null) {
42
+ return null;
43
+ }
44
+ const parts = normalized.split(":");
45
+ return Number(parts[0]) * 3600 + Number(parts[1]) * 60 + Number(parts[2]);
46
+ },
47
+ /* 最小时间:固定时间或当前时间 */
48
+ getTimeLimitMinValue() {
49
+ const options = this.getTimeLimitOptions();
50
+ if (this.isNowTimeValueType(options.minTimeType)) {
51
+ return this.getNowTimeValue();
52
+ }
53
+ return this.normalizeTimeValue(options.minTime);
54
+ },
55
+ initTimeLimitPickerOptions() {
56
+ const pickerOptions = { ...(this.pickerOptions || {}) };
57
+ const minTime = this.getTimeLimitMinValue();
58
+ if (minTime === null) {
59
+ delete pickerOptions.selectableRange;
60
+ } else {
61
+ pickerOptions.selectableRange = `${minTime} - ${MAX_TIME_VALUE}`;
62
+ }
63
+ this.pickerOptions = pickerOptions;
64
+ },
65
+ isTimeLimitViolated(value) {
66
+ const currentTime = this.parseTimeLimitValue(value);
67
+ if (currentTime === null) {
68
+ return false;
69
+ }
70
+ const minTime = this.parseTimeLimitValue(this.getTimeLimitMinValue());
71
+ return minTime !== null && currentTime < minTime;
72
+ },
73
+ getTimeLimitViolationMessage() {
74
+ return `时间不能小于${this.getTimeLimitMinValue()}`;
75
+ },
76
+ },
77
+ };
@@ -175,5 +175,18 @@ export default {
175
175
  fieldModelLabel() {
176
176
  return this.showValue;
177
177
  },
178
+ // 对比旧值:label 存在原单同行的伴随字段(vabSearchName),从 oldRow 取
179
+ resolveCompareOldDisplay(oldRow) {
180
+ if (!oldRow) return null;
181
+ let labelField = this.field.options.vabSearchName || this.fieldKeyName;
182
+ let multipleChoices = this.field.options.multipleChoices || false;
183
+ if (multipleChoices) {
184
+ let arr = oldRow[this.fieldKeyName];
185
+ return Array.isArray(arr)
186
+ ? arr.map((item) => item && item[labelField]).join(",")
187
+ : null;
188
+ }
189
+ return oldRow[labelField] ?? null;
190
+ },
178
191
  }
179
192
  }
@@ -85,16 +85,21 @@ export default {
85
85
  computed: {
86
86
  numberValue: {
87
87
  get() {
88
- let fieldModel = this.fieldModel;
89
- return fieldModel === null ? undefined : fieldModel;
88
+ const fieldModel = this.fieldModel;
89
+ if (fieldModel === null || fieldModel === undefined) {
90
+ return undefined;
91
+ }
92
+ return fieldModel;
90
93
  },
91
94
  set(val) {
92
- let newValue = val === undefined ? null : val;
93
- this.fieldModel = newValue
94
- let currentData =
95
- this.tableParam && this.tableParam.row
96
- ? this.tableParam.row
97
- : this.formModel;
95
+ // 清空时存 null 而非 undefined:undefined 会被 JSON.stringify 丢弃,
96
+ // 导致该字段不进请求体,后台按“未传即不更新”处理,清空无法落库。
97
+ const newValue = val === undefined || val === null ? null : val;
98
+ this.fieldModel = newValue;
99
+ const currentData =
100
+ this.tableParam && this.tableParam.row
101
+ ? this.tableParam.row
102
+ : this.formModel;
98
103
  currentData[this.fieldKeyName] = newValue;
99
104
  },
100
105
  },