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

devtools/2024/9/24 15:33:17/

  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,获取对应的游戏名称。
javascript"><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 查找并返回对应的游戏名称。
javascript"> 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 : '';}}


http://www.ppmy.cn/devtools/116563.html

相关文章

Excel导入时,一个简单的匹配中文外键的方法

Excel导入时&#xff0c;外健往往只能用中文导入&#xff0c;在代码中&#xff0c;尝试用中文去匹配外建的id然后绑到要导入的数据中&#xff0c;这样一个&#xff0c;外健中文就必须和表里面的一模一样&#xff0c;但在实际中&#xff0c;导入的名称与表里存的名称总有少量字不…

使用CUBE_MX使用I2C通信,实现对EEPROM的读写

一、使用CUBE_MX配置 1.配置I2C 2.配置USART1 3.重中之重(在KEIL5打开串口使用的库) 二、KEIL5配置 #include "main.h" #include "i2c.h" #include "gpio.h" #include "usart.h"#include <stdio.h>void SystemClock_Config(vo…

html实现好看的多种风格手风琴折叠菜单效果合集(附源码)

文章目录 1.设计来源1.1 风格1 -图文结合手风琴1.2 风格2 - 纯图片手风琴1.3 风格3 - 导航手风琴1.4 风格4 - 双图手风琴1.5 风格5 - 综合手风琴1.6 风格6 - 简描手风琴1.7 风格7 - 功能手风琴1.8 风格8 - 全屏手风琴1.9 风格9 - 全屏灵活手风琴 2.效果和源码2.1 动态效果2.2 源…

Elasticsearch在大数据处理中的优势

Elasticsearch 在大数据处理中的优势主要体现在以下几个方面&#xff1a; 1. 分布式架构 水平扩展&#xff1a;Elasticsearch 设计为分布式系统&#xff0c;可以轻松地通过增加节点来水平扩展&#xff0c;处理 PB 级别的数据。数据分片和复制&#xff1a;数据自动分片并跨多个…

我们一般使用的家庭宽带支持udp吗

大多数家庭宽带服务通常支持UDP协议&#xff0c;因为UDP是互联网协议套件中的一个重要部分&#xff0c;广泛应用于视频会议、在线游戏、实时语音通话等实时应用中。以下是一些常见情况&#xff1a; 1. 家庭宽带服务 大部分ISP&#xff08;互联网服务提供商&#xff09;&#…

【大语言模型_1】VLLM部署Qwen模型

1、模型下载&#xff1a; 魔塔社区&#xff1a;魔搭社区 huggingface&#xff1a;https://huggingface.co/Qwen 2、安装python环境 1、python官网安装python 【推荐要3.8以上版本】 2、安装vllm模块 3、启动模型 CUDA_VISIBLE_DEVICES0,1 /root/vendor/Python3.10.12/bin/pytho…

基于BERT的文本分类模型,结合了TextCNN网络结构

一个基于BERT的文本分类模型,并结合了TextCNN网络结构来进一步增强特征提取能力。代码的主要组件包括BERT模型的加载、卷积神经网络(CNN)部分的定义、特征融合以及最终的分类层。以下是代码的详细解析: 1. 导入必要的库和函数 from bert4keras.backend import keras, set…

加固与脱壳01 - 环境搭建

虚拟机 VMWare 多平台可用&#xff0c;而且可以直接激活&#xff0c;需要先注册一个账号 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro KALI 类Ubuntu系统&#xff0c;官方提供了 vmware 版本&#xff0c;直接下载就可以使用。…