`
chenxueyong
  • 浏览: 342096 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

EXTJS实现的WEBQQ可以传文件了哈

阅读更多

Ext.namespace("JDBS.Apps.AppClass.JDBSIM");
/**
 * 在线交流功能界面类
 */
JDBS.Apps.AppClass.JDBSIM.IMUI=function(o){
    this.app=o.app||null;//指向im app
    delete o.app;
    //传递给面板的配置参数
    var treeLoader = new Ext.tree.TreeLoader({
        preloadChildren: true,
        clearOnLoad:false,
        baseParams: null,
        url:JDBS.Apps.MainApp.HandleAjaxUrl + "&action=onlineHandler&todo=getAllUser",
        requestMethod: "GET",
        listeners:{
            beforeload:{fn:function(){
                if(this.app.stateTast){
                    this.app.stateTast.cancel();
                }
                this.body.mask("加载中...","x-mask-loading");
            },scope:this},
            load:{fn:function(){
                if (!Ext.isEmpty(this.app.userInf.username))this.app.getUStat();
                this.body.unmask();
                this.expandAll();
            },scope:this}
        }
    });
    var treeNode = new Ext.tree.AsyncTreeNode({
        text: '',
        id: 'root',
        expanded: false,
        listeners: {
            "click": function(node, e){
                e.stopEvent();
                alert(node.text);
            }
        }
    });
    /**
     * 设置在线状态
     * 改变状态时保存当前状态
     * @param {string} 节点id
     * @param {number} 状态 1 在线 2 离线 3 有消息
     */
    this.setStateByNode=function(node,index,arr){
        var onCls="JDBSIM_IconCls_UserOnLine",offCls="JDBSIM_IconCls_UserOffLine",hm="JDBSIM_IconCls_HaveMsg";
        var n=this.getNodeById(node.id),newNode;
        if(node.id.substr(0,1)=="f"){
          if(!n){
            n=this.getNodeById(node.id.replace("f","m"));
          }
        }
        if (n){

        }else{
            var imapp=this.app,root,newNode;
           if (!Ext.isEmpty(imapp.userInf.username)){
                 //客服端直接添加到客户请求列表,客户端添加到临时会话
              var role=node.id.substr(0,1),root;
             switch(role){
                 case ("k"):{
                    root=this.getNodeById("customer");
                break;    
                }
                case("c"):{
                    root=this.getNodeById("cs");
                break;    
                }
                case("f"):{
                    root=this.getNodeById("stranger");
                    node.id=node.id.replace("f","m");
                    if(!root){
                      root=this.getRootNode().appendChild(
                      new Ext.tree.TreeNode({
                          text:"临时会话",
                        id:"stranger",
                        iconCls:"JDBSIM_IconCls_StrangerG",
                        leaf:false,
                        expanded:true
                      })
                      );
                      root.expand(true);
                    }
                    break;
                }
             }
              n=new Ext.tree.TreeNode(node);
              n.attributes.num=0;
                 root.appendChild(n);
           }
        }
        var nui=n.getUI(),oldcls,newcls;
        oldcls=n.attributes.online?onCls:offCls;
        n.attributes.online=node.online;
        newcls=node.online?onCls:offCls;
        var imgel=nui.getIconEl();
            if (oldcls!=newcls){
                imgel.className=imgel.className.replace(oldcls,newcls);
            }
        //------------                
        if (parseInt(node.num) > 0) {
            n.setText(n.attributes.rawtext+ "<spancolor:red;"">(" + node.num + ")</span>");
            if (!n.attributes.chatW) {
                if (node.num > (n.attributes.num||0)) {
                    //新消息
                    if (this.app.runMode == 2)
                        this.app.playSound();
                }
            }
            n.attributes.num =node.num;
        }
        else {
            n.setText(n.attributes.rawtext);
            n.attributes.num = 0;
        }
        //--------------------------
    };
    /**
     * 批量设置在线状态
     * @param {Object} 状态数组
     */
    this.setStateBatch=function(a){
        if (a.length>0){
              Ext.each(a,this.setStateByNode,this);    
        }                    
    };
    /**
     * 刷新用户列表
     * @param {Object} oc
     */
    this.refreshList=function(oc){
        this.root.reload();
    }
    var oc = {
        collapsible: true,
        loader: treeLoader,
        title: "在线交流",
        iconCls: "iconCls_east",
        rootVisible: false,
        lines: false,
        autoScroll: true,
        expanded: true,
        bbar:[],
        listeners: {
            render:function(tp){
                tp.expandAll();
            },
            click: function(node, e){
                //alert("单击事件");
            }
        },
        tools: [{
            id: 'refresh',
            on: {
                click: function(){
                    this.refreshList();
                },
                scope:this
            }
        }],
        root: treeNode
    };
    
    //bbar: [{xtype:"button",text:"设置",tooltip:"设置",iconCls:""}],
    if (this.app.runMode==1){
        oc.bbar=[{text:"查找用户",iconCls:"iconCls_searchAdd",handler:function(bnt,e){
            this.searchFriend();
        },scope:this.app}]
    }else{
        
        oc.bbar.push({
            text:"",
            iconCls:(this.app.config.sound==1)?"JDBSIM_IconCls_SoundOn":"JDBSIM_IconCls_SoundOff",
            handler:function(bnt,e){
              bnt.setIconClass(bnt.iconCls.toggle("JDBSIM_IconCls_SoundOn","JDBSIM_IconCls_SoundOff"));
              this.app.config.sound=(bnt.iconCls=="JDBSIM_IconCls_SoundOn")?1:0;
            },
            scope:this
        });
    }
    Ext.apply(oc, o);
    JDBS.Apps.AppClass.JDBSIM.IMUI.superclass.constructor.call(this, oc);
};
Ext.extend(JDBS.Apps.AppClass.JDBSIM.IMUI, Ext.tree.TreePanel, {});
/**
 * 获取消息的store
 * @param {Object} oc
 * 配置对象中需要 fields属性
 */
JDBS.Apps.AppClass.JDBSIM.MsgStore=function(o){
    var oc={
        proxy: new Ext.data.HttpProxy({
            url:JDBS.Apps.MainApp.HandleAjaxUrl+"&action=onlineHandler&todo=getmsg",
            method: "POST"
        }), autoLoad: false,
        reader: new Ext.data.JsonReader({
            //id: "id_9dsoft",
            //totalProperty: "total",
            root: "result",
            successProperty: "success",
            remoteSort: false,
            fields:o.fields
        })
    }
    delete o.fields;
    Ext.apply(oc,o);
    JDBS.Apps.AppClass.JDBSIM.MsgStore.superclass.constructor.call(this,oc);
};
Ext.extend(JDBS.Apps.AppClass.JDBSIM.MsgStore,Ext.data.Store,{});
/**
 * 对话窗口类
 *
 * @param {Object} oc
 * uid:对方id,ut;对方类型,un:对方用户名,uonline 对方在线状态,mun:自己用户名,muid:自己id,mut:自己用户类型
 * node:点击的节点,getMsg_interval:提取消息的时间间隔 默认 5 秒
 */
JDBS.Apps.AppClass.JDBSIM.ChatWindow = function(oc){
    this.imApp=JDBS.Apps.AppClass.JDBSIM.App||null;
    this.toUID=oc.uid;//用户id
    this.toUT=oc.ut; //用户类型
    this.toU=oc.un; //用户名
    this.fromNode=oc.node||null;
    delete oc.node;
    delete oc.un;
    this.TimerId=null;
    this.mun=oc.mun;//自己用户名
    this.mid=oc.mid;
    this.mut=oc.mut;
    this.mUserInf=oc.mUserInf;//存储登录用户信息
    this.getMsg_interval=oc.getMsg_interval||5000;
    delete oc.mun;delete oc.mid;delete oc.mut;delete oc.mUserInf;
    this.fields=[{name:"sender"},{name:"sendtime"},{name:"content"},{name:"id_9dsoft"}];
    var msgstore = new JDBS.Apps.AppClass.JDBSIM.MsgStore({fields:this.fields});
    this.msgStore=msgstore;
    
    var newMsgHander=function(rs,op,suc){
        //suc=true;
        if (!this.TimerId){
            this.TimerId=new Ext.util.DelayedTask();
        }                    
        var DT=this.TimerId;
        if (suc){
            if (rs.length>0){
                //填充消息列表
                this.addMsg(rs);
                //窗口闪三次
                //去掉消息提示
                if (this.fromNode) {
                    this.fromNode.setText(this.fromNode.attributes.rawtext);
                    this.fromNode.attributes.num=0;
                    this.fromNode.attributes.chatW=true;
                }
                if (this.imApp){
                    if (this.imApp.runMode==2){
                        this.imApp.playSound();
                    }
                }
            }

        }else{
            //alert("获取消息失败");
        }
        DT.delay(this.getMsg_interval,function(){this.checkMsg()},this);
    };
    /**
     * 检测新消息,通过一个store获取新消息
     */
    this.checkMsg=function(){
        this.msgStore.load({params:{tou:this.toU,tout:this.toUT,touid:this.toUID},callback:newMsgHander,scope:this});
    };
    /**
     * 发送消息
     */    
    this.addMsg=function(rs){
        this.msList.add(rs);
        //刷新列表
        var gv=this.msGrid.getView();
        gv.refresh();
        //滚动到底部
        gv.scrollToBottom();
    }
    this.closeW=function(){
        //关闭窗口
        this.close();
    };
    this.sendMsg=function(){
        var f=this.chatF,bf=this.chatF.getForm(),editor=bf.findField("content");        
        var rc=Ext.data.Record.create(this.fields),sc=editor.getValue(),stripC=Ext.util.Format.stripTags(sc);
        
        if (Ext.isEmpty(stripC.trim())){Ext.Msg.alert('提示', '消息内容不能为空!');return false;}else{
            //内容长度限制
            if(stripC.length>200){
                Ext.MessageBox.show({title:"提示",msg:"消息内容长度不能超过200个字符",icon:Ext.MessageBox.WARNING,buttons:{ok:true}});
                return false;
            }
        }
        bf.submit({
            url:JDBS.Apps.MainApp.HandleAjaxUrl+"&action=onlineHandler&todo=sendmsg",
            method:"POST",
            params:{tou:this.toU,tout:this.toUT,touid:this.toUID},
            success:function(f,a){            
            //由服务器端返回发送时间
              f.findField("content").setValue("");
              var id=a.result.data.newid,st=a.result.data.sendtime;
              var co={sender:this.mun,sendtime:st,content:sc,id_9dsoft:id};
              var r=new rc(co);
              this.addMsg(r);
            },
            failure:function(f,a){
               //发送失败
              var id=0,st=new Date();
              sc="<spancolor:red"">消息发送失败,请重试</span><br />"+sc;
              var co={sender:this.mun,sendtime:st,content:sc,id_9dsoft:id};
              var r=new rc(co);
              this.addMsg(r);
            },
            scope:this
        });
    };
    var gs=new Ext.data.SimpleStore({
        data:[],
        fields:this.fields,
        sortInfo:{field: "sendtime", direction: "ASC"}    
    });
    //gs.on("add",function(s,rs,i){alert(rs.length);});
    this.msList=gs;//消息列表store
    //消息表格
//------------------------------------------
//对话框功能按钮
var tbar=[];
(function(){
    //this=chatwindow     
    tbar.push({text:"查看交流记录",handler:function(bnt,e){
               if(this.mUserInf.usertype=="001"){
                   var mapp=JDBS.Apps.MainApp;
                  var tabid=mapp.NameRules.centerTabPre+"001001";
                      var p=mapp.West.items.items[0];                    
                    p.fireEvent("click",p.getNodeById("001001"));
               }else{
                 JDBS.Apps.OnlineServer.App.getOnlineLog({cname:this.toU,cid:this.toUID});
               };
            },scope:this,iconCls:"iconCls_menu_linelog"});
    //查看资料
    if((this.mUserInf.usertype=="001" && this.toUT=="001")||this.mUserInf.usertype=="002"){
        tbar.push({text:"查看资料",handler:function(bnt,e){
                //根据不同的登录用户调用不同的方法显示
                if (this.mUserInf.usertype=="001"){
                    JDBS.Apps.AppClass.JDBSIM.App.userPorfile({
                        uid:this.toUID.substr(1),
                        ut:'001',
                        un:this.toU
                    })
                }else{
                   JDBS.Apps.OnlineServer.App.getCustomerInf({cid:this.toUID,cname:this.toU});
                }                
            },scope:this,iconCls:"iconCls_menu_profile"});
    }
    //发送文件
    if ((this.mUserInf.usertype == '002') || (this.mUserInf.usertype== '001' && this.toUT == '002')) {
        tbar.push({
            text: "传送文件",
            handler: function(bnt, e){
                var mapp=(this.mUserInf.usertype=="002")?JDBS.Apps.OnlineServer.App:JDBS.Apps.MainApp;
                var title = "给" + (this.toUT== "001" ? '客户 ' : '客服 ') + this.toU + " 传送文件";
                //var url=JDBS.Apps.MainApp.HandleAjaxUrl+"&action=fileupload&p2=1&tout="+this.toUT+"&toun="+this.toUN;
                //发送文件
                var idpre = mapp.NameRules.sendFile;
                idpre += this.toUID +"_"+ this.toUT;
                var oq = {
                    action: "getFunc",
                    todo: "sendfile",
                    p2: 1,
                    toun: this.toU,
                    tout: this.toUT,
                    touid: this.toUID,
                    ctnId: idpre
                };
                autoLoad = {
                    method: "GET",
                    url: JDBS.Apps.MainApp.HandleAjaxUrl,
                    params: oq,
                    scripts: true,
                    nocache: true
                };
                if (this.mUserInf.usertype == "002") {
                    delete oq.action;
                    JDBS.Apps.OnlineServer.App.openInTabPanel({
                        id:idpre,
                        title:title,
                        params:oq,
                        iconCls:"iconCls_sendFile"
                    });
                }
                else {
                    JDBS.Apps.Funcs.CallServerFunc({
                        id: idpre,
                        title: title,
                        autoLoad: autoLoad,
                        iconCls: "iconCls_sendFile"
                    });
                }        
                
            },
            iconCls: "iconCls_sendFile",
            scope: this
        })
    }    
}).call(this);
    
    
//------------------------------------------
    this.msGrid=new Ext.grid.GridPanel({
            xtype: "grid",
            store:gs,
            tbar:tbar,
            columns: [{
                header: "username",
                sortable: false,
                dataIndex:"sender",
                renderer:function(value,p,record,rowIndex,colIndex,store){
                    var st=record.get("sendtime");
                    var s='<span class="JDBSIM_MsgListSender">{0}</span><span class="JDBSIM_MsgListTime">{1}</span>';
                    return String.format(s,value,Ext.util.Format.date(st,'y-m-d H:i:s'));
                }
            }],
            hideHeaders: true,
            loadMask: false,
            anchor: "100% 55%",
            viewConfig: {
                forceFit: true,
                enableRowBody: true,
                showPreview: true,
                getRowClass: function(record, rowIndex, p, store){
                    p.body = '<div class="JDBSIM_MsgListContent">' + record.get("content") + '</div>';
                    return 'x-grid3-row-expanded';
                }
            }
        });
    this.chatF=new Ext.form.FormPanel({
            anchor: "100% 45%",
            items: [{
                xtype:"htmleditor",
                enableAlignments: false,
                anchor:"100% 100%",
                hideLabel:true,
                name:"content",
                enableSourceEdit:false,
                enableLists:false
            }]
        });    
    
    var c = {        
        width: 540,
        height: 400,
        layout:"anchor",
        items: [this.msGrid,this.chatF],
        buttons:[{text:"发送",handler:this.sendMsg,scope:this,iconCls:"JDBSIM_IconCls_sendMsg"},{text:"取消",handler:this.closeW,scope:this,iconCls:"iconCls_cancel"}],
        listeners:{render:
        {fn:this.checkMsg,scope:this},"beforeclose":{fn:function(w){if(this.TimerId){
            this.TimerId.cancel();
            if (this.fromNode){
                this.fromNode.attributes.chatW=false;
            }
            }
            return true;},scope:this}},
        iconCls:"JDBSIM_IconCls_chatw",
        keys:{key:Ext.EventObject.ENTER,fn:function(){
            //alert("a");
            //this.buttons[0].fireEvent("click");
        },ctrl:false,alt:true,scope:this}        
    };
    Ext.apply(c,oc);
    Ext.QuickTips.init();
    JDBS.Apps.AppClass.JDBSIM.ChatWindow.superclass.constructor.call(this,c);
};
Ext.extend(JDBS.Apps.AppClass.JDBSIM.ChatWindow, Ext.Window, {});

/**
 * 在线交流应用程序
 */
JDBS.Apps.AppClass.JDBSIM.App = function(){
    //私有成员区
    /**
     * 用户状态返回时处理函数
     * @param {Object} op
     * @param {Object} suc
     * @param {Object} response
     */
    var fstateHandler=function(op,suc,response){
        if (suc){
            response=Ext.util.JSON.decode(response.responseText);
            if (response.success){
                this.IMUI.setStateBatch(response.result);
            }else{
                
            }
        }else{
        }
        if(!this.stateTast){
            this.stateTast=new Ext.util.DelayedTask();
        }
        var DT=this.stateTast;
        DT.delay(this.config.interval_state,function(){this.getUStat();},this);
    };
    return {
        //运行模式,1客户端运行,2在线客服运行
        runMode:1,
        /**
         * 用户信息
         */
        userInf:{username:"",usertype:"",usercode:""},
        //好友面板
        IMUI: null,
        //右键菜单
        userListMenu:null,
        /**
         * 初始化
         * @param {Object} config
         * @param {userC} 用户配置信息 包含属性:username,usertype,usercode
         *  配置选项说明
         * container 要包含im ui的窗口,为面板的 renderTo属性配置
         */
        init:function(o,userC){
            userC=userC||{};
            this.WG.zseed=7000;
            Ext.apply(this.userInf,userC);
            o= o||{};
            this.runMode=o.runMode||1;
            o.app=this;
            delete o.runMode;
            Ext.applyIf(o,{
                renderTo:null
            });            
            this.makeUI(o);
            this.userListMenu=new Ext.menu.Menu({
                items:[
                 {
                     hideOnClick:true
                    ,text:"查看资料"
                 }
                 ,{
                     hideOnClick:true
                    ,text:"交流记录"
                 }
                 ,{
                     hideOnClick:true
                    ,text:"删除好友"                    
                 }
                 ,{
                     hideOnClick:true
                    ,text:"开始对话"
                 }
                
                ]
            });
            /*
            this.userInf.username=JDBS.Apps.MainApp.UserInfo.username;
            this.userInf.usertype="001";
            */
        },
        /**
         * 窗口组
         */
        WG: new Ext.WindowGroup(),
        /**
         * 获取好友状态(包括在线状态、消息状态)
         */
        getUStat:function(){
            //return false;//for test
            Ext.Ajax.request(
               {
               url:JDBS.Apps.MainApp.HandleAjaxUrl+"&action=onlineHandler&todo=getstate",
               callback:fstateHandler,
               scope:this,
               method:"GET"
               });
        },
        /**
         * 刷新用户状态的任务对象
         * @param {Object} o
         */
        stateTast:null,
        /**
         * 获取对话窗口id
         * @param {Object} o
         */
        getWId:function(o){
            var wPre="chatWindow";
            return wPre+"_"+o.ut+"_"+o.uid;
        },
        /**
         * 打开一个对话窗口
         * @param {Object} o
         * ut(用户类型)-un(用户名)-uid(用户id)
         * 2008年8月7日 14时41分15秒 只打开一个对话框窗口
         */
        createCW:function(o){
            var wid=this.getWId(o),
            wt="与{0}&nbsp;{1}&nbsp;</b>对话",
            sw=[];
            switch(o.uid.substr(0,1)){
                case "f":{
                    wt=String.format(wt,"好友",o.un);
                    break;
                }
                case "c":{
                    if (this.WG.get(wid)){this.WG.bringToFront(wid);return false;};
                    wt=String.format(wt,"客服",o.un);
                    if (this.config.oneSerW){
                    sw=this.WG.getBy(function(w){if (w.id.indexOf("_c")>-1){return true;}});
                    if (sw.length>0){
                        Ext.Msg.show(
                        {title:"提示",
                        msg:"您已打开一个与客服交流的窗口,不能同时与多名客服交流",
                        buttons:{ok:true},icon:Ext.Msg.WARNING,fn:function(){
                            window.aaa=sw;
                            window.aaab=this.WG;
                          this.WG.bringToFront(sw[0].id);
                        },scope:this});
                        return false;
                    }}
                    break;
                }
                case "k":{
                    wt=String.format(wt,"客户",o.un);
                    break;
                }
                case "m":{
                    wt=String.format(wt,"用户",o.un);
                    break;
                }
            }            
            if(this.WG.get(wid)){            
                this.WG.bringToFront(wid);
            }else{
                
                                
                Ext.apply(o,{id:wid,title:wt,manager:this.WG});
                var w=new JDBS.Apps.AppClass.JDBSIM.ChatWindow(o);
                w.show();
            };                                    
        },
        //生成ui,返回一个面板
        makeUI:function(o){
            var imui = new JDBS.Apps.AppClass.JDBSIM.IMUI(o);
            this.IMUI = imui;
            //事件处理
            var dbH = function(node, e){
                //双击打开对话窗口,节点属性 type
                if (!Ext.isEmpty(node.attributes.type)){                    
                    var o ={
                        un: node.attributes.rawtext,
                        ut: node.attributes.type,
                        uid:node.id,
                        mun:this.userInf.username,
                        mUserInf:this.userInf,
                        getMsg_interval:this.config.interval_msg,
                        node:node                
                    };
                    this.createCW(o);
                }
            }            
            //定义ui的事件处理
            imui.on("dblclick",dbH, this); //双击事件
            imui.on("render",function(tp){
                /*
                var bnt=Ext.get(tp.getBottomToolbar().items.items[0].id);
                bnt.on({
                    "click":{
                        fn:function(bnt,e){
                           this.set();
                        },
                        scope:this
                    }
                });*/
            },this)
                        
        },
        //配置信息
        config:{
             interval_state:5000
            ,interval_msg:5000
            ,sound:1 //是否声音通知
            ,oneSerW:true //是否仅限制同时只能与一个客服对话
        },
        //即时交流工具参数设置
        //配置信息永久保存在cookie中
        set:function(){
            var setValues={
                //刷新消息状态时间间隔
                interval_state:parseInt(Cookies.get("im_interval_state")||"30000")/1000,
                //获取消息时间间隔
                interval_getMsg:parseInt(Cookies.get("im_interval_msg")||"30000")/1000
            };
           var form=new Ext.FormPanel({
             defaults:{
                 xtype:"numberfield",
                maxValue:180,
                minValue:30,
                width:50                
             },
             plain:false,
             baseCls:"x-plain",
             items:[{
                 fieldLabel:"刷新在线状态间隔(秒)",
                name:"is"
                ,value:setValues.interval_state,
                labelWidth:150
             },
             {
                 fieldLabel:"获取对话时间间隔(秒)",
                name:"im",
                value:setValues.interval_getMsg,
                labelWidth:150
             }
             ],
             buttons:[
             {text:"保存",
              handler:function(bnt,e){
                  
              }
             },
             {text:"取消",
             handler:function(bnt,e){}}
             ]
           });
           var win=new Ext.Window({
               title: "在线交流参数设置",
               items: [form],
               layout: "fit",
               autoHeight:false,
               autoWidth:false,
            plain:false,
            width:250,
            height:140,
            bodyStyle: "padding-top:10px"
           });
           win.show();
        },
        //查看用户资料 需要的参数 {uid:"",ut:'',un:''}
        userPorfile:function(o){
            var title="用户 "+o.un+" 的资料",
                    mapp=JDBS.Apps.MainApp,
                    id=mapp.NameRules.friendProfile+o.uid+"_"+o.ut;
                    var q={
                        id_9dsoft:o.uid,
                        action:"getfunc",
                        todo:"PublicProfile",
                        ctnid:id
                    };
                    JDBS.Apps.Funcs.CallServerFunc({
                        id:id,
                        title:title,
                        iconCls:"iconCls_menu_profile",
                        autoLoad:{
                            url:JDBS.Apps.MainApp.HandleAjaxUrl,
                            scripts:true,
                            nocache:true,
                            params:q,
                            method:"GET"
                        }
                    });            
        },
        searchFriend:function(){
            
            var title="查找添加好友",
            mapp=JDBS.Apps.MainApp,
            id=mapp.NameRules.searchFriend;
            var q={
                action:"getfunc",
                todo:"searchFriend",
                ctnid:id
            };
            JDBS.Apps.Funcs.CallServerFunc({
                        id:id,
                        title:title,
                        iconCls:"iconCls_search",
                        autoLoad:{
                            url:JDBS.Apps.MainApp.HandleAjaxUrl,
                            scripts:true,
                            nocache:true,
                            params:q,
                            method:"GET"
                        }
                    });            
        },
        //播放声音 o
        //{s:1,t:2} s:声音类型 1:新消息通知 t:播放次数
        playSound:function(o){
          if (this.config.sound==0) return false;
          o = o ||{};
          Ext.applyIf(o,{s:1,t:1});
          var sound;
          switch (o.s){
           case 1:{
                 sound=Ext.fly("JDBSIM_NewMsgAlert").dom;
               break;
           }
          }
          if (Ext.isIE) {    
              sound.volume = 0;
            sound.loop=o.t;
              sound.src = sound.src;
          }
        }    
        }
    }
();

分享到:
评论
2 楼 kee 2010-09-14  
看看。。。。。。。
1 楼 ylz4647 2010-01-14  
请问可以不可以发完整源码上来看看?

相关推荐

    ExtJS即时通信WebQQ

    ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧!

    ExtJS实现文件下载

    在本文中,我们将深入探讨如何使用ExtJS框架来实现文件下载功能。ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序,它提供了丰富的组件和功能,包括与服务器的交互,如文件下载。 首先,我们要了解`...

    EXTJS 多文件上传

    9. **文件管理**:在上传成功后,EXTJS 还可以帮助管理和展示已上传的文件,例如在列表中显示文件名、大小、日期等信息。 `MultiFileUploadField.js` 文件是EXTJS框架中实现`MultiFileUploadField` 功能的具体代码...

    ExtJS做的WebQQ

    用ExtJS做的QQ 采用struts1.2 由于时间原因 该WebQQ还有很多bug 希望有兴趣的朋友继续研究 作者Email:haoyingsong@163.com 大家可以看一下: ... 版本已更新: ...实现单聊,群聊,声音提示等,无需数据库

    Extjs配置文件和示例文件

    JSP(JavaServer Pages)是一种服务器端的动态网页技术,它与ExtJS结合,可以实现后端数据与前端UI的交互。示例JSP文件通常包含用于加载ExtJS库、配置文件和应用的HTML结构,以及与后端进行通信的Ajax请求。而js程序...

    Java+Extjs实现单文件上传

    在ExtJS中,我们可以使用`Ext.form.Panel`和`Ext.form.field.File`组件实现文件上传。 1. **创建上传表单**:定义一个包含文件上传字段的表单,设置`enctype`为`multipart/form-data`。 ```javascript var form = ...

    Extjs2.x 实现文件上传组件

    在ExtJS 2.x版本中,实现文件上传组件是一项常见的需求,它允许用户在Web应用中选择并上传本地文件到服务器。在本文中,我们将深入探讨如何在ExtJS 2.x中实现这一功能。 首先,我们需要理解ExtJS中的FormPanel组件...

    .net+Extjs 实现文件的上传下载

    在.NET和ExtJS框架下实现文件的上传与下载是一项常见的任务,这涉及到Web应用程序与用户交互的核心功能。这里,我们将深入探讨如何利用这两个技术来构建这样的功能。 首先,.NET框架,尤其是ASP.NET,提供了丰富的...

    extjs+dwr3.0实现文件上传

    在“EXTJS+DWR3.0实现文件上传”这个主题中,我们将探讨如何结合这两者来实现一个高效且用户友好的文件上传功能。在实际的Web应用中,文件上传是一个常见的需求,例如在社交媒体平台上传图片、在文档分享网站上传...

    ExtJS原生多文件拖动上传组件

    ExtJS原生多文件拖动上传组件 使用时修改包路径 1.多文件上传 2.支持拖动上传 3.支持图片压缩 4.支持图片合并 5.文件排序 可扩展实时图片预览 api //初始化画板 initCanvas //上传文件窗口 uploadWindow //初始化...

    ExtJS实现多文件上传UploadDialog For ExtJS3.x

    在本文中,我们将深入探讨如何使用ExtJS 3.x实现多文件上传功能,结合Struts2框架进行数据处理。首先,我们需要确保环境配置正确。在描述中提到,我们需要将一系列Struts2相关的库文件复制到项目的`WebContent\lib`...

    struts2+extjs3 单/多文件上传

    总结来说,Struts2+ExtJS3组合可以有效地实现文件上传功能,无论是在后台处理还是在前端交互方面都有很好的支持。提供的资源包含了所有必要的JAR包,使得开发者可以快速集成并理解代码,减少了额外的下载和配置工作...

    ExtJS验证上传文件类型

    ExtJS 中实现文件上传功能是非常方便的,但对于新手来说,控制文件上传类型是一个难题。例如,我们只想让用户上传特定的文件类型,例如txt文件,那么如何实现当用户上传非txt文件时,给出错误提示呢?这篇文章将详细...

    extjs+swfupload实现多文件上传下载删除带进度条

    `SwfUpload`则是一个Flash基的文件上传组件,它可以实现在后台无刷新的情况下进行文件上传,支持多文件选择和上传进度显示。由于其使用Flash技术,所以在早期的浏览器中,`SwfUpload`能够提供比HTML5更好的兼容性。 ...

    Extjs+Struts2实现异步文件上传

    网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。

    ExtJS4多文件上传,带进度条及管理

    在ExtJS4中,可以使用自定义组件或者第三方插件来实现文件上传功能。uploadPanel是一个常见的组件,它提供了一个用户友好的界面,包括文件选择、上传按钮、取消和暂停选项,以及关键的进度条展示。 **四、swfupload...

    extjs实现的带标签、翻页动画的书

    ExtJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用程序。它提供了一整套组件和工具,包括...通过查看和分析"example"目录中的文件,开发者可以学习到如何在实际项目中应用ExtJS,提升Web应用的用户体验。

    extjs 多文件上传

    HTML5 的`FormData`对象是实现文件上传的核心,它允许我们将表单数据封装成一个对象,方便发送到服务器。在ExtJS中,我们可以在表单提交之前,使用`Ext.Element`的`dom`属性获取到原始DOM元素,然后通过`new ...

    Extjs4.0代码补全jsb文件

    总结一下,`Extjs4.0代码补全jsb文件`是提高基于ExtJS 4.0.0开发效率的关键工具,它为IDE提供了必要的元数据,实现了代码补全和自动提示功能,帮助开发者更好地理解和使用ExtJS库,减少错误,提高开发速度。...

    ExtJS带进度条的多文件上传和图片预览

    8. **安全性考虑**:在实现文件上传时,需要考虑防止恶意文件上传,例如限制文件类型和大小,对文件名进行安全检查,防止路径遍历攻击等。 9. **响应式设计**:如果项目需要适应不同设备和屏幕尺寸,那么还需要考虑...

Global site tag (gtag.js) - Google Analytics