cnhis-design-vue 2.1.78 → 2.1.79

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 (588) hide show
  1. package/.prettierrc.js +27 -27
  2. package/CHANGELOG.md +2924 -2903
  3. package/README.md +90 -90
  4. package/commitlint.config.js +1 -1
  5. package/es/affix/index.js +8 -8
  6. package/es/age/index.js +18 -18
  7. package/es/alert/index.js +8 -8
  8. package/es/anchor/index.js +8 -8
  9. package/es/auto-complete/index.js +8 -8
  10. package/es/avatar/index.js +8 -8
  11. package/es/back-top/index.js +8 -8
  12. package/es/badge/index.js +8 -8
  13. package/es/base/index.js +8 -8
  14. package/es/big-table/index.js +311 -311
  15. package/es/breadcrumb/index.js +8 -8
  16. package/es/button/index.js +31 -31
  17. package/es/calendar/index.js +8 -8
  18. package/es/captcha/index.js +7 -7
  19. package/es/card/index.js +8 -8
  20. package/es/carousel/index.js +8 -8
  21. package/es/cascader/index.js +8 -8
  22. package/es/checkbox/index.js +17 -17
  23. package/es/col/index.js +8 -8
  24. package/es/collapse/index.js +8 -8
  25. package/es/color-picker/index.js +5 -5
  26. package/es/comment/index.js +8 -8
  27. package/es/config-provider/index.js +8 -8
  28. package/es/date-picker/index.js +30 -30
  29. package/es/descriptions/index.js +8 -8
  30. package/es/divider/index.js +8 -8
  31. package/es/drag-layout/index.js +5 -5
  32. package/es/drawer/index.js +8 -8
  33. package/es/dropdown/index.js +8 -8
  34. package/es/editor/index.js +1 -1
  35. package/es/ellipsis/index.js +1 -1
  36. package/es/empty/index.js +8 -8
  37. package/es/fabric-chart/index.js +45 -45
  38. package/es/form/index.js +8 -8
  39. package/es/form-model/index.js +8 -8
  40. package/es/form-table/index.js +144 -144
  41. package/es/grid/index.js +4 -4
  42. package/es/index/index.js +1260 -1256
  43. package/es/index/style.css +1 -1
  44. package/es/input/index.js +11 -11
  45. package/es/input-number/index.js +8 -8
  46. package/es/keep-cache/index.js +9 -9
  47. package/es/layout/index.js +8 -8
  48. package/es/list/index.js +8 -8
  49. package/es/locale-provider/index.js +8 -8
  50. package/es/map/index.js +13 -13
  51. package/es/mentions/index.js +8 -8
  52. package/es/menu/index.js +8 -8
  53. package/es/message/index.js +8 -8
  54. package/es/multi-chat/index.js +117 -117
  55. package/es/multi-chat-client/index.js +111 -111
  56. package/es/multi-chat-history/index.js +6 -6
  57. package/es/multi-chat-record/index.js +27 -27
  58. package/es/multi-chat-setting/index.js +43 -43
  59. package/es/multi-chat-sip/index.js +1 -1
  60. package/es/notification/index.js +8 -8
  61. package/es/page-header/index.js +8 -8
  62. package/es/pagination/index.js +8 -8
  63. package/es/popconfirm/index.js +8 -8
  64. package/es/popover/index.js +8 -8
  65. package/es/progress/index.js +8 -8
  66. package/es/radio/index.js +17 -17
  67. package/es/rate/index.js +8 -8
  68. package/es/result/index.js +8 -8
  69. package/es/row/index.js +8 -8
  70. package/es/scale-container/index.js +1 -1
  71. package/es/scale-view/index.js +175 -175
  72. package/es/select/index.js +44 -44
  73. package/es/select-label/index.js +50 -50
  74. package/es/select-person/index.js +45 -41
  75. package/es/select-person/style.css +1 -1
  76. package/es/shortcut-setter/index.js +10 -10
  77. package/es/skeleton/index.js +8 -8
  78. package/es/slider/index.js +8 -8
  79. package/es/space/index.js +8 -8
  80. package/es/spin/index.js +8 -8
  81. package/es/statistic/index.js +8 -8
  82. package/es/steps/index.js +8 -8
  83. package/es/switch/index.js +8 -8
  84. package/es/table-filter/index.js +214 -214
  85. package/es/tabs/index.js +8 -8
  86. package/es/tag/index.js +9 -9
  87. package/es/time-picker/index.js +8 -8
  88. package/es/timeline/index.js +8 -8
  89. package/es/tooltip/index.js +8 -8
  90. package/es/transfer/index.js +8 -8
  91. package/es/tree/index.js +8 -8
  92. package/es/tree-select/index.js +8 -8
  93. package/es/upload/index.js +8 -8
  94. package/es/utils/clickoutside.js +7 -7
  95. package/es/utils/kty.min-1.0.0.js +5 -5
  96. package/es/utils/time-domain.js +16 -16
  97. package/es/utils/utils-map.js +32 -32
  98. package/es/utils/vexutils.js +27 -27
  99. package/es/verification-code/index.js +2 -2
  100. package/lib/cui.common.js +21239 -21236
  101. package/lib/cui.umd.js +21239 -21236
  102. package/lib/cui.umd.min.js +29 -29
  103. package/package.json +110 -110
  104. package/packages/affix/index.js +12 -12
  105. package/packages/affix/src/Affix.jsx +12 -12
  106. package/packages/age/index.js +27 -27
  107. package/packages/age/src/age/index.vue +139 -139
  108. package/packages/age/src/age-com/index.vue +209 -209
  109. package/packages/alert/index.js +12 -12
  110. package/packages/alert/src/Alert.jsx +11 -11
  111. package/packages/anchor/index.js +18 -18
  112. package/packages/anchor/src/Anchor.jsx +11 -11
  113. package/packages/anchor/src/Link.jsx +11 -11
  114. package/packages/auto-complete/index.js +12 -12
  115. package/packages/auto-complete/src/AutoComplete.jsx +12 -12
  116. package/packages/avatar/index.js +12 -12
  117. package/packages/avatar/src/Avatar.jsx +11 -11
  118. package/packages/back-top/index.js +12 -12
  119. package/packages/back-top/src/BackTop.jsx +11 -11
  120. package/packages/badge/index.js +12 -12
  121. package/packages/badge/src/Badge.jsx +11 -11
  122. package/packages/base/index.js +3 -3
  123. package/packages/big-table/index.js +16 -16
  124. package/packages/big-table/src/BigTable.vue +3193 -3193
  125. package/packages/big-table/src/Fieldset.vue +2067 -2067
  126. package/packages/big-table/src/assets/iconfont/iconfont.css +21 -21
  127. package/packages/big-table/src/assets/style/table-base.less +387 -387
  128. package/packages/big-table/src/assets/style/table-global.less +175 -175
  129. package/packages/big-table/src/components/AutoLayoutButton.vue +307 -307
  130. package/packages/big-table/src/components/NoData.vue +81 -81
  131. package/packages/big-table/src/components/TextOverTooltip.vue +120 -120
  132. package/packages/big-table/src/components/edit-form/EditForm.vue +509 -509
  133. package/packages/big-table/src/components/edit-form/edit-component/config-data/index.js +68 -68
  134. package/packages/big-table/src/components/edit-form/edit-component/edit-date-picker/edit-date-picker.vue +60 -60
  135. package/packages/big-table/src/components/edit-form/edit-component/edit-digital/edit-digital.vue +54 -54
  136. package/packages/big-table/src/components/edit-form/edit-component/edit-input/edit-input.vue +39 -39
  137. package/packages/big-table/src/components/edit-form/edit-component/edit-input-password/edit-input-password.vue +79 -79
  138. package/packages/big-table/src/components/edit-form/edit-component/edit-month-picker/edit-month-picker.vue +37 -37
  139. package/packages/big-table/src/components/edit-form/edit-component/edit-search/edit-search.vue +82 -82
  140. package/packages/big-table/src/components/edit-form/edit-component/edit-search-more/edit-search-more.vue +95 -95
  141. package/packages/big-table/src/components/edit-form/edit-component/edit-select/edit-select.vue +40 -40
  142. package/packages/big-table/src/components/edit-form/edit-component/edit-select-multiple/edit-select-multiple.vue +55 -55
  143. package/packages/big-table/src/components/edit-form/edit-component/edit-switch/edit-switch.vue +43 -43
  144. package/packages/big-table/src/components/edit-form/edit-component/edit-textarea/edit-textarea.vue +41 -41
  145. package/packages/big-table/src/components/edit-form/edit-component/edit-time-picker/edit-time-picker.vue +40 -40
  146. package/packages/big-table/src/components/edit-form/edit-component/mixins/bound-date.js +3 -3
  147. package/packages/big-table/src/components/edit-form/edit-component/mixins/dateType.js +217 -217
  148. package/packages/big-table/src/components/edit-form/edit-component/mixins/item-default.js +639 -639
  149. package/packages/big-table/src/components/edit-form/edit-component/mixins/search.js +1247 -1247
  150. package/packages/big-table/src/components/edit-form/edit-component/register-com.js +26 -26
  151. package/packages/big-table/src/components/edit-form/edit-item/form-event.js +80 -80
  152. package/packages/big-table/src/components/edit-form/edit-item/global-props.js +33 -33
  153. package/packages/big-table/src/components/edit-form/edit-item/index.js +4 -4
  154. package/packages/big-table/src/components/edit-form/edit-item/render-methods.js +28 -28
  155. package/packages/big-table/src/components/edit-form/edit-item/validate-rules.js +463 -463
  156. package/packages/big-table/src/components/edit-form/edit-mixins/form-commom.js +673 -673
  157. package/packages/big-table/src/components/edit-form/edit-mixins/index.js +3 -3
  158. package/packages/big-table/src/components/edit-form/edit-utils/index.js +112 -112
  159. package/packages/big-table/src/components/password-com.vue +58 -58
  160. package/packages/big-table/src/components/player-vod/index.vue +57 -57
  161. package/packages/big-table/src/components/player-vod/player.vue +193 -193
  162. package/packages/big-table/src/components/player-vod/video-list.vue +265 -265
  163. package/packages/big-table/src/components/player-vod/video-modal.vue +126 -126
  164. package/packages/big-table/src/utils/CustomPagination.vue +86 -86
  165. package/packages/big-table/src/utils/batchEditing.js +610 -610
  166. package/packages/big-table/src/utils/bigTableProps.js +108 -108
  167. package/packages/big-table/src/utils/eventBroadcast.js +24 -24
  168. package/packages/big-table/src/utils/format.js +557 -557
  169. package/packages/big-table/src/utils/nestTable.js +109 -109
  170. package/packages/big-table/src/utils/tableParse.js +234 -234
  171. package/packages/breadcrumb/index.js +21 -21
  172. package/packages/breadcrumb/src/Breadcrumb.jsx +11 -11
  173. package/packages/breadcrumb/src/BreadcrumbItem.jsx +11 -11
  174. package/packages/breadcrumb/src/BreadcrumbSeparator.jsx +11 -11
  175. package/packages/button/index.js +21 -21
  176. package/packages/button/src/Button.jsx +11 -11
  177. package/packages/button/src/ButtonGroup.jsx +11 -11
  178. package/packages/button/src/ButtonPrint/components/IdentityVerification.vue +181 -181
  179. package/packages/button/src/ButtonPrint/index.vue +766 -766
  180. package/packages/button/src/ButtonPrint/mixin/his-print.js +95 -95
  181. package/packages/calendar/index.js +12 -12
  182. package/packages/calendar/src/Calendar.jsx +11 -11
  183. package/packages/captcha/index.js +9 -9
  184. package/packages/captcha/src/Captcha.vue +164 -164
  185. package/packages/captcha/src/Index.vue +47 -47
  186. package/packages/captcha/src/SlideVerify.vue +285 -285
  187. package/packages/card/index.js +21 -21
  188. package/packages/card/src/Card.jsx +12 -12
  189. package/packages/card/src/CardGrid.js +7 -7
  190. package/packages/card/src/CardMeta.js +7 -7
  191. package/packages/carousel/index.js +12 -12
  192. package/packages/carousel/src/Carousel.jsx +12 -12
  193. package/packages/cascader/index.js +12 -12
  194. package/packages/cascader/src/Cascader.jsx +11 -11
  195. package/packages/checkbox/index.js +30 -30
  196. package/packages/checkbox/src/Checkbox.jsx +11 -11
  197. package/packages/checkbox/src/CheckboxImg/index.vue +141 -141
  198. package/packages/checkbox/src/Group.jsx +11 -11
  199. package/packages/col/index.js +13 -13
  200. package/packages/col/src/Col.jsx +11 -11
  201. package/packages/collapse/index.js +18 -18
  202. package/packages/collapse/src/Collapse.jsx +11 -11
  203. package/packages/collapse/src/Panel.jsx +11 -11
  204. package/packages/color-picker/index.js +10 -10
  205. package/packages/color-picker/src/color-picker.vue +191 -191
  206. package/packages/color-picker/src/style.less +109 -109
  207. package/packages/comment/index.js +12 -12
  208. package/packages/comment/src/Comment.jsx +11 -11
  209. package/packages/config-provider/index.js +12 -12
  210. package/packages/config-provider/src/ConfigProvider.jsx +11 -11
  211. package/packages/date-picker/index.js +26 -26
  212. package/packages/date-picker/src/DatePicker.jsx +12 -12
  213. package/packages/date-picker/src/MonthPicker.jsx +11 -11
  214. package/packages/date-picker/src/RangePicker.jsx +11 -11
  215. package/packages/date-picker/src/WeekPicker.jsx +11 -11
  216. package/packages/date-picker/src/utils/index.js +374 -374
  217. package/packages/descriptions/index.js +18 -18
  218. package/packages/descriptions/src/Descriptions.jsx +11 -11
  219. package/packages/descriptions/src/Item.jsx +11 -11
  220. package/packages/divider/index.js +12 -12
  221. package/packages/divider/src/Divider.jsx +11 -11
  222. package/packages/drag-layout/DragFormLeftItem.vue +173 -173
  223. package/packages/drag-layout/DragFormRightItem.vue +284 -284
  224. package/packages/drag-layout/I18n-mixins.js +10 -10
  225. package/packages/drag-layout/drag-layout.vue +778 -778
  226. package/packages/drag-layout/index.js +12 -12
  227. package/packages/drawer/index.js +12 -12
  228. package/packages/drawer/src/Drawer.jsx +11 -11
  229. package/packages/dropdown/index.js +12 -12
  230. package/packages/dropdown/src/Dropdown.jsx +11 -11
  231. package/packages/editor/index.js +9 -9
  232. package/packages/ellipsis/index.js +8 -8
  233. package/packages/ellipsis/src/Ellipsis.vue +65 -65
  234. package/packages/empty/index.js +12 -12
  235. package/packages/empty/src/Empty.jsx +11 -11
  236. package/packages/fabric-chart/index.js +9 -9
  237. package/packages/fabric-chart/src/FabricGrid.vue +67 -67
  238. package/packages/fabric-chart/src/components/DropPopup.vue +90 -90
  239. package/packages/fabric-chart/src/components/MouseRightClick.vue +168 -168
  240. package/packages/fabric-chart/src/components/TimeScaleValue.vue +125 -125
  241. package/packages/fabric-chart/src/const/defaultVaule.js +60 -60
  242. package/packages/fabric-chart/src/fabric-chart/FabricLines.vue +617 -617
  243. package/packages/fabric-chart/src/fabric-chart/FabricPolylines.vue +1191 -1191
  244. package/packages/fabric-chart/src/fabric-chart/FabricScaleValue.vue +139 -139
  245. package/packages/fabric-chart/src/fabric-chart/FabricTextGroup.vue +651 -651
  246. package/packages/fabric-chart/src/mixins/fabricCommon.js +81 -81
  247. package/packages/fabric-chart/src/mixins/fabricObject.js +193 -193
  248. package/packages/fabric-chart/src/mixins/type.js +5 -5
  249. package/packages/fabric-chart/src/utils/bus.js +2 -2
  250. package/packages/form/index.js +16 -16
  251. package/packages/form/src/Form.jsx +11 -11
  252. package/packages/form/src/Item.jsx +11 -11
  253. package/packages/form-model/index.js +14 -14
  254. package/packages/form-model/src/FormModel.jsx +11 -11
  255. package/packages/form-model/src/Item.jsx +11 -11
  256. package/packages/form-table/index.js +16 -16
  257. package/packages/form-table/src/FormTable.vue +1110 -1110
  258. package/packages/form-table/src/components/table-component/config-data/index.js +80 -80
  259. package/packages/form-table/src/components/table-component/global-props.js +22 -22
  260. package/packages/form-table/src/components/table-component/index.js +8 -8
  261. package/packages/form-table/src/components/table-component/mixins/bound-date.js +455 -455
  262. package/packages/form-table/src/components/table-component/mixins/dateType.js +217 -217
  263. package/packages/form-table/src/components/table-component/mixins/item-default.js +257 -257
  264. package/packages/form-table/src/components/table-component/mixins/search.js +1242 -1242
  265. package/packages/form-table/src/components/table-component/register-com.js +30 -30
  266. package/packages/form-table/src/components/table-component/table-age/table-age.vue +175 -175
  267. package/packages/form-table/src/components/table-component/table-date-picker/table-date-picker.vue +87 -87
  268. package/packages/form-table/src/components/table-component/table-digital/table-digital.vue +93 -93
  269. package/packages/form-table/src/components/table-component/table-input/table-input.vue +81 -81
  270. package/packages/form-table/src/components/table-component/table-input-password/table-input-password.vue +126 -126
  271. package/packages/form-table/src/components/table-component/table-month-picker/table-month-picker.vue +55 -55
  272. package/packages/form-table/src/components/table-component/table-search/table-search.vue +174 -174
  273. package/packages/form-table/src/components/table-component/table-search-more/table-search-more.vue +191 -191
  274. package/packages/form-table/src/components/table-component/table-select/table-select.vue +64 -64
  275. package/packages/form-table/src/components/table-component/table-select-multiple/table-select-multiple.vue +81 -81
  276. package/packages/form-table/src/components/table-component/table-textarea/table-textarea.vue +76 -76
  277. package/packages/form-table/src/components/table-component/table-time-picker/table-time-picker.vue +55 -55
  278. package/packages/form-table/src/components/table-component/table-tree-select/table-tree-select.vue +135 -135
  279. package/packages/form-table/src/components/table-component/text-over-tooltip/TextOverTooltip.vue +97 -97
  280. package/packages/form-table/src/components/table-item/form-event.js +81 -81
  281. package/packages/form-table/src/components/table-item/global-props.js +27 -27
  282. package/packages/form-table/src/components/table-item/index.js +4 -4
  283. package/packages/form-table/src/components/table-item/render-methods.js +28 -28
  284. package/packages/form-table/src/components/table-item/validate-rules.js +520 -520
  285. package/packages/form-table/src/components/table-mixins/form-commom.js +98 -98
  286. package/packages/form-table/src/components/table-mixins/index.js +3 -3
  287. package/packages/form-table/src/components/table-utils/index.js +112 -112
  288. package/packages/form-table/src/disabledDetail.less +46 -46
  289. package/packages/grid/index.js +10 -10
  290. package/packages/grid/src/grid.js +28 -28
  291. package/packages/icon/index.js +10 -10
  292. package/packages/icon/src/icon.js +13 -13
  293. package/packages/index.js +313 -313
  294. package/packages/input/index.js +30 -30
  295. package/packages/input/src/Group.jsx +11 -11
  296. package/packages/input/src/Input.jsx +11 -11
  297. package/packages/input/src/Password.jsx +11 -11
  298. package/packages/input/src/Search.jsx +11 -11
  299. package/packages/input/src/TextArea.jsx +11 -11
  300. package/packages/input/src/input-quick/components/quick-item.vue +284 -284
  301. package/packages/input/src/input-quick/components/quick-popover.vue +596 -596
  302. package/packages/input/src/input-quick/index.vue +137 -137
  303. package/packages/input-number/index.js +12 -12
  304. package/packages/input-number/src/InputNumber.jsx +11 -11
  305. package/packages/keep-cache/KeepCache.js +236 -236
  306. package/packages/keep-cache/index.css +2 -2
  307. package/packages/keep-cache/index.js +8 -8
  308. package/packages/layout/index.js +27 -27
  309. package/packages/layout/src/Content.jsx +11 -11
  310. package/packages/layout/src/Footer.jsx +11 -11
  311. package/packages/layout/src/Header.jsx +11 -11
  312. package/packages/layout/src/Layout.jsx +11 -11
  313. package/packages/layout/src/Sider.jsx +11 -11
  314. package/packages/list/index.js +21 -21
  315. package/packages/list/src/Item.jsx +11 -11
  316. package/packages/list/src/ItemMeta.jsx +11 -11
  317. package/packages/list/src/List.jsx +11 -11
  318. package/packages/locale-provider/index.js +12 -12
  319. package/packages/locale-provider/src/LocaleProvider.jsx +11 -11
  320. package/packages/map/index.js +9 -9
  321. package/packages/map/src/Map.vue +484 -484
  322. package/packages/map/src/popup-map.vue +53 -53
  323. package/packages/mentions/index.js +18 -18
  324. package/packages/mentions/src/Mentions.jsx +11 -11
  325. package/packages/mentions/src/Option.jsx +11 -11
  326. package/packages/menu/index.js +27 -27
  327. package/packages/menu/src/Divider.jsx +11 -11
  328. package/packages/menu/src/Item.jsx +11 -11
  329. package/packages/menu/src/ItemGroup.jsx +11 -11
  330. package/packages/menu/src/Menu.jsx +11 -11
  331. package/packages/menu/src/SubMenu.jsx +11 -11
  332. package/packages/message/index.js +8 -8
  333. package/packages/modal/index.js +10 -10
  334. package/packages/modal/src/Modal.js +7 -7
  335. package/packages/multi-chat/chat/addConference.vue +200 -200
  336. package/packages/multi-chat/chat/addMembers.vue +411 -411
  337. package/packages/multi-chat/chat/advancedFilter.vue +372 -372
  338. package/packages/multi-chat/chat/calling.vue +246 -246
  339. package/packages/multi-chat/chat/chatFooter.vue +1647 -1647
  340. package/packages/multi-chat/chat/chatHistory.vue +605 -605
  341. package/packages/multi-chat/chat/chatMain.vue +1490 -1490
  342. package/packages/multi-chat/chat/client/index.vue +149 -149
  343. package/packages/multi-chat/chat/delay.vue +177 -177
  344. package/packages/multi-chat/chat/evaluate.vue +343 -343
  345. package/packages/multi-chat/chat/messageRecord.vue +324 -324
  346. package/packages/multi-chat/chat/mixins/NoData.js +20 -20
  347. package/packages/multi-chat/chat/mixins/base.js +97 -97
  348. package/packages/multi-chat/chat/mixins/uniRTCAPI.js +80 -80
  349. package/packages/multi-chat/chat/mixins/viewerOptions.js +67 -67
  350. package/packages/multi-chat/chat/quickReply.vue +439 -439
  351. package/packages/multi-chat/chat/robot/index.vue +312 -312
  352. package/packages/multi-chat/chat/scrollList.vue +1259 -1259
  353. package/packages/multi-chat/chat/videoVoiceList.vue +348 -348
  354. package/packages/multi-chat/chat/voice.vue +431 -431
  355. package/packages/multi-chat/components/avatar.vue +113 -113
  356. package/packages/multi-chat/components/chat-tabs-header.vue +251 -251
  357. package/packages/multi-chat/components/classify-tabs.vue +185 -185
  358. package/packages/multi-chat/components/empty.vue +24 -24
  359. package/packages/multi-chat/components/modal-refuse-reason.vue +112 -112
  360. package/packages/multi-chat/components/modal-sip.vue +160 -160
  361. package/packages/multi-chat/components/modal-user-transfer.vue +98 -98
  362. package/packages/multi-chat/components/msg-describe.vue +138 -138
  363. package/packages/multi-chat/components/msg-picture.vue +68 -68
  364. package/packages/multi-chat/components/msg-prescription.vue +205 -205
  365. package/packages/multi-chat/components/read-record.vue +133 -133
  366. package/packages/multi-chat/components/read-status.vue +34 -34
  367. package/packages/multi-chat/components/user-status.vue +198 -198
  368. package/packages/multi-chat/components/vuecmf-dialog.vue +322 -322
  369. package/packages/multi-chat/index.js +7 -7
  370. package/packages/multi-chat/setting/authority/index.vue +156 -156
  371. package/packages/multi-chat/setting/authority/roleSetting.vue +204 -204
  372. package/packages/multi-chat/setting/baseInfo/index.vue +1343 -1343
  373. package/packages/multi-chat/setting/customerService/batchSelect.vue +403 -403
  374. package/packages/multi-chat/setting/customerService/index.vue +273 -273
  375. package/packages/multi-chat/setting/event/edit/condition.vue +128 -128
  376. package/packages/multi-chat/setting/event/edit/index.vue +437 -437
  377. package/packages/multi-chat/setting/event/edit/notice.vue +129 -129
  378. package/packages/multi-chat/setting/event/edit/strategy.vue +98 -98
  379. package/packages/multi-chat/setting/event/index.vue +249 -249
  380. package/packages/multi-chat/setting/index.vue +269 -269
  381. package/packages/multi-chat/setting/page.vue +14 -14
  382. package/packages/multi-chat/setting/sessionList/index.vue +412 -412
  383. package/packages/multi-chat/setting/sessionList/messageRecord.vue +372 -372
  384. package/packages/multi-chat/setting/userConfig/index.vue +124 -124
  385. package/packages/multi-chat/setting/worktime/index.vue +274 -274
  386. package/packages/multi-chat/store/actions.js +452 -452
  387. package/packages/multi-chat/store/getters.js +380 -380
  388. package/packages/multi-chat/store/helper.js +66 -66
  389. package/packages/multi-chat/store/index.js +50 -50
  390. package/packages/multi-chat/store/mutation.js +305 -305
  391. package/packages/multi-chat/store/state.js +120 -120
  392. package/packages/multi-chat/style/emoji.css +315 -315
  393. package/packages/multi-chat/style/message.mixin.less +38 -38
  394. package/packages/multi-chat/utils/chatSock.js +93 -93
  395. package/packages/multi-chat/utils/compressImage.js +115 -115
  396. package/packages/multi-chat/utils/emoji.json +68 -68
  397. package/packages/multi-chat/utils/index.js +259 -259
  398. package/packages/multi-chat/utils/observer-scroll.js +49 -49
  399. package/packages/multi-chat/utils/panelsetting.js +48 -48
  400. package/packages/multi-chat-client/index.js +7 -7
  401. package/packages/multi-chat-history/index.js +7 -7
  402. package/packages/multi-chat-record/index.js +7 -7
  403. package/packages/multi-chat-setting/index.js +7 -7
  404. package/packages/multi-chat-sip/index.js +6 -6
  405. package/packages/notification/index.js +8 -8
  406. package/packages/page-header/index.js +12 -12
  407. package/packages/page-header/src/PageHeader.jsx +11 -11
  408. package/packages/pagination/index.js +12 -12
  409. package/packages/pagination/src/Pagination.jsx +11 -11
  410. package/packages/popconfirm/index.js +12 -12
  411. package/packages/popconfirm/src/Popconfirm.jsx +11 -11
  412. package/packages/popover/index.js +12 -12
  413. package/packages/popover/src/Popover.jsx +11 -11
  414. package/packages/progress/index.js +12 -12
  415. package/packages/progress/src/Progress.jsx +11 -11
  416. package/packages/radio/index.js +33 -33
  417. package/packages/radio/src/Group.jsx +11 -11
  418. package/packages/radio/src/Radio.jsx +11 -11
  419. package/packages/radio/src/RadioButton.jsx +11 -11
  420. package/packages/radio/src/RadioImg/index.vue +124 -124
  421. package/packages/rate/index.js +12 -12
  422. package/packages/rate/src/Rate.jsx +11 -11
  423. package/packages/result/index.js +12 -12
  424. package/packages/result/src/Result.jsx +11 -11
  425. package/packages/row/index.js +12 -12
  426. package/packages/row/src/Row.jsx +11 -11
  427. package/packages/scale-container/index.js +8 -8
  428. package/packages/scale-container/src/ScaleContainer.vue +197 -197
  429. package/packages/scale-view/NoData.vue +81 -81
  430. package/packages/scale-view/answerParse.vue +133 -133
  431. package/packages/scale-view/customList.vue +801 -801
  432. package/packages/scale-view/data.js +80 -80
  433. package/packages/scale-view/evaluateCountdown.vue +155 -155
  434. package/packages/scale-view/evaluatePage.vue +202 -202
  435. package/packages/scale-view/formitem/data.js +3991 -3991
  436. package/packages/scale-view/formitem/index.js +7 -7
  437. package/packages/scale-view/formitem/r-address.vue +245 -245
  438. package/packages/scale-view/formitem/r-choice.vue +746 -746
  439. package/packages/scale-view/formitem/r-input.vue +93 -93
  440. package/packages/scale-view/formitem/r-prompt.vue +52 -52
  441. package/packages/scale-view/formitem/r-sign.vue +218 -218
  442. package/packages/scale-view/formitem/r-time.vue +285 -285
  443. package/packages/scale-view/formitem/r-upload-custom-list.vue +242 -242
  444. package/packages/scale-view/formitem/r-upload.vue +287 -287
  445. package/packages/scale-view/formitem/sign-com.vue +316 -316
  446. package/packages/scale-view/formitem/text-over-tooltip/TextOverTooltip.vue +98 -98
  447. package/packages/scale-view/index.js +17 -17
  448. package/packages/scale-view/mixin/NoData.js +38 -38
  449. package/packages/scale-view/mixin/addressVal.js +156 -156
  450. package/packages/scale-view/mixin/evaluate.js +146 -146
  451. package/packages/scale-view/mixin/index.js +337 -337
  452. package/packages/scale-view/mixin/judgeTypes.js +267 -267
  453. package/packages/scale-view/scaleView.vue +2017 -2017
  454. package/packages/select/index.js +27 -27
  455. package/packages/select/src/CustomSelect/index.vue +130 -130
  456. package/packages/select/src/OptGroup.jsx +11 -11
  457. package/packages/select/src/Option.jsx +11 -11
  458. package/packages/select/src/Select/Select.vue +231 -231
  459. package/packages/select/src/Select/index.js +12 -12
  460. package/packages/select/src/TableSelect/index.vue +514 -514
  461. package/packages/select-label/index.js +14 -14
  462. package/packages/select-label/label-classify.vue +129 -129
  463. package/packages/select-label/labelFormContent.vue +787 -787
  464. package/packages/select-label/select-label.vue +581 -581
  465. package/packages/select-person/index.js +10 -10
  466. package/packages/select-person/search-tree.vue +373 -373
  467. package/packages/select-person/select-person.vue +1703 -1696
  468. package/packages/shortcut-setter/index.js +12 -12
  469. package/packages/shortcut-setter/src/ShortcutSetter.vue +55 -55
  470. package/packages/shortcut-setter/src/ShortcutSetterItem.vue +85 -85
  471. package/packages/shortcut-setter/src/utils/index.js +63 -63
  472. package/packages/skeleton/index.js +12 -12
  473. package/packages/skeleton/src/Skeleton.jsx +11 -11
  474. package/packages/slider/index.js +12 -12
  475. package/packages/slider/src/Slider.jsx +11 -11
  476. package/packages/space/index.js +12 -12
  477. package/packages/space/src/Space.jsx +11 -11
  478. package/packages/spin/index.js +12 -12
  479. package/packages/spin/src/Spin.jsx +11 -11
  480. package/packages/statistic/index.js +18 -18
  481. package/packages/statistic/src/Countdown.jsx +11 -11
  482. package/packages/statistic/src/Statistic.jsx +11 -11
  483. package/packages/steps/index.js +18 -18
  484. package/packages/steps/src/Step.jsx +11 -11
  485. package/packages/steps/src/Steps.jsx +11 -11
  486. package/packages/switch/index.js +12 -12
  487. package/packages/switch/src/Switch.jsx +11 -11
  488. package/packages/table-filter/index.js +27 -27
  489. package/packages/table-filter/src/base-search-com/BaseSearch.vue +2630 -2630
  490. package/packages/table-filter/src/classification/Classification-com.vue +1760 -1760
  491. package/packages/table-filter/src/classification/search-class-name.vue +266 -266
  492. package/packages/table-filter/src/classification/search-professional-model.vue +680 -680
  493. package/packages/table-filter/src/components/TextOverTooltip.vue +107 -107
  494. package/packages/table-filter/src/components/age-com/index.vue +205 -205
  495. package/packages/table-filter/src/components/button-group/ButtonGroup.vue +162 -162
  496. package/packages/table-filter/src/components/button-icon/button-icon.js +33 -33
  497. package/packages/table-filter/src/components/button-icon/getBtnIcon.js +34 -34
  498. package/packages/table-filter/src/components/c-tree-select/tree-select.vue +336 -336
  499. package/packages/table-filter/src/components/drop-button/drop-button.vue +224 -224
  500. package/packages/table-filter/src/components/drop-button/head-btn-icon.js +33 -33
  501. package/packages/table-filter/src/components/drop-view/drop-view.vue +89 -89
  502. package/packages/table-filter/src/components/multi-select/multi-select.vue +236 -236
  503. package/packages/table-filter/src/components/out-quick-search/out-quick-search.vue +346 -346
  504. package/packages/table-filter/src/components/range-age/index.vue +172 -172
  505. package/packages/table-filter/src/components/render-widget/components/CheckboxGroup.vue +51 -51
  506. package/packages/table-filter/src/components/render-widget/components/Select.vue +50 -50
  507. package/packages/table-filter/src/components/render-widget/components/index.js +7 -7
  508. package/packages/table-filter/src/components/render-widget/enums.js +28 -28
  509. package/packages/table-filter/src/components/render-widget/index.vue +91 -91
  510. package/packages/table-filter/src/components/render-widget/widgetCfgMaps.js +139 -139
  511. package/packages/table-filter/src/components/search-condition/SearchCondition.vue +1907 -1907
  512. package/packages/table-filter/src/components/search-condition/fieldTypeList.js +169 -169
  513. package/packages/table-filter/src/components/search-filter/SearchFilter.vue +278 -278
  514. package/packages/table-filter/src/components/search-modal/set-classification.vue +336 -336
  515. package/packages/table-filter/src/components/table-modal/TableModal.vue +477 -477
  516. package/packages/table-filter/src/const/dataOptions.js +43 -43
  517. package/packages/table-filter/src/const/index.js +1 -1
  518. package/packages/table-filter/src/index.vue +584 -584
  519. package/packages/table-filter/src/mixins/mixins.js +714 -714
  520. package/packages/table-filter/src/mixins/renderWidget.js +88 -88
  521. package/packages/table-filter/src/mixins/tableSearchCon.js +128 -128
  522. package/packages/table-filter/src/mixins/wordBookutils.js +113 -113
  523. package/packages/table-filter/src/quick-search/QuickSearch.vue +2167 -2167
  524. package/packages/tabs/index.js +18 -18
  525. package/packages/tabs/src/TabPane.jsx +11 -11
  526. package/packages/tabs/src/Tabs.jsx +11 -11
  527. package/packages/tag/index.js +21 -21
  528. package/packages/tag/src/CheckableTag.jsx +11 -11
  529. package/packages/tag/src/Tag.jsx +11 -11
  530. package/packages/tag/src/TagGroup.vue +621 -621
  531. package/packages/time-picker/index.js +12 -12
  532. package/packages/time-picker/src/TimePicker.jsx +11 -11
  533. package/packages/timeline/index.js +14 -14
  534. package/packages/timeline/src/Item.jsx +11 -11
  535. package/packages/timeline/src/Timeline.jsx +11 -11
  536. package/packages/tooltip/index.js +12 -12
  537. package/packages/tooltip/src/Tooltip.jsx +11 -11
  538. package/packages/transfer/index.js +12 -12
  539. package/packages/transfer/src/Transfer.jsx +11 -11
  540. package/packages/tree/index.js +18 -18
  541. package/packages/tree/src/Tree.jsx +11 -11
  542. package/packages/tree/src/TreeNode.jsx +11 -11
  543. package/packages/tree-select/index.js +18 -18
  544. package/packages/tree-select/src/TreeNode.jsx +11 -11
  545. package/packages/tree-select/src/TreeSelect.jsx +11 -11
  546. package/packages/upload/chunk-upload/chunk-upload-new.vue +1001 -1001
  547. package/packages/upload/chunk-upload/vod-chunk-upload.vue +749 -749
  548. package/packages/upload/chunk-upload/vod-upload-modal.vue +100 -100
  549. package/packages/upload/index.js +12 -12
  550. package/packages/upload/src/Upload.jsx +11 -11
  551. package/packages/verification-code/SlideVerify.vue +306 -306
  552. package/packages/verification-code/index.js +17 -17
  553. package/packages/verification-code/verification-code.vue +147 -147
  554. package/src/component/player-vod/index.vue +57 -57
  555. package/src/component/player-vod/player.vue +192 -192
  556. package/src/component/player-vod/video-list.vue +262 -262
  557. package/src/component/player-vod/video-modal.vue +128 -128
  558. package/src/component/select-options/index.vue +430 -430
  559. package/src/component/select-pages/index.vue +95 -95
  560. package/src/component/svg/index.vue +59 -59
  561. package/src/core/create.js +6 -6
  562. package/src/core/event.js +23 -23
  563. package/src/core/table-methods.js +444 -444
  564. package/src/directive/flexibleResize.js +151 -151
  565. package/src/directive/preventReClick.js +12 -12
  566. package/src/directive/scroll.js +230 -230
  567. package/src/global/variable.js +2 -2
  568. package/src/style/normalize.css +424 -424
  569. package/src/style/style.less +49 -49
  570. package/src/utils/UniRTCv2.js +626 -626
  571. package/src/utils/chatFetch.js +61 -61
  572. package/src/utils/clickoutside.js +75 -75
  573. package/src/utils/crypto.js +25 -25
  574. package/src/utils/index.js +81 -81
  575. package/src/utils/kty-sdk.js +582 -582
  576. package/src/utils/kty.min-1.0.0.js +14378 -14378
  577. package/src/utils/sip-device.js +79 -79
  578. package/src/utils/time-domain.js +249 -249
  579. package/src/utils/trtc.js +1 -1
  580. package/src/utils/utils-map.js +485 -485
  581. package/src/utils/vexutils.js +836 -836
  582. package/.idea/cnhis-design-vue.iml +0 -12
  583. package/.idea/codeStyles/Project.xml +0 -57
  584. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  585. package/.idea/git_toolbox_prj.xml +0 -15
  586. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  587. package/.idea/modules.xml +0 -8
  588. package/.idea/vcs.xml +0 -6
@@ -1,1247 +1,1247 @@
1
- const SELECT_LIST = ["SEARCH_MORE", "SEARCH", "SEARCH_CASCADE", "LEVEL_SEARCH_CASCADE"];
2
- import vexutils from '@/utils/vexutils';
3
- export default {
4
- components: {
5
- VNodes: {
6
- functional: true,
7
- render: (h, ctx) => ctx.props.vnodes
8
- }
9
- },
10
- data() {
11
- return {
12
- fetching: false,
13
-
14
- timeout: null,
15
-
16
- curOptions: [],
17
- selectedOptions: [],
18
-
19
- levelNum: 1, // 级联来加载 层级标识 从 1 开始。
20
- cascaderInitLabel: true,
21
- defList: [],
22
- panelOpen: false,
23
-
24
- searchAddObj: {},
25
-
26
- searchPageConfig: {
27
- // search 翻页配置
28
- keyword: undefined,
29
- isFetching: false,
30
- isRequest: false, // 是否已请求
31
- page: 1, // 当前页
32
- total: 1 // 总页数
33
- },
34
-
35
- optionsMaxWidth: "100%",
36
-
37
- cacheReqOptionsParams: "",
38
-
39
- hotSearchConfig: {
40
- hotList: [],
41
- latestList: [],
42
- isRequest: false,
43
- isclose: true
44
- },
45
-
46
- searchShowHotList: false,
47
- optionsRequestSource: null
48
- };
49
- },
50
- computed: {
51
- showHotSearchConfig() {
52
- const { hotList = [], latestList = [] } = this?.hotSearchConfig || {};
53
- let f = hotList.length || latestList.length;
54
- return f && !this.searchPageConfig.keyword;
55
- },
56
- formType() {
57
- const { formType } = this.mainForm || {};
58
- return formType || {};
59
- }
60
- },
61
- mounted() {
62
- this.init();
63
- },
64
- methods: {
65
- init() {
66
- const {
67
- validate = {},
68
- html_type = undefined,
69
- name,
70
- default_val,
71
- show_type = undefined,
72
- guage_num = undefined
73
- } = this.item;
74
- let targetStr = this.defaultValue[name] || default_val;
75
- targetStr = this.handleSysParams(targetStr);
76
- if (html_type == "SEARCH") {
77
- if (targetStr) {
78
- this.$nextTick(() => {
79
- console.log('handleRequestedOptions---6');
80
- this.handleRequestedOptions(this.item, targetStr, true);
81
- });
82
- }
83
- } else if (html_type == "SEARCH_MORE") {
84
- this.hanldeInitSearchMoreVal(this.item);
85
- }
86
-
87
- this.cacheReqOptionsParams = "";
88
- // this.getHotSearchConfig();
89
- },
90
-
91
- async hanldeInitSearchMoreVal(i, v) {
92
- try {
93
- const item = i;
94
- let n;
95
- if (v) {
96
- n = v;
97
- } else {
98
- n = this.defaultValue[item.name] || item.default_val;
99
- }
100
- if (n) {
101
- if (typeof n === "string") {
102
- n = this.handleSysParams(n);
103
- }
104
- n = this.handleGetJsonStr(n) || {};
105
- let NOWORDBOOK = item.wordbook.type != "WORDBOOK";
106
- if (n && n.objs && n.objs.length) {
107
- let curUniqueLabel;
108
- if (NOWORDBOOK) {
109
- curUniqueLabel = await this.handleRequestedUniqueKey(item.wordbook.id);
110
- }
111
-
112
- curUniqueLabel = curUniqueLabel || undefined;
113
- let defList = [];
114
- const defOptions = [];
115
- // `${v[item.wordbook.value_key]}-${v['myUniqueKey']}`
116
- let l = [],
117
- objs = [];
118
- let objStr =
119
- typeof n.objStr === "string" ? [...new Set(n.objStr.split(","))].join(",") : n.objStr;
120
- n.objs.forEach(f => {
121
- let v = typeof f === "object" ? JSON.parse(JSON.stringify(f)) : f;
122
- v.myUniqueKey = v[curUniqueLabel] || "";
123
- v.myUniqueLabel = curUniqueLabel || "";
124
- defList.push({
125
- key: `${v[item.wordbook.value_key]}-${v[curUniqueLabel] || ""}`,
126
- label: this.hanlderGetSearchLabel(item, v)
127
- });
128
- let k = `${v[item.wordbook.value_key]}-${v["myUniqueKey"]}`;
129
- if (!l.includes(k)) {
130
- defOptions.push({
131
- ...v
132
- });
133
- l.push(k);
134
- objs.push({ ...f });
135
- }
136
- });
137
- // 如果默认值有重复数据,过滤重复数据再提交
138
- if (l.length !== (n?.objs?.length || undefined)) {
139
- this.formType[item.val_key].filtration_val = JSON.stringify({
140
- objStr,
141
- objs
142
- });
143
- }
144
- item.defOptions = defOptions;
145
- // console.log(defOptions, "--defOptions");
146
- if (defOptions && defOptions.length) {
147
- this.curOptions = [...defOptions];
148
- this.selectedOptions = [...(defOptions || [])];
149
- }
150
- defList = vexutils.uniqArrObj(defList, "key");
151
- this.defList = defList;
152
- this.$set(this.item, "useFormValue", defList);
153
- this.$emit("valueOnChange", [...defOptions], this.item);
154
- // console.log(this.defList, "---defList");
155
- } else {
156
- this.defaultValue[item.name] = [];
157
- }
158
- } else {
159
- this.defaultValue[item.name] = [];
160
- }
161
- } catch (e) {
162
- console.log(e);
163
- }
164
- },
165
-
166
- /**
167
- * 检索的默认参数
168
- * @param keyword 检索关键字
169
- * @param itemData 表单配置项
170
- */
171
- getSearchDefParams(keyword, itemData = {}, other = {}) {
172
- const { wordbook, html_type, autograph } = itemData;
173
- const isCascade = html_type.includes("SEARCH_CASCADE");
174
- const fieldKeys = wordbook.fieldKeys || wordbook.search_key;
175
- let conObj = wordbook.conObj;
176
- // if (Array.isArray(conObj)) {
177
- // conObj.forEach(v => {
178
- // v.value = this.handleSysParams(v.value);
179
- // });
180
- // }
181
- // let SEARCH_CASCADE
182
- const extraParams = {
183
- primaryKey: wordbook.primary_key,
184
- levelKey: wordbook.level_key
185
- };
186
- const pageSizeConfig = {
187
- pageSize: isCascade ? 10000 : 20
188
- };
189
- // 请求参数
190
- const params = {
191
- wordbookId: wordbook.id,
192
- autograph: autograph,
193
- wordbookType: wordbook.type || "WORDBOOK",
194
- preConObj: wordbook.preConObj ? JSON.stringify(wordbook.preConObj) : undefined,
195
- conObj: conObj ? JSON.stringify(conObj) : undefined,
196
- preSqlExpression: wordbook.preSqlExpression || undefined,
197
- sqlExpression: wordbook.sqlExpression || undefined,
198
- fieldKeys: fieldKeys ? JSON.stringify(fieldKeys) : undefined,
199
- keyword: keyword || "",
200
- // pageSize: isCascade ? 10000 : 20,
201
- page: 1,
202
- ...(isCascade ? extraParams : {}),
203
- ...(isCascade ? pageSizeConfig : {}) // 不是“级联”类型的,后台读取列表配置的 “pageSize”
204
- };
205
- // 分页
206
- if (other.page) {
207
- params.page = other.page;
208
- this.searchPageConfig.isFetching = true;
209
- }
210
- return params;
211
- },
212
-
213
- /**
214
- * 级联参数处理
215
- * @param params 默认参数
216
- * @param itemData 表单配置项
217
- * @param otherConfig 其他配置项
218
- * @param defFalg 是否是默认请求
219
- */
220
- getCascadeParams(params, itemData, otherConfig, defFalg) {
221
- const { wordbook, html_type } = itemData;
222
- if (html_type.includes("LEVEL_SEARCH_CASCADE")) {
223
- let pageObj = undefined;
224
- if (Object.keys(otherConfig || {}).length > 0) {
225
- let { loadDataPrimary_key, levelNum = 1, pageSetting } = otherConfig || {};
226
- this.levelNum = levelNum;
227
- this.loadDataPrimary_key = loadDataPrimary_key;
228
- pageObj = pageSetting;
229
- }
230
- const { levelSetting = [] } = wordbook;
231
- let curLevel = levelSetting[this.levelNum - 1];
232
-
233
- if ((defFalg || !this.loadDataPrimary_key) && wordbook.conObjFirstLevel) {
234
- params.conObj = wordbook.conObjFirstLevel
235
- ? JSON.stringify(wordbook.conObjFirstLevel)
236
- : undefined;
237
- params.sqlExperssions = wordbook.sqlExpressionFirstLevel || undefined;
238
- } else {
239
- let conObjList = [];
240
- if (this.loadDataPrimary_key) {
241
- conObjList.push({
242
- field_key: wordbook.level_key,
243
- con: "EQ",
244
- value: this.loadDataPrimary_key
245
- });
246
- }
247
- if (curLevel && html_type === "LEVEL_SEARCH_CASCADE2") {
248
- conObjList.push({
249
- field_key: wordbook.grade_key,
250
- con: "EQ",
251
- value: curLevel.level
252
- });
253
- }
254
- if (pageObj) {
255
- Object.assign(params, pageObj);
256
- }
257
- params.conObj = JSON.stringify(conObjList);
258
- params.sqlExperssions = "";
259
- }
260
- }
261
-
262
- return params;
263
- },
264
-
265
- /**
266
- * 检索请求去重,自定义处理
267
- * @param rows list
268
- * @param itemData 表单配置项
269
- * @param uniqueConfig 唯一标识配置
270
- */
271
- handleRowUnique(rows, itemData, uniqueConfig = {}) {
272
- const { myUniqueKey, reqUniqueKey } = uniqueConfig;
273
- const { wordbook } = itemData;
274
- return rows.reduce((acc, cur) => {
275
- cur.setting = wordbook.setting;
276
- cur.showLabel = "";
277
- cur.myUniqueKey = cur[myUniqueKey] || "";
278
- cur.myUniqueLabel = reqUniqueKey || "";
279
- if (wordbook.render_key && wordbook.render_key.length > 0) {
280
- wordbook.render_key.forEach(ren => {
281
- cur.showLabel += `≌${this.formatField(cur[ren])}`;
282
- });
283
- cur.showLabel = cur.showLabel.slice(1);
284
- } else {
285
- cur.showLabel = cur[wordbook.value_key];
286
- }
287
- if (typeof cur === "object") {
288
- Object.keys(cur || {}).forEach(t => (cur[t] = this.formatFieldValue(cur[t])));
289
- }
290
- return acc.some(v => {
291
- return (
292
- `${v[wordbook.value_key]}-${v[myUniqueKey]}` ==
293
- `${cur[wordbook.value_key]}-${cur[myUniqueKey]}`
294
- );
295
- })
296
- ? acc
297
- : [...acc, cur];
298
- }, []);
299
- },
300
-
301
- /**
302
- * 检索默认值处理
303
- * @param defFalg 是否默认值处理
304
- * @param rowData 请求数据
305
- * @param itemData 表单配置项
306
- * @param uniqueConfig 唯一标识配置
307
- */
308
- handleGetSearchDefVal(defFalg, rowData, itemData, uniqueConfig = {}) {
309
- const { is_plugin_set, keyword } = uniqueConfig;
310
- const { wordbook, html_type, val_key, default_val, name } = itemData;
311
- let defVal = this.defaultValue[name] || this.handleSysParams(default_val || "");
312
- if (is_plugin_set) {
313
- defVal = keyword;
314
- }
315
- if (defFalg && rowData.length) {
316
- let defItem = rowData[0];
317
- let itemKkey = `${defItem[wordbook.value_key]}>>>${defItem["myUniqueKey"]}`;
318
- if (html_type == "SEARCH") {
319
- const f = rowData.find(r => r[wordbook.value_key] == defVal);
320
- if (f) {
321
- defItem = f;
322
- itemKkey = `${f[wordbook.value_key]}>>>${f["myUniqueKey"]}`;
323
- this.handleSearchSelect(itemKkey, itemData, "", {
324
- eventType: defFalg ? "init" : "trigger"
325
- });
326
- }
327
- if (defVal != defItem[wordbook.value_key]) {
328
- if (f) {
329
- itemKkey = `${f[wordbook.value_key]}>>>${f["myUniqueKey"]}`;
330
- } else {
331
- itemKkey = defVal;
332
- }
333
- }
334
- if (itemKkey) {
335
- this.hanldeSetFieldsValue(
336
- {
337
- [itemData.val_key]: itemKkey
338
- },
339
- itemData
340
- );
341
- } else {
342
- this.$set(itemData, "useFormValue", undefined);
343
- }
344
- } else if (html_type == "SEARCH_MORE") {
345
- itemKkey.replace(">>>", "-");
346
- this.hanldeSetFieldsValue(
347
- {
348
- [itemData.val_key]: [
349
- {
350
- key: itemKkey,
351
- label: defItem["showLabel"] || defItem[wordbook.value_key]
352
- }
353
- ]
354
- },
355
- itemData
356
- );
357
- this.multipleSelect(
358
- {
359
- key: itemKkey,
360
- label: defItem["showLabel"] || defItem[wordbook.value_key]
361
- },
362
- itemData
363
- );
364
- }
365
- } else if (defFalg) {
366
- if (html_type == "SEARCH") {
367
- // bugfix:14178
368
- this.hanldeSetFieldsValue(
369
- {
370
- [itemData.val_key]: undefined
371
- },
372
- itemData
373
- );
374
- }
375
- }
376
- },
377
-
378
- // 请求下拉框的数据
379
- async handleRequestedOptions(
380
- itemData = {},
381
- keyword = undefined,
382
- defFalg = false,
383
- otherConfig = {}
384
- ) {
385
- console.log('handleRequestedOptions---1');
386
- const closeLoading = () => {
387
- this.fetching = false;
388
- this.searchPageConfig.isFetching = false;
389
- };
390
- try {
391
- const { wordbook = {}, val_key, html_type, free_entry } = itemData;
392
- let { queryParamsType, queryParams = [] } = wordbook;
393
- if (Object.keys(wordbook || {}).length === 0) {
394
- return;
395
- }
396
- if (keyword && typeof keyword === "string") keyword = keyword.replace(/^\s+|\s+$/, "");
397
- // LEVEL_SEARCH_CASCADE SEARCH_CASCADE
398
- const isCascade = html_type.includes("SEARCH_CASCADE");
399
- const NOWORDBOOK = wordbook.type != "WORDBOOK";
400
- const ISDICTIONARY = wordbook.type === "DICTIONARY";
401
- // 请求参数
402
- let params = this.getSearchDefParams(keyword, itemData, otherConfig);
403
-
404
- let formData = this.getFormValue();
405
-
406
- let queryArr = [
407
- "SEARCH",
408
- "SEARCH_MORE",
409
- "SEARCH_CASCADE",
410
- "LEVEL_SEARCH_CASCADE",
411
- "LEVEL_SEARCH_CASCADE2"
412
- ];
413
- if (queryArr.includes(html_type) && queryParamsType == 1) {
414
- let tempFormData = this.handleQueryParams(formData, queryParams);
415
- Object.assign(params, tempFormData);
416
- } else {
417
- Object.assign(params, formData);
418
- }
419
- // 257 云his需求新增通用字典 后端欧阳 产品晶晶
420
- const arr = ["SEARCH", "SEARCH_MORE"];
421
- if (arr.includes(html_type) && ISDICTIONARY) {
422
- Object.assign(params, {
423
- dictType: JSON.stringify(wordbook.dictType)
424
- });
425
- }
426
- this.cacheReqOptionsParams = JSON.stringify(params);
427
- let reqUniqueKey;
428
- let myUniqueKey = "theUniqueKey";
429
- if (NOWORDBOOK) {
430
- reqUniqueKey = await this.handleRequestedUniqueKey(wordbook.id);
431
- myUniqueKey = reqUniqueKey || undefined;
432
- }
433
- // 多选检索框避免重复选中 "theUniqueKey" 这个值,每次请求返回来都不一样。
434
- if (html_type == "SEARCH_MORE" && myUniqueKey == "theUniqueKey") {
435
- myUniqueKey = undefined;
436
- }
437
- this.formType[val_key].wordbook &&
438
- (this.formType[val_key].wordbook.myUniqueLabel = myUniqueKey);
439
- this.fetching = true;
440
- if (!html_type.includes("SEARCH_CASCADE")) {
441
- this.cancelOptionsRequest && this.cancelOptionsRequest();
442
- }
443
- // this.optionsRequestSource = axios.CancelToken.source();
444
- if (keyword && !defFalg) {
445
- let key = typeof keyword === "string" ? keyword.trim() : keyword;
446
- key && this.handleSearchTracher(itemData, { keyword: key });
447
- }
448
- Object.assign(params, { asyncCount: 1 });
449
- let handleEditFormGetWordbookData = this.editFormApiConfig?.handleEditFormGetWordbookData
450
- if (!handleEditFormGetWordbookData || typeof handleEditFormGetWordbookData !== 'function') {
451
- handleEditFormGetWordbookData = this.getWordbookDataRequest
452
- }
453
- return handleEditFormGetWordbookData(params, { optionsRequestSource: this.optionsRequestSource }).then((data) => {
454
- this.optionsRequestSource = null;
455
- this.fetching = false;
456
- if (otherConfig.page) {
457
- this.handleSearchScrollTop(itemData);
458
- }
459
- closeLoading();
460
- if (!data) return [];
461
- this.searchAddObj[`${itemData.val_key}_${itemData.name}`] = true;
462
- let { rows, fieldList, page, total } = data.map;
463
- this.searchPageConfig = Object.assign(this.searchPageConfig, {
464
- page,
465
- total,
466
- isRequest: true,
467
- keyword
468
- });
469
- let rowData = [];
470
- if (isCascade) {
471
- wordbook.myUniqueLabel = myUniqueKey;
472
- wordbook.myUniqueKey = myUniqueKey;
473
- wordbook.isLoadData = html_type == "LEVEL_SEARCH_CASCADE";
474
- if (wordbook.isLoadData) {
475
- this.levelNum = defFalg ? 1 : this.levelNum;
476
- }
477
- rows = this.hanldeRemoveDuplicates(rows, {
478
- key: wordbook.value_key
479
- });
480
- this.handleFormCascade(rows, wordbook);
481
- rowData = rows;
482
- } else {
483
- // 去重
484
- rowData = this.handleRowUnique(rows, itemData, {
485
- myUniqueKey: myUniqueKey,
486
- reqUniqueKey: reqUniqueKey
487
- });
488
-
489
- // 获取显示字段title
490
- if (rowData.length > 0 && wordbook.render_key && wordbook.render_key.length > 1) {
491
- rowData.unshift(
492
- Object.assign(
493
- {},
494
- {
495
- showLabel: this.getTitleHeader(fieldList, wordbook.render_key),
496
- myUniqueKey: Math.random()
497
- }
498
- )
499
- );
500
- }
501
- }
502
- const searchList = [
503
- "SEARCH",
504
- "SEARCH_CASCADE",
505
- "SEARCH_MORE",
506
- "LEVEL_SEARCH_CASCADE"
507
- ];
508
- if (searchList.includes(html_type)) {
509
- if (html_type != "LEVEL_SEARCH_CASCADE") {
510
- this.curOptions = rowData;
511
- } else {
512
- (defFalg || !this.loadDataPrimary_key) && (this.curOptions = rowData);
513
- }
514
- }
515
- // 默认值处理
516
- this.handleGetSearchDefVal(defFalg, rowData, itemData, {
517
- myUniqueKey: myUniqueKey,
518
- reqUniqueKey: reqUniqueKey,
519
- keyword: keyword,
520
- ...otherConfig
521
- });
522
-
523
- // 自由输入
524
- if (!defFalg && html_type == "SEARCH" && keyword && free_entry == "1") {
525
- this.handleFreeEntry({
526
- rowData,
527
- keyword,
528
- wordbook,
529
- fieldList,
530
- myUniqueKey
531
- });
532
- }
533
-
534
- return rowData;
535
-
536
- }).catch(() => {
537
- closeLoading();
538
- })
539
-
540
- } catch (error) {
541
- closeLoading();
542
- console.log(error);
543
- }
544
- },
545
-
546
- getWordbookDataRequest(params, config) {
547
- let { optionsRequestSource } = config;
548
- optionsRequestSource = this.axios.CancelToken.source();
549
- return new Promise((resolve, reject) => {
550
- this.axios
551
- .post(`/tableReader/getWordbookData`, this.$qs.stringify(params), {
552
- cancelToken: optionsRequestSource.token
553
- })
554
- .then(({ data }) => {
555
- optionsRequestSource = null;
556
- if (data.result === "SUCCESS") return resolve(data);
557
- resolve(null);
558
- })
559
- .catch(err => {
560
- reject(err);
561
- });
562
- });
563
- },
564
-
565
- handleFreeEntry(option = {}) {
566
- const { rowData, keyword, wordbook, fieldList, myUniqueKey } = option;
567
- if (!keyword) return;
568
- const curKey = +new Date();
569
- const data = {
570
- [myUniqueKey]: curKey,
571
- myUniqueKey: curKey,
572
- myUniqueLabel: myUniqueKey,
573
- [wordbook.value_key]: keyword,
574
- is_free_entry_input__add: true // 标识是自由输入
575
- };
576
- const hasRenderKey = wordbook.render_key && wordbook.render_key.length > 1;
577
- if (rowData.length === 0) {
578
- this.curOptions = [];
579
- if (hasRenderKey) {
580
- rowData.unshift({
581
- showLabel: this.getTitleHeader(fieldList, wordbook.render_key),
582
- myUniqueKey: Math.random()
583
- });
584
- }
585
- }
586
- hasRenderKey ? rowData.splice(1, 0, data) : rowData.unshift(data);
587
- this.curOptions = rowData;
588
- },
589
-
590
- /* 解析下拉选择接口返回字段 */
591
- formatField(value) {
592
- let res = value;
593
- try {
594
- if (res && typeof res == "string" && res.startsWith("###")) {
595
- res = res.slice(3);
596
- res = JSON.parse(res);
597
- res = res.change_text;
598
- }
599
- return res || "";
600
- } catch (error) {
601
- return "";
602
- }
603
- },
604
-
605
- /* 解析下拉选择接口返回字段 直接改变原有的 */
606
- formatFieldValue(value) {
607
- try {
608
- if (value && typeof value == "string" && value.startsWith("###")) {
609
- value = value.slice(3);
610
- value = JSON.parse(value);
611
- value = value.value;
612
- }
613
- return value || "";
614
- } catch (error) {
615
- console.log(error);
616
- return "";
617
- }
618
- },
619
-
620
- // 下拉搜索框获取字段title
621
- getTitleHeader(fieldList, renderKey) {
622
- let titleHeader = "";
623
- let renderKeyArr = [];
624
- if (Array.isArray(renderKey)) {
625
- renderKeyArr = [...renderKey];
626
- } else {
627
- renderKeyArr = [renderKey];
628
- }
629
- renderKeyArr.forEach(render => {
630
- for (let i = 0; i < fieldList.length; i++) {
631
- if (render === fieldList[i].columnName) {
632
- titleHeader += `≌${fieldList[i].title}`;
633
- break;
634
- }
635
- }
636
- });
637
- titleHeader = titleHeader.slice(1);
638
- return titleHeader;
639
- },
640
-
641
- handleRequestedUniqueKey(id) {
642
- // const { hanldegetUniqueKey } = this.$listeners; //
643
- const { hanldegetUniqueKey } = this.mainForm || {};
644
- const starTiem = +new Date();
645
-
646
- const getUniqueKey = (resolve, reject) => {
647
- setTimeout(() => {
648
- const res = hanldegetUniqueKey(id);
649
- if (res && res.status) {
650
- resolve(res.value);
651
- } else {
652
- let curTime = +new Date();
653
- if (curTime - starTiem > 5000) {
654
- reject("获取UniqueKe 异常!!");
655
- return;
656
- }
657
- getUniqueKey(resolve, reject);
658
- }
659
- }, 16);
660
- };
661
- return new Promise((resolve, reject) => {
662
- getUniqueKey(resolve, reject);
663
- });
664
- },
665
-
666
- dealDictionatySearch(val) {
667
- this.curOptions = this.curOptions.filter(i => {
668
- return i.showLabel.includes(val);
669
- });
670
- },
671
-
672
- // 下拉框搜索输入关键字后
673
- handleMultipleSearch(val, itemData) {
674
- clearTimeout(this.timeout);
675
- const { wordbook = {}, html_type } = itemData;
676
- const ISDICTIONARY = wordbook.type === "DICTIONARY";
677
- // 257 云his需求新增通用字典 后端欧阳 产品晶晶
678
- const arr = ["SEARCH", "SEARCH_MORE"];
679
- if (arr.includes(html_type) && ISDICTIONARY && val) {
680
- this.dealDictionatySearch(val);
681
- return;
682
- }
683
- this.searchPageConfig.keyword = val || undefined;
684
- if (this.dropdownHide && !val) return;
685
- this.timeout = setTimeout(() => {
686
- console.log('handleRequestedOptions---2');
687
- this.handleRequestedOptions(itemData, val);
688
- }, 200);
689
- },
690
-
691
- multipleSelect(e, item) {
692
- const valKey = item.wordbook.value_key;
693
- const selectList = this.selectedOptions || [];
694
- const isSelect = selectList.some(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
695
- let selectItem = {};
696
- if (!isSelect) {
697
- const fdItem = this.curOptions.find(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
698
- selectList.push({ ...fdItem });
699
- selectItem = fdItem;
700
- }
701
- this.selectedOptions = [...selectList];
702
- this.$emit("valueOnChange", [...selectList], item);
703
- this.hanlderSendSelectLog(item, selectItem);
704
- this.handlerInputBlur(item);
705
- },
706
-
707
- multipleDeselect(e, item) {
708
- const valKey = item.wordbook.value_key;
709
- const selectList = this.selectedOptions || [];
710
- const fnIndex = selectList.findIndex(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
711
- if (fnIndex != -1) {
712
- selectList.splice(fnIndex, 1);
713
- }
714
- this.selectedOptions = [...selectList];
715
- this.$emit("valueOnChange", [...selectList], item);
716
- },
717
-
718
- // 搜索框没数据新增
719
- handlerAddOptions(data, item) {
720
- this.curAddBtnItem = item;
721
- this.$emit("handlerAddOptions", { data });
722
- },
723
-
724
- searchMoreOnChange(value, item) {
725
- // 标识用户有修改该值。
726
- this.formType[item.val_key].isOnchange = "00";
727
- if (!value || value.length === 0) {
728
- this.$emit("valueOnChange", [], item);
729
- }
730
-
731
- // 通讯事件
732
- // this.mainForm.formfieldOnChange(this.item);
733
- },
734
-
735
- // 处理级联数据
736
- handleFormCascade(list = [], v = {}, level = 1) {
737
- list.forEach(item => {
738
- item.myLabel = this.hanldeGetCascadelabel(v.render_key, item) || item[v["value_key"]];
739
- item.myUniqueKey = item[v.myUniqueKey];
740
- item.myUniqueLabel = v.myUniqueKey;
741
- if (v.isLoadData) {
742
- item.isLeaf = v.level_num ? this.levelNum >= v.level_num : false;
743
- } else {
744
- if (level >= v.level_num) {
745
- delete item.children;
746
- }
747
- if (item.children && item.children.length) {
748
- this.handleFormCascade(item.children, v, level + 1);
749
- }
750
- }
751
- });
752
- },
753
-
754
- hanldeGetCascadelabel(v = [], k = {}) {
755
- if (Array.isArray(v) && v.length) {
756
- const l = [];
757
- v.forEach(i => {
758
- l.push(k[i]);
759
- });
760
- return l.join("_");
761
- }
762
- return "";
763
- },
764
-
765
- handleCascaderChange(option, item) {
766
- // selectedOptions
767
- this.Choose_to_complete = false;
768
- this.cascaderInitLabel = false;
769
- let [value, selectedOptions] = option;
770
- selectedOptions = selectedOptions || [];
771
-
772
- let isAllowClear = value.length === 0 && selectedOptions.length === 0;
773
- if (item.allow_check_mid_level && item.is_allow_check_mid == 1 && !isAllowClear) {
774
- if (item.allow_check_mid_level > (value?.length || 0)) {
775
- this.noAllow_check_mid_level = true;
776
- return;
777
- }
778
- }
779
- this.noAllow_check_mid_level = false;
780
-
781
- item.selectValue = value;
782
- item.selectedOptions = null;
783
- item.selectedOptions = selectedOptions;
784
- // 缓存方便提交表单处理
785
- this.selectedOptions = [...selectedOptions];
786
- this.$emit("valueOnChange", [...selectedOptions], item);
787
- this.formType[item.val_key].isOnchange = "00";
788
- if (value.length == 0 && selectedOptions.length == 0) {
789
- this.defaultValue[item.name] = "";
790
- this.formType[item.val_key].default_val = "";
791
- this.hideHotSearch = true;
792
- }
793
- this.Choose_to_complete = true;
794
- // 通讯事件
795
- // this.mainForm.formfieldOnChange(this.item);
796
- },
797
-
798
- handleCascaderFilter(inputValue, path) {
799
- return path.some(
800
- option => option.myLabel.toLowerCase().indexOf(inputValue.toLowerCase()) > -1
801
- );
802
- },
803
-
804
- async handleCascadeLoadData(selectedOptions) {
805
- this.levelNum = selectedOptions.length + 1;
806
- const targetOption = selectedOptions[selectedOptions.length - 1];
807
- this.loadDataPrimary_key = targetOption[this.item.wordbook.primary_key];
808
- targetOption.loading = true;
809
- try {
810
- console.log('handleRequestedOptions---3');
811
- const res = await this.handleRequestedOptions(this.item, "", false);
812
- targetOption.loading = false;
813
- targetOption.children = res && res.length ? [...res] : undefined;
814
- this.curOptions = [...this.curOptions];
815
- } catch (error) {
816
- console.log(error);
817
- }
818
- },
819
- // 级联 end
820
-
821
- handlerDropdownVisibleChange(e, data) {
822
- const searchList = ["SEARCH_MORE", "SEARCH"];
823
- if (e) {
824
- e.preventDefault && e.preventDefault();
825
- e.stopPropagation && e.stopPropagation();
826
- this.handleCalculateOptionsMaxWidth();
827
- }
828
-
829
- let isRequest = true;
830
-
831
- if (this.optionsMaxWidth === "100%") {
832
- // 100% 是默认值,如果已经计算过了,不用再算
833
- this.handleCalculateOptionsMaxWidth();
834
- }
835
- this.dropdownHide = !e;
836
- if (Object.keys(data || {}).length > 0) {
837
- const searchList = ["SEARCH_CASCADE", "LEVEL_SEARCH_CASCADE"];
838
- if (searchList.includes(data.html_type)) {
839
- isRequest = !(this.curOptions && this.curOptions.length);
840
- }
841
- if (e && ["SEARCH_MORE", "SEARCH"].includes(data.html_type)) {
842
- this.handlerSearchOnFocus(data);
843
- }
844
- if (e && isRequest) {
845
- console.log('handleRequestedOptions---4');
846
- this.handleRequestedOptions(data);
847
- }
848
- if (!e && this.noAllow_check_mid_level && searchList.includes(data.html_type)) {
849
- setTimeout(() => {
850
- this.$set(data, "useFormValue", null);
851
- }, 16);
852
- }
853
- }
854
-
855
- if (!e) {
856
- // 弹窗关闭才收集级联“常用”值,避免还没选完重复提交。
857
- this.handleCascaderTracher();
858
- setTimeout(() => {
859
- this.searchPageConfig.keyword = undefined;
860
- }, 300);
861
- }
862
- },
863
-
864
- hanlderGetSearchLabel(config, v) {
865
- const { wordbook } = config;
866
- let showLabel = "";
867
- // "自由输入"的直接 return v[wordbook.value_key]
868
- if (!v.is_free_entry_input__add && wordbook.show_key && wordbook.show_key.length) {
869
- wordbook.show_key.forEach(s => {
870
- showLabel += ` ${this.formatField(v[s])}`;
871
- });
872
- return showLabel;
873
- }
874
- return v[wordbook.value_key];
875
- },
876
- hanlderSendSelectLog(item = {}, value) {
877
- // 收集选中的数据 多个展示字段取第一个
878
- const show_key = ((item.wordbook && item.wordbook.show_key) || [])[0];
879
- const label = show_key ? value[show_key] : "";
880
- label && this.handleSearchTracher(item, { select: label });
881
- },
882
- // 搜索框选中
883
- handleSearchSelect(e, option, type, eventConfig) {
884
- const setList = option?.bindEventSetting || [];
885
- const isInit = "init" === eventConfig?.eventType;
886
- const formData = this.getFormValue();
887
- // 如果有绑定事件,先触发绑定的事件。
888
- try {
889
- if (Array.isArray(setList)) {
890
- this.handlerInputBlur(option, null, "blur", eventConfig);
891
- }
892
- } catch (err) {
893
- console.log(err);
894
- }
895
- // hasOwnProperty
896
- const searchOption = this.curOptions;
897
- // 当前选中的对象
898
- let selectItem = searchOption.find(
899
- ele => `${ele[option.wordbook.value_key]}>>>${ele["myUniqueKey"]}` === e
900
- );
901
- // 标识是自由输入的值
902
- const is_free = selectItem?.is_free_entry_input__add || false;
903
- // 自由输入的 数据是前端生成的要清空,避免”带出“事件赋值
904
- if (is_free) {
905
- selectItem = {};
906
- }
907
- const setting = option?.wordbook?.setting || {};
908
- if (Object.keys(selectItem || {}).length > 0 && type === "select") {
909
- this.hanlderSendSelectLog(option, selectItem);
910
- }
911
-
912
- if (selectItem && setting) {
913
- Object.keys(selectItem).forEach(s => {
914
- if (
915
- selectItem[s] &&
916
- typeof selectItem[s] == "string" &&
917
- selectItem[s].startsWith("###")
918
- ) {
919
- selectItem[s] = selectItem[s].slice(3);
920
- selectItem[s] = JSON.parse(selectItem[s]);
921
- selectItem[s] = selectItem[s].value;
922
- }
923
- });
924
- }
925
- },
926
-
927
- // SEARCH 检索框翻页
928
- handleSearchChangePage(type = "next") {
929
- let cType = type || "next";
930
- let { page, keyword = undefined } = this.searchPageConfig;
931
- page = cType === "next" ? page + 1 : page - 1;
932
- console.log('handleRequestedOptions---5');
933
- this.handleRequestedOptions(this.item, keyword, false, { page });
934
- },
935
-
936
- handleCalculateOptionsMaxWidth() {
937
- if (!SELECT_LIST.includes(this.item?.html_type || undefined)) return;
938
- this.$nextTick(() => {
939
- const offsetWidth = this.$el.offsetWidth;
940
- let res = offsetWidth,
941
- maxwith;
942
- try {
943
- let item = this.$el.querySelector(".ant-select");
944
- const itemRect = item.getBoundingClientRect();
945
- let baseDom = this.mainForm.$el.querySelector(".big-table");
946
- const baseRect = baseDom.getBoundingClientRect();
947
- maxwith = baseRect.right - itemRect.left;
948
-
949
- if (typeof offsetWidth === "number" && isFinite(maxwith)) {
950
- if (maxwith > offsetWidth) {
951
- res = maxwith;
952
- } else {
953
- res = offsetWidth;
954
- }
955
- }
956
- } catch (error) {
957
- res = offsetWidth;
958
- }
959
-
960
- res = parseInt(res, 10);
961
- this.optionsMaxWidth = `${res}px`;
962
- });
963
- },
964
-
965
- handlerSearchOnFocus(item) {
966
- if (this.selectIsOpen) return;
967
- let { queryParamsType, queryParams = [] } = item.wordbook || {};
968
- // setTimeout(() => {
969
- this.$nextTick(() => {
970
- this.selsectVisible = true;
971
- let formData = this.mainForm.handleGetAllFormValue();
972
- let params = formData;
973
- if (queryParamsType == 1) {
974
- params = this.handleQueryParams(formData, queryParams);
975
- }
976
- // 弹窗列表选项事件推出
977
- this.$emit("opentableSelect", true, this.item, params);
978
- });
979
- // }, 300);
980
- },
981
- handleQueryParams(formData, queryParams) {
982
- let tempFormData = {};
983
- if (queryParams.length) {
984
- queryParams.forEach(v => {
985
- if (v in formData) {
986
- tempFormData[v] = formData[v];
987
- }
988
- });
989
- }
990
- return tempFormData;
991
- },
992
-
993
- confirmSelect({ value, selectRow = [], myUniqueKey }) {
994
- const { item } = this;
995
- if (this.item.html_type === "SEARCH_MORE") {
996
- let selecteds = this.baseForm.getFieldValue(item.val_key) || [];
997
- this.formType[item.val_key].isOnchange = "00";
998
- let mergeValList = [...value, ...selecteds];
999
- let mergeSelectList = [...selectRow, ...this.curMultipleSelected];
1000
-
1001
- let valueList = this.hanldeRemoveDuplicates(mergeValList, {
1002
- key: "key"
1003
- });
1004
- let list = this.hanldeRemoveDuplicates(mergeSelectList, {
1005
- key: myUniqueKey
1006
- });
1007
-
1008
- let copy = JSON.parse(JSON.stringify(list));
1009
-
1010
- this.curOptions = [...copy];
1011
- this.$set(this.item, "useFormValue", valueList);
1012
- // this.baseForm.setFieldsValue({
1013
- // [item.val_key]: valueList
1014
- // });
1015
-
1016
- this.curMultipleSelected = [...copy];
1017
- this.$emit("valueOnChange", [...copy], this.item);
1018
- } else {
1019
- this.curOptions = [...selectRow];
1020
- this.$set(this.item, "useFormValue", value);
1021
- // this.baseForm.setFieldsValue({
1022
- // [item.val_key]: value
1023
- // });
1024
- this.handleSearchSelect(value, this.item);
1025
- }
1026
- },
1027
-
1028
- hanldeRemoveDuplicates(list = [], config = {}) {
1029
- if (!Array.isArray(list)) return [];
1030
- const { key } = config;
1031
- let obj = {};
1032
- if (!key) return list;
1033
-
1034
- let resList = list.reduce((cur, next) => {
1035
- obj[next[key]] ? "" : (obj[next[key]] = true && cur.push(next));
1036
- return cur;
1037
- }, []);
1038
-
1039
- return [...resList];
1040
- },
1041
-
1042
- getFormValue() {
1043
- return this.handleGetAllFormValue();
1044
- },
1045
-
1046
- // 取消请求 handleRequestedOptions
1047
- cancelOptionsRequest() {
1048
- if (this.optionsRequestSource && typeof this.optionsRequestSource.cancel === "function") {
1049
- // 取消请求
1050
- this.optionsRequestSource.cancel("请求已取消!");
1051
- this.optionsRequestSource = null;
1052
- }
1053
- },
1054
-
1055
- async getHotSearchConfig() {
1056
- const { item, mainForm } = this;
1057
- if (!SELECT_LIST.includes(item.html_type) || item.is_recommend != "1") return;
1058
- let params = {
1059
- formId: mainForm.params_formId,
1060
- valKey: item.val_key,
1061
- htmlType: item.html_type
1062
- }
1063
- let handleEditFormCommonLatestAndHot = this.editFormApiConfig?.handleEditFormCommonLatestAndHot
1064
- if (!handleEditFormCommonLatestAndHot || typeof handleEditFormCommonLatestAndHot !== 'function') {
1065
- handleEditFormCommonLatestAndHot = this.commonLatestAndHotRequest
1066
- }
1067
- let data = await handleEditFormCommonLatestAndHot(params)
1068
- if (!data) return;
1069
- this.hotSearchConfig.isRequest = true;
1070
- let hotList = (data?.map?.hotList || []).filter(Boolean);
1071
- let latestList = (data?.map?.latestList || []).filter(Boolean);
1072
- let config = Object.assign(this.hotSearchConfig, { hotList, latestList });
1073
- this.$set(this, "hotSearchConfig", config);
1074
- },
1075
- commonLatestAndHotRequest(params) {
1076
- return new Promise((resolve, reject) => {
1077
- this.axios
1078
- .get(`/tableReader/commonLatestAndHot`, { params })
1079
- .then(({ data }) => {
1080
- if (data.result === "SUCCESS") return resolve(data);
1081
- resolve(null);
1082
- })
1083
- .catch(err => {
1084
- reject(err);
1085
- });
1086
- });
1087
- },
1088
-
1089
- handleSelectHotKeyword(key) {
1090
- const input = this.$el.querySelector(".ant-select-search__field");
1091
- if (input) {
1092
- input.value = key;
1093
- var event = new InputEvent("input");
1094
- input.dispatchEvent(event);
1095
- } else {
1096
- // 最近搜索级联选中
1097
- // this.handlemMainFormFillItemVal(this.item, "", key.value);
1098
- this.open = false;
1099
- if (SELECT_LIST.includes(this.item.html_type)) {
1100
- if (!key.keyword) return;
1101
- this.handleSearchTracher(this.item, {
1102
- select: key.value,
1103
- keyword: key.keyword
1104
- });
1105
- // 级联选中“常用”值后失去焦点。
1106
- let input = this.$el.querySelector(".ant-cascader-input");
1107
- let cascader = this.$el.querySelector(".ant-cascader-picker");
1108
- cascader && cascader.blur();
1109
- if (input) {
1110
- input.blur();
1111
- }
1112
- }
1113
- }
1114
- },
1115
-
1116
- hanldeClearLately() {
1117
- const { item, mainForm } = this;
1118
- let params = {
1119
- formId: mainForm.params_formId,
1120
- valKey: item.val_key,
1121
- htmlType: item.html_type
1122
- }
1123
- let handleEditFormDeleteLatestAndHot = this.editFormApiConfig?.handleEditFormDeleteLatestAndHot;
1124
- if (!handleEditFormDeleteLatestAndHot || typeof handleEditFormDeleteLatestAndHot !== 'function') {
1125
- handleEditFormDeleteLatestAndHot = this.deleteLatestAndHotRequest
1126
- }
1127
- handleEditFormDeleteLatestAndHot(params);
1128
- },
1129
- deleteLatestAndHotRequest(params) {
1130
- return new Promise((resolve, reject) => {
1131
- this.axios
1132
- .post(`/form/deleteLatestAndHot`, this.$qs.stringify(params))
1133
- .then(({ data }) => {
1134
- if (data.result == "SUCCESS") return resolve(data);
1135
- this.$message.warning(data.resultMsg || "删除失败");
1136
- resolve(null);
1137
- })
1138
- .catch(err => {
1139
- reject(err);
1140
- });
1141
- });
1142
- },
1143
- closeHotSearch() {
1144
- this.hideHotSearch = false;
1145
- this.searchShowHotList = false;
1146
- },
1147
- handleSearchTracher(item, obj = { keyword: "", select: "" }) {
1148
- if (!SELECT_LIST.includes(item?.html_type || undefined)) return;
1149
- const { mainForm } = this;
1150
- const { keyword = "", select = "" } = obj || {};
1151
- // 埋点
1152
- let key =
1153
- item.html_type === "SEARCH_MORE"
1154
- ? "表单搜索多选框"
1155
- : item.html_type === "SEARCH"
1156
- ? "表单搜索框"
1157
- : item.html_type === "SEARCH_CASCADE"
1158
- ? "表单级联搜索"
1159
- : "表单逐级级联";
1160
- let params = {
1161
- key,
1162
- params_formId: mainForm.params_formId,
1163
- val_key: item.val_key,
1164
- name: item.name,
1165
- keyword,
1166
- select
1167
- }
1168
- this.handleGetConfigApi(params, 'handleEditFormSearchTracher');
1169
- // try {
1170
- // this.$_handleTracherLog(key, {
1171
- // 表单ID: mainForm.params_formId,
1172
- // 字段Key: item.val_key,
1173
- // 字段名称: item.name,
1174
- // 搜索关键字: keyword,
1175
- // 选中值: select
1176
- // });
1177
- // } catch (error) {
1178
- // console.log(error);
1179
- // }
1180
- },
1181
-
1182
- hanldercheckOption(data) {
1183
- // let objKey = `${data.val_key}_${data.name}`;
1184
- return (
1185
- data.wordbook && data.wordbook.add_btn
1186
- // this.curOptions &&
1187
- // this.curOptions.length === 0 &&
1188
- // this.searchAddObj[objKey]
1189
- );
1190
- },
1191
-
1192
- /**
1193
- * 检索框切换分页,滚动条置顶
1194
- */
1195
- handleSearchScrollTop(item) {
1196
- try {
1197
- let c = `.search-menu-${item.val_key}`;
1198
- let list = document.querySelectorAll(c);
1199
- list.forEach(v => {
1200
- let u = v.querySelector(".ant-select-dropdown-menu");
1201
- if (u) {
1202
- u.scrollTop = 0;
1203
- }
1204
- });
1205
- } catch (error) {
1206
- console.log(error, "handleSearchScrollTop");
1207
- }
1208
- },
1209
-
1210
- handleCascaderTracher() {
1211
- if (!this.Choose_to_complete) return;
1212
- const CASCADELIST = ["LEVEL_SEARCH_CASCADE", "SEARCH_CASCADE"];
1213
- this.$nextTick(() => {
1214
- const { item, selectedOptions } = this;
1215
- if (!CASCADELIST.includes(item.html_type)) return;
1216
- if (Array.isArray(selectedOptions) && selectedOptions.length > 0) {
1217
- let val = this.handleGetAllFormValue()[item.val_key];
1218
- let keyword = "";
1219
- if (vexutils.isJSON(val)) {
1220
- keyword = JSON.parse(val)?.objStr || "";
1221
- }
1222
- if (!keyword) return;
1223
- this.handleSearchTracher(item, {
1224
- select: val,
1225
- keyword: keyword
1226
- });
1227
- }
1228
- });
1229
- this.Choose_to_complete = false;
1230
- },
1231
-
1232
- handleSearchBlur() {
1233
- // 主动让 select 框失去焦点
1234
- try {
1235
- let k = `search-${this.item.val_key}`;
1236
- let t = this.$refs[k];
1237
- if (Array.isArray(t)) {
1238
- t = t[0];
1239
- }
1240
- this.searchShowHotList = false;
1241
- t?.blur();
1242
- } catch (error) {
1243
- console.log(error);
1244
- }
1245
- }
1246
- }
1247
- };
1
+ const SELECT_LIST = ["SEARCH_MORE", "SEARCH", "SEARCH_CASCADE", "LEVEL_SEARCH_CASCADE"];
2
+ import vexutils from '@/utils/vexutils';
3
+ export default {
4
+ components: {
5
+ VNodes: {
6
+ functional: true,
7
+ render: (h, ctx) => ctx.props.vnodes
8
+ }
9
+ },
10
+ data() {
11
+ return {
12
+ fetching: false,
13
+
14
+ timeout: null,
15
+
16
+ curOptions: [],
17
+ selectedOptions: [],
18
+
19
+ levelNum: 1, // 级联来加载 层级标识 从 1 开始。
20
+ cascaderInitLabel: true,
21
+ defList: [],
22
+ panelOpen: false,
23
+
24
+ searchAddObj: {},
25
+
26
+ searchPageConfig: {
27
+ // search 翻页配置
28
+ keyword: undefined,
29
+ isFetching: false,
30
+ isRequest: false, // 是否已请求
31
+ page: 1, // 当前页
32
+ total: 1 // 总页数
33
+ },
34
+
35
+ optionsMaxWidth: "100%",
36
+
37
+ cacheReqOptionsParams: "",
38
+
39
+ hotSearchConfig: {
40
+ hotList: [],
41
+ latestList: [],
42
+ isRequest: false,
43
+ isclose: true
44
+ },
45
+
46
+ searchShowHotList: false,
47
+ optionsRequestSource: null
48
+ };
49
+ },
50
+ computed: {
51
+ showHotSearchConfig() {
52
+ const { hotList = [], latestList = [] } = this?.hotSearchConfig || {};
53
+ let f = hotList.length || latestList.length;
54
+ return f && !this.searchPageConfig.keyword;
55
+ },
56
+ formType() {
57
+ const { formType } = this.mainForm || {};
58
+ return formType || {};
59
+ }
60
+ },
61
+ mounted() {
62
+ this.init();
63
+ },
64
+ methods: {
65
+ init() {
66
+ const {
67
+ validate = {},
68
+ html_type = undefined,
69
+ name,
70
+ default_val,
71
+ show_type = undefined,
72
+ guage_num = undefined
73
+ } = this.item;
74
+ let targetStr = this.defaultValue[name] || default_val;
75
+ targetStr = this.handleSysParams(targetStr);
76
+ if (html_type == "SEARCH") {
77
+ if (targetStr) {
78
+ this.$nextTick(() => {
79
+ console.log('handleRequestedOptions---6');
80
+ this.handleRequestedOptions(this.item, targetStr, true);
81
+ });
82
+ }
83
+ } else if (html_type == "SEARCH_MORE") {
84
+ this.hanldeInitSearchMoreVal(this.item);
85
+ }
86
+
87
+ this.cacheReqOptionsParams = "";
88
+ // this.getHotSearchConfig();
89
+ },
90
+
91
+ async hanldeInitSearchMoreVal(i, v) {
92
+ try {
93
+ const item = i;
94
+ let n;
95
+ if (v) {
96
+ n = v;
97
+ } else {
98
+ n = this.defaultValue[item.name] || item.default_val;
99
+ }
100
+ if (n) {
101
+ if (typeof n === "string") {
102
+ n = this.handleSysParams(n);
103
+ }
104
+ n = this.handleGetJsonStr(n) || {};
105
+ let NOWORDBOOK = item.wordbook.type != "WORDBOOK";
106
+ if (n && n.objs && n.objs.length) {
107
+ let curUniqueLabel;
108
+ if (NOWORDBOOK) {
109
+ curUniqueLabel = await this.handleRequestedUniqueKey(item.wordbook.id);
110
+ }
111
+
112
+ curUniqueLabel = curUniqueLabel || undefined;
113
+ let defList = [];
114
+ const defOptions = [];
115
+ // `${v[item.wordbook.value_key]}-${v['myUniqueKey']}`
116
+ let l = [],
117
+ objs = [];
118
+ let objStr =
119
+ typeof n.objStr === "string" ? [...new Set(n.objStr.split(","))].join(",") : n.objStr;
120
+ n.objs.forEach(f => {
121
+ let v = typeof f === "object" ? JSON.parse(JSON.stringify(f)) : f;
122
+ v.myUniqueKey = v[curUniqueLabel] || "";
123
+ v.myUniqueLabel = curUniqueLabel || "";
124
+ defList.push({
125
+ key: `${v[item.wordbook.value_key]}-${v[curUniqueLabel] || ""}`,
126
+ label: this.hanlderGetSearchLabel(item, v)
127
+ });
128
+ let k = `${v[item.wordbook.value_key]}-${v["myUniqueKey"]}`;
129
+ if (!l.includes(k)) {
130
+ defOptions.push({
131
+ ...v
132
+ });
133
+ l.push(k);
134
+ objs.push({ ...f });
135
+ }
136
+ });
137
+ // 如果默认值有重复数据,过滤重复数据再提交
138
+ if (l.length !== (n?.objs?.length || undefined)) {
139
+ this.formType[item.val_key].filtration_val = JSON.stringify({
140
+ objStr,
141
+ objs
142
+ });
143
+ }
144
+ item.defOptions = defOptions;
145
+ // console.log(defOptions, "--defOptions");
146
+ if (defOptions && defOptions.length) {
147
+ this.curOptions = [...defOptions];
148
+ this.selectedOptions = [...(defOptions || [])];
149
+ }
150
+ defList = vexutils.uniqArrObj(defList, "key");
151
+ this.defList = defList;
152
+ this.$set(this.item, "useFormValue", defList);
153
+ this.$emit("valueOnChange", [...defOptions], this.item);
154
+ // console.log(this.defList, "---defList");
155
+ } else {
156
+ this.defaultValue[item.name] = [];
157
+ }
158
+ } else {
159
+ this.defaultValue[item.name] = [];
160
+ }
161
+ } catch (e) {
162
+ console.log(e);
163
+ }
164
+ },
165
+
166
+ /**
167
+ * 检索的默认参数
168
+ * @param keyword 检索关键字
169
+ * @param itemData 表单配置项
170
+ */
171
+ getSearchDefParams(keyword, itemData = {}, other = {}) {
172
+ const { wordbook, html_type, autograph } = itemData;
173
+ const isCascade = html_type.includes("SEARCH_CASCADE");
174
+ const fieldKeys = wordbook.fieldKeys || wordbook.search_key;
175
+ let conObj = wordbook.conObj;
176
+ // if (Array.isArray(conObj)) {
177
+ // conObj.forEach(v => {
178
+ // v.value = this.handleSysParams(v.value);
179
+ // });
180
+ // }
181
+ // let SEARCH_CASCADE
182
+ const extraParams = {
183
+ primaryKey: wordbook.primary_key,
184
+ levelKey: wordbook.level_key
185
+ };
186
+ const pageSizeConfig = {
187
+ pageSize: isCascade ? 10000 : 20
188
+ };
189
+ // 请求参数
190
+ const params = {
191
+ wordbookId: wordbook.id,
192
+ autograph: autograph,
193
+ wordbookType: wordbook.type || "WORDBOOK",
194
+ preConObj: wordbook.preConObj ? JSON.stringify(wordbook.preConObj) : undefined,
195
+ conObj: conObj ? JSON.stringify(conObj) : undefined,
196
+ preSqlExpression: wordbook.preSqlExpression || undefined,
197
+ sqlExpression: wordbook.sqlExpression || undefined,
198
+ fieldKeys: fieldKeys ? JSON.stringify(fieldKeys) : undefined,
199
+ keyword: keyword || "",
200
+ // pageSize: isCascade ? 10000 : 20,
201
+ page: 1,
202
+ ...(isCascade ? extraParams : {}),
203
+ ...(isCascade ? pageSizeConfig : {}) // 不是“级联”类型的,后台读取列表配置的 “pageSize”
204
+ };
205
+ // 分页
206
+ if (other.page) {
207
+ params.page = other.page;
208
+ this.searchPageConfig.isFetching = true;
209
+ }
210
+ return params;
211
+ },
212
+
213
+ /**
214
+ * 级联参数处理
215
+ * @param params 默认参数
216
+ * @param itemData 表单配置项
217
+ * @param otherConfig 其他配置项
218
+ * @param defFalg 是否是默认请求
219
+ */
220
+ getCascadeParams(params, itemData, otherConfig, defFalg) {
221
+ const { wordbook, html_type } = itemData;
222
+ if (html_type.includes("LEVEL_SEARCH_CASCADE")) {
223
+ let pageObj = undefined;
224
+ if (Object.keys(otherConfig || {}).length > 0) {
225
+ let { loadDataPrimary_key, levelNum = 1, pageSetting } = otherConfig || {};
226
+ this.levelNum = levelNum;
227
+ this.loadDataPrimary_key = loadDataPrimary_key;
228
+ pageObj = pageSetting;
229
+ }
230
+ const { levelSetting = [] } = wordbook;
231
+ let curLevel = levelSetting[this.levelNum - 1];
232
+
233
+ if ((defFalg || !this.loadDataPrimary_key) && wordbook.conObjFirstLevel) {
234
+ params.conObj = wordbook.conObjFirstLevel
235
+ ? JSON.stringify(wordbook.conObjFirstLevel)
236
+ : undefined;
237
+ params.sqlExperssions = wordbook.sqlExpressionFirstLevel || undefined;
238
+ } else {
239
+ let conObjList = [];
240
+ if (this.loadDataPrimary_key) {
241
+ conObjList.push({
242
+ field_key: wordbook.level_key,
243
+ con: "EQ",
244
+ value: this.loadDataPrimary_key
245
+ });
246
+ }
247
+ if (curLevel && html_type === "LEVEL_SEARCH_CASCADE2") {
248
+ conObjList.push({
249
+ field_key: wordbook.grade_key,
250
+ con: "EQ",
251
+ value: curLevel.level
252
+ });
253
+ }
254
+ if (pageObj) {
255
+ Object.assign(params, pageObj);
256
+ }
257
+ params.conObj = JSON.stringify(conObjList);
258
+ params.sqlExperssions = "";
259
+ }
260
+ }
261
+
262
+ return params;
263
+ },
264
+
265
+ /**
266
+ * 检索请求去重,自定义处理
267
+ * @param rows list
268
+ * @param itemData 表单配置项
269
+ * @param uniqueConfig 唯一标识配置
270
+ */
271
+ handleRowUnique(rows, itemData, uniqueConfig = {}) {
272
+ const { myUniqueKey, reqUniqueKey } = uniqueConfig;
273
+ const { wordbook } = itemData;
274
+ return rows.reduce((acc, cur) => {
275
+ cur.setting = wordbook.setting;
276
+ cur.showLabel = "";
277
+ cur.myUniqueKey = cur[myUniqueKey] || "";
278
+ cur.myUniqueLabel = reqUniqueKey || "";
279
+ if (wordbook.render_key && wordbook.render_key.length > 0) {
280
+ wordbook.render_key.forEach(ren => {
281
+ cur.showLabel += `≌${this.formatField(cur[ren])}`;
282
+ });
283
+ cur.showLabel = cur.showLabel.slice(1);
284
+ } else {
285
+ cur.showLabel = cur[wordbook.value_key];
286
+ }
287
+ if (typeof cur === "object") {
288
+ Object.keys(cur || {}).forEach(t => (cur[t] = this.formatFieldValue(cur[t])));
289
+ }
290
+ return acc.some(v => {
291
+ return (
292
+ `${v[wordbook.value_key]}-${v[myUniqueKey]}` ==
293
+ `${cur[wordbook.value_key]}-${cur[myUniqueKey]}`
294
+ );
295
+ })
296
+ ? acc
297
+ : [...acc, cur];
298
+ }, []);
299
+ },
300
+
301
+ /**
302
+ * 检索默认值处理
303
+ * @param defFalg 是否默认值处理
304
+ * @param rowData 请求数据
305
+ * @param itemData 表单配置项
306
+ * @param uniqueConfig 唯一标识配置
307
+ */
308
+ handleGetSearchDefVal(defFalg, rowData, itemData, uniqueConfig = {}) {
309
+ const { is_plugin_set, keyword } = uniqueConfig;
310
+ const { wordbook, html_type, val_key, default_val, name } = itemData;
311
+ let defVal = this.defaultValue[name] || this.handleSysParams(default_val || "");
312
+ if (is_plugin_set) {
313
+ defVal = keyword;
314
+ }
315
+ if (defFalg && rowData.length) {
316
+ let defItem = rowData[0];
317
+ let itemKkey = `${defItem[wordbook.value_key]}>>>${defItem["myUniqueKey"]}`;
318
+ if (html_type == "SEARCH") {
319
+ const f = rowData.find(r => r[wordbook.value_key] == defVal);
320
+ if (f) {
321
+ defItem = f;
322
+ itemKkey = `${f[wordbook.value_key]}>>>${f["myUniqueKey"]}`;
323
+ this.handleSearchSelect(itemKkey, itemData, "", {
324
+ eventType: defFalg ? "init" : "trigger"
325
+ });
326
+ }
327
+ if (defVal != defItem[wordbook.value_key]) {
328
+ if (f) {
329
+ itemKkey = `${f[wordbook.value_key]}>>>${f["myUniqueKey"]}`;
330
+ } else {
331
+ itemKkey = defVal;
332
+ }
333
+ }
334
+ if (itemKkey) {
335
+ this.hanldeSetFieldsValue(
336
+ {
337
+ [itemData.val_key]: itemKkey
338
+ },
339
+ itemData
340
+ );
341
+ } else {
342
+ this.$set(itemData, "useFormValue", undefined);
343
+ }
344
+ } else if (html_type == "SEARCH_MORE") {
345
+ itemKkey.replace(">>>", "-");
346
+ this.hanldeSetFieldsValue(
347
+ {
348
+ [itemData.val_key]: [
349
+ {
350
+ key: itemKkey,
351
+ label: defItem["showLabel"] || defItem[wordbook.value_key]
352
+ }
353
+ ]
354
+ },
355
+ itemData
356
+ );
357
+ this.multipleSelect(
358
+ {
359
+ key: itemKkey,
360
+ label: defItem["showLabel"] || defItem[wordbook.value_key]
361
+ },
362
+ itemData
363
+ );
364
+ }
365
+ } else if (defFalg) {
366
+ if (html_type == "SEARCH") {
367
+ // bugfix:14178
368
+ this.hanldeSetFieldsValue(
369
+ {
370
+ [itemData.val_key]: undefined
371
+ },
372
+ itemData
373
+ );
374
+ }
375
+ }
376
+ },
377
+
378
+ // 请求下拉框的数据
379
+ async handleRequestedOptions(
380
+ itemData = {},
381
+ keyword = undefined,
382
+ defFalg = false,
383
+ otherConfig = {}
384
+ ) {
385
+ console.log('handleRequestedOptions---1');
386
+ const closeLoading = () => {
387
+ this.fetching = false;
388
+ this.searchPageConfig.isFetching = false;
389
+ };
390
+ try {
391
+ const { wordbook = {}, val_key, html_type, free_entry } = itemData;
392
+ let { queryParamsType, queryParams = [] } = wordbook;
393
+ if (Object.keys(wordbook || {}).length === 0) {
394
+ return;
395
+ }
396
+ if (keyword && typeof keyword === "string") keyword = keyword.replace(/^\s+|\s+$/, "");
397
+ // LEVEL_SEARCH_CASCADE SEARCH_CASCADE
398
+ const isCascade = html_type.includes("SEARCH_CASCADE");
399
+ const NOWORDBOOK = wordbook.type != "WORDBOOK";
400
+ const ISDICTIONARY = wordbook.type === "DICTIONARY";
401
+ // 请求参数
402
+ let params = this.getSearchDefParams(keyword, itemData, otherConfig);
403
+
404
+ let formData = this.getFormValue();
405
+
406
+ let queryArr = [
407
+ "SEARCH",
408
+ "SEARCH_MORE",
409
+ "SEARCH_CASCADE",
410
+ "LEVEL_SEARCH_CASCADE",
411
+ "LEVEL_SEARCH_CASCADE2"
412
+ ];
413
+ if (queryArr.includes(html_type) && queryParamsType == 1) {
414
+ let tempFormData = this.handleQueryParams(formData, queryParams);
415
+ Object.assign(params, tempFormData);
416
+ } else {
417
+ Object.assign(params, formData);
418
+ }
419
+ // 257 云his需求新增通用字典 后端欧阳 产品晶晶
420
+ const arr = ["SEARCH", "SEARCH_MORE"];
421
+ if (arr.includes(html_type) && ISDICTIONARY) {
422
+ Object.assign(params, {
423
+ dictType: JSON.stringify(wordbook.dictType)
424
+ });
425
+ }
426
+ this.cacheReqOptionsParams = JSON.stringify(params);
427
+ let reqUniqueKey;
428
+ let myUniqueKey = "theUniqueKey";
429
+ if (NOWORDBOOK) {
430
+ reqUniqueKey = await this.handleRequestedUniqueKey(wordbook.id);
431
+ myUniqueKey = reqUniqueKey || undefined;
432
+ }
433
+ // 多选检索框避免重复选中 "theUniqueKey" 这个值,每次请求返回来都不一样。
434
+ if (html_type == "SEARCH_MORE" && myUniqueKey == "theUniqueKey") {
435
+ myUniqueKey = undefined;
436
+ }
437
+ this.formType[val_key].wordbook &&
438
+ (this.formType[val_key].wordbook.myUniqueLabel = myUniqueKey);
439
+ this.fetching = true;
440
+ if (!html_type.includes("SEARCH_CASCADE")) {
441
+ this.cancelOptionsRequest && this.cancelOptionsRequest();
442
+ }
443
+ // this.optionsRequestSource = axios.CancelToken.source();
444
+ if (keyword && !defFalg) {
445
+ let key = typeof keyword === "string" ? keyword.trim() : keyword;
446
+ key && this.handleSearchTracher(itemData, { keyword: key });
447
+ }
448
+ Object.assign(params, { asyncCount: 1 });
449
+ let handleEditFormGetWordbookData = this.editFormApiConfig?.handleEditFormGetWordbookData
450
+ if (!handleEditFormGetWordbookData || typeof handleEditFormGetWordbookData !== 'function') {
451
+ handleEditFormGetWordbookData = this.getWordbookDataRequest
452
+ }
453
+ return handleEditFormGetWordbookData(params, { optionsRequestSource: this.optionsRequestSource }).then((data) => {
454
+ this.optionsRequestSource = null;
455
+ this.fetching = false;
456
+ if (otherConfig.page) {
457
+ this.handleSearchScrollTop(itemData);
458
+ }
459
+ closeLoading();
460
+ if (!data) return [];
461
+ this.searchAddObj[`${itemData.val_key}_${itemData.name}`] = true;
462
+ let { rows, fieldList, page, total } = data.map;
463
+ this.searchPageConfig = Object.assign(this.searchPageConfig, {
464
+ page,
465
+ total,
466
+ isRequest: true,
467
+ keyword
468
+ });
469
+ let rowData = [];
470
+ if (isCascade) {
471
+ wordbook.myUniqueLabel = myUniqueKey;
472
+ wordbook.myUniqueKey = myUniqueKey;
473
+ wordbook.isLoadData = html_type == "LEVEL_SEARCH_CASCADE";
474
+ if (wordbook.isLoadData) {
475
+ this.levelNum = defFalg ? 1 : this.levelNum;
476
+ }
477
+ rows = this.hanldeRemoveDuplicates(rows, {
478
+ key: wordbook.value_key
479
+ });
480
+ this.handleFormCascade(rows, wordbook);
481
+ rowData = rows;
482
+ } else {
483
+ // 去重
484
+ rowData = this.handleRowUnique(rows, itemData, {
485
+ myUniqueKey: myUniqueKey,
486
+ reqUniqueKey: reqUniqueKey
487
+ });
488
+
489
+ // 获取显示字段title
490
+ if (rowData.length > 0 && wordbook.render_key && wordbook.render_key.length > 1) {
491
+ rowData.unshift(
492
+ Object.assign(
493
+ {},
494
+ {
495
+ showLabel: this.getTitleHeader(fieldList, wordbook.render_key),
496
+ myUniqueKey: Math.random()
497
+ }
498
+ )
499
+ );
500
+ }
501
+ }
502
+ const searchList = [
503
+ "SEARCH",
504
+ "SEARCH_CASCADE",
505
+ "SEARCH_MORE",
506
+ "LEVEL_SEARCH_CASCADE"
507
+ ];
508
+ if (searchList.includes(html_type)) {
509
+ if (html_type != "LEVEL_SEARCH_CASCADE") {
510
+ this.curOptions = rowData;
511
+ } else {
512
+ (defFalg || !this.loadDataPrimary_key) && (this.curOptions = rowData);
513
+ }
514
+ }
515
+ // 默认值处理
516
+ this.handleGetSearchDefVal(defFalg, rowData, itemData, {
517
+ myUniqueKey: myUniqueKey,
518
+ reqUniqueKey: reqUniqueKey,
519
+ keyword: keyword,
520
+ ...otherConfig
521
+ });
522
+
523
+ // 自由输入
524
+ if (!defFalg && html_type == "SEARCH" && keyword && free_entry == "1") {
525
+ this.handleFreeEntry({
526
+ rowData,
527
+ keyword,
528
+ wordbook,
529
+ fieldList,
530
+ myUniqueKey
531
+ });
532
+ }
533
+
534
+ return rowData;
535
+
536
+ }).catch(() => {
537
+ closeLoading();
538
+ })
539
+
540
+ } catch (error) {
541
+ closeLoading();
542
+ console.log(error);
543
+ }
544
+ },
545
+
546
+ getWordbookDataRequest(params, config) {
547
+ let { optionsRequestSource } = config;
548
+ optionsRequestSource = this.axios.CancelToken.source();
549
+ return new Promise((resolve, reject) => {
550
+ this.axios
551
+ .post(`/tableReader/getWordbookData`, this.$qs.stringify(params), {
552
+ cancelToken: optionsRequestSource.token
553
+ })
554
+ .then(({ data }) => {
555
+ optionsRequestSource = null;
556
+ if (data.result === "SUCCESS") return resolve(data);
557
+ resolve(null);
558
+ })
559
+ .catch(err => {
560
+ reject(err);
561
+ });
562
+ });
563
+ },
564
+
565
+ handleFreeEntry(option = {}) {
566
+ const { rowData, keyword, wordbook, fieldList, myUniqueKey } = option;
567
+ if (!keyword) return;
568
+ const curKey = +new Date();
569
+ const data = {
570
+ [myUniqueKey]: curKey,
571
+ myUniqueKey: curKey,
572
+ myUniqueLabel: myUniqueKey,
573
+ [wordbook.value_key]: keyword,
574
+ is_free_entry_input__add: true // 标识是自由输入
575
+ };
576
+ const hasRenderKey = wordbook.render_key && wordbook.render_key.length > 1;
577
+ if (rowData.length === 0) {
578
+ this.curOptions = [];
579
+ if (hasRenderKey) {
580
+ rowData.unshift({
581
+ showLabel: this.getTitleHeader(fieldList, wordbook.render_key),
582
+ myUniqueKey: Math.random()
583
+ });
584
+ }
585
+ }
586
+ hasRenderKey ? rowData.splice(1, 0, data) : rowData.unshift(data);
587
+ this.curOptions = rowData;
588
+ },
589
+
590
+ /* 解析下拉选择接口返回字段 */
591
+ formatField(value) {
592
+ let res = value;
593
+ try {
594
+ if (res && typeof res == "string" && res.startsWith("###")) {
595
+ res = res.slice(3);
596
+ res = JSON.parse(res);
597
+ res = res.change_text;
598
+ }
599
+ return res || "";
600
+ } catch (error) {
601
+ return "";
602
+ }
603
+ },
604
+
605
+ /* 解析下拉选择接口返回字段 直接改变原有的 */
606
+ formatFieldValue(value) {
607
+ try {
608
+ if (value && typeof value == "string" && value.startsWith("###")) {
609
+ value = value.slice(3);
610
+ value = JSON.parse(value);
611
+ value = value.value;
612
+ }
613
+ return value || "";
614
+ } catch (error) {
615
+ console.log(error);
616
+ return "";
617
+ }
618
+ },
619
+
620
+ // 下拉搜索框获取字段title
621
+ getTitleHeader(fieldList, renderKey) {
622
+ let titleHeader = "";
623
+ let renderKeyArr = [];
624
+ if (Array.isArray(renderKey)) {
625
+ renderKeyArr = [...renderKey];
626
+ } else {
627
+ renderKeyArr = [renderKey];
628
+ }
629
+ renderKeyArr.forEach(render => {
630
+ for (let i = 0; i < fieldList.length; i++) {
631
+ if (render === fieldList[i].columnName) {
632
+ titleHeader += `≌${fieldList[i].title}`;
633
+ break;
634
+ }
635
+ }
636
+ });
637
+ titleHeader = titleHeader.slice(1);
638
+ return titleHeader;
639
+ },
640
+
641
+ handleRequestedUniqueKey(id) {
642
+ // const { hanldegetUniqueKey } = this.$listeners; //
643
+ const { hanldegetUniqueKey } = this.mainForm || {};
644
+ const starTiem = +new Date();
645
+
646
+ const getUniqueKey = (resolve, reject) => {
647
+ setTimeout(() => {
648
+ const res = hanldegetUniqueKey(id);
649
+ if (res && res.status) {
650
+ resolve(res.value);
651
+ } else {
652
+ let curTime = +new Date();
653
+ if (curTime - starTiem > 5000) {
654
+ reject("获取UniqueKe 异常!!");
655
+ return;
656
+ }
657
+ getUniqueKey(resolve, reject);
658
+ }
659
+ }, 16);
660
+ };
661
+ return new Promise((resolve, reject) => {
662
+ getUniqueKey(resolve, reject);
663
+ });
664
+ },
665
+
666
+ dealDictionatySearch(val) {
667
+ this.curOptions = this.curOptions.filter(i => {
668
+ return i.showLabel.includes(val);
669
+ });
670
+ },
671
+
672
+ // 下拉框搜索输入关键字后
673
+ handleMultipleSearch(val, itemData) {
674
+ clearTimeout(this.timeout);
675
+ const { wordbook = {}, html_type } = itemData;
676
+ const ISDICTIONARY = wordbook.type === "DICTIONARY";
677
+ // 257 云his需求新增通用字典 后端欧阳 产品晶晶
678
+ const arr = ["SEARCH", "SEARCH_MORE"];
679
+ if (arr.includes(html_type) && ISDICTIONARY && val) {
680
+ this.dealDictionatySearch(val);
681
+ return;
682
+ }
683
+ this.searchPageConfig.keyword = val || undefined;
684
+ if (this.dropdownHide && !val) return;
685
+ this.timeout = setTimeout(() => {
686
+ console.log('handleRequestedOptions---2');
687
+ this.handleRequestedOptions(itemData, val);
688
+ }, 200);
689
+ },
690
+
691
+ multipleSelect(e, item) {
692
+ const valKey = item.wordbook.value_key;
693
+ const selectList = this.selectedOptions || [];
694
+ const isSelect = selectList.some(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
695
+ let selectItem = {};
696
+ if (!isSelect) {
697
+ const fdItem = this.curOptions.find(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
698
+ selectList.push({ ...fdItem });
699
+ selectItem = fdItem;
700
+ }
701
+ this.selectedOptions = [...selectList];
702
+ this.$emit("valueOnChange", [...selectList], item);
703
+ this.hanlderSendSelectLog(item, selectItem);
704
+ this.handlerInputBlur(item);
705
+ },
706
+
707
+ multipleDeselect(e, item) {
708
+ const valKey = item.wordbook.value_key;
709
+ const selectList = this.selectedOptions || [];
710
+ const fnIndex = selectList.findIndex(v => `${v[valKey]}-${v["myUniqueKey"]}` == e.key);
711
+ if (fnIndex != -1) {
712
+ selectList.splice(fnIndex, 1);
713
+ }
714
+ this.selectedOptions = [...selectList];
715
+ this.$emit("valueOnChange", [...selectList], item);
716
+ },
717
+
718
+ // 搜索框没数据新增
719
+ handlerAddOptions(data, item) {
720
+ this.curAddBtnItem = item;
721
+ this.$emit("handlerAddOptions", { data });
722
+ },
723
+
724
+ searchMoreOnChange(value, item) {
725
+ // 标识用户有修改该值。
726
+ this.formType[item.val_key].isOnchange = "00";
727
+ if (!value || value.length === 0) {
728
+ this.$emit("valueOnChange", [], item);
729
+ }
730
+
731
+ // 通讯事件
732
+ // this.mainForm.formfieldOnChange(this.item);
733
+ },
734
+
735
+ // 处理级联数据
736
+ handleFormCascade(list = [], v = {}, level = 1) {
737
+ list.forEach(item => {
738
+ item.myLabel = this.hanldeGetCascadelabel(v.render_key, item) || item[v["value_key"]];
739
+ item.myUniqueKey = item[v.myUniqueKey];
740
+ item.myUniqueLabel = v.myUniqueKey;
741
+ if (v.isLoadData) {
742
+ item.isLeaf = v.level_num ? this.levelNum >= v.level_num : false;
743
+ } else {
744
+ if (level >= v.level_num) {
745
+ delete item.children;
746
+ }
747
+ if (item.children && item.children.length) {
748
+ this.handleFormCascade(item.children, v, level + 1);
749
+ }
750
+ }
751
+ });
752
+ },
753
+
754
+ hanldeGetCascadelabel(v = [], k = {}) {
755
+ if (Array.isArray(v) && v.length) {
756
+ const l = [];
757
+ v.forEach(i => {
758
+ l.push(k[i]);
759
+ });
760
+ return l.join("_");
761
+ }
762
+ return "";
763
+ },
764
+
765
+ handleCascaderChange(option, item) {
766
+ // selectedOptions
767
+ this.Choose_to_complete = false;
768
+ this.cascaderInitLabel = false;
769
+ let [value, selectedOptions] = option;
770
+ selectedOptions = selectedOptions || [];
771
+
772
+ let isAllowClear = value.length === 0 && selectedOptions.length === 0;
773
+ if (item.allow_check_mid_level && item.is_allow_check_mid == 1 && !isAllowClear) {
774
+ if (item.allow_check_mid_level > (value?.length || 0)) {
775
+ this.noAllow_check_mid_level = true;
776
+ return;
777
+ }
778
+ }
779
+ this.noAllow_check_mid_level = false;
780
+
781
+ item.selectValue = value;
782
+ item.selectedOptions = null;
783
+ item.selectedOptions = selectedOptions;
784
+ // 缓存方便提交表单处理
785
+ this.selectedOptions = [...selectedOptions];
786
+ this.$emit("valueOnChange", [...selectedOptions], item);
787
+ this.formType[item.val_key].isOnchange = "00";
788
+ if (value.length == 0 && selectedOptions.length == 0) {
789
+ this.defaultValue[item.name] = "";
790
+ this.formType[item.val_key].default_val = "";
791
+ this.hideHotSearch = true;
792
+ }
793
+ this.Choose_to_complete = true;
794
+ // 通讯事件
795
+ // this.mainForm.formfieldOnChange(this.item);
796
+ },
797
+
798
+ handleCascaderFilter(inputValue, path) {
799
+ return path.some(
800
+ option => option.myLabel.toLowerCase().indexOf(inputValue.toLowerCase()) > -1
801
+ );
802
+ },
803
+
804
+ async handleCascadeLoadData(selectedOptions) {
805
+ this.levelNum = selectedOptions.length + 1;
806
+ const targetOption = selectedOptions[selectedOptions.length - 1];
807
+ this.loadDataPrimary_key = targetOption[this.item.wordbook.primary_key];
808
+ targetOption.loading = true;
809
+ try {
810
+ console.log('handleRequestedOptions---3');
811
+ const res = await this.handleRequestedOptions(this.item, "", false);
812
+ targetOption.loading = false;
813
+ targetOption.children = res && res.length ? [...res] : undefined;
814
+ this.curOptions = [...this.curOptions];
815
+ } catch (error) {
816
+ console.log(error);
817
+ }
818
+ },
819
+ // 级联 end
820
+
821
+ handlerDropdownVisibleChange(e, data) {
822
+ const searchList = ["SEARCH_MORE", "SEARCH"];
823
+ if (e) {
824
+ e.preventDefault && e.preventDefault();
825
+ e.stopPropagation && e.stopPropagation();
826
+ this.handleCalculateOptionsMaxWidth();
827
+ }
828
+
829
+ let isRequest = true;
830
+
831
+ if (this.optionsMaxWidth === "100%") {
832
+ // 100% 是默认值,如果已经计算过了,不用再算
833
+ this.handleCalculateOptionsMaxWidth();
834
+ }
835
+ this.dropdownHide = !e;
836
+ if (Object.keys(data || {}).length > 0) {
837
+ const searchList = ["SEARCH_CASCADE", "LEVEL_SEARCH_CASCADE"];
838
+ if (searchList.includes(data.html_type)) {
839
+ isRequest = !(this.curOptions && this.curOptions.length);
840
+ }
841
+ if (e && ["SEARCH_MORE", "SEARCH"].includes(data.html_type)) {
842
+ this.handlerSearchOnFocus(data);
843
+ }
844
+ if (e && isRequest) {
845
+ console.log('handleRequestedOptions---4');
846
+ this.handleRequestedOptions(data);
847
+ }
848
+ if (!e && this.noAllow_check_mid_level && searchList.includes(data.html_type)) {
849
+ setTimeout(() => {
850
+ this.$set(data, "useFormValue", null);
851
+ }, 16);
852
+ }
853
+ }
854
+
855
+ if (!e) {
856
+ // 弹窗关闭才收集级联“常用”值,避免还没选完重复提交。
857
+ this.handleCascaderTracher();
858
+ setTimeout(() => {
859
+ this.searchPageConfig.keyword = undefined;
860
+ }, 300);
861
+ }
862
+ },
863
+
864
+ hanlderGetSearchLabel(config, v) {
865
+ const { wordbook } = config;
866
+ let showLabel = "";
867
+ // "自由输入"的直接 return v[wordbook.value_key]
868
+ if (!v.is_free_entry_input__add && wordbook.show_key && wordbook.show_key.length) {
869
+ wordbook.show_key.forEach(s => {
870
+ showLabel += ` ${this.formatField(v[s])}`;
871
+ });
872
+ return showLabel;
873
+ }
874
+ return v[wordbook.value_key];
875
+ },
876
+ hanlderSendSelectLog(item = {}, value) {
877
+ // 收集选中的数据 多个展示字段取第一个
878
+ const show_key = ((item.wordbook && item.wordbook.show_key) || [])[0];
879
+ const label = show_key ? value[show_key] : "";
880
+ label && this.handleSearchTracher(item, { select: label });
881
+ },
882
+ // 搜索框选中
883
+ handleSearchSelect(e, option, type, eventConfig) {
884
+ const setList = option?.bindEventSetting || [];
885
+ const isInit = "init" === eventConfig?.eventType;
886
+ const formData = this.getFormValue();
887
+ // 如果有绑定事件,先触发绑定的事件。
888
+ try {
889
+ if (Array.isArray(setList)) {
890
+ this.handlerInputBlur(option, null, "blur", eventConfig);
891
+ }
892
+ } catch (err) {
893
+ console.log(err);
894
+ }
895
+ // hasOwnProperty
896
+ const searchOption = this.curOptions;
897
+ // 当前选中的对象
898
+ let selectItem = searchOption.find(
899
+ ele => `${ele[option.wordbook.value_key]}>>>${ele["myUniqueKey"]}` === e
900
+ );
901
+ // 标识是自由输入的值
902
+ const is_free = selectItem?.is_free_entry_input__add || false;
903
+ // 自由输入的 数据是前端生成的要清空,避免”带出“事件赋值
904
+ if (is_free) {
905
+ selectItem = {};
906
+ }
907
+ const setting = option?.wordbook?.setting || {};
908
+ if (Object.keys(selectItem || {}).length > 0 && type === "select") {
909
+ this.hanlderSendSelectLog(option, selectItem);
910
+ }
911
+
912
+ if (selectItem && setting) {
913
+ Object.keys(selectItem).forEach(s => {
914
+ if (
915
+ selectItem[s] &&
916
+ typeof selectItem[s] == "string" &&
917
+ selectItem[s].startsWith("###")
918
+ ) {
919
+ selectItem[s] = selectItem[s].slice(3);
920
+ selectItem[s] = JSON.parse(selectItem[s]);
921
+ selectItem[s] = selectItem[s].value;
922
+ }
923
+ });
924
+ }
925
+ },
926
+
927
+ // SEARCH 检索框翻页
928
+ handleSearchChangePage(type = "next") {
929
+ let cType = type || "next";
930
+ let { page, keyword = undefined } = this.searchPageConfig;
931
+ page = cType === "next" ? page + 1 : page - 1;
932
+ console.log('handleRequestedOptions---5');
933
+ this.handleRequestedOptions(this.item, keyword, false, { page });
934
+ },
935
+
936
+ handleCalculateOptionsMaxWidth() {
937
+ if (!SELECT_LIST.includes(this.item?.html_type || undefined)) return;
938
+ this.$nextTick(() => {
939
+ const offsetWidth = this.$el.offsetWidth;
940
+ let res = offsetWidth,
941
+ maxwith;
942
+ try {
943
+ let item = this.$el.querySelector(".ant-select");
944
+ const itemRect = item.getBoundingClientRect();
945
+ let baseDom = this.mainForm.$el.querySelector(".big-table");
946
+ const baseRect = baseDom.getBoundingClientRect();
947
+ maxwith = baseRect.right - itemRect.left;
948
+
949
+ if (typeof offsetWidth === "number" && isFinite(maxwith)) {
950
+ if (maxwith > offsetWidth) {
951
+ res = maxwith;
952
+ } else {
953
+ res = offsetWidth;
954
+ }
955
+ }
956
+ } catch (error) {
957
+ res = offsetWidth;
958
+ }
959
+
960
+ res = parseInt(res, 10);
961
+ this.optionsMaxWidth = `${res}px`;
962
+ });
963
+ },
964
+
965
+ handlerSearchOnFocus(item) {
966
+ if (this.selectIsOpen) return;
967
+ let { queryParamsType, queryParams = [] } = item.wordbook || {};
968
+ // setTimeout(() => {
969
+ this.$nextTick(() => {
970
+ this.selsectVisible = true;
971
+ let formData = this.mainForm.handleGetAllFormValue();
972
+ let params = formData;
973
+ if (queryParamsType == 1) {
974
+ params = this.handleQueryParams(formData, queryParams);
975
+ }
976
+ // 弹窗列表选项事件推出
977
+ this.$emit("opentableSelect", true, this.item, params);
978
+ });
979
+ // }, 300);
980
+ },
981
+ handleQueryParams(formData, queryParams) {
982
+ let tempFormData = {};
983
+ if (queryParams.length) {
984
+ queryParams.forEach(v => {
985
+ if (v in formData) {
986
+ tempFormData[v] = formData[v];
987
+ }
988
+ });
989
+ }
990
+ return tempFormData;
991
+ },
992
+
993
+ confirmSelect({ value, selectRow = [], myUniqueKey }) {
994
+ const { item } = this;
995
+ if (this.item.html_type === "SEARCH_MORE") {
996
+ let selecteds = this.baseForm.getFieldValue(item.val_key) || [];
997
+ this.formType[item.val_key].isOnchange = "00";
998
+ let mergeValList = [...value, ...selecteds];
999
+ let mergeSelectList = [...selectRow, ...this.curMultipleSelected];
1000
+
1001
+ let valueList = this.hanldeRemoveDuplicates(mergeValList, {
1002
+ key: "key"
1003
+ });
1004
+ let list = this.hanldeRemoveDuplicates(mergeSelectList, {
1005
+ key: myUniqueKey
1006
+ });
1007
+
1008
+ let copy = JSON.parse(JSON.stringify(list));
1009
+
1010
+ this.curOptions = [...copy];
1011
+ this.$set(this.item, "useFormValue", valueList);
1012
+ // this.baseForm.setFieldsValue({
1013
+ // [item.val_key]: valueList
1014
+ // });
1015
+
1016
+ this.curMultipleSelected = [...copy];
1017
+ this.$emit("valueOnChange", [...copy], this.item);
1018
+ } else {
1019
+ this.curOptions = [...selectRow];
1020
+ this.$set(this.item, "useFormValue", value);
1021
+ // this.baseForm.setFieldsValue({
1022
+ // [item.val_key]: value
1023
+ // });
1024
+ this.handleSearchSelect(value, this.item);
1025
+ }
1026
+ },
1027
+
1028
+ hanldeRemoveDuplicates(list = [], config = {}) {
1029
+ if (!Array.isArray(list)) return [];
1030
+ const { key } = config;
1031
+ let obj = {};
1032
+ if (!key) return list;
1033
+
1034
+ let resList = list.reduce((cur, next) => {
1035
+ obj[next[key]] ? "" : (obj[next[key]] = true && cur.push(next));
1036
+ return cur;
1037
+ }, []);
1038
+
1039
+ return [...resList];
1040
+ },
1041
+
1042
+ getFormValue() {
1043
+ return this.handleGetAllFormValue();
1044
+ },
1045
+
1046
+ // 取消请求 handleRequestedOptions
1047
+ cancelOptionsRequest() {
1048
+ if (this.optionsRequestSource && typeof this.optionsRequestSource.cancel === "function") {
1049
+ // 取消请求
1050
+ this.optionsRequestSource.cancel("请求已取消!");
1051
+ this.optionsRequestSource = null;
1052
+ }
1053
+ },
1054
+
1055
+ async getHotSearchConfig() {
1056
+ const { item, mainForm } = this;
1057
+ if (!SELECT_LIST.includes(item.html_type) || item.is_recommend != "1") return;
1058
+ let params = {
1059
+ formId: mainForm.params_formId,
1060
+ valKey: item.val_key,
1061
+ htmlType: item.html_type
1062
+ }
1063
+ let handleEditFormCommonLatestAndHot = this.editFormApiConfig?.handleEditFormCommonLatestAndHot
1064
+ if (!handleEditFormCommonLatestAndHot || typeof handleEditFormCommonLatestAndHot !== 'function') {
1065
+ handleEditFormCommonLatestAndHot = this.commonLatestAndHotRequest
1066
+ }
1067
+ let data = await handleEditFormCommonLatestAndHot(params)
1068
+ if (!data) return;
1069
+ this.hotSearchConfig.isRequest = true;
1070
+ let hotList = (data?.map?.hotList || []).filter(Boolean);
1071
+ let latestList = (data?.map?.latestList || []).filter(Boolean);
1072
+ let config = Object.assign(this.hotSearchConfig, { hotList, latestList });
1073
+ this.$set(this, "hotSearchConfig", config);
1074
+ },
1075
+ commonLatestAndHotRequest(params) {
1076
+ return new Promise((resolve, reject) => {
1077
+ this.axios
1078
+ .get(`/tableReader/commonLatestAndHot`, { params })
1079
+ .then(({ data }) => {
1080
+ if (data.result === "SUCCESS") return resolve(data);
1081
+ resolve(null);
1082
+ })
1083
+ .catch(err => {
1084
+ reject(err);
1085
+ });
1086
+ });
1087
+ },
1088
+
1089
+ handleSelectHotKeyword(key) {
1090
+ const input = this.$el.querySelector(".ant-select-search__field");
1091
+ if (input) {
1092
+ input.value = key;
1093
+ var event = new InputEvent("input");
1094
+ input.dispatchEvent(event);
1095
+ } else {
1096
+ // 最近搜索级联选中
1097
+ // this.handlemMainFormFillItemVal(this.item, "", key.value);
1098
+ this.open = false;
1099
+ if (SELECT_LIST.includes(this.item.html_type)) {
1100
+ if (!key.keyword) return;
1101
+ this.handleSearchTracher(this.item, {
1102
+ select: key.value,
1103
+ keyword: key.keyword
1104
+ });
1105
+ // 级联选中“常用”值后失去焦点。
1106
+ let input = this.$el.querySelector(".ant-cascader-input");
1107
+ let cascader = this.$el.querySelector(".ant-cascader-picker");
1108
+ cascader && cascader.blur();
1109
+ if (input) {
1110
+ input.blur();
1111
+ }
1112
+ }
1113
+ }
1114
+ },
1115
+
1116
+ hanldeClearLately() {
1117
+ const { item, mainForm } = this;
1118
+ let params = {
1119
+ formId: mainForm.params_formId,
1120
+ valKey: item.val_key,
1121
+ htmlType: item.html_type
1122
+ }
1123
+ let handleEditFormDeleteLatestAndHot = this.editFormApiConfig?.handleEditFormDeleteLatestAndHot;
1124
+ if (!handleEditFormDeleteLatestAndHot || typeof handleEditFormDeleteLatestAndHot !== 'function') {
1125
+ handleEditFormDeleteLatestAndHot = this.deleteLatestAndHotRequest
1126
+ }
1127
+ handleEditFormDeleteLatestAndHot(params);
1128
+ },
1129
+ deleteLatestAndHotRequest(params) {
1130
+ return new Promise((resolve, reject) => {
1131
+ this.axios
1132
+ .post(`/form/deleteLatestAndHot`, this.$qs.stringify(params))
1133
+ .then(({ data }) => {
1134
+ if (data.result == "SUCCESS") return resolve(data);
1135
+ this.$message.warning(data.resultMsg || "删除失败");
1136
+ resolve(null);
1137
+ })
1138
+ .catch(err => {
1139
+ reject(err);
1140
+ });
1141
+ });
1142
+ },
1143
+ closeHotSearch() {
1144
+ this.hideHotSearch = false;
1145
+ this.searchShowHotList = false;
1146
+ },
1147
+ handleSearchTracher(item, obj = { keyword: "", select: "" }) {
1148
+ if (!SELECT_LIST.includes(item?.html_type || undefined)) return;
1149
+ const { mainForm } = this;
1150
+ const { keyword = "", select = "" } = obj || {};
1151
+ // 埋点
1152
+ let key =
1153
+ item.html_type === "SEARCH_MORE"
1154
+ ? "表单搜索多选框"
1155
+ : item.html_type === "SEARCH"
1156
+ ? "表单搜索框"
1157
+ : item.html_type === "SEARCH_CASCADE"
1158
+ ? "表单级联搜索"
1159
+ : "表单逐级级联";
1160
+ let params = {
1161
+ key,
1162
+ params_formId: mainForm.params_formId,
1163
+ val_key: item.val_key,
1164
+ name: item.name,
1165
+ keyword,
1166
+ select
1167
+ }
1168
+ this.handleGetConfigApi(params, 'handleEditFormSearchTracher');
1169
+ // try {
1170
+ // this.$_handleTracherLog(key, {
1171
+ // 表单ID: mainForm.params_formId,
1172
+ // 字段Key: item.val_key,
1173
+ // 字段名称: item.name,
1174
+ // 搜索关键字: keyword,
1175
+ // 选中值: select
1176
+ // });
1177
+ // } catch (error) {
1178
+ // console.log(error);
1179
+ // }
1180
+ },
1181
+
1182
+ hanldercheckOption(data) {
1183
+ // let objKey = `${data.val_key}_${data.name}`;
1184
+ return (
1185
+ data.wordbook && data.wordbook.add_btn
1186
+ // this.curOptions &&
1187
+ // this.curOptions.length === 0 &&
1188
+ // this.searchAddObj[objKey]
1189
+ );
1190
+ },
1191
+
1192
+ /**
1193
+ * 检索框切换分页,滚动条置顶
1194
+ */
1195
+ handleSearchScrollTop(item) {
1196
+ try {
1197
+ let c = `.search-menu-${item.val_key}`;
1198
+ let list = document.querySelectorAll(c);
1199
+ list.forEach(v => {
1200
+ let u = v.querySelector(".ant-select-dropdown-menu");
1201
+ if (u) {
1202
+ u.scrollTop = 0;
1203
+ }
1204
+ });
1205
+ } catch (error) {
1206
+ console.log(error, "handleSearchScrollTop");
1207
+ }
1208
+ },
1209
+
1210
+ handleCascaderTracher() {
1211
+ if (!this.Choose_to_complete) return;
1212
+ const CASCADELIST = ["LEVEL_SEARCH_CASCADE", "SEARCH_CASCADE"];
1213
+ this.$nextTick(() => {
1214
+ const { item, selectedOptions } = this;
1215
+ if (!CASCADELIST.includes(item.html_type)) return;
1216
+ if (Array.isArray(selectedOptions) && selectedOptions.length > 0) {
1217
+ let val = this.handleGetAllFormValue()[item.val_key];
1218
+ let keyword = "";
1219
+ if (vexutils.isJSON(val)) {
1220
+ keyword = JSON.parse(val)?.objStr || "";
1221
+ }
1222
+ if (!keyword) return;
1223
+ this.handleSearchTracher(item, {
1224
+ select: val,
1225
+ keyword: keyword
1226
+ });
1227
+ }
1228
+ });
1229
+ this.Choose_to_complete = false;
1230
+ },
1231
+
1232
+ handleSearchBlur() {
1233
+ // 主动让 select 框失去焦点
1234
+ try {
1235
+ let k = `search-${this.item.val_key}`;
1236
+ let t = this.$refs[k];
1237
+ if (Array.isArray(t)) {
1238
+ t = t[0];
1239
+ }
1240
+ this.searchShowHotList = false;
1241
+ t?.blur();
1242
+ } catch (error) {
1243
+ console.log(error);
1244
+ }
1245
+ }
1246
+ }
1247
+ };