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

news2024/9/24 7:07:42

  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 为空,则生成默认的评级HTML
    if (this.jsonData === '') {
      content = this.generateRateHtml();
    } else {
      // 将 jsonData 解析为 nodes
      this.nodes = JSON.parse(this.jsonData);
      // 生成树状结构的HTML并附加到评级HTML
      content = this.generateTreeHtml(this.nodes) + this.generateRateHtml();
    }
    // 将内容包裹在一个带有滚动条的 div 内并赋值给 treeHtmlContent
    this.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 : '';
    }
 }

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

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

相关文章

GS-SLAM论文阅读笔记--GLC-SLAM

前言 最近GS-SLAM回环检测的工作已经逐步发展了&#xff0c;看一下这篇新文章。 文章目录 前言1.背景介绍2.关键内容2.1 tracking2.2 local mapping2.3 Loop Closing2.4总体流程 3.文章贡献 1.背景介绍 现有的基于3dgs的SLAM方法往往存在累积的跟踪误差和地图漂移&#xff0c…

三菱FX5U CPU模块的初始化“(格式化PLC)”

1、连接FX5U PLC 1、使用以太网电缆连接计算机与CPU模块。 2、从工程工具的菜单选择[在线]中[当前连接目标]。 3、在“简易连接目标设置 Connection”画面中&#xff0c;在与CPU模块的直接连接方法中选择[以太网]。点击[通信测试]按钮&#xff0c;确认能否与CPU模块连接。 FX5…

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(1)数字电路基础

目录 一、信号特征 二、组合逻辑电路和时序逻辑电路 1、组合逻辑电路 2、时序逻辑线路 三、信号转换 1、数字集成电路的分类 2、常用电平接口技术 四、可编程逻辑器件 flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blo…

[vulnhub] Prime 1

https://www.vulnhub.com/entry/prime-1,358/ 主机发现端口扫描 探测存活主机&#xff0c;137是靶机 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 16:25 CST Nmap scan report for 192.168.75.1 Host is up (…

Rust - 字符串:str 与 String

在其他语言中&#xff0c;字符串通常都会比较简单&#xff0c;例如 “hello, world” 就是字符串章节的几乎全部内容了。 但是Rust中的字符串与其他语言有所不同&#xff0c;若带着其他语言的习惯来学习Rust字符串&#xff0c;将会波折不断。 所以最好先忘记脑中已有的关于字…

MMD模型一键完美导入UE5-VRM4U插件方案(一)

1、下载pmx模型 1、去模之屋官网下载MMD模型,模之屋 2、下载完成得到pmx和Texture文件 2、下载并启用VRM4U插件 1、下载VRM4U插件, VRM4U,点击Latest下载对应引擎版本 2、将插件放到Plugins目录,然后

GB28181语音对讲协议详解

GB28181-2016语音对讲流程如下图1所示&#xff1a; 图1.语音对讲流程。 其中, 信令 1 、2 、 3 、 4 为语音广播通知、 语音广播应答消息流程; 信令 5 、 1 2 、 1 3 、 1 4 、 1 5 、 1 6 为 S I P 服务器接收到客户端的呼叫请求通过 B 2 B UA 代理方式建立语音流接收者与媒…

DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【HarmonyOS】应用权限原理和封装

背景 在项目中&#xff0c;避免不了需要调用系统资源和系统能力&#xff0c;比如&#xff1a;日历读写、摄像头等。因此&#xff0c;需要了解对系统资源访问权限的申请方式方法。 授权方式 包括两种授权方式&#xff0c;分别是system_grant(系统授权) 和 user_grant(用户授权)…

ruoyi源码解析学习 - 微服务版 - ruoyi-gateway

com.ruoyi.gateway 今天简单看看若依的gateway的配置模块干了啥 最近面试很多外包公司&#xff0c;都对低代码平台有点要求&#xff0c;这些代码虽说用起来不费劲&#xff0c;但是其中还是有很多细节能让我学习学习的。&#xff08;微服务版&#xff0c;上次搞jeecgboot的笔试…

R包安装教程,如何安装rjags和infercnv

一.介绍 在数据分析过程中&#xff0c;R语言因其强大的统计分析能力和丰富的包生态系统&#xff0c;成为众多研究人员和数据科学家的首选工具。本文将详细介绍如何在R环境中安装两个重要的R包——rjags和infercnv。rjags用于与JAGS&#xff08;Just Another Gibbs Sampler&…

热斑黄斑光伏发电板 红外黄斑检测图像数据集内含最高温度信息 1200张,jpg格式。

热斑黄斑光伏发电板 红外黄斑检测图像数据集 内含最高温度信息 1200张&#xff0c;jpg格式。 热斑黄斑光伏发电板红外黄斑检测图像数据集介绍 数据集名称 热斑黄斑光伏发电板红外黄斑检测图像数据集&#xff08;Hot Spot and Yellow Spot Detection in Photovoltaic Panels I…

Linux下进程通信与FIFO操作详解

Linux下进程通信与FIFO操作详解 一、命名管道(FIFO)概述1.1 命名管道的特点1.2 创建命名管道二、命名管道的操作2.1 打开命名管道2.2 读写命名管道2.3 关闭命名管道三、命名管道的使用实例3.1 命名管道的创建和通信过程3.1.1 发送方(writer)3.1.2 接收方(reader)3.2 运行…

java项目之健身房管理系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的健身房管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 健身房管理系统的主要使用…

Java框架学习(Spring)(tx)(03)

简介&#xff1a;以本片记录在尚硅谷学习ssm-spring-tx时遇到的小知识 详情移步&#xff1a;想参考的朋友建议全部打开相互配合学习&#xff01; 视频&#xff1a; 057-spring-tx-编程式和声明式事务理解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AP411s7D7?p5…

第九节 Opencv自带颜色表操作

知识点&#xff1a;Look Up lTable&#xff08;LUT&#xff09;查找表 了解LUT查找表的作用与用法&#xff0c;代码实现与API介绍 -applyColorMap&#xff08;src,dst,COLORMAP&#xff09; -src表示输入图像 -dst表示输出图像 匹配到的颜色LUT&#xff0c;Opencv支持13种…

Android OpenGLES2.0开发(一):艰难的开始

生而为人&#xff0c;本质上&#xff0c;都是孤独的&#xff01; 引言 我一直觉得OpenGL ES是一块硬骨头&#xff0c;每次用到GLSurfaceView作为Camera的预览视图时&#xff0c;总是去网上找现成的代码。CtrlC和CtrlV之后总有一种沾沾自喜的感觉&#xff0c;但是你要让我改里面…

JavaScript --- 字符串常用方法(1)

chartAt(索引)&#xff0c;返回索引对应字符 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

Java | Leetcode Java题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; class Solution {public int minMutation(String start, String end, String[] bank) {int m start.length();int n bank.length;List<Integer>[] adj new List[n];for (int i 0; i < n; i) {adj[i] new ArrayList<Intege…

chsharp文件如何查找在unity中使用的 位置?

在 Unity 中&#xff0c;C 脚本文件&#xff08;.cs 文件&#xff09;被用于控制游戏对象的行为。要查找某个 C 文件在 Unity 项目中被使用的位置&#xff0c;你可以通过以下几种方法&#xff1a; 1. 查找依赖项&#xff08;References&#xff09; Unity 提供了一个工具&#…