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

第64章 树型结构数据的前端渲染渲染显示示例

1 \src\views\TreeTestView.vue

<template>

    <div class="wrap">

        <!--注意:1回到顶部组件及其回滚内容都必须包含到同1div容器中。-->

        <!-- 2div容器中必须有1个唯1性的样式类(例如:wrap)的定义,以便回到顶部组件进行回滚时进行定位。 -->

        <!-- 3回到顶部组件  必须在所有的回滚内容之上。 -->

        <el-backtop :bottom="100" target=".wrap" style="background-color: #666;">

            <el-icon style="color: #99ffff; font-size: 40px; margin-top: -2px;">

                <CaretTop />

            </el-icon>

        </el-backtop>

        <el-row type="flex" justify="end" style="margin:5px 0px;">

            <el-col :span="8">

                <div class="lightgreen-box">

                    <el-button style="background-color: #79bbff; color: #FFFFFF; margin-right:10px" @click="add()">

                        <el-icon style="margin-right:5px; font-size: 22px;">

                            <CirclePlusFilled />

                        </el-icon>

                       

                    </el-button>

                </div>

            </el-col>

        </el-row>

        <el-table :data="currentPageList" style="width: 100%" row-key="id" default-expand-all

            :tree-props="{children: 'childrenCollection', hasChildren: 'hasChildren'}">

            <el-table-column label="编号" property="id" width="100px" />

            <el-table-column label="名称" property="name" />

            <el-table-column prop="createdDateTime" label="创建时间" :formatter="dateTimeformat" width="155" />

            <el-table-column prop="updatedDateTime" label="最后更新时间" :formatter="dateTimeformat" width="155" />

            <el-table-column align="center" width="85px">

                <template #default="scope">

                    <el-button type="primary" size="small"

                        style="letter-spacing:7px; text-indent:10px; margin: 7px 0px;"

                        :disabled="scope.row.email=='admin@yourStore.com'" @click="edit(scope.row)">

                        编辑

                    </el-button>

                </template>

            </el-table-column>

        </el-table>

        <AddTreeTest v-model="this.formAdd.centerDialogVisible" :propParent="this.formAdd">

        </AddTreeTest>

        <EditTreeTest v-model="this.formEidt.centerDialogVisible" :propParent="this.formEidt">

        </EditTreeTest>

    </div>

</template>

<script>

    import {

        categoryIndex,

    } from '../common/http.api.js';

    import moment from 'moment';

    import AddTreeTest from '@/components/TreeTest/AddTreeTest.vue';

    import EditTreeTest from '@/components/TreeTest/EditTreeTest.vue';

    export default {

        components: {

            AddTreeTest,

            EditTreeTest,

        },

        data() {

            return {

                //初始化当前页的渲染数据集列表实例。

                currentPageList: [],

                //添加子页参数实例,由于添加子页,不需要获取监视父窗口传递的参数实例,所以可以只有“centerDialogVisible”

                formAdd: {

                    //该实例用于指示,当前页面角色编辑子页面是否在父窗口中显示出来。

                    centerDialogVisible: false,

                },

                //编辑子页参数实例。

                formEidt: {

                    id: 0,

                    //该实例用于指示,当前页面角色编辑子页面是否在父窗口中显示出来。

                    centerDialogVisible: false,

                },

            };

        },

        methods: {

            //格式化日期显示。

            dateTimeformat: function(row, column) {

                let data = row[column.property];

                if (data == null) {

                    return null;

                }

                return moment(data).format('YYYY-MM-DD HH:mm:ss');

            },

            //获取当前页面渲染显示所需的数据源。

            async currentPageInit() {

                const res = await categoryIndex();

                this.currentPageList = res.data.response;

                //console.log(this.currentPageList);

            },

            //添加单击事件,为子添加页面的渲染显示提供数据支撑。

            async add() {

                this.formAdd = Object.assign({}, {});

                this.formAdd.centerDialogVisible = true;

            },

            //编辑单击事件,为子编辑页面的渲染显示提供数据支撑。

            async edit(row) {

                this.formEidt = Object.assign({}, row);

                this.formEidt.centerDialogVisible = true;

            },

        },

        async mounted() {

            await this.currentPageInit();

        },

    };

</script>

<style scoped lang="scss">

    .wrap {

        height: 100%;

        overflow-x: hidden;

    }

    //表单“label”字体样式

    :deep(.el-form-item__label) {

        font-weight: 400;

    }

    // 修改表头样式。

    :deep(.el-table__header thead th) {

        background-color: #000000;

        color: #ffd04b;

        font-weight: 400;

        text-align: center;

    }

    //表格隔行变换颜色。

    :deep(.el-table__body tbody tr:nth-child(odd)) {

        background-color: #FFFFFF;

    }

    :deep(.el-table__body tbody tr:nth-child(even) td) {

        background-color: #CCFFFF;

    }

    .userinfo-inner {

        cursor: pointer;

        float: left;

    }

    //标签控件字体样式。

    .el-tag {

        font-weight: 400;

        padding: 5px 5px;

    }

    //按钮控件字体样式。

    .el-button {

        font-weight: 400;

        padding: 5px 5px;

    }

    //“el-pagination”分页组件样式。

    .el-pagination {

        margin-top: 10px;

        //font-size: 25px;

        //"上一页"样式。

        :deep(.btn-prev) {

            background-color: transparent;

            height: 40px;

            margin-right: 20px;

        }

        //"下一页"样式。

        :deep(.btn-next) {

            background-color: transparent;

            height: 40px;

            margin-left: 20px;

        }

        //分页索引样式。

        :deep(.number) {

            background-color: transparent;

            min-width: 40px;

            height: 40px;

            margin-right: 15px;

        }

    }

    //“el-pagination”分页组件中下拉框控件字体样式。

    :deep(.el-input__wrapper) {

        //font-size: 25px;

    }

    .lightgreen-box {

        //background-color: lightgreen;

        //height: 24px;

        float: right;

    }

</style>

2  \src\components\TreeTest\ AddTreeTest.vue

<template>

    <!--

  elmentUI 子页面的渲染显示注意事项说明:

  子页面的渲染显示必须的使用“<el-dialog></el-dialog>标签及其所包含的子标签,否则子页面将不会被渲染显示出来。

  -->

    <el-dialog width="30%">

        <template #header>

            <div class="my-header">

                <h1 style="margin: 0px; padding: 0px; ">

                    <el-icon style="margin-right:5px; font-size: 25px; color:#337ecc; vertical-align: middle">

                        <CirclePlusFilled />

                    </el-icon>

                    添加产品类型

                </h1>

            </div>

        </template>

        <el-form label-width="100px" class="demo-ruleForm" label-position="left" status-icon :model="formAdd">

            <el-form-item label="上级类型:">

                <el-tree-select v-model="formAdd.parentId" :data="selectList" :render-after-expand="false"

                    :props="{children: 'childrenCollection', label: 'text', value: 'id'}" style="width: 100%;" />

            </el-form-item>

            <el-form-item label="名称:">

                <el-input v-model="formAdd.name" />

            </el-form-item>

        </el-form>

        <template #footer>

            <span class="dialog-footer">

                <el-button> </el-button>

                <el-button type="primary"> </el-button>

            </span>

        </template>

    </el-dialog>

</template>

<script>

    import {

        categorySelectListTree,

    } from '../../common/http.api.js';

    export default {

        /*namepropParent属性用于在子页面成功提交后,控制对父页面的自动刷新*/

        name: 'AddTreeTest',

        props: {

            propParent: {},

        },

        data() {

            return {

                formAdd: {

                    parentId: 0,

                    name: '',

                    //该实例用于指示,当前页面角色编辑子页面是否在父窗口中显示出来。

                    centerDialogVisible: false,

                },

                selectList: [],

            };

        },

        //监视父窗口传递的参数实例,来监视弹出对话框的不显示。

        watch: {

            async propParent(val) {

                //console.log(val);

                /*this.formAdd = val用于在子页面成功提交后,控制对子页面的自动关闭和父页面的自动刷新*/

                this.formAdd = val;

                const res = await categorySelectListTree();

                this.selectList = res.data.response;

                this.formAdd.parentId=0;

                //console.log(this.selectList);

            },

        },

        methods: {

        },

        async mounted() {

        },

    };

</script>

<style scoped lang="scss">

    .my-header {

        display: flex;

        flex-direction: row;

        justify-content: space-between;

    }

</style>

3  \src\components\TreeTest\EditTreeTest.vue

<template>

    <!--

  elmentUI 子页面的渲染显示注意事项说明:

  子页面的渲染显示必须的使用“<el-dialog></el-dialog>标签及其所包含的子标签,否则子页面将不会被渲染显示出来。

  -->

    <el-dialog width="30%">

        <template #header>

            <div class="my-header">

                <h1 style="margin: 0px; padding: 0px; ">

                    <el-icon style="margin-right:5px; font-size: 25px; color:#337ecc; vertical-align: middle">

                        <Edit />

                    </el-icon>

                    编辑产品类型

                </h1>

            </div>

        </template>

        <el-form label-width="100px" class="demo-ruleForm" label-position="left" status-icon>

            <el-form-item label="编号:">

                <el-input v-model="formEidt.id" disabled />

            </el-form-item>

            <el-form-item label="上级类型:">

                <el-tree-select v-model="formEidt.parentId" :data="selectList" :default-expand-all="true"

                    :props="{children: 'childrenCollection', label: 'text', value: 'id'}" style="width: 100%;" />

            </el-form-item>

            <el-form-item label="名称:">

                <el-input v-model="formEidt.name" />

            </el-form-item>

        </el-form>

        <template #footer>

            <span class="dialog-footer">

                <el-button> </el-button>

                <el-button type="primary"> </el-button>

            </span>

        </template>

    </el-dialog>

</template>

<script>

    import {

        categorySelectListTree,

    } from '../../common/http.api.js';

    export default {

        /*namepropParent属性用于在子页面成功提交后,控制对父页面的自动刷新*/

        name: 'EditTreeTest',

        props: {

            propParent: {},

        },

        data() {

            return {

                formEidt: {

                    id: 0,

                    parentId:0,

                    name: '',

                    //该实例用于指示,当前页面角色编辑子页面是否在父窗口中显示出来。

                    centerDialogVisible: false,

                },

                selectList: [],

            };

        },

        //监视父窗口传递的参数实例,使当前子页面中的表单始终显示父窗口最新传递的参数实例。

        watch: {

            async propParent(val) {

                //console.log(val);

                const res = await categorySelectListTree();

                this.selectList = res.data.response;

                /*this.formEidt = val用于在子页面成功提交后,控制对子页面的自动关闭和父页面的自动刷新*/

                this.formEidt = val;

                if(this.formEidt.parentId==null&& this.formEidt.id!=0)

                    this.formEidt.parentId=this.formEidt.id;

            },

        },

        methods: {

        },

        async mounted() {

        },

    };

</script>

<style scoped lang="scss">

    .my-header {

        display: flex;

        flex-direction: row;

        justify-content: space-between;

    }


</style>

 

对以上功能更为具体实现和注释见:230427_018shopvue(树型结构数据的前端渲染渲染显示示例)。

相关文章:

第64章 树型结构数据的前端渲染渲染显示示例

1 \src\views\TreeTestView.vue <template> <div class"wrap"> <!--注意&#xff1a;1、“回到顶部”组件及其回滚内容都必须包含到同1个div容器中。--> <!-- 2、div容器中必须有1个唯1性的样式类&#xff08;例如&#xff1a;wrap&#xff09…...

超级国际象棋:第二个里程碑已完成

获取Cartesi资助的项目的最新进展&#xff0c;现在将完全去中心化的Web3国际象棋带到你的手中 “Ultrachess是一个完全基于区块链的国际象棋应用程序&#xff0c;由Cartesi Rollup技术支持&#xff0c;允许用户将真实价值投入到比赛中&#xff0c;不仅仅是他们的Elo分数。 此…...

vue3 HTML 和静态资源

目录 静态资源可以通过两种方式进行处理&#xff1a; URL 转换规则 public 文件夹 何时使用 public 文件夹 public/index.html 文件是一个会被 html-webpack-plugin 处理的模板。在构建过程中&#xff0c;资源链接会被自动注入。另外&#xff0c;Vue CLI 也会自动注入 re…...

5G基站外市电改造建设方案 (ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 外市电定义及分类 定义&#xff1a;由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类&#xff1a; &#xff08;1&#xff09;按电压等级分类 ①提供…...

C++ 类和对象(上)

类 面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;…...

【BIM+GIS】BIM模型导入GIS软件之前的一些处理设置

文章目录 一、模型位置发生偏移二、模型对象丢失或增加三、模型材质发生变化四、导出过程缓慢五、模型属性批量丢失一、模型位置发生偏移 在视图→可见性/图形替换模型类别→场地(VV可见性快捷),勾选项目基点。 单击选中项目基点,在属性中修改几点坐标。 即使修改了项目基…...

js FileReader的常用使用方法

FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件&#xff08;或原始数据缓冲区&#xff09;的内容&#xff0c;使用 File 或 Blob 对象指定要读取的文件或数据。 主要的读取方法&#xff1a; readAsArrayBuffer()&#xff1a; 开始读取指定的 Blob 中的内…...

网络威胁情报:数据的力量

在一个日益互联和数字化的世界中&#xff0c;网络威胁已成为一项重大挑战&#xff0c;可能危及您组织的声誉、财务稳定性和整体运营效率。 事实上&#xff0c;根据 IBM 2022 年的一份报告&#xff0c;数据泄露的平均成本现在为 435 万美元。 鉴于网络威胁的重要性和影响日益突…...

shell:清理指定目录中指定天数之前的旧文件

前言 我们在服务器运行一些服务经常会产生很多临时文件&#xff0c;而有些临时文件不定期处理很容易就打满了整个磁盘&#xff1b;所以有必要去定期清理&#xff0c;基于这个需求我们就可以搞一个脚本结合crontab或者服务调度这些来使用&#xff1b; 脚本实现 #!/bin/bash# …...

想入门网络安全?先来看看网络安全行业人才需求!

如果你是一个想要入门网络安全行业的小白、如果你是网络安全专业在读的大学生、如果你是正在找工作的新手&#xff0c;那么这篇文章你一定要仔细看。毕竟知己知彼百战百胜&#xff0c;知道行业的人才需求才能更好得发挥自己的优势。 当你打开BOSS直聘、拉钩等招聘网站&#xf…...

0424 spring AOP学习

AOP是指什么&#xff1f; 面向切面编程&#xff0c;Aspect Oriented Program。是一种编程范式、思想。 Spring AOP里涉及的AOP原理叫什么&#xff1f; 动态代理。 动态代理其实就是在运行时动态的生成目标对象的代理对象&#xff0c;在代理对象中对目标对象的方法进行增强。…...

GB/T 28181-2022 新版差异笔记

GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…...

以轻量级服务器niginx为核心的JavaWeb项目:第一章 项目设计

这里写目录标题 一 需求分析与环境搭建1.需求分析2.环境搭建1.2.1首先配置mysql环境1.2.2 配置maven环境 二 打成War包&#xff0c;发到linux上 一 需求分析与环境搭建 1.需求分析 2.环境搭建 1.2.1首先配置mysql环境 先查找一下mysql环境 [roothadoop122 ~]# mysql --vers…...

【error】 Request method ‘GET‘ not supported app端调用后台接口报错,后台人员自己调用时没问题

目录 问题描述原因分析解决方案方法一&#xff1a;方法二&#xff1a;方法三&#xff1a; 联系自身 问题描述 org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘GET’ not supported at org.springframework.web.servlet.mvc.method.Request…...

Microsoft Bitlocker企业级管理部署方案

目录 一、前言 二、BitLocker部署前的准备工作 三、BitLocker的部署方式 3.1 通过群组策略部署BitLocker...

Jetpack Compose 中使用分页 API 调用的无限滚动

Jetpack Compose 中使用分页 API 调用的无限滚动 最近&#xff0c;我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难&#xff0c;并且确实减少了初始加载时间&#xff0c;比以前少了。如果没有正确实施&#xff0c;实施无限滚动…...

第5章 数据结构之“链表”

链表简介 1.多个元素组成的列表。 2.元素的存储不连续&#xff0c;用next指针连在一起。 数组 vs 列表 数组&#xff1a;增删非手尾元素时往往需要移动元素。如果要在数组中增加一个元素&#xff0c;数组后面的所有元素需要往后面移动一位。如果在数组中删除一个元素&#x…...

SpringMVC - REST风格介绍已经RESTful简化开发

文章目录 RESTREST基本介绍RESTful快速入门RESTful快速开发 REST REST基本介绍 REST (Representational State Transfer), 表现形式状态转换(访问网络资源的风格) 传统风格资源描述形式 http://localhost/user/getById?id1http://localhost/user/saveUser REST风格描述形式 …...

Android 10.0 user模式下解除系统进入recovery功能的限制

1.前言 在10.0的系统rom定制化开发中,系统中recovery模式功能也是很重要的一部分,而在原生系统中,对于debug模式的产品,可以通过电源键和音量+键进入recovery模式, 但是在user模式下的产品,对于通过这种方式,进入recovery模式就受限制了,防止用户无操作为了产品安全等…...

用这些 JavaScript 试题来提高你的编程技能

文章目录 一、解释 Promise 的概念和用法。二、解释节流&#xff08;throttle&#xff09;和防抖&#xff08;debounce&#xff09;在 JavaScript 中的应用场景。三、请列举 JavaScript 中的原始数据类型。四、请解释JavaScript中的作用域。五、写一个名为 multiply 的函数&…...

倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析

倾斜摄影超大场景的三维模型在网络发布应用遇到常见的问题浅析 倾斜摄影超大场景的三维模型在网络发布应用时&#xff0c;常见的问题包括&#xff1a; 1、加载速度慢。由于数据量巨大&#xff0c;网络发布时需要将数据文件分割成多个小文件进行加载&#xff0c;这可能会导致页…...

基于遗传算法的梯级水电站群优化调度研究(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …...

java每日问题

一&#xff0c;什么时聚集索引什么时非聚集索引 聚集索引就是基于主键创建的索引除了主键索引以外的其他索引被称为非聚集索引也叫二级索引由于在innodb引擎里面一张表的数据对应的物理文件本事就是按照B树来组织的一种索引结构而聚集索引就是按照每张表的主键来构建一颗B树然后…...

C++设计模式之 依赖注入模式探索

依赖注入模式 前言依赖注入模式的角色依赖注入模式的UML图依赖注入模式的设计和实现(C)依赖注入和访问者模式的区别依赖注入模式的使用场景依赖注入模式的优缺点结语 前言 GoF设计模式主要关注的是面向对象编程设计的问题&#xff0c;而依赖注入作为一种编程技术&#xff0c;它…...

如何实现Spring AOP以及Spring AOP的实现原理

AOP:面向切面编程,它和OOP&#xff08;面向对象编程)类似。 AOP组成: 1、切面:定义AOP是针对那个统一的功能的&#xff0c;这个功能就叫做一个切面&#xff0c;比如用户登录功能或方法的统计日志&#xff0c;他们就各种是一个切面。切面是有切点加通知组成的。 2、连接点:所有可…...

数学建模——数据预处理

在数学建模时&#xff0c;经常遇到数据的预处理&#xff0c;那么会有一些什么情况呢&#xff0c;跟着北海老师总结了他的内容~希望对大家有所帮助&#xff01; 缺失值 比赛提供的数据&#xff0c;发现有些单元格是null或空的缺失太多:例如调查人口信息&#xff0c;发现“年龄…...

第8章:树

1.树是什么 一种分层数据的抽象模型前端工作中常见的树包括&#xff1a;DOM树&#xff0c;级联选择(省市区)&#xff0c;树形控件&#xff0c;…javascript中没有树&#xff0c;但是可以用Object和Array构建树 4.树的常用操作&#xff1a;深度/广度优先遍历&#xff0c;先中后…...

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…...

Tomcat多实例部署实验

引言 本文主要内容是tomcat的多实例配置实验。 一、实验准备 Tomcat多实例是指在一台设备上运行多个Tomcat服务&#xff0c;这些Tomcat相互独立&#xff0c;互不影响。多实例与虚拟主机不同&#xff0c;虚拟主机的本质是在一个服务下有多个相对独立的目录&#xff0c;但是多实…...

无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...

职场套路多&#xff0c;一不小心就会掉坑&#xff0c;一位网友讲述了自己的遭遇&#xff1a; 今天被领导催促离职了&#xff0c;当时就是这个领导把他从别的公司挖过来。这家公司催得太急&#xff0c;为了投奔这里&#xff0c;他和上家的HR都闹翻了&#xff0c;上家总监挽留他&…...