cnhis-design-vue 2.1.56 → 2.1.58

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