cnhis-design-vue 2.1.58 → 2.1.59

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