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,374 +1,338 @@
1
- <template>
2
- <form-item-wrapper
3
- :designer="designer"
4
- :field="field"
5
- :rules="rules"
6
- :design-state="designState"
7
- :parent-widget="parentWidget"
8
- :parent-list="parentList"
9
- :index-of-parent-list="indexOfParentList"
10
- :sub-form-row-index="subFormRowIndex"
11
- :sub-form-col-index="subFormColIndex"
12
- :sub-form-row-id="subFormRowId"
13
- >
14
- <div id="uploadImage" class="upload-img" v-if="designState">
15
- <div
16
- class="el-upload el-upload--picture"
17
- style="vertical-align: middle; display: inline-block; float: left"
18
- >
19
- <button type="button" class="avatar-uploader">
20
- <i class="el-icon-plus avatar-uploader-icon"></i>
21
- </button>
22
- </div>
23
- </div>
24
- <baseUpload
25
- accept="file"
26
- :file.sync="fieldModel"
27
- :hidePasteArea.sync="isH5"
28
- :uploadDialogCustomClass="isH5 ? 'dialog-upload-h5' : null"
29
- :pickPrivateProfile="false"
30
- :multi="field.options.limit !== 1"
31
- :limit="field.options.limit"
32
- resultType="Array"
33
- :edit="!field.options.disabled"
34
- :remove="!field.options.hideRemoveButton"
35
- @callback="submitFile"
36
- :hideInfo="field.options.hideFileInfo"
37
- :hideName="field.options.hideFileName"
38
- :showSize="!!field.options.showFileSize"
39
- :createBy="!!field.options.showFileCreateBy"
40
- :createDate="!!field.options.showFileCreateDate"
41
- :widgetSize="field.options.fileShowImageSize"
42
- v-else
43
- ></baseUpload>
44
- </form-item-wrapper>
45
- </template>
46
-
47
- <script>
48
- import FormItemWrapper from "./form-item-wrapper";
49
- import emitter from "../../../../../components/xform/utils/emitter";
50
- import i18n from "../../../../../components/xform/utils/i18n";
51
- import fieldMixin from "../../../../../components/xform/form-designer/form-widget/field-widget/fieldMixin";
52
-
53
- export default {
54
- name: "vabUpload-widget",
55
- componentName: "FieldWidget", //必须固定为FieldWidget,用于接收父级组件的broadcast事件
56
- mixins: [emitter, fieldMixin, i18n],
57
- props: {
58
- field: Object,
59
- parentWidget: Object,
60
- parentList: Array,
61
- indexOfParentList: Number,
62
- designer: Object,
63
-
64
- designState: {
65
- type: Boolean,
66
- default: false,
67
- },
68
-
69
- subFormRowIndex: {
70
- /* 子表单组件行索引,从0开始计数 */ type: Number,
71
- default: -1,
72
- },
73
- subFormColIndex: {
74
- /* 子表单组件列索引,从0开始计数 */ type: Number,
75
- default: -1,
76
- },
77
- subFormRowId: {
78
- /* 子表单组件行Id,唯一id且不可变 */ type: String,
79
- default: "",
80
- },
81
- },
82
- components: {
83
- FormItemWrapper,
84
- },
85
- inject: ["refList", "globalOptionData", "globalModel", "getFormConfig"],
86
- data() {
87
- return {
88
- oldFieldValue: [], //field组件change之前的值
89
- fieldModel: [],
90
- rules: [],
91
- isH5: false,
92
- };
93
- },
94
- watch: {
95
- fieldModel(val) {
96
- this.handleChangeEvent(val);
97
- },
98
- },
99
- computed: {
100
- formDataId() {
101
- let formRef = this.getFormRef();
102
- return formRef.dataId;
103
- },
104
- },
105
- beforeCreate() {
106
- /* 这里不能访问方法和属性!! */
107
- },
108
-
109
- created() {
110
- /* 注意:子组件mounted在父组件created之后、父组件mounted之前触发,故子组件mounted需要用到的prop
111
- 需要在父组件created中初始化!! */
112
-
113
- this.isH5 = this.getFormConfig().layoutType === "H5";
114
-
115
- this.initFieldModel();
116
- this.registerToRefList();
117
- this.initEventHandler();
118
- this.buildFieldRules();
119
-
120
- this.handleOnCreated();
121
- },
122
-
123
- mounted() {
124
- this.handleOnMounted();
125
- },
126
-
127
- beforeDestroy() {
128
- this.unregisterFromRefList();
129
- },
130
- methods: {
131
- setValue(val) {
132
- let data = val || [];
133
- this.fieldModel = data;
134
- this.getFormRef().formDataModel[this.fieldKeyName] = data;
135
- },
136
- loadDataDefaultHandle() {
137
- let dataId = this.formDataId;
138
- if (!dataId) return;
139
- let reportTemplate = this.getFormRef().reportTemplate;
140
- let formCode = reportTemplate.formCode;
141
- let formScriptEnabled = this.field.options.formScriptEnabled || false;
142
- let scriptCode = this.field.options.formScriptCode || "getList";
143
- if (!scriptCode) return;
144
- if (dataId) {
145
- let accessParam = this.handleCustomEvent(
146
- this.field.options.formScriptParam
147
- );
148
- return this.formHttp({
149
- // url: "/" + reportTemplate.serviceName + "/form_ins/getList",
150
- scriptCode: scriptCode,
151
- data: {
152
- formCode: formCode,
153
- formVersion: reportTemplate.formVersion,
154
- taBm: this.fieldKeyName,
155
- data: {
156
- ...accessParam,
157
- id: dataId,
158
- },
159
- },
160
- callback: (res) => {
161
- let rows = res.objx || [];
162
- this.setValue(rows);
163
- this.handleCustomEvent(
164
- this.field.options.formScriptSuccess,
165
- ["res"],
166
- [res]
167
- );
168
- },
169
- });
170
- }
171
- },
172
- submitFile(rows, fileInfos) {
173
- // this.handlLineCode(fileInfos);
174
- let eventParamNames = ["attachments", "fileInfos"];
175
- let eventParamValues = [rows, fileInfos];
176
- this.handleCustomEvent(
177
- this.field.options.onAfterConfirmFile,
178
- eventParamNames,
179
- eventParamValues
180
- );
181
- },
182
- setValueByUrl(fileUrl) {
183
- let value = [];
184
- if (fileUrl) {
185
- let row = this.parseFileUrl(fileUrl);
186
- if (row) {
187
- value.push(row);
188
- }
189
- }
190
- this.setValue(value);
191
- },
192
- parseFileUrl(fileUrl) {
193
- if (!fileUrl) return null;
194
- let result = null;
195
-
196
- // 输入校验
197
- if (typeof fileUrl !== "string") {
198
- throw new TypeError("输入必须是字符串格式");
199
- }
200
- if (!fileUrl.trim()) {
201
- throw new Error("URL不能为空");
202
- }
203
-
204
- // 基本URL格式验证
205
- const urlRegex =
206
- /^(https?:\/\/)?([\w.-]+)(:\d+)?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/i;
207
- if (!urlRegex.test(fileUrl)) {
208
- throw new Error("无效的URL格式");
209
- }
210
-
211
- // 提取域名部分
212
- const domainRegex = /^(https?:\/\/[^\/]+)/i;
213
- const domainMatch = fileUrl.match(domainRegex);
214
- if (!domainMatch) {
215
- throw new Error("URL缺少协议或域名部分");
216
- }
217
- const domain = domainMatch[0];
218
-
219
- // 提取完整路径
220
- const url = fileUrl.substring(domain.length);
221
- if (!url || url === "/") {
222
- throw new Error("URL缺少文件路径部分");
223
- }
224
-
225
- // 提取带扩展名的文件名
226
- const filenameRegex = /[^\/]+$/;
227
- const filenameMatch = url.match(filenameRegex);
228
- if (!filenameMatch) {
229
- throw new Error("无法从路径中提取文件名");
230
- }
231
- const fullFilename = filenameMatch[0];
232
-
233
- // 验证文件名格式(至少1字符+扩展名)
234
- const nameFormat = /^.+\..+$/;
235
- if (!nameFormat.test(fullFilename)) {
236
- throw new Error(`无效的文件名格式: ${fullFilename}`);
237
- }
238
-
239
- // 修复点:更可靠的文件名和扩展名分离
240
- const lastDotIndex = fullFilename.lastIndexOf(".");
241
- const filenameBase = fullFilename.substring(0, lastDotIndex); // 点之前部分
242
- const extension = fullFilename.substring(lastDotIndex + 1).toLowerCase(); // 点之后部分
243
-
244
- // 扩展名验证
245
- /* const validExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp'];
246
- if (!validExtensions.includes(extension)) {
247
- throw new Error(`不支持的扩展名类型: ${extension}`);
248
- } */
249
-
250
- let thumbnail = null,
251
- large = null,
252
- medium = null,
253
- source = null;
254
- if (this.$commonFileUtil.isPicture(extension)) {
255
- thumbnail = url;
256
- large = url;
257
- medium = url;
258
- source = url;
259
- }
260
-
261
- result = {
262
- extension,
263
- domain,
264
- url,
265
- thumbnail,
266
- large,
267
- medium,
268
- source,
269
- name: fullFilename,
270
- };
271
-
272
- // 返回结构化对象
273
- return result;
274
- },
275
- /*handlLineCode(fileInfos) {
276
- let allPromise = [];
277
- fileInfos.forEach(async fileInfo => {
278
- await this.processFile(fileInfo.file, (lineCode) => {
279
- fileInfo.lineCode = lineCode;
280
- })
281
- })
282
-
283
- },
284
- processFile(file, callback) {
285
- return new Promise((resolve, reject) => {
286
- const reader = new FileReader();
287
- reader.onload = (e) => this.processImage(e.target.result, (lineCode) => {
288
- resolve(lineCode)
289
- callback(lineCode)
290
- });
291
- reader.onerror = () => {
292
- resolve(null)
293
- callback(null)
294
- this.setError('文件读取失败')
295
- };
296
- reader.readAsDataURL(file);
297
- })
298
- },
299
- async processImage(base64, callback) {
300
- try {
301
- // 使用 ZXing 3.x 的 API
302
- const result = await decode(base64, (result, err) => {
303
- if (err) {
304
- this.handleError(`条码识别失败: ${err}`);
305
- callback && callback(null)
306
- return;
307
- }
308
- this.scannedText = result.text;
309
- this.loading = false;
310
- callback && callback(result.text)
311
- });
312
- } catch (err) {
313
- console.error(err);
314
- callback && callback(null)
315
- this.handleError(`条码识别失败: ${err.message}`);
316
- }
317
- },
318
- handleLineCode(fileInfos) {
319
- fileInfos.forEach(fileInfo => {
320
- let file = fileInfo.file;
321
- })
322
- },
323
- handleImage(base64, fileName, callback) {
324
- // 创建 ZXing Scanner
325
-
326
-
327
- // 将 Base64 转换为 ImageLuminanceSource
328
- // const imageData = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
329
- // const source = new ZXing.ImageLuminanceSource(imageData, base64.length);
330
-
331
- decode(base64, (result, err) => {
332
- if (err) {
333
- this.handleError(`条码识别失败: ${err}`);
334
- callback && callback(null)
335
- return;
336
- }
337
- this.scannedText = result.text;
338
- this.loading = false;
339
- callback && callback(result.text)
340
- });
341
- },
342
-
343
- handleError(errorMessage) {
344
- this.error = errorMessage;
345
- this.loading = false;
346
- },*/
347
- },
348
- };
349
- </script>
350
-
351
- <style lang="scss" scoped>
352
- @import "~@/styles/global.scss"; //* form-item-wrapper已引入,还需要重复引入吗? *//
353
-
354
- .full-width-input {
355
- width: 100% !important;
356
- }
357
-
358
- .hideUploadDiv {
359
- ::v-deep div.el-upload--picture-card {
360
- /* 隐藏最后的图片上传按钮 */
361
- display: none;
362
- }
363
-
364
- ::v-deep div.el-upload--text {
365
- /* 隐藏最后的文件上传按钮 */
366
- display: none;
367
- }
368
-
369
- ::v-deep div.el-upload__tip {
370
- /* 隐藏最后的文件上传按钮提示 */
371
- display: none;
372
- }
373
- }
374
- </style>
1
+ <template>
2
+ <form-item-wrapper
3
+ :designer="designer"
4
+ :field="field"
5
+ :rules="rules"
6
+ :design-state="designState"
7
+ :parent-widget="parentWidget"
8
+ :parent-list="parentList"
9
+ :index-of-parent-list="indexOfParentList"
10
+ :sub-form-row-index="subFormRowIndex"
11
+ :sub-form-col-index="subFormColIndex"
12
+ :sub-form-row-id="subFormRowId"
13
+ >
14
+ <div id="uploadImage" class="upload-img" v-if="designState">
15
+ <div
16
+ class="el-upload el-upload--picture"
17
+ style="vertical-align: middle; display: inline-block; float: left"
18
+ >
19
+ <button type="button" class="avatar-uploader">
20
+ <i class="el-icon-plus avatar-uploader-icon"></i>
21
+ </button>
22
+ </div>
23
+ </div>
24
+ <baseUpload
25
+ accept="file"
26
+ :file.sync="fieldModel"
27
+ :hidePasteArea.sync="isH5"
28
+ :uploadDialogCustomClass="isH5 ? 'dialog-upload-h5' : null"
29
+ :pickPrivateProfile="false"
30
+ :multi="field.options.limit !== 1"
31
+ :limit="field.options.limit"
32
+ :fileTypes="field.options.fileTypes || []"
33
+ resultType="Array"
34
+ :edit="!field.options.disabled"
35
+ :remove="!field.options.hideRemoveButton"
36
+ @callback="submitFile"
37
+ :hideInfo="field.options.hideFileInfo"
38
+ :hideName="field.options.hideFileName"
39
+ :showSize="!!field.options.showFileSize"
40
+ :createBy="!!field.options.showFileCreateBy"
41
+ :createDate="!!field.options.showFileCreateDate"
42
+ :widgetSize="field.options.fileShowImageSize"
43
+ v-else
44
+ ></baseUpload>
45
+ </form-item-wrapper>
46
+ </template>
47
+
48
+ <script>
49
+ import FormItemWrapper from "./form-item-wrapper";
50
+ import emitter from "../../../../../components/xform/utils/emitter";
51
+ import i18n from "../../../../../components/xform/utils/i18n";
52
+ import fieldMixin from "../../../../../components/xform/form-designer/form-widget/field-widget/fieldMixin";
53
+ import {
54
+ normalizeAttachmentValue,
55
+ isSameAttachmentRows,
56
+ isSameModelValue,
57
+ toModelValue,
58
+ } from "../../../../../components/xform/utils/attachmentValueUtil";
59
+
60
+ export default {
61
+ name: "vabUpload-widget",
62
+ componentName: "FieldWidget", //必须固定为FieldWidget,用于接收父级组件的broadcast事件
63
+ mixins: [emitter, fieldMixin, i18n],
64
+ props: {
65
+ field: Object,
66
+ parentWidget: Object,
67
+ parentList: Array,
68
+ indexOfParentList: Number,
69
+ designer: Object,
70
+
71
+ designState: {
72
+ type: Boolean,
73
+ default: false,
74
+ },
75
+
76
+ subFormRowIndex: {
77
+ /* 子表单组件行索引,从0开始计数 */ type: Number,
78
+ default: -1,
79
+ },
80
+ subFormColIndex: {
81
+ /* 子表单组件列索引,从0开始计数 */ type: Number,
82
+ default: -1,
83
+ },
84
+ subFormRowId: {
85
+ /* 子表单组件行Id,唯一id且不可变 */ type: String,
86
+ default: "",
87
+ },
88
+ },
89
+ components: {
90
+ FormItemWrapper,
91
+ },
92
+ inject: ["refList", "globalOptionData", "globalModel", "getFormConfig"],
93
+ data() {
94
+ return {
95
+ oldFieldValue: [], //field组件change之前的值
96
+ fieldModel: [],
97
+ rules: [],
98
+ isH5: false,
99
+ };
100
+ },
101
+ watch: {
102
+ fieldModel(val) {
103
+ /* fieldMixin.initValueWatchEvent 监听模型值,一变就 initFieldModel(true) 把
104
+ 模型值原样灌回 fieldModel——URL 模式下灌回来的是字符串/字符串数组,会打破
105
+ 「fieldModel 恒为附件对象数组」这个内部约定,所以这里兜底归一。 */
106
+ let rows = normalizeAttachmentValue(val);
107
+ if (!isSameAttachmentRows(rows, val)) {
108
+ this.fieldModel = rows;
109
+ return;
110
+ }
111
+ /* 落到表单模型的值由 urlValueEnabled 决定是对象数组还是 URL 字符串。
112
+ 默认模式下 rows 就是 val 本身(归一未改动任何东西),写回模型的是同一个
113
+ 引用,模型值身份不变,不会触发 initValueWatchEvent 回灌。 */
114
+ let modelValue = this.toModelValue(rows);
115
+ if (this.isSameFieldModelValue(modelValue)) return;
116
+ this.handleChangeEvent(modelValue);
117
+ },
118
+ },
119
+ computed: {
120
+ formDataId() {
121
+ let formRef = this.getFormRef();
122
+ return formRef.dataId;
123
+ },
124
+ },
125
+ beforeCreate() {
126
+ /* 这里不能访问方法和属性!! */
127
+ },
128
+
129
+ created() {
130
+ /* 注意:子组件mounted在父组件created之后、父组件mounted之前触发,故子组件mounted需要用到的prop
131
+ 需要在父组件created中初始化!! */
132
+
133
+ this.isH5 = this.getFormConfig().layoutType === "H5";
134
+
135
+ this.initFieldModel();
136
+ this.initAttachmentValue();
137
+ this.registerToRefList();
138
+ this.initEventHandler();
139
+ this.buildFieldRules();
140
+
141
+ this.handleOnCreated();
142
+ },
143
+
144
+ mounted() {
145
+ this.handleOnMounted();
146
+ },
147
+
148
+ beforeDestroy() {
149
+ this.unregisterFromRefList();
150
+ },
151
+ methods: {
152
+ /* 模型里存的可能是 URL 字符串/数组(urlValueEnabled)或外部塞进来的 URL,
153
+ 统一归一成附件对象数组,组件内部只处理这一种形态 */
154
+ initAttachmentValue() {
155
+ let rows = normalizeAttachmentValue(this.fieldModel);
156
+ /* 归一前后等价就不重新赋值,换新数组会让 watcher 白触发一次 onChange */
157
+ if (!isSameAttachmentRows(rows, this.fieldModel)) {
158
+ this.fieldModel = rows;
159
+ }
160
+ },
161
+ toModelValue(rows) {
162
+ return toModelValue(rows, this.field.options);
163
+ },
164
+ /* URL 模式下 toModelValue 每次都产出新数组,值没变也回写模型的话,会和
165
+ initValueWatchEvent 形成「写模型 → 灌回 fieldModel → 又写模型」的死循环
166
+ (多值模式页面直接卡死)。默认模式模型值就是 fieldModel 本身、身份不变,
167
+ 不存在这个问题,行为保持原样。 */
168
+ isSameFieldModelValue(modelValue) {
169
+ if (!this.field.options.urlValueEnabled) return false;
170
+ let currentData = this.tableRow ? this.tableRow : this.formModel;
171
+ let current = currentData ? currentData[this.fieldKeyName] : undefined;
172
+ return isSameModelValue(current, modelValue);
173
+ },
174
+ setValue(val) {
175
+ let data = normalizeAttachmentValue(val);
176
+ let modelValue = this.toModelValue(data);
177
+ // 按 tableParam 决定落点:行内附件写回当前行对象,主表写回表单模型。
178
+ // 旧实现固定写 getFormRef().formDataModel(顶层),明细行/子表单里的附件
179
+ // 会写错位置并丢失联动,且多行会互相覆盖同一个顶层字段。
180
+ let currentData = this.tableRow ? this.tableRow : this.formModel;
181
+ if (currentData[this.fieldKeyName] === undefined) {
182
+ this.$set(currentData, this.fieldKeyName, modelValue);
183
+ }
184
+ // 赋值 fieldModel 会触发 watch.fieldModel -> handleChangeEvent(内部再走
185
+ // syncUpdateFormModel + emitFieldDataChange,异步一次)。这里再同步写一次模型,
186
+ // 保证 setValue 返回后立即可读到最新值,且落点与 watcher 一致。
187
+ this.fieldModel = data;
188
+ this.syncUpdateFormModel(modelValue);
189
+ },
190
+ loadDataDefaultHandle() {
191
+ /* URL 模式下值就存在主表列上、随表单 getOne 一起回来,不存在独立附件记录。
192
+ 再发这一包不仅多余,查不到还会 setValue([]) 把主表带回来的 URL 清掉。
193
+ 在这里拦截而不是改 onCreated 脚本,已有表单不用逐个改配置。 */
194
+ if (this.field.options.urlValueEnabled) return;
195
+ let dataId = this.formDataId;
196
+ if (!dataId) return;
197
+ let reportTemplate = this.getFormRef().reportTemplate;
198
+ let formScriptEnabled = this.field.options.formScriptEnabled || false;
199
+ let scriptCode = this.field.options.formScriptCode || "getList";
200
+ if (!scriptCode) return;
201
+ if (dataId) {
202
+ let accessParam = this.handleCustomEvent(
203
+ this.field.options.formScriptParam
204
+ );
205
+ return this.formHttp({
206
+ // url: "/" + reportTemplate.serviceName + "/form_ins/getList",
207
+ scriptCode: scriptCode,
208
+ data: this.buildFormScriptData(reportTemplate, {
209
+ ...accessParam,
210
+ id: dataId,
211
+ }),
212
+ callback: (res) => {
213
+ let rows = res.objx || [];
214
+ this.setValue(rows);
215
+ this.handleCustomEvent(
216
+ this.field.options.formScriptSuccess,
217
+ ["res"],
218
+ [res]
219
+ );
220
+ },
221
+ });
222
+ }
223
+ },
224
+ submitFile(rows, fileInfos) {
225
+ // this.handlLineCode(fileInfos);
226
+ let eventParamNames = ["attachments", "fileInfos"];
227
+ let eventParamValues = [rows, fileInfos];
228
+ this.handleCustomEvent(
229
+ this.field.options.onAfterConfirmFile,
230
+ eventParamNames,
231
+ eventParamValues
232
+ );
233
+ },
234
+ /* 脚本 API:直接用 URL 赋值,支持单个 URL、逗号/换行分隔的多个 URL、URL 数组。
235
+ 非法输入不再抛异常,会被忽略并在控制台告警。 */
236
+ setValueByUrl(fileUrl) {
237
+ this.setValue(normalizeAttachmentValue(fileUrl));
238
+ },
239
+ /*handlLineCode(fileInfos) {
240
+ let allPromise = [];
241
+ fileInfos.forEach(async fileInfo => {
242
+ await this.processFile(fileInfo.file, (lineCode) => {
243
+ fileInfo.lineCode = lineCode;
244
+ })
245
+ })
246
+
247
+ },
248
+ processFile(file, callback) {
249
+ return new Promise((resolve, reject) => {
250
+ const reader = new FileReader();
251
+ reader.onload = (e) => this.processImage(e.target.result, (lineCode) => {
252
+ resolve(lineCode)
253
+ callback(lineCode)
254
+ });
255
+ reader.onerror = () => {
256
+ resolve(null)
257
+ callback(null)
258
+ this.setError('文件读取失败')
259
+ };
260
+ reader.readAsDataURL(file);
261
+ })
262
+ },
263
+ async processImage(base64, callback) {
264
+ try {
265
+ // 使用 ZXing 3.x 的 API
266
+ const result = await decode(base64, (result, err) => {
267
+ if (err) {
268
+ this.handleError(`条码识别失败: ${err}`);
269
+ callback && callback(null)
270
+ return;
271
+ }
272
+ this.scannedText = result.text;
273
+ this.loading = false;
274
+ callback && callback(result.text)
275
+ });
276
+ } catch (err) {
277
+ console.error(err);
278
+ callback && callback(null)
279
+ this.handleError(`条码识别失败: ${err.message}`);
280
+ }
281
+ },
282
+ handleLineCode(fileInfos) {
283
+ fileInfos.forEach(fileInfo => {
284
+ let file = fileInfo.file;
285
+ })
286
+ },
287
+ handleImage(base64, fileName, callback) {
288
+ // 创建 ZXing Scanner
289
+
290
+
291
+ // Base64 转换为 ImageLuminanceSource
292
+ // const imageData = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
293
+ // const source = new ZXing.ImageLuminanceSource(imageData, base64.length);
294
+
295
+ decode(base64, (result, err) => {
296
+ if (err) {
297
+ this.handleError(`条码识别失败: ${err}`);
298
+ callback && callback(null)
299
+ return;
300
+ }
301
+ this.scannedText = result.text;
302
+ this.loading = false;
303
+ callback && callback(result.text)
304
+ });
305
+ },
306
+
307
+ handleError(errorMessage) {
308
+ this.error = errorMessage;
309
+ this.loading = false;
310
+ },*/
311
+ },
312
+ };
313
+ </script>
314
+
315
+ <style lang="scss" scoped>
316
+ @import "~@/styles/global.scss"; //* form-item-wrapper已引入,还需要重复引入吗? *//
317
+
318
+ .full-width-input {
319
+ width: 100% !important;
320
+ }
321
+
322
+ .hideUploadDiv {
323
+ ::v-deep div.el-upload--picture-card {
324
+ /* 隐藏最后的图片上传按钮 */
325
+ display: none;
326
+ }
327
+
328
+ ::v-deep div.el-upload--text {
329
+ /* 隐藏最后的文件上传按钮 */
330
+ display: none;
331
+ }
332
+
333
+ ::v-deep div.el-upload__tip {
334
+ /* 隐藏最后的文件上传按钮提示 */
335
+ display: none;
336
+ }
337
+ }
338
+ </style>