select.png

???这是啥???怎么好像大概可能跟我想的不一样啊。揉了揉眼睛再三确认了一下,发现事情果然没有自己想象的那么简单,算了,好男人怎么能辜负小姐姐的一片苦心。埋头就是干呗。

  • 首先想到的就是去看看element官方有没有提供相应的插槽,乘兴而去然后败兴而归,果然element没有让我失望,没有提供。
  • 想着获取当前下拉框的dom节点,在底部新增一个节点,在揪掉了我为数不多的几根头发后觉得此法可行,说干就干,行不行试过才知道。
  •       const el = document.createElement('div');
          el.className = 'bkp_add_fixed_bottom_select';
          el.style=`
                font-size: 14px;
                font-weight: 500;
                height: 42px;
                display: flex;
                align-items: center;
                justify-content: center;
                cursor: pointer;
                padding-top:4px;
                border-top:1px solid rgb(240 242 245)
          el.innerHTML = `
                <span style="margin-right:8px">
                        <svg class="icon" aria-hidden="true">
                              <use xlink:href="#icon-plus"></use>
                </span>
                <span>新增</span>
    

    3.在下拉框展开时添加新增的dom节点

    const VisibleChange=(visible)=>{
            if(visible){
                    //#region 添加底部操作按钮
                    let bkpRef=refSelect.value;
                    let popper = bkpRef.popperPaneRef;
                    if (!Array.from(popper.children).some(v => v.className === 'bkp_add_fixed_bottom_select')) {
                        ...步骤2相关代码
                        popper.appendChild(el);
                        el.onclick = () => {
                            // 底部按钮的点击事件 点击后想触发的逻辑也可以直接写在这
                            onClickAdd()
                            // 以下代码实现点击后弹层隐藏 不需要可以删掉
                            if (tbRef.toggleDropDownVisible) {
                                tbRef.toggleDropDownVisible(false);
                            else {
                                tbRef.visible = false;
                    //#endregion
    

    结尾(附上完整代码)

    <template>
        <el-select 
            ref="refSelect"
            placeholder="请选择..."
            @visible-change="VisibleChange"
            :popper-append-to-body="true"
          <el-option
            v-for="item in state.options"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          </el-option>
        </el-select>
    </template>
    <script setup>
        import { reactive, ref } from "vue-demi";
        const refSelect=ref(null);
        const state=reactive({
            options:[
                value: 'Option1',
                label: 'Option1',
        //在下拉框展开时添加底部固定项(注意该方法可能随版本更新而不适用)
        const VisibleChange=(visible)=>{
            if(visible){
                    //#region 添加底部操作按钮
                    let bkpRef=refSelect.value;
                    let popper = bkpRef.popperPaneRef;
                    if (!Array.from(popper.children).some(v => v.className === 'bkp_add_fixed_bottom_select')) {
                        const el = document.createElement('div');
                        el.className = 'bkp_add_fixed_bottom_select';
                        el.style=`
                              font-size: 14px;
                              font-weight: 500;
                              height: 42px;
                              display: flex;
                              align-items: center;
                              justify-content: center;
                              cursor: pointer;
                              padding-top:4px;
                              border-top:1px solid rgb(240 242 245)
                        el.innerHTML = `
                              <span style="margin-right:8px">
                                      <svg class="icon" aria-hidden="true">
                                            <use xlink:href="#icon-plus"></use>
                               </span>
                              <span>新增</span>
                        popper.appendChild(el);
                        el.onclick = () => {
                            // 底部按钮的点击事件 点击后想触发的逻辑也可以直接写在这
                            // onClickAdd();
                            // 以下代码实现点击后弹层隐藏 不需要可以删掉
                            if (bkpRef.toggleDropDownVisible) {
                                bkpRef.toggleDropDownVisible(false);
                            else {
                                bkpRef.visible = false;
                    //#endregion