为dwz扩展树形下拉框

简介: 为dwz扩展树形下拉框

前言:在之前的博客中写了一个不在dwz环境下制作的树形下拉框,但是使用dwz后,发现需要为dwz扩展一个自己的组件,通过value属性为服务端传递请求参数,通过title属性显示树形下拉框当前选中项目,效果图见如下:


image.png


改造步骤见如下:


第一步:准备材料,可在附件中下载combotree.7z ,目录如下


image.png


第二步:在dwz的index.jsp页面中准备菜单


<!-- 下拉框的树形菜单 -->

<div id="menuContent" style="display: none; position: absolute;">

 <ul id="combotree" class="ztree"></ul>

</div>

第三步:在combotree.js中封装组件内容


/**

* @author maweiqing

* @version 1.0

*/

(function($) {

$.extend(

    $.fn,

    {

     combotree : function(options) {

      var $this = $(this);

      loadProxysInfo();

   

      if ($this.val() != null && $this.val() != '') {

       $this.before("<span class='combo-text' style='float:left;display:block;width:"

         + $this.width() + "px' οnclick=\"showMenu($(this));\" >" + $this.attr("title") + "</span>");

      } else {

       $this.before("<span class='combo-text' style='float:left;display:block;width:"

         + $this.width() + "px' οnclick=\"showMenu($(this));\" >" + rootNode["name"] + "</span>");

      }

   

      $this.before("<span οnclick=\"showMenu($(this).prev());\" class=\"combo-arrow\" style=\"float:left\"></span>");

      $this.hide();

     }

    });

})(jQuery);


var setting = {

view : {

 dblClickExpand : false

},

data : {

 simpleData : {

  enable : true

 }

},

callback : {

 onClick : onClick

},

view : {

 selectedMulti : false,

 // showLine : false,

 showIcon : false

}

};


/**

* 隐藏菜单

*/

function hideMenu() {

$("#menuContent").fadeOut("fast");

$("body").unbind("mousedown", onBodyDown);

}


/**

* 点击菜单,对当前输入框的前span进行name的赋值,对当前输入框进行代理序列号的赋值

*

* @param e

* @param treeId

* @param treeNode

*/

function onClick(e, treeId, treeNode) {

$("#proxyserial").prev().prev().html(treeNode.name);

$("#proxyserial").attr({

 value : treeNode.id,

 title : treeNode.name

});

hideMenu();

}


/**

* 为当前节点添加下级节点

*

* @param records

* @param cnode

*/

function addNextNode(records, cnode) {

cnode["children"] = new Array();

cnode["open"] = true;

$(records).each(

  function(index, value) {

   // 如果当前代理的级别=len,且以pre开头的,则添加到上一级

   if ((value.proxyserial.length / 4 == cnode.id.length / 4 + 1)

     && (value.proxyserial.substring(0, cnode.id.length) == cnode.id)) {

    var subNode = {};

    subNode["name"] = value.proxysName;

    subNode["id"] = value.proxyserial;

    cnode["children"].push(subNode);

    addNextNode(records, subNode);

   }

  });

}


// 树形下拉框的节点数组

var proxyTreeData = [];


// 根节点

var rootNode = {};


/**

* 取得代理列表.

*/

function loadProxysInfo() {

// 当前树形结构没有获取代理节点时

if (proxyTreeData.length == 0) {

 $.ajax({

  url : common.ctx + "/member/loadProxysInfo.do",// 请求的URL

  async : false,

  dataType : 'json',

  success : function(records) {

   // 代理表中有代理

   if (records != null && records.length > 0) {

    // 取出root节点

    var nodes = records.slice(1);

    var root = records[0];


    // 从根节点开始

    rootNode["name"] = root.proxysName;

    rootNode["id"] = root.proxyserial;

    rootNode["open"] = true;

    rootNode["children"] = new Array();

 

    // 根节点有子节点

    if (nodes != null && nodes.length > 0) {

     // 设定当前代理的下级代理级别,假如当前代理为2级,那么2级的下级为3级

     var start = 1;

     if (root.proxyserial != null) {

      start = root.proxyserial.length / 4 + 1;

     }

   

     // 遍历子节点

     $.each(nodes, function(index, value) {

      if (value.proxyserial.length / 4 == start) {

       var subNode = {};

       subNode["name"] = value.proxysName;

       subNode["id"] = value.proxyserial;

       rootNode["children"].push(subNode);

       addNextNode(records, subNode);

      }

     });

    }

    proxyTreeData.push(rootNode);

    // 对tree进行赋值

    $.fn.zTree.init($("#combotree"), setting, proxyTreeData);

   }

  }

 });

}

}


/**

* 打开树形结构

*/

function showMenu($ctrl) {

var cityOffset1 = $ctrl.offset();

$("#menuContent").css({

 width : $ctrl.width() + $ctrl.next().width(),

 left : cityOffset1.left + "px",

 top : cityOffset1.top + $ctrl.outerHeight() + "px"

}).slideDown("fast");

$("body").bind("mousedown", onBodyDown);

}


/**

* 点击树形结构以外时,关闭树形下拉框

*

* @param event

*/

function onBodyDown(event) {

if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length > 0)) {

 hideMenu();

}

}

代码中对关键点进行说明,该组件内容主要是为了定制代理的多层级关系,如有需要,你需要变更的就是loadProxysInfo()方法



第四步:为dwz增加该组件的初始化,在dwz.ui.js文件中


$("ul.tree", $p).jTree();

$("input.combotree", $p).combotree();

$('div.accordion', $p).each(function(){

 var $this = $(this);

 $this.accordion({fillSpace:$this.attr("fillSpace"),alwaysOpen:true,active:0});

});


第五步:就可以在页面上进行使用了


<span class="combo">

     <input type="text" id="proxyserial" name="proxyserial" class="combotree" value="${vo.mo.proxyserial}" title="${proxyName}">

    </span>


总结:通过以上方式,就可以使用dwz的检索功能,通过服务端


initMembersList(BaseConditionVO vo, Model model, HttpServletRequest request)

// 获取对应代理名称

  if (proxyserial != null) {

   model.addAttribute("proxyName", this.proxysMapper.selectByProxyserial(proxyserial).getUsername());

  }

  condition.setProxyserial(proxyserial);

进行检索功能了

相关文章
|
算法 JavaScript 前端开发
递归的递归之书:第五章到第九章
递归的递归之书:第五章到第九章
344 0
|
存储 人工智能 测试技术
图像相似度比较之 CLIP or DINOv2
图像相似度比较之 CLIP or DINOv2
|
存储 自然语言处理 物联网
StableDiffusion-02 LoRA上手使用实测 尝试生成图片 使用多个LoRA 调整LoRA效果 10分钟上手 多图
StableDiffusion-02 LoRA上手使用实测 尝试生成图片 使用多个LoRA 调整LoRA效果 10分钟上手 多图
487 1
|
8月前
|
人工智能 IDE 开发工具
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
6252 18
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
|
搜索推荐 C语言
深入浅出理解 C 语言中的 qsort 函数
深入浅出理解 C 语言中的 qsort 函数
|
Java 测试技术 数据库
基于SpringBoot+HTML实现登录注册功能模块
基于SpringBoot+HTML实现登录注册功能模块
|
Linux 数据安全/隐私保护 Windows
linux 搭建cloudreve win映射网络驱动器WebDav
linux 搭建cloudreve win映射网络驱动器WebDav
549 2
|
Web App开发 编解码 算法
浅谈语音质量保障:如何测试 RTC 中的音频质量?
日常音视频开会中我们或多或少会遭遇这些场景:“喂喂喂,可以听到我说话吗?我听你的声音断断续续的”,“咦,我怎么可以听到回声?”,“太吵啦,我听不清楚你在说啥” 等等。这些语音质量问题影响音视频开会体验,如若是重要的会议,那足够让人 “恼羞成怒”。那么如何有效的减少这些问题发生呢?本系列文章就将为大家分享阿里云视频云在保障 RTC 语音质量方面的测试经验。
浅谈语音质量保障:如何测试 RTC 中的音频质量?
|
语音技术 传感器
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-1
|
缓存 监控 安全
云服务器公网流量异常排查指南
云服务器公网流量异常排查指南
1263 1