javascript代码实例教程-ExtJs4实战流量统计系统----权限该怎么实现&自定义ToolBar(五)

发布时间:2019-02-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-ExtJs4实战流量统计系统----权限该怎么实现&自定义ToolBar(五)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 流量系统,是开放给内部所有用户使用,用于查询网站相关流量数据。

 

Boss们需要能看到所有栏目的所有流量数据,而普通编辑们,则只能查看自己负责栏目的流量数据;

 

管理员需要给所有人设置权限的权限;

 

。。。。。。

 

 

 

对于普通的Web应用程序或MVC来说,可以通过控制htML元素的显示与否、可用与否来实现权限。

 

而对于ExtJs来说,如何实现就是另一回事了。

 

=========================分隔线====================================

 

先来看看有哪些地方需要配置权限吧。

 

 

 

左边手风琴有三个部分,Accordion控件不像Tree一样,可以从服务端@R_360_1842@生成控件,它只能手动的逐个添加子项。

 

所以要实现权限控制,只好从服务端加载完权限信息后,再来控制各部分显示与否。

 

另外,如果手风琴的子项内,也就是内部的Tree控件,没有任何节点的话,则自动将该子项隐藏。

 

 

Ext.define('Yiqi.Main.SysSetTree', {

    extend: 'Ext.tree.Panel',

    requires: ['Yiqi.COMmon.Model.FunctionMenu'],

 

    parentId: 2,

    loadUrl: '',

    inITcomponent: function () {

        this.loadMask = new Ext.LoadMask(this, { msg: '加载中...' });

        this.buildStore();

        VAR me = this;

        Ext.apply(this, {

            rootVisible: false,

            lines: false,

            store: this.dataStore,

            listeners: {

                itemclick: this.onItemClick,

                beforeitemexpand: function () {

                    me.loadMask.show();

                },

                itemexpand: function () {

                    me.loadMask.hide();

                },

                load: function (store, obj, records, eOpts) {

                    if (!me.loadMask.isHidden()) {

                        me.loadMask.hide();

                    }

                    if (records.length <= 0) {

                        me.ownerCt.remove(me);//--如果没有子项,则隐藏

                    }

                }

            }

        });

        this.callParent(arguments);

    }

});

 

 

各部分里边的内容,都是Tree控件,这个不用多说也能想到,直接在服务端返回可用的就行。

 

权限配置功能也比较简单

 

 

 

 

 

=========================分隔线====================================

 

左侧手风琴比较简单。

 

而下边这个,就比较麻烦了。

 

 

 

这是哪?这是流量数据显示界面顶部的工具条(Toolbar),用于切换数据显示。

 

是的,并非所有栏目的功能都一样。

 

比如:某些栏目才有地理信息统计,某些栏目才有访问排行。。。。。。

 

如果在左侧加一个Tree控件来显示所有功能的话,那么就简单多了,对吧。

 

但这样的话,就严重挤压了图表的空间,对于这样一个系统,图表及数据的展示,才是重点。

 

而在顶部以一个工具条的方式显示菜单的话,似乎就简洁多了。。。

 

好吧,那就这么干吧。。。

 

=========================分隔线====================================

 

一般Toolbar都是固定的,而基于服务端数据的Toolbar则是灵活的。

 

对Toolbar子组件的类型,有三种要求:

 

  1、纯分组用,就像文件夹一样;

 

  2、带功能的分组,即有子组件的按钮,在ExtJs里,叫SplitButton。

 

  3、就是纯按钮了。

 

先看一下用来加载Toolbar的数据是什么样的。

 

 

 

功能地址:就是点击按钮后,会加载的功能地址,也是功能对应的js文件路径。这个在之前的文章里也说过。

 

可以看到,有些项目的功能地址是空的,没错,就是用这个字段来区别类型。

 

有子项目,功能地址为空,则说明是纯分组用的;有子项目,功能地址也不为空,则说明是带分组的功能按钮;没有子项目的就是纯按钮咯。

 

=========================分隔线====================================

 

从服务端加载好这些数据后,逐一循环,根据这个规则来决定ExtJs需要创建的类型,创建完成,再add到Toolbar里。

 

当然,理论上支持无限级子菜单。

 Ext.define('Yiqi.Show.Catagory.FunctionToolBar', {

    extend: 'Ext.toolbar.Toolbar',

    alias: 'widget.functionbar',

    catagoryId: 1,

    loadstatics: function (path, scoPE) { },

    handlerScope: null,

 

    initComponent: function () {

        Ext.apply(this, {

            items: [

                //--一加载就显示Loading,提高用户体验

                { xtype: 'displayfield', value: '<img src="/Scripts/ext4.2/resources/themes/images/default/grid/loading.gif"/> 菜单加载中......' }

            ]

        });

        this.callParent(arguments);

    },

    afterRender: function () {

        //--渲染完成后,再从服务端加载数据,并创建Toolbar

        this.loadEnabledMenu();

        this.callParent(arguments);

    },

    loadEnabledMenu: function () {

        var me = this;

        Ext.Ajax.request({

            url: '/FunctionMenu/GetEnabledList',

            params: {

                catagoryId: me.catagoryId

            },

            method: 'POST',

            success: function (response, opts) {

                Yiqi.Common.Tools.IsLogin(response);

                var result = Ext.decode(response.responseText);

                var menu = me.buildMenu(result);

                me.removeAll(true);

                me.add(menu);

            },

            failure: function (response, opts) {

                Ext.Msg.alert("提示", "保存失败(报错)~!");

            }

        });

    },

    buildMenu: function (list) {

        var me = this;

        var menu = [];

        //--循环所有

        Ext.Array.each(list, function (m) {

            menu.push(me.createSingle(m));

        });

        return menu;

    },

    createSingle: function (data) {

        var me = this;

        var menu = {};

        //--功能地址不为空

        if (!Ext.iSEMpty(data.LoadPath, true) && Ext.String.trim(data.LoadPath).length > 0) {

            if (data.Children.length > 0) {

                menu.xtype = 'splitbutton';

            }

            if (me.handlerScope) {

                menu.scope = me.handlerScope;

            }

            menu.handler = function () {

                this.createItem(data.LoadPath, menu);

                //me.load@R_126_2358@ics(data.LoadPath, menu); 

            }

        }

 

        menu.text = data.text;

        menu.iconCls = data.iconCls;

        //--有子菜单,则继续循环

        if (data.Children.length > 0) {

            var childMenu = me.buildMenu(data.Children);

            menu.menu = {

                items: childMenu

            };

        }

        return menu;

    }

});

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-ExtJs4实战流量统计系统----权限该怎么实现&自定义ToolBar(五)全部内容,希望文章能够帮你解决javascript代码实例教程-ExtJs4实战流量统计系统----权限该怎么实现&自定义ToolBar(五)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。