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

news2025/1/21 20:29:04

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(树型结构数据的前端渲染渲染显示示例)。

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

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

相关文章

【Kubenetes进阶】Helm3保姆级安装与Chart使用

之前在Centos 7_64位上实现了用kubespray-2.15.0完成kubenetes的部署&#xff0c;对于kubenetes&#xff0c;Helm无疑是一个良好的命令行下的客户端工具。Helm主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。 需要对helm加深了…

安全狗云安全资源池为运营商行业云降本增效

随着政府大力促进数字化转型&#xff0c;网络安全作为数字化建设的安全基石&#xff0c;已然成为保障数字化过程中稳定运行的重要因素。 一 严峻挑战下用户亟需安全托管专业服务 1) 云计算虚拟化的存储、部署及运作模式&#xff0c;数据所有权与管理权分离等特点&#xff0c…

【iOS】—— KVO再学习

KVO 文章目录 KVOKVO概念KVO使用步骤注册KVO监听KVO监听实现移除KVO监听 KVO基本用法KVO传值禁止KVO的方法使用注意事项 KVO原理GSKVOInfoGSKVOPathInfoGSKVOObservation为什么要重写class方法呢&#xff1f; GSKVOReplacementGSKVOBaseGSKVOBase小结 源码实现移除观察者总结 K…

unity Shader实现半透明阴影

在shader中&#xff0c;要对移动端的兼容&#xff0c;还不想实现两套分开兼容的话&#xff0c; #pragma exclude_renderers gles gles3 glcore #pragma target 4.5这两句话一定要改掉&#xff0c;第一行代码直接剔除了gles的渲染&#xff0c;而恰恰大部分移动端都是用的gles&a…

第十七章 访问者模式

文章目录 前言一、访问者模式基本介绍二、访问者模式应用实例完整代码评测抽象类 Action成功评价 Success失败评价评价人抽象类男性女性数据结构&#xff0c;管理很多人评价Clint 测试添加 wait 选票clint 测试 三、访问者模式的注意事项和细节 前言 一、访问者模式基本介绍 二…

Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开

目录 Vue2 脚手架下载及配置淘宝镜像 为什么需要 Vue Cli 脚手架? 环境配置&#xff0c;搭建项目 1. 搭建 Vue2 脚手架工程&#xff0c; 2.查看 3.冲突 4. 下载 5. 安装 6. 验证 7. 先删除以前的 cli 版本<不论是之前未下载或没有下载> 8. 安装淘宝镜像-cnpm…

20230427配置cv1826的buildroot在串口免登录的方法二

20230427配置cv1826的buildroot在串口免登录的方法二 2023/4/27 16:46 进度&#xff1a;可以拿掉密码&#xff0c;但是无法拿掉用户名&#xff01; 1、 Z:\buildroot1\buildroot\configs\cvitek_cv182x_defconfig BR2_TOOLCHAIN_EXTERNAL_GCC_6y BR2_TOOL…

编译一个魔兽世界开源服务端Windows需要安装什么环境

编译一个魔兽世界开源服务端Windows需要安装什么环境 大家好我是艾西&#xff0c;去年十月份左右wy和bx发布了在停服的公告。当时不少小伙伴都在担心如果停服了怎么办&#xff0c;魔兽这游戏伴随着我们渡过了太多的时光。但已经发生的事情我们只能顺其自然的等待GF的消息就好了…

Selenium基础篇之键盘操作(一)

文章目录 前言一、常用方法(上)二、小剧场2.1场景2.2代码2.2.1引入库2.2.2启动浏览器实例2.2.3访问C站首页2.2.4窗口最大化2.2.5获取输入框元素2.2.6向输入框输入文字2.2.7使用退格键删除最后一个字符2.2.8全选输入框文字2.2.9剪切输入框文字2.2.10粘贴文字到输入框2.2.11回车查…

经验分享 | 科研行业如何搭建RASP防护体系?

多年来&#xff0c;开源网安长期服务金融、政府、科技等大型企业&#xff0c;针对不同实际应用场景&#xff0c;打造出了成熟落地的解决方案&#xff0c;提高并完善了企业安全防护技术与管理体系。今天&#xff0c;我们就来了解开源网安是如何为科研行业搭建RASP防护体系的。 科…

“ ES6+ —— 让你的JavaScript代码从平凡到精彩 “

前期回顾 【提高代码可读性】—— 手握多个代码优化技巧、细数哪些惊艳一时的策略_0.活在风浪里的博客-CSDN博客代码优化对象策略https://blog.csdn.net/m0_57904695/article/details/128318224?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%…

GQCNN

Berkeley AUTOLAB’s GQCNN Package — GQCNN 1.1.0 documentation (berkeleyautomation.github.io) (3条消息) 机器人抓取&#xff08;六&#xff09;—— 抓取点检测&#xff08;抓取位姿估计&#xff09; gqcnn代码测试与解读_zxxRobot的博客-CSDN博客 GQ-CNN模型对生成数据…

C#,OpenCv开发指南(02)——OpenCvSharp编程入门与矩阵Mat的基础知识

在 Visual Studio 中很方便搭建与使用 OpenCV 的 C# 的开发环境&#xff0c;几乎不用键盘输入。 使用 C# 开发 OpenCV 可以直接成为工业软件产品&#xff0c;而不是实验室程序。世界上几乎所有的视频厂家都提供 C# OpenCV 开发接口。 C#&#xff0c;人工智能&#xff0c;深度学…

常见jvm调优操作详细记录

最近很多小伙伴跟我说&#xff0c;自己学了不少JVM的调优知识&#xff0c;但是在实际工作中却不知道何时对JVM进行调优。今天&#xff0c;我就为大家介绍几种JVM调优的场景。 cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流…

SpringBoot整合ELK做日志(超完整)

SpringBoot整合ELK日志系统 SpringBoot整合ELK做日志环境准备安装包准备ELK安装包Java11安装包 软件安装安装java11安装ElasticSearch安装Kibana安装Logstash 编写SpringBoot项目初始化SpringBoot项目修改代码编写Controller SpringBoot整合ELK做日志 环境准备 提前准备一台C…

SpringBoot+Linux操作系统与项目部署(这一篇就够了|超详细)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

华为联合openEuler发布全新NFS+协议,实现NAS存储性能与可靠性倍增

在openEuler开发者大会2023上&#xff0c;华为携手openEuler发布NFS协议&#xff0c;实现单客户端访问NAS存储可靠性提升3倍、性能提升6倍&#xff0c;助力NAS存储全面满足新型生产核心场景下苛刻要求。 在数字转型的新时代&#xff0c;非结构化数据价值持续提升。金融、大企业…

一种IPC通信机制Gdbus详解

一、DBus介绍 常规进程间通信有管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;以及socket等&#xff0c;每个都有优劣&#xff0c;这次我们介绍一种高阶的进程间通信方式DBus。 DBus通信是IPC通信机制的一种方式&#xff0c;本身是建立在socket机制之上&#xff0…

计算机网络——快速了解常见应用层协议体系

文章目录 〇、加密算法对称加密非对称加密 一、远程登录——TELNET、SSH1.Telnet2.SSH 二、文件传输——FTP、SFTP、FTPS1.FTP2.SFTP3.FTPSSSL工作原理 三、电子邮件——SMTP、POP、IMAP1.SMTP&#xff08;推送邮件&#xff09;2.POP&#xff08;接收邮件&#xff09;3.IMAP 四…

计算机中的数据存储

计算机的存储规则&#xff1a; 文本、图片、声音所有的数据存储 在计算机当中一般会有三类数据&#xff1a;文本数据、图片数据以及声音数据其中文本它又包含了数字、字母以及汉字视频的本质是图片和声音的组合体。在计算机当中&#xff0c;任意的数据都是以二进制的形式来存储…