cloud-web-corejs 1.1.0-dev.6 → 1.1.0-dev.61

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 (499) hide show
  1. package/README.md +38 -0
  2. package/bin/core-resources.js +16 -0
  3. package/bin/create-child-app.js +34 -0
  4. package/docs/child-app/README.md +95 -0
  5. package/docs/child-app/activiti-resources.md +63 -0
  6. package/docs/child-app/generate-prompt.md +55 -0
  7. package/docs/child-app/luckysheet-resources.md +80 -0
  8. package/docs/child-app/public-resources-plan.md +288 -0
  9. package/docs/child-app/resources-implementation.md +101 -0
  10. package/docs/child-app/tinymce-resources.md +88 -0
  11. package/docs/child-app/validation.md +34 -0
  12. package/docs/qiankun/346/216/245/345/205/245/345/215/217/350/256/256.md +298 -0
  13. package/docs/qiankun/350/257/246/346/203/205/346/211/277/350/275/275/345/255/220/345/272/224/347/224/250/345/257/271/346/216/245/346/270/205/345/215/225.md +111 -0
  14. package/package.json +29 -4
  15. package/resource-tools/index.js +126 -0
  16. package/src/app-bootstrap.js +531 -0
  17. package/src/app-bootstrap.sync.js +502 -0
  18. package/src/boot-assets.legacy.js +13 -0
  19. package/src/boot-assets.next.js +7 -0
  20. package/src/components/Qrcode/fileParse.vue +11 -0
  21. package/src/components/Tinymce/dynamicLoadScript.js +51 -59
  22. package/src/components/Tinymce/index.vue +382 -336
  23. package/src/components/Tinymce/mce-chrome.scss +150 -0
  24. package/src/components/VabUpload/image-viewer.vue +18 -10
  25. package/src/components/VabUpload/index.js +11 -4
  26. package/src/components/VabUpload/index.vue +1 -1
  27. package/src/components/VabUpload/mixins/fileLibraryDialog.js +2 -0
  28. package/src/components/VabUpload/mixins.js +72 -40
  29. package/src/components/VabUpload/partUploadConfig.js +95 -0
  30. package/src/components/VabUpload/privateProfileDialogMixins.js +2 -0
  31. package/src/components/VabUpload/style.scss +282 -0
  32. package/src/components/VabUpload/view.vue +19 -18
  33. package/src/components/baseArea/index.vue +2 -2
  34. package/src/components/baseInputExport/mixins.js +1 -6
  35. package/src/components/bizTab/BizTabListPage.vue +66 -33
  36. package/src/components/bizTab/README.md +3 -1
  37. package/src/components/bizTab/bizBillDetailMixin.js +2 -0
  38. package/src/components/code-editor/ace-chrome.scss +17 -0
  39. package/src/components/code-editor/index.vue +361 -340
  40. package/src/components/errorMsg/index.vue +142 -13
  41. package/src/components/errorMsg/mixins.js +53 -0
  42. package/src/components/excelExport/conditionExportConfig.js +112 -0
  43. package/src/components/excelExport/exportColumnMemory.js +118 -0
  44. package/src/components/excelExport/exportFieldDialog.vue +50 -38
  45. package/src/components/excelExport/exportType.js +8 -0
  46. package/src/components/excelExport/index.js +30 -13
  47. package/src/components/excelExport/index.vue +7 -1
  48. package/src/components/excelExport/mixins.js +782 -293
  49. package/src/components/excelImport/index.vue +156 -156
  50. package/src/components/excelImport/mixins.js +888 -834
  51. package/src/components/fileLibrary/mixins/indexMixins.js +2 -0
  52. package/src/components/fileLibrary/style.scss +579 -0
  53. package/src/components/formDialog/index.vue +11 -8
  54. package/src/components/hiprint/style.scss +188 -0
  55. package/src/components/hiprint/view/json-view.vue +4 -4
  56. package/src/components/jdPrint/mixins.js +2 -0
  57. package/src/components/jsonImport/index.vue +1 -1
  58. package/src/components/jsonImport/mixins.js +6 -10
  59. package/src/components/langImport/index.vue +1 -1
  60. package/src/components/langImport/mixins.js +6 -10
  61. package/src/components/luckysheet/loadResources.js +64 -0
  62. package/src/components/luckysheet/view.vue +239 -210
  63. package/src/components/mobile/buttonGroup/index.vue +1 -1
  64. package/src/components/mobile/wf/addTaskUserdialog.vue +100 -80
  65. package/src/components/mobile/wf/content.vue +1734 -1662
  66. package/src/components/mobile/wf/deleteTaskUserDialog.vue +73 -54
  67. package/src/components/mobile/wf/selectUserDialog.vue +118 -0
  68. package/src/components/mobile/wf/setCandidateDialog.vue +69 -48
  69. package/src/components/mobile/wf/urgingDialog.vue +75 -52
  70. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  71. package/src/components/obsUpload/index.js +4 -1
  72. package/src/components/obsUpload/index.vue +1 -1
  73. package/src/components/obsUpload/mixins.js +45 -15
  74. package/src/components/onlineTalk/index.vue +4 -4
  75. package/src/components/onlineTalk/mixins.js +21 -7
  76. package/src/components/table/index.js +96 -81
  77. package/src/components/table/plugins/cell-area/index.js +10 -3
  78. package/src/components/table/style.scss +1399 -0
  79. package/src/components/table/vxeFilter/mixin.js +28 -18
  80. package/src/components/wf/content.vue +3 -2
  81. package/src/components/wf/content2.vue +1 -1
  82. package/src/components/wf/style.scss +265 -0
  83. package/src/components/wf/wf.js +7 -0
  84. package/src/components/wf/wfActionItems.js +3 -0
  85. package/src/components/wf/wfStartDialog.vue +1 -0
  86. package/src/components/wf/wfTransferEnabled.js +54 -0
  87. package/src/components/wf/wfUtil.js +47 -29
  88. package/src/components/wf/wfVisibility.js +6 -0
  89. 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" +64 -57
  90. package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +1 -1
  91. package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +1 -1
  92. package/src/components/xform/docs/2026-09 /345/212/250/346/200/201/345/255/227/346/256/265/350/247/204/345/210/231/344/270/216/346/265/201/347/250/213/346/216/247/345/210/266/346/211/247/350/241/214/351/241/272/345/272/217/350/220/275/345/234/260/346/226/271/346/241/210.md" +409 -0
  93. package/src/components/xform/docs/2026-09 /346/235/241/344/273/266/345/257/274/345/207/272/345/244/247/346/225/260/346/215/256/351/207/217/345/264/251/346/272/203/346/216/222/346/237/245.md" +389 -0
  94. package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/344/273/243/347/240/201/350/257/204/345/256/241.md" +255 -0
  95. package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/346/265/213/350/257/225/351/252/214/350/257/201/345/256/236/346/226/275/346/226/207/346/241/243.md" +595 -0
  96. package/src/components/xform/docs/2026-09 /347/274/226/350/276/221/350/241/250/350/241/214/345/206/205/344/277/235/345/255/230/346/240/241/351/252/214/350/214/203/345/233/264/344/270/216/345/210/227/345/277/205/345/241/253/350/247/243/346/236/220/344/277/256/345/244/215.md" +233 -0
  97. package/src/components/xform/docs/2026-09 /350/241/250/345/215/225/345/257/274/345/205/245/351/200/232/351/201/223/346/242/263/347/220/206/344/270/216/350/220/275/345/234/260/346/226/271/346/241/210.md" +745 -0
  98. package/src/components/xform/docs//346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206/344/270/216/344/277/256/345/244/215/350/220/275/345/234/260/346/226/271/346/241/210.md +324 -0
  99. package/src/components/xform/form-designer/designer.js +2133 -2100
  100. package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +7 -0
  101. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +4 -2
  102. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +243 -227
  103. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +228 -207
  104. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +165 -136
  105. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +30 -4
  106. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +190 -185
  107. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +2657 -1774
  108. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +27 -4
  109. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +1 -1
  110. package/src/components/xform/form-designer/form-widget/field-widget/a-text-widget.vue +1 -1
  111. package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +1 -1
  112. package/src/components/xform/form-designer/form-widget/field-widget/autocomplete-widget.vue +1 -1
  113. package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +1 -1
  114. package/src/components/xform/form-designer/form-widget/field-widget/button-widget.vue +1 -1
  115. package/src/components/xform/form-designer/form-widget/field-widget/cascader-widget.vue +1 -1
  116. package/src/components/xform/form-designer/form-widget/field-widget/census-widget.vue +1 -1
  117. package/src/components/xform/form-designer/form-widget/field-widget/checkbox-widget.vue +1 -1
  118. package/src/components/xform/form-designer/form-widget/field-widget/color-widget.vue +1 -1
  119. package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +1 -1
  120. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +1 -1
  121. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +1 -1
  122. package/src/components/xform/form-designer/form-widget/field-widget/descriptions-widget.vue +1 -1
  123. package/src/components/xform/form-designer/form-widget/field-widget/divider-widget.vue +1 -1
  124. package/src/components/xform/form-designer/form-widget/field-widget/download-button-widget.vue +1 -1
  125. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-item-widget.vue +1 -1
  126. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-widget.vue +35 -4
  127. package/src/components/xform/form-designer/form-widget/field-widget/echart-bar-widget.vue +1 -1
  128. package/src/components/xform/form-designer/form-widget/field-widget/echart-category-widget.vue +1 -1
  129. package/src/components/xform/form-designer/form-widget/field-widget/echart-pie-widget.vue +1 -1
  130. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +64 -10
  131. package/src/components/xform/form-designer/form-widget/field-widget/file-upload-widget.vue +1 -1
  132. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +14 -4
  133. package/src/components/xform/form-designer/form-widget/field-widget/html-text-widget.vue +1 -1
  134. package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue +19 -6
  135. package/src/components/xform/form-designer/form-widget/field-widget/import2-button-widget.vue +1 -1
  136. package/src/components/xform/form-designer/form-widget/field-widget/index.js +10 -1
  137. package/src/components/xform/form-designer/form-widget/field-widget/input-batch-widget.vue +1 -1
  138. package/src/components/xform/form-designer/form-widget/field-widget/input-widget.vue +29 -3
  139. package/src/components/xform/form-designer/form-widget/field-widget/multiSearch-widget.vue +1 -1
  140. package/src/components/xform/form-designer/form-widget/field-widget/news-list-widget.vue +1 -1
  141. package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +1 -1
  142. package/src/components/xform/form-designer/form-widget/field-widget/oplog-widget.vue +1 -1
  143. package/src/components/xform/form-designer/form-widget/field-widget/picture-upload-widget.vue +1 -1
  144. package/src/components/xform/form-designer/form-widget/field-widget/print-button-widget.vue +1 -1
  145. package/src/components/xform/form-designer/form-widget/field-widget/print-detail-button-widget.vue +1 -1
  146. package/src/components/xform/form-designer/form-widget/field-widget/project-tag-widget.vue +1 -1
  147. package/src/components/xform/form-designer/form-widget/field-widget/radio-widget.vue +1 -1
  148. package/src/components/xform/form-designer/form-widget/field-widget/rate-widget.vue +1 -1
  149. package/src/components/xform/form-designer/form-widget/field-widget/rich-editor-widget.vue +1 -1
  150. package/src/components/xform/form-designer/form-widget/field-widget/row-col-select-widget.vue +64 -0
  151. package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +1 -1
  152. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +1 -1
  153. package/src/components/xform/form-designer/form-widget/field-widget/search_button-widget.vue +1 -1
  154. package/src/components/xform/form-designer/form-widget/field-widget/select-export-button-widget.vue +1 -1
  155. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -2
  156. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +1 -1
  157. package/src/components/xform/form-designer/form-widget/field-widget/singerSearch-widget.vue +1 -1
  158. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +145 -145
  159. package/src/components/xform/form-designer/form-widget/field-widget/slider-widget.vue +1 -1
  160. package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +1 -1
  161. package/src/components/xform/form-designer/form-widget/field-widget/static-text-widget.vue +1 -1
  162. package/src/components/xform/form-designer/form-widget/field-widget/status-widget.vue +1 -1
  163. package/src/components/xform/form-designer/form-widget/field-widget/switch-widget.vue +1 -1
  164. package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +3 -2
  165. package/src/components/xform/form-designer/form-widget/field-widget/tempStorage-widget.vue +1 -1
  166. package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +1 -1
  167. package/src/components/xform/form-designer/form-widget/field-widget/textarea-widget.vue +1 -1
  168. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +1 -1
  169. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +1 -1
  170. package/src/components/xform/form-designer/form-widget/field-widget/title-head-widget.vue +1 -1
  171. package/src/components/xform/form-designer/form-widget/field-widget/vabSearch-widget.vue +1 -1
  172. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -3
  173. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload2-widget.vue +25 -1
  174. package/src/components/xform/form-designer/form-widget/field-widget/vue-page-widget.vue +1 -1
  175. package/src/components/xform/form-designer/indexMixin.js +27 -0
  176. package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +687 -602
  177. package/src/components/xform/form-designer/setting-panel/form-setting.vue +269 -36
  178. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +335 -12
  179. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +23 -7
  180. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +13 -1
  181. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +846 -860
  182. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-lazyRender-editor.vue +27 -0
  183. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabChange-editor.vue +28 -0
  184. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabClick-editor.vue +28 -0
  185. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +62 -1
  186. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +142 -2
  187. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/empty-number-input.vue +51 -0
  188. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +27 -2
  189. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +33 -3
  190. package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +2 -4
  191. package/src/components/xform/form-designer/setting-panel/property-editor/suffixIconClickable-editor.vue +23 -0
  192. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +18 -4
  193. package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
  194. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +13 -0
  195. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  196. package/src/components/xform/form-designer/widget-panel/indexMixin.js +15 -2
  197. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +152 -9
  198. package/src/components/xform/form-render/container-item/containerItemMixin.js +93 -8
  199. package/src/components/xform/form-render/container-item/data-table-item.vue +352 -347
  200. package/src/components/xform/form-render/container-item/data-table-mixin.js +7261 -5985
  201. package/src/components/xform/form-render/container-item/detail-h5-item.vue +48 -19
  202. package/src/components/xform/form-render/container-item/detail-item.vue +350 -446
  203. package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +55 -1
  204. package/src/components/xform/form-render/container-item/list-h5-item.vue +261 -178
  205. package/src/components/xform/form-render/container-item/panel-item.vue +1 -1
  206. package/src/components/xform/form-render/container-item/tab-item.vue +177 -129
  207. package/src/components/xform/form-render/fieldControlEngine.js +218 -0
  208. package/src/components/xform/form-render/fieldControlMixin.js +536 -0
  209. package/src/components/xform/form-render/index.vue +164 -153
  210. package/src/components/xform/form-render/indexMixin.js +5443 -5311
  211. package/src/components/xform/form-render/pageDialogScope.js +54 -0
  212. package/src/components/xform/icon-picker/index.vue +1 -1
  213. package/src/components/xform/lang/en-US.js +8 -0
  214. package/src/components/xform/lang/zh-CN.js +9 -0
  215. package/src/components/xform/mixins/businessLock.js +59 -0
  216. package/src/components/xform/mixins/defaultHandle.js +713 -707
  217. package/src/components/xform/mixins/scriptHttp.js +42 -21
  218. package/src/components/xform/mixins/wfStart.js +105 -0
  219. package/src/components/xform/mixins/wfVisibility.js +33 -0
  220. package/src/components/xform/styles/census.scss +288 -0
  221. package/src/components/xform/styles/containers.scss +215 -0
  222. package/src/components/xform/styles/designer.scss +904 -0
  223. package/src/components/xform/styles/detail-temp.scss +71 -0
  224. package/src/components/xform/styles/h5-designer.scss +191 -0
  225. package/src/components/xform/styles/h5-runtime.scss +520 -0
  226. package/src/components/xform/styles/h5.scss +836 -516
  227. package/src/components/xform/styles/skins.scss +398 -0
  228. package/src/components/xform/styles/table-layout.scss +91 -0
  229. package/src/components/xform/styles/titles.scss +255 -0
  230. package/src/components/xform/utils/dynamicSchemaUtil.js +385 -361
  231. package/src/components/xform/utils/fixedQueryUtil.js +29 -4
  232. package/src/components/xform/utils/serviceNameCache.js +69 -0
  233. package/src/components/xform/utils/tableColumnHelper.js +46 -4
  234. package/src/components/xform/utils/util.js +1776 -1708
  235. package/src/core-resources/css/h5.scss +548 -0
  236. package/src/core-resources/css/iconfont.css +1447 -0
  237. package/src/core-resources/font/iconfont.ttf +0 -0
  238. package/src/core-resources/font/iconfont.woff +0 -0
  239. package/src/core-resources/font/iconfont.woff2 +0 -0
  240. package/src/core-resources/images/default-header.png +0 -0
  241. package/src/core-resources/images/ico-default_wenjian.svg +1 -0
  242. package/src/core-resources/images/ico-excel.svg +1 -0
  243. package/src/core-resources/images/ico-ftl.svg +7 -0
  244. package/src/core-resources/images/ico-html.svg +1 -0
  245. package/src/core-resources/images/ico-java.svg +1 -0
  246. package/src/core-resources/images/ico-music.svg +1 -0
  247. package/src/core-resources/images/ico-pdf.svg +1 -0
  248. package/src/core-resources/images/ico-photo.svg +1 -0
  249. package/src/core-resources/images/ico-ppt.svg +1 -0
  250. package/src/core-resources/images/ico-psd.svg +1 -0
  251. package/src/core-resources/images/ico-service.png +0 -0
  252. package/src/core-resources/images/ico-txt.svg +1 -0
  253. package/src/core-resources/images/ico-video.svg +1 -0
  254. package/src/core-resources/images/ico-vue.svg +8 -0
  255. package/src/core-resources/images/ico-wenjianjia.svg +1 -0
  256. package/src/core-resources/images/ico-wrod.svg +1 -0
  257. package/src/core-resources/images/ico-xml.svg +1 -0
  258. package/src/core-resources/images/ico-yasuobao.svg +1 -0
  259. package/src/core-resources/images/icon-error.png +0 -0
  260. package/src/core-resources/images/icon-tips.png +0 -0
  261. package/src/core-resources/images/nodata.png +0 -0
  262. package/src/core-resources/images/nodata2.png +0 -0
  263. package/src/directive/append-to-body/index.js +48 -0
  264. package/src/directive/el-dialog-center/index.js +3 -2
  265. package/src/directive/el-drag-dialog/drag.js +33 -4
  266. package/src/icons/index.js +9 -0
  267. package/src/icons/svg/404.svg +1 -0
  268. package/src/icons/svg/alert.svg +1 -0
  269. package/src/icons/svg/bug.svg +1 -0
  270. package/src/icons/svg/button.svg +1 -0
  271. package/src/icons/svg/card.svg +1 -0
  272. package/src/icons/svg/cascader-field.svg +1 -0
  273. package/src/icons/svg/census.svg +1 -0
  274. package/src/icons/svg/chart.svg +1 -0
  275. package/src/icons/svg/checkbox-field.svg +1 -0
  276. package/src/icons/svg/clipboard.svg +1 -0
  277. package/src/icons/svg/color-field.svg +1 -0
  278. package/src/icons/svg/component.svg +1 -0
  279. package/src/icons/svg/custom-component.svg +1 -0
  280. package/src/icons/svg/dashboard.svg +1 -0
  281. package/src/icons/svg/data-table.svg +1 -0
  282. package/src/icons/svg/date-field.svg +1 -0
  283. package/src/icons/svg/date-range-field.svg +1 -0
  284. package/src/icons/svg/descriptions.svg +1 -0
  285. package/src/icons/svg/divider.svg +1 -0
  286. package/src/icons/svg/document.svg +1 -0
  287. package/src/icons/svg/documentation.svg +1 -0
  288. package/src/icons/svg/drag.svg +1 -0
  289. package/src/icons/svg/echart-category.svg +1 -0
  290. package/src/icons/svg/echart-pie.svg +1 -0
  291. package/src/icons/svg/echart.svg +1 -0
  292. package/src/icons/svg/edit.svg +1 -0
  293. package/src/icons/svg/education.svg +1 -0
  294. package/src/icons/svg/email.svg +1 -0
  295. package/src/icons/svg/example.svg +1 -0
  296. package/src/icons/svg/excel.svg +1 -0
  297. package/src/icons/svg/exit-fullscreen.svg +1 -0
  298. package/src/icons/svg/eye-open.svg +1 -0
  299. package/src/icons/svg/eye.svg +1 -0
  300. package/src/icons/svg/file-upload-field.svg +1 -0
  301. package/src/icons/svg/form.svg +1 -0
  302. package/src/icons/svg/fullscreen.svg +1 -0
  303. package/src/icons/svg/github.svg +1 -0
  304. package/src/icons/svg/grid.svg +1 -0
  305. package/src/icons/svg/guide.svg +1 -0
  306. package/src/icons/svg/html-text.svg +1 -0
  307. package/src/icons/svg/ico-more.svg +1 -0
  308. package/src/icons/svg/ico-wenjianjia.svg +1 -0
  309. package/src/icons/svg/icon.svg +1 -0
  310. package/src/icons/svg/input-batch.svg +1 -0
  311. package/src/icons/svg/international.svg +1 -0
  312. package/src/icons/svg/language.svg +1 -0
  313. package/src/icons/svg/link.svg +1 -0
  314. package/src/icons/svg/list-export.svg +1 -0
  315. package/src/icons/svg/list.svg +1 -0
  316. package/src/icons/svg/lock.svg +1 -0
  317. package/src/icons/svg/message.svg +1 -0
  318. package/src/icons/svg/money.svg +1 -0
  319. package/src/icons/svg/nested.svg +1 -0
  320. package/src/icons/svg/news-list.svg +1 -0
  321. package/src/icons/svg/node-tree.svg +1 -0
  322. package/src/icons/svg/number-field.svg +1 -0
  323. package/src/icons/svg/password.svg +1 -0
  324. package/src/icons/svg/pdf.svg +1 -0
  325. package/src/icons/svg/people.svg +1 -0
  326. package/src/icons/svg/peoples.svg +1 -0
  327. package/src/icons/svg/picture-upload-field.svg +1 -0
  328. package/src/icons/svg/qq.svg +1 -0
  329. package/src/icons/svg/query.svg +1 -0
  330. package/src/icons/svg/radio-field.svg +1 -0
  331. package/src/icons/svg/rate-field.svg +1 -0
  332. package/src/icons/svg/redo.svg +1 -0
  333. package/src/icons/svg/rich-editor-field.svg +1 -0
  334. package/src/icons/svg/search.svg +1 -0
  335. package/src/icons/svg/searchbox.svg +1 -0
  336. package/src/icons/svg/section.svg +1 -0
  337. package/src/icons/svg/select-field.svg +1 -0
  338. package/src/icons/svg/shopping.svg +1 -0
  339. package/src/icons/svg/size.svg +1 -0
  340. package/src/icons/svg/skill.svg +1 -0
  341. package/src/icons/svg/slider-field.svg +1 -0
  342. package/src/icons/svg/slot-component.svg +1 -0
  343. package/src/icons/svg/slot-field.svg +1 -0
  344. package/src/icons/svg/star.svg +1 -0
  345. package/src/icons/svg/static-text.svg +1 -0
  346. package/src/icons/svg/status.svg +1 -0
  347. package/src/icons/svg/sub-form.svg +1 -0
  348. package/src/icons/svg/switch-field.svg +1 -0
  349. package/src/icons/svg/tab.svg +1 -0
  350. package/src/icons/svg/table.svg +1 -0
  351. package/src/icons/svg/text-field.svg +1 -0
  352. package/src/icons/svg/text.svg +1 -0
  353. package/src/icons/svg/textarea-field.svg +1 -0
  354. package/src/icons/svg/theme.svg +1 -0
  355. package/src/icons/svg/time-field.svg +1 -0
  356. package/src/icons/svg/time-range-field.svg +1 -0
  357. package/src/icons/svg/tips-text.svg +1 -0
  358. package/src/icons/svg/title-head.svg +1 -0
  359. package/src/icons/svg/tree-pane.svg +1 -0
  360. package/src/icons/svg/tree-table.svg +1 -0
  361. package/src/icons/svg/tree.svg +1 -0
  362. package/src/icons/svg/undo.svg +1 -0
  363. package/src/icons/svg/uploadbox.svg +1 -0
  364. package/src/icons/svg/user.svg +1 -0
  365. package/src/icons/svg/vf-box.svg +1 -0
  366. package/src/icons/svg/vf-dialog.svg +1 -0
  367. package/src/icons/svg/vf-drawer.svg +1 -0
  368. package/src/icons/svg/vue-sfc.svg +1 -0
  369. package/src/icons/svg/wechat.svg +1 -0
  370. package/src/icons/svg/zip.svg +1 -0
  371. package/src/index.js +2 -510
  372. package/src/index.next.js +5 -0
  373. package/src/index.sync.js +5 -0
  374. package/src/layout/components/Sidebar/default.vue +1656 -1655
  375. package/src/layout/components/TagsView/index.vue +330 -323
  376. package/src/layout/components/TagsView/style.scss +92 -0
  377. package/src/layout/components/watermark/index.vue +1 -1
  378. package/src/layout/defaultLayout.vue +2 -2
  379. package/src/router/index.js +43 -48
  380. package/src/router/modules/customer.js +12 -0
  381. package/src/store/modules/settings.js +1 -1
  382. package/src/store/modules/tagsView.js +241 -217
  383. package/src/store/modules/user.js +16 -12
  384. package/src/styles/btn.scss +315 -0
  385. package/src/styles/dialog.scss +1710 -0
  386. package/src/styles/element-ui.scss +1076 -0
  387. package/src/styles/element-variables.scss +31 -0
  388. package/src/styles/global.scss +115 -0
  389. package/src/styles/index.scss +245 -0
  390. package/src/styles/layout-skins.scss +840 -0
  391. package/src/styles/legacy-base.scss +19 -0
  392. package/src/styles/menu-icons.scss +75 -0
  393. package/src/styles/mixin.scss +80 -0
  394. package/src/styles/nprogress.scss +14 -0
  395. package/src/styles/page-shell.scss +723 -0
  396. package/src/styles/sidebar.scss +296 -0
  397. package/src/styles/split-handle.scss +52 -0
  398. package/src/styles/theme-variables.scss +7 -0
  399. package/src/styles/transition.scss +48 -0
  400. package/src/styles/utilities.scss +253 -0
  401. package/src/styles/variables.scss +72 -0
  402. package/src/utils/baseDictsCache.js +197 -0
  403. package/src/utils/chunkLoadError.js +24 -0
  404. package/src/utils/featureResources.js +57 -0
  405. package/src/utils/importLimit.js +72 -0
  406. package/src/utils/pdfUtil.js +6 -1
  407. package/src/utils/request.js +149 -9
  408. package/src/utils/resolveViewComponent.js +45 -90
  409. package/src/utils/runtimeRecovery.js +105 -0
  410. package/src/utils/swiperLoader.js +20 -0
  411. package/src/utils/vab.js +1334 -1283
  412. package/src/utils/xlsxLoader.js +29 -0
  413. package/src/views/bd/setting/formVersion/compareContMixin.scss +1 -1
  414. package/src/views/bd/setting/form_template/edit.vue +378 -356
  415. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  416. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  417. package/src/views/bd/setting/form_template/list.vue +304 -303
  418. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  419. package/src/views/bd/setting/form_template/mixins/list.js +749 -721
  420. package/src/views/bd/setting/form_template/mixins/list2.js +412 -411
  421. package/src/views/bd/setting/form_template/mixins/wf_list.js +431 -430
  422. package/src/views/mobile/user/area/dialog.vue +1 -1
  423. package/src/views/mobile/user/user/dialog.vue +1 -1
  424. package/src/views/user/bill_setting/mixins/wf.js +8 -0
  425. package/src/views/user/bill_setting/render.vue +1 -1
  426. package/src/views/user/commMenu/index.vue +3 -1
  427. package/src/views/user/commMenu/style.scss +123 -0
  428. package/src/views/user/common_attribute/edit.vue +2 -0
  429. package/src/views/user/common_attribute/itemEdit.vue +2 -0
  430. package/src/views/user/file_view_ins/list.vue +970 -970
  431. package/src/views/user/form/form_template/list.vue +527 -506
  432. package/src/views/user/form/vform/designer.vue +823 -821
  433. package/src/views/user/form/view/list.vue +24 -1
  434. package/src/views/user/home/default.vue +1124 -1117
  435. package/src/views/user/home/default2.vue +12 -8
  436. package/src/views/user/home/index.vue +102 -102
  437. package/src/views/user/home/wjl/content.vue +1581 -1569
  438. package/src/views/user/intf_permission/edit.vue +230 -0
  439. package/src/views/user/intf_permission/list.vue +196 -0
  440. package/src/views/user/menuFallback/index.vue +23 -0
  441. package/src/views/user/notify_message/dialog.vue +139 -139
  442. package/src/views/user/outLink/form_view.vue +202 -202
  443. package/src/views/user/outLink/index.vue +110 -110
  444. package/src/views/user/role/edit.vue +4 -0
  445. package/src/views/user/role/role-box.scss +83 -0
  446. package/src/views/user/role/voc_edit.vue +4 -0
  447. package/src/views/user/user/list.vue +28 -6
  448. package/src/views/user/wf/iframe/index.vue +51 -51
  449. package/src/views/user/wf/iframe/index2.vue +64 -64
  450. package/src/views/user/wf/wf_diy_attribute/edit.vue +1 -1
  451. package/src/views/user/wf/wf_manage/list2.vue +871 -871
  452. package/src/views/user/wf/wf_manage/wfContentDialog.vue +177 -126
  453. package/src/views/user/wf/wf_obj_config/activiti_wf.vue +134 -133
  454. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
  455. package/src/views/user/wf/wf_obj_config/list.vue +747 -746
  456. package/src/views/user/wf/wf_obj_config/list_form.vue +374 -373
  457. package/templates/child-app/.env +3 -0
  458. package/templates/child-app/README.md +49 -0
  459. package/templates/child-app/app.config.js +6 -0
  460. package/templates/child-app/babel.config.js +1 -0
  461. package/templates/child-app/core-resources.config.js +15 -0
  462. package/templates/child-app/gitignore +7 -0
  463. package/templates/child-app/package.json +34 -0
  464. package/templates/child-app/public/index.html +12 -0
  465. package/templates/child-app/src/assets/401_images/401.gif +0 -0
  466. package/templates/child-app/src/assets/404_images/404.png +0 -0
  467. package/templates/child-app/src/assets/404_images/404_cloud.png +0 -0
  468. package/templates/child-app/src/assets/logo.png +0 -0
  469. package/templates/child-app/src/corejsConfig.js +2 -0
  470. package/templates/child-app/src/icons/index.js +2 -0
  471. package/templates/child-app/src/icons/svg/child-demo.svg +1 -0
  472. package/templates/child-app/src/layout/index.vue +4 -0
  473. package/templates/child-app/src/main.js +5 -0
  474. package/templates/child-app/src/prefixConfig.js +13 -0
  475. package/templates/child-app/src/resources/css/login.scss +29 -0
  476. package/templates/child-app/src/resources/images/bg-login5.jpg +0 -0
  477. package/templates/child-app/src/resources/images/home-img.png +0 -0
  478. package/templates/child-app/src/router/modules/customer.js +3 -0
  479. package/templates/child-app/src/settings.js +25 -0
  480. package/templates/child-app/src/styles/app.scss +2 -0
  481. package/templates/child-app/src/views/demo/detail.vue +19 -0
  482. package/templates/child-app/src/views/demo/list.vue +38 -0
  483. package/templates/child-app/src/views/user/login/index.vue +18 -0
  484. package/templates/child-app/vue.config.js +107 -0
  485. package/src/components/xform/form-render/container-item/dynamicFieldEngine.js +0 -285
  486. package/src/components/xform/form-render/formDynamicFieldMixin.js +0 -131
  487. package/src/views/demo/bizTab/bill/billConfig.js +0 -41
  488. package/src/views/demo/bizTab/bill/detail.vue +0 -436
  489. package/src/views/demo/bizTab/bill/list.vue +0 -288
  490. package/src/views/demo/bizTab/bill/productDialog.vue +0 -176
  491. package/src/views/demo/bizTab/simple/billApi.js +0 -123
  492. package/src/views/demo/bizTab/simple/detail.vue +0 -407
  493. package/src/views/demo/bizTab/simple/list.vue +0 -217
  494. package/src/views/demo/bizTab/standalone/index.vue +0 -121
  495. package/src/views/demo/bizTab/wf/billConfig.js +0 -44
  496. package/src/views/demo/bizTab/wf/detail.vue +0 -661
  497. package/src/views/demo/bizTab/wf/list.vue +0 -242
  498. package/src/views/user/outLink/cc_form_view.vue +0 -188
  499. /package/src/{resources → core-resources}/js/base/common.js +0 -0
@@ -1,602 +1,687 @@
1
- <template>
2
- <div class="form-dynamic-field-setting">
3
- <el-form-item label="启用动态字段">
4
- <el-switch v-model="formConfig.dynamicFieldEnabled"></el-switch>
5
- <div class="tip-text">
6
- 根据表单数据/后台脚本动态控制整个表单内任意字段、容器的显隐等状态
7
- </div>
8
- </el-form-item>
9
-
10
- <template v-if="formConfig.dynamicFieldEnabled">
11
- <el-form-item label="数据来源" class="form-item-label-top">
12
- <el-radio-group v-model="formConfig.dynamicFieldSourceType" size="mini">
13
- <el-radio-button label="local">本地规则</el-radio-button>
14
- <el-radio-button label="script">后台脚本</el-radio-button>
15
- </el-radio-group>
16
- </el-form-item>
17
-
18
- <template v-if="formConfig.dynamicFieldSourceType === 'local'">
19
- <el-form-item label="字段规则" class="el-form-item-second">
20
- <el-button
21
- type="primary"
22
- plain
23
- size="mini"
24
- icon="el-icon-setting"
25
- @click="openRuleDialog"
26
- >
27
- 配置规则({{ (formConfig.dynamicFieldRules || []).length }})
28
- </el-button>
29
- </el-form-item>
30
- </template>
31
-
32
- <template v-if="formConfig.dynamicFieldSourceType === 'script'">
33
- <el-form-item class="form-item-label-top el-form-item-second" label="脚本编码">
34
- <el-input
35
- v-model="formConfig.dynamicFieldScriptCode"
36
- size="mini"
37
- placeholder="scriptCode 或 formCode/scriptCode"
38
- ></el-input>
39
- </el-form-item>
40
- <el-form-item label="额外参数" class="el-form-item-second">
41
- <a
42
- href="javascript:void(0);"
43
- class="a-link link-oneLind"
44
- @click="editDynamicFieldScriptParam"
45
- >
46
- <span>{{ formConfig.dynamicFieldScriptParam }}</span>
47
- <i class="el-icon-edit"></i>
48
- </a>
49
- <div class="tip-text">
50
- 格式: return { stage:
51
- formModel.status }
52
- </div>
53
- </el-form-item>
54
- <el-form-item class="form-item-label-top el-form-item-second" label="触发字段">
55
- <el-select
56
- v-model="formConfig.dynamicFieldTriggerFields"
57
- multiple
58
- filterable
59
- size="mini"
60
- style="width: 100%"
61
- placeholder="字段值变化时重新请求后台"
62
- >
63
- <el-option
64
- v-for="(n, idx) in treeOptions"
65
- :key="n.value + '#' + idx"
66
- :value="n.value"
67
- :label="optPlainLabel(n)"
68
- :disabled="n.isContainer"
69
- >
70
- <span
71
- :style="{ paddingLeft: n.depth * 14 + 'px' }"
72
- :class="{ 'opt-container': n.isContainer }"
73
- >
74
- <span v-if="n.isContainer" class="opt-tag"
75
- >[{{ containerTypeLabel(n.type) }}]</span
76
- >{{ n.baseLabel }}
77
- </span>
78
- </el-option>
79
- </el-select>
80
- <div class="tip-text">为空时仅在初始化时请求一次后台脚本</div>
81
- </el-form-item>
82
- <div class="tip-text">
83
- 后台返回 fieldStates 的 key
84
- 可为字段名,也可为「命名容器」名以控制其显隐(容器仅 visible 生效)
85
- </div>
86
- </template>
87
- </template>
88
-
89
- <el-dialog
90
- title="表单动态字段规则"
91
- :visible.sync="ruleDialogVisible"
92
- :append-to-body="true"
93
- width="760px"
94
- custom-class="dynamic-field-rule-dialog"
95
- >
96
- <div class="rule-list">
97
- <div
98
- v-for="(rule, rIdx) in editingRules"
99
- :key="rule.id"
100
- class="rule-card"
101
- >
102
- <div class="rule-card-header">
103
- <span class="rule-title">规则 {{ rIdx + 1 }}</span>
104
- <el-button
105
- type="text"
106
- icon="el-icon-delete"
107
- class="danger-text"
108
- @click="removeRule(rIdx)"
109
- >
110
- 删除规则
111
- </el-button>
112
- </div>
113
-
114
- <div class="rule-section">
115
- <div class="rule-section-title">
116
- <span>当满足</span>
117
- <el-radio-group v-model="rule.logic" size="mini">
118
- <el-radio-button label="and">全部条件</el-radio-button>
119
- <el-radio-button label="or">任一条件</el-radio-button>
120
- </el-radio-group>
121
- </div>
122
- <div
123
- v-for="(cond, cIdx) in rule.conditions"
124
- :key="cIdx"
125
- class="rule-row"
126
- >
127
- <el-select
128
- v-model="cond.field"
129
- filterable
130
- size="mini"
131
- placeholder="字段"
132
- class="cell-field"
133
- >
134
- <el-option
135
- v-for="(n, idx) in treeOptions"
136
- :key="n.value + '#' + idx"
137
- :value="n.value"
138
- :label="optPlainLabel(n)"
139
- :disabled="n.isContainer"
140
- >
141
- <span
142
- :style="{ paddingLeft: n.depth * 14 + 'px' }"
143
- :class="{ 'opt-container': n.isContainer }"
144
- >
145
- <span v-if="n.isContainer" class="opt-tag"
146
- >[{{ containerTypeLabel(n.type) }}]</span
147
- >{{ n.baseLabel }}
148
- </span>
149
- </el-option>
150
- </el-select>
151
- <el-select
152
- v-model="cond.operator"
153
- size="mini"
154
- placeholder="操作符"
155
- class="cell-op"
156
- >
157
- <el-option
158
- v-for="op in operatorOptions"
159
- :key="op.value"
160
- :label="op.label"
161
- :value="op.value"
162
- ></el-option>
163
- </el-select>
164
- <el-input
165
- v-model="cond.value"
166
- size="mini"
167
- placeholder="值"
168
- class="cell-value"
169
- :disabled="op_noValue(cond.operator)"
170
- ></el-input>
171
- <el-button
172
- type="text"
173
- icon="el-icon-remove-outline"
174
- class="danger-text"
175
- @click="removeCondition(rule, cIdx)"
176
- ></el-button>
177
- </div>
178
- <el-button
179
- type="text"
180
- icon="el-icon-plus"
181
- @click="addCondition(rule)"
182
- >添加条件</el-button
183
- >
184
- </div>
185
-
186
- <div class="rule-section">
187
- <div class="rule-section-title"><span>则设置字段/容器</span></div>
188
- <div
189
- v-for="(t, tIdx) in rule.targets"
190
- :key="tIdx"
191
- class="rule-row target-row"
192
- >
193
- <el-select
194
- v-model="t.field"
195
- filterable
196
- size="mini"
197
- placeholder="目标字段/容器"
198
- class="cell-field"
199
- >
200
- <el-option
201
- v-for="(n, idx) in treeOptions"
202
- :key="n.value + '#' + idx"
203
- :value="n.value"
204
- :label="optPlainLabel(n)"
205
- :disabled="n.isContainer && !n.hasName"
206
- >
207
- <span
208
- :style="{ paddingLeft: n.depth * 14 + 'px' }"
209
- :class="{ 'opt-container': n.isContainer }"
210
- >
211
- <span v-if="n.isContainer" class="opt-tag"
212
- >[{{ containerTypeLabel(n.type) }}]</span
213
- >{{ n.baseLabel }}
214
- </span>
215
- </el-option>
216
- </el-select>
217
- <span class="target-attr">
218
- <span class="attr-label">显示</span>
219
- <el-select
220
- v-model="t.visible"
221
- size="mini"
222
- class="cell-tri"
223
- clearable
224
- placeholder="不变"
225
- >
226
- <el-option label="显示" :value="true"></el-option>
227
- <el-option label="隐藏" :value="false"></el-option>
228
- </el-select>
229
- </span>
230
- <span class="target-attr">
231
- <span class="attr-label">必填</span>
232
- <el-select
233
- v-model="t.required"
234
- size="mini"
235
- class="cell-tri"
236
- clearable
237
- placeholder="不变"
238
- >
239
- <el-option label="必填" :value="true"></el-option>
240
- <el-option label="非必填" :value="false"></el-option>
241
- </el-select>
242
- </span>
243
- <span class="target-attr">
244
- <span class="attr-label">只读</span>
245
- <el-select
246
- v-model="t.readonly"
247
- size="mini"
248
- class="cell-tri"
249
- clearable
250
- placeholder="不变"
251
- >
252
- <el-option label="只读" :value="true"></el-option>
253
- <el-option label="可编辑" :value="false"></el-option>
254
- </el-select>
255
- </span>
256
- <span class="target-attr">
257
- <span class="attr-label">禁用</span>
258
- <el-select
259
- v-model="t.disabled"
260
- size="mini"
261
- class="cell-tri"
262
- clearable
263
- placeholder="不变"
264
- >
265
- <el-option label="禁用" :value="true"></el-option>
266
- <el-option label="启用" :value="false"></el-option>
267
- </el-select>
268
- </span>
269
- <el-button
270
- type="text"
271
- icon="el-icon-remove-outline"
272
- class="danger-text"
273
- @click="removeTarget(rule, tIdx)"
274
- ></el-button>
275
- </div>
276
- <el-button type="text" icon="el-icon-plus" @click="addTarget(rule)"
277
- >添加目标字段</el-button
278
- >
279
- <div class="tip-text">
280
- 目标为容器时仅「显示」生效,必填/只读/禁用将被忽略
281
- </div>
282
- </div>
283
- </div>
284
-
285
- <el-button
286
- type="primary"
287
- plain
288
- icon="el-icon-plus"
289
- size="mini"
290
- @click="addRule"
291
- style="width: 100%"
292
- >
293
- 添加规则
294
- </el-button>
295
- </div>
296
-
297
- <div slot="footer">
298
- <el-button size="mini" @click="ruleDialogVisible = false"
299
- >取消</el-button
300
- >
301
- <el-button size="mini" type="primary" @click="saveRules"
302
- >确定</el-button
303
- >
304
- </div>
305
- </el-dialog>
306
-
307
- <el-dialog
308
- title="额外参数"
309
- :visible.sync="scriptParamDialogVisible"
310
- v-if="scriptParamDialogVisible"
311
- :show-close="true"
312
- custom-class="dialog-style list-dialog"
313
- v-dialog-drag
314
- :close-on-click-modal="false"
315
- :close-on-press-escape="false"
316
- :destroy-on-close="true"
317
- :append-to-body="true"
318
- :modal-append-to-body="true"
319
- >
320
- <div class="cont">
321
- <code-editor
322
- :mode="'javascript'"
323
- :readonly="false"
324
- v-model="editingScriptParam"
325
- ref="scriptParamEditor"
326
- ></code-editor>
327
- </div>
328
- <div slot="footer" class="dialog-footer">
329
- <el-button
330
- @click="scriptParamDialogVisible = false"
331
- class="button-sty"
332
- icon="el-icon-close"
333
- >
334
- {{ i18nt("designer.hint.cancel") }}
335
- </el-button>
336
- <el-button
337
- type="primary"
338
- @click="saveDynamicFieldScriptParam"
339
- class="button-sty"
340
- icon="el-icon-check"
341
- >
342
- {{ i18nt("designer.hint.confirm") }}
343
- </el-button>
344
- </div>
345
- </el-dialog>
346
- </div>
347
- </template>
348
-
349
- <script>
350
- import i18n from "../../../../components/xform/utils/i18n";
351
- import { buildWidgetTreeOptions } from "../../../../components/xform/form-render/container-item/dynamicFieldEngine";
352
-
353
- const NO_VALUE_OPERATORS = ["empty", "notEmpty"];
354
-
355
- export default {
356
- name: "form-dynamicField-setting",
357
- mixins: [i18n],
358
- props: {
359
- designer: Object,
360
- formConfig: Object,
361
- },
362
- data() {
363
- return {
364
- ruleDialogVisible: false,
365
- scriptParamDialogVisible: false,
366
- editingScriptParam: "",
367
- editingRules: [],
368
- operatorOptions: [
369
- { label: "等于", value: "eq" },
370
- { label: "不等于", value: "ne" },
371
- { label: "大于", value: "gt" },
372
- { label: "小于", value: "lt" },
373
- { label: "大于等于", value: "ge" },
374
- { label: "小于等于", value: "le" },
375
- { label: "属于(逗号分隔)", value: "in" },
376
- { label: "不属于(逗号分隔)", value: "nin" },
377
- { label: "包含", value: "includes" },
378
- { label: "为空", value: "empty" },
379
- { label: "不为空", value: "notEmpty" },
380
- ],
381
- };
382
- },
383
- computed: {
384
- // 带层级的字段/容器候选(整个表单)
385
- treeOptions() {
386
- return buildWidgetTreeOptions(
387
- (this.designer && this.designer.widgetList) || []
388
- );
389
- },
390
- },
391
- methods: {
392
- op_noValue(operator) {
393
- return NO_VALUE_OPERATORS.indexOf(operator) > -1;
394
- },
395
- // 选中态/过滤用的纯文本标签
396
- optPlainLabel(n) {
397
- if (n.isContainer) {
398
- return "[" + this.containerTypeLabel(n.type) + "] " + n.baseLabel;
399
- }
400
- return n.baseLabel;
401
- },
402
- containerTypeLabel(type) {
403
- const map = {
404
- grid: "栅格",
405
- table: "表格布局",
406
- "h5-table": "H5表格",
407
- tab: "标签页",
408
- "tab-pane": "标签项",
409
- card: "卡片",
410
- "vf-box": "区块",
411
- panel: "面板",
412
- detail: "单据详情",
413
- "detail-plain": "单据详情(简洁)",
414
- "detail-pane": "详情面板",
415
- "detail-h5": "H5详情",
416
- "h5-card": "H5卡片",
417
- "h5-card-pane": "H5卡片面板",
418
- "sub-form": "子表单",
419
- "grid-sub-form": "网格子表单",
420
- };
421
- return map[type] || type;
422
- },
423
- genId() {
424
- return "fdr_" + Date.now() + "_" + Math.floor(Math.random() * 10000);
425
- },
426
- editDynamicFieldScriptParam() {
427
- this.editingScriptParam = this.formConfig.dynamicFieldScriptParam || "";
428
- this.scriptParamDialogVisible = true;
429
- },
430
- saveDynamicFieldScriptParam() {
431
- const codeHints = this.$refs.scriptParamEditor.getEditorAnnotations();
432
- let syntaxErrorFlag = false;
433
- if (codeHints && codeHints.length > 0) {
434
- codeHints.forEach((chItem) => {
435
- if (chItem.type === "error") {
436
- syntaxErrorFlag = true;
437
- }
438
- });
439
- if (syntaxErrorFlag) {
440
- this.$message.error(
441
- this.i18nt("designer.setting.syntaxCheckWarning")
442
- );
443
- return;
444
- }
445
- }
446
- this.formConfig.dynamicFieldScriptParam = this.editingScriptParam;
447
- this.scriptParamDialogVisible = false;
448
- },
449
- openRuleDialog() {
450
- this.editingRules = JSON.parse(
451
- JSON.stringify(this.formConfig.dynamicFieldRules || [])
452
- );
453
- this.editingRules.forEach((rule) => {
454
- if (!rule.id) rule.id = this.genId();
455
- if (!rule.logic) rule.logic = "and";
456
- if (!rule.conditions) rule.conditions = [];
457
- if (!rule.targets) rule.targets = [];
458
- });
459
- this.ruleDialogVisible = true;
460
- },
461
- addRule() {
462
- this.editingRules.push({
463
- id: this.genId(),
464
- logic: "and",
465
- conditions: [{ field: "", operator: "eq", value: "" }],
466
- targets: [
467
- {
468
- field: "",
469
- visible: undefined,
470
- required: undefined,
471
- readonly: undefined,
472
- disabled: undefined,
473
- },
474
- ],
475
- });
476
- },
477
- removeRule(idx) {
478
- this.editingRules.splice(idx, 1);
479
- },
480
- addCondition(rule) {
481
- rule.conditions.push({ field: "", operator: "eq", value: "" });
482
- },
483
- removeCondition(rule, idx) {
484
- rule.conditions.splice(idx, 1);
485
- },
486
- addTarget(rule) {
487
- rule.targets.push({
488
- field: "",
489
- visible: undefined,
490
- required: undefined,
491
- readonly: undefined,
492
- disabled: undefined,
493
- });
494
- },
495
- removeTarget(rule, idx) {
496
- rule.targets.splice(idx, 1);
497
- },
498
- saveRules() {
499
- this.formConfig.dynamicFieldRules = JSON.parse(
500
- JSON.stringify(this.editingRules)
501
- );
502
- this.ruleDialogVisible = false;
503
- },
504
- },
505
- };
506
- </script>
507
-
508
- <style lang="scss" scoped>
509
- .tip-text {
510
- font-size: 12px;
511
- color: #909399;
512
- line-height: 1.4;
513
- margin-top: 2px;
514
- }
515
-
516
- .rule-list {
517
- max-height: 56vh;
518
- overflow-y: auto;
519
- }
520
-
521
- .rule-card {
522
- border: 1px solid #ebeef5;
523
- border-radius: 4px;
524
- padding: 10px 12px;
525
- margin-bottom: 12px;
526
- background: #fafafa;
527
- }
528
-
529
- .rule-card-header {
530
- display: flex;
531
- justify-content: space-between;
532
- align-items: center;
533
- margin-bottom: 6px;
534
-
535
- .rule-title {
536
- font-weight: bold;
537
- font-size: 13px;
538
- }
539
- }
540
-
541
- .rule-section {
542
- margin-top: 6px;
543
- }
544
-
545
- .rule-section-title {
546
- display: flex;
547
- align-items: center;
548
- gap: 8px;
549
- font-size: 13px;
550
- color: #606266;
551
- margin-bottom: 6px;
552
- }
553
-
554
- .rule-row {
555
- display: flex;
556
- align-items: center;
557
- gap: 6px;
558
- margin-bottom: 6px;
559
- flex-wrap: wrap;
560
- }
561
-
562
- .cell-field {
563
- width: 180px;
564
- }
565
-
566
- .cell-op {
567
- width: 120px;
568
- }
569
-
570
- .cell-value {
571
- width: 130px;
572
- }
573
-
574
- .cell-tri {
575
- width: 92px;
576
- }
577
-
578
- .target-attr {
579
- display: flex;
580
- align-items: center;
581
- gap: 2px;
582
-
583
- .attr-label {
584
- font-size: 12px;
585
- color: #909399;
586
- }
587
- }
588
-
589
- .danger-text {
590
- color: #f56c6c;
591
- }
592
-
593
- .opt-container {
594
- color: #409eff;
595
- }
596
-
597
- .opt-tag {
598
- color: #909399;
599
- font-size: 12px;
600
- margin-right: 4px;
601
- }
602
- </style>
1
+ <template>
2
+ <div class="form-dynamic-field-setting">
3
+ <el-form-item label="启用动态字段">
4
+ <el-switch v-model="formConfig.dynamicFieldEnabled"></el-switch>
5
+ <el-tooltip content="根据表单数据动态控制字段、容器的显隐、必填、只读和禁用状态。" placement="left" popper-class="xform-setting-help">
6
+ <i class="el-icon-info setting-help-icon" tabindex="0" aria-label="动态字段说明"></i>
7
+ </el-tooltip>
8
+ </el-form-item>
9
+
10
+ <template v-if="formConfig.dynamicFieldEnabled">
11
+ <div v-if="fieldControlTreeState.error" class="tip-text tree-options-error">{{ fieldControlTreeState.error }}</div>
12
+ <el-form-item label="执行方式">
13
+ <el-select :value="formConfig.dynamicFieldRunMode || 'auto'" size="mini"
14
+ @input="$set(formConfig, 'dynamicFieldRunMode', $event)">
15
+ <el-option label="按场景默认" value="auto" />
16
+ <el-option label="仅初始化" value="initialOnly" />
17
+ <el-option label="持续生效" value="continuous" />
18
+ </el-select>
19
+ <el-tooltip content="默认:有流程仅初始化,无流程持续联动。仅初始化保留首次结果;持续模式每轮均由流程规则收尾。" placement="left" popper-class="xform-setting-help">
20
+ <i class="el-icon-info setting-help-icon" tabindex="0" aria-label="执行方式说明"></i>
21
+ </el-tooltip>
22
+ </el-form-item>
23
+ <el-form-item label="字段规则" class="el-form-item-second">
24
+ <el-button
25
+ type="primary"
26
+ plain
27
+ size="mini"
28
+ icon="el-icon-setting"
29
+ @click="openRuleDialog"
30
+ >
31
+ 配置规则({{ (formConfig.dynamicFieldRules || []).length }})
32
+ </el-button>
33
+ </el-form-item>
34
+ </template>
35
+
36
+ <el-dialog
37
+ title="表单动态字段规则"
38
+ :visible.sync="ruleDialogVisible"
39
+ :append-to-body="true"
40
+ width="880px"
41
+ top="6vh"
42
+ custom-class="dynamic-field-rule-dialog"
43
+ >
44
+ <div class="rule-dialog-summary">配置触发条件与字段状态,规则按排列顺序执行。</div>
45
+ <div class="rule-list">
46
+ <div v-if="!editingRules.length" class="rule-empty">暂无规则,点击下方「添加规则」开始配置</div>
47
+ <div
48
+ v-for="(rule, rIdx) in editingRules"
49
+ :key="rule.id"
50
+ class="rule-card"
51
+ >
52
+ <div class="rule-card-header">
53
+ <span class="rule-title">规则 {{ rIdx + 1 }}</span>
54
+ <el-button
55
+ type="text"
56
+ icon="el-icon-delete"
57
+ class="danger-text"
58
+ @click="removeRule(rIdx)"
59
+ >
60
+ 删除规则
61
+ </el-button>
62
+ </div>
63
+
64
+ <div class="rule-section">
65
+ <div class="rule-section-title">
66
+ <span>当满足</span>
67
+ <el-radio-group v-model="rule.logic" size="mini">
68
+ <el-radio-button label="and">全部条件</el-radio-button>
69
+ <el-radio-button label="or">任一条件</el-radio-button>
70
+ </el-radio-group>
71
+ </div>
72
+ <div
73
+ v-for="(cond, cIdx) in rule.conditions"
74
+ :key="cIdx"
75
+ class="rule-row condition-row"
76
+ >
77
+ <el-select
78
+ v-model="cond.field"
79
+ filterable
80
+ size="mini"
81
+ placeholder="选择条件字段"
82
+ class="cell-field"
83
+ >
84
+ <el-option
85
+ v-for="(n, idx) in treeOptions"
86
+ :key="n.value + '#' + idx"
87
+ :value="n.value"
88
+ :label="optPlainLabel(n)"
89
+ :disabled="n.isContainer"
90
+ >
91
+ <span
92
+ :style="{ paddingLeft: n.depth * 14 + 'px' }"
93
+ :class="{ 'opt-container': n.isContainer }"
94
+ >
95
+ <span v-if="n.isContainer" class="opt-tag"
96
+ >[{{ containerTypeLabel(n.type) }}]</span
97
+ >{{ n.baseLabel }}
98
+ </span>
99
+ </el-option>
100
+ </el-select>
101
+ <el-select
102
+ v-model="cond.operator"
103
+ size="mini"
104
+ placeholder="操作符"
105
+ class="cell-op"
106
+ >
107
+ <el-option
108
+ v-for="op in operatorOptions"
109
+ :key="op.value"
110
+ :label="op.label"
111
+ :value="op.value"
112
+ ></el-option>
113
+ </el-select>
114
+ <el-input
115
+ v-model="cond.value"
116
+ size="mini"
117
+ placeholder="输入比较值"
118
+ class="cell-value"
119
+ :disabled="op_noValue(cond.operator)"
120
+ ></el-input>
121
+ <el-button
122
+ type="text"
123
+ icon="el-icon-remove-outline"
124
+ class="danger-text row-remove"
125
+ aria-label="删除条件"
126
+ @click="removeCondition(rule, cIdx)"
127
+ ></el-button>
128
+ </div>
129
+ <el-button
130
+ type="text"
131
+ icon="el-icon-plus"
132
+ @click="addCondition(rule)"
133
+ >添加条件</el-button
134
+ >
135
+ </div>
136
+
137
+ <div class="rule-section">
138
+ <div class="rule-section-title"><span>则设置字段/容器</span></div>
139
+ <div
140
+ v-for="(t, tIdx) in rule.targets"
141
+ :key="tIdx"
142
+ class="rule-row target-row"
143
+ >
144
+ <el-select
145
+ v-model="t.field"
146
+ filterable
147
+ size="mini"
148
+ placeholder="目标字段/容器"
149
+ class="cell-field"
150
+ >
151
+ <el-option
152
+ v-for="(n, idx) in treeOptions"
153
+ :key="n.value + '#' + idx"
154
+ :value="n.value"
155
+ :label="optPlainLabel(n)"
156
+ :disabled="n.isContainer && !n.hasName"
157
+ >
158
+ <span
159
+ :style="{ paddingLeft: n.depth * 14 + 'px' }"
160
+ :class="{ 'opt-container': n.isContainer }"
161
+ >
162
+ <span v-if="n.isContainer" class="opt-tag"
163
+ >[{{ containerTypeLabel(n.type) }}]</span
164
+ >{{ n.baseLabel }}
165
+ </span>
166
+ </el-option>
167
+ </el-select>
168
+ <span class="target-attr">
169
+ <span class="attr-label">显示</span>
170
+ <el-select
171
+ v-model="t.visible"
172
+ size="mini"
173
+ class="cell-tri"
174
+ clearable
175
+ placeholder="不变"
176
+ >
177
+ <el-option label="显示" :value="true"></el-option>
178
+ <el-option label="隐藏" :value="false"></el-option>
179
+ </el-select>
180
+ </span>
181
+ <span class="target-attr">
182
+ <span class="attr-label">必填</span>
183
+ <el-select
184
+ v-model="t.required"
185
+ size="mini"
186
+ class="cell-tri"
187
+ clearable
188
+ placeholder="不变"
189
+ >
190
+ <el-option label="必填" :value="true"></el-option>
191
+ <el-option label="非必填" :value="false"></el-option>
192
+ </el-select>
193
+ </span>
194
+ <span class="target-attr">
195
+ <span class="attr-label">只读</span>
196
+ <el-select
197
+ v-model="t.readonly"
198
+ size="mini"
199
+ class="cell-tri"
200
+ clearable
201
+ placeholder="不变"
202
+ >
203
+ <el-option label="只读" :value="true"></el-option>
204
+ <el-option label="可编辑" :value="false"></el-option>
205
+ </el-select>
206
+ </span>
207
+ <span class="target-attr">
208
+ <span class="attr-label">禁用</span>
209
+ <el-select
210
+ v-model="t.disabled"
211
+ size="mini"
212
+ class="cell-tri"
213
+ clearable
214
+ placeholder="不变"
215
+ >
216
+ <el-option label="禁用" :value="true"></el-option>
217
+ <el-option label="启用" :value="false"></el-option>
218
+ </el-select>
219
+ </span>
220
+ <el-button
221
+ type="text"
222
+ icon="el-icon-remove-outline"
223
+ class="danger-text row-remove"
224
+ aria-label="删除目标字段"
225
+ @click="removeTarget(rule, tIdx)"
226
+ ></el-button>
227
+ </div>
228
+ <el-button type="text" icon="el-icon-plus" @click="addTarget(rule)"
229
+ >添加目标字段</el-button
230
+ >
231
+ <div class="tip-text">
232
+ 目标为容器时仅「显示」生效,必填/只读/禁用将被忽略
233
+ </div>
234
+ </div>
235
+ </div>
236
+
237
+ <el-button
238
+ type="primary"
239
+ plain
240
+ icon="el-icon-plus"
241
+ size="mini"
242
+ @click="addRule"
243
+ style="width: 100%"
244
+ >
245
+ 添加规则
246
+ </el-button>
247
+ </div>
248
+
249
+ <div slot="footer" class="rule-dialog-footer">
250
+ <span class="rule-count">共 {{ editingRules.length }} 条规则</span>
251
+ <el-button size="mini" @click="ruleDialogVisible = false"
252
+ >取消</el-button
253
+ >
254
+ <el-button size="mini" type="primary" @click="saveRules"
255
+ >确定</el-button
256
+ >
257
+ </div>
258
+ </el-dialog>
259
+
260
+ <el-dialog
261
+ title="额外参数"
262
+ :visible.sync="scriptParamDialogVisible"
263
+ v-if="scriptParamDialogVisible"
264
+ :show-close="true"
265
+ custom-class="dialog-style list-dialog"
266
+ v-dialog-drag
267
+ :close-on-click-modal="false"
268
+ :close-on-press-escape="false"
269
+ :destroy-on-close="true"
270
+ :append-to-body="true"
271
+ :modal-append-to-body="true"
272
+ >
273
+ <div class="cont">
274
+ <code-editor
275
+ :mode="'javascript'"
276
+ :readonly="false"
277
+ v-model="editingScriptParam"
278
+ ref="scriptParamEditor"
279
+ ></code-editor>
280
+ </div>
281
+ <div slot="footer" class="dialog-footer">
282
+ <el-button
283
+ @click="scriptParamDialogVisible = false"
284
+ class="button-sty"
285
+ icon="el-icon-close"
286
+ >
287
+ {{ i18nt("designer.hint.cancel") }}
288
+ </el-button>
289
+ <el-button
290
+ type="primary"
291
+ @click="saveDynamicFieldScriptParam"
292
+ class="button-sty"
293
+ icon="el-icon-check"
294
+ >
295
+ {{ i18nt("designer.hint.confirm") }}
296
+ </el-button>
297
+ </div>
298
+ </el-dialog>
299
+ </div>
300
+ </template>
301
+
302
+ <script>
303
+ import { fieldControlTreeOptions, commitLocalFieldRules } from "@base/components/xform/form-render/fieldControlEngine";
304
+ import i18n from "../../../../components/xform/utils/i18n";
305
+
306
+ const NO_VALUE_OPERATORS = ["empty", "notEmpty"];
307
+
308
+ export default {
309
+ name: "form-dynamicField-setting",
310
+ mixins: [i18n],
311
+ props: {
312
+ designer: Object,
313
+ formConfig: Object,
314
+ },
315
+ data() {
316
+ return {
317
+ ruleDialogVisible: false,
318
+ scriptParamDialogVisible: false,
319
+ editingScriptParam: "",
320
+ editingRules: [],
321
+ operatorOptions: [
322
+ { label: "等于", value: "eq" },
323
+ { label: "不等于", value: "ne" },
324
+ { label: "大于", value: "gt" },
325
+ { label: "小于", value: "lt" },
326
+ { label: "大于等于", value: "ge" },
327
+ { label: "小于等于", value: "le" },
328
+ { label: "属于(逗号分隔)", value: "in" },
329
+ { label: "不属于(逗号分隔)", value: "nin" },
330
+ { label: "包含", value: "includes" },
331
+ { label: "为空", value: "empty" },
332
+ { label: "不为空", value: "notEmpty" },
333
+ ],
334
+ };
335
+ },
336
+ computed: {
337
+ fieldControlTreeState() {
338
+ const list = (this.designer && this.designer.widgetList) || [];
339
+ try {
340
+ return { options: fieldControlTreeOptions(list), error: "" };
341
+ } catch (error) {
342
+ return { options: [], error: error.message || "动态规则目标无效" };
343
+ }
344
+ },
345
+ // 带层级的字段/容器候选(整个表单)
346
+ treeOptions() {
347
+ return this.fieldControlTreeState.options;
348
+ },
349
+ },
350
+ methods: {
351
+ op_noValue(operator) {
352
+ return NO_VALUE_OPERATORS.indexOf(operator) > -1;
353
+ },
354
+ // 选中态/过滤用的纯文本标签
355
+ optPlainLabel(n) {
356
+ if (n.isContainer) {
357
+ return "[" + this.containerTypeLabel(n.type) + "] " + n.baseLabel;
358
+ }
359
+ return n.baseLabel;
360
+ },
361
+ containerTypeLabel(type) {
362
+ const map = {
363
+ grid: "栅格",
364
+ table: "表格布局",
365
+ "h5-table": "H5表格",
366
+ tab: "标签页",
367
+ "tab-pane": "标签项",
368
+ card: "卡片",
369
+ "vf-box": "区块",
370
+ panel: "面板",
371
+ detail: "单据详情",
372
+ "detail-plain": "单据详情(简洁)",
373
+ "detail-pane": "详情面板",
374
+ "detail-h5": "H5详情",
375
+ "h5-card": "H5卡片",
376
+ "h5-card-pane": "H5卡片面板",
377
+ "sub-form": "子表单",
378
+ "grid-sub-form": "网格子表单",
379
+ };
380
+ return map[type] || type;
381
+ },
382
+ genId() {
383
+ return "fdr_" + Date.now() + "_" + Math.floor(Math.random() * 10000);
384
+ },
385
+ editDynamicFieldScriptParam() {
386
+ this.editingScriptParam = this.formConfig.dynamicFieldScriptParam || "";
387
+ this.scriptParamDialogVisible = true;
388
+ },
389
+ saveDynamicFieldScriptParam() {
390
+ const codeHints = this.$refs.scriptParamEditor.getEditorAnnotations();
391
+ let syntaxErrorFlag = false;
392
+ if (codeHints && codeHints.length > 0) {
393
+ codeHints.forEach((chItem) => {
394
+ if (chItem.type === "error") {
395
+ syntaxErrorFlag = true;
396
+ }
397
+ });
398
+ if (syntaxErrorFlag) {
399
+ this.$message.error(
400
+ this.i18nt("designer.setting.syntaxCheckWarning")
401
+ );
402
+ return;
403
+ }
404
+ }
405
+ this.formConfig.dynamicFieldScriptParam = this.editingScriptParam;
406
+ this.scriptParamDialogVisible = false;
407
+ },
408
+ openRuleDialog() {
409
+ this.editingRules = JSON.parse(
410
+ JSON.stringify(this.formConfig.dynamicFieldRules || [])
411
+ );
412
+ this.editingRules.forEach((rule) => {
413
+ if (!rule.id) rule.id = this.genId();
414
+ if (!rule.logic) rule.logic = "and";
415
+ if (!rule.conditions) rule.conditions = [];
416
+ if (!rule.targets) rule.targets = [];
417
+ });
418
+ this.ruleDialogVisible = true;
419
+ },
420
+ addRule() {
421
+ this.editingRules.push({
422
+ id: this.genId(),
423
+ logic: "and",
424
+ conditions: [{ field: "", operator: "eq", value: "" }],
425
+ targets: [
426
+ {
427
+ field: "",
428
+ visible: undefined,
429
+ required: undefined,
430
+ readonly: undefined,
431
+ disabled: undefined,
432
+ },
433
+ ],
434
+ });
435
+ },
436
+ removeRule(idx) {
437
+ this.editingRules.splice(idx, 1);
438
+ },
439
+ addCondition(rule) {
440
+ rule.conditions.push({ field: "", operator: "eq", value: "" });
441
+ },
442
+ removeCondition(rule, idx) {
443
+ rule.conditions.splice(idx, 1);
444
+ },
445
+ addTarget(rule) {
446
+ rule.targets.push({
447
+ field: "",
448
+ visible: undefined,
449
+ required: undefined,
450
+ readonly: undefined,
451
+ disabled: undefined,
452
+ });
453
+ },
454
+ removeTarget(rule, idx) {
455
+ rule.targets.splice(idx, 1);
456
+ },
457
+ saveRules() {
458
+ try {
459
+ this.formConfig.dynamicFieldRules = commitLocalFieldRules(
460
+ this.editingRules, this.designer?.widgetList || []);
461
+ this.ruleDialogVisible = false;
462
+ } catch (error) { this.$message.error(error.message); }
463
+ },
464
+ },
465
+ };
466
+ </script>
467
+
468
+ <style lang="scss" scoped>
469
+ .tip-text {
470
+ font-size: 12px;
471
+ color: #909399;
472
+ line-height: 1.4;
473
+ margin-top: 2px;
474
+ }
475
+
476
+ .tree-options-error {
477
+ color: #f56c6c;
478
+ }
479
+
480
+ .rule-list {
481
+ max-height: 56vh;
482
+ overflow-y: auto;
483
+ }
484
+
485
+ .rule-card {
486
+ border: 1px solid #ebeef5;
487
+ border-radius: 4px;
488
+ padding: 10px 12px;
489
+ margin-bottom: 12px;
490
+ background: #fafafa;
491
+ }
492
+
493
+ .rule-card-header {
494
+ display: flex;
495
+ justify-content: space-between;
496
+ align-items: center;
497
+ margin-bottom: 6px;
498
+
499
+ .rule-title {
500
+ font-weight: bold;
501
+ font-size: 13px;
502
+ }
503
+ }
504
+
505
+ .rule-section {
506
+ margin-top: 6px;
507
+ }
508
+
509
+ .rule-section-title {
510
+ display: flex;
511
+ align-items: center;
512
+ gap: 8px;
513
+ font-size: 13px;
514
+ color: #606266;
515
+ margin-bottom: 6px;
516
+ }
517
+
518
+ .rule-row {
519
+ display: flex;
520
+ align-items: center;
521
+ gap: 6px;
522
+ margin-bottom: 6px;
523
+ flex-wrap: wrap;
524
+ }
525
+
526
+ .cell-field {
527
+ width: 180px;
528
+ }
529
+
530
+ .cell-op {
531
+ width: 120px;
532
+ }
533
+
534
+ .cell-value {
535
+ width: 130px;
536
+ }
537
+
538
+ .cell-tri {
539
+ width: 92px;
540
+ }
541
+
542
+ .target-attr {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 2px;
546
+
547
+ .attr-label {
548
+ font-size: 12px;
549
+ color: #909399;
550
+ }
551
+ }
552
+
553
+ .danger-text {
554
+ color: #f56c6c;
555
+ }
556
+
557
+ .opt-container {
558
+ color: #409eff;
559
+ }
560
+
561
+ .opt-tag {
562
+ color: #909399;
563
+ font-size: 12px;
564
+ margin-right: 4px;
565
+ }
566
+ </style>
567
+
568
+ <!-- 弹框挂载到 body,以独立类名隔离样式,并覆盖设置面板的控件宽度。 -->
569
+ <style lang="scss">
570
+ .el-dialog.dynamic-field-rule-dialog {
571
+ display: flex;
572
+ flex-direction: column;
573
+ max-width: calc(100vw - 32px);
574
+ max-height: 88vh;
575
+ margin-bottom: 0;
576
+ border-radius: 8px;
577
+
578
+ > .el-dialog__header {
579
+ flex: none;
580
+ padding: 20px 24px;
581
+ border-bottom: 1px solid #ebeef5;
582
+ }
583
+
584
+ > .el-dialog__body {
585
+ display: flex;
586
+ flex-direction: column;
587
+ min-height: 0;
588
+ padding: 16px 24px;
589
+ overflow: hidden;
590
+ }
591
+
592
+ > .el-dialog__footer {
593
+ flex: none;
594
+ padding: 14px 24px;
595
+ border-top: 1px solid #ebeef5;
596
+ }
597
+
598
+ .rule-dialog-summary {
599
+ flex: none;
600
+ margin-bottom: 14px;
601
+ color: #909399;
602
+ font-size: 13px;
603
+ line-height: 20px;
604
+ }
605
+
606
+ .rule-list {
607
+ min-height: 0;
608
+ max-height: none;
609
+ overflow-y: auto;
610
+ overflow-x: hidden;
611
+ padding-right: 4px;
612
+ }
613
+
614
+ .rule-empty {
615
+ padding: 40px 12px;
616
+ text-align: center;
617
+ color: #909399;
618
+ }
619
+
620
+ .rule-card {
621
+ padding: 0 16px 16px;
622
+ margin-bottom: 16px;
623
+ border: 1px solid #e4e7ed;
624
+ border-radius: 6px;
625
+ background: #fff;
626
+ }
627
+
628
+ .rule-card-header {
629
+ min-height: 44px;
630
+ margin: 0 -16px 14px;
631
+ padding: 0 16px;
632
+ background: #f5f7fa;
633
+ border-bottom: 1px solid #ebeef5;
634
+ border-radius: 6px 6px 0 0;
635
+ }
636
+
637
+ .rule-title { font-size: 14px; color: #303133; }
638
+ .rule-section + .rule-section { margin-top: 14px; padding-top: 14px; border-top: 1px dashed #e4e7ed; }
639
+ .rule-section-title { margin-bottom: 12px; gap: 12px; }
640
+
641
+ .rule-row {
642
+ display: grid;
643
+ gap: 10px;
644
+ margin-bottom: 10px;
645
+ min-width: 0;
646
+ }
647
+
648
+ .condition-row { grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr) 28px; }
649
+ .target-row {
650
+ grid-template-columns: repeat(4, minmax(0, 1fr)) 28px;
651
+ padding: 12px;
652
+ background: #fafbfd;
653
+ border: 1px solid #ebeef5;
654
+ border-radius: 4px;
655
+ }
656
+
657
+ .target-row > .cell-field { grid-column: 1 / 5; }
658
+ .target-row > .row-remove { grid-column: 5; grid-row: 1; }
659
+ .target-attr { display: flex; flex-direction: column; align-items: stretch; gap: 6px; min-width: 0; }
660
+ .target-attr .attr-label { color: #606266; font-size: 12px; line-height: 18px; }
661
+
662
+ .rule-row .el-select,
663
+ .rule-row .el-input,
664
+ .rule-row .cell-field,
665
+ .rule-row .cell-op,
666
+ .rule-row .cell-value,
667
+ .rule-row .cell-tri { width: 100% !important; min-width: 0; margin: 0; }
668
+
669
+ .row-remove { width: 28px; margin: 0; padding: 8px 0; }
670
+ .rule-dialog-footer { display: flex; align-items: center; gap: 10px; }
671
+ .rule-dialog-footer .el-button { margin: 0; }
672
+ .rule-count { margin-right: auto; font-size: 13px; color: #909399; }
673
+
674
+ @media (max-width: 600px) {
675
+ > .el-dialog__body { padding: 12px; }
676
+ .condition-row { grid-template-columns: minmax(0, 1fr) 28px; }
677
+ .condition-row > .cell-field { grid-column: 1; }
678
+ .condition-row > .row-remove { grid-column: 2; grid-row: 1; }
679
+ .condition-row > .cell-op, .condition-row > .cell-value { grid-column: 1; }
680
+ .target-row { grid-template-columns: repeat(2, minmax(0, 1fr)) 28px; }
681
+ .target-row > .cell-field { grid-column: 1 / 3; }
682
+ .target-row > .row-remove { grid-column: 3; }
683
+ .target-attr:nth-of-type(odd) { grid-column: 1; }
684
+ .target-attr:nth-of-type(even) { grid-column: 2; }
685
+ }
686
+ }
687
+ </style>