cloud-web-corejs 1.0.54-dev.81 → 1.0.54-dev.810

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 (804) hide show
  1. package/package.json +203 -183
  2. package/src/App.vue +73 -75
  3. package/src/api/user.js +85 -40
  4. package/src/components/Qrcode/fileParse.vue +0 -1
  5. package/src/components/Tinymce/index.vue +112 -71
  6. package/src/components/VabUpload/fileLibraryDialog.vue +296 -0
  7. package/src/components/VabUpload/image-viewer.vue +3 -3
  8. package/src/components/VabUpload/index.js +69 -1
  9. package/src/components/VabUpload/index.vue +242 -231
  10. package/src/components/VabUpload/mixins/fileLibraryDialog.js +1112 -0
  11. package/src/components/VabUpload/mixins.js +2004 -9
  12. package/src/components/VabUpload/previewGroup.js +128 -0
  13. package/src/components/VabUpload/privateProfileDialog.vue +2 -2
  14. package/src/components/VabUpload/propertiesDialog.vue +1 -1
  15. package/src/components/VabUpload/view.vue +209 -120
  16. package/src/components/advancedSearchDialog/mixins.js +28 -1
  17. package/src/components/base-textarea/index.vue +104 -0
  18. package/src/components/baseAlert/index.js +44 -1
  19. package/src/components/baseAlert/index.vue +24 -20
  20. package/src/components/baseAlert/mixins.js +61 -1
  21. package/src/components/baseArea/index.vue +1683 -0
  22. package/src/components/baseAttachment/index.vue +49 -40
  23. package/src/components/baseAttachment/install.js +21 -5
  24. package/src/components/baseAttachment/mixins.js +310 -1
  25. package/src/components/baseInputBatch/mixins.js +58 -1
  26. package/src/components/baseInputExport/index.vue +21 -14
  27. package/src/components/baseInputExport/mixins.js +415 -8
  28. package/src/components/baseInputNumber/index.vue +9 -9
  29. package/src/components/baseTabs/index.vue +16 -8
  30. package/src/components/baseTabs/mixins.js +176 -1
  31. package/src/components/bizTab/BizBillActions.vue +129 -0
  32. package/src/components/bizTab/BizTabListPage.vue +391 -0
  33. package/src/components/bizTab/README.md +378 -0
  34. package/src/components/bizTab/billTableUtil.js +48 -0
  35. package/src/components/bizTab/billValidators.js +136 -0
  36. package/src/components/bizTab/bizBillDetailMixin.js +705 -0
  37. package/src/components/bizTab/index.js +24 -0
  38. package/src/components/cnPrint/index.js +44 -1
  39. package/src/components/cnPrint/mixins.js +189 -1
  40. package/src/components/code-editor/async.js +29 -0
  41. package/src/components/code-editor/index.vue +190 -62
  42. package/src/components/confirmDialog/index.js +41 -1
  43. package/src/components/confirmDialog/index.vue +24 -17
  44. package/src/components/confirmDialog/mixins.js +31 -1
  45. package/src/components/errorMsg/index.js +47 -3
  46. package/src/components/errorMsg/index.vue +78 -70
  47. package/src/components/errorMsg/mixins.js +103 -5
  48. package/src/components/excelExport/button.vue +86 -24
  49. package/src/components/excelExport/exportFieldDialog.vue +386 -211
  50. package/src/components/excelExport/exportItemConfigUtil.js +30 -0
  51. package/src/components/excelExport/exportType.js +49 -0
  52. package/src/components/excelExport/index.js +65 -6
  53. package/src/components/excelExport/index.vue +109 -26
  54. package/src/components/excelExport/mixins.js +1153 -17
  55. package/src/components/excelImport/index.js +75 -13
  56. package/src/components/excelImport/mixins.js +841 -8
  57. package/src/components/fileLibrary/categoryMoveDialog.vue +109 -109
  58. package/src/components/fileLibrary/fileHistoryDialog.vue +1 -1
  59. package/src/components/fileLibrary/fileObjAuthDialog.vue +297 -208
  60. package/src/components/fileLibrary/fileObjAuthEdit.vue +1 -1
  61. package/src/components/fileLibrary/fileObjAuthEditDialog.vue +6 -0
  62. package/src/components/fileLibrary/filterDialog.vue +454 -0
  63. package/src/components/fileLibrary/index.vue +1109 -687
  64. package/src/components/fileLibrary/mixins/categoryMoveDialogMixins.js +1 -1
  65. package/src/components/fileLibrary/mixins/fileCategoryDialogMixins.js +1 -1
  66. package/src/components/fileLibrary/mixins/fileHistoryDialogMixins.js +2 -2
  67. package/src/components/fileLibrary/mixins/fileObjAuthDialogMixin.js +339 -211
  68. package/src/components/fileLibrary/mixins/fileObjAuthEditDialogMixin.js +31 -27
  69. package/src/components/fileLibrary/mixins/fileObjAuthEditMixin.js +4 -4
  70. package/src/components/fileLibrary/mixins/indexMixins.js +230 -101
  71. package/src/components/fileLibrary/mixins/propertiesDialogMixins.js +62 -3
  72. package/src/components/fileLibrary/mixins/recycleBinDialogMixins.js +3 -3
  73. package/src/components/fileLibrary/propertiesDialog.vue +190 -145
  74. package/src/components/fileLibrary/recycleBinDialog.vue +237 -236
  75. package/src/components/fileLibrary/shareDialog.vue +1 -1
  76. package/src/components/formDialog/README.md +371 -0
  77. package/src/components/formDialog/actionButtons.js +90 -0
  78. package/src/components/formDialog/index.js +48 -0
  79. package/src/components/formDialog/index.vue +802 -0
  80. package/src/components/formDrawer/drawer.vue +722 -0
  81. package/src/components/formDrawer/index.js +50 -0
  82. package/src/components/formOplog/mixins.js +85 -4
  83. package/src/components/hiprint/css/bootstrap.min.css +6 -0
  84. package/src/components/hiprint/fonts/glyphicons-halflings-regular.eot +0 -0
  85. package/src/components/hiprint/fonts/glyphicons-halflings-regular.svg +288 -0
  86. package/src/components/hiprint/fonts/glyphicons-halflings-regular.ttf +0 -0
  87. package/src/components/hiprint/fonts/glyphicons-halflings-regular.woff +0 -0
  88. package/src/components/hiprint/fonts/glyphicons-halflings-regular.woff2 +0 -0
  89. package/src/components/hiprint/hiprint.bundle.js +15 -3
  90. package/src/components/hiprint/view/design/index.vue +146 -48
  91. package/src/components/hiprint/view/design/mixins.js +611 -1
  92. package/src/components/hiprint/view/design/preview.vue +75 -52
  93. package/src/components/hiprint/view/json-view.vue +31 -31
  94. package/src/components/jdPrint/index.js +44 -1
  95. package/src/components/jdPrint/mixins.js +208 -1
  96. package/src/components/jsonImport/exportUtil.js +106 -0
  97. package/src/components/jsonImport/index.js +212 -17
  98. package/src/components/jsonImport/mixins.js +350 -16
  99. package/src/components/langImport/index.js +80 -1
  100. package/src/components/langImport/mixins.js +487 -1
  101. package/src/components/langTag/mixins/addButton.js +51 -5
  102. package/src/components/langTag/mixins/deleteButton.js +55 -5
  103. package/src/components/langTag/mixins/view.js +47 -5
  104. package/src/components/luckysheet/dialog.vue +159 -0
  105. package/src/components/luckysheet/export.js +595 -0
  106. package/src/components/luckysheet/fileUtils.js +147 -0
  107. package/src/components/luckysheet/index.js +72 -0
  108. package/src/components/luckysheet/templateJson.js +12078 -0
  109. package/src/components/luckysheet/view.vue +210 -0
  110. package/src/components/micro-view-host/contract.js +66 -0
  111. package/src/components/micro-view-host/index.vue +148 -0
  112. package/src/components/mobile/file/index.vue +10 -0
  113. package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +51 -47
  114. package/src/components/obsUpload/index.js +34 -0
  115. package/src/components/obsUpload/index.vue +234 -0
  116. package/src/components/obsUpload/mixins.js +1542 -0
  117. package/src/components/onlineTalk/index.vue +1 -1
  118. package/src/components/onlineTalk/mixins.js +852 -1
  119. package/src/components/onlineTalk/talkUserDialog.vue +280 -0
  120. package/src/components/oplogTable/mixins.js +83 -4
  121. package/src/components/pddPrint/index.js +44 -1
  122. package/src/components/pddPrint/mixins.js +252 -1
  123. package/src/components/projectTag/mixins/addButton.js +52 -1
  124. package/src/components/projectTag/mixins/deleteButton.js +52 -1
  125. package/src/components/projectTag/mixins/view.js +43 -1
  126. package/src/components/scriptDescription/button.vue +12 -4
  127. package/src/components/scriptDescription/mixins.js +30 -1
  128. package/src/components/scriptTest/mixins.js +90 -1
  129. package/src/components/statusTag/mixins.js +66 -1
  130. package/src/components/table/CellSlot.vue +12 -9
  131. package/src/components/table/config.js +76 -1
  132. package/src/components/table/index.js +1276 -11
  133. package/src/components/table/plugins/cell-area/index.js +1055 -0
  134. package/src/components/table/plugins/cell-area/index.scss +77 -0
  135. package/src/components/table/plugins/cell-area/util.js +224 -0
  136. package/src/components/table/plugins/extend-cell-area/vxe-table-extend-cell-area.es6.min.js +11028 -0
  137. package/src/components/table/plugins/extend-cell-area/vxe-table-extend-cell-area.min.css +200 -0
  138. package/src/components/table/state.js +42 -0
  139. package/src/components/table/tableForm.vue +118 -69
  140. package/src/components/table/tableFormMixin.js +313 -1
  141. package/src/components/table/util/index.js +337 -0
  142. package/src/components/table/vxeFilter/index.js +155 -1
  143. package/src/components/table/vxeFilter/mixin.js +316 -6
  144. package/src/components/tempStorage/index.vue +76 -55
  145. package/src/components/tempStorage/tempStorageDialog.vue +179 -54
  146. package/src/components/vb-tabs/x-tabs.vue +167 -112
  147. package/src/components/vipPrint/index.js +44 -1
  148. package/src/components/vipPrint/mixins.js +268 -1
  149. package/src/components/wf/addOpinionButton.vue +57 -0
  150. package/src/components/wf/addTaskUserdialog.vue +1 -1
  151. package/src/components/wf/content.vue +848 -362
  152. package/src/components/wf/content2.vue +4 -2
  153. package/src/components/wf/mixins/addOpinionButton.js +53 -0
  154. package/src/components/wf/mixins/setCandidateButton.js +161 -0
  155. package/src/components/wf/mixins/setCandidateDialog.js +217 -5
  156. package/src/components/wf/mixins/setCandidateDialog2.js +252 -0
  157. package/src/components/wf/mixins/wfFlowEleScriptDialog.js +131 -0
  158. package/src/components/wf/mixins/wfTaskUserRangeDialog.js +69 -0
  159. package/src/components/wf/setCandidateButton.vue +40 -0
  160. package/src/components/wf/setCandidateDialog.vue +10 -0
  161. package/src/components/wf/setCandidateDialog2.vue +105 -0
  162. package/src/components/wf/wf.js +2293 -30
  163. package/src/components/wf/wfActionDropdown.vue +85 -0
  164. package/src/components/wf/wfActionItems.js +136 -0
  165. package/src/components/wf/wfAutoConfirm.js +55 -0
  166. package/src/components/wf/wfButtonName.js +60 -0
  167. package/src/components/wf/wfFlowEleScriptDialog.vue +89 -0
  168. package/src/components/wf/wfStartDialog.vue +66 -42
  169. package/src/components/wf/wfTaskUserRangeDialog.vue +65 -0
  170. package/src/components/wf/wfUserRange.js +53 -0
  171. package/src/components/wf/wfUtil.js +373 -13
  172. 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
  173. 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
  174. 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
  175. package/src/components/xform/docs/2026-08 /345/210/227/350/241/250/345/257/274/345/207/272/350/204/261/346/225/217/345/210/227/345/211/224/351/231/244/350/220/275/345/234/260/346/226/207/346/241/243.md" +173 -0
  176. 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
  177. package/src/components/xform/docs//345/220/216/345/217/260/345/255/227/346/256/265/357/274/210/345/212/250/346/200/201/347/224/237/346/210/220/357/274/211JSON /350/257/264/346/230/216.md" +1286 -0
  178. 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
  179. 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
  180. 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
  181. package/src/components/xform/form-designer/designer.js +2085 -29
  182. package/src/components/xform/form-designer/form-widget/components/gantt/index.vue +434 -0
  183. package/src/components/xform/form-designer/form-widget/container-widget/containerMixin.js +108 -1
  184. package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +291 -8
  185. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +24 -5
  186. package/src/components/xform/form-designer/form-widget/container-widget/detail-pane-widget.vue +3 -2
  187. package/src/components/xform/form-designer/form-widget/container-widget/detail-plain-widget.vue +76 -0
  188. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +62 -8
  189. package/src/components/xform/form-designer/form-widget/dialog/baseFormulaDialog copy.vue +971 -0
  190. package/src/components/xform/form-designer/form-widget/dialog/baseFormulaDialog.vue +971 -0
  191. package/src/components/xform/form-designer/form-widget/dialog/exportDialog.vue +13 -0
  192. package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +320 -0
  193. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +212 -51
  194. package/src/components/xform/form-designer/form-widget/dialog/formFieldDialog.vue +1 -1
  195. package/src/components/xform/form-designer/form-widget/dialog/formulaDialog.vue +799 -0
  196. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +30 -8
  197. package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +1774 -19
  198. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +223 -77
  199. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +3 -2
  200. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +67 -54
  201. package/src/components/xform/form-designer/form-widget/field-widget/a-text-widget.vue +1 -1
  202. package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +272 -0
  203. package/src/components/xform/form-designer/form-widget/field-widget/autocomplete-widget.vue +119 -0
  204. package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +287 -184
  205. package/src/components/xform/form-designer/form-widget/field-widget/button-widget.vue +76 -66
  206. package/src/components/xform/form-designer/form-widget/field-widget/cascader-widget.vue +209 -90
  207. package/src/components/xform/form-designer/form-widget/field-widget/census-widget.vue +41 -35
  208. package/src/components/xform/form-designer/form-widget/field-widget/checkbox-widget.vue +18 -7
  209. package/src/components/xform/form-designer/form-widget/field-widget/color-widget.vue +4 -1
  210. package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +104 -0
  211. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +16 -4
  212. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +61 -7
  213. package/src/components/xform/form-designer/form-widget/field-widget/download-button-widget.vue +133 -0
  214. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-item-widget.vue +86 -0
  215. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-widget.vue +170 -0
  216. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +1977 -16
  217. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +608 -108
  218. package/src/components/xform/form-designer/form-widget/field-widget/gantt-widget.vue +964 -0
  219. package/src/components/xform/form-designer/form-widget/field-widget/html-text-widget.vue +6 -2
  220. package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue +22 -11
  221. package/src/components/xform/form-designer/form-widget/field-widget/import2-button-widget.vue +90 -0
  222. package/src/components/xform/form-designer/form-widget/field-widget/input-widget.vue +7 -2
  223. package/src/components/xform/form-designer/form-widget/field-widget/mixins/autocomplete-mixin.js +451 -0
  224. package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +178 -0
  225. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-bar-mixin.js +3 -9
  226. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-category-mixin.js +3 -9
  227. package/src/components/xform/form-designer/form-widget/field-widget/mixins/echart-pie-mixin.js +3 -9
  228. package/src/components/xform/form-designer/form-widget/field-widget/mixins/relative-default-mixin.js +107 -0
  229. package/src/components/xform/form-designer/form-widget/field-widget/mixins/relativeDateUtil.js +321 -0
  230. package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -0
  231. package/src/components/xform/form-designer/form-widget/field-widget/mixins/utc-transform-mixin.js +75 -0
  232. package/src/components/xform/form-designer/form-widget/field-widget/mixins/vabsearch-mixin.js +192 -0
  233. package/src/components/xform/form-designer/form-widget/field-widget/multiSearch-widget.vue +53 -0
  234. package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +119 -81
  235. package/src/components/xform/form-designer/form-widget/field-widget/oplog-widget.vue +186 -0
  236. package/src/components/xform/form-designer/form-widget/field-widget/print-button-widget.vue +55 -28
  237. package/src/components/xform/form-designer/form-widget/field-widget/print-detail-button-widget.vue +119 -0
  238. package/src/components/xform/form-designer/form-widget/field-widget/project-tag-widget.vue +156 -54
  239. package/src/components/xform/form-designer/form-widget/field-widget/radio-widget.vue +26 -6
  240. package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +115 -0
  241. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +149 -0
  242. package/src/components/xform/form-designer/form-widget/field-widget/search_button-widget.vue +2 -2
  243. package/src/components/xform/form-designer/form-widget/field-widget/select-export-button-widget.vue +86 -0
  244. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +126 -0
  245. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +25 -10
  246. package/src/components/xform/form-designer/form-widget/field-widget/singerSearch-widget.vue +53 -0
  247. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +145 -0
  248. package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +16 -1
  249. package/src/components/xform/form-designer/form-widget/field-widget/static-text-widget.vue +8 -3
  250. package/src/components/xform/form-designer/form-widget/field-widget/status-widget.vue +93 -49
  251. package/src/components/xform/form-designer/form-widget/field-widget/switch-widget.vue +9 -1
  252. package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +38 -38
  253. package/src/components/xform/form-designer/form-widget/field-widget/tempStorage-widget.vue +147 -0
  254. package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +111 -34
  255. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +6 -4
  256. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +36 -5
  257. package/src/components/xform/form-designer/form-widget/field-widget/vabSearch-widget.vue +3 -171
  258. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +338 -251
  259. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload2-widget.vue +753 -0
  260. package/src/components/xform/form-designer/form-widget/field-widget/vue-page-widget.vue +231 -0
  261. package/src/components/xform/form-designer/form-widget/index.vue +6 -1
  262. package/src/components/xform/form-designer/form-widget/indexMixin.js +184 -2
  263. package/src/components/xform/form-designer/index.vue +194 -191
  264. package/src/components/xform/form-designer/indexMixin.js +860 -24
  265. package/src/components/xform/form-designer/refMixinDesign.js +27 -28
  266. package/src/components/xform/form-designer/setting-panel/action-button-config-dialog.vue +241 -0
  267. package/src/components/xform/form-designer/setting-panel/dataSource-setting.vue +397 -397
  268. package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +602 -0
  269. package/src/components/xform/form-designer/setting-panel/form-setting.vue +1791 -626
  270. package/src/components/xform/form-designer/setting-panel/index.vue +309 -305
  271. package/src/components/xform/form-designer/setting-panel/indexMixin.js +370 -12
  272. package/src/components/xform/form-designer/setting-panel/option-items-setting.vue +519 -236
  273. package/src/components/xform/form-designer/setting-panel/property-editor/a-link-editor.vue +5 -5
  274. package/src/components/xform/form-designer/setting-panel/property-editor/a-text-editor.vue +4 -4
  275. package/src/components/xform/form-designer/setting-panel/property-editor/alignType-editor.vue +1 -1
  276. package/src/components/xform/form-designer/setting-panel/property-editor/autoValueEnabled-editor.vue +38 -0
  277. package/src/components/xform/form-designer/setting-panel/property-editor/buttonIcon-editor.vue +14 -15
  278. package/src/components/xform/form-designer/setting-panel/property-editor/censusClass-editor.vue +7 -1
  279. package/src/components/xform/form-designer/setting-panel/property-editor/colorClass-editor.vue +28 -0
  280. package/src/components/xform/form-designer/setting-panel/property-editor/commonAttributeEnabled-editor.vue +41 -0
  281. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/columnRenderDialog.vue +124 -0
  282. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +729 -626
  283. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/edit-tree-button-group-config-dialog.vue +281 -0
  284. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +438 -0
  285. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/onCheckboxChange-editor.vue +1 -1
  286. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +1636 -592
  287. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +96 -74
  288. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail-pane/detail-pane-editor.vue +3 -3
  289. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail-plain/detail-plain-editor.vue +75 -0
  290. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/colHeight-editor.vue +1 -1
  291. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +14 -13
  292. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-height-editor.vue +1 -1
  293. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-offset-editor.vue +2 -2
  294. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-pull-editor.vue +2 -2
  295. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-push-editor.vue +2 -2
  296. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-span-editor.vue +4 -4
  297. package/src/components/xform/form-designer/setting-panel/property-editor/container-h5-card/h5-card-editor.vue +124 -124
  298. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +34 -46
  299. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/height-editor.vue +1 -1
  300. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/width-editor.vue +1 -1
  301. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-customClass-editor.vue +119 -119
  302. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tabClass-editor.vue +45 -45
  303. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +342 -0
  304. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellHeight-editor.vue +1 -1
  305. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellWidth-editor.vue +1 -1
  306. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree/tree-customClass-editor.vue +32 -3
  307. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree-pane/tree-pane-editor.vue +1 -1
  308. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/cancelButtonLabel-editor.vue +1 -1
  309. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/okButtonLabel-editor.vue +1 -1
  310. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/title-editor.vue +1 -1
  311. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/width-editor.vue +1 -1
  312. package/src/components/xform/form-designer/setting-panel/property-editor/containerClass-editor.vue +1 -1
  313. package/src/components/xform/form-designer/setting-panel/property-editor/copyButton-editor.vue +36 -0
  314. package/src/components/xform/form-designer/setting-panel/property-editor/customClass-editor.vue +1 -1
  315. package/src/components/xform/form-designer/setting-panel/property-editor/defaultValue-editor.vue +1 -1
  316. package/src/components/xform/form-designer/setting-panel/property-editor/descriptionsItems-editor.vue +4 -4
  317. package/src/components/xform/form-designer/setting-panel/property-editor/downloadButtonFlag-editor.vue +32 -0
  318. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +137 -0
  319. package/src/components/xform/form-designer/setting-panel/property-editor/dsName-editor.vue +1 -1
  320. package/src/components/xform/form-designer/setting-panel/property-editor/echartHeight-editor.vue +1 -1
  321. package/src/components/xform/form-designer/setting-panel/property-editor/endPlaceholder-editor.vue +1 -1
  322. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/afterColumnsCreated-editor.vue +30 -0
  323. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/eventMixin.js +2 -2
  324. package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onClick-editor.vue +23 -8
  325. package/src/components/xform/form-designer/setting-panel/property-editor/field-accessUrl/accessUrl-editor.vue +2 -2
  326. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaDataType-editor.vue +25 -0
  327. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaMinLevel-editor.vue +50 -0
  328. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaName-editor.vue +20 -0
  329. package/src/components/xform/form-designer/setting-panel/property-editor/field-autocomplete/autocomplete-vabSearchName-editor.vue +199 -0
  330. package/src/components/xform/form-designer/setting-panel/property-editor/field-baseAttachment/baseAttachment-fileTypes-editor.vue +23 -0
  331. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/addTableData-event-editor.vue +84 -85
  332. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/button-type-editor.vue +1 -1
  333. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/clickBindActions.js +262 -0
  334. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/clickBindEvent-editor.vue +97 -73
  335. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/form-host-event-editor.vue +188 -0
  336. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/icon-editor.vue +14 -15
  337. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +88 -12
  338. package/src/components/xform/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue +8 -3
  339. package/src/components/xform/form-designer/setting-panel/property-editor/field-cascader/checkStrictly-editor.vue +11 -13
  340. package/src/components/xform/form-designer/setting-panel/property-editor/field-cascader/showAllLevels-editor.vue +21 -0
  341. package/src/components/xform/form-designer/setting-panel/property-editor/field-common/keyName-editor.vue +74 -67
  342. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-dateLimit-editor.vue +179 -0
  343. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +35 -18
  344. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-format-editor.vue +1 -1
  345. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-type-editor.vue +1 -1
  346. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-valueFormat-editor.vue +1 -1
  347. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultTime-editor.vue +1 -1
  348. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +35 -18
  349. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-format-editor.vue +1 -1
  350. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-type-editor.vue +1 -1
  351. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-valueFormat-editor.vue +1 -1
  352. package/src/components/xform/form-designer/setting-panel/property-editor/field-divider/contentPosition-editor.vue +1 -1
  353. package/src/components/xform/form-designer/setting-panel/property-editor/field-dropdown-menu/dropdown-item-editor.vue +21 -0
  354. package/src/components/xform/form-designer/setting-panel/property-editor/field-dropdown-menu/dropdown-menu-editor.vue +59 -0
  355. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-bar-editor.vue +11 -11
  356. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-category-editor.vue +10 -10
  357. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-pie-editor.vue +12 -12
  358. package/src/components/xform/form-designer/setting-panel/property-editor/field-file-upload/file-upload-fileTypes-editor.vue +44 -44
  359. package/src/components/xform/form-designer/setting-panel/property-editor/field-gantt/gantt-editor.vue +36 -0
  360. package/src/components/xform/form-designer/setting-panel/property-editor/field-html-text/htmlContent-editor.vue +29 -29
  361. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +78 -24
  362. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +96 -0
  363. package/src/components/xform/form-designer/setting-panel/property-editor/field-number/controlsPosition-editor.vue +1 -1
  364. package/src/components/xform/form-designer/setting-panel/property-editor/field-picture-upload/picture-upload-fileTypes-editor.vue +44 -44
  365. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-button-editor.vue +115 -86
  366. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-detail-button-editor.vue +115 -0
  367. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/highThreshold-editor.vue +1 -1
  368. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/lowThreshold-editor.vue +1 -1
  369. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-defaultValue-editor.vue +2 -2
  370. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-max-editor.vue +1 -1
  371. package/src/components/xform/form-designer/setting-panel/property-editor/field-script/script-editor.vue +4 -4
  372. package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +55 -0
  373. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/fontSize-editor.vue +1 -1
  374. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/preWrap-editor.vue +23 -0
  375. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/textContent-editor.vue +2 -2
  376. package/src/components/xform/form-designer/setting-panel/property-editor/field-status/field-status-editor.vue +67 -41
  377. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/activeText-editor.vue +1 -1
  378. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/inactiveText-editor.vue +1 -1
  379. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/switchWidth-editor.vue +1 -1
  380. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-button-editor.vue +56 -0
  381. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +125 -0
  382. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +3 -3
  383. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +34 -18
  384. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-format-editor.vue +1 -1
  385. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-timeLimit-editor.vue +53 -0
  386. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +35 -18
  387. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-format-editor.vue +1 -1
  388. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchField-editor.vue +2 -2
  389. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchName-editor.vue +15 -3
  390. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload/field-vabUpload-editor.vue +33 -1
  391. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload/vabUpload-fileTypes-editor.vue +23 -0
  392. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload2/field-vabUpload2-editor.vue +66 -0
  393. package/src/components/xform/form-designer/setting-panel/property-editor/field-vue-page/vue-page-editor.vue +48 -0
  394. package/src/components/xform/form-designer/setting-panel/property-editor/fileMaxSize-editor.vue +1 -1
  395. package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesEditorMixin.js +116 -0
  396. package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +176 -0
  397. package/src/components/xform/form-designer/setting-panel/property-editor/fixedQuery-editor.vue +39 -0
  398. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +124 -18
  399. package/src/components/xform/form-designer/setting-panel/property-editor/formatType-editor.vue +137 -0
  400. package/src/components/xform/form-designer/setting-panel/property-editor/formula-editor.vue +972 -717
  401. package/src/components/xform/form-designer/setting-panel/property-editor/iconClass-editor.vue +1 -1
  402. package/src/components/xform/form-designer/setting-panel/property-editor/label-editor.vue +1 -1
  403. package/src/components/xform/form-designer/setting-panel/property-editor/labelAlign-editor.vue +1 -1
  404. package/src/components/xform/form-designer/setting-panel/property-editor/labelColor-editor.vue +21 -12
  405. package/src/components/xform/form-designer/setting-panel/property-editor/labelIconClass-editor.vue +17 -16
  406. package/src/components/xform/form-designer/setting-panel/property-editor/labelIconPosition-editor.vue +26 -26
  407. package/src/components/xform/form-designer/setting-panel/property-editor/labelTooltip-editor.vue +67 -13
  408. package/src/components/xform/form-designer/setting-panel/property-editor/labelWidth-editor.vue +1 -1
  409. package/src/components/xform/form-designer/setting-panel/property-editor/limit-editor.vue +2 -2
  410. package/src/components/xform/form-designer/setting-panel/property-editor/max-editor.vue +1 -1
  411. package/src/components/xform/form-designer/setting-panel/property-editor/maxLength-editor.vue +1 -1
  412. package/src/components/xform/form-designer/setting-panel/property-editor/min-editor.vue +1 -1
  413. package/src/components/xform/form-designer/setting-panel/property-editor/minLength-editor.vue +1 -1
  414. package/src/components/xform/form-designer/setting-panel/property-editor/multiple-editor.vue +19 -14
  415. package/src/components/xform/form-designer/setting-panel/property-editor/multipleLimit-editor.vue +2 -2
  416. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +135 -48
  417. package/src/components/xform/form-designer/setting-panel/property-editor/oplog-editor.vue +31 -0
  418. package/src/components/xform/form-designer/setting-panel/property-editor/placeholder-editor.vue +1 -1
  419. package/src/components/xform/form-designer/setting-panel/property-editor/precision-editor.vue +2 -2
  420. package/src/components/xform/form-designer/setting-panel/property-editor/prefixIcon-editor.vue +14 -15
  421. package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +349 -0
  422. package/src/components/xform/form-designer/setting-panel/property-editor/relative-default-block.vue +369 -0
  423. package/src/components/xform/form-designer/setting-panel/property-editor/required-editor.vue +10 -6
  424. package/src/components/xform/form-designer/setting-panel/property-editor/requiredHint-editor.vue +4 -4
  425. package/src/components/xform/form-designer/setting-panel/property-editor/rows-editor.vue +1 -1
  426. package/src/components/xform/form-designer/setting-panel/property-editor/showViewButton-editor.vue +29 -0
  427. package/src/components/xform/form-designer/setting-panel/property-editor/space-editor-editor.vue +1 -1
  428. package/src/components/xform/form-designer/setting-panel/property-editor/startPlaceholder-editor.vue +1 -1
  429. package/src/components/xform/form-designer/setting-panel/property-editor/step-editor.vue +1 -1
  430. package/src/components/xform/form-designer/setting-panel/property-editor/styleTableClass-editor.vue +1 -1
  431. package/src/components/xform/form-designer/setting-panel/property-editor/styleTitClass-editor.vue +1 -1
  432. package/src/components/xform/form-designer/setting-panel/property-editor/suffixIcon-editor.vue +14 -15
  433. package/src/components/xform/form-designer/setting-panel/property-editor/tempStorage-editor.vue +42 -0
  434. package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +304 -19
  435. package/src/components/xform/form-designer/setting-panel/property-editor/type-editor.vue +1 -1
  436. package/src/components/xform/form-designer/setting-panel/property-editor/uploadTip-editor.vue +1 -1
  437. package/src/components/xform/form-designer/setting-panel/property-editor/uploadURL-editor.vue +1 -1
  438. package/src/components/xform/form-designer/setting-panel/property-editor/urlValueEnabled-editor.vue +91 -0
  439. package/src/components/xform/form-designer/setting-panel/property-editor/utcTransformEnabled-editor.vue +19 -0
  440. package/src/components/xform/form-designer/setting-panel/property-editor/validation-editor.vue +3 -3
  441. package/src/components/xform/form-designer/setting-panel/property-editor/validationHint-editor.vue +3 -3
  442. package/src/components/xform/form-designer/setting-panel/property-editor/wfFlag-editor.vue +372 -50
  443. package/src/components/xform/form-designer/setting-panel/property-editor/widgetShowRuleFlag-editor.vue +263 -0
  444. package/src/components/xform/form-designer/setting-panel/property-editor/widgetWidth-editor.vue +1 -1
  445. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +374 -324
  446. package/src/components/xform/form-designer/setting-panel/widgetPropertyDialogMixin.js +186 -0
  447. package/src/components/xform/form-designer/toolbar-panel/index.vue +267 -103
  448. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +655 -24
  449. package/src/components/xform/form-designer/widget-panel/index.vue +391 -321
  450. package/src/components/xform/form-designer/widget-panel/indexMixin.js +335 -2
  451. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +4646 -3141
  452. package/src/components/xform/form-render/compareDelList.vue +83 -0
  453. package/src/components/xform/form-render/compareView.vue +76 -0
  454. package/src/components/xform/form-render/container-item/containerItemMixin.js +404 -11
  455. package/src/components/xform/form-render/container-item/data-table-item.vue +221 -203
  456. package/src/components/xform/form-render/container-item/data-table-mixin.js +5052 -978
  457. package/src/components/xform/form-render/container-item/detail-h5-item.vue +173 -172
  458. package/src/components/xform/form-render/container-item/detail-item.vue +446 -158
  459. package/src/components/xform/form-render/container-item/detail-pane-item.vue +17 -3
  460. package/src/components/xform/form-render/container-item/detail-plain-item.vue +92 -0
  461. package/src/components/xform/form-render/container-item/dynamicFieldEngine.js +285 -0
  462. package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +416 -0
  463. package/src/components/xform/form-render/container-item/grid-col-item.vue +10 -3
  464. package/src/components/xform/form-render/container-item/grid-item.vue +1 -1
  465. package/src/components/xform/form-render/container-item/list-h5-item.vue +1198 -419
  466. package/src/components/xform/form-render/container-item/sub-form-item.vue +10 -2
  467. package/src/components/xform/form-render/container-item/tab-item.vue +129 -88
  468. package/src/components/xform/form-render/container-item/table-cell-item.vue +38 -32
  469. package/src/components/xform/form-render/container-item/table-item.vue +7 -7
  470. package/src/components/xform/form-render/container-item/table2-cell-item.vue +53 -34
  471. package/src/components/xform/form-render/container-item/table2-item.vue +198 -99
  472. package/src/components/xform/form-render/container-item/tree-item.vue +32 -11
  473. package/src/components/xform/form-render/dynamicDialogRender.js +238 -3
  474. package/src/components/xform/form-render/dynamicDrawerRender.js +229 -0
  475. package/src/components/xform/form-render/formDynamicFieldMixin.js +131 -0
  476. package/src/components/xform/form-render/index.vue +79 -21
  477. package/src/components/xform/form-render/indexMixin.js +5299 -37
  478. package/src/components/xform/form-render/refMixin.js +34 -3
  479. package/src/components/xform/icon-picker/icons.json +284 -0
  480. package/src/components/xform/icon-picker/index.vue +145 -0
  481. package/src/components/xform/lang/en-US.js +473 -438
  482. package/src/components/xform/lang/en-US_extension.js +4 -0
  483. package/src/components/xform/lang/zh-CN.js +646 -593
  484. package/src/components/xform/mixins/defaultHandle.js +704 -2
  485. package/src/components/xform/mixins/scriptHttp.js +179 -3
  486. package/src/components/xform/utils/attachmentValueUtil.js +239 -0
  487. package/src/components/xform/utils/dynamicSchemaUtil.js +361 -0
  488. package/src/components/xform/utils/emitter.js +4 -4
  489. package/src/components/xform/utils/fixedQueryUtil.js +93 -0
  490. package/src/components/xform/utils/formHttp.js +162 -0
  491. package/src/components/xform/utils/format.js +205 -172
  492. package/src/components/xform/utils/formula-util.js +969 -0
  493. package/src/components/xform/utils/queryParamUtil.js +84 -0
  494. package/src/components/xform/utils/sfc-generator.js +2 -2
  495. package/src/components/xform/utils/smart-vue-i18n/index.js +2 -1
  496. package/src/components/xform/utils/tableCellValidateUtil.js +148 -0
  497. package/src/components/xform/utils/tableColumnHelper.js +155 -0
  498. package/src/components/xform/utils/textMaskUtil.js +182 -0
  499. package/src/components/xform/utils/treeTableUtil.js +1265 -0
  500. package/src/components/xform/utils/util.js +1663 -1
  501. package/src/components/xform/utils/validators.js +185 -4
  502. package/src/components/xform/utils/vue2js-generator.js +2 -2
  503. package/src/components/xhsPrint/index.js +44 -1
  504. package/src/components/xhsPrint/mixins.js +269 -1
  505. package/src/directive/LimitNumber/index.js +144 -1
  506. package/src/directive/el-dialog-center/index.js +34 -1
  507. package/src/directive/el-drag-dialog/drag.js +86 -1
  508. package/src/directive/el-readonly/index.js +15 -1
  509. package/src/directive/permission/hasPermi.js +34 -1
  510. package/src/index.js +407 -84
  511. package/src/lang/index.js +56 -51
  512. package/src/lang/locale/en/login.js +27 -0
  513. package/src/lang/locale/zh/login.js +26 -0
  514. package/src/layout/components/AppMain.vue +147 -111
  515. package/src/layout/components/Sidebar/default.vue +1655 -1222
  516. package/src/layout/components/Sidebar/index.vue +6 -1
  517. package/src/layout/components/TagsView/index.vue +57 -15
  518. package/src/layout/components/createCompany/createCompanyDialog.vue +157 -0
  519. package/src/layout/components/extractedCode/createDialog.vue +92 -0
  520. package/src/layout/components/extractedCode/queryDialog.vue +103 -0
  521. package/src/layout/components/extractedCode/viewDialog.vue +207 -0
  522. package/src/layout/components/langTool.vue +128 -120
  523. package/src/layout/components/watermark/index.vue +83 -0
  524. package/src/layout/defaultLayout.vue +170 -150
  525. package/src/microRouter/index.js +447 -0
  526. package/src/mixins/selectDialog/index.js +266 -1
  527. package/src/mixins/tableTree/index.js +262 -4
  528. package/src/mixins/wf/index.js +40 -6
  529. package/src/permission.js +158 -16
  530. package/src/public-path.js +38 -0
  531. package/src/resources/js/base/common.js +109 -109
  532. package/src/router/index.js +4 -7
  533. package/src/router/modules/customer.js +70 -17
  534. package/src/router/modules/system.js +4 -0
  535. package/src/store/config/index.js +945 -600
  536. package/src/store/getters.js +4 -1
  537. package/src/store/modules/micro.js +57 -0
  538. package/src/store/modules/permission.js +517 -23
  539. package/src/store/modules/settings.js +26 -1
  540. package/src/store/modules/tagsView.js +208 -5
  541. package/src/store/modules/user.js +418 -28
  542. package/src/utils/aes.js +21 -1
  543. package/src/utils/auth.js +27 -1
  544. package/src/utils/componentDialog.js +339 -0
  545. package/src/utils/global.js +370 -8
  546. package/src/utils/index.js +579 -7
  547. package/src/utils/keepAlive.js +185 -1
  548. package/src/utils/lazyPlugin.js +66 -0
  549. package/src/utils/menuAdapter.js +277 -0
  550. package/src/utils/pddLog.js +92 -0
  551. package/src/utils/pdfUtil.js +429 -0
  552. package/src/utils/repeatOpen.js +48 -0
  553. package/src/utils/request.js +417 -28
  554. package/src/utils/resolveViewComponent.js +203 -0
  555. package/src/utils/scrollUtil.js +25 -0
  556. package/src/utils/vab.js +1279 -27
  557. package/src/utils/validate.js +104 -1
  558. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  559. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  560. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  561. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  562. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  563. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  564. package/src/views/bd/project/branch/form_script/list.vue +31 -0
  565. package/src/views/bd/project/branch/form_template/list.vue +30 -0
  566. package/src/views/bd/project/branch/menu_kind/list.vue +31 -0
  567. package/src/views/bd/project/common/form_script/list.vue +16 -0
  568. package/src/views/bd/project/common/form_template/list.vue +15 -0
  569. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  570. package/src/views/bd/project/core/branchContext.js +100 -0
  571. package/src/views/bd/project/core/branchPage.js +78 -0
  572. package/src/views/bd/project/core/branchPageWrap.vue +225 -0
  573. package/src/views/bd/project/core/branchScope.js +44 -0
  574. package/src/views/bd/project/core/branchSearchPage.js +285 -0
  575. package/src/views/bd/project/core/branchSelect.vue +85 -0
  576. package/src/views/bd/project/core/branchTreeBar.vue +81 -0
  577. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  578. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  579. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  580. package/src/views/bd/setting/bd_attach_setting/dialog.vue +1 -1
  581. package/src/views/bd/setting/bd_attach_setting/edit.vue +5 -5
  582. package/src/views/bd/setting/bd_attach_setting/list.vue +28 -55
  583. package/src/views/bd/setting/bd_attach_setting/mixins/dialog.js +84 -1
  584. package/src/views/bd/setting/bd_attach_setting/mixins/edit.js +116 -5
  585. package/src/views/bd/setting/bd_attach_setting/mixins/list.js +239 -1
  586. package/src/views/bd/setting/bd_company_env/dialog.vue +174 -0
  587. package/src/views/bd/setting/bd_company_env/edit.vue +193 -0
  588. package/src/views/bd/setting/bd_company_env/list.vue +175 -0
  589. package/src/views/bd/setting/config_manage/list.vue +83 -0
  590. package/src/views/bd/setting/formVersion/button.vue +60 -0
  591. package/src/views/bd/setting/formVersion/compareBasicSection.vue +125 -0
  592. package/src/views/bd/setting/formVersion/compareCodeSection.vue +539 -0
  593. package/src/views/bd/setting/formVersion/compareContMixin.scss +65 -0
  594. package/src/views/bd/setting/formVersion/compareContent.vue +63 -0
  595. package/src/views/bd/setting/formVersion/compareDialog.vue +88 -0
  596. package/src/views/bd/setting/formVersion/compareMixin.js +93 -0
  597. package/src/views/bd/setting/formVersion/fieldCompare.vue +54 -0
  598. package/src/views/bd/setting/formVersion/formScriptCompareView.vue +94 -0
  599. package/src/views/bd/setting/formVersion/formTemplateCompareView.vue +74 -0
  600. package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +501 -0
  601. package/src/views/bd/setting/formVersion/link.vue +63 -0
  602. package/src/views/bd/setting/formVersion/preformDialog.vue +87 -0
  603. package/src/views/bd/setting/formVersion/reverButton.vue +82 -0
  604. package/src/views/bd/setting/formVersion/tableDetailDiff.js +99 -0
  605. package/src/views/bd/setting/formVersion/tableModelCompareView.vue +514 -0
  606. package/src/views/bd/setting/formVersion/textDiff.js +102 -0
  607. package/src/views/bd/setting/form_import_log/edit.vue +130 -0
  608. package/src/views/bd/setting/form_import_log/list.vue +211 -0
  609. package/src/views/bd/setting/form_script/dialog.vue +1 -1
  610. package/src/views/bd/setting/form_script/edit.vue +197 -74
  611. package/src/views/bd/setting/form_script/edit1.vue +411 -187
  612. package/src/views/bd/setting/form_script/form_list.vue +175 -85
  613. package/src/views/bd/setting/form_script/list.vue +96 -21
  614. package/src/views/bd/setting/form_script/list1.vue +207 -118
  615. package/src/views/bd/setting/form_script/mixins/dialog.js +130 -1
  616. package/src/views/bd/setting/form_script/mixins/edit.js +265 -7
  617. package/src/views/bd/setting/form_script/mixins/edit1.js +259 -9
  618. package/src/views/bd/setting/form_script/mixins/form_list.js +320 -4
  619. package/src/views/bd/setting/form_script/mixins/list.js +307 -4
  620. package/src/views/bd/setting/form_script/mixins/list1.js +512 -14
  621. package/src/views/bd/setting/form_script/mixins/list2.js +10 -1
  622. package/src/views/bd/setting/form_script/mixins/otherAuthDialog.js +194 -0
  623. package/src/views/bd/setting/form_script/mixins/preformDialog.js +34 -1
  624. package/src/views/bd/setting/form_script/otherAuthDialog.vue +83 -0
  625. package/src/views/bd/setting/form_template/batchWfObjConfigDialog.vue +3 -3
  626. package/src/views/bd/setting/form_template/dialog.vue +1 -1
  627. package/src/views/bd/setting/form_template/edit.vue +356 -184
  628. package/src/views/bd/setting/form_template/formDesignerDialog.vue +172 -0
  629. package/src/views/bd/setting/form_template/ftHistoryDialog.vue +1 -1
  630. package/src/views/bd/setting/form_template/itemList.vue +1 -1
  631. package/src/views/bd/setting/form_template/list.vue +303 -214
  632. package/src/views/bd/setting/form_template/mixins/batchWfObjConfigDialog.js +279 -1
  633. package/src/views/bd/setting/form_template/mixins/dialog.js +103 -1
  634. package/src/views/bd/setting/form_template/mixins/edit.js +280 -9
  635. package/src/views/bd/setting/form_template/mixins/editWfObjConfigDialog.js +92 -1
  636. package/src/views/bd/setting/form_template/mixins/ftHistoryDialog.js +91 -1
  637. package/src/views/bd/setting/form_template/mixins/itemEdit.js +104 -1
  638. package/src/views/bd/setting/form_template/mixins/itemList.js +234 -1
  639. package/src/views/bd/setting/form_template/mixins/list.js +721 -22
  640. package/src/views/bd/setting/form_template/mixins/list2.js +411 -0
  641. package/src/views/bd/setting/form_template/mixins/otherAuthDialog.js +193 -0
  642. package/src/views/bd/setting/form_template/mixins/preformDialog.js +28 -3
  643. package/src/views/bd/setting/form_template/mixins/wf_list.js +421 -3
  644. package/src/views/bd/setting/form_template/otherAuthDialog.vue +83 -0
  645. package/src/views/bd/setting/form_template/wfObjConfigDialog.vue +253 -254
  646. package/src/views/bd/setting/form_template/wf_list.vue +161 -127
  647. package/src/views/bd/setting/logic_param/edit.vue +146 -0
  648. package/src/views/bd/setting/logic_param/edit1.vue +106 -0
  649. package/src/views/bd/setting/logic_param/edit2.vue +139 -0
  650. package/src/views/bd/setting/logic_param/list.vue +74 -0
  651. package/src/views/bd/setting/logic_param/list1.vue +12 -0
  652. package/src/views/bd/setting/logic_param/list2.vue +12 -0
  653. package/src/views/bd/setting/logic_param/mixins/edit.js +93 -0
  654. package/src/views/bd/setting/logic_param/mixins/list.js +376 -0
  655. package/src/views/bd/setting/menu_kind/dialog.vue +1 -1
  656. package/src/views/bd/setting/menu_kind/list.vue +172 -83
  657. package/src/views/bd/setting/menu_kind/mixins/authDialog.js +300 -7
  658. package/src/views/bd/setting/menu_kind/mixins/dialog.js +139 -1
  659. package/src/views/bd/setting/menu_kind/mixins/list.js +201 -1
  660. package/src/views/bd/setting/push_data/edit.vue +139 -0
  661. package/src/views/bd/setting/push_data/list.vue +283 -0
  662. package/src/views/bd/setting/push_data_h/edit.vue +153 -0
  663. package/src/views/bd/setting/push_data_h/list.vue +293 -0
  664. package/src/views/bd/setting/request_async_setting/edit.vue +320 -0
  665. package/src/views/bd/setting/request_async_setting/list.vue +372 -0
  666. package/src/views/bd/setting/request_setting/edit.vue +300 -0
  667. package/src/views/bd/setting/request_setting/list.vue +301 -0
  668. package/src/views/bd/setting/table_model/dialog.vue +1 -1
  669. package/src/views/bd/setting/table_model/edit.vue +1066 -426
  670. package/src/views/bd/setting/table_model/list.vue +219 -128
  671. package/src/views/bd/setting/table_model/mixins/dialog.js +71 -1
  672. package/src/views/bd/setting/table_model/mixins/edit.js +1455 -13
  673. package/src/views/bd/setting/table_model/mixins/list.js +463 -2
  674. package/src/views/bd/setting/table_model/mixins/otherAuthDialog.js +201 -0
  675. package/src/views/bd/setting/table_model/mixins/zdDialog.js +146 -3
  676. package/src/views/bd/setting/table_model/otherAuthDialog.vue +83 -0
  677. package/src/views/bd/setting/table_model/zdDialog.vue +1 -1
  678. package/src/views/bd/setting/utils/index.js +75 -1
  679. package/src/views/demo/bizTab/bill/billConfig.js +41 -0
  680. package/src/views/demo/bizTab/bill/detail.vue +436 -0
  681. package/src/views/demo/bizTab/bill/list.vue +288 -0
  682. package/src/views/demo/bizTab/bill/productDialog.vue +176 -0
  683. package/src/views/demo/bizTab/simple/billApi.js +123 -0
  684. package/src/views/demo/bizTab/simple/detail.vue +407 -0
  685. package/src/views/demo/bizTab/simple/list.vue +217 -0
  686. package/src/views/demo/bizTab/standalone/index.vue +121 -0
  687. package/src/views/demo/bizTab/wf/billConfig.js +44 -0
  688. package/src/views/demo/bizTab/wf/detail.vue +661 -0
  689. package/src/views/demo/bizTab/wf/list.vue +242 -0
  690. package/src/views/support/export_template/list.vue +1 -1
  691. package/src/views/support/form-dialog-demo/demoPickerDialog.vue +72 -0
  692. package/src/views/support/form-dialog-demo/index.vue +537 -0
  693. package/src/views/user/access_log/list.vue +418 -349
  694. package/src/views/user/access_log/list2.vue +1 -1
  695. package/src/views/user/api_request/list.vue +1 -1
  696. package/src/views/user/area/dialog.vue +223 -117
  697. package/src/views/user/area/list.vue +318 -0
  698. package/src/views/user/bill_setting/list.vue +1 -1
  699. package/src/views/user/bill_setting/userDialog.vue +1 -1
  700. package/src/views/user/code_rules/list.vue +1 -1
  701. package/src/views/user/commMenu/index.vue +2 -2
  702. package/src/views/user/common_attribute/list.vue +6 -3
  703. package/src/views/user/common_script/list.vue +1 -1
  704. package/src/views/user/company_info/dialog.vue +195 -163
  705. package/src/views/user/company_info/edit.vue +149 -88
  706. package/src/views/user/country/dialog.vue +1 -1
  707. package/src/views/user/country/list.vue +1 -1
  708. package/src/views/user/data_type_setting/dialog.vue +1 -1
  709. package/src/views/user/extend_datasource/dialog.vue +4 -1
  710. package/src/views/user/extend_datasource/edit.vue +2 -1
  711. package/src/views/user/extend_datasource/list.vue +4 -1
  712. package/src/views/user/fieldTranslation/editDialog.vue +8 -8
  713. package/src/views/user/fieldTranslation/list.vue +34 -34
  714. package/src/views/user/field_values_invisible/list.vue +1 -1
  715. package/src/views/user/file_type/list.vue +1 -1
  716. package/src/views/user/file_view_area/list.vue +1 -1
  717. package/src/views/user/file_view_ins/list.vue +22 -1
  718. package/src/views/user/form/form_template/dialog.vue +1 -1
  719. package/src/views/user/form/form_template/itemList.vue +1 -1
  720. package/src/views/user/form/form_template/list.vue +1 -1
  721. package/src/views/user/form/form_template_field/dialog.vue +1 -1
  722. package/src/views/user/form/form_type/dialog.vue +1 -1
  723. package/src/views/user/form/form_type/list.vue +1 -1
  724. package/src/views/user/form/report_requestaccess/dialog.vue +1 -1
  725. package/src/views/user/form/report_requestaccess/list.vue +1 -1
  726. package/src/views/user/form/vform/designer.vue +821 -749
  727. package/src/views/user/form/vform/formFieldMapping.js +2 -3
  728. package/src/views/user/form/vform/out_render.vue +1 -1
  729. package/src/views/user/form/vform/render.vue +80 -52
  730. package/src/views/user/form/view/edit.vue +56 -37
  731. package/src/views/user/form/view/list.vue +475 -54
  732. package/src/views/user/groups/dialog.vue +1 -1
  733. package/src/views/user/groups/list.vue +1 -1
  734. package/src/views/user/home/default.vue +1117 -979
  735. package/src/views/user/home/default2.vue +1158 -0
  736. package/src/views/user/home/dev.vue +29 -0
  737. package/src/views/user/home/index.vue +20 -16
  738. package/src/views/user/home/wjl/content.vue +1206 -0
  739. package/src/views/user/lang_tag/dialog.vue +1 -1
  740. package/src/views/user/lang_tag/list.vue +1 -1
  741. package/src/views/user/language_setting/list.vue +1 -1
  742. package/src/views/user/login/default.vue +165 -44
  743. package/src/views/user/login/index.vue +4 -6
  744. package/src/views/user/login/indexMixin.js +582 -380
  745. package/src/views/user/menu/list.vue +51 -2
  746. package/src/views/user/menu/voc_list.vue +686 -0
  747. package/src/views/user/menuFallback/index.vue +123 -0
  748. package/src/views/user/mobile_menu/list.vue +1 -1
  749. package/src/views/user/notify_message/dialog.vue +65 -22
  750. package/src/views/user/notify_message/list.vue +1 -1
  751. package/src/views/user/notify_template/edit.vue +188 -187
  752. package/src/views/user/notify_template/edit2.vue +176 -0
  753. package/src/views/user/notify_template/list.vue +5 -2
  754. package/src/views/user/notify_template/list2.vue +190 -0
  755. package/src/views/user/oplog/list.vue +1 -1
  756. package/src/views/user/outLink/cc_form_view.vue +188 -0
  757. package/src/views/user/outLink/form_view.vue +202 -211
  758. package/src/views/user/outLink/index.vue +62 -18
  759. package/src/views/user/outLink/view.vue +5 -13
  760. package/src/views/user/position/dialog.vue +1 -1
  761. package/src/views/user/position/list.vue +5 -5
  762. package/src/views/user/project_tag/dialog.vue +10 -5
  763. package/src/views/user/project_tag/edit.vue +2 -2
  764. package/src/views/user/project_tag/list.vue +10 -5
  765. package/src/views/user/push_setting/list.vue +1 -1
  766. package/src/views/user/request_setting/edit.vue +258 -0
  767. package/src/views/user/request_setting/list.vue +248 -0
  768. package/src/views/user/role/authConfig.vue +89 -0
  769. package/src/views/user/role/dialog.vue +70 -48
  770. package/src/views/user/role/edit.vue +632 -429
  771. package/src/views/user/role/list.vue +149 -71
  772. package/src/views/user/role/voc_edit.vue +293 -0
  773. package/src/views/user/sale_org/dialog.vue +2 -2
  774. package/src/views/user/sale_org/list.vue +5 -2
  775. package/src/views/user/system_notice/infoDialog.vue +61 -1
  776. package/src/views/user/system_notice/list.vue +1 -1
  777. package/src/views/user/system_parameter/list.vue +1 -1
  778. package/src/views/user/user/dialog.vue +47 -24
  779. package/src/views/user/user/edit.vue +1485 -1021
  780. package/src/views/user/user/form_dialog.vue +158 -0
  781. package/src/views/user/user/form_info.vue +210 -0
  782. package/src/views/user/user/form_list.vue +1 -1
  783. package/src/views/user/user/info.vue +253 -140
  784. package/src/views/user/user/list.vue +652 -563
  785. package/src/views/user/user/modifyPasswordDialog.vue +64 -53
  786. package/src/views/user/user_log_classify/list.vue +1 -1
  787. package/src/views/user/wf/iframe/index.vue +6 -1
  788. package/src/views/user/wf/iframe/index2.vue +6 -1
  789. package/src/views/user/wf/wfReport/index.vue +648 -0
  790. package/src/views/user/wf/wf_auto_submit_data/list.vue +4 -2
  791. package/src/views/user/wf/wf_manage/list.vue +699 -256
  792. package/src/views/user/wf/wf_manage/list2.vue +875 -0
  793. package/src/views/user/wf/wf_manage/wfContentDialog.vue +47 -22
  794. package/src/views/user/wf/wf_obj_config/dialog.vue +1 -1
  795. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +109 -0
  796. package/src/views/user/wf/wf_obj_config/itemEdit.vue +25 -1
  797. package/src/views/user/wf/wf_obj_config/list.vue +115 -10
  798. package/src/views/user/wf/wf_obj_config/list_form.vue +1 -1
  799. package/src/views/user/wf/wf_transfer_setting/edit.vue +282 -0
  800. package/src/views/user/wf/wf_transfer_setting/list.vue +319 -0
  801. package/src/views/user/workbench_menu/list.vue +555 -0
  802. package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +0 -207
  803. package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1347
  804. package/src/utils/wf.js +0 -21
@@ -0,0 +1,1683 @@
1
+ <template>
2
+ <div class="base-area">
3
+ <el-popover
4
+ ref="popoverRef"
5
+ v-model="popoverVisible"
6
+ placement="bottom-start"
7
+ trigger="click"
8
+ popper-class="base-area-popover"
9
+ :width="popoverWidth"
10
+ :disabled="disabled || readonly"
11
+ @show="handlePopoverShow"
12
+ @hide="handlePopoverHide"
13
+ >
14
+ <div class="base-area-panel">
15
+ <div class="base-area-search">
16
+ <el-input
17
+ ref="searchInputRef"
18
+ v-model="searchKeyword"
19
+ class="base-area-search-input"
20
+ size="small"
21
+ clearable
22
+ :placeholder="searchPlaceholder"
23
+ @input="handleSearchInput"
24
+ @clear="handleSearchClear"
25
+ @focus="searchDropdownVisible = true"
26
+ />
27
+ <transition name="base-area-fade">
28
+ <div
29
+ v-show="showSearchDropdown"
30
+ class="base-area-search-dropdown"
31
+ v-loading="searchLoading"
32
+ >
33
+ <div
34
+ v-for="item in searchList"
35
+ :key="'search-' + item.id"
36
+ class="base-area-result-item"
37
+ :class="{ on: isSearchItemActive(item) }"
38
+ @mousedown.prevent
39
+ @click="selectSearchItem(item)"
40
+ >
41
+ {{ item.fullName || item.name }}
42
+ </div>
43
+ <div
44
+ v-if="!searchLoading && !searchList.length"
45
+ class="base-area-dropdown-empty"
46
+ >
47
+ {{ emptyText }}
48
+ </div>
49
+ </div>
50
+ </transition>
51
+ </div>
52
+ <div class="base-area-path">
53
+ <div class="base-area-tabs">
54
+ <template v-for="(tab, index) in tabs">
55
+ <span
56
+ v-if="index > 0"
57
+ :key="'sep-' + index"
58
+ class="base-area-path-sep"
59
+ >/</span
60
+ >
61
+ <span
62
+ :key="'tab-' + index"
63
+ class="base-area-tab"
64
+ :class="{
65
+ active: activeLevel === index + 1,
66
+ selected: !!tab.selected,
67
+ disabled: !isTabEnabled(index + 1),
68
+ }"
69
+ @click="switchLevel(index + 1)"
70
+ >{{ getTabLabel(tab) }}</span
71
+ >
72
+ </template>
73
+ </div>
74
+ </div>
75
+ <div class="base-area-grid-wrap">
76
+ <div class="base-area-grid" v-loading="browseLoading">
77
+ <div
78
+ v-for="item in levelItems"
79
+ :key="item.id"
80
+ class="base-area-item"
81
+ :class="{ on: isSelected(item) }"
82
+ @click="selectItem(item)"
83
+ >
84
+ <span>{{ item.name }}</span>
85
+ </div>
86
+ <div
87
+ v-if="!browseLoading && !levelItems.length"
88
+ class="base-area-empty"
89
+ >
90
+ {{ emptyText }}
91
+ </div>
92
+ </div>
93
+ </div>
94
+ <div class="base-area-level-nav">
95
+ <el-button
96
+ size="mini"
97
+ class="base-area-nav-btn"
98
+ :disabled="!canPrevLevel"
99
+ @mousedown.prevent
100
+ @click="prevLevel"
101
+ >
102
+ <i class="el-icon-arrow-left"></i>
103
+ </el-button>
104
+ <span class="base-area-level-label">{{ currentLevelLabel }}</span>
105
+ <el-button
106
+ size="mini"
107
+ class="base-area-nav-btn"
108
+ :disabled="!canNextLevel"
109
+ @mousedown.prevent
110
+ @click="nextLevel"
111
+ >
112
+ <i class="el-icon-arrow-right"></i>
113
+ </el-button>
114
+ </div>
115
+ <div class="base-area-footer">
116
+ <el-button
117
+ type="primary"
118
+ plain
119
+ class="button-sty"
120
+ @mousedown.prevent
121
+ @click="cancelSelection"
122
+ >
123
+ <i class="el-icon-close el-icon"></i>
124
+ {{ cancelText }}
125
+ </el-button>
126
+ <el-button
127
+ type="primary"
128
+ class="button-sty"
129
+ :disabled="!canConfirm"
130
+ @mousedown.prevent
131
+ @click="confirmSelection"
132
+ >
133
+ <i class="el-icon-check el-icon"></i>
134
+ {{ confirmText }}
135
+ </el-button>
136
+ </div>
137
+ </div>
138
+ <div slot="reference" class="base-area-trigger">
139
+ <el-input
140
+ ref="inputRef"
141
+ class="base-area-input"
142
+ :class="{ 'is-focus': referenceFocused }"
143
+ :value="displayText"
144
+ :size="size"
145
+ :disabled="disabled"
146
+ :placeholder="placeholder"
147
+ readonly
148
+ @focus="referenceFocused = true"
149
+ @blur="referenceFocused = false"
150
+ >
151
+ <i
152
+ v-if="showClearIcon"
153
+ slot="suffix"
154
+ class="el-input__icon el-icon-circle-close base-area-clear"
155
+ @mousedown.prevent
156
+ @click.stop="handleClear"
157
+ />
158
+ </el-input>
159
+ </div>
160
+ </el-popover>
161
+ </div>
162
+ </template>
163
+
164
+ <script>
165
+ const LEVEL_LABELS = ["省份", "城市", "区县", "乡镇"];
166
+ const AREA_LEVEL_KEYS = ["province", "city", "district", "town"];
167
+ const MAX_AREA_DEPTH = 4;
168
+ const SEARCH_DEBOUNCE = 300;
169
+
170
+ export default {
171
+ name: "baseArea",
172
+ props: {
173
+ value: {
174
+ type: [String, Number],
175
+ default: null,
176
+ },
177
+ labelValue: {
178
+ type: String,
179
+ default: null,
180
+ },
181
+ maxLevel: {
182
+ type: Number,
183
+ default: 4,
184
+ },
185
+ /** 至少选到该层级才提交值(1-4);分支无下级数据时视为末级 */
186
+ minLevel: {
187
+ type: Number,
188
+ default: 1,
189
+ },
190
+ locale: {
191
+ type: String,
192
+ default: null,
193
+ },
194
+ disabled: {
195
+ type: Boolean,
196
+ default: false,
197
+ },
198
+ readonly: {
199
+ type: Boolean,
200
+ default: false,
201
+ },
202
+ clearable: {
203
+ type: Boolean,
204
+ default: true,
205
+ },
206
+ placeholder: {
207
+ type: String,
208
+ default: "请选择地区",
209
+ },
210
+ searchPlaceholder: {
211
+ type: String,
212
+ default: "请输入地区名称",
213
+ },
214
+ emptyText: {
215
+ type: String,
216
+ default: "暂无匹配地区",
217
+ },
218
+ confirmText: {
219
+ type: String,
220
+ default: "确 定",
221
+ },
222
+ cancelText: {
223
+ type: String,
224
+ default: "取 消",
225
+ },
226
+ size: {
227
+ type: String,
228
+ default: "small",
229
+ },
230
+ popoverWidth: {
231
+ type: Number,
232
+ default: 630,
233
+ },
234
+ /** leaf: 绑定末级 id;path: 兼容旧版逗号分隔路径 */
235
+ valueFormat: {
236
+ type: String,
237
+ default: "leaf",
238
+ },
239
+ },
240
+ data() {
241
+ return {
242
+ popoverVisible: false,
243
+ searchKeyword: "",
244
+ searchList: [],
245
+ selectedPath: [],
246
+ activeLevel: 1,
247
+ levelItems: [],
248
+ browseLoading: false,
249
+ searchLoading: false,
250
+ searchDropdownVisible: false,
251
+ referenceFocused: false,
252
+ searchTimer: null,
253
+ syncToken: 0,
254
+ skipValueSync: false,
255
+ committedBrowseSnapshot: null,
256
+ committedBoundValue: null,
257
+ lastSelectionPayload: null,
258
+ pendingLeaf: false,
259
+ };
260
+ },
261
+ computed: {
262
+ hasSearchKeyword() {
263
+ return !!(this.searchKeyword || "").trim();
264
+ },
265
+ showSearchDropdown() {
266
+ return this.searchDropdownVisible && this.hasSearchKeyword;
267
+ },
268
+ displayText() {
269
+ if (this.labelValue) {
270
+ return this.labelValue;
271
+ }
272
+ /* 弹层浏览中的选择未确认,输入框只回显打开弹层时的已提交值 */
273
+ if (this.popoverVisible) {
274
+ return this.committedPathLabel;
275
+ }
276
+ if (!this.selectedPath.length) {
277
+ return "";
278
+ }
279
+ /* 外部未回传 label 时的兜底:仅当浏览路径与已绑定值一致才回显 */
280
+ const leafId = this.getLeafIdFromValue(this.value);
281
+ return this.isValueSynced(leafId)
282
+ ? this.buildPathLabel(this.selectedPath)
283
+ : "";
284
+ },
285
+ committedPathLabel() {
286
+ const snapshot = this.committedBrowseSnapshot;
287
+ if (!snapshot || !snapshot.selectedPath || !snapshot.selectedPath.length) {
288
+ return "";
289
+ }
290
+ if (!this.isSameBoundValue(this.value, snapshot.boundValue)) {
291
+ return "";
292
+ }
293
+ return this.buildPathLabel(snapshot.selectedPath);
294
+ },
295
+ tabs() {
296
+ const tabs = [];
297
+ for (let i = 0; i < this.browseLevelCount; i++) {
298
+ tabs.push({
299
+ level: i + 1,
300
+ label: LEVEL_LABELS[i] || `第${i + 1}级`,
301
+ selected: this.selectedPath[i] || null,
302
+ });
303
+ }
304
+ return tabs;
305
+ },
306
+ showClearIcon() {
307
+ return (
308
+ this.clearable && !this.readonly && !this.disabled && !!this.displayText
309
+ );
310
+ },
311
+ canPrevLevel() {
312
+ return this.activeLevel > 1;
313
+ },
314
+ canNextLevel() {
315
+ return (
316
+ this.activeLevel < this.browseLevelCount &&
317
+ this.isTabEnabled(this.activeLevel + 1)
318
+ );
319
+ },
320
+ browseLevelCount() {
321
+ return Math.max(this.maxLevel, this.selectedPath.length, 1);
322
+ },
323
+ effectiveMinLevel() {
324
+ const min = this.minLevel == null ? 1 : this.minLevel;
325
+ return Math.max(1, Math.min(min, this.maxLevel));
326
+ },
327
+ canConfirm() {
328
+ if (!this.selectedPath.length) {
329
+ return false;
330
+ }
331
+ /* 达到最小选择层级,或该地区无下级数据(视为末级) */
332
+ return (
333
+ this.selectedPath.length >= this.effectiveMinLevel || this.pendingLeaf
334
+ );
335
+ },
336
+ currentLevelLabel() {
337
+ return LEVEL_LABELS[this.activeLevel - 1] || `第${this.activeLevel}级`;
338
+ },
339
+ },
340
+ watch: {
341
+ value: {
342
+ immediate: true,
343
+ handler() {
344
+ this.syncFromValue();
345
+ },
346
+ },
347
+ labelValue(val) {
348
+ if (!val && !this.value) {
349
+ this.resetBrowseState(false);
350
+ }
351
+ },
352
+ },
353
+ beforeDestroy() {
354
+ clearTimeout(this.searchTimer);
355
+ this.unbindOutsideClick();
356
+ },
357
+ methods: {
358
+ bindOutsideClick() {
359
+ /* 捕获阶段监听:外层若阻止了 click 冒泡,el-popover 自带的 document 监听收不到,弹层不会关闭 */
360
+ document.addEventListener("mousedown", this.handleOutsideClick, true);
361
+ },
362
+ unbindOutsideClick() {
363
+ document.removeEventListener("mousedown", this.handleOutsideClick, true);
364
+ },
365
+ isInsidePopover(target) {
366
+ if (!target || !target.nodeType) {
367
+ return false;
368
+ }
369
+ /* 触发器(含输入框)在组件根节点内 */
370
+ if (this.$el && this.$el.contains(target)) {
371
+ return true;
372
+ }
373
+ /* 弹层默认 append 到 body,需单独判断 */
374
+ const popoverRef = this.$refs.popoverRef;
375
+ const popper = popoverRef && popoverRef.$refs && popoverRef.$refs.popper;
376
+ return !!(popper && popper.contains(target));
377
+ },
378
+ handleOutsideClick(evt) {
379
+ if (!this.popoverVisible) {
380
+ return;
381
+ }
382
+ const target = evt.target;
383
+ /* 已从文档移除的节点无法判断归属,不做处理 */
384
+ if (!target || !document.contains(target)) {
385
+ return;
386
+ }
387
+ if (this.isInsidePopover(target)) {
388
+ return;
389
+ }
390
+ this.popoverVisible = false;
391
+ },
392
+ getResolveDepthLimit(item) {
393
+ if (item && item.treePath) {
394
+ const ids = this.parseTreePathIds(item.treePath);
395
+ return Math.min(Math.max(ids.length, this.maxLevel, 1), MAX_AREA_DEPTH);
396
+ }
397
+ return MAX_AREA_DEPTH;
398
+ },
399
+ isPathResolvedForItem(path, item) {
400
+ if (!path || !path.length || !item || item.id == null) {
401
+ return false;
402
+ }
403
+ return this.getAreaId(path[path.length - 1]) == item.id;
404
+ },
405
+ isSearchItemActive(item) {
406
+ if (!item || this.value == null || this.value === "") {
407
+ return false;
408
+ }
409
+ const leafId = this.parseValueId(this.value);
410
+ if (leafId == null) {
411
+ return false;
412
+ }
413
+ return leafId == this.getAreaId(item);
414
+ },
415
+ parseValueId(val) {
416
+ if (val == null || val === "") {
417
+ return null;
418
+ }
419
+ const str = String(val).trim();
420
+ if (this.isLegacyPathValue(str)) {
421
+ const parts = str
422
+ .split(",")
423
+ .map((part) => part.trim())
424
+ .filter(Boolean);
425
+ return parts.length ? parts[parts.length - 1] : null;
426
+ }
427
+ return str;
428
+ },
429
+ parseLegacyPathIds(val) {
430
+ if (val == null || val === "") {
431
+ return [];
432
+ }
433
+ return String(val)
434
+ .split(",")
435
+ .map((part) => part.trim())
436
+ .filter((part) => part !== "");
437
+ },
438
+ isLegacyPathValue(val) {
439
+ return (
440
+ this.valueFormat === "path" &&
441
+ val != null &&
442
+ String(val).includes(",") &&
443
+ !String(val).startsWith(",")
444
+ );
445
+ },
446
+ parseTreePathIds(treePath) {
447
+ if (treePath == null || treePath === "") {
448
+ return [];
449
+ }
450
+ return String(treePath)
451
+ .split(",")
452
+ .map((part) => part.trim())
453
+ .filter((part) => part !== "");
454
+ },
455
+ formatBoundValue(path, item) {
456
+ const last = item || (path && path.length ? path[path.length - 1] : null);
457
+ const leafId = this.getAreaId(last);
458
+ if (leafId == null) {
459
+ return null;
460
+ }
461
+ if (this.valueFormat === "path") {
462
+ const ids = (path || [])
463
+ .map((node) => this.getAreaId(node))
464
+ .filter((id) => id != null && id !== "");
465
+ return ids.length ? ids.join(",") : String(leafId);
466
+ }
467
+ return leafId;
468
+ },
469
+ getAreaId(item) {
470
+ if (!item) {
471
+ return null;
472
+ }
473
+ if (item.id != null && item.id !== "") {
474
+ return item.id;
475
+ }
476
+ if (item.value != null && item.value !== "") {
477
+ return item.value;
478
+ }
479
+ if (item.areaId != null && item.areaId !== "") {
480
+ return item.areaId;
481
+ }
482
+ return null;
483
+ },
484
+ isValueSynced(leafId) {
485
+ if (leafId == null || leafId === "" || !this.selectedPath.length) {
486
+ return false;
487
+ }
488
+ const currentLeaf = this.getAreaId(
489
+ this.selectedPath[this.selectedPath.length - 1]
490
+ );
491
+ return currentLeaf == leafId;
492
+ },
493
+ buildPathLabel(path) {
494
+ if (!path || !path.length) {
495
+ return "";
496
+ }
497
+ const last = path[path.length - 1];
498
+ if (last && last.fullName) {
499
+ return last.fullName;
500
+ }
501
+ return path
502
+ .map((item) => item.name || "")
503
+ .filter((name) => !!name)
504
+ .join("");
505
+ },
506
+ createEmptyAreaPathResult(value) {
507
+ return {
508
+ value: value != null && value !== "" ? value : null,
509
+ label: null,
510
+ path: [],
511
+ province: null,
512
+ city: null,
513
+ district: null,
514
+ town: null,
515
+ };
516
+ },
517
+ formatAreaPathResult(value, path, label) {
518
+ const result = this.createEmptyAreaPathResult(value);
519
+ result.label =
520
+ label != null && label !== ""
521
+ ? label
522
+ : this.buildPathLabel(path) || this.labelValue || null;
523
+ result.path = path || [];
524
+ (path || []).forEach((node, index) => {
525
+ const key = AREA_LEVEL_KEYS[index];
526
+ if (key && Object.prototype.hasOwnProperty.call(result, key)) {
527
+ result[key] = node;
528
+ }
529
+ });
530
+ return result;
531
+ },
532
+ async ensurePathDetail(path) {
533
+ const result = [];
534
+ for (let i = 0; i < path.length; i++) {
535
+ const node = path[i];
536
+ const id = this.getAreaId(node);
537
+ if (id != null) {
538
+ const detail = await this.fetchAreaById(id);
539
+ result.push(detail || node);
540
+ } else {
541
+ result.push(node);
542
+ }
543
+ }
544
+ return result;
545
+ },
546
+ async getAreaPath(value) {
547
+ const val = value !== undefined ? value : this.value;
548
+ if (val == null || val === "") {
549
+ return this.createEmptyAreaPathResult(null);
550
+ }
551
+ const leafId = this.getLeafIdFromValue(val);
552
+ let path = null;
553
+ if (
554
+ leafId != null &&
555
+ this.isValueSynced(leafId) &&
556
+ !this.shouldResyncBrowsePath() &&
557
+ this.selectedPath.length
558
+ ) {
559
+ path = this.selectedPath.map((item) => ({ ...item }));
560
+ }
561
+ if (!path || !path.length) {
562
+ if (this.isLegacyPathValue(val)) {
563
+ path = await this.resolvePathByIds(this.parseLegacyPathIds(val));
564
+ } else if (leafId != null) {
565
+ const area = await this.fetchAreaById(leafId);
566
+ if (area) {
567
+ path = await this.resolveAreaPath(area);
568
+ } else {
569
+ path = [{ id: leafId, fullName: this.labelValue || undefined }];
570
+ }
571
+ }
572
+ }
573
+ if (!path || !path.length) {
574
+ return this.createEmptyAreaPathResult(val);
575
+ }
576
+ path = await this.ensurePathDetail(path);
577
+ return this.formatAreaPathResult(val, path);
578
+ },
579
+ hasDisplayLabel() {
580
+ return !!(this.labelValue && String(this.labelValue).trim());
581
+ },
582
+ getLeafIdFromValue(val) {
583
+ if (val == null || val === "") {
584
+ return null;
585
+ }
586
+ if (this.isLegacyPathValue(val)) {
587
+ const ids = this.parseLegacyPathIds(val);
588
+ return ids.length ? ids[ids.length - 1] : null;
589
+ }
590
+ return this.parseValueId(val);
591
+ },
592
+ emitResolvedLabelIfNeeded() {
593
+ if (this.popoverVisible || this.labelValue) {
594
+ return;
595
+ }
596
+ const label = this.buildPathLabel(this.selectedPath);
597
+ if (label) {
598
+ this.$emit("update:labelValue", label);
599
+ }
600
+ },
601
+ cancelPendingSync() {
602
+ this.syncToken += 1;
603
+ },
604
+ getTabLabel(tab) {
605
+ if (tab.selected) {
606
+ return tab.selected.name || tab.label;
607
+ }
608
+ return tab.label;
609
+ },
610
+ isSelected(item) {
611
+ const current = this.selectedPath[this.activeLevel - 1];
612
+ return current && this.getAreaId(current) === this.getAreaId(item);
613
+ },
614
+ isTabEnabled(level) {
615
+ return level === 1 || this.selectedPath.length >= level - 1;
616
+ },
617
+ handlePopoverShow() {
618
+ this.pendingLeaf = false;
619
+ this.bindOutsideClick();
620
+ this.saveCommittedBrowseSnapshot();
621
+ this.$emit("popover-open");
622
+ this.$nextTick(() => {
623
+ this.$refs.searchInputRef && this.$refs.searchInputRef.focus();
624
+ });
625
+ this.initBrowseStateFromValue();
626
+ },
627
+ saveCommittedBrowseSnapshot() {
628
+ this.committedBoundValue = this.value;
629
+ this.committedBrowseSnapshot = {
630
+ boundValue: this.value,
631
+ leafId: this.getLeafIdFromValue(this.value),
632
+ selectedPath: this.selectedPath.map((item) => ({ ...item })),
633
+ activeLevel: this.activeLevel,
634
+ };
635
+ },
636
+ isSameBoundValue(a, b) {
637
+ const normalize = (val) => {
638
+ if (val == null || val === "") {
639
+ return null;
640
+ }
641
+ return String(val);
642
+ };
643
+ return normalize(a) === normalize(b);
644
+ },
645
+ emitChangeIfCommitted() {
646
+ const snapshot = this.committedBrowseSnapshot;
647
+ if (!snapshot) {
648
+ return;
649
+ }
650
+ const oldVal = snapshot.boundValue;
651
+ const newVal = this.value;
652
+ if (!this.isSameBoundValue(oldVal, newVal)) {
653
+ const payload = this.lastSelectionPayload || {
654
+ value: newVal,
655
+ row: null,
656
+ label: this.labelValue,
657
+ };
658
+ this.$emit("change", {
659
+ value: payload.value != null ? payload.value : newVal,
660
+ row: payload.row || null,
661
+ label: payload.label != null ? payload.label : this.labelValue,
662
+ path: payload.path || [],
663
+ });
664
+ }
665
+ this.committedBoundValue = null;
666
+ this.lastSelectionPayload = null;
667
+ },
668
+ restoreBrowseStateIfUncommitted() {
669
+ const snapshot = this.committedBrowseSnapshot;
670
+ if (!snapshot) {
671
+ return;
672
+ }
673
+ if (!this.isSameBoundValue(this.value, snapshot.boundValue)) {
674
+ this.levelItems = [];
675
+ this.committedBrowseSnapshot = null;
676
+ return;
677
+ }
678
+ const committedLeafId = snapshot.leafId;
679
+ if (this.isValueSynced(committedLeafId)) {
680
+ this.levelItems = [];
681
+ this.committedBrowseSnapshot = null;
682
+ return;
683
+ }
684
+ if (snapshot.selectedPath && snapshot.selectedPath.length) {
685
+ this.selectedPath = snapshot.selectedPath.map((item) => ({ ...item }));
686
+ this.activeLevel = snapshot.activeLevel;
687
+ } else if (committedLeafId) {
688
+ this.selectedPath = [
689
+ {
690
+ id: committedLeafId,
691
+ fullName: this.labelValue || undefined,
692
+ name: this.labelValue || undefined,
693
+ },
694
+ ];
695
+ this.activeLevel = 1;
696
+ } else {
697
+ this.selectedPath = [];
698
+ this.activeLevel = 1;
699
+ }
700
+ this.levelItems = [];
701
+ this.committedBrowseSnapshot = null;
702
+ },
703
+ syncFromValue() {
704
+ if (this.skipValueSync) {
705
+ return;
706
+ }
707
+ const val = this.value;
708
+ if (!val) {
709
+ this.resetBrowseState(false);
710
+ return;
711
+ }
712
+ if (!this.hasDisplayLabel()) {
713
+ this.resolveLabelFromValue();
714
+ }
715
+ },
716
+ async resolveLabelFromValue() {
717
+ const val = this.value;
718
+ if (!val || this.hasDisplayLabel()) {
719
+ return;
720
+ }
721
+ const leafId = this.getLeafIdFromValue(val);
722
+ if (leafId == null) {
723
+ return;
724
+ }
725
+ const token = ++this.syncToken;
726
+ const area = await this.fetchAreaById(leafId);
727
+ if (token !== this.syncToken || this.hasDisplayLabel()) {
728
+ return;
729
+ }
730
+ const label = (area && area.fullName) || (area && area.name) || null;
731
+ if (label) {
732
+ this.$emit("update:labelValue", label);
733
+ }
734
+ },
735
+ shouldResyncBrowsePath() {
736
+ if (!this.labelValue || !this.selectedPath.length) {
737
+ return false;
738
+ }
739
+ const pathLabel = this.buildPathLabel(this.selectedPath);
740
+ return pathLabel !== String(this.labelValue).trim();
741
+ },
742
+ syncBrowseStateForPopover() {
743
+ const val = this.value;
744
+ if (!val) {
745
+ if (!this.levelItems.length) {
746
+ this.loadLevelItems(this.getParentId());
747
+ }
748
+ return;
749
+ }
750
+ const leafId = this.getLeafIdFromValue(val);
751
+ if (this.isValueSynced(leafId) && !this.shouldResyncBrowsePath()) {
752
+ const expectedActive = this.selectedPath.length || 1;
753
+ if (this.activeLevel !== expectedActive) {
754
+ this.activeLevel = expectedActive;
755
+ this.loadLevelItems(this.getParentId());
756
+ return;
757
+ }
758
+ if (!this.levelItems.length) {
759
+ this.loadLevelItems(this.getParentId());
760
+ }
761
+ return;
762
+ }
763
+ if (this.isLegacyPathValue(val)) {
764
+ this.syncBrowseStateFromPathIds(this.parseLegacyPathIds(val));
765
+ return;
766
+ }
767
+ this.syncBrowseStateFromLeafId(leafId);
768
+ },
769
+ initBrowseStateFromValue() {
770
+ this.syncBrowseStateForPopover();
771
+ },
772
+ getAreaRequestData(extra = {}) {
773
+ return {
774
+ enabled: true,
775
+ locale: this.locale || null,
776
+ ...extra,
777
+ };
778
+ },
779
+ normalizeAreaRows(res) {
780
+ const objx = res && res.objx;
781
+ if (Array.isArray(objx)) {
782
+ return objx;
783
+ }
784
+ if (objx && Array.isArray(objx.records)) {
785
+ return objx.records;
786
+ }
787
+ return [];
788
+ },
789
+ requestAreaList(extra = {}) {
790
+ return new Promise((resolve) => {
791
+ this.$http({
792
+ url: USER_PREFIX + "/area/listPage",
793
+ method: "post",
794
+ data: this.getAreaRequestData(extra),
795
+ success: (res) => resolve(this.normalizeAreaRows(res)),
796
+ error: () => resolve([]),
797
+ });
798
+ });
799
+ },
800
+ fetchChildren(parentId) {
801
+ return new Promise((resolve) => {
802
+ this.$http({
803
+ url: USER_PREFIX + "/area/getChildren",
804
+ method: "post",
805
+ data: this.getAreaRequestData({ id: parentId }),
806
+ success: (res) => resolve(this.normalizeAreaRows(res)),
807
+ error: () => resolve([]),
808
+ });
809
+ });
810
+ },
811
+ getParentIdFromRow(row) {
812
+ if (!row) return null;
813
+ if (row.parentId != null && row.parentId !== "") {
814
+ return row.parentId;
815
+ }
816
+ const parent = row.parent;
817
+ if (parent == null || parent === undefined || parent === "") {
818
+ return null;
819
+ }
820
+ if (typeof parent === "object") {
821
+ return parent.id != null ? parent.id : null;
822
+ }
823
+ return parent;
824
+ },
825
+ fetchAreaById(id) {
826
+ if (id == null || id === "") {
827
+ return Promise.resolve(null);
828
+ }
829
+ return new Promise((resolve) => {
830
+ this.$http({
831
+ url: USER_PREFIX + "/area/get",
832
+ method: "post",
833
+ data: this.getAreaRequestData({ id }),
834
+ success: (res) => {
835
+ const objx = res && res.objx;
836
+ if (objx && typeof objx === "object" && !Array.isArray(objx)) {
837
+ resolve(objx);
838
+ return;
839
+ }
840
+ resolve(null);
841
+ },
842
+ error: () => resolve(null),
843
+ });
844
+ });
845
+ },
846
+ isAreaObject(node) {
847
+ return node && typeof node === "object" && node.id != null;
848
+ },
849
+ buildAreaPath(item, depthLimit) {
850
+ const limit = depthLimit == null ? this.maxLevel : depthLimit;
851
+ if (
852
+ item.pathList &&
853
+ Array.isArray(item.pathList) &&
854
+ item.pathList.length > 1
855
+ ) {
856
+ if (this.isAreaObject(item.pathList[0])) {
857
+ return item.pathList.slice(0, limit);
858
+ }
859
+ }
860
+ if (
861
+ item.areaPath &&
862
+ Array.isArray(item.areaPath) &&
863
+ item.areaPath.length > 1
864
+ ) {
865
+ if (this.isAreaObject(item.areaPath[0])) {
866
+ return item.areaPath.slice(0, limit);
867
+ }
868
+ }
869
+ return null;
870
+ },
871
+ matchAreaByPrefix(fullName, prefix, children) {
872
+ const sorted = [...children].sort(
873
+ (a, b) => (b.name || "").length - (a.name || "").length
874
+ );
875
+ for (let i = 0; i < sorted.length; i++) {
876
+ const child = sorted[i];
877
+ const name = child.name || "";
878
+ if (!name) {
879
+ continue;
880
+ }
881
+ if (fullName.startsWith(prefix + name)) {
882
+ return child;
883
+ }
884
+ }
885
+ return null;
886
+ },
887
+ async resolvePathByFullName(item, depthLimit) {
888
+ const fullName = (item.fullName || "").trim();
889
+ if (!fullName) {
890
+ return null;
891
+ }
892
+ const path = [];
893
+ let parentId = 0;
894
+ let prefix = "";
895
+ for (let level = 0; level < MAX_AREA_DEPTH; level++) {
896
+ const children = await this.fetchChildren(parentId);
897
+ if (!children.length) {
898
+ break;
899
+ }
900
+ const matched = this.matchAreaByPrefix(fullName, prefix, children);
901
+ if (!matched) {
902
+ break;
903
+ }
904
+ path.push(matched);
905
+ prefix += matched.name || "";
906
+ if (matched.id == item.id) {
907
+ return path;
908
+ }
909
+ parentId = matched.id;
910
+ }
911
+ if (path.length && path[path.length - 1].id != item.id) {
912
+ const siblings = await this.fetchChildren(path[path.length - 1].id);
913
+ const leaf = siblings.find((row) => row.id == item.id);
914
+ if (leaf) {
915
+ path.push(leaf);
916
+ } else if (item.name && fullName.endsWith(item.name)) {
917
+ path.push(item);
918
+ }
919
+ }
920
+ return path.length ? path : null;
921
+ },
922
+ async resolvePathByParentChain(item, depthLimit) {
923
+ const chain = [];
924
+ let current = item;
925
+ let safety = 0;
926
+ while (current && safety < MAX_AREA_DEPTH + 2) {
927
+ safety += 1;
928
+ chain.unshift(current);
929
+ const parentId = this.getParentIdFromRow(current);
930
+ if (!parentId) {
931
+ break;
932
+ }
933
+ const parent = await this.fetchAreaById(parentId);
934
+ if (!parent || parent.id != parentId) {
935
+ break;
936
+ }
937
+ current = parent;
938
+ }
939
+ return chain.length ? chain : null;
940
+ },
941
+ async resolvePathFromTreePath(area, depthLimit) {
942
+ const ids = this.parseTreePathIds(area && area.treePath);
943
+ if (!ids.length) {
944
+ return area && area.id != null ? [area] : null;
945
+ }
946
+ const path = [];
947
+ for (let i = 0; i < ids.length; i++) {
948
+ const id = ids[i];
949
+ let node = null;
950
+ if (area && this.getAreaId(area) == id) {
951
+ node = area;
952
+ } else {
953
+ node = await this.fetchAreaById(id);
954
+ }
955
+ path.push(node || { id });
956
+ }
957
+ if (area && area.id != null) {
958
+ const exists = path.some((node) => this.getAreaId(node) == area.id);
959
+ if (!exists) {
960
+ path.push(area);
961
+ }
962
+ }
963
+ return path.length ? path : null;
964
+ },
965
+ async resolveAreaPath(item, options = {}) {
966
+ if (!item || item.id == null) {
967
+ return item ? [item] : [];
968
+ }
969
+ const parentPath = await this.resolvePathByParentChain(item);
970
+ if (this.isPathResolvedForItem(parentPath, item)) {
971
+ return parentPath;
972
+ }
973
+ const depthLimit =
974
+ options.depthLimit != null
975
+ ? options.depthLimit
976
+ : this.getResolveDepthLimit(item);
977
+ if (item.treePath) {
978
+ const treePath = await this.resolvePathFromTreePath(item, depthLimit);
979
+ if (this.isPathResolvedForItem(treePath, item)) {
980
+ return treePath;
981
+ }
982
+ }
983
+ const presetPath = this.buildAreaPath(item, depthLimit);
984
+ if (this.isPathResolvedForItem(presetPath, item)) {
985
+ return presetPath;
986
+ }
987
+ const fullNamePath = await this.resolvePathByFullName(item, depthLimit);
988
+ if (this.isPathResolvedForItem(fullNamePath, item)) {
989
+ return fullNamePath;
990
+ }
991
+ if (parentPath && parentPath.length) {
992
+ return parentPath;
993
+ }
994
+ if (item.treePath) {
995
+ const treePath = await this.resolvePathFromTreePath(item, depthLimit);
996
+ if (treePath && treePath.length) {
997
+ return treePath;
998
+ }
999
+ }
1000
+ if (presetPath && presetPath.length) {
1001
+ return presetPath;
1002
+ }
1003
+ if (fullNamePath && fullNamePath.length) {
1004
+ return fullNamePath;
1005
+ }
1006
+ return [item];
1007
+ },
1008
+ async syncBrowseStateFromLeafId(id) {
1009
+ if (id == null || id === "") {
1010
+ return;
1011
+ }
1012
+ const token = ++this.syncToken;
1013
+ const area = await this.fetchAreaById(id);
1014
+ if (token !== this.syncToken) {
1015
+ return;
1016
+ }
1017
+ if (area) {
1018
+ await this.syncBrowseStateFromArea(area);
1019
+ return;
1020
+ }
1021
+ await this.syncBrowseStateFromArea({
1022
+ id,
1023
+ fullName: this.labelValue || undefined,
1024
+ });
1025
+ },
1026
+ async syncBrowseStateFromArea(item) {
1027
+ const token = ++this.syncToken;
1028
+ let seed = item || {};
1029
+ if (
1030
+ seed.id != null &&
1031
+ !seed.fullName &&
1032
+ !seed.name &&
1033
+ !this.getParentIdFromRow(seed)
1034
+ ) {
1035
+ const detail = await this.fetchAreaById(seed.id);
1036
+ if (detail) {
1037
+ seed = detail;
1038
+ }
1039
+ } else if (seed.id != null && !seed.fullName && this.labelValue) {
1040
+ seed = { ...seed, fullName: this.labelValue };
1041
+ }
1042
+ let path = await this.resolveAreaPath(seed);
1043
+ if (token !== this.syncToken) {
1044
+ return;
1045
+ }
1046
+ if (!path.length) {
1047
+ path = [seed];
1048
+ }
1049
+ const last = path[path.length - 1];
1050
+ if (last && last.id != seed.id && seed.id != null) {
1051
+ const siblings = await this.fetchChildren(
1052
+ path.length > 1 ? path[path.length - 2].id : 0
1053
+ );
1054
+ const exact = siblings.find((row) => row.id == seed.id);
1055
+ if (exact) {
1056
+ path = path.slice(0, -1).concat(exact);
1057
+ } else {
1058
+ path = path.concat(seed);
1059
+ }
1060
+ }
1061
+ if (token !== this.syncToken) {
1062
+ return;
1063
+ }
1064
+ this.selectedPath = path;
1065
+ this.activeLevel = path.length || 1;
1066
+ this.loadLevelItems(this.getParentId());
1067
+ this.emitResolvedLabelIfNeeded();
1068
+ },
1069
+ async resolvePathByIds(ids, depthLimit) {
1070
+ const limit = depthLimit == null ? ids.length : depthLimit;
1071
+ const path = [];
1072
+ let parentId = 0;
1073
+ for (let i = 0; i < ids.length && i < limit; i++) {
1074
+ const targetId = ids[i];
1075
+ const children = await this.fetchChildren(parentId);
1076
+ let matched = children.find((row) => this.getAreaId(row) == targetId);
1077
+ if (matched) {
1078
+ path.push(matched);
1079
+ parentId = matched.id;
1080
+ continue;
1081
+ }
1082
+ const fetched = await this.fetchAreaById(targetId);
1083
+ if (fetched) {
1084
+ path.push(fetched);
1085
+ parentId = fetched.id;
1086
+ } else {
1087
+ path.push({ id: targetId });
1088
+ break;
1089
+ }
1090
+ }
1091
+ return path;
1092
+ },
1093
+ async syncBrowseStateFromPathIds(ids) {
1094
+ const token = ++this.syncToken;
1095
+ const depthLimit = Math.min(
1096
+ Math.max(ids.length, this.maxLevel, 1),
1097
+ MAX_AREA_DEPTH
1098
+ );
1099
+ const path = await this.resolvePathByIds(ids, depthLimit);
1100
+ if (token !== this.syncToken) {
1101
+ return;
1102
+ }
1103
+ if (!path.length) {
1104
+ if (!this.levelItems.length) {
1105
+ this.loadLevelItems(0);
1106
+ }
1107
+ return;
1108
+ }
1109
+ this.selectedPath = path;
1110
+ this.activeLevel = path.length;
1111
+ this.loadLevelItems(this.getParentId());
1112
+ this.emitResolvedLabelIfNeeded();
1113
+ },
1114
+ handlePopoverHide() {
1115
+ this.unbindOutsideClick();
1116
+ this.searchKeyword = "";
1117
+ this.searchList = [];
1118
+ this.searchDropdownVisible = false;
1119
+ this.pendingLeaf = false;
1120
+ this.cancelPendingSync();
1121
+ this.emitChangeIfCommitted();
1122
+ this.restoreBrowseStateIfUncommitted();
1123
+ },
1124
+ handleSearchInput() {
1125
+ const keyword = (this.searchKeyword || "").trim();
1126
+ clearTimeout(this.searchTimer);
1127
+ this.searchDropdownVisible = !!keyword;
1128
+ if (!keyword) {
1129
+ this.handleSearchClear();
1130
+ return;
1131
+ }
1132
+ this.searchTimer = setTimeout(() => {
1133
+ this.doSearch(keyword);
1134
+ }, SEARCH_DEBOUNCE);
1135
+ },
1136
+ handleSearchClear() {
1137
+ this.searchList = [];
1138
+ this.searchDropdownVisible = false;
1139
+ },
1140
+ doSearch(keyword) {
1141
+ this.searchLoading = true;
1142
+ this.requestAreaList({ fullName: keyword, size: 20 }).then((rows) => {
1143
+ this.searchList = rows;
1144
+ this.searchLoading = false;
1145
+ });
1146
+ },
1147
+ getParentId() {
1148
+ if (this.activeLevel <= 1) {
1149
+ return 0;
1150
+ }
1151
+ const parent = this.selectedPath[this.activeLevel - 2];
1152
+ return parent ? this.getAreaId(parent) : 0;
1153
+ },
1154
+ loadLevelItems(parentId) {
1155
+ this.browseLoading = true;
1156
+ this.fetchChildren(parentId).then((rows) => {
1157
+ this.levelItems = rows;
1158
+ this.browseLoading = false;
1159
+ });
1160
+ },
1161
+ switchLevel(level) {
1162
+ if (level > this.browseLevelCount || !this.isTabEnabled(level)) {
1163
+ return;
1164
+ }
1165
+ this.cancelPendingSync();
1166
+ this.activeLevel = level;
1167
+ this.loadLevelItems(this.getParentId());
1168
+ },
1169
+ prevLevel() {
1170
+ if (!this.canPrevLevel) {
1171
+ return;
1172
+ }
1173
+ this.switchLevel(this.activeLevel - 1);
1174
+ },
1175
+ confirmSelection() {
1176
+ if (!this.canConfirm) {
1177
+ return;
1178
+ }
1179
+ const last = this.selectedPath[this.selectedPath.length - 1];
1180
+ this.applySelection(last).then(() => {
1181
+ this.popoverVisible = false;
1182
+ });
1183
+ },
1184
+ cancelSelection() {
1185
+ /* 关闭弹层,未确认的浏览状态由 hide 回调恢复 */
1186
+ this.popoverVisible = false;
1187
+ },
1188
+ nextLevel() {
1189
+ if (!this.canNextLevel) {
1190
+ return;
1191
+ }
1192
+ this.switchLevel(this.activeLevel + 1);
1193
+ },
1194
+ selectSearchItem(item) {
1195
+ this.cancelPendingSync();
1196
+ this.syncBrowseStateFromArea(item).then(() => {
1197
+ this.searchKeyword = "";
1198
+ this.searchList = [];
1199
+ this.searchDropdownVisible = false;
1200
+ this.pendingLeaf = false;
1201
+ if (this.selectedPath.length >= this.effectiveMinLevel) {
1202
+ /* 已达到最小选择层级:等待确认 */
1203
+ return;
1204
+ }
1205
+ /* 搜索结果未达到最小选择层级:有下级只定位下钻,无下级视为末级 */
1206
+ const last = this.selectedPath[this.selectedPath.length - 1] || item;
1207
+ this.fetchChildren(this.getAreaId(last)).then((children) => {
1208
+ if (!children.length) {
1209
+ this.pendingLeaf = true;
1210
+ return;
1211
+ }
1212
+ this.activeLevel = this.selectedPath.length + 1;
1213
+ this.levelItems = children;
1214
+ });
1215
+ });
1216
+ },
1217
+ selectItem(item) {
1218
+ if (!this.isTabEnabled(this.activeLevel)) {
1219
+ return;
1220
+ }
1221
+ this.cancelPendingSync();
1222
+ const level = this.activeLevel;
1223
+ this.selectedPath = this.selectedPath.slice(0, level - 1);
1224
+ this.selectedPath.push(item);
1225
+ this.pendingLeaf = false;
1226
+ if (level >= this.maxLevel) {
1227
+ /* 已到最大层级:等待确认 */
1228
+ return;
1229
+ }
1230
+ this.fetchChildren(this.getAreaId(item)).then((children) => {
1231
+ if (!children.length) {
1232
+ /* 无下级数据:视为末级,等待确认 */
1233
+ this.pendingLeaf = true;
1234
+ return;
1235
+ }
1236
+ this.activeLevel = level + 1;
1237
+ this.levelItems = children;
1238
+ });
1239
+ },
1240
+ async clampPathToMaxLevel(path) {
1241
+ if (!path || !path.length || path.length <= this.maxLevel) {
1242
+ return path || [];
1243
+ }
1244
+ const trimmed = path.slice(0, this.maxLevel);
1245
+ const last = trimmed[trimmed.length - 1];
1246
+ const id = this.getAreaId(last);
1247
+ if (id != null && (!last.name || !last.fullName)) {
1248
+ const detail = await this.fetchAreaById(id);
1249
+ if (detail) {
1250
+ trimmed[trimmed.length - 1] = detail;
1251
+ }
1252
+ }
1253
+ return trimmed;
1254
+ },
1255
+ async applySelection(item) {
1256
+ let path = this.selectedPath.length
1257
+ ? this.selectedPath.map((node) => ({ ...node }))
1258
+ : [item];
1259
+ path = await this.clampPathToMaxLevel(path);
1260
+ this.selectedPath = path.map((node) => ({ ...node }));
1261
+ this.activeLevel = path.length || 1;
1262
+ let last = path[path.length - 1] || item;
1263
+ const leafId = this.getAreaId(last);
1264
+ if (leafId != null && !last.fullName) {
1265
+ const detail = await this.fetchAreaById(leafId);
1266
+ if (detail) {
1267
+ last = detail;
1268
+ if (path.length) {
1269
+ path = path.slice();
1270
+ path[path.length - 1] = detail;
1271
+ this.$set(this.selectedPath, this.selectedPath.length - 1, detail);
1272
+ }
1273
+ }
1274
+ }
1275
+ const label = last.fullName || this.buildPathLabel(path);
1276
+ const formattedValue = this.formatBoundValue(path, last);
1277
+ this.lastSelectionPayload = {
1278
+ value: formattedValue,
1279
+ row: last,
1280
+ label,
1281
+ path: path.map((node) => ({ ...node })),
1282
+ };
1283
+ this.skipValueSync = true;
1284
+ this.$emit("input", formattedValue);
1285
+ this.$emit("update:labelValue", label);
1286
+ this.$nextTick(() => {
1287
+ this.skipValueSync = false;
1288
+ });
1289
+ },
1290
+ handleClear() {
1291
+ const oldVal = this.value;
1292
+ const wasOpen = this.popoverVisible;
1293
+ this.lastSelectionPayload = { value: null, row: null, label: null };
1294
+ this.skipValueSync = true;
1295
+ this.$emit("input", null);
1296
+ this.$emit("update:labelValue", null);
1297
+ this.resetBrowseState(false);
1298
+ this.popoverVisible = false;
1299
+ this.$nextTick(() => {
1300
+ this.skipValueSync = false;
1301
+ if (!wasOpen && !this.isSameBoundValue(oldVal, null)) {
1302
+ this.$emit("change", this.lastSelectionPayload);
1303
+ this.committedBoundValue = null;
1304
+ this.lastSelectionPayload = null;
1305
+ }
1306
+ });
1307
+ },
1308
+ resetBrowseState(emitEvent) {
1309
+ this.searchKeyword = "";
1310
+ this.searchList = [];
1311
+ this.selectedPath = [];
1312
+ this.activeLevel = 1;
1313
+ this.levelItems = [];
1314
+ this.committedBrowseSnapshot = null;
1315
+ if (emitEvent) {
1316
+ this.$emit("input", null);
1317
+ this.$emit("update:labelValue", null);
1318
+ }
1319
+ },
1320
+ },
1321
+ };
1322
+ </script>
1323
+
1324
+ <style lang="scss" scoped>
1325
+ @import "~@/styles/variables.scss";
1326
+
1327
+ .base-area {
1328
+ width: 100%;
1329
+ display: block;
1330
+ box-sizing: border-box;
1331
+ }
1332
+
1333
+ .base-area-trigger {
1334
+ display: block;
1335
+ width: 100%;
1336
+ box-sizing: border-box;
1337
+ }
1338
+
1339
+ .base-area-input {
1340
+ width: 100%;
1341
+ cursor: pointer;
1342
+
1343
+ .base-area-clear {
1344
+ cursor: pointer;
1345
+ display: none;
1346
+ }
1347
+
1348
+ &:hover .base-area-clear,
1349
+ &.is-focus .base-area-clear {
1350
+ display: inline-block;
1351
+ }
1352
+ }
1353
+
1354
+ .base-area-panel {
1355
+ padding: 0;
1356
+ overflow: visible;
1357
+ }
1358
+
1359
+ .base-area-search {
1360
+ position: relative;
1361
+ margin-bottom: 6px;
1362
+ z-index: 2;
1363
+ }
1364
+
1365
+ .base-area-search-dropdown {
1366
+ position: absolute;
1367
+ top: calc(100% + 4px);
1368
+ left: 0;
1369
+ right: 0;
1370
+ max-height: 200px;
1371
+ overflow-y: auto;
1372
+ background: #fff;
1373
+ border: 1px solid #e4e7ed;
1374
+ border-radius: 4px;
1375
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
1376
+ z-index: 20;
1377
+ }
1378
+
1379
+ .base-area-dropdown-empty {
1380
+ padding: 12px 10px;
1381
+ text-align: center;
1382
+ color: #909399;
1383
+ font-size: 12px;
1384
+ }
1385
+
1386
+ .base-area-fade-enter-active,
1387
+ .base-area-fade-leave-active {
1388
+ transition: opacity 0.15s ease;
1389
+ }
1390
+
1391
+ .base-area-fade-enter,
1392
+ .base-area-fade-leave-to {
1393
+ opacity: 0;
1394
+ }
1395
+
1396
+ .base-area-result-item {
1397
+ padding: 8px 10px;
1398
+ font-size: 12px;
1399
+ line-height: 1.4;
1400
+ color: #606266;
1401
+ cursor: pointer;
1402
+ border-radius: 4px;
1403
+
1404
+ &:hover {
1405
+ background: rgba($baseColor, 0.08);
1406
+ color: $baseColor;
1407
+ }
1408
+
1409
+ &.on {
1410
+ background: rgba($baseColor, 0.12);
1411
+ color: $baseColor;
1412
+ }
1413
+ }
1414
+
1415
+ .base-area-path {
1416
+ padding: 3px 8px;
1417
+ margin-bottom: 6px;
1418
+ background: #f5f7fa;
1419
+ border: 1px solid #ebeef5;
1420
+ border-radius: 4px;
1421
+ }
1422
+
1423
+ .base-area-tabs {
1424
+ display: flex;
1425
+ flex-wrap: wrap;
1426
+ align-items: center;
1427
+ width: 100%;
1428
+ gap: 0;
1429
+ }
1430
+
1431
+ .base-area-path-sep {
1432
+ flex-shrink: 0;
1433
+ padding: 0 2px;
1434
+ font-size: 12px;
1435
+ color: #c0c4cc;
1436
+ line-height: 22px;
1437
+ user-select: none;
1438
+ }
1439
+
1440
+ .base-area-tab {
1441
+ flex-shrink: 1;
1442
+ min-width: 0;
1443
+ max-width: 100%;
1444
+ padding: 0 4px;
1445
+ height: 22px;
1446
+ line-height: 22px;
1447
+ border: none;
1448
+ border-bottom: 2px solid transparent;
1449
+ border-radius: 0;
1450
+ background: transparent;
1451
+ font-size: 12px;
1452
+ color: #909399;
1453
+ cursor: pointer;
1454
+ overflow: hidden;
1455
+ text-overflow: ellipsis;
1456
+ white-space: nowrap;
1457
+ transition: color 0.15s, border-color 0.15s;
1458
+
1459
+ &.active {
1460
+ color: $baseColor;
1461
+ border-bottom-color: $baseColor;
1462
+ font-weight: 500;
1463
+ background: transparent;
1464
+ }
1465
+
1466
+ &.selected:not(.active) {
1467
+ color: #303133;
1468
+ }
1469
+
1470
+ &.disabled {
1471
+ color: #c0c4cc;
1472
+ cursor: not-allowed;
1473
+ background: transparent;
1474
+ pointer-events: none;
1475
+ }
1476
+
1477
+ &:hover:not(.disabled):not(.active) {
1478
+ color: $baseColor;
1479
+ }
1480
+ }
1481
+
1482
+ .base-area-grid-wrap {
1483
+ padding: 6px;
1484
+ background: #fff;
1485
+ border: 1px solid #eee;
1486
+ border-radius: 8px;
1487
+ }
1488
+
1489
+ .base-area-grid {
1490
+ display: flex;
1491
+ flex-wrap: wrap;
1492
+ align-content: flex-start;
1493
+ min-height: 82px;
1494
+ /* 5 行:(28 + 6) * 5 + 4 */
1495
+ max-height: 174px;
1496
+ overflow-y: auto;
1497
+ margin: 0 -4px;
1498
+ }
1499
+
1500
+ .base-area-item {
1501
+ width: calc(25% - 8px);
1502
+ margin: 0 4px 6px;
1503
+ padding: 0 10px;
1504
+ height: 28px;
1505
+ line-height: 28px;
1506
+ border: 1px solid #eee;
1507
+ border-radius: 6px;
1508
+ font-size: 12px;
1509
+ cursor: pointer;
1510
+ overflow: hidden;
1511
+ text-overflow: ellipsis;
1512
+ white-space: nowrap;
1513
+
1514
+ &:hover {
1515
+ color: $baseColor;
1516
+ border-color: $baseColor;
1517
+ }
1518
+
1519
+ &.on {
1520
+ background: $baseColor;
1521
+ border-color: $baseColor;
1522
+ color: #fff;
1523
+ }
1524
+ }
1525
+
1526
+ .base-area-empty {
1527
+ width: 100%;
1528
+ padding: 16px 0;
1529
+ text-align: center;
1530
+ color: #909399;
1531
+ font-size: 12px;
1532
+ }
1533
+
1534
+ .base-area-level-nav {
1535
+ display: flex;
1536
+ align-items: center;
1537
+ justify-content: space-between;
1538
+ margin-top: 6px;
1539
+
1540
+ .base-area-nav-btn {
1541
+ min-width: 32px;
1542
+ padding: 5px 10px;
1543
+ border-radius: 6px;
1544
+ color: #fff;
1545
+ border-color: $baseColor;
1546
+ background-color: $baseColor;
1547
+
1548
+ i {
1549
+ font-weight: bold;
1550
+ }
1551
+
1552
+ &.el-button:focus,
1553
+ &.el-button:active {
1554
+ color: #fff;
1555
+ border-color: $baseColor;
1556
+ background-color: $baseColor;
1557
+ }
1558
+
1559
+ &.el-button:hover:not(.is-disabled) {
1560
+ color: #fff;
1561
+ border-color: $baseColor;
1562
+ background-color: $baseColor;
1563
+ opacity: 0.92;
1564
+ }
1565
+
1566
+ &.is-disabled,
1567
+ &.el-button.is-disabled {
1568
+ color: #c0c4cc;
1569
+ border-color: #eee;
1570
+ background-color: #f5f7fa;
1571
+ opacity: 1;
1572
+ }
1573
+ }
1574
+
1575
+ .base-area-level-label {
1576
+ flex: 1;
1577
+ text-align: center;
1578
+ font-size: 12px;
1579
+ color: #606266;
1580
+ line-height: 24px;
1581
+ user-select: none;
1582
+ }
1583
+ }
1584
+
1585
+ .base-area-footer {
1586
+ display: flex;
1587
+ align-items: center;
1588
+ justify-content: flex-end;
1589
+ margin-top: 6px;
1590
+ padding-top: 6px;
1591
+ border-top: 1px solid #ebeef5;
1592
+ }
1593
+ </style>
1594
+
1595
+ <style lang="scss">
1596
+ @import "~@/styles/variables.scss";
1597
+
1598
+ /* el-popover 根节点为 inline span,需强制块级铺满 */
1599
+ .base-area {
1600
+ width: 100% !important;
1601
+ display: block !important;
1602
+ box-sizing: border-box;
1603
+
1604
+ > span {
1605
+ display: block !important;
1606
+ width: 100% !important;
1607
+ box-sizing: border-box;
1608
+ }
1609
+
1610
+ .el-popover__reference-wrapper,
1611
+ .el-popover__reference,
1612
+ .base-area-trigger {
1613
+ display: block !important;
1614
+ width: 100% !important;
1615
+ box-sizing: border-box;
1616
+ }
1617
+
1618
+ .base-area-input.el-input {
1619
+ width: 100% !important;
1620
+ display: block !important;
1621
+ }
1622
+
1623
+ .base-area-input .base-area-clear {
1624
+ cursor: pointer;
1625
+ display: none;
1626
+ }
1627
+
1628
+ .base-area-input:hover .base-area-clear,
1629
+ .base-area-input.is-focus .base-area-clear {
1630
+ display: inline-block;
1631
+ }
1632
+ }
1633
+
1634
+ .base-area-popover {
1635
+ padding: 8px 10px;
1636
+ overflow: visible;
1637
+ box-sizing: border-box;
1638
+
1639
+ .base-area-panel {
1640
+ width: 100%;
1641
+ box-sizing: border-box;
1642
+ }
1643
+
1644
+ .base-area-search {
1645
+ width: 100%;
1646
+ box-sizing: border-box;
1647
+ }
1648
+
1649
+ .base-area-search-input,
1650
+ .base-area-search .el-input {
1651
+ width: 100% !important;
1652
+ display: block;
1653
+ box-sizing: border-box;
1654
+ }
1655
+
1656
+ .base-area-nav-btn.el-button {
1657
+ border-radius: 6px;
1658
+ color: #fff;
1659
+ border-color: $baseColor;
1660
+ background-color: $baseColor;
1661
+ }
1662
+
1663
+ .base-area-nav-btn.el-button:focus,
1664
+ .base-area-nav-btn.el-button:active {
1665
+ color: #fff;
1666
+ border-color: $baseColor;
1667
+ background-color: $baseColor;
1668
+ }
1669
+
1670
+ .base-area-nav-btn.el-button.is-disabled {
1671
+ color: #c0c4cc;
1672
+ border-color: #eee;
1673
+ background-color: #f5f7fa;
1674
+ }
1675
+
1676
+ .base-area-tab.disabled {
1677
+ color: #c0c4cc;
1678
+ cursor: not-allowed;
1679
+ background: transparent;
1680
+ pointer-events: none;
1681
+ }
1682
+ }
1683
+ </style>