element-plus版本过老,自写选项弹框增删功能


title: element-plus版本过老,自写选项弹框增删功能

date: 2024-10-31 10:53:18
tags: element-plus

1.情景

发现代码怎么都用不了el-select的#footer插槽从而实现不了相关的操作,发现el-select自带的管理相关数据的属性popper-class用不了。

2.原因与方案

1.版本不是很新,用不了相关的插槽,更新element-plus的同时记得还要更新vite,要不然可能会报错。还有第二种方法,自写相关的方法。

2.popper-class直接用不了相关的css属性,具体原因不明,但是有具体解决方法,就是去掉scope。

3.自写代码

vue 复制代码
<el-dialog
      v-model="showContestDialog"
      @closed="showContestDialog = false"
      style="width: 370px; height: 535px"
      title="比赛与奖项"
      :align-center="true"
    >
      <div style="margin-bottom: 30px" class="select-container">
        <span>比赛:</span>
        <el-select
          v-model="selectContent"
          placeholder="比赛信息"
          style="width: 320px; margin-right: 20px; max-height: 1000px"
          filterable
          class="custom-select"
          popper-class="custom-popper"
        >
          <div class="select-options-container">
            <el-option
              v-for="item in contestNames"
              :key="item"
              :label="item"
              :value="item"
            >
              <div style="display: flex; justify-content: space-between">
                <span>{{ item }}</span>
                <el-button
                  size="small"
                  type="danger"
                  plain
                  @click.stop="confirmDelete(item)"
                  >X</el-button
                >
              </div>
            </el-option>
            <el-option disabled label="暂无更多数据" />
          </div>
          <div class="select-footer">
            <el-button
              v-if="!isAddingContent"
              size="small"
              text
              bg
              @click="onAddContent"
            >
              增加比赛
            </el-button>
            <div v-else>
              <el-input
                v-model="addContentName"
                style="width: 100%; margin-bottom: 10px"
                placeholder="请输入新比赛名称"
                size="small"
              />
              <el-button
                type="primary"
                size="small"
                @click="onConfirmAddContent"
              >
                确认
              </el-button>
              <el-button size="small" @click="clearAddContent">取消</el-button>
            </div>
          </div>
        </el-select>
      </div>

      <div class="select-container"></div>
      <span>奖项:</span>
      <el-select
        v-model="selectAward"
        placeholder="比赛信息"
        style="width: 320px"
        filterable
        popper-class="custom-popper"
        class="custom-select"
        :disabled="!selectContent"
      >
        <div class="select-options-container">
          <el-option
            v-for="item in awardsNames"
            :key="item"
            :label="nameScore(item)"
            :value="item"
          >
            <div style="display: flex; justify-content: space-between">
              <span>{{ item }}</span>
              <el-button
                size="small"
                type="danger"
                plain
                @click.stop="confirmDeleteAward(item)"
                >X</el-button
              >
            </div>
          </el-option>
          <el-option disabled label="暂无更多数据" />
        </div>
        <div class="select-footer">
          <el-button
            v-if="!isAddingAward"
            text
            bg
            size="small"
            @click="onAddAward"
          >
            增加奖项
          </el-button>
          <template v-else>
            <span>奖项:</span>
            <el-input
              v-model="addAwardName"
              style="width: 35%; margin-bottom: 5px; margin-right: 10px"
              placeholder="请输入奖项字符"
              size="small"
            />
            <span>分数:</span>
            <el-input
              v-model="addAwardNameScore"
              style="width: 35%; margin-bottom: 5px"
              placeholder="请输入积分数字"
              size="small"
            />
            <el-button type="primary" size="small" @click="onConfirmAddAward">
              确定
            </el-button>
            <el-button size="small" @click="clearAddAward">取消</el-button>
          </template>
        </div>
      </el-select>
  
    </el-dialog>

样式部分

css 复制代码
<style lang="scss">

.select-container {
  position: relative;
}

.select-options-container {
  min-height: 20px;
  // max-height: 300px; /* 设置最大高度,超出则显示滚动条 */
  // overflow-y: auto; /* 添加垂直滚动条 */
  padding-bottom: 60px;
  // scrollbar-width: thin;
  // scrollbar-color: #f5f5f5 #fff; /* 滚动条轨道和滑块的颜色 */
}

/* 这个内容给出来是用来展示全部的选项的,要是没有相关需求可以注释掉 */
.custom-popper {
  .el-scrollbar__wrap {
    max-height: initial;
    overflow: visible; //超出部分不滚动,直接显示
  }
  .el-scrollbar__thumb {
    display: none; //去掉右侧滚动条
  }
}

.custom-popper .el-scrollbar__wrap {
  overflow-y: hidden; /* 允许垂直滚动 */
  overflow-x: hidden; /* 隐藏水平滚动条 */
}

.select-footer {
  /* 自定义底部内容样式 */
  padding: 5px;
  border-top: 1px solid #e0e1e3;
  background-color: #fff;
  position: absolute;
  bottom: 0;
  width: 100%;
  z-index: 10; /* 确保自定义底部内容在弹出层之上 */
}
</style>
相关推荐
墨柳烟16 分钟前
ABAQUS高亮显示网格节点方法:Python为每个节点建立集合
开发语言·前端·python·abaqus
琴~~37 分钟前
前端根据后端返回的文本流逐个展示文本内容
前端·javascript·vue
zhaocarbon1 小时前
el-scrollbar 动态更新内容 鼠标滚轮无效
前端·javascript·vue.js
一纸忘忧1 小时前
Nuxt 3.14 发布!全新功能与性能提升
前端·javascript·vue.js
少年姜太公1 小时前
【ES6】让你彻底搞懂const ,let和var的区别
javascript
~甲壳虫2 小时前
react中得类组件和函数组件有啥区别,怎么理解这两个函数
前端·react.js·前端框架
.net开发2 小时前
WPF使用Prism框架首页界面
前端·c#·.net·wpf
名字越长技术越强2 小时前
vue--vueCLI
前端·javascript·vue.js
是个热心市民2 小时前
构建一个导航栏web
前端·javascript·python·django·html
J不A秃V头A2 小时前
报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
前端·npm·node.js