基于ExtJs的opoa系统
OPOA是one page ,one application的简称,即单页系统,也就是说一个系统只有一个页面。就是要求所有其他的页面都以插件的形式在主页里显示,点击主页的一个菜单或链接按钮,调用一个模块的插件。插件在主页里以tab的形式显示。OPOA的好处在于大大提高了系统页面的加载效率,提高用户的体验度,是web系统开发的一个趋势。
下面介绍一下基于Extjs的OPOA系统的主页面。它是扩展Ext.viewport构成的。
代码如下:
- Ext.ux.IndexPage = Ext.extend(Ext.Viewport, {
- // welcomeUrl : "<iframe id='welcomeFrame' name='welcomeFrame'
- // src='welcome.jsp' width='100%' height='100%' frameborder=0>",
- layout : "border",
- modelTree : new IRS.tree.modelTree(),
- factorTree : new IRS.tree.factorTree(),
- mainTab : new Ext.TabPanel({
- plain : false,
- activeTab : 0,
- enableTabScroll : true,
- region : "center",
- items : [{
- title : "欢迎",
- closable : false,
- html : "<img src='resources/iconp_w_picpaths/welcome.jpg'></img>"
- }]
- }),
- /**
- * 主要初始化function
- */
- initComponent : function() {
- // north部分panel
- this.topPanel = new IRS.panel.TopPanel({
- userName : g_userName,
- parent : this
- });
- // 根节点菜单
- this.rootMenu = new Ext.menu.Menu({
- items : [{
- text : "添加应用",
- handler : this.addApp,
- iconCls : "xy-add",
- scope : this
- }]
- });
- // 主界面布局
- this.items = [{
- region : "north",
- height : 113,
- layout : "fit",
- minSize : 70,
- border : false,
- items : this.topPanel
- }, {
- region : "west",
- title : "管理平台",
- layout : "accordion",
- split : true,
- width : 200,
- collapsible : true,
- items : [this.modelTree, this.factorTree]
- }, {
- region : "center",
- layout : "fit",
- split : true,
- items : [this.mainTab]
- }];
- Ext.ux.IndexPage.superclass.initComponent.call(this);
- this.modelTree.on('click', this.treeClick, this);
- this.modelTree.on('contextmenu', this.treeContextHandler, this);
- this.factorTree.on('click', this.factorTreeClick, this);
- this.factorTree.on('contextmenu', this.factortreeContextHandler, this);
- this.on('rendered', this.initFn, this);
- this.modelTree.on('click', this.treeClick, this);// 树的点击事件
- this.modelTree.on('contextmenu', this.treeContextHandler, this);// 树的右键菜单
- this.on('rendered', this.initFn, this);// 初始化
- this.modelTree.root.reload();
- this.factorTree.root.reload();
- },
- /**
- * 应用tree点击响应事件函数
- * <p>
- * type说明 1:应用 2: 大模型 3: 子模型 4:指标文件夹 5: 离散型指标 6: 连续性指标 7: 决策表
- * </p>
- *
- * @param {}
- * node
- */
- treeClick : function(node) {
- if (node.attributes.type == 1) {
- this.manageApp(node);
- } else if (node.attributes.type == 2 || node.attributes.type == 3
- || node.attributes.type == 5 || node.attributes.type == 6
- || node.attributes.type == 7) { // model and dimension
- this.addParam(node);
- }
- },
- /**
- * 指标的树点击函数
- *
- * @param {}
- * node
- */
- dimensionTreeClick : function(node) {
- if (node.leaf) {
- var dimensionId = "dimension_" + node.id;
- var sheetId = "ext_sheet_" + dimensionId;
- if (node.attributes.url == "DL") {
- var dingLiangPanel = new IRS.panel.DingLiangPanel({
- width : 800,
- height : 500,
- type : IRS.commomValue.dimensionType.dingLiangDimensionType
- });
- this.mainTab.add({
- id : sheetId,
- title : node.text,
- closable : true,
- layout : "fit",
- items : dingLiangPanel
- });
- } else if (node.attributes.url == "DX"
- || node.attributes.url == "JC") {
- var dingXingPanel = new IRS.panel.DingXingPanel({
- width : 800,
- height : 500,
- type : IRS.commomValue.dimensionType.dingXingDimensionType
- });
- this.mainTab.add({
- id : sheetId,
- title : node.text,
- closable : true,
- layout : "fit",
- items : dingXingPanel
- });
- } else if (node.attributes.url == "DL_NO_FORMULA") {
- var dingLiangNoFormulaPanel = new IRS.panel.DingLiangNoFormulaPanel(
- {
- width : 800,
- height : 500,
- type : IRS.commomValue.dimensionType.dingLiangDimensionTypeNoFormula
- });
- this.mainTab.add({
- id : sheetId,
- title : node.text,
- closable : true,
- layout : "fit",
- items : dingLiangNoFormulaPanel
- });
- }
- var sheet = this.mainTab.getItem(sheetId);
- this.mainTab.setActiveTab(sheet);
- }
- },
- /**
- * 应用tree邮件菜单
- *
- * @param {}
- * node
- * @param {}
- * event
- */
- treeContextHandler : function(node, event) {
- event.preventDefault();
- node.select();
- if (node.id == 0) { // root node menu
- this.rootMenu.showAt(event.getXY());
- return;
- }
- switch (node.attributes.type) {
- case 1 :
- this.appMenu.showAt(event.getXY());
- break;// app menu
- case 2 :
- this.bigModelMenu.showAt(event.getXY());
- break;// big model menu
- case 3 :
- this.sonModelMenu.showAt(event.getXY());
- break;// son model menu
- case 4 :
- this.sonDimensionTypeMenu.showAt(event.getXY());
- break;// son model menu
- case 5 :
- this.dimensionLSMenu.showAt(event.getXY());
- break;
- case 6 :
- case 7 :
- this.dimensionLSMenu.showAt(event.getXY());
- break;// dimension menu
- default :
- break;
- }
- }
- });
- Ext.reg("indexPage", Ext.ux.IndexPage);
- /**
- * 主界面的入口
- */
- Ext.onReady(function() {
- Ext.BLANK_IMAGE_URL = "resources/p_w_picpaths/s.gif";
- Ext.QuickTips.init();
- Ext.form.Field.prototype.msgTarget = "side";
- var viewport = new Ext.ux.IndexPage();
- });
使用方法:
var viewport = new Ext.ux.IndexPage();
在west部分是菜单树,菜单树点击事件会调用一个extjs写好的模块,这个模块就是一个Ext.Page,把这个page放在tab里面即可。这样,一个简单的opoa系统的显示界面就完成了。
转载于:https://blog.51cto.com/2747613/494274