vxe-pc-ui 4.20.34 → 4.20.35
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.
- package/dist/all.esm.js +45718 -45038
- package/dist/all.esm.min.js +3 -3
- package/dist/style.css +307 -1
- package/dist/style.mini.css +1 -1
- package/es/alert/src/alert.js +117 -114
- package/es/anchor/src/anchor-link.js +110 -107
- package/es/anchor/src/anchor.js +212 -209
- package/es/avatar/src/avatar.js +132 -129
- package/es/backtop/src/backtop.js +267 -264
- package/es/badge/src/badge.js +102 -99
- package/es/breadcrumb/src/breadcrumb-item.js +104 -101
- package/es/breadcrumb/src/breadcrumb.js +70 -67
- package/es/button/src/button-group.js +88 -85
- package/es/calendar/src/calendar.js +1371 -1368
- package/es/card/src/card.js +235 -232
- package/es/carousel/src/carousel-item.js +78 -75
- package/es/carousel/src/carousel.js +392 -389
- package/es/cascader/src/cascader.js +1667 -1664
- package/es/checkbox/src/button.js +198 -195
- package/es/checkbox/src/checkbox.js +181 -178
- package/es/checkbox/src/group.js +210 -207
- package/es/collapse/src/collapse-pane.js +98 -95
- package/es/collapse/src/collapse.js +340 -337
- package/es/color-picker/src/color-picker.js +1116 -1113
- package/es/components.d.ts +1 -0
- package/es/components.js +3 -0
- package/es/context-menu/src/context-menu.js +601 -598
- package/es/countdown/src/countdown.js +224 -221
- package/es/date-panel/src/date-panel.js +1905 -1902
- package/es/date-picker/src/date-picker.js +1537 -1534
- package/es/date-range-picker/src/date-range-picker.js +1412 -1409
- package/es/divider/src/divider.js +80 -77
- package/es/drawer/src/drawer.js +778 -775
- package/es/empty/src/empty.js +100 -97
- package/es/form/src/form-group.js +74 -71
- package/es/form/src/form-item.js +76 -73
- package/es/form/src/form.js +789 -786
- package/es/icon/src/icon.js +59 -56
- package/es/icon/style.css +1 -1
- package/es/icon/style.mini.css +1 -1
- package/es/icon-picker/src/icon-picker.js +719 -716
- package/es/image/src/group.js +130 -127
- package/es/image/src/image.js +243 -240
- package/es/image/src/preview.js +627 -624
- package/es/index.esm.js +2 -0
- package/es/index.js +2 -0
- package/es/input/src/input.js +2700 -2697
- package/es/layout-aside/src/layout-aside.js +138 -135
- package/es/layout-body/src/layout-body.js +145 -142
- package/es/layout-container/src/layout-container.js +71 -68
- package/es/layout-footer/src/layout-footer.js +60 -57
- package/es/layout-header/src/layout-header.js +58 -55
- package/es/link/src/link.js +131 -128
- package/es/list/src/list.js +2174 -2171
- package/es/loading/src/loading.js +141 -138
- package/es/mention/src/mention.js +49 -46
- package/es/menu/src/menu.js +799 -796
- package/es/modal/src/modal.js +1519 -1527
- package/es/notice-bar/src/notice-bar.js +168 -165
- package/es/number-input/src/number-input.js +1094 -1091
- package/es/pager/src/pager.js +767 -764
- package/es/password-input/src/password-input.js +431 -428
- package/es/print/src/page-break.js +63 -60
- package/es/print/src/print.js +303 -300
- package/es/pulldown/src/pulldown.js +403 -400
- package/es/radio/src/button.js +214 -211
- package/es/radio/src/group.js +195 -192
- package/es/radio/src/radio.js +194 -191
- package/es/rate/src/rate.js +164 -161
- package/es/result/src/result.js +116 -113
- package/es/row/src/col.js +133 -130
- package/es/row/src/row.js +111 -108
- package/es/scrollbar/src/scrollbar.js +518 -515
- package/es/segmented/src/segmented.js +240 -237
- package/es/select/src/optgroup.js +44 -41
- package/es/select/src/option.js +39 -36
- package/es/select/src/select.js +1914 -1896
- package/es/slider/src/slider.js +419 -416
- package/es/space/src/space.js +190 -187
- package/es/splitter/src/splitter-panel.js +146 -143
- package/es/splitter/src/splitter.js +917 -914
- package/es/step-item/index.d.ts +76 -0
- package/es/step-item/index.js +17 -0
- package/es/steps/index.d.ts +288 -34
- package/es/steps/src/step-info.d.ts +6 -0
- package/es/steps/src/step-info.js +20 -0
- package/es/steps/src/step-item.d.ts +14 -0
- package/es/steps/src/step-item.js +39 -0
- package/es/steps/src/steps.d.ts +68 -8
- package/es/steps/src/steps.js +299 -47
- package/es/steps/src/util.d.ts +7 -0
- package/es/steps/src/util.js +44 -0
- package/es/steps/style.css +297 -0
- package/es/steps/style.mini.css +1 -0
- package/es/style.css +307 -1
- package/es/style.mini.css +1 -1
- package/es/switch/src/switch.js +228 -225
- package/es/table-select/src/table-select.js +865 -862
- package/es/table-transfer/src/table-transfer.js +61 -58
- package/es/tabs/src/tab-pane.js +102 -99
- package/es/tabs/src/tabs.js +936 -933
- package/es/tag/src/tag.js +163 -160
- package/es/text/src/text.js +232 -229
- package/es/text-ellipsis/src/text-ellipsis.js +252 -249
- package/es/textarea/src/textarea.js +434 -431
- package/es/timeline/src/timeline.js +74 -36
- package/es/timeline/src/util.js +7 -4
- package/es/tip/src/tip.js +117 -114
- package/es/tooltip/src/tooltip.js +552 -549
- package/es/tour/src/tour.js +49 -46
- package/es/transfer/src/transfer.js +95 -92
- package/es/tree/src/tree.js +3379 -3376
- package/es/tree-select/src/tree-select.js +969 -966
- package/es/ui/index.js +8 -2
- package/es/ui/src/log.js +1 -1
- package/es/upload/src/upload.js +1791 -1788
- package/es/vxe-icon/style.css +1 -1
- package/es/vxe-icon/style.mini.css +1 -1
- package/es/vxe-steps/style.css +297 -0
- package/es/vxe-steps/style.mini.css +1 -0
- package/es/watermark/src/watermark.js +158 -155
- package/lib/alert/src/alert.js +117 -114
- package/lib/anchor/src/anchor-link.js +110 -107
- package/lib/anchor/src/anchor.js +212 -209
- package/lib/avatar/src/avatar.js +132 -129
- package/lib/backtop/src/backtop.js +267 -264
- package/lib/badge/src/badge.js +102 -99
- package/lib/breadcrumb/src/breadcrumb-item.js +104 -101
- package/lib/breadcrumb/src/breadcrumb.js +70 -67
- package/lib/button/src/button-group.js +88 -85
- package/lib/calendar/src/calendar.js +1371 -1368
- package/lib/card/src/card.js +235 -232
- package/lib/carousel/src/carousel-item.js +78 -75
- package/lib/carousel/src/carousel.js +392 -389
- package/lib/cascader/src/cascader.js +1665 -1662
- package/lib/checkbox/src/button.js +198 -195
- package/lib/checkbox/src/checkbox.js +181 -178
- package/lib/checkbox/src/group.js +210 -207
- package/lib/collapse/src/collapse-pane.js +98 -95
- package/lib/collapse/src/collapse.js +340 -337
- package/lib/color-picker/src/color-picker.js +1116 -1113
- package/lib/components.js +3 -0
- package/lib/context-menu/src/context-menu.js +601 -598
- package/lib/countdown/src/countdown.js +224 -221
- package/lib/date-panel/src/date-panel.js +1905 -1902
- package/lib/date-picker/src/date-picker.js +1537 -1534
- package/lib/date-range-picker/src/date-range-picker.js +1412 -1409
- package/lib/divider/src/divider.js +80 -77
- package/lib/drawer/src/drawer.js +778 -775
- package/lib/empty/src/empty.js +100 -97
- package/lib/form/src/form-group.js +74 -71
- package/lib/form/src/form-item.js +76 -73
- package/lib/form/src/form.js +789 -786
- package/lib/icon/src/icon.js +59 -56
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.mini.css +1 -1
- package/lib/icon-picker/src/icon-picker.js +719 -716
- package/lib/image/src/group.js +130 -127
- package/lib/image/src/image.js +243 -240
- package/lib/image/src/preview.js +627 -624
- package/lib/index.common.js +2 -0
- package/lib/index.js +2 -0
- package/lib/index.umd.js +47411 -46732
- package/lib/index.umd.min.js +3 -3
- package/lib/input/src/input.js +2700 -2697
- package/lib/layout-aside/src/layout-aside.js +138 -135
- package/lib/layout-body/src/layout-body.js +145 -142
- package/lib/layout-container/src/layout-container.js +71 -68
- package/lib/layout-footer/src/layout-footer.js +60 -57
- package/lib/layout-header/src/layout-header.js +58 -55
- package/lib/link/src/link.js +131 -128
- package/lib/list/src/list.js +2173 -2170
- package/lib/loading/src/loading.js +141 -138
- package/lib/mention/src/mention.js +49 -46
- package/lib/menu/src/menu.js +799 -796
- package/lib/modal/src/modal.js +1519 -1527
- package/lib/notice-bar/src/notice-bar.js +168 -165
- package/lib/number-input/src/number-input.js +1094 -1091
- package/lib/pager/src/pager.js +767 -764
- package/lib/password-input/src/password-input.js +431 -428
- package/lib/print/src/page-break.js +63 -60
- package/lib/print/src/print.js +303 -300
- package/lib/pulldown/src/pulldown.js +403 -400
- package/lib/radio/src/button.js +214 -211
- package/lib/radio/src/group.js +195 -192
- package/lib/radio/src/radio.js +194 -191
- package/lib/rate/src/rate.js +164 -161
- package/lib/result/src/result.js +116 -113
- package/lib/row/src/col.js +133 -130
- package/lib/row/src/row.js +111 -108
- package/lib/scrollbar/src/scrollbar.js +518 -515
- package/lib/segmented/src/segmented.js +240 -237
- package/lib/select/src/optgroup.js +44 -41
- package/lib/select/src/option.js +39 -36
- package/lib/select/src/select.js +1915 -1897
- package/lib/slider/src/slider.js +419 -416
- package/lib/space/src/space.js +190 -187
- package/lib/splitter/src/splitter-panel.js +146 -143
- package/lib/splitter/src/splitter.js +917 -914
- package/lib/step-item/index.js +47 -0
- package/lib/steps/src/step-info.js +49 -0
- package/lib/steps/src/step-item.js +59 -0
- package/lib/steps/src/steps.js +298 -46
- package/lib/steps/src/util.js +74 -0
- package/lib/steps/style/style.css +297 -0
- package/lib/steps/style/style.mini.css +1 -0
- package/lib/style.css +307 -1
- package/lib/style.mini.css +1 -1
- package/lib/switch/src/switch.js +228 -225
- package/lib/table-select/src/table-select.js +865 -862
- package/lib/table-transfer/src/table-transfer.js +61 -58
- package/lib/tabs/src/tab-pane.js +102 -99
- package/lib/tabs/src/tabs.js +936 -933
- package/lib/tag/src/tag.js +163 -160
- package/lib/text/src/text.js +232 -229
- package/lib/text-ellipsis/src/text-ellipsis.js +252 -249
- package/lib/textarea/src/textarea.js +434 -431
- package/lib/timeline/src/timeline.js +74 -36
- package/lib/timeline/src/util.js +7 -4
- package/lib/tip/src/tip.js +117 -114
- package/lib/tooltip/src/tooltip.js +552 -549
- package/lib/tour/src/tour.js +49 -46
- package/lib/transfer/src/transfer.js +95 -92
- package/lib/tree/src/tree.js +3379 -3376
- package/lib/tree-select/src/tree-select.js +969 -966
- package/lib/ui/index.js +8 -2
- package/lib/ui/src/log.js +1 -1
- package/lib/upload/src/upload.js +1788 -1785
- package/lib/vxe-icon/style/style.css +1 -1
- package/lib/vxe-icon/style/style.mini.css +1 -1
- package/lib/vxe-steps/style/style.css +297 -0
- package/lib/vxe-steps/style/style.mini.css +1 -0
- package/lib/watermark/src/watermark.js +158 -155
- package/package.json +1 -1
- package/packages/alert/src/alert.ts +2 -2
- package/packages/anchor/src/anchor-link.ts +2 -2
- package/packages/anchor/src/anchor.ts +2 -2
- package/packages/avatar/src/avatar.ts +2 -2
- package/packages/backtop/src/backtop.ts +2 -2
- package/packages/badge/src/badge.ts +2 -2
- package/packages/breadcrumb/src/breadcrumb-item.ts +2 -2
- package/packages/breadcrumb/src/breadcrumb.ts +2 -2
- package/packages/button/src/button-group.ts +2 -2
- package/packages/calendar/src/calendar.ts +2 -2
- package/packages/card/src/card.ts +2 -2
- package/packages/carousel/src/carousel-item.ts +2 -2
- package/packages/carousel/src/carousel.ts +2 -2
- package/packages/cascader/src/cascader.ts +2 -2
- package/packages/checkbox/src/button.ts +3 -15
- package/packages/checkbox/src/checkbox.ts +2 -2
- package/packages/checkbox/src/group.ts +2 -2
- package/packages/collapse/src/collapse-pane.ts +2 -2
- package/packages/collapse/src/collapse.ts +2 -2
- package/packages/color-picker/src/color-picker.ts +2 -2
- package/packages/components.ts +3 -0
- package/packages/context-menu/src/context-menu.ts +3 -16
- package/packages/countdown/src/countdown.ts +2 -2
- package/packages/date-panel/src/date-panel.ts +2 -2
- package/packages/date-picker/src/date-picker.ts +2 -2
- package/packages/date-range-picker/src/date-range-picker.ts +2 -2
- package/packages/divider/src/divider.ts +2 -2
- package/packages/drawer/src/drawer.ts +2 -2
- package/packages/empty/src/empty.ts +2 -2
- package/packages/form/src/form-group.ts +2 -2
- package/packages/form/src/form-item.ts +2 -2
- package/packages/form/src/form.ts +2 -2
- package/packages/icon/src/icon.ts +2 -2
- package/packages/icon-picker/src/icon-picker.ts +2 -2
- package/packages/image/src/group.ts +2 -2
- package/packages/image/src/image.ts +2 -2
- package/packages/image/src/preview.ts +3 -16
- package/packages/index.ts +2 -2
- package/packages/input/src/input.ts +2 -2
- package/packages/layout-aside/src/layout-aside.ts +2 -2
- package/packages/layout-body/src/layout-body.ts +2 -2
- package/packages/layout-container/src/layout-container.ts +3 -14
- package/packages/layout-footer/src/layout-footer.ts +2 -2
- package/packages/layout-header/src/layout-header.ts +2 -2
- package/packages/link/src/link.ts +2 -2
- package/packages/list/src/list.ts +2 -2
- package/packages/loading/src/loading.ts +2 -2
- package/packages/mention/src/mention.ts +2 -2
- package/packages/menu/src/menu.ts +2 -2
- package/packages/modal/src/modal.ts +5 -20
- package/packages/notice-bar/src/notice-bar.ts +2 -2
- package/packages/number-input/src/number-input.ts +3 -17
- package/packages/pager/src/pager.ts +2 -2
- package/packages/password-input/src/password-input.ts +2 -2
- package/packages/print/src/page-break.ts +2 -2
- package/packages/print/src/print.ts +2 -2
- package/packages/pulldown/src/pulldown.ts +2 -2
- package/packages/radio/src/button.ts +3 -16
- package/packages/radio/src/group.ts +3 -17
- package/packages/radio/src/radio.ts +2 -2
- package/packages/rate/src/rate.ts +2 -2
- package/packages/result/src/result.ts +2 -2
- package/packages/row/src/col.ts +2 -2
- package/packages/row/src/row.ts +2 -2
- package/packages/scrollbar/src/scrollbar.ts +3 -4
- package/packages/segmented/src/segmented.ts +2 -2
- package/packages/select/src/optgroup.ts +2 -2
- package/packages/select/src/option.ts +2 -2
- package/packages/select/src/select.ts +33 -19
- package/packages/slider/src/slider.ts +2 -2
- package/packages/space/src/space.ts +2 -2
- package/packages/splitter/src/splitter-panel.ts +2 -2
- package/packages/splitter/src/splitter.ts +2 -2
- package/packages/step-item/index.ts +16 -0
- package/packages/steps/src/step-info.ts +18 -0
- package/packages/steps/src/step-item.ts +41 -0
- package/packages/steps/src/steps.ts +273 -13
- package/packages/steps/src/util.ts +44 -0
- package/packages/switch/src/switch.ts +2 -2
- package/packages/table-select/src/table-select.ts +2 -2
- package/packages/table-transfer/src/table-transfer.ts +3 -15
- package/packages/tabs/src/tab-pane.ts +2 -2
- package/packages/tabs/src/tabs.ts +2 -2
- package/packages/tag/src/tag.ts +2 -2
- package/packages/text/src/text.ts +2 -2
- package/packages/text-ellipsis/src/text-ellipsis.ts +2 -2
- package/packages/textarea/src/textarea.ts +2 -2
- package/packages/timeline/src/timeline-info.ts +17 -17
- package/packages/timeline/src/timeline.ts +93 -49
- package/packages/timeline/src/util.ts +44 -41
- package/packages/tip/src/tip.ts +2 -2
- package/packages/tooltip/src/tooltip.ts +2 -2
- package/packages/tour/src/tour.ts +2 -2
- package/packages/transfer/src/transfer.ts +2 -2
- package/packages/tree/src/tree.ts +2 -2
- package/packages/tree-select/src/tree-select.ts +2 -2
- package/packages/ui/index.ts +8 -1
- package/packages/upload/src/upload.ts +2 -2
- package/packages/watermark/src/watermark.ts +2 -2
- package/styles/all.scss +1 -0
- package/styles/components/step-item.scss +0 -0
- package/styles/components/steps.scss +354 -0
- package/styles/theme/base.scss +9 -0
- package/types/all.d.ts +3 -0
- package/types/components/gantt.d.ts +1 -3
- package/types/components/select.d.ts +1 -13
- package/types/components/step-item.d.ts +72 -0
- package/types/components/steps.d.ts +67 -8
- package/types/components/table.d.ts +7 -66
- package/types/handles/form-design.d.ts +1 -4
- package/types/ui/global-config.d.ts +2 -0
- package/types/ui/global-icon.d.ts +7 -0
- /package/dist/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/dist/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/dist/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/es/icon/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/es/icon/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/es/icon/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/es/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/es/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/es/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/es/vxe-icon/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/es/vxe-icon/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/es/vxe-icon/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/lib/icon/style/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/lib/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/lib/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/lib/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
- /package/lib/vxe-icon/style/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
- /package/lib/vxe-icon/style/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
- /package/lib/vxe-icon/style/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
package/es/select/src/select.js
CHANGED
|
@@ -70,874 +70,853 @@ function createInternalData() {
|
|
|
70
70
|
hpTimeout: void 0
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
var select_default =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
73
|
+
var select_default = (
|
|
74
|
+
/* define-vxe-component start */
|
|
75
|
+
defineVxeComponent({
|
|
76
|
+
name: "VxeSelect",
|
|
77
|
+
props: {
|
|
78
|
+
modelValue: [String, Number, Boolean, Array],
|
|
79
|
+
defaultConfig: Object,
|
|
80
|
+
emptyValue: {
|
|
81
|
+
type: [String, Number, Boolean, Array],
|
|
82
|
+
default: () => getConfig().select.emptyValue
|
|
83
|
+
},
|
|
84
|
+
clearable: {
|
|
85
|
+
type: Boolean,
|
|
86
|
+
default: () => getConfig().select.clearable
|
|
87
|
+
},
|
|
88
|
+
placeholder: String,
|
|
89
|
+
readonly: {
|
|
90
|
+
type: Boolean,
|
|
91
|
+
default: null
|
|
92
|
+
},
|
|
93
|
+
loading: Boolean,
|
|
94
|
+
disabled: {
|
|
95
|
+
type: Boolean,
|
|
96
|
+
default: null
|
|
97
|
+
},
|
|
98
|
+
multiple: Boolean,
|
|
99
|
+
multiCharOverflow: {
|
|
100
|
+
type: [Number, String],
|
|
101
|
+
default: () => getConfig().select.multiCharOverflow
|
|
102
|
+
},
|
|
103
|
+
prefixIcon: String,
|
|
104
|
+
allowCreate: {
|
|
105
|
+
type: Boolean,
|
|
106
|
+
default: () => getConfig().select.allowCreate
|
|
107
|
+
},
|
|
108
|
+
placement: String,
|
|
109
|
+
lazyOptions: Array,
|
|
110
|
+
options: Array,
|
|
111
|
+
optionProps: Object,
|
|
112
|
+
optionGroups: Array,
|
|
113
|
+
optionGroupProps: Object,
|
|
114
|
+
optionConfig: Object,
|
|
115
|
+
className: [String, Function],
|
|
116
|
+
/**
|
|
117
|
+
* 已废弃,请使用 popupConfig.className
|
|
118
|
+
* @deprecated
|
|
119
|
+
*/
|
|
120
|
+
popupClassName: [String, Function],
|
|
121
|
+
width: [String, Number],
|
|
122
|
+
max: {
|
|
123
|
+
type: [String, Number],
|
|
124
|
+
default: null
|
|
125
|
+
},
|
|
126
|
+
showRadio: {
|
|
127
|
+
type: Boolean,
|
|
128
|
+
default: () => getConfig().select.showRadio
|
|
129
|
+
},
|
|
130
|
+
radioConfig: Object,
|
|
131
|
+
showCheckbox: {
|
|
132
|
+
type: Boolean,
|
|
133
|
+
default: () => getConfig().select.showCheckedButton
|
|
134
|
+
},
|
|
135
|
+
checkboxConfig: Object,
|
|
136
|
+
/**
|
|
137
|
+
* 已废弃,请使用 popupConfig.zIndex
|
|
138
|
+
* @deprecated
|
|
139
|
+
*/
|
|
140
|
+
zIndex: Number,
|
|
141
|
+
size: {
|
|
142
|
+
type: String,
|
|
143
|
+
default: () => getConfig().select.size || getConfig().size
|
|
144
|
+
},
|
|
145
|
+
filterable: Boolean,
|
|
146
|
+
/**
|
|
147
|
+
* 已废弃,被 filter-config.filterMethod 替换
|
|
148
|
+
* @deprecated
|
|
149
|
+
*/
|
|
150
|
+
filterMethod: Function,
|
|
151
|
+
filterConfig: Object,
|
|
152
|
+
remote: Boolean,
|
|
153
|
+
remoteConfig: Object,
|
|
154
|
+
showBadge: Boolean,
|
|
155
|
+
badgeConfig: Object,
|
|
156
|
+
emptyText: String,
|
|
157
|
+
checkedClosable: {
|
|
158
|
+
type: Boolean,
|
|
159
|
+
default: () => getConfig().select.checkedClosable
|
|
160
|
+
},
|
|
161
|
+
clearClosable: {
|
|
162
|
+
type: Boolean,
|
|
163
|
+
default: () => getConfig().select.clearClosable
|
|
164
|
+
},
|
|
165
|
+
showCloseButton: {
|
|
166
|
+
type: Boolean,
|
|
167
|
+
default: () => getConfig().select.showCloseButton
|
|
168
|
+
},
|
|
169
|
+
showTotalButton: {
|
|
170
|
+
type: Boolean,
|
|
171
|
+
default: () => getConfig().select.showTotalButton
|
|
172
|
+
},
|
|
173
|
+
showCheckedButton: {
|
|
174
|
+
type: Boolean,
|
|
175
|
+
default: () => getConfig().select.showCheckedButton
|
|
176
|
+
},
|
|
177
|
+
showClearButton: {
|
|
178
|
+
type: Boolean,
|
|
179
|
+
default: () => getConfig().select.showClearButton
|
|
180
|
+
},
|
|
181
|
+
transfer: {
|
|
182
|
+
type: Boolean,
|
|
183
|
+
default: null
|
|
184
|
+
},
|
|
185
|
+
popupConfig: Object,
|
|
186
|
+
virtualYConfig: Object,
|
|
187
|
+
scrollY: Object,
|
|
188
|
+
useScrollbar: {
|
|
189
|
+
type: Boolean,
|
|
190
|
+
default: () => getDefVal(getConfig().select.useScrollbar, getConfig().useScrollbar)
|
|
191
|
+
},
|
|
192
|
+
scrollbarConfig: Object,
|
|
193
|
+
/**
|
|
194
|
+
* 已废弃,被 remote-config.queryMethod 替换
|
|
195
|
+
* @deprecated
|
|
196
|
+
*/
|
|
197
|
+
remoteMethod: Function,
|
|
198
|
+
/**
|
|
199
|
+
* 已废弃,被 option-config.keyField 替换
|
|
200
|
+
* @deprecated
|
|
201
|
+
*/
|
|
202
|
+
optionId: {
|
|
203
|
+
type: String,
|
|
204
|
+
default: () => getConfig().select.optionId
|
|
205
|
+
},
|
|
206
|
+
/**
|
|
207
|
+
* 已废弃,被 option-config.useKey 替换
|
|
208
|
+
* @deprecated
|
|
209
|
+
*/
|
|
210
|
+
optionKey: Boolean
|
|
203
211
|
},
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
const { readonly } = props;
|
|
245
|
-
if (readonly === null) {
|
|
246
|
-
if ($xeForm) {
|
|
247
|
-
return $xeForm.props.readonly;
|
|
212
|
+
emits: ["update:modelValue", "change", "default-change", "all-change", "clear", "blur", "focus", "click", "scroll", "visible-change"],
|
|
213
|
+
setup(props, context) {
|
|
214
|
+
const { slots, emit } = context;
|
|
215
|
+
const $xeModal = inject("$xeModal", null);
|
|
216
|
+
const $xeDrawer = inject("$xeDrawer", null);
|
|
217
|
+
const $xeTable = inject("$xeTable", null);
|
|
218
|
+
const $xeCard = inject("$xeCard", null);
|
|
219
|
+
const $xeForm = inject("$xeForm", null);
|
|
220
|
+
const formItemInfo = inject("xeFormItemInfo", null);
|
|
221
|
+
const xID = XEUtils.uniqueId();
|
|
222
|
+
const refElem = ref();
|
|
223
|
+
const refInput = ref();
|
|
224
|
+
const refInpSearch = ref();
|
|
225
|
+
const refVirtualWrapper = ref();
|
|
226
|
+
const refOptionPanel = ref();
|
|
227
|
+
const refVirtualSpaceElem = ref();
|
|
228
|
+
const refVirtualBody = ref();
|
|
229
|
+
const { computeSize } = useFns.useSize(props);
|
|
230
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props);
|
|
231
|
+
const reactData = reactive(createReactData());
|
|
232
|
+
const internalData = createInternalData();
|
|
233
|
+
const refMaps = {
|
|
234
|
+
refElem
|
|
235
|
+
};
|
|
236
|
+
const $xeSelect = {
|
|
237
|
+
xID,
|
|
238
|
+
props,
|
|
239
|
+
context,
|
|
240
|
+
reactData,
|
|
241
|
+
internalData,
|
|
242
|
+
getRefMaps: () => refMaps
|
|
243
|
+
};
|
|
244
|
+
const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns.useInitVScrollbar($xeSelect);
|
|
245
|
+
const computeFormReadonly = computed(() => {
|
|
246
|
+
const { readonly } = props;
|
|
247
|
+
if (readonly === null) {
|
|
248
|
+
if ($xeForm) {
|
|
249
|
+
return $xeForm.props.readonly;
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
248
252
|
}
|
|
249
|
-
return
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
return
|
|
253
|
+
return readonly;
|
|
254
|
+
});
|
|
255
|
+
const computeIsDisabled = computed(() => {
|
|
256
|
+
const { disabled } = props;
|
|
257
|
+
if (disabled === null) {
|
|
258
|
+
if ($xeForm) {
|
|
259
|
+
return $xeForm.props.disabled;
|
|
260
|
+
}
|
|
261
|
+
return false;
|
|
258
262
|
}
|
|
259
|
-
return
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
if (XEUtils.isBoolean(popupOpts.transfer)) {
|
|
267
|
-
return popupOpts.transfer;
|
|
268
|
-
}
|
|
269
|
-
if (transfer === null) {
|
|
270
|
-
const globalTransfer = getConfig().select.transfer;
|
|
271
|
-
if (XEUtils.isBoolean(globalTransfer)) {
|
|
272
|
-
return globalTransfer;
|
|
273
|
-
}
|
|
274
|
-
if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
|
|
275
|
-
return true;
|
|
263
|
+
return disabled;
|
|
264
|
+
});
|
|
265
|
+
const computeBtnTransfer = computed(() => {
|
|
266
|
+
const { transfer } = props;
|
|
267
|
+
const popupOpts = computePopupOpts.value;
|
|
268
|
+
if (XEUtils.isBoolean(popupOpts.transfer)) {
|
|
269
|
+
return popupOpts.transfer;
|
|
276
270
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const { placeholder } = props;
|
|
282
|
-
if (placeholder) {
|
|
283
|
-
return getFuncText(placeholder);
|
|
284
|
-
}
|
|
285
|
-
const globalPlaceholder = getConfig().select.placeholder;
|
|
286
|
-
if (globalPlaceholder) {
|
|
287
|
-
return getFuncText(globalPlaceholder);
|
|
288
|
-
}
|
|
289
|
-
return getI18n("vxe.base.pleaseSelect");
|
|
290
|
-
});
|
|
291
|
-
const computeDefaultOpts = computed(() => {
|
|
292
|
-
return Object.assign({}, props.defaultConfig);
|
|
293
|
-
});
|
|
294
|
-
const computePropsOpts = computed(() => {
|
|
295
|
-
return Object.assign({}, getConfig().select.optionProps, props.optionProps);
|
|
296
|
-
});
|
|
297
|
-
const computeGroupPropsOpts = computed(() => {
|
|
298
|
-
return Object.assign({}, getConfig().select.optionGroupProps, props.optionGroupProps);
|
|
299
|
-
});
|
|
300
|
-
const computeLabelField = computed(() => {
|
|
301
|
-
const propsOpts = computePropsOpts.value;
|
|
302
|
-
return propsOpts.label || "label";
|
|
303
|
-
});
|
|
304
|
-
const computeValueField = computed(() => {
|
|
305
|
-
const propsOpts = computePropsOpts.value;
|
|
306
|
-
return propsOpts.value || "value";
|
|
307
|
-
});
|
|
308
|
-
const computeGroupLabelField = computed(() => {
|
|
309
|
-
const groupPropsOpts = computeGroupPropsOpts.value;
|
|
310
|
-
return groupPropsOpts.label || "label";
|
|
311
|
-
});
|
|
312
|
-
const computeGroupOptionsField = computed(() => {
|
|
313
|
-
const groupPropsOpts = computeGroupPropsOpts.value;
|
|
314
|
-
return groupPropsOpts.options || "options";
|
|
315
|
-
});
|
|
316
|
-
const computeIsMaximize = computed(() => {
|
|
317
|
-
const selectVals = computeSelectVals.value;
|
|
318
|
-
return checkMaxLimit(selectVals);
|
|
319
|
-
});
|
|
320
|
-
const computePopupOpts = computed(() => {
|
|
321
|
-
return Object.assign({}, getConfig().select.popupConfig, props.popupConfig);
|
|
322
|
-
});
|
|
323
|
-
const computeVirtualYOpts = computed(() => {
|
|
324
|
-
return Object.assign({}, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY);
|
|
325
|
-
});
|
|
326
|
-
const computeRemoteOpts = computed(() => {
|
|
327
|
-
return Object.assign({}, getConfig().select.remoteConfig, props.remoteConfig);
|
|
328
|
-
});
|
|
329
|
-
const computeBadgeOpts = computed(() => {
|
|
330
|
-
return Object.assign({}, getConfig().select.badgeConfig, props.badgeConfig);
|
|
331
|
-
});
|
|
332
|
-
const computeBadgeCountNum = computed(() => {
|
|
333
|
-
const { showBadge } = props;
|
|
334
|
-
if (!showBadge) {
|
|
335
|
-
return 0;
|
|
336
|
-
}
|
|
337
|
-
const badgeOpts = computeBadgeOpts.value;
|
|
338
|
-
const { count } = badgeOpts;
|
|
339
|
-
return count ? XEUtils.toNumber(count) : 0;
|
|
340
|
-
});
|
|
341
|
-
const computeBadgeLabel = computed(() => {
|
|
342
|
-
const { showBadge } = props;
|
|
343
|
-
if (!showBadge) {
|
|
344
|
-
return "";
|
|
345
|
-
}
|
|
346
|
-
const badgeOpts = computeBadgeOpts.value;
|
|
347
|
-
const { dot, text, max } = badgeOpts;
|
|
348
|
-
if (dot) {
|
|
349
|
-
return "";
|
|
350
|
-
}
|
|
351
|
-
if (text) {
|
|
352
|
-
return `${text}`;
|
|
353
|
-
}
|
|
354
|
-
const countNum = computeBadgeCountNum.value;
|
|
355
|
-
if (countNum) {
|
|
356
|
-
const maxNum = max ? XEUtils.toNumber(max) : 99;
|
|
357
|
-
return countNum > maxNum ? `${maxNum}+` : `${countNum}`;
|
|
358
|
-
}
|
|
359
|
-
return "";
|
|
360
|
-
});
|
|
361
|
-
const computeFilterOpts = computed(() => {
|
|
362
|
-
return Object.assign({}, getConfig().select.filterConfig, props.filterConfig);
|
|
363
|
-
});
|
|
364
|
-
const computeOptionOpts = computed(() => {
|
|
365
|
-
return Object.assign({}, getConfig().select.optionConfig, props.optionConfig);
|
|
366
|
-
});
|
|
367
|
-
const computeRadioOpts = computed(() => {
|
|
368
|
-
return Object.assign({}, getConfig().select.radioConfig, props.radioConfig);
|
|
369
|
-
});
|
|
370
|
-
const computeCheckboxOpts = computed(() => {
|
|
371
|
-
return Object.assign({}, getConfig().select.checkboxConfig, props.checkboxConfig);
|
|
372
|
-
});
|
|
373
|
-
const computeMultiMaxCharNum = computed(() => {
|
|
374
|
-
return XEUtils.toNumber(props.multiCharOverflow);
|
|
375
|
-
});
|
|
376
|
-
const computeCurrStyle = computed(() => {
|
|
377
|
-
const { width } = props;
|
|
378
|
-
const stys = {};
|
|
379
|
-
if (width) {
|
|
380
|
-
stys.width = toCssUnit(width);
|
|
381
|
-
}
|
|
382
|
-
return stys;
|
|
383
|
-
});
|
|
384
|
-
const computePopupWrapperStyle = computed(() => {
|
|
385
|
-
const popupOpts = computePopupOpts.value;
|
|
386
|
-
const { height, width } = popupOpts;
|
|
387
|
-
const stys = {};
|
|
388
|
-
if (width) {
|
|
389
|
-
stys.width = toCssUnit(width);
|
|
390
|
-
}
|
|
391
|
-
if (height) {
|
|
392
|
-
stys.height = toCssUnit(height);
|
|
393
|
-
stys.maxHeight = toCssUnit(height);
|
|
394
|
-
}
|
|
395
|
-
return stys;
|
|
396
|
-
});
|
|
397
|
-
const computeSelectVals = computed(() => {
|
|
398
|
-
const { modelValue, multiple } = props;
|
|
399
|
-
let vals = [];
|
|
400
|
-
if (XEUtils.isArray(modelValue)) {
|
|
401
|
-
vals = modelValue;
|
|
402
|
-
} else {
|
|
403
|
-
if (multiple) {
|
|
404
|
-
if (!eqEmptyValue(modelValue)) {
|
|
405
|
-
vals = `${modelValue}`.indexOf(",") > -1 ? `${modelValue}`.split(",") : [modelValue];
|
|
271
|
+
if (transfer === null) {
|
|
272
|
+
const globalTransfer = getConfig().select.transfer;
|
|
273
|
+
if (XEUtils.isBoolean(globalTransfer)) {
|
|
274
|
+
return globalTransfer;
|
|
406
275
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
});
|
|
413
|
-
const computeFullLabel = computed(() => {
|
|
414
|
-
const { remote } = props;
|
|
415
|
-
const { reactFlag } = reactData;
|
|
416
|
-
const selectVals = computeSelectVals.value;
|
|
417
|
-
if (remote && reactFlag) {
|
|
418
|
-
return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
|
|
419
|
-
}
|
|
420
|
-
return selectVals.map((val) => getSelectLabel(val)).join(", ");
|
|
421
|
-
});
|
|
422
|
-
const computeSelectLabel = computed(() => {
|
|
423
|
-
const { remote, multiple } = props;
|
|
424
|
-
const { reactFlag } = reactData;
|
|
425
|
-
const multiMaxCharNum = computeMultiMaxCharNum.value;
|
|
426
|
-
const selectVals = computeSelectVals.value;
|
|
427
|
-
if (remote && reactFlag) {
|
|
428
|
-
return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
|
|
429
|
-
}
|
|
430
|
-
const labels = selectVals.map((val) => getSelectLabel(val));
|
|
431
|
-
if (multiple && multiMaxCharNum > 0 && labels.length > multiMaxCharNum) {
|
|
432
|
-
return `${labels.slice(0, multiMaxCharNum)}...`;
|
|
433
|
-
}
|
|
434
|
-
return labels.join(", ");
|
|
435
|
-
});
|
|
436
|
-
const computeScrollbarOpts = computed(() => {
|
|
437
|
-
return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
|
|
438
|
-
});
|
|
439
|
-
const computeScrollbarXOpts = computed(() => {
|
|
440
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
441
|
-
return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
|
|
442
|
-
visible: false
|
|
276
|
+
if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return transfer;
|
|
443
281
|
});
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
});
|
|
449
|
-
const computeScrollXHeight = computed(() => {
|
|
450
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
451
|
-
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
452
|
-
return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
|
|
453
|
-
});
|
|
454
|
-
const computeScrollYWidth = computed(() => {
|
|
455
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
456
|
-
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
457
|
-
return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
|
|
458
|
-
});
|
|
459
|
-
const computeScrollXVisible = computed(() => {
|
|
460
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
461
|
-
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
462
|
-
return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible);
|
|
463
|
-
});
|
|
464
|
-
const computeScrollYVisible = computed(() => {
|
|
465
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
466
|
-
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
467
|
-
return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible);
|
|
468
|
-
});
|
|
469
|
-
const computeScrollXAutoHide = computed(() => {
|
|
470
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
471
|
-
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
472
|
-
return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
473
|
-
});
|
|
474
|
-
const computeScrollYAutoHide = computed(() => {
|
|
475
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
476
|
-
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
477
|
-
return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
478
|
-
});
|
|
479
|
-
const computeScrollbarWrapperClss = computed(() => {
|
|
480
|
-
const { yThumbHeight, xThumbWidth } = reactData;
|
|
481
|
-
const scrollbarOpts = computeScrollbarOpts.value;
|
|
482
|
-
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
483
|
-
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
484
|
-
const scrollXVisible = computeScrollXVisible.value;
|
|
485
|
-
const scrollYVisible = computeScrollYVisible.value;
|
|
486
|
-
return domUtils.buildClass(
|
|
487
|
-
[
|
|
488
|
-
"vxe-scrollbar is--virtual",
|
|
489
|
-
scrollbarOpts.fluentOverlay ? "is--fluent-overlay" : "is--default-mode",
|
|
490
|
-
`ov-x--${scrollXVisible === false ? "hidden" : "visible"}`,
|
|
491
|
-
`ov-y--${scrollYVisible === false ? "hidden" : "visible"}`,
|
|
492
|
-
`sx-pos--${scrollbarXToTop ? "top" : "bottom"}`,
|
|
493
|
-
`sy-pos--${scrollbarYToLeft ? "left" : "right"}`
|
|
494
|
-
],
|
|
495
|
-
{
|
|
496
|
-
"overflow-y": yThumbHeight,
|
|
497
|
-
"overflow-x": xThumbWidth
|
|
282
|
+
const computeInpPlaceholder = computed(() => {
|
|
283
|
+
const { placeholder } = props;
|
|
284
|
+
if (placeholder) {
|
|
285
|
+
return getFuncText(placeholder);
|
|
498
286
|
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
503
|
-
return scrollbarXOpts.position === "top";
|
|
504
|
-
});
|
|
505
|
-
const computeScrollbarYToLeft = computed(() => {
|
|
506
|
-
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
507
|
-
return scrollbarYOpts.position === "left";
|
|
508
|
-
});
|
|
509
|
-
const callSlot = (slotFunc, params) => {
|
|
510
|
-
if (slotFunc) {
|
|
511
|
-
if (XEUtils.isString(slotFunc)) {
|
|
512
|
-
slotFunc = slots[slotFunc] || null;
|
|
513
|
-
}
|
|
514
|
-
if (XEUtils.isFunction(slotFunc)) {
|
|
515
|
-
return getSlotVNs(slotFunc(params));
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
return [];
|
|
519
|
-
};
|
|
520
|
-
const dispatchEvent = (type, params, evnt) => {
|
|
521
|
-
emit(type, createEvent(evnt, { $select: $xeSelect }, params));
|
|
522
|
-
};
|
|
523
|
-
const emitModel = (value) => {
|
|
524
|
-
emit("update:modelValue", value);
|
|
525
|
-
};
|
|
526
|
-
const emitDefaultValue = (value) => {
|
|
527
|
-
emitModel(value);
|
|
528
|
-
dispatchEvent("default-change", { value }, null);
|
|
529
|
-
};
|
|
530
|
-
const getOptKey = () => {
|
|
531
|
-
const optionOpts = computeOptionOpts.value;
|
|
532
|
-
return optionOpts.keyField || props.optionId || "_X_OPTION_KEY";
|
|
533
|
-
};
|
|
534
|
-
const getOptId = (option) => {
|
|
535
|
-
const optid = option[getOptKey()];
|
|
536
|
-
return optid ? encodeURIComponent(optid) : "";
|
|
537
|
-
};
|
|
538
|
-
const checkMaxLimit = (selectVals) => {
|
|
539
|
-
const { multiple, max } = props;
|
|
540
|
-
if (multiple && max) {
|
|
541
|
-
return selectVals.length >= XEUtils.toNumber(max);
|
|
542
|
-
}
|
|
543
|
-
return false;
|
|
544
|
-
};
|
|
545
|
-
const getRemoteSelectLabel = (value) => {
|
|
546
|
-
const { lazyOptions } = props;
|
|
547
|
-
const { remoteValMaps, optFullValMaps } = internalData;
|
|
548
|
-
const valueField = computeValueField.value;
|
|
549
|
-
const labelField = computeLabelField.value;
|
|
550
|
-
const remoteItem = remoteValMaps[value] || optFullValMaps[value];
|
|
551
|
-
const item = remoteItem ? remoteItem.item : null;
|
|
552
|
-
if (item) {
|
|
553
|
-
return XEUtils.toValueString(item[labelField]);
|
|
554
|
-
}
|
|
555
|
-
if (lazyOptions) {
|
|
556
|
-
const lazyItem = lazyOptions.find((item2) => item2[valueField] === value);
|
|
557
|
-
if (lazyItem) {
|
|
558
|
-
return lazyItem[labelField];
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
return value;
|
|
562
|
-
};
|
|
563
|
-
const getSelectLabel = (value) => {
|
|
564
|
-
const { lazyOptions } = props;
|
|
565
|
-
const { optFullValMaps } = internalData;
|
|
566
|
-
const valueField = computeValueField.value;
|
|
567
|
-
const labelField = computeLabelField.value;
|
|
568
|
-
const cacheItem = reactData.reactFlag ? optFullValMaps[value] : null;
|
|
569
|
-
if (cacheItem) {
|
|
570
|
-
return cacheItem.item[labelField];
|
|
571
|
-
}
|
|
572
|
-
if (lazyOptions) {
|
|
573
|
-
const lazyItem = lazyOptions.find((item) => item[valueField] === value);
|
|
574
|
-
if (lazyItem) {
|
|
575
|
-
return lazyItem[labelField];
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
return value;
|
|
579
|
-
};
|
|
580
|
-
const cacheItemMap = (datas) => {
|
|
581
|
-
const groupOptionsField = computeGroupOptionsField.value;
|
|
582
|
-
const valueField = computeValueField.value;
|
|
583
|
-
const key = getOptKey();
|
|
584
|
-
const groupKeyMaps = {};
|
|
585
|
-
const fullKeyMaps = {};
|
|
586
|
-
const list = [];
|
|
587
|
-
const handleOptItem = (item) => {
|
|
588
|
-
list.push(item);
|
|
589
|
-
let optid = getOptId(item);
|
|
590
|
-
if (!optid) {
|
|
591
|
-
optid = getOptUniqueId();
|
|
592
|
-
item[key] = optid;
|
|
593
|
-
}
|
|
594
|
-
fullKeyMaps[item[valueField]] = {
|
|
595
|
-
key: optid,
|
|
596
|
-
item,
|
|
597
|
-
_index: -1
|
|
598
|
-
};
|
|
599
|
-
};
|
|
600
|
-
datas.forEach((group) => {
|
|
601
|
-
handleOptItem(group);
|
|
602
|
-
if (group[groupOptionsField]) {
|
|
603
|
-
groupKeyMaps[group[key]] = group;
|
|
604
|
-
group[groupOptionsField].forEach(handleOptItem);
|
|
287
|
+
const globalPlaceholder = getConfig().select.placeholder;
|
|
288
|
+
if (globalPlaceholder) {
|
|
289
|
+
return getFuncText(globalPlaceholder);
|
|
605
290
|
}
|
|
291
|
+
return getI18n("vxe.base.pleaseSelect");
|
|
606
292
|
});
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
const
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
}
|
|
638
|
-
|
|
293
|
+
const computeDefaultOpts = computed(() => {
|
|
294
|
+
return Object.assign({}, props.defaultConfig);
|
|
295
|
+
});
|
|
296
|
+
const computePropsOpts = computed(() => {
|
|
297
|
+
return Object.assign({}, getConfig().select.optionProps, props.optionProps);
|
|
298
|
+
});
|
|
299
|
+
const computeGroupPropsOpts = computed(() => {
|
|
300
|
+
return Object.assign({}, getConfig().select.optionGroupProps, props.optionGroupProps);
|
|
301
|
+
});
|
|
302
|
+
const computeLabelField = computed(() => {
|
|
303
|
+
const propsOpts = computePropsOpts.value;
|
|
304
|
+
return propsOpts.label || "label";
|
|
305
|
+
});
|
|
306
|
+
const computeValueField = computed(() => {
|
|
307
|
+
const propsOpts = computePropsOpts.value;
|
|
308
|
+
return propsOpts.value || "value";
|
|
309
|
+
});
|
|
310
|
+
const computeGroupLabelField = computed(() => {
|
|
311
|
+
const groupPropsOpts = computeGroupPropsOpts.value;
|
|
312
|
+
return groupPropsOpts.label || "label";
|
|
313
|
+
});
|
|
314
|
+
const computeGroupOptionsField = computed(() => {
|
|
315
|
+
const groupPropsOpts = computeGroupPropsOpts.value;
|
|
316
|
+
return groupPropsOpts.options || "options";
|
|
317
|
+
});
|
|
318
|
+
const computeIsMaximize = computed(() => {
|
|
319
|
+
const selectVals = computeSelectVals.value;
|
|
320
|
+
return checkMaxLimit(selectVals);
|
|
321
|
+
});
|
|
322
|
+
const computePopupOpts = computed(() => {
|
|
323
|
+
return Object.assign({}, getConfig().select.popupConfig, props.popupConfig);
|
|
324
|
+
});
|
|
325
|
+
const computeVirtualYOpts = computed(() => {
|
|
326
|
+
return Object.assign({}, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY);
|
|
327
|
+
});
|
|
328
|
+
const computeRemoteOpts = computed(() => {
|
|
329
|
+
return Object.assign({}, getConfig().select.remoteConfig, props.remoteConfig);
|
|
330
|
+
});
|
|
331
|
+
const computeBadgeOpts = computed(() => {
|
|
332
|
+
return Object.assign({}, getConfig().select.badgeConfig, props.badgeConfig);
|
|
333
|
+
});
|
|
334
|
+
const computeBadgeCountNum = computed(() => {
|
|
335
|
+
const { showBadge } = props;
|
|
336
|
+
if (!showBadge) {
|
|
337
|
+
return 0;
|
|
338
|
+
}
|
|
339
|
+
const badgeOpts = computeBadgeOpts.value;
|
|
340
|
+
const { count } = badgeOpts;
|
|
341
|
+
return count ? XEUtils.toNumber(count) : 0;
|
|
342
|
+
});
|
|
343
|
+
const computeBadgeLabel = computed(() => {
|
|
344
|
+
const { showBadge } = props;
|
|
345
|
+
if (!showBadge) {
|
|
346
|
+
return "";
|
|
347
|
+
}
|
|
348
|
+
const badgeOpts = computeBadgeOpts.value;
|
|
349
|
+
const { dot, text, max } = badgeOpts;
|
|
350
|
+
if (dot) {
|
|
351
|
+
return "";
|
|
352
|
+
}
|
|
353
|
+
if (text) {
|
|
354
|
+
return `${text}`;
|
|
355
|
+
}
|
|
356
|
+
const countNum = computeBadgeCountNum.value;
|
|
357
|
+
if (countNum) {
|
|
358
|
+
const maxNum = max ? XEUtils.toNumber(max) : 99;
|
|
359
|
+
return countNum > maxNum ? `${maxNum}+` : `${countNum}`;
|
|
360
|
+
}
|
|
361
|
+
return "";
|
|
362
|
+
});
|
|
363
|
+
const computeFilterOpts = computed(() => {
|
|
364
|
+
return Object.assign({}, getConfig().select.filterConfig, props.filterConfig);
|
|
365
|
+
});
|
|
366
|
+
const computeOptionOpts = computed(() => {
|
|
367
|
+
return Object.assign({}, getConfig().select.optionConfig, props.optionConfig);
|
|
368
|
+
});
|
|
369
|
+
const computeRadioOpts = computed(() => {
|
|
370
|
+
return Object.assign({}, getConfig().select.radioConfig, props.radioConfig);
|
|
371
|
+
});
|
|
372
|
+
const computeCheckboxOpts = computed(() => {
|
|
373
|
+
return Object.assign({}, getConfig().select.checkboxConfig, props.checkboxConfig);
|
|
374
|
+
});
|
|
375
|
+
const computeMultiMaxCharNum = computed(() => {
|
|
376
|
+
return XEUtils.toNumber(props.multiCharOverflow);
|
|
377
|
+
});
|
|
378
|
+
const computeCurrStyle = computed(() => {
|
|
379
|
+
const { width } = props;
|
|
380
|
+
const stys = {};
|
|
381
|
+
if (width) {
|
|
382
|
+
stys.width = toCssUnit(width);
|
|
383
|
+
}
|
|
384
|
+
return stys;
|
|
385
|
+
});
|
|
386
|
+
const computePopupWrapperStyle = computed(() => {
|
|
387
|
+
const popupOpts = computePopupOpts.value;
|
|
388
|
+
const { height, width } = popupOpts;
|
|
389
|
+
const stys = {};
|
|
390
|
+
if (width) {
|
|
391
|
+
stys.width = toCssUnit(width);
|
|
392
|
+
}
|
|
393
|
+
if (height) {
|
|
394
|
+
stys.height = toCssUnit(height);
|
|
395
|
+
stys.maxHeight = toCssUnit(height);
|
|
396
|
+
}
|
|
397
|
+
return stys;
|
|
398
|
+
});
|
|
399
|
+
const computeSelectVals = computed(() => {
|
|
400
|
+
const { modelValue, multiple } = props;
|
|
401
|
+
let vals = [];
|
|
402
|
+
if (XEUtils.isArray(modelValue)) {
|
|
403
|
+
vals = modelValue;
|
|
639
404
|
} else {
|
|
640
|
-
|
|
405
|
+
if (multiple) {
|
|
406
|
+
if (!eqEmptyValue(modelValue)) {
|
|
407
|
+
vals = `${modelValue}`.indexOf(",") > -1 ? `${modelValue}`.split(",") : [modelValue];
|
|
408
|
+
}
|
|
409
|
+
} else {
|
|
410
|
+
vals = modelValue === null || modelValue === void 0 ? [] : [modelValue];
|
|
411
|
+
}
|
|
641
412
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
413
|
+
return vals;
|
|
414
|
+
});
|
|
415
|
+
const computeFullLabel = computed(() => {
|
|
416
|
+
const { remote } = props;
|
|
417
|
+
const { reactFlag } = reactData;
|
|
418
|
+
const selectVals = computeSelectVals.value;
|
|
419
|
+
if (remote && reactFlag) {
|
|
420
|
+
return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
|
|
647
421
|
}
|
|
422
|
+
return selectVals.map((val) => getSelectLabel(val)).join(", ");
|
|
648
423
|
});
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
if (option) {
|
|
654
|
-
reactData.currentOption = option;
|
|
655
|
-
}
|
|
656
|
-
};
|
|
657
|
-
const updateZIndex = () => {
|
|
658
|
-
const popupOpts = computePopupOpts.value;
|
|
659
|
-
const customZIndex = popupOpts.zIndex || props.zIndex;
|
|
660
|
-
if (customZIndex) {
|
|
661
|
-
reactData.panelIndex = XEUtils.toNumber(customZIndex);
|
|
662
|
-
} else if (reactData.panelIndex < getLastZIndex()) {
|
|
663
|
-
reactData.panelIndex = nextZIndex();
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
const updatePlacement = () => {
|
|
667
|
-
const { placement } = props;
|
|
668
|
-
const { panelIndex } = reactData;
|
|
669
|
-
const targetElem = refElem.value;
|
|
670
|
-
const panelElem = refOptionPanel.value;
|
|
671
|
-
const btnTransfer = computeBtnTransfer.value;
|
|
672
|
-
const popupOpts = computePopupOpts.value;
|
|
673
|
-
const handleStyle = () => {
|
|
674
|
-
const ppObj = updatePanelPlacement(targetElem, panelElem, {
|
|
675
|
-
placement: popupOpts.placement || placement,
|
|
676
|
-
defaultPlacement: popupOpts.defaultPlacement,
|
|
677
|
-
appendTo: popupOpts.appendTo,
|
|
678
|
-
teleportTo: btnTransfer
|
|
679
|
-
});
|
|
680
|
-
const panelStyle = Object.assign(ppObj.style, {
|
|
681
|
-
zIndex: panelIndex
|
|
682
|
-
});
|
|
683
|
-
reactData.panelStyle = panelStyle;
|
|
684
|
-
reactData.panelPlacement = ppObj.placement;
|
|
685
|
-
};
|
|
686
|
-
handleStyle();
|
|
687
|
-
return nextTick().then(handleStyle);
|
|
688
|
-
};
|
|
689
|
-
const handleScrollSelect = () => {
|
|
690
|
-
nextTick(() => {
|
|
691
|
-
const { isAniVisible, visiblePanel } = reactData;
|
|
692
|
-
const { optFullValMaps } = internalData;
|
|
424
|
+
const computeSelectLabel = computed(() => {
|
|
425
|
+
const { remote, multiple } = props;
|
|
426
|
+
const { reactFlag } = reactData;
|
|
427
|
+
const multiMaxCharNum = computeMultiMaxCharNum.value;
|
|
693
428
|
const selectVals = computeSelectVals.value;
|
|
694
|
-
if (
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
}
|
|
429
|
+
if (remote && reactFlag) {
|
|
430
|
+
return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
|
|
431
|
+
}
|
|
432
|
+
const labels = selectVals.map((val) => getSelectLabel(val));
|
|
433
|
+
if (multiple && multiMaxCharNum > 0 && labels.length > multiMaxCharNum) {
|
|
434
|
+
return `${labels.slice(0, multiMaxCharNum)}...`;
|
|
700
435
|
}
|
|
436
|
+
return labels.join(", ");
|
|
701
437
|
});
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
const
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
438
|
+
const computeScrollbarOpts = computed(() => {
|
|
439
|
+
return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
|
|
440
|
+
});
|
|
441
|
+
const computeScrollbarXOpts = computed(() => {
|
|
442
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
443
|
+
return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
|
|
444
|
+
visible: false
|
|
445
|
+
});
|
|
446
|
+
});
|
|
447
|
+
const computeScrollbarYOpts = computed(() => {
|
|
448
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
449
|
+
return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
|
|
450
|
+
});
|
|
451
|
+
const computeScrollXHeight = computed(() => {
|
|
452
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
453
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
454
|
+
return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
|
|
455
|
+
});
|
|
456
|
+
const computeScrollYWidth = computed(() => {
|
|
457
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
458
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
459
|
+
return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
|
|
460
|
+
});
|
|
461
|
+
const computeScrollXVisible = computed(() => {
|
|
462
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
463
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
464
|
+
return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible);
|
|
465
|
+
});
|
|
466
|
+
const computeScrollYVisible = computed(() => {
|
|
467
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
468
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
469
|
+
return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible);
|
|
470
|
+
});
|
|
471
|
+
const computeScrollXAutoHide = computed(() => {
|
|
472
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
473
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
474
|
+
return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
475
|
+
});
|
|
476
|
+
const computeScrollYAutoHide = computed(() => {
|
|
477
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
478
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
479
|
+
return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
|
|
480
|
+
});
|
|
481
|
+
const computeScrollbarWrapperClss = computed(() => {
|
|
482
|
+
const { yThumbHeight, xThumbWidth } = reactData;
|
|
483
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
484
|
+
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
485
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
486
|
+
const scrollXVisible = computeScrollXVisible.value;
|
|
487
|
+
const scrollYVisible = computeScrollYVisible.value;
|
|
488
|
+
return domUtils.buildClass(
|
|
489
|
+
[
|
|
490
|
+
"vxe-scrollbar is--virtual",
|
|
491
|
+
scrollbarOpts.fluentOverlay ? "is--fluent-overlay" : "is--default-mode",
|
|
492
|
+
`ov-x--${scrollXVisible === false ? "hidden" : "visible"}`,
|
|
493
|
+
`ov-y--${scrollYVisible === false ? "hidden" : "visible"}`,
|
|
494
|
+
`sx-pos--${scrollbarXToTop ? "top" : "bottom"}`,
|
|
495
|
+
`sy-pos--${scrollbarYToLeft ? "left" : "right"}`
|
|
496
|
+
],
|
|
497
|
+
{
|
|
498
|
+
"overflow-y": yThumbHeight,
|
|
499
|
+
"overflow-x": xThumbWidth
|
|
500
|
+
}
|
|
501
|
+
);
|
|
502
|
+
});
|
|
503
|
+
const computeScrollbarXToTop = computed(() => {
|
|
504
|
+
const scrollbarXOpts = computeScrollbarXOpts.value;
|
|
505
|
+
return scrollbarXOpts.position === "top";
|
|
506
|
+
});
|
|
507
|
+
const computeScrollbarYToLeft = computed(() => {
|
|
508
|
+
const scrollbarYOpts = computeScrollbarYOpts.value;
|
|
509
|
+
return scrollbarYOpts.position === "left";
|
|
510
|
+
});
|
|
511
|
+
const callSlot = (slotFunc, params) => {
|
|
512
|
+
if (slotFunc) {
|
|
513
|
+
if (XEUtils.isString(slotFunc)) {
|
|
514
|
+
slotFunc = slots[slotFunc] || null;
|
|
515
|
+
}
|
|
516
|
+
if (XEUtils.isFunction(slotFunc)) {
|
|
517
|
+
return getSlotVNs(slotFunc(params));
|
|
518
|
+
}
|
|
719
519
|
}
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
520
|
+
return [];
|
|
521
|
+
};
|
|
522
|
+
const dispatchEvent = (type, params, evnt) => {
|
|
523
|
+
emit(type, createEvent(evnt, { $select: $xeSelect }, params));
|
|
524
|
+
};
|
|
525
|
+
const emitModel = (value) => {
|
|
526
|
+
emit("update:modelValue", value);
|
|
527
|
+
};
|
|
528
|
+
const emitDefaultValue = (value) => {
|
|
529
|
+
emitModel(value);
|
|
530
|
+
dispatchEvent("default-change", { value }, null);
|
|
531
|
+
};
|
|
532
|
+
const getOptKey = () => {
|
|
533
|
+
const optionOpts = computeOptionOpts.value;
|
|
534
|
+
return optionOpts.keyField || props.optionId || "_X_OPTION_KEY";
|
|
535
|
+
};
|
|
536
|
+
const getOptId = (option) => {
|
|
537
|
+
const optid = option[getOptKey()];
|
|
538
|
+
return optid ? encodeURIComponent(optid) : "";
|
|
539
|
+
};
|
|
540
|
+
const checkMaxLimit = (selectVals) => {
|
|
541
|
+
const { multiple, max } = props;
|
|
542
|
+
if (multiple && max) {
|
|
543
|
+
return selectVals.length >= XEUtils.toNumber(max);
|
|
544
|
+
}
|
|
545
|
+
return false;
|
|
546
|
+
};
|
|
547
|
+
const getRemoteSelectLabel = (value) => {
|
|
548
|
+
const { lazyOptions } = props;
|
|
549
|
+
const { remoteValMaps, optFullValMaps } = internalData;
|
|
550
|
+
const valueField = computeValueField.value;
|
|
551
|
+
const labelField = computeLabelField.value;
|
|
552
|
+
const remoteItem = remoteValMaps[value] || optFullValMaps[value];
|
|
553
|
+
const item = remoteItem ? remoteItem.item : null;
|
|
554
|
+
if (item) {
|
|
555
|
+
return XEUtils.toValueString(item[labelField]);
|
|
556
|
+
}
|
|
557
|
+
if (lazyOptions) {
|
|
558
|
+
const lazyItem = lazyOptions.find((item2) => item2[valueField] === value);
|
|
559
|
+
if (lazyItem) {
|
|
560
|
+
return lazyItem[labelField];
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
return value;
|
|
564
|
+
};
|
|
565
|
+
const getSelectLabel = (value) => {
|
|
566
|
+
const { lazyOptions } = props;
|
|
567
|
+
const { optFullValMaps } = internalData;
|
|
568
|
+
const valueField = computeValueField.value;
|
|
569
|
+
const labelField = computeLabelField.value;
|
|
570
|
+
const cacheItem = reactData.reactFlag ? optFullValMaps[value] : null;
|
|
571
|
+
if (cacheItem) {
|
|
572
|
+
return cacheItem.item[labelField];
|
|
573
|
+
}
|
|
574
|
+
if (lazyOptions) {
|
|
575
|
+
const lazyItem = lazyOptions.find((item) => item[valueField] === value);
|
|
576
|
+
if (lazyItem) {
|
|
577
|
+
return lazyItem[labelField];
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
return value;
|
|
581
|
+
};
|
|
582
|
+
const cacheItemMap = (datas) => {
|
|
583
|
+
const groupOptionsField = computeGroupOptionsField.value;
|
|
584
|
+
const valueField = computeValueField.value;
|
|
585
|
+
const key = getOptKey();
|
|
586
|
+
const groupKeyMaps = {};
|
|
587
|
+
const fullKeyMaps = {};
|
|
588
|
+
const list = [];
|
|
589
|
+
const handleOptItem = (item) => {
|
|
590
|
+
list.push(item);
|
|
591
|
+
let optid = getOptId(item);
|
|
592
|
+
if (!optid) {
|
|
593
|
+
optid = getOptUniqueId();
|
|
594
|
+
item[key] = optid;
|
|
595
|
+
}
|
|
596
|
+
fullKeyMaps[item[valueField]] = {
|
|
597
|
+
key: optid,
|
|
598
|
+
item,
|
|
599
|
+
_index: -1
|
|
600
|
+
};
|
|
601
|
+
};
|
|
602
|
+
datas.forEach((group) => {
|
|
603
|
+
handleOptItem(group);
|
|
604
|
+
if (group[groupOptionsField]) {
|
|
605
|
+
groupKeyMaps[group[key]] = group;
|
|
606
|
+
group[groupOptionsField].forEach(handleOptItem);
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
internalData.fullData = list;
|
|
610
|
+
internalData.optGroupKeyMaps = groupKeyMaps;
|
|
611
|
+
internalData.optFullValMaps = fullKeyMaps;
|
|
612
|
+
reactData.reactFlag++;
|
|
613
|
+
handleOption();
|
|
614
|
+
};
|
|
615
|
+
const handleOption = () => {
|
|
616
|
+
const { remote, modelValue, filterable } = props;
|
|
617
|
+
const { searchValue } = reactData;
|
|
618
|
+
const { fullData, optFullValMaps } = internalData;
|
|
619
|
+
const labelField = computeLabelField.value;
|
|
620
|
+
const valueField = computeValueField.value;
|
|
621
|
+
const filterOpts = computeFilterOpts.value;
|
|
622
|
+
const frMethod = filterOpts.filterMethod || props.filterMethod;
|
|
623
|
+
const searchStr = `${searchValue || ""}`.toLowerCase();
|
|
624
|
+
let avList = [];
|
|
625
|
+
if (remote) {
|
|
626
|
+
avList = fullData.filter(isOptionVisible);
|
|
627
|
+
} else {
|
|
628
|
+
if (filterable && frMethod) {
|
|
629
|
+
avList = searchValue ? fullData.filter((option) => {
|
|
630
|
+
return isOptionVisible(option) && frMethod({
|
|
631
|
+
$select: $xeSelect,
|
|
632
|
+
group: null,
|
|
633
|
+
option,
|
|
634
|
+
filterValue: searchValue,
|
|
635
|
+
searchValue,
|
|
636
|
+
value: modelValue
|
|
637
|
+
});
|
|
638
|
+
}) : fullData;
|
|
639
|
+
} else if (filterable) {
|
|
640
|
+
avList = searchStr ? fullData.filter((option) => isOptionVisible(option) && `${option[labelField] || option[valueField]}`.toLowerCase().indexOf(searchStr) > -1) : fullData;
|
|
725
641
|
} else {
|
|
726
|
-
|
|
727
|
-
updateYData();
|
|
642
|
+
avList = fullData.filter(isOptionVisible);
|
|
728
643
|
}
|
|
729
644
|
}
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
645
|
+
avList.forEach((item, index) => {
|
|
646
|
+
const cacheItem = optFullValMaps[item[valueField]];
|
|
647
|
+
if (cacheItem) {
|
|
648
|
+
cacheItem._index = index;
|
|
649
|
+
}
|
|
650
|
+
});
|
|
651
|
+
internalData.afterVisibleList = avList;
|
|
652
|
+
return nextTick();
|
|
653
|
+
};
|
|
654
|
+
const setCurrentOption = (option) => {
|
|
655
|
+
if (option) {
|
|
656
|
+
reactData.currentOption = option;
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
const updateZIndex = () => {
|
|
660
|
+
const popupOpts = computePopupOpts.value;
|
|
661
|
+
const customZIndex = popupOpts.zIndex || props.zIndex;
|
|
662
|
+
if (customZIndex) {
|
|
663
|
+
reactData.panelIndex = XEUtils.toNumber(customZIndex);
|
|
664
|
+
} else if (reactData.panelIndex < getLastZIndex()) {
|
|
665
|
+
reactData.panelIndex = nextZIndex();
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
const updatePlacement = () => {
|
|
669
|
+
const { placement } = props;
|
|
670
|
+
const { panelIndex } = reactData;
|
|
671
|
+
const targetElem = refElem.value;
|
|
672
|
+
const panelElem = refOptionPanel.value;
|
|
673
|
+
const btnTransfer = computeBtnTransfer.value;
|
|
674
|
+
const popupOpts = computePopupOpts.value;
|
|
675
|
+
const handleStyle = () => {
|
|
676
|
+
const ppObj = updatePanelPlacement(targetElem, panelElem, {
|
|
677
|
+
placement: popupOpts.placement || placement,
|
|
678
|
+
defaultPlacement: popupOpts.defaultPlacement,
|
|
679
|
+
appendTo: popupOpts.appendTo,
|
|
680
|
+
teleportTo: btnTransfer
|
|
681
|
+
});
|
|
682
|
+
const panelStyle = Object.assign(ppObj.style, {
|
|
683
|
+
zIndex: panelIndex
|
|
684
|
+
});
|
|
685
|
+
reactData.panelStyle = panelStyle;
|
|
686
|
+
reactData.panelPlacement = ppObj.placement;
|
|
687
|
+
};
|
|
688
|
+
handleStyle();
|
|
689
|
+
return nextTick().then(handleStyle);
|
|
690
|
+
};
|
|
691
|
+
const handleScrollSelect = () => {
|
|
692
|
+
nextTick(() => {
|
|
693
|
+
const { isAniVisible, visiblePanel } = reactData;
|
|
694
|
+
const { optFullValMaps } = internalData;
|
|
695
|
+
const selectVals = computeSelectVals.value;
|
|
696
|
+
if (selectVals.length && isAniVisible && visiblePanel) {
|
|
697
|
+
const cacheItem = reactData.reactFlag ? optFullValMaps[`${selectVals[0]}`] : null;
|
|
698
|
+
if (cacheItem) {
|
|
699
|
+
reactData.currentOption = cacheItem.item;
|
|
700
|
+
handleScrollToOption(cacheItem.item);
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
});
|
|
704
|
+
};
|
|
705
|
+
const showOptionPanel = () => {
|
|
706
|
+
const { loading, filterable, remote } = props;
|
|
707
|
+
const { fullData, hpTimeout } = internalData;
|
|
708
|
+
const isDisabled = computeIsDisabled.value;
|
|
709
|
+
const remoteOpts = computeRemoteOpts.value;
|
|
710
|
+
const selectVals = computeSelectVals.value;
|
|
711
|
+
if (!loading && !isDisabled) {
|
|
712
|
+
if (hpTimeout) {
|
|
713
|
+
clearTimeout(hpTimeout);
|
|
714
|
+
internalData.hpTimeout = void 0;
|
|
715
|
+
}
|
|
716
|
+
if (!reactData.initialized) {
|
|
717
|
+
reactData.initialized = true;
|
|
718
|
+
nextTick(() => {
|
|
719
|
+
bindScrollbarResize();
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
reactData.isActivated = true;
|
|
723
|
+
reactData.isAniVisible = true;
|
|
724
|
+
if (filterable) {
|
|
725
|
+
if (remote && remoteOpts.enabled && (remoteOpts.autoLoad && !fullData.length || fullData.length && remoteOpts.clearOnClose)) {
|
|
726
|
+
handleSearchEvent();
|
|
736
727
|
} else {
|
|
737
|
-
|
|
728
|
+
handleOption();
|
|
729
|
+
updateYData();
|
|
738
730
|
}
|
|
739
|
-
}
|
|
731
|
+
}
|
|
732
|
+
setTimeout(() => {
|
|
733
|
+
reactData.visiblePanel = true;
|
|
734
|
+
handleFocusSearch();
|
|
735
|
+
recalculate().then(() => {
|
|
736
|
+
if (selectVals && selectVals.length) {
|
|
737
|
+
handleScrollSelect();
|
|
738
|
+
} else {
|
|
739
|
+
refreshScroll();
|
|
740
|
+
}
|
|
741
|
+
});
|
|
742
|
+
updatePlacement();
|
|
743
|
+
}, 10);
|
|
744
|
+
setTimeout(() => {
|
|
745
|
+
recalculate().then(() => refreshScroll());
|
|
746
|
+
}, 100);
|
|
747
|
+
updateZIndex();
|
|
740
748
|
updatePlacement();
|
|
741
|
-
|
|
742
|
-
setTimeout(() => {
|
|
743
|
-
recalculate().then(() => refreshScroll());
|
|
744
|
-
}, 100);
|
|
745
|
-
updateZIndex();
|
|
746
|
-
updatePlacement();
|
|
747
|
-
dispatchEvent("visible-change", { visible: true }, null);
|
|
748
|
-
}
|
|
749
|
-
};
|
|
750
|
-
const hideOptionPanel = (evnt) => {
|
|
751
|
-
const { filterable, remote } = props;
|
|
752
|
-
const filterOpts = computeFilterOpts.value;
|
|
753
|
-
const remoteOpts = computeRemoteOpts.value;
|
|
754
|
-
if (remote) {
|
|
755
|
-
if (remoteOpts.clearOnClose) {
|
|
756
|
-
reactData.searchValue = "";
|
|
749
|
+
dispatchEvent("visible-change", { visible: true }, null);
|
|
757
750
|
}
|
|
758
|
-
}
|
|
759
|
-
|
|
751
|
+
};
|
|
752
|
+
const hideOptionPanel = (evnt) => {
|
|
753
|
+
const { filterable, remote } = props;
|
|
754
|
+
const filterOpts = computeFilterOpts.value;
|
|
755
|
+
const remoteOpts = computeRemoteOpts.value;
|
|
756
|
+
if (remote) {
|
|
757
|
+
if (remoteOpts.clearOnClose) {
|
|
758
|
+
reactData.searchValue = "";
|
|
759
|
+
}
|
|
760
|
+
} else if (filterable) {
|
|
761
|
+
if (filterOpts.clearOnClose) {
|
|
762
|
+
reactData.searchValue = "";
|
|
763
|
+
}
|
|
764
|
+
} else {
|
|
760
765
|
reactData.searchValue = "";
|
|
761
766
|
}
|
|
762
|
-
|
|
763
|
-
reactData.
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
767
|
+
reactData.searchLoading = false;
|
|
768
|
+
reactData.visiblePanel = false;
|
|
769
|
+
internalData.hpTimeout = setTimeout(() => {
|
|
770
|
+
reactData.isAniVisible = false;
|
|
771
|
+
}, 350);
|
|
772
|
+
dispatchEvent("visible-change", { visible: false }, evnt || null);
|
|
773
|
+
};
|
|
774
|
+
const changeEvent = (evnt, selectValue, option) => {
|
|
775
|
+
emitModel(selectValue);
|
|
776
|
+
if (selectValue !== props.modelValue) {
|
|
777
|
+
dispatchEvent("change", { value: selectValue, option }, evnt);
|
|
778
|
+
if ($xeForm && formItemInfo) {
|
|
779
|
+
$xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, selectValue);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
};
|
|
783
|
+
const clearValueEvent = (evnt, selectValue) => {
|
|
784
|
+
internalData.remoteValMaps = {};
|
|
785
|
+
changeEvent(evnt, selectValue, null);
|
|
786
|
+
dispatchEvent("clear", { value: selectValue }, evnt);
|
|
787
|
+
};
|
|
788
|
+
const clearEvent = (params) => {
|
|
789
|
+
const { emptyValue } = props;
|
|
790
|
+
const { $event } = params;
|
|
791
|
+
clearValueEvent($event, emptyValue);
|
|
792
|
+
hideOptionPanel($event);
|
|
793
|
+
};
|
|
794
|
+
const allCheckedPanelEvent = (params) => {
|
|
795
|
+
const { $event } = params;
|
|
796
|
+
const { multiple, max, checkedClosable } = props;
|
|
797
|
+
const { optList } = reactData;
|
|
798
|
+
const valueField = computeValueField.value;
|
|
799
|
+
if (multiple) {
|
|
800
|
+
const selectVals = computeSelectVals.value;
|
|
801
|
+
const currVlas = selectVals.slice(0);
|
|
802
|
+
for (let i = 0; i < optList.length; i++) {
|
|
803
|
+
const option = optList[i];
|
|
804
|
+
const selectValue = option[valueField];
|
|
805
|
+
if (checkMaxLimit(currVlas)) {
|
|
806
|
+
if (VxeUI) {
|
|
807
|
+
VxeUI.modal.message({
|
|
808
|
+
content: getI18n("vxe.select.overSizeErr", [max]),
|
|
809
|
+
status: "warning"
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
break;
|
|
813
|
+
}
|
|
814
|
+
if (!currVlas.some((val) => val === selectValue)) {
|
|
815
|
+
currVlas.push(selectValue);
|
|
809
816
|
}
|
|
810
|
-
break;
|
|
811
817
|
}
|
|
812
|
-
|
|
813
|
-
|
|
818
|
+
changeEvent($event, currVlas, optList[0]);
|
|
819
|
+
if (checkedClosable) {
|
|
820
|
+
hideOptionPanel($event);
|
|
814
821
|
}
|
|
822
|
+
dispatchEvent("all-change", { value: currVlas }, $event);
|
|
815
823
|
}
|
|
816
|
-
|
|
817
|
-
|
|
824
|
+
};
|
|
825
|
+
const clearCheckedPanelEvent = (params) => {
|
|
826
|
+
const { emptyValue, clearClosable } = props;
|
|
827
|
+
const { $event } = params;
|
|
828
|
+
clearValueEvent($event, emptyValue);
|
|
829
|
+
if (clearClosable) {
|
|
818
830
|
hideOptionPanel($event);
|
|
819
831
|
}
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
const clearCheckedPanelEvent = (params) => {
|
|
824
|
-
const { emptyValue, clearClosable } = props;
|
|
825
|
-
const { $event } = params;
|
|
826
|
-
clearValueEvent($event, emptyValue);
|
|
827
|
-
if (clearClosable) {
|
|
832
|
+
};
|
|
833
|
+
const closePanelEvent = (params) => {
|
|
834
|
+
const { $event } = params;
|
|
828
835
|
hideOptionPanel($event);
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
if (!reactData.visiblePanel) {
|
|
842
|
-
return;
|
|
843
|
-
}
|
|
844
|
-
if (remoteItem) {
|
|
845
|
-
remoteItem.item = option;
|
|
846
|
-
} else {
|
|
847
|
-
remoteValMaps[selectValue] = {
|
|
848
|
-
key: getOptId(option),
|
|
849
|
-
item: option,
|
|
850
|
-
_index: -1
|
|
851
|
-
};
|
|
852
|
-
}
|
|
853
|
-
if (multiple) {
|
|
854
|
-
let multipleValue = [];
|
|
855
|
-
const selectVals = computeSelectVals.value;
|
|
856
|
-
const index = XEUtils.findIndexOf(selectVals, (val) => val === selectValue);
|
|
857
|
-
if (index === -1) {
|
|
858
|
-
multipleValue = selectVals.concat([selectValue]);
|
|
836
|
+
};
|
|
837
|
+
const changeOptionEvent = (evnt, option) => {
|
|
838
|
+
const { multiple } = props;
|
|
839
|
+
const { remoteValMaps } = internalData;
|
|
840
|
+
const valueField = computeValueField.value;
|
|
841
|
+
const selectValue = option[valueField];
|
|
842
|
+
const remoteItem = remoteValMaps[selectValue];
|
|
843
|
+
if (!reactData.visiblePanel) {
|
|
844
|
+
return;
|
|
845
|
+
}
|
|
846
|
+
if (remoteItem) {
|
|
847
|
+
remoteItem.item = option;
|
|
859
848
|
} else {
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
hideOptionPanel(evnt);
|
|
866
|
-
}
|
|
867
|
-
reactData.reactFlag++;
|
|
868
|
-
};
|
|
869
|
-
const handleGlobalMousedownEvent = (evnt) => {
|
|
870
|
-
const { visiblePanel } = reactData;
|
|
871
|
-
const isDisabled = computeIsDisabled.value;
|
|
872
|
-
const popupOpts = computePopupOpts.value;
|
|
873
|
-
const { trigger } = popupOpts;
|
|
874
|
-
if (!isDisabled) {
|
|
875
|
-
const el = refElem.value;
|
|
876
|
-
const panelElem = refOptionPanel.value;
|
|
877
|
-
reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag;
|
|
878
|
-
if (visiblePanel && !reactData.isActivated) {
|
|
879
|
-
if (trigger !== "manual") {
|
|
880
|
-
hideOptionPanel(evnt);
|
|
881
|
-
}
|
|
849
|
+
remoteValMaps[selectValue] = {
|
|
850
|
+
key: getOptId(option),
|
|
851
|
+
item: option,
|
|
852
|
+
_index: -1
|
|
853
|
+
};
|
|
882
854
|
}
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
return false;
|
|
892
|
-
};
|
|
893
|
-
const findOffsetOption = (option, isDwArrow) => {
|
|
894
|
-
const { allowCreate } = props;
|
|
895
|
-
const { optList } = reactData;
|
|
896
|
-
const { optFullValMaps, optAddMaps, afterVisibleList } = internalData;
|
|
897
|
-
const valueField = computeValueField.value;
|
|
898
|
-
let fullList = afterVisibleList;
|
|
899
|
-
let offsetAddIndex = 0;
|
|
900
|
-
if (allowCreate && optList.length) {
|
|
901
|
-
const firstItem = optList[0];
|
|
902
|
-
const optid = getOptId(firstItem);
|
|
903
|
-
if (optAddMaps[optid]) {
|
|
904
|
-
offsetAddIndex = 1;
|
|
905
|
-
fullList = [optAddMaps[optid]].concat(fullList);
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
if (!option) {
|
|
909
|
-
if (isDwArrow) {
|
|
910
|
-
for (let i = 0; i < fullList.length; i++) {
|
|
911
|
-
const item = fullList[i];
|
|
912
|
-
if (validOffsetOption(item)) {
|
|
913
|
-
return item;
|
|
914
|
-
}
|
|
855
|
+
if (multiple) {
|
|
856
|
+
let multipleValue = [];
|
|
857
|
+
const selectVals = computeSelectVals.value;
|
|
858
|
+
const index = XEUtils.findIndexOf(selectVals, (val) => val === selectValue);
|
|
859
|
+
if (index === -1) {
|
|
860
|
+
multipleValue = selectVals.concat([selectValue]);
|
|
861
|
+
} else {
|
|
862
|
+
multipleValue = selectVals.filter((val) => val !== selectValue);
|
|
915
863
|
}
|
|
864
|
+
changeEvent(evnt, multipleValue, option);
|
|
916
865
|
} else {
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
866
|
+
changeEvent(evnt, selectValue, option);
|
|
867
|
+
hideOptionPanel(evnt);
|
|
868
|
+
}
|
|
869
|
+
reactData.reactFlag++;
|
|
870
|
+
};
|
|
871
|
+
const handleGlobalMousedownEvent = (evnt) => {
|
|
872
|
+
const { visiblePanel } = reactData;
|
|
873
|
+
const isDisabled = computeIsDisabled.value;
|
|
874
|
+
const popupOpts = computePopupOpts.value;
|
|
875
|
+
const { trigger } = popupOpts;
|
|
876
|
+
if (!isDisabled) {
|
|
877
|
+
const el = refElem.value;
|
|
878
|
+
const panelElem = refOptionPanel.value;
|
|
879
|
+
reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag;
|
|
880
|
+
if (visiblePanel && !reactData.isActivated) {
|
|
881
|
+
if (trigger !== "manual") {
|
|
882
|
+
hideOptionPanel(evnt);
|
|
921
883
|
}
|
|
922
884
|
}
|
|
923
885
|
}
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
886
|
+
};
|
|
887
|
+
const validOffsetOption = (option) => {
|
|
888
|
+
const isDisabled = option.disabled;
|
|
889
|
+
const optid = getOptId(option);
|
|
890
|
+
if (!isDisabled && !hasOptGroupById(optid)) {
|
|
891
|
+
return true;
|
|
892
|
+
}
|
|
893
|
+
return false;
|
|
894
|
+
};
|
|
895
|
+
const findOffsetOption = (option, isDwArrow) => {
|
|
896
|
+
const { allowCreate } = props;
|
|
897
|
+
const { optList } = reactData;
|
|
898
|
+
const { optFullValMaps, optAddMaps, afterVisibleList } = internalData;
|
|
899
|
+
const valueField = computeValueField.value;
|
|
900
|
+
let fullList = afterVisibleList;
|
|
901
|
+
let offsetAddIndex = 0;
|
|
902
|
+
if (allowCreate && optList.length) {
|
|
903
|
+
const firstItem = optList[0];
|
|
904
|
+
const optid = getOptId(firstItem);
|
|
905
|
+
if (optAddMaps[optid]) {
|
|
906
|
+
offsetAddIndex = 1;
|
|
907
|
+
fullList = [optAddMaps[optid]].concat(fullList);
|
|
937
908
|
}
|
|
938
|
-
}
|
|
939
|
-
|
|
940
|
-
|
|
909
|
+
}
|
|
910
|
+
if (!option) {
|
|
911
|
+
if (isDwArrow) {
|
|
912
|
+
for (let i = 0; i < fullList.length; i++) {
|
|
913
|
+
const item = fullList[i];
|
|
914
|
+
if (validOffsetOption(item)) {
|
|
915
|
+
return item;
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
} else {
|
|
919
|
+
for (let len = fullList.length - 1; len >= 0; len--) {
|
|
941
920
|
const item = fullList[len];
|
|
942
921
|
if (validOffsetOption(item)) {
|
|
943
922
|
return item;
|
|
@@ -945,767 +924,854 @@ var select_default = defineVxeComponent({
|
|
|
945
924
|
}
|
|
946
925
|
}
|
|
947
926
|
}
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
const { emptyValue, clearable } = props;
|
|
953
|
-
const { visiblePanel, currentOption } = reactData;
|
|
954
|
-
const isDisabled = computeIsDisabled.value;
|
|
955
|
-
const popupOpts = computePopupOpts.value;
|
|
956
|
-
const { trigger } = popupOpts;
|
|
957
|
-
if (!isDisabled) {
|
|
958
|
-
const isTab = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.TAB);
|
|
959
|
-
const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
|
|
960
|
-
const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
|
|
961
|
-
const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
|
|
962
|
-
const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
|
|
963
|
-
const isDel = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
|
|
964
|
-
if (isTab) {
|
|
965
|
-
reactData.isActivated = false;
|
|
927
|
+
let avIndex = 0;
|
|
928
|
+
const cacheItem = option ? optFullValMaps[option[valueField]] : null;
|
|
929
|
+
if (cacheItem) {
|
|
930
|
+
avIndex = cacheItem._index + offsetAddIndex;
|
|
966
931
|
}
|
|
967
|
-
if (
|
|
968
|
-
if (
|
|
969
|
-
|
|
970
|
-
|
|
932
|
+
if (avIndex > -1) {
|
|
933
|
+
if (isDwArrow) {
|
|
934
|
+
for (let i = avIndex + 1; i <= fullList.length - 1; i++) {
|
|
935
|
+
const item = fullList[i];
|
|
936
|
+
if (validOffsetOption(item)) {
|
|
937
|
+
return item;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
} else {
|
|
941
|
+
if (avIndex > 0) {
|
|
942
|
+
for (let len = avIndex - 1; len >= 0; len--) {
|
|
943
|
+
const item = fullList[len];
|
|
944
|
+
if (validOffsetOption(item)) {
|
|
945
|
+
return item;
|
|
946
|
+
}
|
|
947
|
+
}
|
|
971
948
|
}
|
|
972
|
-
}
|
|
973
|
-
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
return null;
|
|
952
|
+
};
|
|
953
|
+
const handleGlobalKeydownEvent = (evnt) => {
|
|
954
|
+
const { emptyValue, clearable } = props;
|
|
955
|
+
const { visiblePanel, currentOption } = reactData;
|
|
956
|
+
const isDisabled = computeIsDisabled.value;
|
|
957
|
+
const popupOpts = computePopupOpts.value;
|
|
958
|
+
const { trigger } = popupOpts;
|
|
959
|
+
if (!isDisabled) {
|
|
960
|
+
const isTab = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.TAB);
|
|
961
|
+
const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
|
|
962
|
+
const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
|
|
963
|
+
const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
|
|
964
|
+
const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
|
|
965
|
+
const isDel = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
|
|
966
|
+
if (isTab) {
|
|
967
|
+
reactData.isActivated = false;
|
|
968
|
+
}
|
|
969
|
+
if (visiblePanel) {
|
|
970
|
+
if (isEsc || isTab) {
|
|
971
|
+
if (trigger !== "manual") {
|
|
972
|
+
hideOptionPanel(evnt);
|
|
973
|
+
}
|
|
974
|
+
} else if (isEnter) {
|
|
975
|
+
if (currentOption) {
|
|
976
|
+
evnt.preventDefault();
|
|
977
|
+
evnt.stopPropagation();
|
|
978
|
+
changeOptionEvent(evnt, currentOption);
|
|
979
|
+
}
|
|
980
|
+
} else if (isUpArrow || isDwArrow) {
|
|
974
981
|
evnt.preventDefault();
|
|
975
|
-
|
|
976
|
-
|
|
982
|
+
let offsetOption = findOffsetOption(currentOption, isDwArrow);
|
|
983
|
+
if (!offsetOption) {
|
|
984
|
+
offsetOption = findOffsetOption(null, isDwArrow);
|
|
985
|
+
}
|
|
986
|
+
if (offsetOption) {
|
|
987
|
+
setCurrentOption(offsetOption);
|
|
988
|
+
handleScrollToOption(offsetOption, isDwArrow);
|
|
989
|
+
}
|
|
977
990
|
}
|
|
978
|
-
} else if (isUpArrow || isDwArrow) {
|
|
991
|
+
} else if ((isUpArrow || isDwArrow || isEnter) && reactData.isActivated) {
|
|
979
992
|
evnt.preventDefault();
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
setCurrentOption(offsetOption);
|
|
986
|
-
handleScrollToOption(offsetOption, isDwArrow);
|
|
993
|
+
showOptionPanel();
|
|
994
|
+
}
|
|
995
|
+
if (reactData.isActivated) {
|
|
996
|
+
if (isDel && clearable) {
|
|
997
|
+
clearValueEvent(evnt, emptyValue);
|
|
987
998
|
}
|
|
988
999
|
}
|
|
989
|
-
} else if ((isUpArrow || isDwArrow || isEnter) && reactData.isActivated) {
|
|
990
|
-
evnt.preventDefault();
|
|
991
|
-
showOptionPanel();
|
|
992
1000
|
}
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1001
|
+
};
|
|
1002
|
+
const handleGlobalBlurEvent = (evnt) => {
|
|
1003
|
+
const { visiblePanel, isActivated } = reactData;
|
|
1004
|
+
const popupOpts = computePopupOpts.value;
|
|
1005
|
+
const { trigger } = popupOpts;
|
|
1006
|
+
if (visiblePanel) {
|
|
1007
|
+
if (trigger !== "manual") {
|
|
1008
|
+
hideOptionPanel(evnt);
|
|
996
1009
|
}
|
|
997
1010
|
}
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
const handleGlobalBlurEvent = (evnt) => {
|
|
1001
|
-
const { visiblePanel, isActivated } = reactData;
|
|
1002
|
-
const popupOpts = computePopupOpts.value;
|
|
1003
|
-
const { trigger } = popupOpts;
|
|
1004
|
-
if (visiblePanel) {
|
|
1005
|
-
if (trigger !== "manual") {
|
|
1006
|
-
hideOptionPanel(evnt);
|
|
1011
|
+
if (isActivated) {
|
|
1012
|
+
reactData.isActivated = false;
|
|
1007
1013
|
}
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
if (visiblePanel || isActivated) {
|
|
1013
|
-
const $input = refInput.value;
|
|
1014
|
-
if ($input) {
|
|
1015
|
-
$input.blur();
|
|
1016
|
-
}
|
|
1017
|
-
}
|
|
1018
|
-
};
|
|
1019
|
-
const handleGlobalResizeEvent = () => {
|
|
1020
|
-
const { visiblePanel } = reactData;
|
|
1021
|
-
if (visiblePanel) {
|
|
1022
|
-
updatePlacement();
|
|
1023
|
-
}
|
|
1024
|
-
};
|
|
1025
|
-
const handleGlobalScrollEvent = () => {
|
|
1026
|
-
const { visiblePanel } = reactData;
|
|
1027
|
-
if (visiblePanel) {
|
|
1028
|
-
updatePlacement();
|
|
1029
|
-
}
|
|
1030
|
-
};
|
|
1031
|
-
const handleFocusSearch = () => {
|
|
1032
|
-
if (props.filterable) {
|
|
1033
|
-
nextTick(() => {
|
|
1034
|
-
const inpSearch = refInpSearch.value;
|
|
1035
|
-
if (inpSearch) {
|
|
1036
|
-
inpSearch.focus();
|
|
1014
|
+
if (visiblePanel || isActivated) {
|
|
1015
|
+
const $input = refInput.value;
|
|
1016
|
+
if ($input) {
|
|
1017
|
+
$input.blur();
|
|
1037
1018
|
}
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
const handleGlobalResizeEvent = () => {
|
|
1022
|
+
const { visiblePanel } = reactData;
|
|
1023
|
+
if (visiblePanel) {
|
|
1024
|
+
updatePlacement();
|
|
1025
|
+
}
|
|
1026
|
+
};
|
|
1027
|
+
const handleGlobalScrollEvent = () => {
|
|
1028
|
+
const { visiblePanel } = reactData;
|
|
1029
|
+
if (visiblePanel) {
|
|
1030
|
+
updatePlacement();
|
|
1031
|
+
}
|
|
1032
|
+
};
|
|
1033
|
+
const handleFocusSearch = () => {
|
|
1034
|
+
if (props.filterable) {
|
|
1035
|
+
nextTick(() => {
|
|
1036
|
+
const inpSearch = refInpSearch.value;
|
|
1037
|
+
if (inpSearch) {
|
|
1038
|
+
inpSearch.focus();
|
|
1039
|
+
}
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
};
|
|
1043
|
+
const focusEvent = (evnt) => {
|
|
1044
|
+
const isDisabled = computeIsDisabled.value;
|
|
1045
|
+
const popupOpts = computePopupOpts.value;
|
|
1046
|
+
const { trigger } = popupOpts;
|
|
1047
|
+
if (!isDisabled) {
|
|
1048
|
+
if (!reactData.visiblePanel) {
|
|
1049
|
+
if (!trigger || trigger === "default") {
|
|
1050
|
+
reactData.triggerFocusPanel = true;
|
|
1051
|
+
showOptionPanel();
|
|
1052
|
+
setTimeout(() => {
|
|
1053
|
+
reactData.triggerFocusPanel = false;
|
|
1054
|
+
}, 500);
|
|
1055
|
+
}
|
|
1053
1056
|
}
|
|
1054
1057
|
}
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1058
|
+
dispatchEvent("focus", {}, evnt);
|
|
1059
|
+
};
|
|
1060
|
+
const clickEvent = (evnt) => {
|
|
1061
|
+
const popupOpts = computePopupOpts.value;
|
|
1062
|
+
const { trigger } = popupOpts;
|
|
1063
|
+
if (!trigger || trigger === "default") {
|
|
1064
|
+
togglePanelEvent(evnt);
|
|
1065
|
+
}
|
|
1066
|
+
dispatchEvent("click", { triggerButton: false, visible: reactData.visiblePanel }, evnt);
|
|
1067
|
+
};
|
|
1068
|
+
const blurEvent = (evnt) => {
|
|
1069
|
+
reactData.isActivated = false;
|
|
1070
|
+
dispatchEvent("blur", {}, evnt);
|
|
1071
|
+
};
|
|
1072
|
+
const suffixClickEvent = (evnt) => {
|
|
1073
|
+
const popupOpts = computePopupOpts.value;
|
|
1074
|
+
const { trigger } = popupOpts;
|
|
1075
|
+
if (!trigger || trigger === "default" || trigger === "icon") {
|
|
1076
|
+
togglePanelEvent(evnt);
|
|
1077
|
+
}
|
|
1078
|
+
dispatchEvent("click", { triggerButton: true, visible: reactData.visiblePanel }, evnt);
|
|
1079
|
+
};
|
|
1080
|
+
const modelSearchEvent = (value) => {
|
|
1081
|
+
reactData.searchValue = value;
|
|
1082
|
+
};
|
|
1083
|
+
const focusSearchEvent = () => {
|
|
1084
|
+
reactData.isActivated = true;
|
|
1085
|
+
};
|
|
1086
|
+
const handleSearchEvent = () => {
|
|
1087
|
+
const { modelValue, remote } = props;
|
|
1088
|
+
const { searchValue } = reactData;
|
|
1089
|
+
const remoteOpts = computeRemoteOpts.value;
|
|
1090
|
+
const qyMethod = remoteOpts.queryMethod || props.remoteMethod;
|
|
1091
|
+
if (remote && qyMethod && remoteOpts.enabled) {
|
|
1092
|
+
reactData.searchLoading = true;
|
|
1093
|
+
Promise.resolve(qyMethod({ $select: $xeSelect, searchValue, value: modelValue })).then(() => nextTick()).catch(() => nextTick()).finally(() => {
|
|
1094
|
+
reactData.searchLoading = false;
|
|
1095
|
+
handleOption();
|
|
1096
|
+
updateYData();
|
|
1097
|
+
});
|
|
1098
|
+
} else {
|
|
1093
1099
|
handleOption();
|
|
1094
1100
|
updateYData();
|
|
1095
|
-
}
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
const { $event } = params;
|
|
1104
|
-
$event.preventDefault();
|
|
1105
|
-
if (reactData.triggerFocusPanel) {
|
|
1106
|
-
reactData.triggerFocusPanel = false;
|
|
1107
|
-
} else {
|
|
1108
|
-
if (reactData.visiblePanel) {
|
|
1109
|
-
hideOptionPanel($event);
|
|
1101
|
+
}
|
|
1102
|
+
};
|
|
1103
|
+
const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true });
|
|
1104
|
+
const togglePanelEvent = (params) => {
|
|
1105
|
+
const { $event } = params;
|
|
1106
|
+
$event.preventDefault();
|
|
1107
|
+
if (reactData.triggerFocusPanel) {
|
|
1108
|
+
reactData.triggerFocusPanel = false;
|
|
1110
1109
|
} else {
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
const checkOptionDisabled = (isSelected, option) => {
|
|
1116
|
-
if (option.disabled) {
|
|
1117
|
-
return true;
|
|
1118
|
-
}
|
|
1119
|
-
const isMaximize = computeIsMaximize.value;
|
|
1120
|
-
if (isMaximize && !isSelected) {
|
|
1121
|
-
return true;
|
|
1122
|
-
}
|
|
1123
|
-
return false;
|
|
1124
|
-
};
|
|
1125
|
-
const updateYSpace = () => {
|
|
1126
|
-
const { scrollYLoad } = reactData;
|
|
1127
|
-
const { scrollYStore, afterVisibleList } = internalData;
|
|
1128
|
-
reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
|
|
1129
|
-
reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
|
|
1130
|
-
};
|
|
1131
|
-
const handleData = () => {
|
|
1132
|
-
const { filterable, allowCreate } = props;
|
|
1133
|
-
const { scrollYLoad, searchValue } = reactData;
|
|
1134
|
-
const { optAddMaps, scrollYStore, afterVisibleList } = internalData;
|
|
1135
|
-
const labelField = computeLabelField.value;
|
|
1136
|
-
const valueField = computeValueField.value;
|
|
1137
|
-
const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0);
|
|
1138
|
-
if (filterable && allowCreate && searchValue) {
|
|
1139
|
-
if (!restList.some((option) => option[labelField] === searchValue)) {
|
|
1140
|
-
const addItem = optAddMaps[searchValue] || reactive({
|
|
1141
|
-
[getOptKey()]: searchValue,
|
|
1142
|
-
[labelField]: searchValue,
|
|
1143
|
-
[valueField]: searchValue
|
|
1144
|
-
});
|
|
1145
|
-
optAddMaps[searchValue] = addItem;
|
|
1146
|
-
restList.unshift(addItem);
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
reactData.optList = restList;
|
|
1150
|
-
return nextTick();
|
|
1151
|
-
};
|
|
1152
|
-
const updateYData = () => {
|
|
1153
|
-
handleData();
|
|
1154
|
-
updateYSpace();
|
|
1155
|
-
};
|
|
1156
|
-
const computeScrollLoad = () => {
|
|
1157
|
-
return nextTick().then(() => {
|
|
1158
|
-
const { scrollYLoad } = reactData;
|
|
1159
|
-
const { scrollYStore } = internalData;
|
|
1160
|
-
const virtualBodyElem = refVirtualBody.value;
|
|
1161
|
-
const virtualYOpts = computeVirtualYOpts.value;
|
|
1162
|
-
let rowHeight = 0;
|
|
1163
|
-
let firstItemElem;
|
|
1164
|
-
if (virtualBodyElem) {
|
|
1165
|
-
if (!firstItemElem) {
|
|
1166
|
-
firstItemElem = virtualBodyElem.children[0];
|
|
1110
|
+
if (reactData.visiblePanel) {
|
|
1111
|
+
hideOptionPanel($event);
|
|
1112
|
+
} else {
|
|
1113
|
+
showOptionPanel();
|
|
1167
1114
|
}
|
|
1168
1115
|
}
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
scrollYStore.rowHeight = rowHeight;
|
|
1174
|
-
if (scrollYLoad) {
|
|
1175
|
-
const scrollBodyElem = refVirtualWrapper.value;
|
|
1176
|
-
const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
|
|
1177
|
-
const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)));
|
|
1178
|
-
scrollYStore.offsetSize = offsetYSize;
|
|
1179
|
-
scrollYStore.visibleSize = visibleYSize;
|
|
1180
|
-
scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
|
|
1181
|
-
updateYData();
|
|
1182
|
-
} else {
|
|
1183
|
-
updateYSpace();
|
|
1116
|
+
};
|
|
1117
|
+
const checkOptionDisabled = (isSelected, option) => {
|
|
1118
|
+
if (option.disabled) {
|
|
1119
|
+
return true;
|
|
1184
1120
|
}
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
const
|
|
1193
|
-
const
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1121
|
+
const isMaximize = computeIsMaximize.value;
|
|
1122
|
+
if (isMaximize && !isSelected) {
|
|
1123
|
+
return true;
|
|
1124
|
+
}
|
|
1125
|
+
return false;
|
|
1126
|
+
};
|
|
1127
|
+
const updateYSpace = () => {
|
|
1128
|
+
const { scrollYLoad } = reactData;
|
|
1129
|
+
const { scrollYStore, afterVisibleList } = internalData;
|
|
1130
|
+
reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
|
|
1131
|
+
reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
|
|
1132
|
+
};
|
|
1133
|
+
const handleData = () => {
|
|
1134
|
+
const { filterable, allowCreate } = props;
|
|
1135
|
+
const { scrollYLoad, searchValue } = reactData;
|
|
1136
|
+
const { optAddMaps, scrollYStore, afterVisibleList } = internalData;
|
|
1137
|
+
const labelField = computeLabelField.value;
|
|
1138
|
+
const valueField = computeValueField.value;
|
|
1139
|
+
const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0);
|
|
1140
|
+
if (filterable && allowCreate && searchValue) {
|
|
1141
|
+
if (!restList.some((option) => option[labelField] === searchValue)) {
|
|
1142
|
+
const addItem = optAddMaps[searchValue] || reactive({
|
|
1143
|
+
[getOptKey()]: searchValue,
|
|
1144
|
+
[labelField]: searchValue,
|
|
1145
|
+
[valueField]: searchValue
|
|
1146
|
+
});
|
|
1147
|
+
optAddMaps[searchValue] = addItem;
|
|
1148
|
+
restList.unshift(addItem);
|
|
1199
1149
|
}
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1150
|
+
}
|
|
1151
|
+
reactData.optList = restList;
|
|
1152
|
+
return nextTick();
|
|
1153
|
+
};
|
|
1154
|
+
const updateYData = () => {
|
|
1155
|
+
handleData();
|
|
1156
|
+
updateYSpace();
|
|
1157
|
+
};
|
|
1158
|
+
const computeScrollLoad = () => {
|
|
1159
|
+
return nextTick().then(() => {
|
|
1160
|
+
const { scrollYLoad } = reactData;
|
|
1161
|
+
const { scrollYStore } = internalData;
|
|
1162
|
+
const virtualBodyElem = refVirtualBody.value;
|
|
1163
|
+
const virtualYOpts = computeVirtualYOpts.value;
|
|
1164
|
+
let rowHeight = 0;
|
|
1165
|
+
let firstItemElem;
|
|
1166
|
+
if (virtualBodyElem) {
|
|
1167
|
+
if (!firstItemElem) {
|
|
1168
|
+
firstItemElem = virtualBodyElem.children[0];
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
if (firstItemElem) {
|
|
1172
|
+
rowHeight = firstItemElem.offsetHeight;
|
|
1173
|
+
}
|
|
1174
|
+
rowHeight = Math.max(20, rowHeight);
|
|
1175
|
+
scrollYStore.rowHeight = rowHeight;
|
|
1176
|
+
if (scrollYLoad) {
|
|
1177
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
1178
|
+
const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
|
|
1179
|
+
const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)));
|
|
1180
|
+
scrollYStore.offsetSize = offsetYSize;
|
|
1181
|
+
scrollYStore.visibleSize = visibleYSize;
|
|
1182
|
+
scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
|
|
1183
|
+
updateYData();
|
|
1184
|
+
} else {
|
|
1185
|
+
updateYSpace();
|
|
1186
|
+
}
|
|
1187
|
+
});
|
|
1188
|
+
};
|
|
1189
|
+
const handleScrollToOption = (option, isDwArrow) => {
|
|
1190
|
+
const { optFullValMaps, scrollYStore } = internalData;
|
|
1191
|
+
const valueField = computeValueField.value;
|
|
1192
|
+
const cacheItem = optFullValMaps[option[valueField]];
|
|
1193
|
+
if (cacheItem) {
|
|
1194
|
+
const optid = cacheItem.key;
|
|
1195
|
+
const avIndex = cacheItem._index;
|
|
1196
|
+
if (avIndex > -1) {
|
|
1197
|
+
const optWrapperElem = refVirtualWrapper.value;
|
|
1198
|
+
const panelElem = refOptionPanel.value;
|
|
1199
|
+
if (!panelElem) {
|
|
1200
|
+
return;
|
|
1201
|
+
}
|
|
1202
|
+
const optElem = panelElem.querySelector(`[optid='${optid}']`);
|
|
1203
|
+
if (optWrapperElem) {
|
|
1204
|
+
if (optElem) {
|
|
1205
|
+
const wrapperHeight = optWrapperElem.offsetHeight;
|
|
1206
|
+
const offsetPadding = 1;
|
|
1207
|
+
if (isDwArrow) {
|
|
1208
|
+
if (Math.ceil(optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop) >= wrapperHeight) {
|
|
1209
|
+
optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
|
|
1210
|
+
} else if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
|
|
1211
|
+
optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
|
|
1212
|
+
}
|
|
1213
|
+
} else {
|
|
1214
|
+
if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
|
|
1215
|
+
optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
|
|
1216
|
+
} else if (optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop > wrapperHeight) {
|
|
1217
|
+
optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
|
|
1218
|
+
}
|
|
1210
1219
|
}
|
|
1211
1220
|
} else {
|
|
1212
|
-
if (
|
|
1213
|
-
optWrapperElem.scrollTop =
|
|
1214
|
-
} else
|
|
1215
|
-
optWrapperElem.scrollTop =
|
|
1221
|
+
if (isDwArrow) {
|
|
1222
|
+
optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight - optWrapperElem.clientHeight + scrollYStore.rowHeight;
|
|
1223
|
+
} else {
|
|
1224
|
+
optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight;
|
|
1216
1225
|
}
|
|
1217
1226
|
}
|
|
1218
|
-
} else {
|
|
1219
|
-
if (isDwArrow) {
|
|
1220
|
-
optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight - optWrapperElem.clientHeight + scrollYStore.rowHeight;
|
|
1221
|
-
} else {
|
|
1222
|
-
optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight;
|
|
1223
|
-
}
|
|
1224
1227
|
}
|
|
1225
1228
|
}
|
|
1226
1229
|
}
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
if (reactData.scrollYLoad) {
|
|
1240
|
-
return new Promise((resolve) => {
|
|
1241
|
-
setTimeout(() => {
|
|
1242
|
-
nextTick(() => {
|
|
1243
|
-
resolve();
|
|
1244
|
-
});
|
|
1245
|
-
}, 50);
|
|
1246
|
-
});
|
|
1247
|
-
}
|
|
1248
|
-
return nextTick();
|
|
1249
|
-
};
|
|
1250
|
-
const refreshScroll = () => {
|
|
1251
|
-
const { lastScrollLeft, lastScrollTop } = internalData;
|
|
1252
|
-
return clearScroll().then(() => {
|
|
1253
|
-
if (lastScrollLeft || lastScrollTop) {
|
|
1254
|
-
internalData.lastScrollLeft = 0;
|
|
1255
|
-
internalData.lastScrollTop = 0;
|
|
1256
|
-
return scrollTo(lastScrollLeft, lastScrollTop);
|
|
1257
|
-
}
|
|
1258
|
-
});
|
|
1259
|
-
};
|
|
1260
|
-
const updateScrollbar = () => {
|
|
1261
|
-
const isVScrollbar = computeIsVScrollbar.value;
|
|
1262
|
-
if (isVScrollbar) {
|
|
1263
|
-
return nextTick().then(() => {
|
|
1264
|
-
updateThumbSize();
|
|
1265
|
-
updateThumbOffset();
|
|
1266
|
-
});
|
|
1267
|
-
}
|
|
1268
|
-
return Promise.resolve();
|
|
1269
|
-
};
|
|
1270
|
-
const recalculate = () => {
|
|
1271
|
-
const el = refElem.value;
|
|
1272
|
-
if (el && el.clientWidth && el.clientHeight) {
|
|
1273
|
-
return computeScrollLoad().then(() => {
|
|
1274
|
-
return updateScrollbar();
|
|
1275
|
-
});
|
|
1276
|
-
}
|
|
1277
|
-
return Promise.resolve();
|
|
1278
|
-
};
|
|
1279
|
-
const loadYData = (evnt) => {
|
|
1280
|
-
const { scrollYStore } = internalData;
|
|
1281
|
-
const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore;
|
|
1282
|
-
const scrollBodyElem = evnt.target;
|
|
1283
|
-
const scrollTop = scrollBodyElem.scrollTop;
|
|
1284
|
-
const toVisibleIndex = Math.floor(scrollTop / rowHeight);
|
|
1285
|
-
const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
|
|
1286
|
-
const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
|
|
1287
|
-
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
1288
|
-
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
1289
|
-
scrollYStore.startIndex = offsetStartIndex;
|
|
1290
|
-
scrollYStore.endIndex = offsetEndIndex;
|
|
1291
|
-
updateYData();
|
|
1230
|
+
};
|
|
1231
|
+
const scrollTo = (scrollLeft, scrollTop) => {
|
|
1232
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
1233
|
+
if (scrollBodyElem) {
|
|
1234
|
+
if (XEUtils.isNumber(scrollLeft)) {
|
|
1235
|
+
scrollBodyElem.scrollLeft = scrollLeft;
|
|
1236
|
+
}
|
|
1237
|
+
if (XEUtils.isNumber(scrollTop)) {
|
|
1238
|
+
scrollBodyElem.scrollTop = scrollTop;
|
|
1239
|
+
}
|
|
1292
1240
|
}
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
const delayHover = 250;
|
|
1297
|
-
const { lastScrollTime } = internalData;
|
|
1298
|
-
return !!(lastScrollTime && Date.now() < lastScrollTime + delayHover);
|
|
1299
|
-
};
|
|
1300
|
-
const scrollEvent = (evnt) => {
|
|
1301
|
-
const scrollBodyElem = evnt.target;
|
|
1302
|
-
const scrollTop = scrollBodyElem.scrollTop;
|
|
1303
|
-
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
1304
|
-
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
1305
|
-
const isY = scrollTop !== internalData.lastScrollTop;
|
|
1306
|
-
const isVScrollbar = computeIsVScrollbar.value;
|
|
1307
|
-
if (isVScrollbar) {
|
|
1308
|
-
updateThumbOffset();
|
|
1309
|
-
}
|
|
1310
|
-
internalData.lastScrollTop = scrollTop;
|
|
1311
|
-
internalData.lastScrollLeft = scrollLeft;
|
|
1312
|
-
if (reactData.scrollYLoad) {
|
|
1313
|
-
loadYData(evnt);
|
|
1314
|
-
}
|
|
1315
|
-
internalData.lastScrollTime = Date.now();
|
|
1316
|
-
dispatchEvent("scroll", { scrollLeft, scrollTop, isX, isY }, evnt);
|
|
1317
|
-
};
|
|
1318
|
-
const loadData = (datas) => {
|
|
1319
|
-
cacheItemMap(datas || []);
|
|
1320
|
-
const { multiple } = props;
|
|
1321
|
-
const { isLoaded, fullData, scrollYStore } = internalData;
|
|
1322
|
-
const defaultOpts = computeDefaultOpts.value;
|
|
1323
|
-
const virtualYOpts = computeVirtualYOpts.value;
|
|
1324
|
-
const valueField = computeValueField.value;
|
|
1325
|
-
Object.assign(scrollYStore, {
|
|
1326
|
-
startIndex: 0,
|
|
1327
|
-
endIndex: 1,
|
|
1328
|
-
visibleSize: 0
|
|
1329
|
-
});
|
|
1330
|
-
internalData.synchData = datas || [];
|
|
1331
|
-
reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length);
|
|
1332
|
-
handleData();
|
|
1333
|
-
if (!isLoaded) {
|
|
1334
|
-
const { selectMode } = defaultOpts;
|
|
1335
|
-
if (datas.length > 0 && XEUtils.eqNull(props.modelValue)) {
|
|
1336
|
-
if (selectMode === "all") {
|
|
1337
|
-
if (multiple) {
|
|
1338
|
-
nextTick(() => {
|
|
1339
|
-
emitDefaultValue(datas.map((item) => item[valueField]));
|
|
1340
|
-
});
|
|
1341
|
-
} else {
|
|
1342
|
-
errLog("vxe.error.notConflictProp", ["default-config.selectMode=all", "multiple=true"]);
|
|
1343
|
-
}
|
|
1344
|
-
} else if (selectMode === "first" || selectMode === "last") {
|
|
1345
|
-
const selectItem = XEUtils[selectMode](datas);
|
|
1346
|
-
if (selectItem) {
|
|
1241
|
+
if (reactData.scrollYLoad) {
|
|
1242
|
+
return new Promise((resolve) => {
|
|
1243
|
+
setTimeout(() => {
|
|
1347
1244
|
nextTick(() => {
|
|
1348
|
-
|
|
1349
|
-
emitDefaultValue(selectItem[valueField]);
|
|
1350
|
-
}
|
|
1245
|
+
resolve();
|
|
1351
1246
|
});
|
|
1352
|
-
}
|
|
1247
|
+
}, 50);
|
|
1248
|
+
});
|
|
1249
|
+
}
|
|
1250
|
+
return nextTick();
|
|
1251
|
+
};
|
|
1252
|
+
const refreshScroll = () => {
|
|
1253
|
+
const { lastScrollLeft, lastScrollTop } = internalData;
|
|
1254
|
+
return clearScroll().then(() => {
|
|
1255
|
+
if (lastScrollLeft || lastScrollTop) {
|
|
1256
|
+
internalData.lastScrollLeft = 0;
|
|
1257
|
+
internalData.lastScrollTop = 0;
|
|
1258
|
+
return scrollTo(lastScrollLeft, lastScrollTop);
|
|
1353
1259
|
}
|
|
1354
|
-
|
|
1260
|
+
});
|
|
1261
|
+
};
|
|
1262
|
+
const updateScrollbar = () => {
|
|
1263
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
1264
|
+
if (isVScrollbar) {
|
|
1265
|
+
return nextTick().then(() => {
|
|
1266
|
+
updateThumbSize();
|
|
1267
|
+
updateThumbOffset();
|
|
1268
|
+
});
|
|
1355
1269
|
}
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
scrollBodyElem.scrollTop = 0;
|
|
1365
|
-
scrollBodyElem.scrollLeft = 0;
|
|
1366
|
-
}
|
|
1367
|
-
internalData.lastScrollTop = 0;
|
|
1368
|
-
internalData.lastScrollLeft = 0;
|
|
1369
|
-
return nextTick();
|
|
1370
|
-
};
|
|
1371
|
-
const hasOptGroupById = (optid) => {
|
|
1372
|
-
const { optGroupKeyMaps } = internalData;
|
|
1373
|
-
return !!optGroupKeyMaps[optid];
|
|
1374
|
-
};
|
|
1375
|
-
const selectMethods = {
|
|
1376
|
-
dispatchEvent,
|
|
1377
|
-
getScrollViewElem() {
|
|
1378
|
-
const viewEl = refVirtualWrapper.value;
|
|
1379
|
-
return viewEl || null;
|
|
1380
|
-
},
|
|
1381
|
-
loadData,
|
|
1382
|
-
reloadData(datas) {
|
|
1383
|
-
internalData.isLoaded = false;
|
|
1384
|
-
clearScroll();
|
|
1385
|
-
return loadData(datas);
|
|
1386
|
-
},
|
|
1387
|
-
isPanelVisible() {
|
|
1388
|
-
return reactData.visiblePanel;
|
|
1389
|
-
},
|
|
1390
|
-
togglePanel() {
|
|
1391
|
-
if (reactData.visiblePanel) {
|
|
1392
|
-
hideOptionPanel();
|
|
1393
|
-
} else {
|
|
1394
|
-
showOptionPanel();
|
|
1270
|
+
return Promise.resolve();
|
|
1271
|
+
};
|
|
1272
|
+
const recalculate = () => {
|
|
1273
|
+
const el = refElem.value;
|
|
1274
|
+
if (el && el.clientWidth && el.clientHeight) {
|
|
1275
|
+
return computeScrollLoad().then(() => {
|
|
1276
|
+
return updateScrollbar();
|
|
1277
|
+
});
|
|
1395
1278
|
}
|
|
1396
|
-
return
|
|
1397
|
-
}
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1279
|
+
return Promise.resolve();
|
|
1280
|
+
};
|
|
1281
|
+
const loadYData = (evnt) => {
|
|
1282
|
+
const { scrollYStore } = internalData;
|
|
1283
|
+
const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore;
|
|
1284
|
+
const scrollBodyElem = evnt.target;
|
|
1285
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
1286
|
+
const toVisibleIndex = Math.floor(scrollTop / rowHeight);
|
|
1287
|
+
const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
|
|
1288
|
+
const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
|
|
1289
|
+
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
1290
|
+
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
1291
|
+
scrollYStore.startIndex = offsetStartIndex;
|
|
1292
|
+
scrollYStore.endIndex = offsetEndIndex;
|
|
1293
|
+
updateYData();
|
|
1294
|
+
}
|
|
1401
1295
|
}
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1296
|
+
};
|
|
1297
|
+
const isVMScrollProcess = () => {
|
|
1298
|
+
const delayHover = 250;
|
|
1299
|
+
const { lastScrollTime } = internalData;
|
|
1300
|
+
return !!(lastScrollTime && Date.now() < lastScrollTime + delayHover);
|
|
1301
|
+
};
|
|
1302
|
+
const scrollEvent = (evnt) => {
|
|
1303
|
+
const scrollBodyElem = evnt.target;
|
|
1304
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
1305
|
+
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
1306
|
+
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
1307
|
+
const isY = scrollTop !== internalData.lastScrollTop;
|
|
1308
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
1309
|
+
if (isVScrollbar) {
|
|
1310
|
+
updateThumbOffset();
|
|
1407
1311
|
}
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
updateYData();
|
|
1413
|
-
return nextTick();
|
|
1414
|
-
},
|
|
1415
|
-
focus() {
|
|
1416
|
-
const $input = refInput.value;
|
|
1417
|
-
if ($input) {
|
|
1418
|
-
$input.blur();
|
|
1312
|
+
internalData.lastScrollTop = scrollTop;
|
|
1313
|
+
internalData.lastScrollLeft = scrollLeft;
|
|
1314
|
+
if (reactData.scrollYLoad) {
|
|
1315
|
+
loadYData(evnt);
|
|
1419
1316
|
}
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
}
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1317
|
+
internalData.lastScrollTime = Date.now();
|
|
1318
|
+
dispatchEvent("scroll", { scrollLeft, scrollTop, isX, isY }, evnt);
|
|
1319
|
+
};
|
|
1320
|
+
const loadData = (datas) => {
|
|
1321
|
+
cacheItemMap(datas || []);
|
|
1322
|
+
const { multiple } = props;
|
|
1323
|
+
const { isLoaded, fullData, scrollYStore } = internalData;
|
|
1324
|
+
const defaultOpts = computeDefaultOpts.value;
|
|
1325
|
+
const virtualYOpts = computeVirtualYOpts.value;
|
|
1326
|
+
const valueField = computeValueField.value;
|
|
1327
|
+
Object.assign(scrollYStore, {
|
|
1328
|
+
startIndex: 0,
|
|
1329
|
+
endIndex: 1,
|
|
1330
|
+
visibleSize: 0
|
|
1331
|
+
});
|
|
1332
|
+
internalData.synchData = datas || [];
|
|
1333
|
+
reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length);
|
|
1334
|
+
handleData();
|
|
1335
|
+
if (!isLoaded) {
|
|
1336
|
+
const { selectMode } = defaultOpts;
|
|
1337
|
+
if (datas.length > 0 && XEUtils.eqNull(props.modelValue)) {
|
|
1338
|
+
if (selectMode === "all") {
|
|
1339
|
+
if (multiple) {
|
|
1340
|
+
nextTick(() => {
|
|
1341
|
+
emitDefaultValue(datas.map((item) => item[valueField]));
|
|
1342
|
+
});
|
|
1343
|
+
} else {
|
|
1344
|
+
errLog("vxe.error.notConflictProp", ["default-config.selectMode=all", "multiple=true"]);
|
|
1345
|
+
}
|
|
1346
|
+
} else if (selectMode === "first" || selectMode === "last") {
|
|
1347
|
+
const selectItem = XEUtils[selectMode](datas);
|
|
1348
|
+
if (selectItem) {
|
|
1349
|
+
nextTick(() => {
|
|
1350
|
+
if (XEUtils.eqNull(props.modelValue)) {
|
|
1351
|
+
emitDefaultValue(selectItem[valueField]);
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
internalData.isLoaded = true;
|
|
1357
|
+
}
|
|
1427
1358
|
}
|
|
1428
|
-
|
|
1359
|
+
return computeScrollLoad().then(() => {
|
|
1360
|
+
refreshScroll();
|
|
1361
|
+
});
|
|
1362
|
+
};
|
|
1363
|
+
const clearScroll = () => {
|
|
1364
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
1365
|
+
if (scrollBodyElem) {
|
|
1366
|
+
scrollBodyElem.scrollTop = 0;
|
|
1367
|
+
scrollBodyElem.scrollLeft = 0;
|
|
1368
|
+
}
|
|
1369
|
+
internalData.lastScrollTop = 0;
|
|
1370
|
+
internalData.lastScrollLeft = 0;
|
|
1429
1371
|
return nextTick();
|
|
1430
|
-
}
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
const
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1372
|
+
};
|
|
1373
|
+
const hasOptGroupById = (optid) => {
|
|
1374
|
+
const { optGroupKeyMaps } = internalData;
|
|
1375
|
+
return !!optGroupKeyMaps[optid];
|
|
1376
|
+
};
|
|
1377
|
+
const selectMethods = {
|
|
1378
|
+
dispatchEvent,
|
|
1379
|
+
getScrollViewElem() {
|
|
1380
|
+
const viewEl = refVirtualWrapper.value;
|
|
1381
|
+
return viewEl || null;
|
|
1382
|
+
},
|
|
1383
|
+
loadData,
|
|
1384
|
+
reloadData(datas) {
|
|
1385
|
+
internalData.isLoaded = false;
|
|
1386
|
+
clearScroll();
|
|
1387
|
+
return loadData(datas);
|
|
1388
|
+
},
|
|
1389
|
+
isPanelVisible() {
|
|
1390
|
+
return reactData.visiblePanel;
|
|
1391
|
+
},
|
|
1392
|
+
togglePanel() {
|
|
1393
|
+
if (reactData.visiblePanel) {
|
|
1394
|
+
hideOptionPanel();
|
|
1395
|
+
} else {
|
|
1396
|
+
showOptionPanel();
|
|
1447
1397
|
}
|
|
1448
|
-
|
|
1449
|
-
|
|
1398
|
+
return nextTick();
|
|
1399
|
+
},
|
|
1400
|
+
hidePanel() {
|
|
1401
|
+
if (reactData.visiblePanel) {
|
|
1402
|
+
hideOptionPanel();
|
|
1450
1403
|
}
|
|
1451
|
-
|
|
1452
|
-
|
|
1404
|
+
return nextTick();
|
|
1405
|
+
},
|
|
1406
|
+
showPanel() {
|
|
1407
|
+
if (!reactData.visiblePanel) {
|
|
1408
|
+
showOptionPanel();
|
|
1453
1409
|
}
|
|
1454
|
-
|
|
1455
|
-
}
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
const ons = {};
|
|
1466
|
-
if (!trigger || trigger === "default") {
|
|
1467
|
-
ons.onClick = (evnt) => {
|
|
1468
|
-
if (!isDisabled && !isOptGroup) {
|
|
1469
|
-
changeOptionEvent(evnt, option);
|
|
1410
|
+
return nextTick();
|
|
1411
|
+
},
|
|
1412
|
+
refreshOption() {
|
|
1413
|
+
handleOption();
|
|
1414
|
+
updateYData();
|
|
1415
|
+
return nextTick();
|
|
1416
|
+
},
|
|
1417
|
+
focus() {
|
|
1418
|
+
const $input = refInput.value;
|
|
1419
|
+
if ($input) {
|
|
1420
|
+
$input.blur();
|
|
1470
1421
|
}
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
return h(
|
|
1474
|
-
"div",
|
|
1475
|
-
{
|
|
1476
|
-
key: 2,
|
|
1477
|
-
class: [
|
|
1478
|
-
"vxe-select-option--radio",
|
|
1479
|
-
{
|
|
1480
|
-
"is--checked": isChecked,
|
|
1481
|
-
"is--disabled": isDisabled
|
|
1482
|
-
}
|
|
1483
|
-
],
|
|
1484
|
-
...ons
|
|
1422
|
+
reactData.isActivated = true;
|
|
1423
|
+
return nextTick();
|
|
1485
1424
|
},
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
]
|
|
1491
|
-
);
|
|
1492
|
-
};
|
|
1493
|
-
const renderCheckbox = (option, isOptGroup, isChecked, isDisabled) => {
|
|
1494
|
-
const checkboxOpts = computeCheckboxOpts.value;
|
|
1495
|
-
const { showIcon, trigger } = checkboxOpts;
|
|
1496
|
-
if (isOptGroup || showIcon === false) {
|
|
1497
|
-
return renderEmptyElement($xeSelect);
|
|
1498
|
-
}
|
|
1499
|
-
const ons = {};
|
|
1500
|
-
if (!trigger || trigger === "default") {
|
|
1501
|
-
ons.onClick = (evnt) => {
|
|
1502
|
-
if (!isDisabled && !isOptGroup) {
|
|
1503
|
-
changeOptionEvent(evnt, option);
|
|
1425
|
+
blur() {
|
|
1426
|
+
const $input = refInput.value;
|
|
1427
|
+
if ($input) {
|
|
1428
|
+
$input.blur();
|
|
1504
1429
|
}
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
return h(
|
|
1508
|
-
"div",
|
|
1509
|
-
{
|
|
1510
|
-
key: 3,
|
|
1511
|
-
class: [
|
|
1512
|
-
"vxe-select-option--checkbox",
|
|
1513
|
-
{
|
|
1514
|
-
"is--checked": isChecked,
|
|
1515
|
-
"is--disabled": isDisabled
|
|
1516
|
-
}
|
|
1517
|
-
],
|
|
1518
|
-
...ons
|
|
1430
|
+
reactData.isActivated = false;
|
|
1431
|
+
return nextTick();
|
|
1519
1432
|
},
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
const radioOpts = computeRadioOpts.value;
|
|
1537
|
-
const checkboxOpts = computeCheckboxOpts.value;
|
|
1538
|
-
const { useKey, height } = optionOpts;
|
|
1539
|
-
const optionSlot = slots.option;
|
|
1540
|
-
const isCheckboxMode = showCheckbox && multiple;
|
|
1541
|
-
const isRadioMode = showRadio && !multiple;
|
|
1542
|
-
return list.map((option, cIndex) => {
|
|
1543
|
-
const { slots: slots2, className } = option;
|
|
1544
|
-
const optid = getOptId(option);
|
|
1545
|
-
const optionValue = option[valueField];
|
|
1546
|
-
const isOptGroup = hasOptGroupById(optid);
|
|
1547
|
-
const isAdd = !!(allowCreate && optAddMaps[optid]);
|
|
1548
|
-
const isSelected = !isAdd && selectVals.indexOf(optionValue) > -1;
|
|
1549
|
-
const isVisible = isAdd || !isOptGroup || isOptionVisible(option);
|
|
1550
|
-
const isDisabled = !isAdd && checkOptionDisabled(isSelected, option);
|
|
1551
|
-
const defaultSlot = slots2 ? slots2.default : null;
|
|
1552
|
-
const optSlot = defaultSlot || optionSlot;
|
|
1553
|
-
const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect };
|
|
1554
|
-
let optLabel = "";
|
|
1555
|
-
const optVNs = [];
|
|
1556
|
-
if (isCheckboxMode) {
|
|
1557
|
-
optVNs.push(renderCheckbox(option, isOptGroup, isSelected, isDisabled));
|
|
1558
|
-
} else if (isRadioMode) {
|
|
1559
|
-
optVNs.push(renderRadio(option, isOptGroup, isSelected, isDisabled));
|
|
1560
|
-
}
|
|
1561
|
-
let otlbVNs = [];
|
|
1562
|
-
if (optSlot) {
|
|
1563
|
-
otlbVNs = callSlot(optSlot, optParams);
|
|
1564
|
-
} else {
|
|
1565
|
-
optLabel = getFuncText(option[isOptGroup ? groupLabelField : labelField] || optionValue);
|
|
1566
|
-
otlbVNs = [optLabel];
|
|
1567
|
-
}
|
|
1568
|
-
optVNs.push(
|
|
1569
|
-
h(
|
|
1570
|
-
"div",
|
|
1571
|
-
{
|
|
1572
|
-
key: 1,
|
|
1573
|
-
class: "vxe-select-option--label"
|
|
1574
|
-
},
|
|
1575
|
-
otlbVNs
|
|
1576
|
-
)
|
|
1577
|
-
);
|
|
1578
|
-
const ons = {
|
|
1579
|
-
onMousedown: (evnt) => {
|
|
1580
|
-
const isLeftBtn = evnt.button === 0;
|
|
1581
|
-
if (isLeftBtn) {
|
|
1582
|
-
evnt.stopPropagation();
|
|
1433
|
+
recalculate,
|
|
1434
|
+
clearScroll
|
|
1435
|
+
};
|
|
1436
|
+
const bindScrollbarResize = () => {
|
|
1437
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
1438
|
+
const { scrollObserver } = internalData;
|
|
1439
|
+
if (isVScrollbar) {
|
|
1440
|
+
if (!scrollObserver) {
|
|
1441
|
+
const el = refElem.value;
|
|
1442
|
+
const viewSpaceEl = refVirtualSpaceElem.value;
|
|
1443
|
+
const viewInnerEl = refVirtualBody.value;
|
|
1444
|
+
const scrollObserver2 = globalResize.create(() => {
|
|
1445
|
+
reScrollFlag.value++;
|
|
1446
|
+
});
|
|
1447
|
+
if (el) {
|
|
1448
|
+
scrollObserver2.observe(el);
|
|
1583
1449
|
}
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
if (!isDisabled && !isOptGroup && !isVMScrollProcess()) {
|
|
1587
|
-
setCurrentOption(option);
|
|
1450
|
+
if (viewSpaceEl) {
|
|
1451
|
+
scrollObserver2.observe(viewSpaceEl);
|
|
1588
1452
|
}
|
|
1453
|
+
if (viewInnerEl) {
|
|
1454
|
+
scrollObserver2.observe(viewInnerEl);
|
|
1455
|
+
}
|
|
1456
|
+
internalData.scrollObserver = scrollObserver2;
|
|
1589
1457
|
}
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1458
|
+
}
|
|
1459
|
+
};
|
|
1460
|
+
Object.assign($xeSelect, selectMethods);
|
|
1461
|
+
const renderRadio = (option, isOptGroup, isChecked, isDisabled) => {
|
|
1462
|
+
const radioOpts = computeRadioOpts.value;
|
|
1463
|
+
const { showIcon, trigger } = radioOpts;
|
|
1464
|
+
if (isOptGroup || showIcon === false) {
|
|
1465
|
+
return renderEmptyElement($xeSelect);
|
|
1466
|
+
}
|
|
1467
|
+
const ons = {};
|
|
1468
|
+
if (!trigger || trigger === "default") {
|
|
1592
1469
|
ons.onClick = (evnt) => {
|
|
1593
1470
|
if (!isDisabled && !isOptGroup) {
|
|
1594
1471
|
changeOptionEvent(evnt, option);
|
|
1595
1472
|
}
|
|
1596
1473
|
};
|
|
1597
1474
|
}
|
|
1598
|
-
return
|
|
1475
|
+
return h(
|
|
1599
1476
|
"div",
|
|
1600
1477
|
{
|
|
1601
|
-
key:
|
|
1478
|
+
key: 2,
|
|
1602
1479
|
class: [
|
|
1603
|
-
"vxe-select-option",
|
|
1604
|
-
className ? XEUtils.isFunction(className) ? className(optParams) : className : "",
|
|
1480
|
+
"vxe-select-option--radio",
|
|
1605
1481
|
{
|
|
1606
|
-
"
|
|
1607
|
-
"is--disabled": isDisabled
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1482
|
+
"is--checked": isChecked,
|
|
1483
|
+
"is--disabled": isDisabled
|
|
1484
|
+
}
|
|
1485
|
+
],
|
|
1486
|
+
...ons
|
|
1487
|
+
},
|
|
1488
|
+
[
|
|
1489
|
+
h("span", {
|
|
1490
|
+
class: ["vxe-radio--icon", isChecked ? getIcon().RADIO_CHECKED : isDisabled ? getIcon().RADIO_DISABLED_UNCHECKED : getIcon().RADIO_UNCHECKED]
|
|
1491
|
+
})
|
|
1492
|
+
]
|
|
1493
|
+
);
|
|
1494
|
+
};
|
|
1495
|
+
const renderCheckbox = (option, isOptGroup, isChecked, isDisabled) => {
|
|
1496
|
+
const checkboxOpts = computeCheckboxOpts.value;
|
|
1497
|
+
const { showIcon, trigger } = checkboxOpts;
|
|
1498
|
+
if (isOptGroup || showIcon === false) {
|
|
1499
|
+
return renderEmptyElement($xeSelect);
|
|
1500
|
+
}
|
|
1501
|
+
const ons = {};
|
|
1502
|
+
if (!trigger || trigger === "default") {
|
|
1503
|
+
ons.onClick = (evnt) => {
|
|
1504
|
+
if (!isDisabled && !isOptGroup) {
|
|
1505
|
+
changeOptionEvent(evnt, option);
|
|
1506
|
+
}
|
|
1507
|
+
};
|
|
1508
|
+
}
|
|
1509
|
+
return h(
|
|
1510
|
+
"div",
|
|
1511
|
+
{
|
|
1512
|
+
key: 3,
|
|
1513
|
+
class: [
|
|
1514
|
+
"vxe-select-option--checkbox",
|
|
1515
|
+
{
|
|
1516
|
+
"is--checked": isChecked,
|
|
1517
|
+
"is--disabled": isDisabled
|
|
1611
1518
|
}
|
|
1612
1519
|
],
|
|
1613
|
-
optid,
|
|
1614
|
-
title: optLabel || null,
|
|
1615
|
-
style: height ? {
|
|
1616
|
-
height: toCssUnit(height)
|
|
1617
|
-
} : void 0,
|
|
1618
1520
|
...ons
|
|
1619
1521
|
},
|
|
1620
|
-
|
|
1522
|
+
[
|
|
1523
|
+
h("span", {
|
|
1524
|
+
class: ["vxe-checkbox--icon", isChecked ? getIcon().CHECKBOX_CHECKED : isDisabled ? getIcon().CHECKBOX_DISABLED_UNCHECKED : getIcon().CHECKBOX_UNCHECKED]
|
|
1525
|
+
})
|
|
1526
|
+
]
|
|
1527
|
+
);
|
|
1528
|
+
};
|
|
1529
|
+
const renderOption = (list) => {
|
|
1530
|
+
const { allowCreate, optionKey, multiple, showRadio, showCheckbox } = props;
|
|
1531
|
+
const { currentOption } = reactData;
|
|
1532
|
+
const { optAddMaps } = internalData;
|
|
1533
|
+
const optionOpts = computeOptionOpts.value;
|
|
1534
|
+
const labelField = computeLabelField.value;
|
|
1535
|
+
const valueField = computeValueField.value;
|
|
1536
|
+
const groupLabelField = computeGroupLabelField.value;
|
|
1537
|
+
const selectVals = computeSelectVals.value;
|
|
1538
|
+
const radioOpts = computeRadioOpts.value;
|
|
1539
|
+
const checkboxOpts = computeCheckboxOpts.value;
|
|
1540
|
+
const { useKey, height } = optionOpts;
|
|
1541
|
+
const optionSlot = slots.option;
|
|
1542
|
+
const isCheckboxMode = showCheckbox && multiple;
|
|
1543
|
+
const isRadioMode = showRadio && !multiple;
|
|
1544
|
+
return list.map((option, cIndex) => {
|
|
1545
|
+
const { slots: slots2, className } = option;
|
|
1546
|
+
const optid = getOptId(option);
|
|
1547
|
+
const optionValue = option[valueField];
|
|
1548
|
+
const isOptGroup = hasOptGroupById(optid);
|
|
1549
|
+
const isAdd = !!(allowCreate && optAddMaps[optid]);
|
|
1550
|
+
const isSelected = !isAdd && selectVals.indexOf(optionValue) > -1;
|
|
1551
|
+
const isVisible = isAdd || !isOptGroup || isOptionVisible(option);
|
|
1552
|
+
const isDisabled = !isAdd && checkOptionDisabled(isSelected, option);
|
|
1553
|
+
const defaultSlot = slots2 ? slots2.default : null;
|
|
1554
|
+
const optSlot = defaultSlot || optionSlot;
|
|
1555
|
+
const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect };
|
|
1556
|
+
let optLabel = "";
|
|
1557
|
+
const optVNs = [];
|
|
1558
|
+
if (isCheckboxMode) {
|
|
1559
|
+
optVNs.push(renderCheckbox(option, isOptGroup, isSelected, isDisabled));
|
|
1560
|
+
} else if (isRadioMode) {
|
|
1561
|
+
optVNs.push(renderRadio(option, isOptGroup, isSelected, isDisabled));
|
|
1562
|
+
}
|
|
1563
|
+
let otlbVNs = [];
|
|
1564
|
+
if (optSlot) {
|
|
1565
|
+
otlbVNs = callSlot(optSlot, optParams);
|
|
1566
|
+
} else {
|
|
1567
|
+
optLabel = getFuncText(option[isOptGroup ? groupLabelField : labelField] || optionValue);
|
|
1568
|
+
otlbVNs = [optLabel];
|
|
1569
|
+
}
|
|
1570
|
+
optVNs.push(
|
|
1621
1571
|
h(
|
|
1622
1572
|
"div",
|
|
1623
1573
|
{
|
|
1624
1574
|
key: 1,
|
|
1625
|
-
class: "vxe-select-option--
|
|
1575
|
+
class: "vxe-select-option--label"
|
|
1626
1576
|
},
|
|
1627
|
-
|
|
1628
|
-
)
|
|
1629
|
-
|
|
1577
|
+
otlbVNs
|
|
1578
|
+
)
|
|
1579
|
+
);
|
|
1580
|
+
const ons = {
|
|
1581
|
+
onMousedown: (evnt) => {
|
|
1582
|
+
const isLeftBtn = evnt.button === 0;
|
|
1583
|
+
if (isLeftBtn) {
|
|
1584
|
+
evnt.stopPropagation();
|
|
1585
|
+
}
|
|
1586
|
+
},
|
|
1587
|
+
onMouseenter: () => {
|
|
1588
|
+
if (!isDisabled && !isOptGroup && !isVMScrollProcess()) {
|
|
1589
|
+
setCurrentOption(option);
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
};
|
|
1593
|
+
if (isCheckboxMode ? checkboxOpts.trigger === "option" : isRadioMode ? radioOpts.trigger === "option" : true) {
|
|
1594
|
+
ons.onClick = (evnt) => {
|
|
1595
|
+
if (!isDisabled && !isOptGroup) {
|
|
1596
|
+
changeOptionEvent(evnt, option);
|
|
1597
|
+
}
|
|
1598
|
+
};
|
|
1599
|
+
}
|
|
1600
|
+
return isVisible ? h(
|
|
1601
|
+
"div",
|
|
1602
|
+
{
|
|
1603
|
+
key: useKey || optionKey ? optid : cIndex,
|
|
1604
|
+
class: [
|
|
1605
|
+
"vxe-select-option",
|
|
1606
|
+
className ? XEUtils.isFunction(className) ? className(optParams) : className : "",
|
|
1607
|
+
{
|
|
1608
|
+
"vxe-select-optgroup": isOptGroup,
|
|
1609
|
+
"is--disabled": isDisabled,
|
|
1610
|
+
"is--selected": isSelected,
|
|
1611
|
+
"is--add": isAdd,
|
|
1612
|
+
"is--hover": currentOption && getOptId(currentOption) === optid
|
|
1613
|
+
}
|
|
1614
|
+
],
|
|
1615
|
+
optid,
|
|
1616
|
+
title: optLabel || null,
|
|
1617
|
+
style: height ? {
|
|
1618
|
+
height: toCssUnit(height)
|
|
1619
|
+
} : void 0,
|
|
1620
|
+
...ons
|
|
1621
|
+
},
|
|
1622
|
+
allowCreate ? [
|
|
1623
|
+
h(
|
|
1624
|
+
"div",
|
|
1625
|
+
{
|
|
1626
|
+
key: 1,
|
|
1627
|
+
class: "vxe-select-option--add-label"
|
|
1628
|
+
},
|
|
1629
|
+
optVNs
|
|
1630
|
+
),
|
|
1631
|
+
isAdd ? h(
|
|
1632
|
+
"div",
|
|
1633
|
+
{
|
|
1634
|
+
key: 2,
|
|
1635
|
+
class: "vxe-select-option--add-icon"
|
|
1636
|
+
},
|
|
1637
|
+
[
|
|
1638
|
+
h("i", {
|
|
1639
|
+
class: getIcon().SELECT_ADD_OPTION
|
|
1640
|
+
})
|
|
1641
|
+
]
|
|
1642
|
+
) : renderEmptyElement($xeSelect)
|
|
1643
|
+
] : optVNs
|
|
1644
|
+
) : renderEmptyElement($xeSelect);
|
|
1645
|
+
});
|
|
1646
|
+
};
|
|
1647
|
+
const renderOpts = () => {
|
|
1648
|
+
const { optList, searchLoading } = reactData;
|
|
1649
|
+
if (searchLoading) {
|
|
1650
|
+
return [
|
|
1651
|
+
h(
|
|
1630
1652
|
"div",
|
|
1631
1653
|
{
|
|
1632
|
-
|
|
1633
|
-
class: "vxe-select-option--add-icon"
|
|
1654
|
+
class: "vxe-select--search-loading"
|
|
1634
1655
|
},
|
|
1635
1656
|
[
|
|
1636
1657
|
h("i", {
|
|
1637
|
-
class: getIcon().
|
|
1638
|
-
})
|
|
1658
|
+
class: ["vxe-select--search-icon", getIcon().SELECT_LOADED]
|
|
1659
|
+
}),
|
|
1660
|
+
h(
|
|
1661
|
+
"span",
|
|
1662
|
+
{
|
|
1663
|
+
class: "vxe-select--search-text"
|
|
1664
|
+
},
|
|
1665
|
+
getI18n("vxe.select.loadingText")
|
|
1666
|
+
)
|
|
1639
1667
|
]
|
|
1640
|
-
)
|
|
1641
|
-
]
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
const { optList, searchLoading } = reactData;
|
|
1647
|
-
if (searchLoading) {
|
|
1668
|
+
)
|
|
1669
|
+
];
|
|
1670
|
+
}
|
|
1671
|
+
if (optList.length) {
|
|
1672
|
+
return renderOption(optList);
|
|
1673
|
+
}
|
|
1648
1674
|
return [
|
|
1649
1675
|
h(
|
|
1650
1676
|
"div",
|
|
1651
1677
|
{
|
|
1652
|
-
class: "vxe-select--
|
|
1678
|
+
class: "vxe-select--empty-placeholder"
|
|
1679
|
+
},
|
|
1680
|
+
props.emptyText || getI18n("vxe.select.emptyText")
|
|
1681
|
+
)
|
|
1682
|
+
];
|
|
1683
|
+
};
|
|
1684
|
+
const renderVN = () => {
|
|
1685
|
+
const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton, showBadge } = props;
|
|
1686
|
+
const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData;
|
|
1687
|
+
const vSize = computeSize.value;
|
|
1688
|
+
const isVScrollbar = computeIsVScrollbar.value;
|
|
1689
|
+
const isDisabled = computeIsDisabled.value;
|
|
1690
|
+
const selectLabel = computeSelectLabel.value;
|
|
1691
|
+
const fullLabel = computeFullLabel.value;
|
|
1692
|
+
const btnTransfer = computeBtnTransfer.value;
|
|
1693
|
+
const formReadonly = computeFormReadonly.value;
|
|
1694
|
+
const inpPlaceholder = computeInpPlaceholder.value;
|
|
1695
|
+
const badgeOpts = computeBadgeOpts.value;
|
|
1696
|
+
const badgeLabel = computeBadgeLabel.value;
|
|
1697
|
+
const defaultSlot = slots.default;
|
|
1698
|
+
if (formReadonly) {
|
|
1699
|
+
return h(
|
|
1700
|
+
"div",
|
|
1701
|
+
{
|
|
1702
|
+
ref: refElem,
|
|
1703
|
+
class: [
|
|
1704
|
+
"vxe-select--readonly",
|
|
1705
|
+
className,
|
|
1706
|
+
{
|
|
1707
|
+
"is--badge": showBadge && badgeLabel,
|
|
1708
|
+
"is--badge-dot": showBadge && badgeOpts.dot
|
|
1709
|
+
}
|
|
1710
|
+
]
|
|
1653
1711
|
},
|
|
1654
1712
|
[
|
|
1655
|
-
h(
|
|
1656
|
-
|
|
1657
|
-
|
|
1713
|
+
h(
|
|
1714
|
+
"div",
|
|
1715
|
+
{
|
|
1716
|
+
class: "vxe-select-slots",
|
|
1717
|
+
ref: "hideOption"
|
|
1718
|
+
},
|
|
1719
|
+
defaultSlot ? defaultSlot({}) : []
|
|
1720
|
+
),
|
|
1658
1721
|
h(
|
|
1659
1722
|
"span",
|
|
1660
1723
|
{
|
|
1661
|
-
class: "vxe-select
|
|
1724
|
+
class: "vxe-select-label",
|
|
1725
|
+
title: fullLabel
|
|
1726
|
+
},
|
|
1727
|
+
selectLabel
|
|
1728
|
+
),
|
|
1729
|
+
showBadge && badgeLabel ? h(
|
|
1730
|
+
"div",
|
|
1731
|
+
{
|
|
1732
|
+
class: "vxe-badge--label"
|
|
1662
1733
|
},
|
|
1663
|
-
|
|
1664
|
-
)
|
|
1734
|
+
badgeLabel
|
|
1735
|
+
) : renderEmptyElement($xeSelect)
|
|
1665
1736
|
]
|
|
1666
|
-
)
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
const vSize = computeSize.value;
|
|
1686
|
-
const isVScrollbar = computeIsVScrollbar.value;
|
|
1687
|
-
const isDisabled = computeIsDisabled.value;
|
|
1688
|
-
const selectLabel = computeSelectLabel.value;
|
|
1689
|
-
const fullLabel = computeFullLabel.value;
|
|
1690
|
-
const btnTransfer = computeBtnTransfer.value;
|
|
1691
|
-
const formReadonly = computeFormReadonly.value;
|
|
1692
|
-
const inpPlaceholder = computeInpPlaceholder.value;
|
|
1693
|
-
const badgeOpts = computeBadgeOpts.value;
|
|
1694
|
-
const badgeLabel = computeBadgeLabel.value;
|
|
1695
|
-
const defaultSlot = slots.default;
|
|
1696
|
-
if (formReadonly) {
|
|
1737
|
+
);
|
|
1738
|
+
}
|
|
1739
|
+
const currStyle = computeCurrStyle.value;
|
|
1740
|
+
const selectVals = computeSelectVals.value;
|
|
1741
|
+
const popupWrapperStyle = computePopupWrapperStyle.value;
|
|
1742
|
+
const popupOpts = computePopupOpts.value;
|
|
1743
|
+
const headerSlot = slots.header;
|
|
1744
|
+
const footerSlot = slots.footer;
|
|
1745
|
+
const prefixSlot = slots.prefix;
|
|
1746
|
+
const { appendTo } = popupOpts;
|
|
1747
|
+
const ppClassName = popupOpts.className || props.popupClassName;
|
|
1748
|
+
const scrollbarOpts = computeScrollbarOpts.value;
|
|
1749
|
+
const scrollXVisible = computeScrollXVisible.value;
|
|
1750
|
+
const scrollYVisible = computeScrollYVisible.value;
|
|
1751
|
+
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
1752
|
+
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
1753
|
+
const scrollXAutoHide = computeScrollXAutoHide.value;
|
|
1754
|
+
const scrollYAutoHide = computeScrollYAutoHide.value;
|
|
1755
|
+
const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
|
|
1697
1756
|
return h(
|
|
1698
1757
|
"div",
|
|
1699
1758
|
{
|
|
1700
1759
|
ref: refElem,
|
|
1701
1760
|
class: [
|
|
1702
|
-
"vxe-select
|
|
1703
|
-
className,
|
|
1761
|
+
"vxe-select",
|
|
1762
|
+
className ? XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className : "",
|
|
1704
1763
|
{
|
|
1764
|
+
[`size--${vSize}`]: vSize,
|
|
1705
1765
|
"is--badge": showBadge && badgeLabel,
|
|
1706
|
-
"is--badge-dot": showBadge && badgeOpts.dot
|
|
1766
|
+
"is--badge-dot": showBadge && badgeOpts.dot,
|
|
1767
|
+
"is--visible": visiblePanel,
|
|
1768
|
+
"is--disabled": isDisabled,
|
|
1769
|
+
"is--filter": filterable,
|
|
1770
|
+
"is--loading": loading,
|
|
1771
|
+
"is--active": isActivated
|
|
1707
1772
|
}
|
|
1708
|
-
]
|
|
1773
|
+
],
|
|
1774
|
+
style: currStyle
|
|
1709
1775
|
},
|
|
1710
1776
|
[
|
|
1711
1777
|
h(
|
|
@@ -1717,12 +1783,28 @@ var select_default = defineVxeComponent({
|
|
|
1717
1783
|
defaultSlot ? defaultSlot({}) : []
|
|
1718
1784
|
),
|
|
1719
1785
|
h(
|
|
1720
|
-
|
|
1786
|
+
VxeInputComponent,
|
|
1721
1787
|
{
|
|
1722
|
-
|
|
1723
|
-
|
|
1788
|
+
ref: refInput,
|
|
1789
|
+
clearable: props.clearable,
|
|
1790
|
+
placeholder: inpPlaceholder,
|
|
1791
|
+
editable: false,
|
|
1792
|
+
disabled: isDisabled,
|
|
1793
|
+
type: "text",
|
|
1794
|
+
prefixIcon: props.prefixIcon,
|
|
1795
|
+
suffixIcon: loading ? getIcon().SELECT_LOADED : visiblePanel ? getIcon().SELECT_OPEN : getIcon().SELECT_CLOSE,
|
|
1796
|
+
autoFocus: false,
|
|
1797
|
+
title: fullLabel,
|
|
1798
|
+
modelValue: selectLabel,
|
|
1799
|
+
onClear: clearEvent,
|
|
1800
|
+
onClick: clickEvent,
|
|
1801
|
+
onFocus: focusEvent,
|
|
1802
|
+
onBlur: blurEvent,
|
|
1803
|
+
onSuffixClick: suffixClickEvent
|
|
1724
1804
|
},
|
|
1725
|
-
|
|
1805
|
+
prefixSlot ? {
|
|
1806
|
+
prefix: () => prefixSlot({})
|
|
1807
|
+
} : {}
|
|
1726
1808
|
),
|
|
1727
1809
|
showBadge && badgeLabel ? h(
|
|
1728
1810
|
"div",
|
|
@@ -1730,418 +1812,354 @@ var select_default = defineVxeComponent({
|
|
|
1730
1812
|
class: "vxe-badge--label"
|
|
1731
1813
|
},
|
|
1732
1814
|
badgeLabel
|
|
1733
|
-
) : renderEmptyElement($xeSelect)
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
clearable: props.clearable,
|
|
1788
|
-
placeholder: inpPlaceholder,
|
|
1789
|
-
editable: false,
|
|
1790
|
-
disabled: isDisabled,
|
|
1791
|
-
type: "text",
|
|
1792
|
-
prefixIcon: props.prefixIcon,
|
|
1793
|
-
suffixIcon: loading ? getIcon().SELECT_LOADED : visiblePanel ? getIcon().SELECT_OPEN : getIcon().SELECT_CLOSE,
|
|
1794
|
-
autoFocus: false,
|
|
1795
|
-
title: fullLabel,
|
|
1796
|
-
modelValue: selectLabel,
|
|
1797
|
-
onClear: clearEvent,
|
|
1798
|
-
onClick: clickEvent,
|
|
1799
|
-
onFocus: focusEvent,
|
|
1800
|
-
onBlur: blurEvent,
|
|
1801
|
-
onSuffixClick: suffixClickEvent
|
|
1802
|
-
},
|
|
1803
|
-
prefixSlot ? {
|
|
1804
|
-
prefix: () => prefixSlot({})
|
|
1805
|
-
} : {}
|
|
1806
|
-
),
|
|
1807
|
-
showBadge && badgeLabel ? h(
|
|
1808
|
-
"div",
|
|
1809
|
-
{
|
|
1810
|
-
class: "vxe-badge--label"
|
|
1811
|
-
},
|
|
1812
|
-
badgeLabel
|
|
1813
|
-
) : renderEmptyElement($xeSelect),
|
|
1814
|
-
h(
|
|
1815
|
-
Teleport,
|
|
1816
|
-
{
|
|
1817
|
-
to: getPopupContainer(appendTo),
|
|
1818
|
-
disabled: btnTransfer ? !initialized : true
|
|
1819
|
-
},
|
|
1820
|
-
[
|
|
1821
|
-
h(
|
|
1822
|
-
"div",
|
|
1823
|
-
{
|
|
1824
|
-
ref: refOptionPanel,
|
|
1825
|
-
class: [
|
|
1826
|
-
"vxe-table--ignore-clear vxe-select--panel",
|
|
1827
|
-
ppClassName ? XEUtils.isFunction(ppClassName) ? ppClassName({ $select: $xeSelect }) : ppClassName : "",
|
|
1828
|
-
{
|
|
1829
|
-
[`size--${vSize}`]: vSize,
|
|
1830
|
-
"is--transfer": btnTransfer,
|
|
1831
|
-
"ani--leave": !loading && isAniVisible,
|
|
1832
|
-
"ani--enter": !loading && visiblePanel
|
|
1833
|
-
}
|
|
1834
|
-
],
|
|
1835
|
-
placement: reactData.panelPlacement,
|
|
1836
|
-
style: reactData.panelStyle
|
|
1837
|
-
},
|
|
1838
|
-
initialized && (visiblePanel || isAniVisible) ? [
|
|
1839
|
-
h(
|
|
1840
|
-
"div",
|
|
1841
|
-
{
|
|
1842
|
-
class: "vxe-select--panel-wrapper",
|
|
1843
|
-
style: popupWrapperStyle
|
|
1844
|
-
},
|
|
1845
|
-
[
|
|
1846
|
-
filterable ? h(
|
|
1847
|
-
"div",
|
|
1848
|
-
{
|
|
1849
|
-
class: "vxe-select--panel-search"
|
|
1850
|
-
},
|
|
1851
|
-
[
|
|
1852
|
-
h(VxeInputComponent, {
|
|
1853
|
-
ref: refInpSearch,
|
|
1854
|
-
class: "vxe-select-search--input",
|
|
1855
|
-
modelValue: reactData.searchValue,
|
|
1856
|
-
type: "text",
|
|
1857
|
-
clearable: true,
|
|
1858
|
-
disabled: false,
|
|
1859
|
-
readonly: false,
|
|
1860
|
-
placeholder: getI18n("vxe.select.search"),
|
|
1861
|
-
prefixIcon: getIcon().INPUT_SEARCH,
|
|
1862
|
-
"onUpdate:modelValue": modelSearchEvent,
|
|
1863
|
-
onFocus: focusSearchEvent,
|
|
1864
|
-
onChange: triggerSearchEvent,
|
|
1865
|
-
onSearch: triggerSearchEvent
|
|
1866
|
-
})
|
|
1867
|
-
]
|
|
1868
|
-
) : renderEmptyElement($xeSelect),
|
|
1869
|
-
showCheckedButton && multiple || showClearButton || headerSlot ? h(
|
|
1870
|
-
"div",
|
|
1871
|
-
{
|
|
1872
|
-
class: "vxe-select--panel-header"
|
|
1873
|
-
},
|
|
1874
|
-
headerSlot ? callSlot(headerSlot, {}) : [
|
|
1875
|
-
h(
|
|
1876
|
-
"div",
|
|
1877
|
-
{
|
|
1878
|
-
class: "vxe-select--header-button"
|
|
1879
|
-
},
|
|
1880
|
-
[
|
|
1881
|
-
h(
|
|
1882
|
-
"div",
|
|
1883
|
-
{
|
|
1884
|
-
class: "vxe-select--header-btns"
|
|
1885
|
-
},
|
|
1886
|
-
[
|
|
1887
|
-
showCheckedButton && multiple ? h(VxeButtonComponent, {
|
|
1888
|
-
content: getI18n("vxe.select.allChecked"),
|
|
1889
|
-
mode: "text",
|
|
1890
|
-
onClick: allCheckedPanelEvent
|
|
1891
|
-
}) : renderEmptyElement($xeSelect),
|
|
1892
|
-
showClearButton ? h(VxeButtonComponent, {
|
|
1893
|
-
content: getI18n("vxe.select.clear"),
|
|
1894
|
-
mode: "text",
|
|
1895
|
-
onClick: clearCheckedPanelEvent
|
|
1896
|
-
}) : renderEmptyElement($xeSelect)
|
|
1897
|
-
]
|
|
1898
|
-
)
|
|
1899
|
-
]
|
|
1900
|
-
)
|
|
1901
|
-
]
|
|
1902
|
-
) : renderEmptyElement($xeSelect),
|
|
1903
|
-
h(
|
|
1904
|
-
"div",
|
|
1905
|
-
{
|
|
1906
|
-
class: [
|
|
1907
|
-
"vxe-select--panel-body",
|
|
1908
|
-
isVScrollbar ? `ov-x--${scrollXVisible === false ? "hidden" : "visible"}` : "",
|
|
1909
|
-
isVScrollbar ? `ov-y--${scrollYVisible === false ? "hidden" : "visible"}` : "",
|
|
1910
|
-
isVScrollbar ? `sx-pos--${scrollbarXToTop ? "top" : "bottom"}` : "",
|
|
1911
|
-
isVScrollbar ? `sy-pos--${scrollbarYToLeft ? "left" : "right"}` : "",
|
|
1912
|
-
{
|
|
1913
|
-
"is--virtual-scrollbar": isVScrollbar,
|
|
1914
|
-
"ov-padding": isVScrollbar && scrollbarOpts.padding,
|
|
1915
|
-
"ov-x--auto-hide": isVScrollbar && scrollXAutoHide,
|
|
1916
|
-
"ov-y--auto-hide": isVScrollbar && scrollYAutoHide,
|
|
1917
|
-
"overflow-y": yThumbHeight,
|
|
1918
|
-
"overflow-x": xThumbWidth
|
|
1919
|
-
}
|
|
1815
|
+
) : renderEmptyElement($xeSelect),
|
|
1816
|
+
h(
|
|
1817
|
+
Teleport,
|
|
1818
|
+
{
|
|
1819
|
+
to: getPopupContainer(appendTo),
|
|
1820
|
+
disabled: btnTransfer ? !initialized : true
|
|
1821
|
+
},
|
|
1822
|
+
[
|
|
1823
|
+
h(
|
|
1824
|
+
"div",
|
|
1825
|
+
{
|
|
1826
|
+
ref: refOptionPanel,
|
|
1827
|
+
class: [
|
|
1828
|
+
"vxe-table--ignore-clear vxe-select--panel",
|
|
1829
|
+
ppClassName ? XEUtils.isFunction(ppClassName) ? ppClassName({ $select: $xeSelect }) : ppClassName : "",
|
|
1830
|
+
{
|
|
1831
|
+
[`size--${vSize}`]: vSize,
|
|
1832
|
+
"is--transfer": btnTransfer,
|
|
1833
|
+
"ani--leave": !loading && isAniVisible,
|
|
1834
|
+
"ani--enter": !loading && visiblePanel
|
|
1835
|
+
}
|
|
1836
|
+
],
|
|
1837
|
+
placement: reactData.panelPlacement,
|
|
1838
|
+
style: reactData.panelStyle
|
|
1839
|
+
},
|
|
1840
|
+
initialized && (visiblePanel || isAniVisible) ? [
|
|
1841
|
+
h(
|
|
1842
|
+
"div",
|
|
1843
|
+
{
|
|
1844
|
+
class: "vxe-select--panel-wrapper",
|
|
1845
|
+
style: popupWrapperStyle
|
|
1846
|
+
},
|
|
1847
|
+
[
|
|
1848
|
+
filterable ? h(
|
|
1849
|
+
"div",
|
|
1850
|
+
{
|
|
1851
|
+
class: "vxe-select--panel-search"
|
|
1852
|
+
},
|
|
1853
|
+
[
|
|
1854
|
+
h(VxeInputComponent, {
|
|
1855
|
+
ref: refInpSearch,
|
|
1856
|
+
class: "vxe-select-search--input",
|
|
1857
|
+
modelValue: reactData.searchValue,
|
|
1858
|
+
type: "text",
|
|
1859
|
+
clearable: true,
|
|
1860
|
+
disabled: false,
|
|
1861
|
+
readonly: false,
|
|
1862
|
+
placeholder: getI18n("vxe.select.search"),
|
|
1863
|
+
prefixIcon: getIcon().INPUT_SEARCH,
|
|
1864
|
+
"onUpdate:modelValue": modelSearchEvent,
|
|
1865
|
+
onFocus: focusSearchEvent,
|
|
1866
|
+
onChange: triggerSearchEvent,
|
|
1867
|
+
onSearch: triggerSearchEvent
|
|
1868
|
+
})
|
|
1920
1869
|
]
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1870
|
+
) : renderEmptyElement($xeSelect),
|
|
1871
|
+
showCheckedButton && multiple || showClearButton || headerSlot ? h(
|
|
1872
|
+
"div",
|
|
1873
|
+
{
|
|
1874
|
+
class: "vxe-select--panel-header"
|
|
1875
|
+
},
|
|
1876
|
+
headerSlot ? callSlot(headerSlot, {}) : [
|
|
1877
|
+
h(
|
|
1878
|
+
"div",
|
|
1879
|
+
{
|
|
1880
|
+
class: "vxe-select--header-button"
|
|
1881
|
+
},
|
|
1882
|
+
[
|
|
1883
|
+
h(
|
|
1884
|
+
"div",
|
|
1885
|
+
{
|
|
1886
|
+
class: "vxe-select--header-btns"
|
|
1887
|
+
},
|
|
1888
|
+
[
|
|
1889
|
+
showCheckedButton && multiple ? h(VxeButtonComponent, {
|
|
1890
|
+
content: getI18n("vxe.select.allChecked"),
|
|
1891
|
+
mode: "text",
|
|
1892
|
+
onClick: allCheckedPanelEvent
|
|
1893
|
+
}) : renderEmptyElement($xeSelect),
|
|
1894
|
+
showClearButton ? h(VxeButtonComponent, {
|
|
1895
|
+
content: getI18n("vxe.select.clear"),
|
|
1896
|
+
mode: "text",
|
|
1897
|
+
onClick: clearCheckedPanelEvent
|
|
1898
|
+
}) : renderEmptyElement($xeSelect)
|
|
1899
|
+
]
|
|
1900
|
+
)
|
|
1901
|
+
]
|
|
1902
|
+
)
|
|
1903
|
+
]
|
|
1904
|
+
) : renderEmptyElement($xeSelect),
|
|
1905
|
+
h(
|
|
1906
|
+
"div",
|
|
1907
|
+
{
|
|
1908
|
+
class: [
|
|
1909
|
+
"vxe-select--panel-body",
|
|
1910
|
+
isVScrollbar ? `ov-x--${scrollXVisible === false ? "hidden" : "visible"}` : "",
|
|
1911
|
+
isVScrollbar ? `ov-y--${scrollYVisible === false ? "hidden" : "visible"}` : "",
|
|
1912
|
+
isVScrollbar ? `sx-pos--${scrollbarXToTop ? "top" : "bottom"}` : "",
|
|
1913
|
+
isVScrollbar ? `sy-pos--${scrollbarYToLeft ? "left" : "right"}` : "",
|
|
1914
|
+
{
|
|
1915
|
+
"is--virtual-scrollbar": isVScrollbar,
|
|
1916
|
+
"ov-padding": isVScrollbar && scrollbarOpts.padding,
|
|
1917
|
+
"ov-x--auto-hide": isVScrollbar && scrollXAutoHide,
|
|
1918
|
+
"ov-y--auto-hide": isVScrollbar && scrollYAutoHide,
|
|
1919
|
+
"overflow-y": yThumbHeight,
|
|
1920
|
+
"overflow-x": xThumbWidth
|
|
1921
|
+
}
|
|
1922
|
+
]
|
|
1923
|
+
},
|
|
1924
|
+
[
|
|
1925
|
+
h(
|
|
1926
|
+
"div",
|
|
1927
|
+
{
|
|
1928
|
+
ref: refVirtualWrapper,
|
|
1929
|
+
class: "vxe-select-option--wrapper",
|
|
1930
|
+
onScroll: scrollEvent
|
|
1931
|
+
},
|
|
1932
|
+
[
|
|
1933
|
+
h("div", {
|
|
1934
|
+
ref: refVirtualSpaceElem,
|
|
1935
|
+
class: "vxe-select--y-space",
|
|
1943
1936
|
style: {
|
|
1944
|
-
|
|
1937
|
+
height: bodyHeight ? `${bodyHeight}px` : ""
|
|
1945
1938
|
}
|
|
1946
|
-
},
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
1939
|
+
}),
|
|
1940
|
+
h(
|
|
1941
|
+
"div",
|
|
1942
|
+
{
|
|
1943
|
+
ref: refVirtualBody,
|
|
1944
|
+
class: "vxe-select--body",
|
|
1945
|
+
style: {
|
|
1946
|
+
marginTop: `${topSpaceHeight}px`
|
|
1947
|
+
}
|
|
1948
|
+
},
|
|
1949
|
+
renderOpts()
|
|
1950
|
+
)
|
|
1951
|
+
]
|
|
1952
|
+
),
|
|
1953
|
+
/**
|
|
1954
|
+
* 滚动条
|
|
1955
|
+
*/
|
|
1956
|
+
isVScrollbar ? h(
|
|
1957
|
+
"div",
|
|
1958
|
+
{
|
|
1959
|
+
class: scrollbarWrapperClss
|
|
1960
|
+
},
|
|
1961
|
+
[
|
|
1962
|
+
scrollXVisible === false ? renderEmptyElement($xeSelect) : h(
|
|
1963
|
+
"div",
|
|
1964
|
+
{
|
|
1965
|
+
ref: refTrackXElem,
|
|
1966
|
+
class: "vxe-scrollbar--track-x",
|
|
1967
|
+
onClick: clickTrackXEvent
|
|
1968
|
+
},
|
|
1969
|
+
[
|
|
1970
|
+
h("div", {
|
|
1971
|
+
ref: refThumbXElem,
|
|
1972
|
+
class: "vxe-scrollbar--thumb-x",
|
|
1973
|
+
onPointerdown: pointerdownThumbXEvent,
|
|
1974
|
+
onPointermove: pointermoveThumbXEvent,
|
|
1975
|
+
onPointerup: cleatPointerThumbEvent,
|
|
1976
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
1977
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
1978
|
+
})
|
|
1979
|
+
]
|
|
1980
|
+
),
|
|
1981
|
+
scrollYVisible === false ? renderEmptyElement($xeSelect) : h(
|
|
1982
|
+
"div",
|
|
1983
|
+
{
|
|
1984
|
+
ref: refTrackYElem,
|
|
1985
|
+
class: "vxe-scrollbar--track-y",
|
|
1986
|
+
onClick: clickTrackYEvent
|
|
1987
|
+
},
|
|
1988
|
+
[
|
|
1989
|
+
h("div", {
|
|
1990
|
+
ref: refThumbYElem,
|
|
1991
|
+
class: "vxe-scrollbar--thumb-y",
|
|
1992
|
+
onPointerdown: pointerdownThumbYEvent,
|
|
1993
|
+
onPointermove: pointermoveThumbYEvent,
|
|
1994
|
+
onPointerup: cleatPointerThumbEvent,
|
|
1995
|
+
onPointercancel: cleatPointerThumbEvent,
|
|
1996
|
+
onLostpointercapture: cleatPointerThumbEvent
|
|
1997
|
+
})
|
|
1998
|
+
]
|
|
1999
|
+
)
|
|
2000
|
+
]
|
|
2001
|
+
) : renderEmptyElement($xeSelect)
|
|
2002
|
+
]
|
|
2003
|
+
),
|
|
2004
|
+
footerSlot || showTotalButton || showCloseButton && multiple ? h(
|
|
2005
|
+
"div",
|
|
2006
|
+
{
|
|
2007
|
+
class: "vxe-select--panel-footer"
|
|
2008
|
+
},
|
|
2009
|
+
footerSlot ? callSlot(footerSlot, {}) : [
|
|
2010
|
+
h(
|
|
2011
|
+
"div",
|
|
2012
|
+
{
|
|
2013
|
+
class: "vxe-select--footer-button"
|
|
2014
|
+
},
|
|
2015
|
+
[
|
|
2016
|
+
showTotalButton ? h(
|
|
2017
|
+
"div",
|
|
2018
|
+
{
|
|
2019
|
+
class: "vxe-select--total-btns"
|
|
2020
|
+
},
|
|
2021
|
+
getI18n("vxe.select.total", [selectVals.length, optList.length])
|
|
2022
|
+
) : renderEmptyElement($xeSelect),
|
|
2023
|
+
showCloseButton && multiple ? h(
|
|
2024
|
+
"div",
|
|
2025
|
+
{
|
|
2026
|
+
class: "vxe-select--oper-btns"
|
|
2027
|
+
},
|
|
2028
|
+
[
|
|
2029
|
+
h(VxeButtonComponent, {
|
|
2030
|
+
content: getI18n("vxe.select.close"),
|
|
2031
|
+
mode: "text",
|
|
2032
|
+
onClick: closePanelEvent
|
|
2033
|
+
})
|
|
2034
|
+
]
|
|
2035
|
+
) : renderEmptyElement($xeSelect)
|
|
2036
|
+
]
|
|
2037
|
+
)
|
|
2038
|
+
]
|
|
2039
|
+
) : renderEmptyElement($xeSelect)
|
|
2040
|
+
]
|
|
2041
|
+
)
|
|
2042
|
+
] : []
|
|
2043
|
+
)
|
|
2044
|
+
]
|
|
2045
|
+
)
|
|
2046
|
+
]
|
|
2047
|
+
);
|
|
2048
|
+
};
|
|
2049
|
+
watch(
|
|
2050
|
+
() => reactData.staticOptions,
|
|
2051
|
+
(val) => {
|
|
2052
|
+
loadData(val);
|
|
2053
|
+
}
|
|
2054
|
+
);
|
|
2055
|
+
const refOptsFlag = ref(0);
|
|
2056
|
+
watch(
|
|
2057
|
+
() => props.options,
|
|
2058
|
+
() => {
|
|
2059
|
+
refOptsFlag.value++;
|
|
2060
|
+
}
|
|
2061
|
+
);
|
|
2062
|
+
watch(
|
|
2063
|
+
() => props.options ? props.options.length : -1,
|
|
2064
|
+
() => {
|
|
2065
|
+
refOptsFlag.value++;
|
|
2066
|
+
}
|
|
2067
|
+
);
|
|
2068
|
+
watch(refOptsFlag, () => {
|
|
2069
|
+
loadData(props.options || []);
|
|
2070
|
+
});
|
|
2071
|
+
const refOptGrpsFlag = ref(0);
|
|
2072
|
+
watch(
|
|
2073
|
+
() => props.optionGroups,
|
|
2074
|
+
() => {
|
|
2075
|
+
refOptGrpsFlag.value++;
|
|
2076
|
+
}
|
|
2077
|
+
);
|
|
2078
|
+
watch(
|
|
2079
|
+
() => props.optionGroups ? props.optionGroups.length : -1,
|
|
2080
|
+
() => {
|
|
2081
|
+
refOptGrpsFlag.value++;
|
|
2082
|
+
}
|
|
2045
2083
|
);
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
refOptsFlag.value++;
|
|
2053
|
-
});
|
|
2054
|
-
watch(() => props.options ? props.options.length : -1, () => {
|
|
2055
|
-
refOptsFlag.value++;
|
|
2056
|
-
});
|
|
2057
|
-
watch(refOptsFlag, () => {
|
|
2058
|
-
loadData(props.options || []);
|
|
2059
|
-
});
|
|
2060
|
-
const refOptGrpsFlag = ref(0);
|
|
2061
|
-
watch(() => props.optionGroups, () => {
|
|
2062
|
-
refOptGrpsFlag.value++;
|
|
2063
|
-
});
|
|
2064
|
-
watch(() => props.optionGroups ? props.optionGroups.length : -1, () => {
|
|
2065
|
-
refOptGrpsFlag.value++;
|
|
2066
|
-
});
|
|
2067
|
-
watch(refOptGrpsFlag, () => {
|
|
2068
|
-
loadData(props.optionGroups || []);
|
|
2069
|
-
});
|
|
2070
|
-
const reScrollFlag = ref(0);
|
|
2071
|
-
const reLayoutFlag = ref(0);
|
|
2072
|
-
watch(computeIsVScrollbar, () => {
|
|
2073
|
-
nextTick(() => {
|
|
2074
|
-
bindScrollbarResize();
|
|
2084
|
+
watch(refOptGrpsFlag, () => {
|
|
2085
|
+
loadData(props.optionGroups || []);
|
|
2086
|
+
});
|
|
2087
|
+
const reScrollFlag = ref(0);
|
|
2088
|
+
const reLayoutFlag = ref(0);
|
|
2089
|
+
watch(computeIsVScrollbar, () => {
|
|
2075
2090
|
nextTick(() => {
|
|
2076
|
-
|
|
2091
|
+
bindScrollbarResize();
|
|
2092
|
+
nextTick(() => {
|
|
2093
|
+
reLayoutFlag.value++;
|
|
2094
|
+
});
|
|
2077
2095
|
});
|
|
2078
2096
|
});
|
|
2079
|
-
|
|
2080
|
-
watch(computeScrollYWidth, () => {
|
|
2081
|
-
reLayoutFlag.value++;
|
|
2082
|
-
});
|
|
2083
|
-
watch(computeScrollXHeight, () => {
|
|
2084
|
-
reLayoutFlag.value++;
|
|
2085
|
-
});
|
|
2086
|
-
watch(computeScrollXVisible, () => {
|
|
2087
|
-
nextTick(() => {
|
|
2097
|
+
watch(computeScrollYWidth, () => {
|
|
2088
2098
|
reLayoutFlag.value++;
|
|
2089
2099
|
});
|
|
2090
|
-
|
|
2091
|
-
watch(computeScrollYVisible, () => {
|
|
2092
|
-
nextTick(() => {
|
|
2100
|
+
watch(computeScrollXHeight, () => {
|
|
2093
2101
|
reLayoutFlag.value++;
|
|
2094
2102
|
});
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2103
|
+
watch(computeScrollXVisible, () => {
|
|
2104
|
+
nextTick(() => {
|
|
2105
|
+
reLayoutFlag.value++;
|
|
2106
|
+
});
|
|
2107
|
+
});
|
|
2108
|
+
watch(computeScrollYVisible, () => {
|
|
2109
|
+
nextTick(() => {
|
|
2110
|
+
reLayoutFlag.value++;
|
|
2111
|
+
});
|
|
2112
|
+
});
|
|
2113
|
+
watch(reLayoutFlag, () => {
|
|
2114
|
+
recalculate().then(() => {
|
|
2115
|
+
recalculate();
|
|
2116
|
+
});
|
|
2117
|
+
});
|
|
2118
|
+
watch(reScrollFlag, () => {
|
|
2119
|
+
updateScrollbar().then(() => {
|
|
2120
|
+
updateScrollbar();
|
|
2121
|
+
});
|
|
2099
2122
|
});
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2123
|
+
onMounted(() => {
|
|
2124
|
+
nextTick(() => {
|
|
2125
|
+
const { options, optionGroups } = props;
|
|
2126
|
+
if (optionGroups) {
|
|
2127
|
+
loadData(optionGroups);
|
|
2128
|
+
} else if (options) {
|
|
2129
|
+
loadData(options);
|
|
2130
|
+
}
|
|
2131
|
+
});
|
|
2132
|
+
reLayoutFlag.value++;
|
|
2133
|
+
globalEvents.on($xeSelect, "mousedown", handleGlobalMousedownEvent);
|
|
2134
|
+
globalEvents.on($xeSelect, "keydown", handleGlobalKeydownEvent);
|
|
2135
|
+
globalEvents.on($xeSelect, "blur", handleGlobalBlurEvent);
|
|
2136
|
+
globalEvents.on($xeSelect, "resize", handleGlobalResizeEvent);
|
|
2137
|
+
globalEvents.on($xeSelect, "scroll", handleGlobalScrollEvent);
|
|
2104
2138
|
});
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
if (optionGroups) {
|
|
2110
|
-
loadData(optionGroups);
|
|
2111
|
-
} else if (options) {
|
|
2112
|
-
loadData(options);
|
|
2139
|
+
onBeforeUnmount(() => {
|
|
2140
|
+
const { scrollObserver } = internalData;
|
|
2141
|
+
if (scrollObserver) {
|
|
2142
|
+
scrollObserver.disconnect();
|
|
2113
2143
|
}
|
|
2114
2144
|
});
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
}
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
globalEvents.off($xeSelect, "scroll");
|
|
2134
|
-
XEUtils.assign(reactData, createReactData());
|
|
2135
|
-
XEUtils.assign(internalData, createInternalData());
|
|
2136
|
-
});
|
|
2137
|
-
provide("$xeSelect", $xeSelect);
|
|
2138
|
-
$xeSelect.renderVN = renderVN;
|
|
2139
|
-
return $xeSelect;
|
|
2140
|
-
},
|
|
2141
|
-
render() {
|
|
2142
|
-
return this.renderVN();
|
|
2143
|
-
}
|
|
2144
|
-
});
|
|
2145
|
+
onUnmounted(() => {
|
|
2146
|
+
globalEvents.off($xeSelect, "mousedown");
|
|
2147
|
+
globalEvents.off($xeSelect, "keydown");
|
|
2148
|
+
globalEvents.off($xeSelect, "blur");
|
|
2149
|
+
globalEvents.off($xeSelect, "resize");
|
|
2150
|
+
globalEvents.off($xeSelect, "scroll");
|
|
2151
|
+
XEUtils.assign(reactData, createReactData());
|
|
2152
|
+
XEUtils.assign(internalData, createInternalData());
|
|
2153
|
+
});
|
|
2154
|
+
provide("$xeSelect", $xeSelect);
|
|
2155
|
+
$xeSelect.renderVN = renderVN;
|
|
2156
|
+
return $xeSelect;
|
|
2157
|
+
},
|
|
2158
|
+
render() {
|
|
2159
|
+
return this.renderVN();
|
|
2160
|
+
}
|
|
2161
|
+
})
|
|
2162
|
+
);
|
|
2145
2163
|
export {
|
|
2146
2164
|
select_default as default
|
|
2147
2165
|
};
|