diff --git a/src/select/select.tsx b/src/select/select.tsx index 714feeaa0..5ef276193 100644 --- a/src/select/select.tsx +++ b/src/select/select.tsx @@ -60,6 +60,7 @@ export default mixins(getConfigReceiverMixins('select')).exte hoverIndex: -1, popupOpenTime: 250, // popup打开弹出层的延迟时间 checkScroll: true, // 弹出层执行加宽事件(仅执行一次,且在有滚动条时执行) + isInited: false, }; }, components: { @@ -681,6 +682,37 @@ export default mixins(getConfigReceiverMixins('select')).exte }, }, + updated() { + if (this.realOptions.length || this.isInited) return; + + // Parse options from slots before popup, execute only once + const children = renderTNodeJSX(this, 'default'); + if (children) { + this.realOptions = parseOptions(children); + this.isInited = true; + } + + function parseOptions(vnodes: VNode[]): TdOptionProps[] { + if (!vnodes) return []; + return vnodes.reduce((options, vnode) => { + if (vnode.componentOptions.tag === 't-option') { + const propsData = vnode.componentOptions.propsData as any; + return options.concat({ + label: propsData.label, + value: propsData.value, + disabled: propsData.disabled, + content: propsData.content, + default: propsData.default, + }); + } + if (vnode.componentOptions.tag === 't-option-group') { + return options.concat(parseOptions(vnode.componentOptions.children)); + } + return options; + }, []); + } + }, + render(): VNode { const { classes, diff --git a/src/time-picker/panel/index.tsx b/src/time-picker/panel/index.tsx index a56bc1b3c..2deedfb4f 100644 --- a/src/time-picker/panel/index.tsx +++ b/src/time-picker/panel/index.tsx @@ -72,19 +72,20 @@ export default mixins(getConfigReceiverMixins { - panelCol0 && panelCol0.updateTimeScrollPos(); - panelCol1 && panelCol1.updateTimeScrollPos(); + (this.$refs.panelCol_0 as TimePickerPanelColInstance)?.updateTimeScrollPos(); + (this.$refs.panelCol_1 as TimePickerPanelColInstance)?.updateTimeScrollPos(); }); }, scrollToTime(colIndex: number, col: EPickerCols, time: number | string, behavior: ScrollBehavior) {