ext portal+dwr+spring实现个性主页面拖拉效果的核心代码

简介: ext portal+dwr+spring实现个性主页面拖拉效果的核心代码
个性化主页设置,左边是一棵树,左边是一个portal.点击树加载到portal中去,实现了与数据库的交互.ccom.dzf.indexset = function(config) {    Ext.apply(this,config);    this.init();};Ext.extend(com.dzf.indexset, Ext.util.Observable, {    init : function() {        this.createWin();    },    createWin : function() {        var proxy = this;        var win = new Ext.Window({            height : 450,            width : 800,            items : [{                xtype : 'tabpanel',                border : false,                activeTab : 0,                defaults : {                    height : 380                },                items : [{                            title : '主页设置',                            layout : 'column',                            border : false,                            items : [{                                        columnWidth : .2,                                        title : '模块列表',                                        defaults : {                                            height : 380                                        },                                        items : [this.getTree()]                                    }, {                                        xtype : 'portal',                                        columnWidth : .8,                                        id : 'portalset',                                        defaults : {                                            height : 380                                        }                                    }]                        }, {                            title : '设置密码'                        }]            }],            buttons : [{                text : '确定',                handler : function() {                    win.close();                    var portal= Ext.getCmp(proxy.panelid);                    //portal.desto;                     items=portal.items.items[0].destroy();//                    for(var i=0;i<items.length;i++){ //                        var p=items[i].items.items; //                        items[i].doLayout();                         for(var j=0;j<p.length;j++){                             count++;                         } //                    } //                    portal.doLayout();                     new com.dzf.index({                        panelid : 'center-panel',                        margins : '35 5 5 5',                        style : 'padding:0px 10px 0px 10px'                    });                }            }]        });        win.show();    },    getTree : function() {        var tree = new Ext.tree.TreePanel({            border : false,            onlyLeafCheckable : false,            checkModel : "multiple",            id : 'tree',            autoScroll : true,            enableDD : false,            containerScroll : true,            rootVisible : false,            loader : new Ext.tree.DWRTreeLoader({                dwrCall : indexportalService.getUserModule,                getParams : function(node) {                    return {};                },                baseAttrs : {                    uiProvider : Ext.tree.TreeCheckNodeUI                }            }),            tools : [{                id : 'refresh',// 根据id的不同会出现不同的按钮                 handler : function() {                    var tree = Ext.getCmp('extExample-tree-checkboxTree');                    tree.root.reload();// 让根节点重新加载                     tree.body.mask('数据加载中……', 'x-mask-loading');// 给tree的body加上蒙版                     tree.root.expand(true, false, function() {                                tree.body.unmask();// 全部展开之后让蒙版消失                                 indexportalService.getPortalColumns(com.dzf.indexset.prototype.BuildPortColumn);                            });                }            }]        });        var root = new Ext.tree.AsyncTreeNode({            text : '根',            draggable : false        });        tree.setRootNode(root);        root.expand(true, false, function() {            indexportalService.getPortalColumns(com.dzf.indexset.prototype.BuildPortColumn);        });//        root.loadComplete(true, false, function() { //            indexportalService.getPortalColumns(com.dzf.indexset.prototype.BuildPortColumn); //        });         treeCheckAction = function(node, checked) {            var id = node.id;            var title = node.text;            var portlet = Ext.getCmp(id+"set");            if (checked) {                if (portlet) {                    return;                }                var count=0;                var portal= Ext.getCmp("portalset").items.items;                for(var i=0;i<portal.length;i++){                    var p=portal[i].items.items;                    for(var j=0;j<p.length;j++){                        count++;                    }                }                if(count<=4){                    var order = 0;                    var parent = Ext.getCmp("portalcolumn" + node.attributes.userid                            + node.attributes.modulecolumn + "set");                    var panel = new Ext.ux.Portlet({                        id : id+"set",                        title : title                    });                    if (!parent) {                        parent = Ext.getCmp("portalset").items.items[0];                    }                    parent.add(panel);                    parent.doLayout();                    order = parent.items.items.length - 1;                    var params = {                        id : id,                        order : order,                        columnwidth : parent.columnWidth                    };                    indexportalService.savePortlet(params);                }else{                    node.ui.checkbox.checked = false;                    Ext.MessageBox.alert("提示","你最多能选择5个!")                }            } else {                com.dzf.indexset.prototype.removePorlet(portlet);            }        }        tree.on("check", treeCheckAction, this);        return tree;    },    tools : [{        id : 'close',        handler : function(e, target, panel) {            com.dzf.indexset.prototype.removePorlet(panel);        }    }],    removePorlet : function(panel) {        // Ext.Msg.confirm('删除模块', '您确认要删除"' + panel.title + '"吗?',         // function(btn,         // text) {         // if (btn == 'yes') {         var id = panel.id;        var columnid = panel.ownerCt.id;        var params = {            id : id,            columnid : columnid        };        // 发送删除数据的请求         indexportalService.removePorlet(params, function(data) {                    var json = Ext.util.JSON.decode(data);                    if (json.success) {                        var id = panel.id;                        var parent=panel.ownerCt;                        parent.remove(panel, true);                        parent.doLayout();                        if(id.indexOf("set")>0)                           id=id.substring(0,id.indexOf("set"));                        Ext.getCmp("tree").getNodeById(id).ui.checkbox.checked = false;                    } else {                        Ext.Msg.alert('WebMessage', panel.title + '删除失败!');                    }                });        // } else {         // return;         // }         // });     },    BuildPortColumn : function(data) {        var jsonData = Ext.util.JSON.decode(data);        for (var i = 0; i < jsonData.length; i++) {            var columnid = jsonData[i].fuserprocolumn_id + "set";            var columnwidth = jsonData[i].fuserprocolumn_width / 100;            var portal = Ext.getCmp("portalset");            var PortalColumn = new Ext.ux.PortalColumn({                id : columnid,                columnWidth : columnwidth,                style : 'padding:10px 0 10px 10px',                defaults : {                    tools : com.dzf.indexset.prototype.tools,                    height : 60                }            });            portal.add(PortalColumn);            portal.doLayout();        }        indexportalService                .getPortalPortlet(com.dzf.indexset.prototype.BuildPortletSet);    },    BuildPortletSet : function(data) {        var jsonData = Ext.util.JSON.decode(data);        for (var i = 0; i < jsonData.length; i++) {            var columnid = jsonData[i].fuserprocolumn_id + "set";            var id = jsonData[i].modelcode+"set";            var title = jsonData[i].modelname;            var order = jsonData[i].fuserprofile_order;            var parent = Ext.getCmp(columnid);            if (!parent) {                parent = Ext.getCmp("portalset").items.items[0];            }            var panel = new Ext.ux.Portlet({                id : id,                title : title            });            parent.add(panel);            parent.doLayout();            if(id.indexOf("set")>0)                id=id.substring(0,id.indexOf("set"));            Ext.getCmp("tree").getNodeById(id).ui.checkbox.checked = true;        }    }})protal源码改了下 可以进行移动保存Ext.ux.Portlet = Ext.extend(Ext.Panel, {            anchor : '100%',            collapsible : true,            draggable : true,            cls : 'x-portlet'        });Ext.reg('portlet', Ext.ux.Portlet);Ext.ux.PortalColumn = Ext.extend(Ext.Container, {            layout : 'anchor',            autoEl : 'div',            defaultType : 'portlet',            cls : 'x-portal-column'        });Ext.reg('portalcolumn', Ext.ux.PortalColumn);Ext.ux.Portal = Ext.extend(Ext.Panel, {            layout : 'column',            autoScroll : true,            cls : 'x-portal',            defaultType : 'portalcolumn',            initComponent : function() {                Ext.ux.Portal.superclass.initComponent.call(this);                this.addEvents({                    validatedrop : true,                    beforedragover : true,                    dragover : true,                    beforedrop : true,                    drop : true                });            },            initEvents : function() {                Ext.ux.Portal.superclass.initEvents.call(this);                this.dd = new Ext.ux.Portal.DropZone(this,                        this.dropConfig);            },            beforeDestroy : function() {                if (this.dd) {                    this.dd.unreg();                }                Ext.ux.Portal.superclass.beforeDestroy.call(this);            }        });Ext.reg('portal', Ext.ux.Portal);Ext.ux.Portal.DropZone = function(portal, cfg) {    this.portal = portal;    Ext.dd.ScrollManager.register(portal.body);    Ext.ux.Portal.DropZone.superclass.constructor.call(this,            portal.bwrap.dom, cfg);    portal.body.ddScrollConfig = this.ddScrollConfig;};Ext.extend(Ext.ux.Portal.DropZone, Ext.dd.DropTarget, {    ddScrollConfig : {        vthresh : 50,        hthresh : -1,        animate : true,        increment : 200    },    createEvent : function(dd, e, data, col, c, pos) {        return {            portal : this.portal,            panel : data.panel,            columnIndex : col,            column : c,            position : pos,            data : data,            source : dd,            rawEvent : e,            status : this.dropAllowed        };    },    notifyOver : function(dd, e, data) {        var xy = e.getXY(), portal = this.portal, px = dd.proxy;        // case column widths         if (!this.grid) {            this.grid = this.getGrid();        }        // handle case scroll where scrollbars appear during drag         var cw = portal.body.dom.clientWidth;        if (!this.lastCW) {            this.lastCW = cw;        } else if (this.lastCW != cw) {            this.lastCW = cw;            portal.doLayout();            this.grid = this.getGrid();        }        // determine column         var col = 0, xs = this.grid.columnX, cmatch = false;        for (var len = xs.length; col < len; col++) {            if (xy[0] < (xs[col].x + xs[col].w)) {                cmatch = true;                break;            }        }        // no match, fix last index         if (!cmatch) {            col--;        }        // find insert position         var p, match = false, pos = 0, c = portal.items.itemAt(col), items = c.items.items;        for (var len = items.length; pos < len; pos++) {            p = items[pos];            var h = p.el.getHeight();            if (h !== 0 && (p.el.getY() + (h / 2)) > xy[1]) {                match = true;                break;            }        }        var overEvent = this.createEvent(dd, e, data, col, c, match && p                        ? pos                        : c.items.getCount());        if (portal.fireEvent('validatedrop', overEvent) !== false                && portal.fireEvent('beforedragover', overEvent) !== false) {            // make sure proxy width is fluid             px.getProxy().setWidth('auto');            if (p) {                px.moveProxy(p.el.dom.parentNode, match ? p.el.dom : null);            } else {                px.moveProxy(c.el.dom, null);            }            this.lastPos = {                c : c,                col : col,                p : match && p ? pos : false            };            this.scrollPos = portal.body.getScroll();            portal.fireEvent('dragover', overEvent);            return overEvent.status;;        } else {            return overEvent.status;        }    },    notifyOut : function() {        delete this.grid;    },    notifyDrop : function(dd, e, data) {        delete this.grid;        if (!this.lastPos) {            return;        }        var c = this.lastPos.c, col = this.lastPos.col, pos = this.lastPos.p;        var dropEvent = this.createEvent(dd, e, data, col, c, pos !== false                        ? pos                        : c.items.getCount());        if (this.portal.fireEvent('validatedrop', dropEvent) !== false                && this.portal.fireEvent('beforedrop', dropEvent) !== false) {            dd.proxy.getProxy().remove();            dd.panel.el.dom.parentNode.removeChild(dd.panel.el.dom);            if (pos !== false) {                c.insert(pos, dd.panel);            } else {                c.add(dd.panel);            }            /**             * 取得当前portlet在portal column中的索引             */            var index = 0;            var portletId = dd.panel.id;            if (pos != false) {                var portlets = c.items;                for (var i = 0; i < portlets.length; i++) {                    if (c.items.itemAt(i).id === portletId) {                        index = i;                        break;                    }                }            } else {                if (pos.toString() == '0') {                    index = 0;                } else {                    index = c.items.length - 1;                }            }                        c.doLayout();            //更新移动后的Portlet             var params ={                id : dd.panel.id,                columnid:c.id,                forder : index            };            indexportalService.movePortlet(params);                        this.portal.fireEvent('drop', dropEvent);            // scroll position is lost on drop, fix it             var st = this.scrollPos.top;            if (st) {                var d = this.portal.body.dom;                setTimeout(function() {                            d.scrollTop = st;                        }, 10);            }        }        delete this.lastPos;    },    // internal cache of body and column coords     getGrid : function() {        var box = this.portal.bwrap.getBox();        box.columnX = [];        this.portal.items.each(function(c) {            box.columnX.push({                x : c.el.getX(),                w : c.el.getWidth()            });        });        return box;    },    // unregister the dropzone from ScrollManager     unreg : function() {        // Ext.dd.ScrollManager.unregister(this.portal.body);         Ext.ux.Portal.DropZone.superclass.unreg.call(this);    }});


目录
相关文章
|
9月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1066 3
|
8月前
|
人工智能 监控 Java
零代码改造 + 全链路追踪!Spring AI 最新可观测性详细解读
Spring AI Alibaba 通过集成 OpenTelemetry 实现可观测性,支持框架原生和无侵入探针两种方式。原生方案依赖 Micrometer 自动埋点,适用于快速接入;无侵入探针基于 LoongSuite 商业版,无需修改代码即可采集标准 OTLP 数据,解决了原生方案扩展性差、调用链易断链等问题。未来将开源无侵入探针方案,整合至 AgentScope Studio,并进一步增强多 Agent 场景下的观测能力。
3007 93
|
8月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
9月前
|
安全 IDE Java
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码
本文介绍了如何在 Spring 应用程序中使用 Project Lombok 的 `@Data` 和 `@FieldDefaults` 注解来减少样板代码,提升代码可读性和可维护性,并探讨了其适用场景与限制。
323 0
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码
|
12月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1636 1
Spring boot 使用mybatis generator 自动生成代码插件
|
11月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
12月前
|
Java 调度 流计算
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
577 0
|
人工智能 前端开发 Java
十几行代码实现 Manus,Spring AI Alibaba Graph 快速预览
Spring AI Alibaba Graph 的核心开发已完成,即将发布正式版本。开发者可基于此轻松构建工作流、智能体及多智能体系统,功能丰富且灵活。文章通过三个示例展示了其应用:1) 客户评价处理系统,实现两级问题分类与自动处理;2) 基于 ReAct Agent 的天气预报查询系统,循环执行用户指令直至完成;3) 基于 Supervisor 多智能体的 OpenManus 实现,简化了流程控制逻辑并优化了工具覆盖度。此外,还提供了运行示例的方法及未来规划,欢迎开发者参与贡献。
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
4685 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具

热门文章

最新文章