vue 自定义el-tree

先上效果图

<el-tree
    class="camera-tree"
    :props="props"
    show-checkbox
    :data="cameraTree"
    @check="handleCheckChange"
    ref="tree"
  >
    <span
        class="custom-tree-node"
        slot-scope="{ node, data }"
        style="width: 100%;display: flex;align-items: center;justify-content: space-between;"
      >
       <label>
          <el-tooltip class="item" effect="dark" :content="node.label" placement="top">
             <div class="words">{{ node.label }}</div>
          </el-tooltip>
          <span
              v-if="node.childNodes.length===0"
              :class="{ 'statusName': node.data.status === 1 }"
            >
              {{ node.data.status === 1 ? '在线' : '离线' }}
          </span>
        </label>
        <span
            v-if="node.childNodes.length===0"
            class="history"
            @click="jumpHistory(node.data)"
          >查看历史录像
        </span>
    </span>
</el-tree>

el-tree可以通过两种方法进行树节点内容的自定义:render-content和 scoped slot。但我个人还是比较喜欢使用scoped slot,写起来习惯放到template里面了,写法也舒服

export default {
    data() {
        return {
            props: {
                label: 'name',
                isLeaf: 'leaf'
            },
        }
    },
    methods: {
        // 请求设备列表
        async initTree() {
            const { recode, data } = await getAreaList()
            if (recode === 200) {
                this.cameraTree = data.map((item) => ({
                    id: item.id,
                    children: item.cameras,
                    name: item.groupName || item.deviceName
                }))
                // 遍历子节点 及格式
                for (let i = 0; i < this.cameraTree.length; i++) {
                    this.cameraTree[i].children = this.cameraTree[i].children.map((item) => ({
                        name: item.deviceName,
                        id: item.deviceCode,
                        status: item.status
                    }))
                }
            }
        },
        // el-tree 选择设备
        handleCheckChange(data) {
            console.log('data', data)
            if (this.checkedArr.length === 4) {
                this.$message.error('最多只能勾选4个!')
            } else if (data) {
                // 改变时 检测是否存在,存在就删除,不存在就添加
                this.playingList = this.playingList.map((item) => {
                    if (item.id === data.id) {
                          return this.empty()
                    } else {
                        return item
                    }
                })
                this.checkedArr = this.$refs.tree.getCheckedNodes(true, false)
                if (this.checkedArr.length !== 0) {
                    this.loadingVideo = true
                    this.getUrl()
                 }
                 // console.log('checkedArr', this.checkedArr)
                // console.log('playingList', this.playingList)
            }
        }
    }
}

1人点赞

vue



作者:小小_128
链接:https://www.jianshu.com/p/32f85873d8e1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于在Vue 3中使用el-tree组件添加右键菜单,你可以按照以下步骤操作: 1. 首先,在Vue项目中安装并导入element-plus库,因为Vue 3不再支持使用element-ui。你可以使用以下命令安装element-plus: ``` npm install element-plus --save ``` 2. 在你的Vue组件中,导入el-tree组件和ContextMenu组件: ```javascript import { ElTree, ElContextMenu } from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; ``` 3. 在你的Vue组件中,添加el-tree组件和ContextMenu组件到template中,并设置相关的属性和事件监听器: ```html <template> <div> <el-context-menu :context-menu="contextMenu"> <el-tree :data="treeData" @node-contextmenu="handleContextMenu"></el-tree> </el-context-menu> </div> </template> <script> export default { data() { return { treeData: [ // 节点数据 ], contextMenu: [ // 右键菜单选项 ] }; }, methods: { handleContextMenu(node, event) { // 处理右键菜单点击事件 } } } </script> ``` 4. 在data中定义treeData用于展示节点数据,contextMenu用于定义右键菜单选项。 5. 在handleContextMenu方法中,可以处理右键菜单点击事件。你可以根据需要执行相关操作。 请注意,上述代码中的treeData和contextMenu需要根据实际需求进行修改和填充。你可以根据element-plus文档中的el-tree和ContextMenu组件配置选项,来调整和自定义右键菜单的样式和功能。 希望以上信息能够帮助到你!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值