• ElementUI 自定义 Tree 树形控件背景


    自定义 Tree 树形控件背景

    在 template 中

    1. <div class="tree-box">
    2. <el-tree :data="treeList" :props="defaultProps" accordion @node-click="handleNodeClick" />
    3. div>

    在 script 中

    1. treeList: [
    2. { id: "-1", label: "区域选择" },
    3. { id: "0", label: "全市" },
    4. {
    5. id: "1",
    6. label: "南明区",
    7. children: [{ id: "1-1", label: "花果园" }]
    8. },
    9. {
    10. id: "2",
    11. label: "观山湖区",
    12. children: [
    13. { id: "2-1", label: "长岭街道办" },
    14. { id: "2-2", label: "金阳街道办" },
    15. { id: "2-3", label: "金华镇" },
    16. { id: "2-4", label: "金华园街道办" }
    17. ]
    18. }
    19. ],
    20. defaultProps: { children: "children", label: "label" },
    1. handleNodeClick(e) {
    2. console.log(e.id);
    3. },

    在 style 中

    1. .tree-box {
    2. width: 200px;
    3. }
    4. .el-tree-node__content {
    5. padding: 5px 0;
    6. border: 1px solid #ebf0f3;
    7. }
    8. .el-tree-node.is-current > .el-tree-node__content .el-tree-node__expand-icon {
    9. color: #0c5cff;
    10. }
    11. .el-tree-node__content:hover {
    12. color: #0c5cff;
    13. background: #e0eaff;
    14. }
    15. .el-tree-node.is-current > .el-tree-node__content {
    16. color: #0c5cff;
    17. background-color: #e0eaff;
    18. }
    19. .el-tree-node__expand-icon.is-leaf {
    20. color: transparent !important;
    21. }

    Tree 树形菜单组件

    在 template 中

    1. <tree-menu
    2. key="menu1"
    3. high-prefix="max"
    4. high="1039"
    5. title="区域"
    6. :tree-list="areaList"
    7. :default-expanded-keys="['0']"
    8. @nodeClick="areaChoose"
    9. />

    在 script 中

    1. /* 树形菜单 */
    2. areaList: [
    3. {
    4. id: "0",
    5. label: "全市",
    6. children: [
    7. {
    8. id: "1",
    9. label: "南明区",
    10. children: [{id: "1-1", label: "花果园"}]
    11. },
    12. {
    13. id: "2",
    14. label: "观山湖区",
    15. children: [
    16. {id: "2-1", label: "长岭街道办"},
    17. {id: "2-2", label: "金阳街道办"},
    18. {id: "2-3", label: "金华镇"},
    19. {id: "2-4", label: "金华园街道办"}
    20. ]
    21. }
    22. ]
    23. },
    24. ], // 区域
    1. /* 树形菜单 */
    2. areaChoose(e) {
    3. // 区域菜单
    4. console.log(e)
    5. },

    组件源码

    1. <template>
    2. <div class="tree-box box-roll-vertical" :style="`${highPrefixCalc(highPrefix)}height: ${high}px`">
    3. <div class="top-tip">{{ title }}div>
    4. <el-tree
    5. :data="treeList"
    6. :props="treeProps"
    7. :node-key="nodeKey"
    8. :default-expand-all="defaultExpandedKeys.length > 0 ? false : defaultExpandAll"
    9. :default-expanded-keys="defaultExpandedKeys"
    10. :accordion="accordion"
    11. @node-click="handleNodeClick"
    12. />
    13. div>
    14. template>
    15. <script>
    16. export default {
    17. props: {
    18. /** 菜单最大高度
    19. * 默认:324,单位px
    20. */
    21. high: {
    22. type: [Number, String],
    23. default: 324
    24. },
    25. /** 高度前缀
    26. * 默认:"",可取值:max(最大高度),min(最小高度)
    27. */
    28. highPrefix: {
    29. type: String,
    30. default: ''
    31. },
    32. /** 顶部标题
    33. * 默认:""
    34. */
    35. title: {
    36. type: String,
    37. default: ""
    38. },
    39. /** 配置选项
    40. * 默认:{children: "children", label: "label"}
    41. */
    42. treeProps: {
    43. type: Object,
    44. default: () => ({children: "children", label: "label"})
    45. },
    46. /** 每个树节点用来作为唯一标识的属性,整棵树应该是唯一的(默认展开的节点的 key 的数组中的 key 值就是 nodeKey 这个值)
    47. * 默认:id
    48. */
    49. nodeKey: {
    50. type: String,
    51. default: "id"
    52. },
    53. /** 是否默认展开所有节点
    54. * 默认:false
    55. */
    56. defaultExpandAll: {
    57. type: Boolean,
    58. default: false
    59. },
    60. /** 默认展开的节点的 key 的数组
    61. * 默认:[]
    62. */
    63. defaultExpandedKeys: {
    64. type: Array,
    65. default: () => ([])
    66. },
    67. /** 是否每次只打开一个同级树节点展开
    68. * 默认:true
    69. */
    70. accordion: {
    71. type: Boolean,
    72. default: true
    73. },
    74. /** 展示的数据
    75. * 默认:[]
    76. */
    77. treeList: {
    78. type: Array,
    79. default: () => ([])
    80. }
    81. },
    82. data() {
    83. return {}
    84. },
    85. methods: {
    86. /** 高度前缀计算
    87. * @param e
    88. */
    89. highPrefixCalc(e) {
    90. let result = ''
    91. if (e === 'max' || e === 'min') result = `${e}-`
    92. return result
    93. },
    94. /** 节点被点击时的回调
    95. * @param e 返回值
    96. */
    97. handleNodeClick(e) {
    98. this.$emit("nodeClick", e)
    99. }
    100. }
    101. }
    102. script>
    103. <style lang="scss" scoped>
    104. $baseColor: #D0EEFF; // 字体颜色
    105. $baseBg: rgba(16, 33, 48, 0.4); // 背景颜色
    106. $selectedBg: rgba(16, 33, 48, 0.4); // 选中时的背景颜色
    107. .tree-box {
    108. width: 420px;
    109. .top-tip {
    110. color: $baseColor;
    111. font-size: 24px;
    112. padding: 8px 16px;
    113. background: rgba(112, 204, 255, 0.2);
    114. backdrop-filter: blur(10px);
    115. font-weight: bold;
    116. }
    117. .el-tree {
    118. background: $baseBg;
    119. }
    120. ::v-deep .el-tree-node__expand-icon {
    121. font-size: 34px;
    122. color: $baseColor;
    123. }
    124. ::v-deep .el-tree-node__expand-icon.is-leaf {
    125. color: transparent;
    126. }
    127. ::v-deep .el-tree-node__content {
    128. height: 64px;
    129. backdrop-filter: blur(10px);
    130. }
    131. ::v-deep .el-tree-node:focus > .el-tree-node__content,
    132. ::v-deep .el-tree-node__content:hover {
    133. background: $selectedBg;
    134. }
    135. ::v-deep .el-tree-node__label {
    136. color: $baseColor;
    137. font-size: 24px;
    138. font-weight: bold;
    139. }
    140. }
    141. /* 上下滚动条 */
    142. .box-roll-vertical {
    143. overflow-y: auto;
    144. overflow-x: hidden;
    145. }
    146. .box-roll-vertical::-webkit-scrollbar {
    147. width: 2px;
    148. }
    149. .box-roll-vertical::-webkit-scrollbar-track,
    150. .box-roll-vertical::-webkit-scrollbar-thumb:hover {
    151. background: #f2f2f2;
    152. }
    153. .box-roll-vertical::-webkit-scrollbar-thumb,
    154. .box-roll-vertical::-webkit-scrollbar-thumb:active {
    155. background: rgba(0, 0, 0, 0.2);
    156. }
    157. style>
  • 相关阅读:
    ITE IT66021FN/BX HDMI 1.4接收器/接收芯片/收发器
    QEMU 结构体对齐产生的问题
    leetcode/两个链表的第一个重合节点
    【TCP/UDP】MSS和MTU、UDP报文、TCP报文、如何实现TCP的长连接、TCP的粘包问题如何解决等重点知识汇总
    【华为OD机试真题 JS】英文输入法
    跟我学C++中级篇——Pimpl中的unique_ptr
    详解C#的序列化与反序列化
    go与java
    如何两个不同的脚本文件之间传递参数
    代码走读: FFMPEG-ffplayer02
  • 原文地址:https://blog.csdn.net/AdminGuan/article/details/134184423