基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

html 复制代码
<template>
  <div :class="$options.name">
    <el-table :data="tableData">
      <el-table-column type="index" label="序号" width="60" />

      <!-- 主要列 BEGIN---------------------------------------- -->

      <el-table-column label="姓名">
        <template slot-scope="scope">
          <span>{{ scope.row.name }}</span>
        </template>
      </el-table-column>

      <!-- 主要列 END---------------------------------------- -->

      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="primary"
            @click.stop="edit(scope.row)"
            @dblclick.native.stop
            >修改</el-button
          >
          <el-button
            size="mini"
            type="danger"
            @click.stop="del(scope.row)"
            @dblclick.native.stop
            >删除</el-button
          >
          <!-- 更多操作 -->
          <el-dropdown
            style="margin-left: 10px"
            :show-timeout="0"
            :placement="`bottom-end`"
            @command="(c) => dropdownItems.find((v) => v.label == c).clickEvent(c, scope)"
          >
            <span style="cursor: default">更多<i class="el-icon-arrow-down" /></span>
            <el-dropdown-menu
              slot="dropdown"
              style="
                transition: none;
                overflow-y: auto;
                max-height: 400px;
                margin-top: 5px;
              "
            >
              <el-dropdown-item
                v-for="(d, i) in dropdownItems"
                :command="d.label"
                :key="i"
                :divided="d.divided"
                v-if="typeof d.hide === 'function' ? !d.hide(d, scope) : !d.hide"
                :disabled="
                  typeof d.disabled === 'function' ? d.disabled(d, scope) : d.disabled
                "
                :type="d.type"
              >
                <i :class="d.icon" v-if="d.icon" />{{ d.label }}
              </el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  name: "moreDropdown",
  data() {
    return {
      dropdownItems: [
        {
          hide: true,
          label: "编辑",
          clickEvent: (c, scope) => {
            // this.edit(scope.row);
          },
        },
        {
          disabled: true,
          label: "重命名",
          icon: `el-icon-edit`,
          clickEvent: (c, scope) => {
            // this.edit_rename(scope.row);
          },
        },
        {
          label: "分享",
          icon: `el-icon-share`,
          clickEvent: (c, scope) => {
            console.log(c, scope.row);
            // this.share(scope.row);
          },
        },
        {
          label: "下载",
          type: "success",
          icon: `el-icon-download`,
          clickEvent: (c, scope) => {
            console.log(c, scope.row);
            // this.download(scope.row);
          },
        },
        {
          divided: true,
          label: "删除",
          icon: `el-icon-delete`,
          type: "danger",
          clickEvent: (c, scope) => {
            // this.del([scope.row]);
          },
        },
      ],

      tableData: [
        { name: "姓名1" },
        { name: "姓名2" },
        { name: "姓名3" },
        { name: "姓名4" },
        { name: "姓名5" },
      ],
    };
  },
};
</script>
<style lang="scss" scoped>
.moreDropDown {
  // 下拉选择菜单----------------------------------------
  .el-dropdown-menu__item {
    &[type="danger"] {
      color: #f56c6c;

      &:hover {
        color: #f56c6c;
        background-color: #f56c6c22;
      }
    }

    &[type="success"] {
      color: #67c23a;

      &:hover {
        color: #67c23a;
        background-color: #67c23a22;
      }
    }

    &[type="warning"] {
      color: #e6a23c;

      &:hover {
        color: #e6a23c;
        background-color: #e6a23c22;
      }
    }

    &[type="info"] {
      color: #909399;

      &:hover {
        color: #909399;
        background-color: #90939922;
      }
    }
  }
}
</style>

【sgs】自定义组件:简洁版搜索栏筛选框组件(点击筛选条件按钮才出现复杂的、可自定义的筛选组合条件;当页面宽度不足以显示所有操作按钮的时候,自动折叠为"更多操作⌵"上下文关联按钮)。_sorttype' => 'all-CSDN博客文章浏览阅读103次。【代码】【sgs】自定义组件:简洁版搜索栏筛选框组件(点击筛选条件按钮才出现复杂的、可自定义的筛选组合条件;当页面宽度不足以显示所有操作按钮的时候,自动折叠为"更多操作..."上下文关联按钮)。_sorttype' => 'allhttps://blog.csdn.net/qq_37860634/article/details/144657057

相关推荐
知识分享小能手2 小时前
uni-app 入门学习教程,从入门到精通,uni-app基础扩展 —— 详细知识点与案例(3)
vue.js·学习·ui·微信小程序·小程序·uni-app·编程
demi_meng3 小时前
reactNative 遇到的问题记录
javascript·react native·react.js
MC丶科3 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
千码君20163 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
90后的晨仔6 小时前
Pinia 状态管理原理与实战全解析
前端·vue.js
EndingCoder6 小时前
WebSocket实时通信:Socket.io
服务器·javascript·网络·websocket·网络协议·node.js
90后的晨仔6 小时前
Vue3 状态管理完全指南:从响应式 API 到 Pinia
前端·vue.js
90后的晨仔6 小时前
Vue 内置组件全解析:提升开发效率的五大神器
前端·vue.js
我胡为喜呀6 小时前
Vue3 中的 watch 和 watchEffect:如何优雅地监听数据变化
前端·javascript·vue.js
liangshanbo12158 小时前
React 19 vs React 18全面对比
前端·javascript·react.js