当前位置: 首页 > news >正文

vue.js 展示树状结构数据,动态生成 HTML 内容

  1. 展示树状结构数据

    • 从 jsonData 读取树状结构的 JSON 数据,将其解析并生成 HTML 列表来展示。
    • 树状结构数据根据 id 和 label 属性组织,节点可以包含子节点 children
  2. 展示评级信息

    • 从预定义的表单字段 form 中读取 arRateFlag 和 arGameId,将它们转换为对应的标签和游戏名称,并在页面上展示。
  3. 动态生成 HTML 内容

    • 在组件创建时 (created 钩子),根据 jsonData 的内容,动态生成展示树状数据和评级信息的 HTML 字符串,并插入到页面中。

具体功能步骤

  1. 数据初始化

    • 定义树状结构数据 jsonData 及其对应的空数组 nodes
    • 定义评级类型选项 rateFlagOptions 和游戏 ID 选项 normalRateGameIdOptions
    • 定义表单数据 form,包含多个 arRateFlag 和 arGameId
  2. 组件创建时

    • 如果 jsonData 不为空,则解析 JSON 数据并调用 generateTreeHtml 和 generateRateHtml 方法生成 HTML 内容。
    • 如果 jsonData 为空,只生成评级信息。
  3. 方法说明

    • generateTreeHtml(nodes): 递归地生成树状结构的 HTML 列表,展示节点标签及其子节点。
    • generateRateHtml(): 根据表单数据生成评级类型和游戏 ID 对应的 HTML 内容。
    • getRateFlagLabel(value): 根据提供的评级标志值,获取对应的标签文本。
    • getGameName(gameId): 根据提供的游戏 ID,获取对应的游戏名称。
<template><div v-html="treeHtmlContent"></div>
</template><script>
export default {data() {return {jsonData: `[{"id": 547,"label": "up内容质量","business_type": 0,"children": [{"id": 561,"label": "孙子兵法设置","business_type": 0,"children": [{"id": 567,"label": "修改孙子兵法","业务类型": 0},{"id": 569,"label": "删除孙子兵法","业务类型": 0}]},{"id": 571,"label": "聚集舞会明细","业务类型": 0,"children": [{"id": 607,"label": "分页获取违规明细","业务类型": 0}]},{"id": 647,"label": "检测类型管理","业务类型": 0,"children": [{"id": 649,"label": "分页获取检测类型管理","业务类型": 0},{"id": 651,"label": "创建检测类型管理","业务类型": 0},{"id": 653,"label": "修改检测类型管理","业务类型": 0},{"id": 655,"label": "删除检测类型管理","业务类型": 0}]}]},{"id": 575,"label": "up评级后台","业务类型": 0,"children": [{"id": 577,"label": "up评级","业务类型": 0,"children": [{"id": 695,"label": "导入评级","业务类型": 0},{"id": 697,"label": "评级打分","业务类型": 0}]},{"id": 583,"label": "评分规则设置","业务类型": 0,"children": [{"id": 587,"label": "创建评分规则设置","业务类型": 0}]}]}]`,nodes: [],treeHtmlContent: '',rateFlagOptions: [{label: '娱乐/游戏新up评级', value: 0},{label: '高潜up专项', value: 1}],normalRateGameIdOptions: [{id: 4,rateFlag: 0,gameId: '2633',gameName: '二次元',anchorType: '["舞见coser","治愈哄睡","虚拟up","露脸唱见","电台声优"]',updateName: 'zhouhao',createdAt: '2024-02-04T00:04:00+08:00',updatedAt: '2024-02-04T04:00:00+08:00',createBy: 1,updateBy: 1},{id: 3,rateFlag: 0,gameId: '2165',gameName: '户外',anchorType: '["城市","乡野","美食","徒步","厨娘","瑜伽","其它"]',updateName: 'zhouhao',createdAt: '2024-02-04T00:03:00+08:00',updatedAt: '2024-02-04T03:00:00+08:00',createBy: 1,updateBy: 1},{id: 2,rateFlag: 0,gameId: '2168',gameName: '颜值',anchorType: '["音乐","舞蹈","脱口秀"]',updateName: 'zhouhao',createdAt: '2024-02-04T00:02:00+08:00',updatedAt: '2024-02-04T02:00:00+08:00',createBy: 1,updateBy: 1},{id: 1,rateFlag: 0,gameId: '1663',gameName: '星秀',anchorType: '["舞蹈","好声音","脱口秀","女团"]',updateName: 'zhouhao',createdAt: '2024-02-04T00:01:00+08:00',updatedAt: '2024-02-04T01:00:00+08:00',createBy: 1,updateBy: 1}],form: {arRateFlag: '0,1',arGameId: '2633,2165,2168,1663'}};},created() {let content;if (this.jsonData === '') {content = this.generateRateHtml();} else {this.nodes = JSON.parse(this.jsonData);content = this.generateTreeHtml(this.nodes) + this.generateRateHtml();}this.treeHtmlContent = `<div style="max-height: 500px; overflow-y: auto;">${content}</div>`;},methods: {generateTreeHtml(nodes) {if (!nodes || nodes.length === 0) return '';let html = '<ul style="list-style: disc; padding-left: 0; text-align: left;">';for (let node of nodes) {html += `<li style="font-size: 14px; line-height: 1em; text-align: left; margin-left: 20px;margin-top:8px">${node.label}`;if (node.children && node.children.length > 0) {html += this.generateTreeHtml(node.children);}html += '</li>';}html += '</ul>';return html;},generateRateHtml() {let rateFlags = '';if (this.form.arRateFlag) {rateFlags = this.form.arRateFlag.split(',').map(flag => this.getRateFlagLabel(flag)).join('、');}let gameNames = '';if (this.form.arGameId) {gameNames = this.form.arGameId.split(',').map(id => this.getGameName(id)).join('、');}let html = '<div style="text-align: left; margin-left: 20px; font-size: 14px;">';if (rateFlags) {html += `<div>评级类型:${rateFlags}</div>`;}if (gameNames) {html += `<div>娱乐/游戏评级的评级品类:${gameNames}</div>`;}html += '</div>';return html;},getRateFlagLabel(value) {const option = this.rateFlagOptions.find(opt => opt.value == value);return option ? option.label : '';},getGameName(gameId) {const option = this.normalRateGameIdOptions.find(opt => opt.gameId == gameId);return option ? option.gameName : '';}}
};
</script>

主要功能

  • 数据定义 (data):

    • jsonData: 包含树状结构的 JSON 数据,预先定义好。
    • nodes: 解析后的树节点数组。
    • treeHtmlContent: 用于展示树结构及评级信息的 HTML 字符串。
    • rateFlagOptions 和 normalRateGameIdOptions: 用于存储评级和游戏标志选项。
    • form: 包含表单的评级标志和游戏 ID。
  • created生命周期钩子:

    • 在组件创建时,检查 jsonData 是否为空。
    • 解析 jsonData 并生成树状 HTML 结构,添加评级 HTML。
    • 设置 treeHtmlContent,包裹在一个带滚动条的 div 内。
  • 方法:

    • generateTreeHtml(nodes): 递归地生成树状结构 HTML 字符串。
    • generateRateHtml(): 生成评级 HTML 字符串,包含评级类型和游戏名称。
    • getRateFlagLabel(value): 根据 rateFlag 值查找并返回对应的标签。
    • getGameName(gameId): 根据 gameId 查找并返回对应的游戏名称。
 created() {let content;// 如果 jsonData 为空,则生成默认的评级HTMLif (this.jsonData === '') {content = this.generateRateHtml();} else {// 将 jsonData 解析为 nodesthis.nodes = JSON.parse(this.jsonData);// 生成树状结构的HTML并附加到评级HTMLcontent = this.generateTreeHtml(this.nodes) + this.generateRateHtml();}// 将内容包裹在一个带有滚动条的 div 内并赋值给 treeHtmlContentthis.treeHtmlContent = `<div style="max-height: 500px; overflow-y: auto;">${content}</div>`;},methods: {// 生成树状结构HTML的方法generateTreeHtml(nodes) {if (!nodes || nodes.length === 0) return '';let html = '<ul style="list-style: disc; padding-left: 0; text-align: left;">';for (let node of nodes) {html += `<li style="font-size: 14px; line-height: 1em; text-align: left; margin-left: 20px;margin-top:8px">${node.label}`;if (node.children && node.children.length > 0) {html += this.generateTreeHtml(node.children);}html += '</li>';}html += '</ul>';return html;},// 生成评级HTML的方法generateRateHtml() {let rateFlags = '';if (this.form.arRateFlag) {rateFlags = this.form.arRateFlag.split(',').map(flag => this.getRateFlagLabel(flag)).join('、');}let gameNames = '';if (this.form.arGameId) {gameNames = this.form.arGameId.split(',').map(id => this.getGameName(id)).join('、');}let html = '<div style="text-align: left; margin-left: 20px; font-size: 14px;">';if (rateFlags) {html += `<div>评级类型:${rateFlags}</div>`;}if (gameNames) {html += `<div>娱乐/游戏评级的评级品类:${gameNames}</div>`;}html += '</div>';return html;},// 根据 value 获取评级标志的标签getRateFlagLabel(value) {const option = this.rateFlagOptions.find(opt => opt.value == value);return option ? option.label : '';},// 根据 gameId 获取游戏名称getGameName(gameId) {const option = this.normalRateGameIdOptions.find(opt => opt.gameId == gameId);return option ? option.gameName : '';}}

相关文章:

  • 【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)
  • Rocprofiler测试
  • 第七章 输入和输出处理 (IO流)
  • CPLD 工程师面试题
  • qt中QTatlewidget类的作用及详细使用方法
  • 即插即用篇 | YOLOv8 引入单头视觉Transformer模块 | CVPR 2024
  • Spring Boot入门指南
  • 鸿蒙OS开发之动画相关示例分享, 关于弹出倒计时动画的实战案例源码分享
  • AI大模型教程 Prompt提示词工程 AI原生应用开发零基础入门到实战【2024超细超全,建议收藏】
  • Maven重点学习笔记(包入门 2万字)
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引
  • 软考中级网络工程师选择题
  • 华为OD机试真题------分糖果
  • Docker配置代理解决pull超时问题
  • 大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试
  • Angular6错误 Service: No provider for Renderer2
  • ECMAScript入门(七)--Module语法
  • exports和module.exports
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JWT究竟是什么呢?
  • MySQL主从复制读写分离及奇怪的问题
  • passportjs 源码分析
  • php中curl和soap方式请求服务超时问题
  • Vim 折腾记
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给初学者:JavaScript 中数组操作注意点
  • 浅谈Golang中select的用法
  • 强力优化Rancher k8s中国区的使用体验
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 微信小程序开发问题汇总
  • 延迟脚本的方式
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 如何在招聘中考核.NET架构师
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​补​充​经​纬​恒​润​一​面​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Java第九次作业--输入输出流和文件操作
  • (ZT)一个美国文科博士的YardLife
  • (笔记)M1使用hombrew安装qemu
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)php新闻发布平台 毕业设计 141646
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)项目管理杂谈-我所期望的新人
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉)JSON.stringify 语法实例讲解
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ***通过什么方式***网吧
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .chm格式文件如何阅读