- 浏览: 654774 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (609)
- java (139)
- 数据库 (107)
- 微信 (23)
- IT生活 (5)
- web前端 (74)
- SSH (11)
- 设计模式 (12)
- 重要资料 (11)
- 其他 (15)
- java技巧 (23)
- 服务器 (9)
- 2D/GUI (3)
- JAVA3D (2)
- ANT (5)
- Apache项目 (19)
- 数据类型 (10)
- 报表 (3)
- Collections (6)
- SQL/JDBC (15)
- 开发类 (6)
- EJB (6)
- Email (6)
- 文件读写 (2)
- 游戏 (0)
- Flex (2)
- Generic (2)
- HIbernate (12)
- I18N (5)
- Java EE (9)
- java ME (4)
- JDK 6 (8)
- JNDI/LDAP (5)
- JSP (7)
- JSTL (2)
- 正则表达式 (2)
- 安全 (2)
- Struts2 (12)
- Spring (4)
- Web服务 (10)
- Xml (1)
- JavaScript (30)
- AJAX (7)
- 验证 (4)
- 上传下载 (1)
- office办公软件 (1)
- Android (2)
- IOS (0)
- Dubbo (3)
- memcached/redis (1)
- 小程序 (1)
- 微信公众号 (0)
最新评论
-
wf_wangfeng:
怎么我用第一种方法不行呢 alert(document.rea ...
当jsp页面完全加载完成后执行一个js函数 -
Lori_Liu:
有帮助,至少可以解决了目前所遇到的问题!谢谢..
当jsp页面完全加载完成后执行一个js函数 -
starbhhc:
String actionMessage = new Stri ...
Java读取txt文件乱码 -
starbhhc:
Sev7en_jun 写道GOOD
客气,互相交流。。
javaeye论坛规则小测验(答案)--star -
Sev7en_jun:
GOOD
javaeye论坛规则小测验(答案)--star
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} {1} </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;
}
}
}
}
();
/**
* 在线交流功能界面类
*/
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} {1} </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;
}
}
}
}
();
发表评论
-
npm安装教程
2020-11-23 16:09 689一、使用之前,我们先来掌握3个东西是用来干什么的。 npm ... -
手机上万能返回上一页代替history.go(-1)
2016-05-13 11:25 819最近在做wap2.0的手机wap,写返回上一页的时候,开始 ... -
3.nodejs nodejs的mysql模块
2016-04-12 22:20 556安装nodejs的mysql模块首先要选定一个数据库,我选择 ... -
2.nodejs 使用Express4.x搭建第一个Web应用
2016-04-12 09:36 600Express4.x 是一个开源的node.js项目框架 ... -
1.nodejs windows 下安装nodejs
2016-04-12 09:34 4081.下载: 在nodejs的官方网站下载mis文件。ht ... -
Nodejs学习
2016-04-11 17:21 527将介绍如何利Javascript做为服务端脚本,通过Node ... -
HTML5做手机站页面字体显示很小的解决方法
2016-05-28 23:31 731HTML5做手机站需要加上一部分代码,不然字体会显示很小的 ... -
jquery 校验
2015-07-07 11:16 0EasyUI 验证框使用方法: ... -
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2015-05-20 09:49 589一、javascript函数实现: //JavaS ... -
//from提交表单 使用ajax异步读取,回调函数
2015-04-24 18:05 0<%@ page language="ja ... -
js获取带checkbox行的记录的Id值的两个方法
2015-04-09 14:44 679第一种: function updateProcess() ... -
基于注解的SpringMVC简单介绍
2015-04-03 11:58 591SpringMVC是一个基于DispatcherServle ... -
Linux环境下Nginx的安装
2014-03-28 13:26 486Linux下命令: /usr/local/nginx/s ... -
自用打印(二)
2014-03-19 17:30 578<html> <title> ... -
自用打印方法(一)
2014-03-19 17:25 465经过验证的,自用的。 ... -
各种微博分享代码
2014-03-19 15:56 942<HTML> <HEAD> ... -
JSP页面打印(二)
2014-03-18 11:04 761<HTML><HEAD><T ... -
JSP页面打印方法(一)
2014-03-18 10:57 3163JSP页面打印方法 方法一:function Print ... -
jquery和js初始化加载的多种方法
2014-01-20 14:48 906jquery和js初始化加载页面的区别: jquery:等 ... -
js自动刷新当前页面
2013-12-19 14:09 796reload 方法,该方法强 ...
相关推荐
ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧! ExtJS实现WebQQ即时通信,超级给力,下载吧!
在本文中,我们将深入探讨如何使用ExtJS框架来实现文件下载功能。ExtJS是一个流行的JavaScript库,用于构建桌面级的Web应用程序,它提供了丰富的组件和功能,包括与服务器的交互,如文件下载。 首先,我们要了解`...
9. **文件管理**:在上传成功后,EXTJS 还可以帮助管理和展示已上传的文件,例如在列表中显示文件名、大小、日期等信息。 `MultiFileUploadField.js` 文件是EXTJS框架中实现`MultiFileUploadField` 功能的具体代码...
用ExtJS做的QQ 采用struts1.2 由于时间原因 该WebQQ还有很多bug 希望有兴趣的朋友继续研究 作者Email:haoyingsong@163.com 大家可以看一下: ... 版本已更新: ...实现单聊,群聊,声音提示等,无需数据库
JSP(JavaServer Pages)是一种服务器端的动态网页技术,它与ExtJS结合,可以实现后端数据与前端UI的交互。示例JSP文件通常包含用于加载ExtJS库、配置文件和应用的HTML结构,以及与后端进行通信的Ajax请求。而js程序...
在ExtJS中,我们可以使用`Ext.form.Panel`和`Ext.form.field.File`组件实现文件上传。 1. **创建上传表单**:定义一个包含文件上传字段的表单,设置`enctype`为`multipart/form-data`。 ```javascript var form = ...
在.NET和ExtJS框架下实现文件的上传与下载是一项常见的任务,这涉及到Web应用程序与用户交互的核心功能。这里,我们将深入探讨如何利用这两个技术来构建这样的功能。 首先,.NET框架,尤其是ASP.NET,提供了丰富的...
在ExtJS 2.x版本中,实现文件上传组件是一项常见的需求,它允许用户在Web应用中选择并上传本地文件到服务器。在本文中,我们将深入探讨如何在ExtJS 2.x中实现这一功能。 首先,我们需要理解ExtJS中的FormPanel组件...
在“EXTJS+DWR3.0实现文件上传”这个主题中,我们将探讨如何结合这两者来实现一个高效且用户友好的文件上传功能。在实际的Web应用中,文件上传是一个常见的需求,例如在社交媒体平台上传图片、在文档分享网站上传...
ExtJS原生多文件拖动上传组件 使用时修改包路径 1.多文件上传 2.支持拖动上传 3.支持图片压缩 4.支持图片合并 5.文件排序 可扩展实时图片预览 api //初始化画板 initCanvas //上传文件窗口 uploadWindow //初始化...
在本文中,我们将深入探讨如何使用ExtJS 3.x实现多文件上传功能,结合Struts2框架进行数据处理。首先,我们需要确保环境配置正确。在描述中提到,我们需要将一系列Struts2相关的库文件复制到项目的`WebContent\lib`...
总结来说,Struts2+ExtJS3组合可以有效地实现文件上传功能,无论是在后台处理还是在前端交互方面都有很好的支持。提供的资源包含了所有必要的JAR包,使得开发者可以快速集成并理解代码,减少了额外的下载和配置工作...
ExtJS 中实现文件上传功能是非常方便的,但对于新手来说,控制文件上传类型是一个难题。例如,我们只想让用户上传特定的文件类型,例如txt文件,那么如何实现当用户上传非txt文件时,给出错误提示呢?这篇文章将详细...
网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。
`SwfUpload`则是一个Flash基的文件上传组件,它可以实现在后台无刷新的情况下进行文件上传,支持多文件选择和上传进度显示。由于其使用Flash技术,所以在早期的浏览器中,`SwfUpload`能够提供比HTML5更好的兼容性。 ...
ExtJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用程序。它提供了一整套组件和工具,包括...通过查看和分析"example"目录中的文件,开发者可以学习到如何在实际项目中应用ExtJS,提升Web应用的用户体验。
在ExtJS4中,可以使用自定义组件或者第三方插件来实现文件上传功能。uploadPanel是一个常见的组件,它提供了一个用户友好的界面,包括文件选择、上传按钮、取消和暂停选项,以及关键的进度条展示。 **四、swfupload...
总结一下,`Extjs4.0代码补全jsb文件`是提高基于ExtJS 4.0.0开发效率的关键工具,它为IDE提供了必要的元数据,实现了代码补全和自动提示功能,帮助开发者更好地理解和使用ExtJS库,减少错误,提高开发速度。...
8. **安全性考虑**:在实现文件上传时,需要考虑防止恶意文件上传,例如限制文件类型和大小,对文件名进行安全检查,防止路径遍历攻击等。 9. **响应式设计**:如果项目需要适应不同设备和屏幕尺寸,那么还需要考虑...
在ExtJS中,我们可以利用Grid Panel和Form Panel这两种组件来实现这些操作。Grid Panel用于显示和编辑表格数据,而Form Panel则用于创建和更新单个记录。 1. 创建(Create):在ExtJS中,可以通过创建一个新的Form ...