起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4997|回复: 1

[分享] 怎么在5.3.6js中动态生成树形编码

  [复制链接]

37

主题

67

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
QQ
发表于 2016-11-21 10:59:25 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
因为原来5.2.7中有分享了怎么在JS中动态生成树形编码,但在5.3.6中那方法就用不了了。看了好多贴子,要嘛就是在后台处理的,要嘛就是没怎么说清楚。研究了段时间,走了不少弯路,但好在终于弄出来了,下面是我具体代码实现,大家可参考:
1、先定义几个全局字段用于存放值
        var bfID, bpID, bcode,bname = "";
        var afID, apID = "";
2、data新增前事件:
              // 新增前获取当前行FID
                bfID = event.source.getCurrentRowID();
                // 当值等于UNDFIND的时候赋值为空
                if (!bfID)
                        bfID = "";
                // 新增前获取当前行父ID
                bpID = event.source.getValueByID("XPIDS", bfID);
                if (!bpID)
                        bpID = "";
                // 新增前获取当前行编码
                bcode = event.source.getValueByID("CodeRL", bfID);
                if (!bcode)
                        bcode = "";
                bname = event.source.getValueByID("NameRL", bfID);
                if (!bcode)
                        bname = "";       
3、自定义一个方法根据参数值返回编码:
                    Model.prototype.getNodeMaxCode = function(parentID) {
                var maxCode = "";
                var mainData = this.comp('PConRecListData');
                // 定义一个数组用于存取每行FID
                var rows = new Array();
                // 循环遍历DATA,取得每行的FID
                mainData.each(function(param) {
                        // 取得每行FID
                        var fid = param.row.val('PConRecList');
                        // 根据每行FID得到该行的父ID
                        var xpids = mainData.getValueByID('XPIDS', fid);

                        if (!xpids)
                                xpids = "";

                        if (parentID == xpids && fid != afID) {
                                rows.push(fid);
                        }
                });
                if (rows) {
                        if (rows.length == 0) {
                                maxCode = bcode + "01";
                        } else {
                                for (var int = 0; int < rows.length; int++) {
                                        if (maxCode < this.comp('PConRecListData').getValueByID("CodeRL", rows[int])) {
                                                maxCode = this.comp('PConRecListData').getValueByID("CodeRL", rows[int]);
                                        }
                                }
                                // 4
                                var len = maxCode.length;
                                // 01
                                var maxCodeLeft = maxCode.substr(0, len - 2);
                                // 04
                                var maxCodeRight = maxCode.substr(len - 2, 2);
                                // 05
                                maxCodeRight = justep.String.zeros(justep.String.toInt(maxCodeRight, 0) + 1, 2);
                                // 0105
                                maxCode = maxCodeLeft + maxCodeRight;
                        }
                }
                return maxCode;
        };

4、新增后事件:
                // 新增后获取当前行fID
                afID = event.source.getCurrentRowID();
                // 新增后获取当前行父ID
                apID = event.source.getValueByID("XPIDS", afID);
                // 当父ID等于UNDIFIN的时候赋值为空
                if (!apID)
                        apID = "";
                var bizData1 = this.comp('PConRecListData');
                var maxCode = "";
                if (apID == "") {// 新建根
                        maxCode = this.getNodeMaxCode("");
                } else if (bpID == apID) {// 当当前行父ID等于上行父ID的时候-新增同级
                        maxCode = this.getNodeMaxCode(apID);
                } else if (bfID == apID) {// 当当前行父ID等于上行FID的时候新增子级
                        maxCode = this.getNodeMaxCode(apID);
                }
                event.source.setValueByID('CodeRL', maxCode, afID);
                var PConRecListData = this.comp('PConRecListData');
                var CodeRL = event.source.getValueByID("CodeRL", apID);
                var NameRL = event.source.getValueByID("NameRL", apID);
                event.source.setValueByID('XPCO', CodeRL, afID);
                event.source.setValueByID('XPNA', NameRL, afID);

5、如果你先要树形级次汇总的话,那么就需要在值改变事件中写道:
            var bizData1 = this.comp('PConRecListData');
                var PConRecInforData = this.comp('PConRecInforData');
                        var fid = bizData1.getCurrentRowID();
                        var XPID = bizData1.getValueByID('XPIDS', fid);
                        if(XPID == undefined){}else{
                        var MonRL = 0;
                        var Num = 0;
                        var pir = 0;
                        bizData1.each(function(param) {
                                // 取得每行FID
                                var fid = param.row.val('PConRecList');
                                var AMonRL = bizData1.getValueByID('AMonRL', fid);
                                var NumRL = bizData1.getValueByID('NumRL', fid);
                                var ApirRL = bizData1.getValueByID('ApirRL', fid);
                                // 根据每行FID得到该行的父ID
                                var xpids = bizData1.getValueByID('XPIDS', fid);
                                if (!xpids)
                                        xpids = "";

                                if (xpids == XPID) {
                                        MonRL += AMonRL * 1;
                                        Num += NumRL * 1;
                                        pir += ApirRL * 1;
                                }
                        });               
                        this.comp('PConRecListData').to(XPID);
                        this.comp('PConRecListData').setValueByID('AMonRL', MonRL, XPID);
                        this.comp('PConRecListData').setValueByID('NumRL', Num, XPID);
                        this.comp('PConRecListData').setValueByID('ApirRL', pir, XPID);
                        var MonCI = this.comp('PConRecListData').sum('AMonRL');
                        PConRecInforData.setValue('ConMonRI', MonCI);

基本上就是这些,大家若有更好的方法可以提出来大家分享下

42

主题

162

帖子

672

积分

高级会员

Rank: 4

积分
672
QQ
发表于 2017-3-13 11:19:10 | 显示全部楼层
                       // 取得每行FID
                        var fid = param.row.val('PConRecList');你的PConRecList是什么意思啊,需要在前台添加个data组件么???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-3 21:55 , Processed in 0.064192 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表