用easyui DataGrid编辑树形资料

news2024/9/24 11:32:36

easyui显示编辑树形资料有TreeGrid元件,但是这个元件的vue版本和react版本没有分页功能。virtual scroll功能也表现不佳。

我用DataGrid来处理。要解决的问题点:

(1)如何显示成树形。即,子节点如何有缩进。

先计算好每个节点的层级level,然后template中设置缩进大小。

<template v-slot:body="{row,column,rowIndex}">
  <div v-Droppable="{dragEnter:onDDKeyDragEnter,drop:onDDKeyDrop}"
    v-Draggable="{row:row,proxy:$refs.DDKeyDragProxy,revert:true,axis:'v',dragStart:onDDKeyDragStart,dragEnd:onDDKeyDragEnd,drag:onDDKeyDrag}"
      @click="onDDKeyClick">
      <span class='tree-indent' :style='{width:(row.acroStates.level*16).toString()+"px"}'></span>
      <span v-if="row.children && row.children.length>0" :class="getDDKeyExpanderClass(row)" @click="onRowToggle($event,row)"></span>
      <span v-else class='tree-indent'></span>
      <span class='tree-title'>{{row[column.field]}}</span>
  </div>
</template>

(2)如何展开和收拢节点。

展开收拢时,计算好每个节点的isVisual属性,通过DataGrid的filter来显示和隐藏。

expandRowRules:[{
  field:'isVisual',
  op:'equal',
  value:true
}],

......
<DataGrid :filterRules="expandRowRules">
......
toggleRow(row){
  if (row.acroStates.state=='open') row.acroStates.state='closed';
  else row.acroStates.state='open';
  let root=row;
  function scanNodes(parent,children){   
    for(let i=0;i<children.length;i++){
      let node=children[i];
      node.isVisual=root.acroStates.state=='open' && parent.acroStates.state=='open';
      if (node.children) scanNodes(node,node.children);
    }
  }
  if (row.children) scanNodes(row,row.children);
},
......
onRowToggle(e,row){
  //console.log('toggle',e,row);
  //this.finishEditing();
  util_treePlain.toggleRow(row);
  this.$refs.tree.doFilter();
  //取消冒泡,使其不触发cellclick事件
  e.cancelBubble=true;
  e.preventDefault();
  e.stopPropagation();
},

(3)排序时如何保持节点的上下级层级关系。

节点按同级排序,按深度优先扫描树形节点,把节点一个个加入到平面的数组中。

expandTree2Plain(treeRows){
  let rows=[];
  function scanNodes(nodes,level){
    for(let i=0;i<nodes.length;i++){
      let node=nodes[i];
      if (!node.acroStates){
        node.acroStates={
          state:'open'
        }
      }
      node.acroStates.level=level;
      node.acroStates.index=rows.length;
      node.isVisual=node.acroStates.state=='open';
      rows.push(node);
      if (node.children){
        scanNodes(node.children,level+1);
      }
    }
  }
  scanNodes(treeRows,0);
  return rows;
},
sortTree2Plain(treeRows,sorts){
  let rows=[];
  function scanNodes(nodes){
    if (sorts && sorts.length>0){
      nodes.sort(function(a,b){
        let r;
        let v1=a[sorts[0].field];          
        let v2=b[sorts[0].field];
        if (v1==null||v1==undefined) v1='';
        if (v2==null||v2==undefined) v2='';
        if (sorts[0].field=='SortNumber'){
          if (v1=='') v1=-1;else v1=parseInt(v1);
          if (v2=='') v2=-1;v2=parseInt(v2);
        }
        if (v1<v2) r=-1;
        else if (v1==v2) r=0;
        else r=1;
        if (sorts[0].order=='desc') r=-r;
        return r;
      });
    }
    for(let i=0;i<nodes.length;i++){
      let node=nodes[i];
      node.acroStates.index=rows.length;
      rows.push(node);
      if (node.children) scanNodes(node.children);
    }
  }
  scanNodes(treeRows);
  //console.log(rows);
  return rows;
},

 

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

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

相关文章

精准无误的公文材料:感谢爱校对软件

在公文处理的过程中&#xff0c;无论是机构还是企业&#xff0c;我们都追求精准无误的结果。在这个信息化、智能化不断发展的时代&#xff0c;爱校对软件以其卓越的性能和优质的服务&#xff0c;赢得了大家的广泛好评。 首先&#xff0c;爱校对软件采用了最新的自然语言处理和…

深入了解msfconsole功能详解

一、前言 正如上篇文章所述&#xff0c;刚开始接触msf&#xff0c;单纯是为了分析某些漏洞&#xff0c;然后在msf中查找相应漏洞软件版本&#xff0c;系统版本的exp便于漏洞分析&#xff0c;同时进行偶尔的exp修改&#xff0c;这就是初期对于msf的使用&#xff0c;以至于我认为…

ai写真制作让你的照片焕发异彩

最近&#xff0c;越来越多的人开始使用ai写真应用程序来美化他们的照片。这些应用程序使用人工智能技术来将人们的照片变成更有艺术感的写真照&#xff0c;是人们的照片看起来更加生动、自然。今天&#xff0c;我将通过几幅生动的ai写真照片&#xff0c;来带你深入探索ai写真ap…

高等数学教材重难点题型总结(三)微分中值定理和导数的应用

第三章&#xff0c;微分中值定理的证明题等&#xff0c;非常重要&#xff0c;需要牢牢掌握 1.证明中值定理对某函数在给定区间上的正确性 2.与中值定理有关的证明题 3.微分中值定理应用于求证不等式 4.洛必达法则求极限 5.洛必达的经典错误反例 6.按某项实现多项式幂展开 7.求带…

外卖订餐系统源码:数字化餐饮新篇章

在当今数字化时代&#xff0c;外卖订餐系统源码成为餐饮行业的一颗明星&#xff0c;为餐厅和顾客提供了无与伦比的便捷体验。在本文中&#xff0c;我们将一起探索一个简单的外卖订餐系统源码示例&#xff0c;了解它是如何将美食带到您的门口的。 # 导入所需模块 import time#…

影响力再度提升,Smartbi多次蝉联Gartner、IDC等权威认可

近期&#xff0c;思迈特软件捷报频传&#xff0c;Smartbi凭借技术创新实力和产品能力&#xff0c;成功入选Gartner中国增强数据分析代表厂商及自助分析代表厂商&#xff0c;同时&#xff0c;连续三年蝉联“IDC中国FinTech 50”榜单。 Part.1 再次被Gartner提名 Smartbi深度融…

实现动画的连续展示 JAVA

目录 1、前言&#xff1a;2、图片的展示以及自动关闭&#xff1a;3、动画的连续展示&#xff1a; 1、前言&#xff1a; 要实现动画的流畅展示需要在能展示图片的基础上对图片进行关闭&#xff0c;再切换下一张图片&#xff0c;这要关闭窗口&#xff0c;与延时函数以及while函数…

FreeModbus——移植(三)

参考自&#xff1a;手把手教你移植FreeModbus到STM32【看评论区引导&#xff0c;领取全套资料包】_freemodbus移植_HQYJ520的博客-CSDN博客 1.准备源码 1.这里用到串口进行传输&#xff0c;所以我没拷贝一个正常的串口工程&#xff08;我用的是正点原子f4库函数版本&#xff…

C++之map的emplace与pair插入键值对用例(一百七十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【Python】解决 pip 开了网络代理之后无法安装包的问题

问题描述 开了网络代理之后&#xff0c;python 的 pip 就无法安装包了&#xff0c;报如下错误&#xff1a; $ pip install netsm Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, sta…

爬虫逆向实战(二)--某某观察城市排行榜

一、数据接口分析 主页地址&#xff1a;某某观察 1、抓包 通过抓包可以发现数据接口是multi 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无请求头是否加密&#xff1f; 无cookie是否加密&#xff1f; 无响应数据是否加密&#xff1f; 通过查看“响应”板块可以…

Web菜鸟教程 - Springboot接入认证授权模块

网络安全的重要性不言而喻&#xff0c;如今早已不是以前随便弄个http请求就能爬到数据的时代&#xff0c;而作为一个架构师&#xff0c;网络安全必须在产品开发之初就考虑好。因为在产品开发的后期&#xff0c;一方面是客户增多&#xff0c;压力变大&#xff0c;可供利用的时间…

指针作为函数参数间接赋值成立的三个条件,例程,内存调用模型

#include <stdio.h> #include <stdlib.h> int config_read(char * filep, char *** p, int * len) { printf(“config file name is :%s\n”, filep); char ** tempP (char**)malloc(sizeof(char *)*10); for(int i 0; i<10; i) {tempP[i] (char *)malloc(2…

LC-相同的树

LC-相同的树 链接&#xff1a;https://leetcode.cn/problems/same-tree/solutions/363636/xiang-tong-de-shu-by-leetcode-solution/ 描述&#xff1a;给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并…

驱动DAY4 字符设备驱动分步注册和ioctl函数点亮LED灯

头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X50007000 #d…

Next.js - Pages and Layouts

Pages 页面是路由独有的用户界面。你可以通过从 page.js 文件导出组件来定义页面。使用嵌套文件夹定义路由&#xff0c;并使用 page.js 文件公开访问路由。 // app/page.tsx is the UI for the / URL export default function Page() {return <h1>Hello, Home page!<…

python爬虫7:实战1

python爬虫7&#xff1a;实战1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库 0、背景1、基本环境2、搭建交叉编译环境3、在交叉编译服务器上交叉编译安装unixODBC3.1 下载unixODBC3.2 交叉编译unixODBC3.2.1 基本编译说明3.2.2 交叉编译说明3.2.3 ./configure -build,-host,-target…

iTOP-RK3399开发板开发板作为客户端- ssh使用

默认使用本地用户为远程登录时的用户&#xff1b;远程连接虚拟机里面的 Ubuntu&#xff08;IP 地址为 192.168.1.20&#xff09;&#xff0c; 如下图所示&#xff1a; ssh 192.168.1.20 以指定用户身份连接至服务器,输入以下命令&#xff1a; 输入 exit 退出 ssh 登录。 更多…

基础设施SIG月度动态:龙蜥大讲堂 - 基础设施系列专题分享火热进行中(7~8 月上旬持续分享),敬请关注!

基础设施 SIG&#xff08;OpenAnolis Infra SIG&#xff09;目标&#xff1a;负责 OpenAnolis 社区基础设施工程平台的建设&#xff0c;包括官网、Bugzilla、Maillist、ABS、ANAS、CI 门禁以及社区 DevOps 相关的研发工程系统。 01 SIG 整体进展 1、龙蜥大讲堂 - 基础设施系…