• vue element-ui-tree样式总结


      项目要实现一个右键点击tree节点弹出菜单的需求。

    右键菜单具体实现如下:

    <!-- 自定义右键菜单 -->
            <div v-show="menuVisible">
              <ul id="menu" v-if="this.popoverCurNodeObj.is_classify">
                <li class="menu-item" @click="addSubClassify('addSub')"><i class="icon el-icon-circle-plus-outline"></i> {{popoverText.add}}</li>
                <li class="menu-item" @click="editClassify('editSub')"><i class="icon el-icon-edit"></i> {{popoverText.edit}}</li>
                <li class="menu-item" @click="deleteClassify('deleteClassify')"><i class="icon el-icon-remove-outline"></i> {{popoverText.delete}}</li>
                <li class="menu-item" @click="addTable"><i class="icon el-icon-document"></i> {{popoverText.addTable}}</li>
              </ul>
              <ul id="menu" v-if="!this.popoverCurNodeObj.is_classify">
                <li class="menu-item" @click="editTable('editTable')"><i class="icon el-icon-circle-plus-outline"></i> {{popoverText.editTable}}</li>
                <li class="menu-item" @click="deleteTable('deleteTable')"><i class="icon el-icon-edit"></i> {{popoverText.deleteTable}}</li>
              </ul>
            </div>
     #menu {
         auto;
        height: auto;
        background: #fff;
        position: absolute;
        z-index: 100;
        list-style: none;
        padding: 5px;
        margin: 0;
        font-size: 14px;
        background: #fff;
        box-shadow: 3px 3px 10px rgb(168, 168, 168);
        cursor: pointer;
        .menu-item {
          display: block;
          padding: 5px;
          color: #555;
        }
        .icon {
          color: rgb(64, 158, 255);
        }
      }
    mounted () {
        this.$nextTick(() => {
          document.querySelector('body').addEventListener('click', this.handleBodyClick);
        });
      },
    handleBodyClick () {
          this.menuVisible = false;
    },

     tree的hover与选中

    .el-tree-node__content {
          &:hover {
            background: #89c2f7;
          }
        }
        .el-tree-node:focus>.el-tree-node__content{
          background-color: #5daaf0;
        }
          this.menuVisible = true;
          let menu = document.querySelector('#menu');
          /* 菜单定位基于鼠标点击位置 */
          menu.style.left = event.clientX - 220 + 'px';
          menu.style.top = event.clientY - 150 + 'px';
    /* 鼠标跟随:注意当内容超出一屏要加上scrollTop的距离 */

    elementUI - tree横向滚动问题

    .tree{
    overflow: auto;
    width:80px;
    height: 500px;
    }
    .el-tree {
    min-width: 100%;
    display:inline-block !important;
    }

    1.从element里面找到了自定义的。(详见UI中tree自定义节点内容)。

    2.直接上代码。

    renderContent (h, { node, data, store }) {
          return h('span', {
            style: {
              color: '#606266'
            },
            on: {
              // 'contextmenu': () => {
              //   Vue.set(data, 'is_show', true);
              // },
              'mouseenter': () => {
                // Vue.set(data, 'is_show', true);
              },
              'mouseleave': () => {
                // Vue.set(data, 'is_show', false);
              }
            }
          }, [
            h('span', {
            }, node.label),
            h('span', {
              style: {
                display: data.is_show ? '' : 'none'
              }
            }, [
              h('el-button', {
                props: {
                  type: 'text',
                  size: 'small'
                },
                style: {
                  marginLeft: '15px'
                },
                on: {
                  click: () => {
                    this.addSubClassify('addSub');
                    Vue.set(data, 'is_show', false);
                  }
                }
              }, '新增子分类'),
              h('el-button', {
                props: {
                  type: 'text',
                  size: 'small'
                },
                style: {
    
                },
                on: {
                  click: () => {
                    this.editClassify('editSub');
                    Vue.set(data, 'is_show', false);
                  }
                }
              }, '编辑分类'),
              h('el-button', {
                props: {
                  type: 'text',
                  size: 'small'
                },
                style: {
    
                },
                on: {
                  click: () => {
                    this.deleteClassify('deleteClassify');
                    Vue.set(data, 'is_show', false);
                  }
                }
              }, '删除分类'),
              h('el-button', {
                props: {
                  type: 'text',
                  size: 'small'
                },
                style: {
    
                },
                on: {
                  click: () => {
                    this.addTable();
                    Vue.set(data, 'is_show', false);
                  }
                }
              }, '新增表')
            ])
          ]);
        },

    3.摘自网上相关参考链接。

    1)https://blog.csdn.net/Bonjourjw/article/details/80805463

    2)https://blog.csdn.net/bonjourjw/article/details/81108951

    3)https://blog.csdn.net/wxfdpp/article/details/83624460

  • 相关阅读:
    JavaScript 中正则匹配时结果不一致的问题
    /dev/null
    Xcode 中通过 target 运行多个 c 程序
    Xcode 调试时打印变量值
    Recoil 请求的刷新之使用随机参数
    npm ci 与 install 的区别
    项目中私有 npm 源的设置
    Crontab 的使用
    Nest 在日志中打印对象
    配置 ESLint 自动格式化自闭合标签(Self closing tag)
  • 原文地址:https://www.cnblogs.com/jiaqi1719/p/10069277.html
Copyright © 2020-2023  润新知