vue自定义折叠Tree,自定义折叠树

在这里插入图片描述

使用组件

<TreeNode v-for="(node, index) in nodes" :key="index" :node="node" />

JSON数据

let nodes=[{"id": 2030,"show_id": "MC1813024492270223360","detail_type": 1,"title": "1","description": "","class_hour": 10,"children": [{"id": 2031,"show_id": "MC1813024625619734528","detail_type": 1,"title": "2","description": "","class_hour": 2,"children": [{"id": 1940,"show_id": "MC1813024654644314112","detail_type": 2,"title": "31","description": "我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介我是课程视频简介","class_hour": 0,"children": null,"study_status_str": "未学习","lesson_number": 0,"level": 3}],"study_status_str": "","lesson_number": 0,"level": 2}],"study_status_str": "","lesson_number": 1,"level": 1}
]

组件

<template><div :style="{ paddingLeft: level * 20 + 'px' }" class="tree-node"><div@click="toggle"class="tree-node-header":class="{ 'first-level': node.level == 1 }"><img :src="node.level == 1 ? imgs.group : imgs.dot" alt="" /><span class="title">{{ node.title }}</span><template v-if="node.level == 1"><span class="class-hour all-hour">总学时 {{ node.class_hour }}</span><span class="class-hour">视频课{{ node.lesson_number }}</span></template><template v-if="!node.children && node.detail_type == 2"><span @click="handleClassHour(node)" class="class-hour play"><i class="iconfont">&#xe648;</i>视频课</span><!-- <span class="class-hour schedule" >已学习&nbsp;&nbsp;{{ '100%' }}</span> --><span class="class-hour schedule">{{ node.study_status_str }}</span></template><span v-if="hasChildren" class="arrow"><i v-show="isOpen" class="el-icon-arrow-up" /><i v-show="!isOpen" class="el-icon-arrow-down" /><!-- {{ isOpen ? "-" : "+" }} --></span></div><div class="content" v-if="!node.children && node.level != 1">{{ node.description }}</div><transition name="expand"><div v-if="isOpen" class="tree-node-children"><TreeNodev-for="(child, index) in node.children":key="index":node="child":level="level + 1"/></div></transition></div>
</template><script>
export default {name: "TreeNode",props: {node: {type: Object,required: true,},level: {type: Number,default: 1,},},data() {return {isOpen: false,imgs: {group: require("@/pages/web_site_front/resource_manage/pages/onlineCourses/assets/group.png"),dot: require("@/pages/web_site_front/resource_manage/pages/onlineCourses/assets/dot.png"),},};},computed: {hasChildren() {return (this.node.children && this.node.children?.length) || 0;},},methods: {toggle() {if (this.hasChildren) {this.isOpen = !this.isOpen;}},handleClassHour(node) {document.querySelector(".main-content").scrollTop = 0;this.$store.dispatch("user/setCourseVideoId", node.id);},},components: {TreeNode: () => import("./treeNode.vue"),},
};
</script><style scoped lang="scss">
.tree-node {margin: 5px 0;.tree-node-header {cursor: pointer;padding: 5px;margin-bottom: 16px;display: flex;font-weight: bold;img {width: 10px;align-self: center;margin: 0 5px;}.title {max-width: calc(100% - 160px);overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}.play {font-size: 12px;color: #00ab6b;line-height: 20px;height: 20px;border: 0.5px solid #c3e7da;border-radius: 4px;padding: 0 4px;margin-left: 8px;display: inline-table;i {font-size: 14px;margin-right: 4px;}}.schedule {font-size: 12px;color: #00000040;margin-left: 8px;}.arrow {flex: 1;text-align: right;color: #00ab6b;margin-right: 31px;}}.first-level {height: 40px;line-height: 40px;display: flex;margin-bottom: 16px;background: #fafafa;border-radius: 8px;font-weight: bold;font-size: 16px;span {align-self: center;}img {width: 30px;align-self: center;}.class-hour {color: #000000a6;line-height: 22px;padding: 0 8px;background: #f5f5f5;border-radius: 2px;margin-right: 6px;font-size: 14px;}.all-hour {margin-left: 26px;}}.content {color: #00000073;line-height: 22px;border-bottom: 1px solid #f0f0f0;padding-bottom: 16px;margin-left: 26px;}
}.tree-node-children {margin-top: 5px;//   border-left: 2px solid #ccc;padding-left: 0px;.tree-node{padding-left: 20px !important;}
}/* Animation Styles */
.expand-enter-active,
.expand-leave-active {transition: all 0.3s ease;
}.expand-enter, .expand-leave-to /* .expand-leave-active in <2.1.8 */ {height: 0;opacity: 0;overflow: hidden;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3248671.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Geometric Transformer for Fast and Robust Point Cloud Registration 论文解读

目录 一、导言 二、先导知识 1、超点匹配 2、KPConv 三、相关工作 1、基于对应的方法 2、直接配准方法 3、深度鲁棒估计 四、GeoTransformer模型 1、特征提取 2、超点匹配 几何自注意力模块 特征交叉注意力 计算高斯相关性 对应点采样 3、点匹配 4、局部到全局…

花开半夏,我决意仿一款答题小程序

不是清凉罢挥扇&#xff0c;自缘手倦歇些时。 ——杨万里&#xff08;宋&#xff09; 走过春的绚烂&#xff0c;路过初夏的清凉&#xff0c;我们迎来了炎炎夏日。蛙声阵阵&#xff0c;蝉鸣声声&#xff0c;稻花如白练&#xff0c;荷花别样红。 花开半夏&#xff0c;我决意仿一款…

陕西技术交易大会璀璨起航,卓翼飞思无人智能领域研究成果备受瞩目

智启未来&#xff0c;链动四方。万众瞩目的陕西省技术交易大会于7月17-18日在西安璀璨启航&#xff01;大会聚焦智能感知及其上下游产业链&#xff0c;旨在促进四链深度融合&#xff0c;推动技术创新与产业发展。卓翼智能作为产业链中“智能感知应用端”的杰出企业代表&#xf…

【刷题专项】— 模拟

1、替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先找到需要替换的 ? &#xff0c;位置然后遍历26个字母与 ? 的左右两边的是否相同&#xff0c;不同的话就替换最后返回即可代码&#xff1a; public String modifyString(String s) {char[] c…

MySQL运维实战之Clone插件(10.1)使用Clone插件

作者&#xff1a;俊达 clone插件介绍 mysql 8.0.17版本引入了clone插件。使用clone插件可以对本地l或远程的mysql实例进行clone操作。clone插件会拷贝innodb存储引擎表&#xff0c;clone得到的是原数据库的一个一致性的快照&#xff0c;可以使用该快照数据来启动新的实例。cl…

Android View的绘制流程

1.不管是View的添加&#xff0c;还是调用View的刷新方法invalidate()或者requestLayout()&#xff0c;绘制都是从ViewRootImpl的scheduleTraversals()方法开始 void scheduleTraversals() {if (!mTraversalScheduled) {mTraversalScheduled true;mTraversalBarrier mHandler…

【论文速读】| TCSR-SQL:面向表内容感知的自检索文本到SQL方法

本次分享论文&#xff1a;TCSR-SQL: Towards Table Content-aware Text-to-SQL with Self-retrieval 基本信息 原文作者&#xff1a;Wenbo Xu, Liang Yan, Peiyi Han, Haifeng Zhu, Chuanyi Liu, Shaoming Duan, Cuiyun Gao, Yingwei Liang 作者单位&#xff1a;哈尔滨工业大…

Java垃圾收集器选择与优化策略

1.垃圾收集算法有哪些,可以聊一下吗? 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾。如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果…

【网络工具】Charles 介绍及环境配置

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/iAmAo &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会整理一些工作或学习中用到的工具介绍给大家~ &#x1f4d8;Charles 系列其它文章&#xff1a;【网络…

JavaScript基础 第四弹 学习笔记

函数 1、为什么需要函数&#xff1f;可以实现代码复用&#xff0c;提高开发效率。 函数的定义 &#xff1a;函数function&#xff0c;是被设计为执行特定任务的代码块。 函数可以把具有相同或相似逻辑的代码‘包裹’起来&#xff0c;通过函数调用执行这些被“包裹”的代码逻…

万界星空科技电线电缆MES系统实现线缆全流程追溯

MES系统通过高度集成的数据平台&#xff0c;对电线电缆的生产全过程进行实时监控与记录&#xff0c;从原材料入库开始&#xff0c;到生产过程中的各个关键控制点&#xff0c;再到成品出库&#xff0c;每一步操作都被详细记录并可追溯。这种全流程追溯能力主要体现在以下几个方面…

java基础之变量,类型的转换,跟着哔站尚硅谷自学笔记。

变量 变量的介绍以及使用 1.变量的数据类型&#xff1a;基本数据类型&#xff1a;4类8种整数&#xff1a;byte short int long 浮点数&#xff1a;float double字符型&#xff1a;char布尔型&#xff1a;boolean引用数据类型&#xff1a;类 数组 接口 枚举 注解2.概述&#xf…

云南合续-马来西亚水环境项目考察单位

2024年恰逢中马建交50周年&#xff0c;中华环保联合会为进一步加强双方生态产业合作与交流&#xff0c;拟定于9月23日-29日组团赴马来西亚开展水环境项目考察&#xff0c;同期举办“2024中马水务合作论坛”&#xff0c;引领国内先进环保技术、装备、产能“走出去”。

hung 之 Android llkd

目录 1. llkd 简介 2. 原理 2.1 内核活锁 2.2 检测机制 2.3 为什么 persistent stack signature 检测机制不执行 ABA 检查&#xff1f; 2.4 为什么 kill 进程后&#xff0c;进程还存在就能判定发生了内核 live-lock&#xff1f; 3. 代码 3.1 内核 live-lock 检查 3.2 …

verilog刷题笔记

1、选择器实现方式 &#xff08;1&#xff09;case语句&#xff0c;注意default &#xff08;2&#xff09;if-else语言&#xff0c;注意else&#xff0c;有优先级 &#xff08;3&#xff09;三元运算符 &#xff1f; &#xff1a; 2、阻塞赋值/非阻塞赋值都是过程性赋值&a…

使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试

前言 首届YashanDB「迁移体验官」开放后&#xff0c;陆续收到「体验官」们的投稿&#xff0c;小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试》&#xff08;作者&#xff1a;尚雷&#xff09;&#xff0c…

提交(git-add git-commit git-push)

当修改好一个功能的时候&#xff0c;可以提交到远程仓库&#xff0c;这样就等于更新了一次版本&#xff0c;那么下次改修了文件的话&#xff0c;是跟这个版本做对比的 git status&#xff0c; 查看文件修改情况&#xff0c;git add 假如你只想提交1个文件&#xff0c;那么直接…

硬件开发——SD/MMC/eMMC

硬件开发——SD/MMC/eMMC 小狼http://blog.csdn.net/xiaolangyangyang 1、引脚定义 2、时钟频率 eMMC的速度模式有&#xff1a; SDR50&#xff1a;26M/52MHS200&#xff1a;200MHS400&#xff1a;400M 详细信息见如下表格&#xff1a; 3、协议 Read Data Write Data No Data …

beego框架_golang web框架_使用介绍

beego简介 beego是一个用于快速开发Go应用的http框架&#xff0c;由Go语言方面的技术大牛设计。beego可以用来快速开发API、Web、后端服务等各种应用&#xff0c;是一个RESTful的框架&#xff0c;主要设计灵感来源于tornado、sinatra、flask这三个框架&#xff0c;但结合了Go本…

Linux 安装多个jdk,切换使用

一、下载jdk 先去oracle官网下载jdk安装文件(我需要下载旧版本的jdk) https://www.oracle.com/ 二、安装jdk 1、将下载的jdk安装文件解压到想要安装的目录下 tar -xzvf jdk-8u202-linux-x64.tar.gz2、修改环境变量 vim /etc/profile export JAVA_HOME/usr/java/jdk1.…