提供一键恢复功能,点击恢复默认设置即可恢复到原有界面 保存到数据库设置需要建立表Portal 提供下面的字段 private Long id; private String userId;//用户ID private Long portalColumn; private Long portalRow; private String portletId;//容器ID js代码如下: var jsonData; Ext.onReady(function() { Ext.QuickTips.init(); var fullPanel = new FullPanel(); fullPanel.portal.init(); }); Ext.apply(window, { $ : Ext.get, $A : Ext.value, $C : Ext.getCmp, $D : Ext.getDom, $$ : Ext.select, $Q : Ext.query, $on : Ext.EventManager.on, $ready : Ext.onReady, $l : console.log, $cd : console.dir, $for : typeof forEach != 'undefined' ? forEach : Ext.each }); FullPanel = Ext.extend(Ext.Panel, { portal : null, // portal constructor : function() { this.portal = new StartPortal(); FullPanel.superclass.constructor.call(this, { renderTo : Ext.getBody(), id : 'fullPanel', height : Ext.getBody().getHeight(), width : Ext.getBody().getViewSize().width, autoScroll : false, layout : 'fit', bodyStyle : 'padding:0px 0px 0px 0px; overflow-x:hidden;', tbar : [ { xtype : 'label', id : 'onLineMsg', title : '' }, '->', '-', { text : '恢复默认', iconCls : 'resume', handler : this.onResumeClick, scope : this }, '-', { text : '保存我的设置', iconCls : 'save', handler : this.onSaveClick, scope : this }, '-' ] /* * , listeners: { 'render': {fn : this.onRenderEvent, scope: this} } */ }); }, onRenderEvent : function(panel) { }, onResumeClick : function() { try { this.portal.removeAllportlet(); this.portal.restore(); } catch (e) { } }, onSaveClick : function() { var arr = []; if (!this.portal.items || this.portal.items.length == 0) return; for ( var i = 0; i < this.portal.items.length; i++) { var col = this.portal.items.items[i]; for ( var j = 0; j < col.items.length; j++) { var portlet = col.items.items[j]; var portletId = col.items.items[j].id; var rowNum = col.items.indexOf(portlet); var colNum = i; var str = portletId + ',' + colNum + ',' + rowNum; console.info(str); arr.push(str); } } // PortalManager.savePortal(arr, function(data) { // if(data) { // // } else { // // } // }); } }); StartPortal = Ext.extend(Ext.ux.Portal, { leftColumn : null, centerColumn : null, rightColumn : null, treePanel1 : null, treePanel2 : null, treePanel3 : null, treePanel4 : null, treePanel5 : null, treePanel6 : null, constructor : function() { StartPortal.superclass.constructor.call(this, { region : 'center', autoScroll : false, border : false }); }, restore : function() { // 恢复默认 this.initAllComponent(); this.leftColumn.add(this.createPortlet('alarmChartPanel', '告警统计', this.treePanel1)); this.leftColumn.add(this.createPortlet('deviceChartPanel', '故障测试统计', this.treePanel2)); this.centerColumn.add(this.createPortlet('onuChartPanel', '设备统计', this.treePanel3)); this.centerColumn.add(this.createPortlet('testCountPanel', '厂商统计', this.treePanel4)); this.rightColumn.add(this.createPortlet('factoryStaticPanel', 'ONU运行状态统计', this.treePanel5)); this.rightColumn.add(this.createPortlet('topNPanel', '最近TOPN流量统计', this.treePanel6)); this.reDoLayout(); }, init : function() { // 初始化 // if(!jsonData || jsonData.length == 0) { // this.restore(); // return; // } this.initAllComponent(); // for(var i=0, len=jsonData.length; i<len; i++) { // var id = jsonData[i].portletId; // var colNum = jsonData[i].portalColumn; // var rowNum = jsonData[i].portalRow; // var title, panel; // for(var props in this.portletObj) { // if(this.portletObj.hasOwnProperty(props)) { // var propValue = (this.portletObj)[props]; // if(propValue['idx'] === id) { // title = propValue['title']; // panel = propValue['panel']; // break; // } // } // } // if(colNum == 0) { // this.leftColumn.add(this.createPortlet(id,title,panel)); // } else if(colNum == 1) { // this.centerColumn.add(this.createPortlet(id,title,panel)); // } else if(colNum == 2) { // this.rightColumn.add(this.createPortlet(id,title,panel)); // } // } this.leftColumn.add(this.createPortlet('alarmChartPanel', '告警柱统计', this.treePanel1)); this.leftColumn.add(this.createPortlet('deviceChartPanel', '设备统计', this.treePanel2)); this.centerColumn.add(this.createPortlet('onuChartPanel', 'ONU运行状态统计', this.treePanel3)); this.centerColumn.add(this.createPortlet('testCountPanel', '故障测试统计', this.treePanel4)); this.rightColumn.add(this.createPortlet('factoryStaticPanel', '厂商统计', this.treePanel5)); this.rightColumn.add(this.createPortlet('topNPanel', '最近TOPN流量统计', this.treePanel6)); this.reDoLayout(); }, removeAllportlet : function() { // 移除所有的portlet if (this.items && this.items.length > 0) { for ( var i = 0; i < this.items.length; i++) { var c = this.items.itemAt(i); if (c.items) { for ( var j = c.items.length - 1; j >= 0; j--) { c.remove(c.items.itemAt(j), true); } } } } }, initAllComponent : function() { var that = this; this.portletObj = {}; // 所有的portlet this.leftColumn = this.createColumn('left', .33); this.centerColumn = this.createColumn('center', .33); this.rightColumn = this.createColumn('right', .34); // 最近TOP10流量统计 this.treePanel1 = new TreePanel1(); this.treePanel2 = new TreePanel2(); this.treePanel3 = new TreePanel3(); this.treePanel4 = new TreePanel4(); this.treePanel5 = new TreePanel5(); this.treePanel6 = new TreePanel6(); // this.portletObj.treePanel1 = {idx: 'alarmChartPanel', title: '告警柱统计', // panel:this.treePanel1}; // this.portletObj.treePanel2= {idx: 'deviceChartPanel', title: '设备统计', // panel: this.treePanel2}; // this.portletObj.treePanel3= {idx: 'onuChartPanel', title: // 'ONU运行状态统计', panel: this.treePanel3}; // this.portletObj.treePanel4 = // {idx:'testCountPanel',title:'故障测试统计',panel:this.treePanel4}; // this.portletObj.treePanel5 = // {idx:'factoryStaticPanel',title:'厂商统计',panel:this.treePanel5}; // this.portletObj.treePanel6 = // {idx:'topNPanel',title:'最近TOPN流量统计',panel:this.treePanel6}; }, reDoLayout : function() { // 重新布局 this.add(this.leftColumn); this.add(this.centerColumn); this.add(this.rightColumn); var fullPanel = Ext.getCmp('fullPanel'); fullPanel.add(this); fullPanel.doLayout(); }, createPortlet : function(id, title, items) { return new Ext.ux.Portlet({ id : id, title : title, tools : [ { id : 'close', handler : function(e, target, panel) { try { panel.ownerCt.remove(panel, true); // throw new Error("关闭窗口时出现了一个错误!"); } catch (e) { } } } ], style : 'padding:0px 0 5px 0px', items : items }); }, createColumn : function(id, columnWidth) { return new Ext.ux.PortalColumn({ id : id, columnWidth : columnWidth, style : 'padding:5px 0 5px 5px' }); } }); TreePanel1 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel1.superclass.constructor.call(this, { id : 'tree1', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } }) TreePanel2 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel2.superclass.constructor.call(this, { id : 'tree2', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } }) TreePanel3 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel3.superclass.constructor.call(this, { id : 'tree3', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } }) TreePanel4 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel4.superclass.constructor.call(this, { id : 'tree4', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } }) TreePanel5 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel5.superclass.constructor.call(this, { id : 'tree5', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } }) TreePanel6 = Ext.extend(Ext.tree.TreePanel, { constructor : function() { TreePanel6.superclass.constructor.call(this, { id : 'tree6', region : 'center', autoScroll : true, animate : true, width : '280', collapsible : (this.centerRegion == 'center' ? false : true), split : true, enableDD : true, containerScroll : true, border : false, loader : new Ext.tree.TreeLoader({ url : '/neFunction/tes' }), root : new Ext.tree.AsyncTreeNode({ id : "0", level : "0", text : "菜单树" }), rootVisible : true }); } })
相关推荐
在EXTJS中,"Portal"组件是一种特殊的布局方式,允许用户自定义和排列页面上的内容区块,类似于个人门户的功能。EXTJS 2.0版本虽然相对较老,但其Portal组件仍然具有很高的实用价值,特别是对于那些需要用户高度...
《EXTJS实现的仿Windows门户组件——Portal2详解》 EXTJS是一款强大的JavaScript库,用于构建富客户端Web应用。在EXTJS中,Portal2组件是一个非常实用的功能,它模仿了Windows系统的桌面风格,允许用户自定义布局,...
4. **js做的Portal**:虽然ExtJS已经提供了强大的Portal功能,但纯JavaScript也可以实现类似的功能。通过JavaScript,开发者可以利用事件监听和DOM操作来创建自定义的门户布局。 从提供的压缩包文件名来看,我们...
漫画作品与时间旅行题材
Spring Boot特点: 1、创建一个单独的Spring应用程序; 2、嵌入式Tomcat,无需部署WAR文件; 3、简化Maven配置; 4、自动配置Spring; 5、提供生产就绪功能,如指标,健康检查和外部配置; 6、绝对没有代码生成和XML的配置要求;第一章 绪 论 1 1.1背景及意义 1 1.2国内外研究概况 2 1.3 研究的内容 2 第二章 关键技术的研究 3 2.1 相关技术 3 2.2 Java技术 3 2.3 ECLIPSE 开发环境 4 2.4 Tomcat介绍 4 2.5 Spring Boot框架 5 第三章 系统分析 5 3.1 系统设计目标 6 3.2 系统可行性分析 6 3.3 系统功能分析和描述 7 3.4系统UML用例分析 8 3.4.1管理员用例 9 3.4.2用户用例 9 3.5系统流程分析 10 3.5.1添加信息流程 11 3.5.2操作流程 12 3.5.3删除信息流程 13 第四章 系统设计 14 4.1 系统体系结构 15 4.2 数据库设计原则 16 4.3 数据表 17 第五章 系统实现 18 5.1用户功能模块 18 5.2
内容概要:本文作为PyTorch的入门指南,首先介绍了PyTorch相较于TensorFlow的优势——动态计算图、自动微分和丰富API。接着讲解了环境搭建、PyTorch核心组件如张量(Tensor)、autograd模块以及神经网络的定义方式(如nn.Module),并且给出了详细的神经网络训练流程,包括前向传播、计算损失值、进行反向传播以计算梯度,最终调整权重参数。此外还简要提及了一些拓展资源以便进一步探索这个深度学习工具。 适用人群:初次接触深度学习技术的新学者和技术爱好者,有一定程序基础并希望通过PyTorch深入理解机器学习算法实现的人。 使用场景及目标:该文档有助于建立使用者对于深度学习及其具体实践有更加直观的理解,在完成本教程之后,读者应当能够在个人设备上正确部署Python环境,并依据指示独立创建自己的简易深度学习项目。 其他说明:文中所提及的所有示例均可被完整重现,同时官方提供的资料链接也可以方便有兴趣的人士对感兴趣之处继续挖掘,这不仅加深了对PyTorch本身的熟悉程度,也为未来的研究或者工程项目打下了良好的理论基础和实践经验。
古镇美食自驾游:舌尖上的历史韵味
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
漫画作品与神话传说融合
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ADC推理软件AI程序
漫画作品与科幻元素融合
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
java-springboot+vue景区民宿预约系统实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip
在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。
边境自驾游异国风情深度体验
在智慧城市建设的大潮中,智慧园区作为其中的璀璨明珠,正以其独特的魅力引领着产业园区的新一轮变革。想象一下,一个集绿色、高端、智能、创新于一体的未来园区,它不仅融合了科技研发、商业居住、办公文创等多种功能,更通过深度应用信息技术,实现了从传统到智慧的华丽转身。 智慧园区通过“四化”建设——即园区运营精细化、园区体验智能化、园区服务专业化和园区设施信息化,彻底颠覆了传统园区的管理模式。在这里,基础设施的数据收集与分析让管理变得更加主动和高效,从温湿度监控到烟雾报警,从消防水箱液位监测到消防栓防盗水装置,每一处细节都彰显着智能的力量。而远程抄表、空调和变配电的智能化管控,更是在节能降耗的同时,极大地提升了园区的运维效率。更令人兴奋的是,通过智慧监控、人流统计和自动访客系统等高科技手段,园区的安全防范能力得到了质的飞跃,让每一位入驻企业和个人都能享受到“拎包入住”般的便捷与安心。 更令人瞩目的是,智慧园区还构建了集信息服务、企业服务、物业服务于一体的综合服务体系。无论是通过园区门户进行信息查询、投诉反馈,还是享受便捷的电商服务、法律咨询和融资支持,亦或是利用云ERP和云OA系统提升企业的管理水平和运营效率,智慧园区都以其全面、专业、高效的服务,为企业的发展插上了腾飞的翅膀。而这一切的背后,是大数据、云计算、人工智能等前沿技术的深度融合与应用,它们如同智慧的大脑,让园区的管理和服务变得更加聪明、更加贴心。走进智慧园区,就像踏入了一个充满无限可能的未来世界,这里不仅有科技的魅力,更有生活的温度,让人不禁对未来充满了无限的憧憬与期待。