viewui tree 自定义化(源码copy出来改动)#添加 获取selected 解决方案
需求:
对树有title的点击效果,右侧有说明文字 和 按钮能点击,不能右键,系统用的壳已经有右键了。
出现的问题:
viewui的tree有两年没更新了,对ui这块,是采取的render自定义,但是它外层包裹了title,包括事件等等。导致右侧再加按钮就会在title里面。
问题2: 单行背景通下来
这个是由于用的折叠面板 ul li 从这个层级,就得修改css

临时效果

代码部分 node.vue

viewui源码 都copy过来

SubModeTree.vue
<template>
  <div>
    <div style="height: 34px; border-bottom: 1px solid #e5e5e5;">
      <div style="float: left; font-size: 16px; font-weight: bold; padding: 4px 0 0 10px;">XXXXXX树</div>
      <div style="float: right;padding-top: 5px;">
        <Checkbox v-model="subFlag">包含下级数据</Checkbox>
      </div>
    </div>
    <div style="height: 10px;"></div>
    <div style="padding: 0 10px 10px 10px; height: calc(100vh - 221px); overflow: auto;">
      <TreeZen :data="treeData"
            :render="renderContent"
            class="tree-render-sub-mode"></TreeZen>
    </div>
  </div>
</template>
<script>
import SubModeTreeItem from './SubModeTreeItem'
import TreeZen from '@/components/ViewuiZen/components/tree'
export default {
  name: 'SubModeTree',
  components: {
    TreeZen
  },
  data () {
    return {
      subFlag: true,
      treeData: [],
      treeDataRaw: [{ title: '全国', expand: true }]
    }
  },
  methods: {
    append (data, children) {
      this.$set(data, 'children', children)
    },
    bindRender (arr) {
      return arr.map(item => {
        // item.render = this.renderItem
        // item.children = []
        return item
      })
    },
    renderContent (h, { root, node, data }) {
      return h(SubModeTreeItem, {
        props: {
          item: data
        }
      })
    }
  },
  created () {
    let t = [...this.treeDataRaw]
    // t[0].children = this.bindRender(this.treeDataRaw)
    this.append(t[0], [{ title: '北京市' }, { title: '天津市' }, { title: '广东省' }, { title: '河北省' }])
    this.append(t[0].children[1], [{ title: '和平区' }, { title: '南开区' }])
    this.treeData = [...t]
    console.info('treeData', this.treeData)
  },
  mounted () {
  }
}
</script>
<style>
  .tree-render-sub-mode .ivu-tree-title {
    /*width: 95%;*/
  }
</style>
SubModeTreeItem.vue
<template>
  <span class="subModeTreeBg" style="height: 30px; line-height: 30px; font-size: 14px;">
    <span v-if="item.isTitle" @click="titleClickHandleByTreeBySubMode">
      <Icon type="ios-folder-open" size="21" color="#f2994a" style="margin-right:8px;"/>
      <span>{{ item.title }}</span>
    </span>
    <span v-if="!item.isTitle">
      <Icon type="ios-checkmark-circle" size="21" color="#27ae60"/>
      同步成功
    </span>
    <!--<Button @click="btnClickHandleByTreeBySubMode"-->
            <!--type="text" size="small" style="margin-left: 5px; color:#27ae60; position: absolute; right: 0;">-->
    <!--</Button>-->
  </span>
</template>
<script>
export default {
  name: 'SubModeTreeItem',
  props: {
    item: {
      type: Object,
      default () {
        return {}
      }
    }
  },
  data () {
    return {}
  },
  methods: {
    titleClickHandleByTreeBySubMode () {
      console.info('titleClickHandleByTreeBysubMode item', this.item)
    },
    btnClickHandleByTreeBySubMode () {
      console.info('btnClickHandleByTreeBySubMode item', this.item)
    }
  }
}
</script>
<style>
  .ivu-tree-title-selected {
  }
  .ivu-tree-title-selected .subModeTreeBg {
    /*background-color: #2db7f5;*/
  }
  .ivu-tree-arrow {
    margin-top: 5px;
  }
</style>
来源 版本号 4.6.1
viewui 的版本号,用的这版copy的,以后要是再有组件,就不用把环境再copy一遍了,就光把相关的组件copy上就ok了。
20210720 日志更新
获取selected 解决方案
点击事件获取 selected 数据不准,经查看,是因为点击事件的时候,数据还没有进行改变。点击事件后,数据进行的改变。
解决方案: 延时获取数据
titleClickHandle (item, root) {
  // 点击事件后,数据selected状态进行更改,但是点击的时候,数据还没有更改,所以延时获取selected
  setTimeout(() => {
    const selected = root.filter(d => d.nodeKey === item.nodeKey)[0].node.selected
    console.info('selected', selected)
  }, 20)
},
click 点击范围问题
问题:因为tree的点击事件有两套 一套在外层 node.vue 里面

里面的click

解决方案:外层的padding设置为0
padding换到里面
这个的难点在于发现此bug,我也是无意间点到的。
viewui tree 自定义化(源码copy出来改动)#添加 获取selected 解决方案的更多相关文章
- Android必学-异步加载+Android自定义View源码【申明:来源于网络】
		Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ... 
- Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)
		Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ... 
- spring security 授权方式(自定义)及源码跟踪
		spring security 授权方式(自定义)及源码跟踪  这节我们来看看spring security的几种授权方式,及简要的源码跟踪.在初步接触spring security时,为了实现它的 ... 
- Spring事务源码解析(二)获取增强
		在上一篇文章@EnableTransactionManagement注解解析中,我们搭建了源码阅读的环境,以及解析了开启Spring事务功能的注解@EnableTransactionManagemen ... 
- jquery-ui-datepicker定制化,汉化,因手机布局美观化源码修改
		感谢浏览,欢迎交流=.= 公司微信网页需要使用日历控件,想到jquery-mobile,但是css影响页面布局,放弃后使用jquery-ui-datepicker. 话不多说,进入正题: 1.jque ... 
- select2插件改造之设置自定义选项 源码
		改造特性: 适应业务需要,选项里面包含“其他”其它”,可以点击填写并设置自定义选项 效果图: 具体代码不做阐述,如有类似需求,请私信.主要源码: /* Copyright 2012 Igor Vayn ... 
- recovery编译汉化源码开源地址
		本Recovery基于xiaolu开源的不完全汉化版源码,进行完全汉化,并合并Philz的最新源码. 汉化耗费我将近一整天的精力,纯手打,可能有遗漏或翻译不准的地方,请到微博反馈 本Rec完全开源,便 ... 
- 基于zuul实现自定义路由源码分析
		ZuulFilter定义 通过继承ZuulFilter我们可以定义一个新的过滤器,如下 public class IpAddressFilter extends ZuulFilter { @Autow ... 
- adaptiveThreshold自适应二值化源码分析
		自适应二值化介绍: 二值化算法是用输入像素的值I与一个值C来比较,根据比较结果确定输出值. 自适应二值化的每一个像素的比较值C都不同,比较值C由这个像素为中心的一个块范围计算在减去差值delta得到. ... 
- Universal-Image-Loader源码解解析---display过程 + 获取bitmap过程
		Universal-Image-Loader在github上的地址:https://github.com/nostra13/Android-Universal-Image-Loader 它的基本使用请 ... 
随机推荐
- C/C++ 反汇编:针对加减乘除的还原
			算术运算通常是指,加减乘除四则运算,而计算机中的四则运算与数学中的有所不同,同样是实现算术运算,高级语言与汇编语言的实现思路完全不同,往往一个简单的减法运算,都要几条指令的配合才能得出计算结果,而为了 ... 
- 爆了!Sealos 三天支持 1000 个帕鲁私服
			Sealos 的帕鲁私服模板从第一天发布之后就起了 100 多个私服,第二天直接上到 500 多个,第三天直接上千,还在加速增长中.来讲讲我们只用一个晚上怎么做到上线一个专属可用区的,还有一些帕鲁实践 ... 
- CF1921F Sum of Progression 题解
			题目链接:CF 或者 洛谷 一道经典的类型题,把这种类型的题拿出来单独说一下. 注意到问题中涉及到需要维护 \(a_{x+k\times step}\) 这样的信息,这样的信息很难用树型结构维护,比较 ... 
- c语言实现内存池
			概要 所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片. 设计理念 为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存 ... 
- Ubuntu20.04安装记录
			在Ubuntu下将iso文件刻录到U盘, 可以使用系统自带的Startup Disk Creator. 分区方式 使用整个硬盘, 一个512G SSD, 使用默认的分区方式, 会创建一个512M的EF ... 
- 【Unity3D】Unity与Android交互
			1 前言  本文主要介绍 Unity 打包发布 Android apk 流程.基于 AndroidJavaObject(或 AndroidJavaClass)实现 Unity 调用 Java 代码. ... 
- MySQL的经典SQL优化12例(更新于2023年12月28日)
			下列优化的SQL案例,区别于平常加SQL索引的方法优化,大部分都是通过改写SQL语句方法优化,都是日常优化线上慢SQL的实际案例,有比较好的代表性(思路和方法),也是对自己这些年来做SQL优化的总结, ... 
- uniapp实现点击加载更多
			使用场景 举个栗子:外卖app当订单商品数量比较多时,不方便一次性展示出来.通常会展示一部分,并在页面给出一个查看更多功能.点击后即可自定义展示剩余内容,比如可以每次点击多展示N个内容,或展示所有. ... 
- golang读取用户名和密码文件并生成笛卡尔积
			密码爆破时需要读取用户名字典和密码字典来生成笛卡尔积派发爆破任务:直接读取全部字典内容到内存时成本较高: package main import ( "bufio" "f ... 
- dllimport 和 dllexport
			Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如, #define DllExport __declspec( dllexport ) class DllExport C { in ... 
