var Public=''; function by(id){ if(document.getElementById){ return document.getElementById(id); }else if(document.all){ return document.all[id]; }else if(document.layers){ return document.layers[id]; }else{ return false; } } function PhoneType(){ var agen=window.navigator.userAgent; if(agen.indexOf('Android')>-1){ return 'Android'; }else if(agen.indexOf('iPhone')>-1){ //苹果 return 'iPhone'; }else if(agen.indexOf('iPad')>-1){ //iPad return 'iPad'; }else{ return -1; } } function isArray(obj){ //是否为数组 return Object.prototype.toString.call(obj) === '[object Array]'; } String.prototype.replaceAll = function(s1,s2){ //批量替换原型方法修改 return this.replace(new RegExp(s1,"gm"),s2); } function ArrNeed(arr,needle) { //判断是否包含某个值needle for (i in arr) { if (arr[i].indexOf(needle) > 0){ return i; } } return -1; } //ArrNeed end function getClient(){ //获取客户端基础数据 var device_type = navigator.userAgent;//获取userAgent信息   //document.writeln('您的客户端信息:'+device_type);//打印到页面   var md = new MobileDetect(device_type);//初始化mobile-detect /*console.log( md.mobile() ); // 'Sony' console.log( md.phone() ); // 'Sony' console.log( md.tablet() ); // null console.log( md.userAgent() ); // 'Safari' console.log( md.os() ); // 'AndroidOS' console.log( md.is('iPhone') ); // false console.log( md.is('bot') ); // false console.log( md.version('Webkit') ); // 534.3 console.log( md.versionStr('Build') ); // '4.1.A.0.562' console.log( md.match('playstation|xbox') ); // false */ var os = md.os();//获取系统   var model = "";   if (os == "iOS") {//ios系统的处理     os = md.os() + md.version("iPhone");     model = md.mobile();   } else if (os == "AndroidOS") {//Android系统的处理     os = md.os() + md.version("Android");     var sss = device_type.split(";");     var i = ArrNeed(sss,"Build/"); model=md.mobile();     if (i > -1) {       model += sss[i].substring(0, sss[i].indexOf("Build/"));     }   } //var client='您的版本:'+os + "---" + model; var data={},cli=getstorage('cli'); if(cli){ cli=JSON.parse(cli); } data.os=os; data.model=model; data.mobile=md.mobile(); data.phone=md.phone(); data.tablet=md.tablet(); data.useragent=md.userAgent(); data.version=md.version('Webkit'); data.xbox=md.match('playstation|xbox'); data.dpr=window.devicePixelRatio; //倍率 data.cli=cli; //alert(JSON.stringify(cli)); return {data:data,agent:device_type}; } //getClient end function isMobile(){ //判断是否为手机 var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = false; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = true; break; } } return flag; } function AutoDh(slider,pagenavi){ var as,active=0;as=JQ(pagenavi).find('a'); var t2=new TouchSlider({id:slider, speed:450, timeout:4500, before:function(index){ as.eq(active).removeClass('active'); active=index; as.eq(active).addClass('active'); }}); for(var i=0;i=j){ str=Math.round(n/j,xs)+init; }else{ str=Math.round(n,xs); } if(number<0)str='-'+str; return str; } function NumberDisplay(id,s,e){ //没有中文的截取输出 return id.substr(0,(s ? s : 4))+'***'+id.substr((id).length-(e ? e : 3),(id).length); } //数组排序 function NumAscSort(a,b){ //若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 大于 b,则返回一个大于 0 的值。 若 a 等于 b,则返回 0。 return a - b; } function NumDescSort(a,b){ return b - a; } //var arr = new Array( 3600, 5010, 10100, 801); //arr.sort(NumDescSort); /* var employees=[] employees[0]={name:"George", age:32, retiredate:"March 12, 2014"} employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"} employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"} employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"} employees.sort(arrSort("age")); */ //数组排序 function arrSort(name){ //接受一个成员名字符串做为参数 并返回一个可以用来对包含该成员的对象数组进行排序的比较函数 return function(o, p){ var a, b; if (typeof o === "object" && typeof p === "object" && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw ("error"); } } } //arrSort end //+———————————————————————————————————————— //|序列化表单为json //+———————————————————————————————————————— function serializeform(form){ JQ.fn.serializeObject = function(){ var obj = {}; var count = 0; JQ.each( this.serializeArray(), function(i,o){ var n = o.name, v = o.value; count++; obj[n] = obj[n] === undefined ? v : JQ.isArray( obj[n] ) ? obj[n].concat( v ) : [ obj[n], v ]; }); return JSON.stringify(obj); }; var objectJson=JSON.parse(JQ(form).serializeObject()); return objectJson } function DataType(str){ //输出数据类型 JS判断数据类型 var getType=Object.prototype.toString; //gettype.call('aaaa') 输出 [object String] //gettype.call(2222) 输出 [object Number] //gettype.call(true) 输出 [object Boolean] //gettype.call(undefined) 输出 [object Undefined] //gettype.call(null) 输出 [object Null] //gettype.call({}) 输出 [object Object] //gettype.call([]) 输出 [object Array] //gettype.call(function(){}) 输出 [object Function] return getType.call(str); }//DataType end function isWeiXin(){ //是否在微信下 var user_agent = navigator.userAgent,str=false; if(user_agent.indexOf('MicroMessenger')==-1) {// 非微信浏览器 str=false; }else{ // 微信浏览器,允许访问 str='MicroMessenger'; user_agent=user_agent.split(/.*?(MicroMessenger\/([0-9.]+))\s*/); //获取版本号 if(user_agent.length>=1)str=user_agent[1]; } return str; } function isQQ(){//是否是QQ var user_agent = navigator.userAgent,str=false; if(user_agent.indexOf('MQQBrowser')==-1) {// 非QQ浏览器 str=false; }else{ // QQ浏览器,允许访问 str=user_agent.indexOf('QQ/')==-1 ? false : true; } return str; } function BoxId(obj,inputName){ //批量获取单选复选IDS var o=JQ(obj).find('input[name="'+inputName+'"]:checked'),ids=''; o.each(function(i){ if(ids)ids+=','; ids+=JQ(this).val(); }); return ids; } //JS 操作COOKIE 开始 function setCookie(name,value,time) //name=COOKIE名称 value=cookie的值 time=s30,h2,d1为秒时天 { console.log('剩余时间',time); var strsec=getsec(time),expA = new Date(); expA.setTime(expA.getTime() + strsec*1); document.cookie = name + "="+ value + ";path=/;expires=" + expA.toGMTString(); //默认UTF8编码 escape(value) } function getsec(str){ //这是有设定过期时间的使用示例: //s20是代表20秒 //h是指小时,如12小时则是:h12 //d是天数,30天则:d30 //alert(str); var str1=str.substring(1,str.length)*1; //S后面的值 var str2=str.substring(0,1); //取S前面的值 if (str2=="s"){ return str1*1000; }else if (str2=="h"){ return str1*60*60*1000; } else if (str2=="d") { return str1*24*60*60*1000; } } //读取cookies function getCookie(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr[2]); else return null; } function getCookie1(name) { var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); if(arr=document.cookie.match(reg)) return unescape(arr); else return null; } //删除cookies function delCookie(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null)document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } //使用 setCookie("name","hayden","s20"); //JS 操作COOKIE 结束 function Round(v,e,bl){ //四舍五入 var e1=e; var t=1; for(;e>0;t*=10,e--); for(;e<0;t/=10,e++); var z=Math.round(v*t)/t; //console.log('r',v,e,bl,e1); if(!bl || !e1){ return z; } var z1=z.toString().indexOf('\.')>-1 ? z.toString().split('\.')[1] : ''; //console.log('round',z1,z1.length); var b=''; for(var i=0;i-1 ? z.toString()+b : z.toString()+'.'+b; return z; } function CheckRadio(self){ //data-value-name=新加入的变量(2018-9-30) var o=JQ(self).find('input[type="radio"]'),name=o.attr('name'),obj=JQ('[data-group="'+JQ(self).attr('data-group')+'"]'); //alert(o.val()+' '+name+' '+obj.size()); JQ('input[name="'+name+'"]').prop('checked',false).removeAttr('checked'); //取消所有的单选框 JQ(obj).removeClass('over'); JQ(self).addClass('over'); JQ(self).find('input[type="radio"]').prop('checked',true); JQ(self).find('[data-group="'+JQ(self).attr('data-group')+'"]').addClass('over'); var newName=JQ(self).attr('data-value-name'); if(newName){ JQ('input[name="'+newName+'"]').val(o.val());} } //+———————————————————————————————————————— //|重置 自定义BOX选择框 红点 //+———————————————————————————————————————— function CheckBox(self){ if(JQ(self).find('input[type="checkbox"]').prop('checked')){ JQ(self).find('input[type="checkbox"]').prop('checked',false); JQ(self).find('.checkbox').removeClass('over'); JQ(self).removeClass('over'); // JQ(self).parents(".mainlist").removeAttr('on'); }else{ JQ(self).find('input[type="checkbox"]').prop('checked','checked'); JQ(self).find('.checkbox').addClass('over'); JQ(self).addClass('over'); // JQ(self).parents(".mainlist").attr('on'); } } function AutoImgCenter(obj,li,img){ //自动判断图片的垂直和左右居中效果 obj=父域对象的 li=父域OBJ下的父域对象 img=的类或TAG名 var o=obj; obj=JQ(obj),S=obj.size(); AutoImgCenter_(o,li,img,0,S); //异步加载 } function AutoImgCenter_(o,li,img,i,S){ var obj=JQ(o); var im=new Image(); im.src=obj.eq(i).find(li).find(img).attr('src'); im.onload=function(){ var h=yh=obj.eq(i).find(li).height()-parseInt(obj.eq(i).find(li).css('padding-top'))-parseInt(obj.eq(i).find(li).css('padding-bottom')); //外框真实的高 var w=obj.eq(i).find(li).width()-parseInt(obj.eq(i).find(li).css('padding-left'))-parseInt(obj.eq(i).find(li).css('padding-right')); //外框真实的宽 //var html=(im.src+'=原始:'+im.width+' X '+im.height+' === '+(im.width/(im.height/h))+' X '+h); var t=im.width/(im.height/h); if(t-1){obj.eq(i).find(li).find(img).css({margin:0,width:""});} //} if(i-1){obj.eq(i).find(li).find(img).css({margin:0,width:""});} //} if(i'; JQ(self).html(str); } } //SortEdit end function SortEditBlur(self,id,type,code,where,url){ var value=self.value; JQ(Public).html(value); ajax(url,'post',{type:type,code:code,id:id,where:where,value:value },0,0); } //SortEditBlur end //公用单击直接编辑某字段 end function Date_Sj(dd) { var date = new Date(); //日期对象 var now = ""; //now = date.getFullYear()+"-"; //读英文就行了 //now = now + (date.getMonth()+1)+"-";//取月的时候取的是上月-1如果想取当前月+1就可以了 //now = now + date.getDate()+" "; var JQa=date.getHours(); var JQb; if(JQa>=0 && JQa<=5) JQb="午夜"; if(JQa>=6 && JQa<=8) JQb="早上"; if(JQa>=9 && JQa<=11) JQb="上午"; if(JQa==12) JQb="中午"; if(JQa>=13 && JQa<=17) JQb="下午"; if(JQa>=18 && JQa<=23) JQb="晚上"; now=JQb+" "; now = now + date.getHours()+":"; now = now + date.getMinutes()+":"; now = now + date.getSeconds(); by(dd).innerHTML=now; //div的html是now这个字符串 //var aa="Date_Sj("+dd+")"; setTimeout(function(){Date_Sj(dd)},1000); //设置过1000毫秒就是1秒,调用show方法 } function DateFormat(date,type,cn,day){ //date=必须为长时间2015-1-2 13:13:34 类型 Y-m-d cn=cn||en !day=星期 //JS获取时间 var T=new Date(); if(date){ date=date.split(' '); var d=date[0].split('-'); var hm=date[1].split(':'); T.setFullYear(d[0],d[1]-1,d[2]); T.setHours(hm[0],hm[1],hm[2],0); } var Y,M,D,H,M_,S,t,y_,m_,d_,h_,m__,s_,Day,DAY=new Array('星期日','星期一','星期二','星期三','星期四','星期五','星期六'); Y=T.getFullYear(); //当前年 M=T.getMonth()+1;M=M<10 ? '0'+M : M; D=T.getDate();D=D<10 ? '0'+D : D; H=T.getHours();H=H<10 ? '0'+H : H; M_=T.getMinutes();M_=M_<10 ? '0'+M_ : M_; S=T.getSeconds();S=S<10 ? '0'+S : S; Day=T.getDay(); if(cn.toLowerCase()=='cn'){y_='-';m_='-';d_='';h_=':';m__=':';s_='';}else{y_='-';m_='-';d_='';h_=':';m__=':';s_='';} switch(type.toLowerCase()) { default :t=Y+y_+M+m_+D+d_+(day ? ' '+DAY[Day] : '')+' '+H+h_+M_+m__+S+s_;break; case 'y-m-d h:i':t=Y+y_+M+m_+D+d_+(day ? ' '+DAY[Day] : '')+' '+H+h_+M_;break; case 'y-m-d':t=Y+y_+M+m_+D+d_+(day ? ' '+DAY[Day] : '');break; case 'y-m':t=Y+y_+M+m_+(day ? ' '+DAY[Day] : '');break; case 'm-d':t=M+m_+D+d_+(day ? ' '+DAY[Day] : '');break; case 'h:i:s':t=(day ? ' '+DAY[Day] : '')+H+h_+M_+m__+S+s_;break; case 'h:i':t=(day ? ' '+DAY[Day] : '')+H+h_+M_;break; case 'i:s':t=(day ? ' '+DAY[Day] : '')+M_+m__+S+s_;break; case 'day':t=DAY[Day];break; } //t=!day ?t : t+' '+DAY[Day]; return t; } function TimeStampToTime(timestamp) { //时间戳转为日期格式 var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 Y = date.getFullYear() + '-'; M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; D = date.getDate() + ' '; h = date.getHours() + ':'; m = date.getMinutes() + ':'; s = date.getSeconds(); return Y+M+D+h+m+s; } //TimeStampToTime end function Now_Date(d) { var date = new Date(d); //日期对象 var now = ""; now = date.getFullYear()+"-"; //读英文就行了 now = now + (date.getMonth()+1)+"-";//取月的时候取的是上月-1如果想取当前月+1就可以了 now = now + date.getDate()+" "; //var JQa=date.getHours(); //now=JQb+" "; now = now + date.getHours()+":"; now = now + date.getMinutes()+":"; now = now + date.getSeconds(); //console.log('时间:',now); return now //document.getElementById(dd).innerHTML=now; //div的html是now这个字符串 //var aa="Date_Sj("+dd+")"; //setTimeout(function(){Date_Sj(dd)},1000); //设置过1000毫秒就是1秒,调用show方法 } function GetRandomNum(Min,Max) //随机数 { var Range = Max - Min; var Rand = Math.random(); return(Min + Math.round(Rand * Range)); } function generateMixed(n) { //随机数 var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; var res = ""; for(var i = 0; i < n ; i ++) { var id = Math.ceil(Math.random()*35); res += chars[id]; } return res; } function TimeQ(s,e){ //计算两个时间之间的秒差提示 e=e ? parseInt(e/1000) : parseInt((new Date().getTime())/1000); s=parseInt(s/1000); var cz=e-s; //差值秒 if(cz<=1){ return '1秒前'; }else if(cz<5){ return '5秒前'; }else if(cz<10){ return '10秒前'; }else if(cz<20){ return '20秒前'; }else if(cz<30){ return '30秒前'; }else if(cz<60){ return '1分钟前' }else if(cz<120){ return '2分钟前'; }else if(cz<300){ return '5分钟前'; }else if(cz<600){ return '10分钟前'; }else if(cz<1200){ return '20分钟前'; }else if(cz<1800){ return '30分钟前'; }else if(cz<3600){ return '1小时前'; }else if(cz<7200){ return '2小时前'; }else{ return 0; //'比较久了'; } } //TimeQ end function setstorage(objName,objValue){ //设置SESSION变量 var str=getstorage(objName); if(str!=null && str!='' && typeof str!='undefined')clearstorage(objName); //如果存在则先清除 var sto = window.localStorage; if(sto) sto.setItem(objName,objValue); } function getstorage(objName){ //获取变量 var ret = ''; var sto = window.localStorage; if(sto) ret=sto.getItem(objName); return ret; } function clearstorage(objName){ //清除变量 var sto = window.localStorage; if(sto){ if(objName) sto.removeItem(objName); //如果存在才清除,如果不存在则所有的都清除 else storage.clear(); } } function setStorJson(objName, json){ //设置JSON对象 if(json) setstorage(objName,JSON.stringify(json)); } function getStorJson(objName){ //获取JSON对象 var ret = {}; var str = getstorage(objName); if(str) ret=JSON.parse(str); return ret; } function lenecho(str,len,end){ //截取字符串 str=字符串 len=截取的长度 end=连接的结尾 var str=getByteVal(str,len); str=str ? str+end : str; return str; } function trim(str){ return str.trim(); } //trime //返回val的字节长度 function getByteLen(val) { var len = 0; val=val.split(""); //IE7 等其它兼容模式下使用 需转换成数组 //alert(val[i].match(/[^\x00-\xff]/ig)); for (var i = 0; i < val.length; ++i) { //alert(val[i]); if(val[i]!="undefined") { if (val[i].match(/[^\x00-\xff]/ig)!= null) //全角 汉字 len += 2; //如果用来判断中文请改为len += 2; else len += 0.5; } } return len; } //返回val在规定字节长度max内的值 function getByteVal(val,max_) { var returnValue = ''; var byteValLen = 0; val=trim(val).split(''); for (var i = 0; i < val.length; i++) { if (val[i].match(/[^\x00-\xff]/ig) != null){ //如果是中文 byteValLen += 1;// UTF-8下把中文也看成是一个字符 }else{ byteValLen += 1; } if(byteValLen > max_)break; returnValue+=val[i]; } return returnValue; } function Get(par){ //获取地址栏参数 //获取当前URL var local_url = document.location.href; //获取要取得的get参数位置 var get = local_url.indexOf(par +"="); if(get == -1){ return false; } //截取字符串 var get_par = local_url.slice(par.length + get + 1); //判断截取后的字符串是否还有其他get参数 var nextPar = get_par.indexOf("&"); if(nextPar != -1){ get_par = get_par.slice(0, nextPar); } return get_par; } //Get function PublicHeader(obj){ //公用头部 var str=''; return str; } //PublicHeader end function PublicFooter(obj){ if(!obj.data){ var data=[]; data[0]={}; data[0].title='首页'; data[0].img=['image/footer_0.png','image/footer_0_over.png']; data[0].windowName='home'; data[1]={}; data[1].title='商城'; data[1].img=['image/footer_1.png','image/footer_1_over.png']; data[1].windowName='mall'; data[2]={}; data[2].title='购物车'; data[2].img=['image/cart_2.png','image/cart_2_over.png']; data[2].windowName='member'; data[3]={}; data[3].title='会员'; data[3].img=['image/footer_3.png','image/footer_3_over.png']; data[3].windowName='member_b'; data[4]={}; data[4].title='我的'; data[4].img=['image/footer_4.png','image/footer_4_over.png']; data[4].windowName='member_b'; obj.data=data; } var str=''; return str; } //PublicFooter end function FooterClick(self){ //底部菜单点击效果 var o=JQ(self).parents('.b:eq(0)'),k=o.find('.foot_menu').index(self),temp=''; o.find('.foot_menu').removeClass('over'); JQ(self).addClass('over'); for(i=0;i'+num+''; o.eq(index).append(str); } //FooterInsert end function PublicMenu(self,AdClass){ //公用选项卡切换 var o=JQ(self).parents('.public_menu:eq(0)'),i=o.find('.mt').index(self); AdClass=AdClass.split(','); for(k in AdClass){ o.find('.mt').removeClass(AdClass[k]); } for(k in AdClass){ o.find('.mt').eq(i).addClass(AdClass[k]); } var obj=JQ(JQ(self).attr('rel')); obj.removeClass('over').eq(i).addClass('over'); } //PublicMenu end function ajax(obj){ //公用AJAX 请求 debug=1 开启内容输出弹窗 func=自定运行函数 try{ if(typeof obj.debug=='undefined'){ obj.debug=0; } //var client_abc=obj.url.indexOf('?')>-1 ? '&' : '?'; var us=getstorage('user'); var cl=getClient(); cl.data.model=typeof cfg.device!='undefined' && typeof cfg.device.model!='undefined' ? cfg.device.model : cl.data.model; //alert(cl.model); //client_abc+='client_abc='+encodeURIComponent(JSON.stringify(cl.data))+'&agent_abc='+encodeURIComponent(cl.agent)+'&user_abc='+(us ? user.id : ''); var url=obj.url;//+client_abc; var obja={ url:url, type:typeof (obj.type)!='undefined' ? obj.type : 'POST', data:typeof (obj.data)!='undefined' ? obj.data : {}, offline:typeof (obj.offline)!='undefined' ? obj.offline : 'undefined', dataType:typeof (obj.dataType)!='undefined' ? obj.dataType : 'json', offlineDataPath : typeof (obj.wgt)!='undefined' ? obj.wgt : 'wgt://cache/', timeout:typeof obj.timeout!='undefined' ? obj.timeout : 20000, //超时为10秒 cache:typeof obj.cache!='undefined' ? true : false, async:true, }; obja.error=function(e, errorType, error,msg) { alert('ajax发生错误:'+e+"\r\n"+'错误码类型:'+errorType+"\r\n"+' 错误代码:'+error+"\r\n"+'msg='+msg+"\r\n请求地址:"+url+"\r\n请求数据:"+JSON.stringify(obja.data)); //for(k in e){ //alert(k+'='+e[k]); //} //if(cfg.execute==0){ layer.open({content:'ajax发生错误:'+JSON.stringify(e),time:15,skin:'msg'}); } //(e.settings_1) /*appcan.window.evaluateScript({ //在主窗口执行 name:'', scriptContent:'layer.open({type:2,shadeClose:false,time:2})', //为了同步显示效果 });*/ }; obja.success=function(data) { //alert('appcan.request.ajax-success:'+data); //layer.open({content:JSON.stringify(data),time:2,skin:'msg'}); if(obj.debug){ layer.open({content:'请求成功,调试数据:'+(obja.dataType!='json' ? data : JSON.stringify(data)),time:600,skin:'msg'}); return false;} //debug调试 显示10分钟 if(obj.call){ obj.call(data); return false; } if(obj.func){ eval(obj.func); }else{ //默认处理成JSON data=obja.dataType=='html' ? JSON.parse(data) : data; eval(data.code); } /*appcan.window.evaluateScript({ //在主窗口执行 name:'', scriptContent:'layer.open({type:2,shadeClose:false,time:2})', //为了同步显示效果 });*/ }; if(typeof obj.expires!='undefined') { obja.expires=obj.expires; } if(obj.debug){ alert('请求前的数据:'+JSON.stringify(obja)); } appcan.request.ajax(obja); }catch(e){ alert('ajax请求错误:'+e.message); } } //ajax end function Sign(data){ //POST 签名 if(typeof data.device_id=='undefined'){ data.device_id=cfg.device_id; } if(typeof data.client_ver=='undefined'){ data.client_ver=cfg.ver[0]; } if(typeof data.token=='undefined'){ data.token=getstorage('token'); } if(!data.datetime){ var d=new Date(); data.datetime=d.getFullYear().toString(); data.datetime+=d.getMonth()+1<10 ? '0'+(d.getMonth()+1) : d.getMonth()+1; data.datetime+=d.getDate()<10 ? '0'+(d.getDate()) : d.getDate(); data.datetime+=d.getHours()<10 ? '0'+(d.getHours()) : d.getHours(); data.datetime+=d.getMinutes()<10 ? '0'+(d.getMinutes()) : d.getMinutes(); data.datetime+=d.getSeconds()<10 ? '0'+(d.getSeconds()) : d.getSeconds(); //+d.getDay()+d.getHours()+d.getMinutes()+d.getSeconds(); } var sign='',time=(new Date()).getTime()*0.001; var dat=[]; for(var k in data){ if( !Number(data[k]) && !data[k] ){ continue; } dat.push({key:k,value:data[k]}); } dat.sort(function(a, b) { //按ASCII排序 var nameA = a.key.toUpperCase(); // ignore upper and lowercase var nameB = b.key.toUpperCase(); // ignore upper and lowercase if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } return 0; }); var data={}; var str=''; for(var k in dat){ if(dat[k].key=='sign'){ continue; } data[dat[k].key]=dat[k].value; if(str){ str+='&'; } str+=dat[k].key+'='+dat[k].value; } if(str){ str+='&key='+cfg.app.key; sign=md5(str).toUpperCase(); } //console.log('app-dat',dat); //console.log('app-data',data); //console.log('app-str',str); if(str){ var dat=data; //JSON.parse(JSON.stringify(data)); dat.sign=sign; } return {sign:sign,str:str,time:time,dat:dat}; } //Sign end function SignToData(data){ //POST 本地签名 并转为可提交的数据 data必须为数组 var s=Sign2(data); return s.dat; } //SignToData end function Sign2(data) { if(typeof data.device_id=='undefined'){ data.device_id=cfg.device_id; } if(typeof data.client_ver=='undefined'){ data.client_ver=cfg.ver[0]; } if(typeof data.token=='undefined'){ data.token=getstorage('token'); } if(!data.datetime){ var d=new Date(); data.datetime=d.getFullYear().toString(); data.datetime+=d.getMonth()+1<10 ? '0'+(d.getMonth()+1) : d.getMonth()+1; data.datetime+=d.getDate()<10 ? '0'+(d.getDate()) : d.getDate(); data.datetime+=d.getHours()<10 ? '0'+(d.getHours()) : d.getHours(); data.datetime+=d.getMinutes()<10 ? '0'+(d.getMinutes()) : d.getMinutes(); data.datetime+=d.getSeconds()<10 ? '0'+(d.getSeconds()) : d.getSeconds(); //+d.getDay()+d.getHours()+d.getMinutes()+d.getSeconds(); } var sdic = Object.keys(data).sort(); //按字典排序 var str = ''; var length = sdic.length; for (var ki in sdic) { var k = sdic[ki]; if ((data[k] && k != 'sign') || data[k] === 0) { str += k + '=' + data[k] + '&'; } else { data[k] = ''; } } str += "key=" + cfg.app.key; var sign=md5(str).toUpperCase(),time=(new Date()).getTime()*0.001; data.sign=sign; return {sign:sign,str:str,time:time,dat:data}; } //Sign2 end function CacheUserCall(res,data,key){ //防止手机内存不足或localStorage出错引起的登录数据丢失的问题 if(!res){ //读缓存错误 //alert('缓存用户数据不存在'); return false; } //alert('防止手机内存不足或localStorage出错引起的登录数据丢失的数据库缓存:'+JSON.stringify(data)); setstorage(key ? key : 'user',decodeURIComponent(data[0].value)); } //CacheUserCall end function CheckLogin(obj,hideName){ //检测用户登录 hideName=如果存在则隐藏hideName浮动窗口 try{ if(typeof obj=='undefined'){ obj={}; } var s=getstorage('user'); if(s==null){ //alert(s+' =1'); //if(typeof db!='undefined'){ Cache(db,'user','',CacheUserCall); } //如果数据库加载了的读一下缓存 //setTimeout(function(){ //延时判断 //s=getstorage('user'); //if(s==null){ //alert(s+' =打开新窗口'); OpenPop('login','login.html',obj); appcan.window.evaluateScript({ name:'', scriptContent:'so.close();',}); //子窗口在主窗口执行 //直接断开 if(hideName){ HidePop(hideName); } appcan.window.bringPopoverToFront('login'); //uexWindow.closeMultiPopover('content'); //关闭多页面浮动窗口 //} //},300); } return s; }catch(e){ alert('CheckLoginError:'+e.message); } } //CheckLogin end function LoginOut(self){ //退出账户-直接退出不提示弹窗 clearstorage('token'); //清除登录缓存token clearstorage('login_user_cache'); //清楚记住的登录账号信息 clearstorage('username'); //清楚当前用户名 //alert(2); mob_msg('Exit successfully!
about to jump to the home page of this site',2); setTimeout(function(){ location='/'; },2000); } //LoginOut end function Loading(content,time,shadeClose,shade){ //加载中 if(typeof shade=='undefined'){ shade=0.5;} if(typeof shadeClose=='undefined'){ shadeClose=false;} time=typeof time!='undefined' ? time : 5; content=typeof content!='undefined' ? content : ''; layer.open({ type:2,shadeClose:shadeClose,content:content,shade:shade,time:time}); //shade=背景透明 if(shade==0){ JQ('.layui-m-layer2 .layui-m-layercont i').css({backgroundColor:'#ff9900'}); } var layerId=Number(JQ('.layui-m-layer').eq(JQ('.layui-m-layer').size()-1).attr('index')); setTimeout(function(){ layer.close(layerId); },time*1000); return layerId; } //Load end function AutoAppHead(){ //自动头部识别 /*var agen=window.navigator.userAgent; if(agen.indexOf('AppCan')==-1 && agen.indexOf('fzt')==-1){ //如果不在APP下 var agenArr=['OPPO R9'],s=false; for(i=0;i-1){ s=true;break; } } if(s){ JQ(function(){ JQ('head').append(''); }); } }*/ JQ(function(){ var w=typeof cfg!='undefined' ? cfg.w : JQ(window).width(); if((PhoneType()=='iPhone' || PhoneType()=='iPad') && window.navigator.userAgent.indexOf('Appcan')>-1){ //处理APP顶部的距离 (PhoneType()=='iPhone' || PhoneType()=='iPad') && var top=20;//JQ(window).width()*0.0625; JQ(document.body).prepend('
'); // JQ("#header").css({top:top}); var cont=['#content','#content0','#content1','#content2','#content3','.pub_search','.found_menu'],h=''; for(i in cont){ if(JQ(cont[i]).size()){ //h=JQ(cont[i]).outerHeight(); JQ(cont[i]).css({marginTop:top}); } } } //JQ('html,body').css({overflow:"hidden",width:w}); }); } //AutoAppHead end function Ver(){ //客户端版本 return cfg.ver[PhoneType()=='Android' ? 0 :1]; } //Ver end function DeviceId(){ //获取设备ID cfg.device={}; /*appcan.device.getDeviceInfo(function(deviceInfo,singleInfo,i,len,completeCount){ //deviceInfo当前已经获得的设备信息 singleInfo正在读取的设备信息 i设备信息id len设备信息总数 completeCount已经获得的设备信息数 //alert(JSON.stringify(deviceInfo)+' '+JSON.stringify(singleInfo)+' '+i+' '+len+' '+completeCount); if(completeCount-1==10){ cfg.device_id=deviceInfo.imei; } cfg.device=deviceInfo; //alert(JSON.stringify(cfg.device)); if(completeCount==len){ setstorage('device',JSON.stringify(cfg.device)); } });*/ try{ appcan.device.getInfo(17,function(err,data,dataType,optId){ //只取设备类型 if(err){ alert('获取设备出错1:'+err); return false;} cfg.device=JSON.parse(data); //alert('读取设备型号:'+data+' = '+JSON.stringify(data)); appcan.device.getInfo(10,function(err,dat,dataType,optId){ //alert(JSON.stringify(dat)+' '+err); if(err){ alert('获取设备出错2:'+err); return false;} dat=JSON.parse(dat); cfg.device_id=dat.imei; //唯一码 cfg.device.imei=dat.imei; setstorage('device',JSON.stringify(cfg.device)); }); }); }catch(e){ alert(e.message); } } //DeviceId end function removeHtmlTab(tab) { //去掉html标签 return tab.replace(/<[^<>]+?>/g,'');//删除所有HTML标签 } function htmlspecialchars(sHtml) { //普通字符转换成转意符 return sHtml.replace(/[<>&"]/g,function(c){return {'<':'<','>':'>','&':'&','"':'"'}[c];}); } function htmlspecialchars_decode(str) { //转意符换成普通字符 var arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'"'}; return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];}); } function nbsp2Space(str) { //  转成空格 var arrEntities = {'nbsp' : ' '}; return str.replace(/&(nbsp);/ig, function(all, t){return arrEntities[t]}) } function return2Br(str) { //回车转为br标签 return str.replace(/\r?\n/g,"
"); } function trimBr(str) { //去除开头结尾换行,并将连续3次以上换行转换成2次换行 str=str.replace(/((\s| )*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次换行 str=str.replace(/^((\s| )*\r?\n)+/g,'');//清除开头换行 str=str.replace(/((\s| )*\r?\n)+$/g,'');//清除结尾换行 return str; } function mergeSpace(str) { //将多个连续空格合并成一个空格 str=str.replace(/(\s| )+/g,' '); return str; } function Djs(obj,i,time){ //倒计时开始 obj=要改变文字的对象 i=当前执行到第几秒了 time=总时间 //console.log('开始倒计时'); if(i-1){ url=u.head; }else{ if(Number(u.head)==0 || !u.head){ url=cfg.user.head[Number(u.sex)]; }else{ url=cfg.url+u.head; var f=FileInfo(url); var cacheFile=cfg.cache+f.name; var ret=uexFileMgr.isFileExistByPath(cacheFile); //本地文件是否存在 if(ret){ //如果有缓存 url=uexFileMgr.getFileRealPath(cacheFile); }else{ var downloader = uexDownloaderMgr.create(); var headJson = '{"Content-type":"application/json;charset=utf-8"}'; uexDownloaderMgr.setHeaders(downloader, headJson); ret = uexFileMgr.mkdir({ path:cfg.cache }); //alert(cacheFile+' '+ret); uexDownloaderMgr.download(downloader, url, //下载的远程地址 cacheFile, //本地文件地址 1, //1=断点续传 function(fileSize, percent, status){ try{ switch (status) { case 0: //self.innerHTML= '下载 ' + SizeTo(fileSize,'kb') + ' 已完成' + percent+'%'; //msg('下载 ' + SizeTo(fileSize,'kb') + ' 已完成' + percent+'%'); if(fileSize==0){ uexDownloaderMgr.cancelDownload(url,1); } break; case 1: //msg('下载完成'); //setTimeout(function(){ self.innerHTML='下载完成'; },500); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 break; case 2: //msg('头像获取失败'); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 break; } }catch(e){ alert(e.message); } } ); //download end var dw=uexDownloaderMgr.getInfo(url); //获取下载对象的相关信息 uexDownloaderMgr.cbGetInfo=function(d,e,f){ //alert(d+' '+e+' '+f); f=JSON.parse(f); if(!f.status==1){ uexDownloaderMgr.cancelDownload(url,1); //取消下载 默认为0 0-只取消此次下载任务,不清除已经下载的临时文件. 1-取消此次下载任务并清除已经下载的临时文件 //msg('头像已被清理'); return false; } }; //cbGetInfo end } //缓存头像 } } return url; } //UserHead end function CreateMsg(self,accept) { //创建聊天 var u=''; if(typeof user=='undefined'){ u=JSON.parse(getstorage('user')); }else{ u=user; } var data={}; //device_id:getDeviceId() data.uid=u.id.toString(); data.accept=accept.toString(); data=SignToData(data); //alert(JSON.stringify(data)); Loading('加载中···'); ajax({func:'CreateMsgCall(data);',url:cfg.requrl+'chat/createMessage',data:data,debug:0}); } //CreateMsg end function CreateMsgCall(data){ //创建聊天-异步加载 layer.closeAll(); data=JSON.parse(data); if(Number(data.status)!=0){ msg(data.msg);return false; } setstorage('message',JSON.stringify(data.data)); //缓存会话数据 //alert(JSON.stringify(data.data)); uexWindow.evaluateMultiPopoverScript({ //在滑动窗口中执行 windowName:'', popName:'content', pageName:'is_b', js:'StartMsg()', }); HidePopAll(); //隐藏所有的浮动窗口 //切换页面 setTimeout(function(){ //不要让用户看到列表页面的动画 在主窗口中执行选择聊天窗口 appcan.frame.selectMulti({ index:1, popName:'content', }); },1); if(PhoneType()!='Android'){ //苹果手机手工切换到1号窗口 appcan.window.evaluateScript({ name:'', scriptContent:'JQ("#footer .foot_menu").eq(1).trigger("touchend");',}); //子窗口在主窗口执行 } } //CreateMsgCall end function OpenPop(name,url,obj){ //打开一个浮动窗口 窗口名字 url=地址 obj=配置参数 if(typeof obj=='undefined'){ obj={}; } var sobj={ name:name, dataType:0, url:url, top:typeof obj.top!='undefined' ? obj.top : 0, left:typeof obj.left!='undefined' ? obj.left : 0, width:typeof obj.w!='undefined' ? obj.w : cfg.w, height:typeof obj.h!='undefined' ? obj.h : cfg.h, }; //sobj.bottomMargin=0; //alert(JSON.stringify(sobj)); var RegWinName=getstorage('RegWinName'); //注册的窗口名称 if(RegWinName){ if( (','+RegWinName+',').indexOf(','+name+',')==-1 ){ RegWinName+=','+name; } //不在里面 }else{ RegWinName=name; } setstorage('RegWinName',RegWinName); appcan.window.openPopover(sobj); appcan.window.sendPopoverToBack(name); //最下层 } //OpenChat end function ShowPop(name,js,an){ //显示浮动窗口 an=是否执行动画 //先检查是否打开 var RegWinName=getstorage('RegWinName'); //注册的窗口名称 if( !RegWinName || (','+RegWinName+',').indexOf(','+name+',')==-1 ){ //不在里面 var url=name+'.html'; var sobj={ name:name, dataType:0, url:url, top:0, left:0, width:cfg.w, height:cfg.h, }; //alert('ShowPop:开新窗口='+name+'.html='+JSON.stringify(sobj)); OpenPop(name,url,sobj); setstorage('ShowPop',js ? js : ''); //子窗口好执行代码 return false; } //alert('ShowPop:老窗口='+name); setstorage('ActivityName',name); if(typeof js=='undefined'){ js='';} if(js){ appcan.window.evaluatePopoverScript({ name:'', popName:name, scriptContent:js, }); } //先执行数据 //父窗口执行浮动窗口操作 测试是可以用的 if(!an){ appcan.window.resizePopover({name:name,left:0,top:0,width:cfg.w,height:cfg.h,}); //显示窗口 }else{ appcan.window.resizePopover({name:name,left:cfg.w,top:0,width:cfg.w,height:cfg.h,}); //显示窗口 ShowPop_(name,1,cfg.w,40,5); } appcan.window.bringPopoverToFront(name); //最上层 } //ShowPop end function ShowPop_(name,n,start,antime,time){ //隐藏动画处理 n=当前移动第几次了 start=起始位置 antime=总共要移动的时间 time=运动精度 var px=start/(antime/time); //每次要移动的像素 appcan.window.resizePopover({ name:name, left:start-n*px, top:0, width:cfg.w, height:cfg.h }); if(start-n*px>0){ setTimeout(function(){ ShowPop_(name,++n,start,antime,time); },time); }else{ appcan.window.resizePopover({ name:name, left:0, top:0, width:cfg.w, height:cfg.h }); } } //ShowPop end function HidePop(name,an){ //隐藏浮动窗口 an=是否执行动画 setstorage('ActivityName',''); if(!an){ appcan.window.resizePopover({ name:name, left:100000, top:100000, width:cfg.w, height:cfg.h }); }else{ HidePop_(name,1,cfg.w,50,5); } //appcan.window.sendPopoverToBack(name); //最下层 //appcan.window.closePopover(name); //关闭浮动窗口 } //HidePop end function HidePop_(name,n,end,antime,time){ //隐藏动画处理 n=当前移动第几次了 end=最终位置 antime=总共要移动的时间 time=运动精度 var px=end/(antime/time); //每次要移动的像素 appcan.window.resizePopover({ name:name, left:n*px, top:0, width:cfg.w, height:cfg.h }); if(n*px'; str+='
'; str+='
'; str+='
'; for(k in obj){ str+='
'+obj[k].name+'
'; } str+='
'; str+='
'; str+='
 
'; str+=''; //id end JQ('body').append(str); Compatible(parseInt(JQ("#header").css('top')),'.'+id+' .b'); //苹果兼容处理 JQ('.'+id+' .bj').on('click',function(){ JQ('.'+id).hide(); }); } var o=JQ('.'+id); if(o.css('display')=='none'){ //显示 o.show(); }else{ //隐藏 o.hide(); } }catch(e){ if(cfg.execute==0){ alert(e.message()); } } } //RightMenu end function Compatible(t,obj){ //安卓和苹果顶部的兼容处理 t=默认顶部的距离(要增加的距离) obj=要改变的对象顶部的距离 var type=PhoneType(); if(t && (type=='iPhone' || type=='iPad')){ JQ(obj).css('top',parseInt(JQ(obj).css('top'))+t); } } //Compatible end function Complaints(pName,title,id){ //pName=完成后要显示的窗口名称 title=投诉主题 id=投诉标识 //SendIdea(3,{title:title,func:'',showPop:'',hidePop:'',upNum:3,chat_id:id}); setstorage('tmp',JSON.stringify({title:title,func:'Back()',showPop:'',hidePop:'',upNum:3,chat_id:id,type:3,placeholder:'请输入投诉内容'})); ShowPop('complaints','init("'+pName+'")',1); } //Complaints end function ChatAdd(ch_id){ //聊天窗口添加成员 共用的 //权限判断 if(user.role_list[user.role].mark!='handle'){ //允许办事员操作目前 //msg('您不是'+user.role_listmark.handle.title+',不可以操作该功能');return false; } JQ('.RightMenu .bj').trigger('click'); //关闭 setstorage('chat_adduser','{"title":"添加成员","id":"'+ch_id+'"}'); //子页面用 ShowPop('chat_adduser','init('+ch_id+')',1); HidePop('chat_index',''); //隐藏聊天主页窗口 } //ChatAdd end function OpenEdit(self,text,obj){ //打开全屏编辑窗口 data-type=1(一个INPUT编辑窗口) 2(一个TEXTAREA编辑窗口) 3(日历) 4(地区选择) obj=其它配置 var type=Number(JQ(self).attr('data-type')?JQ(self).attr('data-type'):obj.type),str='',btn=['保存修改','取消']; if(!obj){obj={name:'name'};} //初始化 if(!obj.name){ obj.name='name'; } if(obj.start){ str+=obj.start; } if(obj.btn){ btn=obj.btn; } if(!obj.placeholder){ obj.placeholder=''; } switch(type){ case 1: str+='
'; break; //1 end case 2: str+='
'; break; //2 end } if(obj.end){ str+=obj.end; } layer.open({ type:1, title:obj.title ? [obj.title,'border-bottom:1px solid #f2f2f2'] : '', content:str,anim:'up',style:'width:90%;border-radius:0.5em;-moz-border-radius:0.5em;-webkit-border-radius:0.5em;' ,btn: btn ,yes: function(index){ //layer.close(index); eval(obj.func); } }); JQ('.layui-m-layermain').css({bottom:0,position:'fixed',height:JQ(window).height()}).find('.layui-m-layersection').css({position:'absolute',width:'100%',top:'8%'}); Compatible(parseInt(JQ("#header").css('top')),'.layui-m-layermain'); //苹果兼容处理 //var s=document.getElementsByClassName('layui-m-layermain').item(0); s.style.bottom='0px'; s.style.position='absolute'; s.style.height=window.innerHeight+'px'; } //OpenEdit end function Gjz(t,keywords){ //高亮关键字 return ''+t.replace(keywords,''+keywords+'')+''; } //Gjz end function GetCanvasToImg(id,path,ext){ //根据ID返回canvas图片 //var canvas=$(obj); if(JQ('#'+id).size()==0){ JQ('body').append('
'); } //alert(path); ext=ext ? ext : 'jpeg'; var c=document.getElementById(id).getElementsByTagName("canvas")[0]; var ctx = c.getContext('2d'); var img = new Image(); img.onload = function() { ctx.drawImage(img, 0, 0); alert('onload='+this.src+' '+this.width+' '+this.height); //JQ('.chat').append(''); }; img.src = path; ctx.drawImage(img,0,0); alert(img.width+' '+img.height); var data=c.toDataURL('image/'+ext); return data; //data.substring(23); } //GetCanvasToImg end function UploadFile(data,k,msgid,cb){ //公用文件上传接口 data=[] 图片路径 k=当前第几个 cb=回调函数 还没有写好 uploader = uexUploaderMgr.create({url: cfg.requrl+'upimg/formUpfiles',type:1}); if(!uploader){ msg('第'+(k+1)+'次上传初始化失败,已停止上传');return false; } var dat={}; msgid[k]=(new Date()).getTime()+'_'+(Math.floor(Math.random()*100000))+'_'+k; //device_id:getDeviceId() dat.type='chat_sendimg'; dat.uid=user.id.toString(); dat.msgid=msgid[k].toString(); dat.addtime=Math.floor((new Date()).getTime()/1000).toString(); var js=SignToData(dat); //设置请求头 var ret = uexUploaderMgr.setHeaders(uploader,JSON.stringify(js)); var file='file://'+uexFileMgr.getFileRealPath(data[k]);//'res://'+info.data[k];// //alert(data[k]+' == '+file); /* //可以到是可以就是要卡屏这样就不好了 var file = uexFileMgr.open({ path: file, mode:1 }); uexFileMgr.readFile(file, -1,1,function(error,data){ if(!error){ alert(data); JQ('.chat').append(''); }else{ alert("读取失败!"); } });*/ var d=GetCanvasToImg('an_img_tmp',file),d=PackMsg(d,0,msgid[k],'',TimeStampToTime(dat.addtime),2); //JQ('.chat').append(''); JQ('.chat').append(d); //当前窗口显示消息 uexUploaderMgr.uploadFile(uploader,data[k],"FormUpFiles",1,3000,cb); } //UploadFile end function SendVoice(self,chat_id,uid){ //语音电话拔打 //msg('暂未上线'); //+chat_id+' = '+uid var data={}; //device_id:getDeviceId() data.chat_id=chat_id.toString(); data.uid=uid ? uid.toString() : user.id.toString(); data=SignToData(data); //alert(JSON.stringify(data)); Loading('验证中···','',false,0); //JQ('#content0').attr('data-page',page); ajax({func:'SendVoiceCall(data);',url:cfg.requrl+'chat/getCallPhone',data:data,debug:0}); } //SendVoice end function SendVoiceCall(data){ //拨打电话回调 try{ data=JSON.parse(data); if(data.status){ msg(data.msg); return false; } switch(data.type){ case 1 : //2人对话可以直接拨打的情况 uexCall.dial(data.data[0].mobile); break; //1 end case 2: //多个电话 var str=''; for(k in data.data){ str+='
'+data.data[k].mobile+'('+data.data[k].nickname+')
'; } //for end layer.open({content:str,btn:['取消'],shadeClose:false,yes:function(ind){ layer.close(ind); }}); break; //2 end } //switch end }catch(e){ alert(e.message); } } //SendVoiceCall end function OpenUserIndex(self,id,obj){ //打开用户主页 obj=配置参数方便后面修改 setstorage('me_index','{"title":"资料","id":"'+id+'"}'); if(obj){ if(obj.hide){ HidePop(obj.hide); } } ShowPop('me_index','init('+id+',"'+(obj && obj.show ? obj.show : '')+'")'); } //OpenUserIndex end function FileType(path){ //文件类型返回 var arr={},img=',jpg,jpeg,png,gif,bmp,',file='doc,docx,xls,xlsx,ppt,pptx,txt,pdf,xml'; //可识别的图片和文件类型 arr.isimage=false; arr.isfile=false; arr.status=0; var t=path.split('/'),t1=t[t.length-1].split('.'); if(t1.length<2){ arr.msg='没有扩展名不能识别'; arr.status=1; return arr; } arr.ext=t1[t1.length-1]; //扩展名 arr.ext_=t1[t1.length-1].toLowerCase(); //转小写的扩展名 arr.name=t[t.length-1]; if( img.indexOf(','+arr.ext_+',')>-1 ){ arr.isimage=true; arr.msg='图片'; }else if( (','+file+',').indexOf(','+arr.ext_+',')>-1 ){ //如果是可识别的类型 arr.isfile=true; arr.icon='image/ext/'+arr.ext_+'.png'; //返回图标 arr.msg='可识别文件'; }else{ arr.msg='不可识别文件'; arr.icon='image/ext/other.png'; //返回其它类型的文件图标 } return arr; } //FileType end function FileSize(path,type){ //文件大小 var file = uexFileMgr.open({path: path,mode:1}); var size = uexFileMgr.getFileSize(file); return SizeTo(size,type); } //FileSize end function FileInfo(file){ //根据文件路径返回相关数据 if(!file){ return false; } var arr={},t; arr.path=''; arr.name=''; arr.ext=''; if(file.indexOf('/')==-1){ arr.name=file; }else{ t=file.split('/'); arr.name=t[t.length-1]; arr.path=file.replace(arr.name,''); /*if(t.length>1){ for(i=0;i-1){ t=arr.name.split('.'); if(t.length>2){ arr.ext=t[t.length-1]; }else{ arr.ext=t[1]; } } return arr; //alert(arr.ext); } //FileInfo function SizeTo(size,type){ //文件大小进度转换 type=type.toLowerCase(); var str=''; switch(type){ case 'kb': str=(Math.ceil(size/1024*100)/100)+type.toUpperCase(); break; case 'b': str=size+type.toUpperCase(); break; case 'mb': str=(Math.ceil(size/1024/1024*100)/100)+type.toUpperCase(); break; case 'gb': str=(Math.ceil(size/1024/1024/1024*100)/100)+type.toUpperCase(); break; } //switch end return str; } //SizeTo end function NewWorkStatus(type){ //网络状态监听回调 msg(cfg.networktype[type]); ContentError(-1); if(type==-1){ //无网的情况 JQ('.netError .err font').html(cfg.networktype[type]); }else{ JQ('.netError .ok font').html(cfg.networktype[type]); JQ('.netError').addClass('over'); setTimeout(function(){ JQ('.netError').animate({marginTop:-JQ('.netError').height()*2},2000); setTimeout(function(){ JQ('.netError').remove(); },2100); //去掉连接状态 },2500); } } //NewWorkStatus end function TextAreaAdapt(id) { //TextAreaAdapt(textarea); textarea自适应高度 var el=document.getElementById(id); var setStyle = function(e) { e.style.height = 'auto'; e.style.height = e.scrollHeight + 'px'; // console.log(el.scrollHeight); } var delayedResize = function(el) { window.setTimeout(function() { setStyle(el); },0); } if (el.addEventListener) { el.addEventListener('input',function() { setStyle(el); },false); setStyle(el); } else if (el.attachEvent) { el.attachEvent('onpropertychange',function() { setStyle(el) }); setStyle(el); } if (window.VBArray && window.addEventListener) { //IE9 el.attachEvent("onkeydown",function() { var key = window.event.keyCode; if (key == 8 || key == 46){ delayedResize(el); } }); el.attachEvent("oncut",function() { delayedResize(el); }); //处理粘贴 } } //TextAreaAdapt end function MsgBox(obj){ //会话包装 is_b 用,其它地方也要用 会话列表效果 var date=TimeStampToTime(Number(obj.addtime)); var con=MsgTypeReturn(obj.message && obj.message[0] ? obj.message[0].content : '暂无消息',obj.message && obj.message[0] ? obj.message[0].type : ''); //alert(obj.addtime+' '+date); //alert(JSON.stringify(UserObj)); var str='
'; str+='
'; str+='
'; if(Number(obj.people)>=3){ //多人聊天时显示效果 if(obj.user.u){ str+=''; } if(obj.user.a){ str+=''; } if(obj.user.o){ str+=''; } if(Number(obj.people)>=4){ if(obj.user.s){ str+=''; } } }else{ var UserObj=user.id==obj.user.u.id ? obj.user.a : obj.user.u; if(UserObj){ str+=''; //cfg.image.default } } str+=''+obj.people+''; str+='
'; str+='
'; str+='
'; //两人会话时只显示对方的昵称 str+='
'+(Number(obj.people)==2 ? (UserObj.nickname): obj.title)+'
'; //data-u="'+obj.user.u.id+'" data-a="'+obj.user.a.id+'" people_'+obj.people+' var msghtml=(obj.message ? con : '于'+DateFormat(date,'','CN',true)+'创建会话'); str+='
'+msghtml+'
'; str+='
'; str+='
'; str+='
'+DateFormat(date,'m-d','',false).replace('-','/')+'
'; var block='none'; obj.unread=0; //强制本地为0 if(obj.message && obj.message.length>0 && Number(obj.unread)>0){ block='inline-block'; } str+='
0
'; //'+obj.unread+' str+='
'; str+='
'; return str; } //MsgBox end function GetCode(self,obj,name,time,uid){ //获取验证码 公用 self=当前对象 obj=要判断的主对象 name=取手机号码的输入框名称 time=间隔时间 try{ Public=self; if(JQ(self).text()!=JQ(self).attr('data-html')){ msg('请稍后操作'); return false; } if(!time){ time=60; } var o=JQ(obj); var mobile=o.find('input[name="'+name+'"]').val(); if(!mobile){ msg('请输入手机号码','','msg_code_send'); return false; } uid=(uid?uid:(typeof user!='undefined' ? user.id : '')); var data={mobile:mobile.toString(),type:JQ(self).attr('data-code-type'),uid:uid ? uid.toString() : ''}; //alert(JSON.stringify(data)); var index=Loading('发送中',8,false); ajax({func:'GetCodeCallBack(data,"'+(time?time:60)+'",'+index+',"'+obj+'");',url:cfg.requrl+'Comm/sendSms',data:SignToData(data),debug:0,cache:false,offline:false,expires:10000,timeout:10000}); }catch(e){ if(cfg.execute==1){ alert(e.message); } } } //GetCode end function GetCodeCallBack(data,time,index,obj){ layer.close(index); //alert(JSON.stringify(data)); //data=JSON.parse(data); msg(data.msg,'',''); if(!data.code){ return false; } //处理成功 JQ(Public).css({opacity:0.5}); JQ(obj).attr('data-uniqid',data.data.sms_uniqid); //倒计时开始 Djs(Public,1,time); } //GetCodeCallBack end function IdToCity(ids,arr,jg){ //本地城市文件中通过ID输出城市名称 ids=Array arr=Array 城市的集合 jg=用什么分隔显示 if(!jg){ jg=' '; } var str=''; for(i in ids){ var pk=i==0 ? 0 : ids[i-1]; //父级ID for(a in arr[pk]){ if(ids[i]==Number(arr[pk][a][0])){ if(str){ str+=jg; } str+=arr[pk][a][1]; } } } return str; } //IdToCity end function CacheCfg(data){ //缓存服务器公用配置启动时加载 //alert('cache:'+JSON.stringify(data)); if(typeof data=='string'){ data=JSON.parse(data); } if(data.js){ eval(data.js); } if(!data.code){ msg(data.msg,10000); return false; } setstorage('server_cfg',JSON.stringify(data)); } //CacheCfg end function Cache(con,key,value,ca){ //缓存本地数据库-必须引入数据库database.js con=db key=键名 value=值 如果value不为空则必须启用第四个参数 //alert(key+'='+value); var Sql,save,Dat=[]; if(value){ //检查表是否存在 var sql='SELECT COUNT(*) AS a FROM table_cache WHERE code="'+key+'"'; //缓存表 uexDataBaseMgr.select(con,sql,function (error,data) { //alert('Cache:'+error+' = '+JSONdata); if(error || (typeof data[0]!='undefined' && data[0].a==0)){ //不存在才插入 Dat['code']=key; Dat['value']=encodeURIComponent(value); Sql=ArrToSql('table_cache',Dat,'insert'); save='插入'; }else{ //更新 Dat['data']=[]; Dat['data']['value']=encodeURIComponent(value); Dat['where']=[]; Dat['where']['code']=key; Sql=ArrToSql('table_cache',Dat,'update'); save='更新'; } uexDataBaseMgr.sql(con,Sql,function (error) { if(!error){ //缓存成功 //alert(save+'成功'); return true; }else{ alert(save+'失败'+Sql); return false; } }); }); return true; } //value end if(value===null){ //清除数据 Dat['data']=[]; Dat['data']['value']=''; Dat['where']=[]; Dat['where']['code']=key; Sql=ArrToSql('table_cache',Dat,'update'); save='清除缓存'; uexDataBaseMgr.sql(con,Sql,function (error) { if(!error){ //缓存成功 //msg(save+'成功'); return true; }else{ msg(save+'失败'+Sql); return false; } }); return true; }//null end //直接读数据执行异步回调 var sql='SELECT value FROM table_cache WHERE code="'+key+'"'; //缓存表 uexDataBaseMgr.select(con,sql,function (error,data) { var result=false; if(error || (typeof data[0]!='undefined' && data[0].value)){ //不存在才插入 result=true; } if(ca){ ca(result,data,key); } //异步回调 }); return true; } //Cache end function FavorNum(type,func){//收藏夹数量 type=收藏类型1=用户 func=回调 if(typeof db=='undefined' && cfg.execute==0){ msg('数据库初始失败'); return false; } var s=[]; s['field']='COUNT(*) AS n'; s['where']=[]; s['where']['type']=1; s['where']['status']=1; var sq=ArrToSql('table_favor',s,'select'); uexDataBaseMgr.select(db,sq,function(error,data){ if(error && cfg.execute==0){ msg('查询收藏数量失败'); return false; } func(data[0].n); }); } //FavorNum end function SendIdea(type,obj) { //公用意见反馈窗口 type=意见默认类型 0-7 obj.title=发表意见的主标题 obj.func=提交成功的回调 obj.hidePop=win_in1,win_in2 //上传图片前隐藏的窗口集合,号分隔 obj.showPop=上传图片返回的窗口名称 obj.htmlType=1 意见回复 obj.id=回复的主ID var s=getstorage('server_cfg'); if(!s){ msg('意见类型未准备就绪,请稍候'); return false; } if(!obj){ obj={title:"意见反馈"}; } if(!obj.title){ obj.title=''; } var bl=[320,480]; //图片框比例 bl['w']=cfg.w*0.22; bl['h']=bl[1]/(bl[0]/bl['w']); if(!type){ type=0; } if(!obj.placeholder){ obj.placeholder='在此填写详细内容,最多200文字'; } if(!obj.upNum){obj.upNum=3; } //alert(s); try{ var types=JSON.parse(s).data.public_books; var str='
'; str+='
'; if(!obj.htmlId){ str+='
'; str+='
×
'; str+='
'+obj.title+'
'; str+='
提交
'; str+='
'; } if(obj.htmlType!=1){ str+='
'; str+='
'; str+='
发表类型
'+types[type]+'
'; str+=''; str+=''; str+='
'; str+='
'; } str+='
'; str+='
'; str+=''; str+='
'; str+='
'; str+='
'; //str+='
'; //这行是上传后显示的效果 str+='
+
'; str+='
'; str+='
'; str+='最多上传'+obj.upNum+'张图片,点+号上传'; str+='
'; if(obj.htmlId){ str+='
提交
'; } str+=''; if(typeof obj.chat_id!='undefined'){ str+=''; } if(typeof obj.id!='undefined'){ str+=''; } //主反馈ID str+='
'; str+='
'; //idea_html end if(obj.htmlId){ $(obj.htmlId).html(str); }else{ layer.open({ type:3, //填3后,才能共用layer skin:'footer',content:str,style:'width:100%;left;0;right:0;bottom:0;opacity:1;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;background-color:white;position:absolute;', }); setTimeout(function(){ $('.layui-m-layercont , .layui-m-layer-footer .layui-m-layercont').attr('style','padding:0;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;background-color:white;'); $('.layui-m-layer-footer .layui-m-layercont').css({padding:0}); $('.layui-m-layer').css({zIndex:999}); },20); } }catch(e){ if(cfg.execute==0){ alert(e.message); } } } //SendIdea end function OpenIdeaType(self){ Public=self; var s=getstorage('server_cfg'); var types=JSON.parse(s).data.public_books; var str=''; for(k in types){ if(isNaN(k)){ continue; } str+='
'; str+=types[k]; str+='
'; } var a=layer.open({ type:3,content:str,btn:false,shadeClose:true,style:'width:50%;max-height:'+(cfg.h*0.8)+'px;overflow-y:scroll;', }); } //OpenIdeaType end function IdeaTypeClose(self,k){ JQ(Public).find('input').val(k.toString()); JQ(Public).find('.text').html(self.innerHTML); layer.close(JQ('.layui-m-layer').eq(JQ('.layui-m-layer').size()-1).attr('index')); } //IdeaTypeClose end function IdeaSubmit(self,func,htmlType){ //提交 htmlType=1表示是回复 try{ var obj=serializeform('#idea_form'); if(!htmlType){ if(obj.type==''){ msg('请选择提交类型'); return false; } obj.type=obj.type.toString(); } if(obj.content==''){ msg(htmlType ? '请输入回复内容' : '请输入详情内容',2,'msg_msg'); return false; } if(obj.content.length>200 || obj.content.length<3){ msg(htmlType ? '回复内容要求3-200个文字' : '详情内容要求3-200个文字',2,'msg_msg'); return false; } obj.uid=user.id.toString(); obj.content=obj.content.toString(); obj.title='用户'+user.mobile+' ('+user.nickname+')提交了反馈'; obj.mobile=(user.mobile ? user.mobile : user.m_username).toString(); obj.name=user.nickname ? user.nickname : user.name; //if(htmlType){ obj.id=obj.id.toString(); } //反馈ID var u=htmlType ? 'message/message_replay' : 'message/message_submit'; var data=SignToData(obj); //alert(JSON.stringify(data)); Loading('提交中'); setTimeout(function(){ ajax({func:'IdeaSubmitCall(data,\''+(func ? func : '')+'\');',url:cfg.requrl+u,data:data,debug:0}); },300); }catch(e){ if(cfg.execute==0){ alert(e.message); } } } //IdeaSubmit end function IdeaSubmitCall(data,func){ //alert(data); data=JSON.parse(data); msg(data.msg,2,'msg_msg'); if(data.status!=0){ return false; } layer.closeAll(); msg(data.msg); if(func){ setTimeout(function(){ eval(func); },2000); } } //IdeaSubmitCall emd function IdeaUp(self,t,showPop,hidePop){ //用上了 //alert(showPop); var upnum=Number(JQ(self).attr('data-upnum')); //最大允许上传数量 var ups=JQ(self).parents('.up_controls:eq(0)').find('.pic_controls').size(); //已经上传的数量 if(ups>=upnum){ msg('您已上传'+ups+'张图片,允许上传'+upnum+'张'); } Public=self; setstorage('title','上传截图') setstorage('u',t); var int='init('+t+',0.4,1,1,"'+showPop+'")'; //alert(int); ShowPop('up_image',int,1); hidePop=hidePop.split(','); for(k in hidePop){ HidePop(hidePop[k]); } } //IdeaUp end function Xin(s,e,input){ //输出星星数 var str=''; for(i=1;i<=e;++i){ str+=''; } str+=''; return str; } //Xin end function XinClick(self,i,obj){ JQ(obj).val(i); var o=JQ(self).parents('.xinxin:eq(0)'),img=JQ(self).attr('data').split(','); o.find('.xin').attr('src',img[0]); for(a=0;a-1){ s=s.split('省'); s=s[1]; } addr=''; for(k in s1){ if(k>0){ addr+=s1[k]; } } return {city:s,addr:addr}; } //AddrToCity function bd_encrypt(gg_lat,gg_lon) // 百度地图测距偏差 问题修复 { var x_pi = 3.14159265358979324 * 3000.0 / 180.0; var x = gg_lon; var y = gg_lat; var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi); var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); var bd_lon = z * Math.cos(theta) + 0.0065; var bd_lat = z * Math.sin(theta) + 0.006; //alert(gg_lat+' '+gg_lon); return [bd_lat,bd_lon]; } function rad(d) { return d * 3.1415926535898 / 180.0; } function getDistanceNone($lat1, $lng1, $lat2, $lng2) { //纬度 经度 var $EARTH_RADIUS = 6378.137; var $radLat1 = rad($lat1); //echo $radLat1; var $radLat2 = rad($lat2); var $a = $radLat1 - $radLat2; var $b = rad($lng1) - rad($lng2); var $s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin($a / 2), 2) + Math.cos($radLat1) * Math.cos($radLat2) * Math.pow(Math.sin($b / 2), 2))); $s = $s * $EARTH_RADIUS; $s = Round($s * 10000); return $s; } function getDistance($lat1, $lng1, $lat2, $lng2) { //计算座标的距离 //纬度 经度 var $s = getDistanceNone($lat1, $lng1, $lat2, $lng2); $s = $s / 10000; if ($s < 1) { $s = Round($s * 1000); $s+='M'; } else { $s = Round($s, 2); $s+='KM'; } return $s; } function OnResize(){ //window.onresize = window.onorientationchange事件用 安卓有用。苹果没用 var Win=top.JQ(window),h=Win.height(),w=Win.width();//PageName=document.URL; var WinNamePop=getstorage('RegWinName'),ActiName=getstorage('ActivityName'); /*if(WinNamePop){ //处理所有的要不得 WinNamePop=WinNamePop.split(','); for(k in WinNamePop){ appcan.window.resizePopover({name:WinNamePop[k],height:wh}); //窗口高 } }*/ //alert('页面高度变化:宽='+w+' 高='+h+' 活动窗口名='+ActiName); if(ActiName){ //兼容输入法 //alert('OnResize-'+ActiName); appcan.window.resizePopover({name:ActiName,height:h,width:w}); appcan.window.evaluatePopoverScript({ name:'', popName:ActiName, scriptContent:'EnterWin({"w":"'+w+'","h":"'+h+'"});', }); //在活动窗口中激活输入法改变的窗口状态 } //活动窗口 //uexWindow.setMultiPopoverFrame({name:"content",h:h,height:h,x:0,y:0}); //多页窗口位置 //msg(' 屏变化: '+Win.width()+' '+Win.height()+' 当前屏高:'+JQ('body').height()+' elementH='+JQ('#content1').height()); } //OnResize end function CheckCallback(data,down){ try{ if(typeof pt=='undefined'){ var pt=PhoneType(); } layer.closeAll(); data=JSON.parse(data); if(data.status){ msg(data.msg); return false; } var message=pt=='Android' ? data.data.android_msg : data.data.ios_msg, describe=pt=='Android' ? data.data.android_describe : data.data.ios_describe; JQ('.server_ver').html(message); if(down==1){ msg(message); } var v=pt=='Android' ? data.data.android_ver : data.data.ios_ver; var Cver=Ver(); if(Cver.toString()!=v.toString()){ //执行下载 JQ('.server_ver').parents('.li:eq(0)').find('.fl:eq(0)').find('.redd').remove(); JQ('.server_ver').parents('.li:eq(0)').find('.fl:eq(0)').append(''); //红点 if(!down){ return false; } //自动检查时不更新 //alert(message); uexWindow.confirm({ title:'温馨提示', message:describe, buttonLabels:'立即更新' },function(index){ if(pt=='Android'){ //安卓下载 var downloader = uexDownloaderMgr.create(); //alert(1); if(!downloader){ alert('创建下载对象失败!'); return false; } var headJson = '{"Content-type":"application/json;charset=utf-8"}'; uexDownloaderMgr.setHeaders(downloader, headJson); var f=FileInfo(data.data.android); f.name=f.name.replace('.','_'+((new Date()).getTime())+'.'); //重命名 //alert(cfg.cache+f.name+' = '+data.data.android); uexDownloaderMgr.download(downloader, data.data.android, //下载的远程地址 cfg.cache+f.name, //本地文件地址 1, //1=断点续传 function(fileSize, percent, status){ try{ switch (status) { case 0: //创建更新窗口 //msg('更新包大小 ' + SizeTo(fileSize,'mb') + ' 已完成' + percent+'%'); if(fileSize==0){ uexDownloaderMgr.cancelDownload(data.data.android,1); break; } if(JQ('.update_win').size()==0){ var str='
'; str+='
正在更新
'; str+='
'; str+='
'; str+='
'; str+='
'; str+='更新包大小 '+SizeTo(fileSize,'mb')+' 已完成 '+percent+'%'; str+='
'; str+='
'; //update_win end //['取消更新'] layer.open({content:str,btn:false,shadeClose:false,yes:function(ind){ layer.close(ind); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 }}); }else{ JQ('.update_win .percent .jdt').css({width:percent+'%'}); JQ('.update_win .ft .size').html(SizeTo(fileSize,'mb')); JQ('.update_win .ft .bfb').html(percent); } break; case 1: //alert('下载完成'); layer.closeAll(); msg('下载完成,准备安装'); //var realFile=uexFileMgr.getFileRealPath(cacheFile); //本地真实的路径 //uexDocumentReader.openDocumentReader(cacheFile); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 uexWidget.installApp(cfg.cache+f.name); //安装 break; case 2: msg('下载失败'); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 break; } //switch end }catch(e){ alert('更新错误:'+e.message); } } ); //download end }else{ //苹果打开 uexWidget.loadApp(data.data.ios); } }); //uexWindow.confirm end } }catch(e){ alert('检查更新回调错误:'+e.message); } //layer.open({content:msg,skin:'msg',time:2}); } //CheckCallback end function GetInfo(mark,btn,js,obj){ //读取文章 var data={}; data.uid=user.id.toString(); data.mark=mark.toString(); data=SignToData(data); //alert(JSON.stringify(data)); Loading(); if(!btn){ btn=['我知道了']; } if(!js){ js=''; } if(!obj){ obj={}; } setTimeout(function(){ ajax({func:'GetInfoCall(data,JSON.parse(\''+JSON.stringify(btn)+'\'),"'+js+'",JSON.parse(\''+JSON.stringify(obj)+'\'));',url:cfg.requrl+'news/details',data:data,time:10000}); },200); } //GetInfo end function GetInfoCall(data,btn,js,objset){ try{ if(!objset){ objset={style:'max-width:80%;height:'+(JQ(window).height()*0.8)+'px'}; } //alert(JSON.stringify(objset)); layer.closeAll(); data=JSON.parse(data); if(data.status){ msg(data.msg); return false; } var cont=(htmlspecialchars_decode(data.data.content).toString()).replace(/\/up_files\//g,cfg.url+'/up_files/').replace(''+cont+'',btn:btn ? btn : ['我知道了'],style:objset.style,success:function(obj){ if(objset.height!='auto'){ var o=JQ(obj).find('.layui-m-layercont'),ft=JQ(obj).find('.layui-m-layerbtn').height(),h=(JQ(window).height()*0.8); o.height(h-ft-parseInt(o.css('padding-top'))*2).css('overflow-y','scroll'); } },yes:function(index){ layer.close(index); if(js){ eval(js); } } }); }catch(e){ if(!cfg.execute){ alert(e.message); } } } //GetInfoCall end function CheckUpdate(d){ try{ var data={}; //检查更新 data.client_ver=Ver(); if(!d){ Loading(); } ajax({func:'CheckCallback(data,"'+d+'");',url:cfg.requrl+'pub/checkupdate',data:SignToData(data),debug:0}); }catch(e){ alert('检查更新发生错误:'+e.message); } } //CheckUpdate end //来自chat.js 因为消息记录搜索功能也需要用到 function ImageSwiper(self,showP){ //点击图片打开图片切换器 try{ var img=[],o=JQ('.send_img'),t,s=o.index(JQ(self).find('.send_img')),dw; for(i=0;i'; str+='
'; //fl end str+='
'; str+='
'; str+=''+(typeof obj.users[v.user_id]!='undefined' ? obj.users[v.user_id].nickname : '用户错误')+''; str+=''; t=''; if(typeof obj.user_dp[jb-1][v.id]!='undefined' && Number(obj.user_dp[jb-1][v.id].type)==1){ t='_over'; } str+=''+v.zan+''; t=''; if(typeof obj.user_dp[jb-1][v.id]!='undefined' && Number(obj.user_dp[jb-1][v.id].type)==2){ t='_over'; } str+=''+v.cai+''; str+=''; str+='
'; //t end str+='
'+htmlspecialchars_decode(v.content);//+' '+v.id+' '+JSON.stringify(obj.user_dp); if(v.pics){ pics=v.pics.split(','); str+='
'; for(var kk in pics){ str+=''; } str+='
'; } str+='
'; //cont end str+='
'; t=TimeQ(Number(v.addtime)*1000); str+=''+(t ? t : TimeStampToTime(Number(v.addtime)))+' · 回复'+v.stat+''; if(jb==1){ str+='回复Ta'; } str+='
'; if(v.data && v.data.length){ str+=EvlistsData(v.data,obj,2,bind_id,pjtype); } str+='
'; //fr end str+=''; //li1 end } //for end }catch(e){ str+=('EvlistsData--Error:'+e.message); } return str; } //EvlistsData end function Evrf(self,jb){ //jb=1级别 2=回复表的逻辑了 var js=JSON.parse(htmlspecialchars_decode(decodeURIComponent(JQ(self).parents('.li:eq(0)').attr('data-js')))); js.jb=jb; setstorage('tmp',JSON.stringify(js)); OpenPop('ev_sendf','ev_sendf.html'); } //Evrf end function DinCai(self,jb,type){ //type=1顶 2=踩 try{ Public=self; var data=JSON.parse(htmlspecialchars_decode(decodeURIComponent(JQ(self).parents('.li:eq(0)').attr('data-js')))); var dat={ bind_id:data.bind_id.toString(), id:data.id.toString(), type:data.pjtype.toString(), ctype:type.toString(), user_id:user.id.toString(), etype:jb.toString() }; dat=SignToData(dat); //Loading('读取中'); //alert(JSON.stringify(dat)); setTimeout(function(){ ajax({func:'DinCaiCall(data,'+type+','+data.pjtype+','+data.id+');',url:cfg.requrl+'ev/zan',data:dat,debug:0}); },50); }catch(e){ alert('DinCai:'+e.message); } } //DinCai end function DinCaiCall(data,ctype,type,id){ //alert(ctype+' '+data+' '+type); try{ data=JSON.parse(data); if(data.status){ msg(data.msg); return false; } var img='.img'+ctype,obj=JQ(Public).parents('.dc:eq(0)'),str=''; var s=Number(ctype)==1 ? 'din' : 'cai'; var src='image/'+s+(data.cstatus==1 ? '_over' : '')+'.png'; //alert(src); if(typeof data.data.zan!='undefined'){ obj.find('.din').html(data.data.zan); str='JQ(\'.pjlists .li[li_'+id+'] .dc:eq(0) .din\').html(\''+data.data.zan+'\');'; //处理文章详情页的推荐列表顶赞 } if(typeof data.data.cai!='undefined'){ obj.find('.cai').html(data.data.cai); str+='JQ(\'.pjlists .li[li_'+id+'] .dc:eq(0) .cai\').html(\''+data.data.cai+'\');'; //处理文章详情页的推荐列表顶赞 } obj.find(img).attr('src',src); str+='JQ(\'.pjlists .li[li_'+id+'] .dc:eq(0) '+img+'\').attr(\'src\',\''+src+'\');'; //反着来 var sf=s=='cai' ? 'din' : 'cai',imgf='.img'+(Number(ctype)==1 ? 2 : 1); // obj.find(imgf).attr('src','image/'+sf+'.png'); str+='JQ(\'.pjlists .li[li_'+id+'] .dc:eq(0) '+imgf+'\').attr(\'src\',\'image/'+sf+'.png\');'; //反着来处理图标 if(str){ //文章详情页 appcan.window.evaluatePopoverScript({name:'',popName:'new',scriptContent:str,}); } //str end //msg(''+(Number(ctype)==1 ? '谢谢' : '^-^')+''); //加个小动画 if(!data.bind_data || !data.bind_data.data){ return false; } switch(Number(type)){ case 0: InfoDinCaiCall(data.bind_data.data); //文章贴子类点赞回调 break; //0 end } //switch end }catch(e){ alert('DinCaiCall:'+e.message); } } //DinCaiCall end function InfoDinCaiCall(data){ /*JQ('.stats').html(NumberEcho(Number(data.stat),10000,'万')); JQ('.zan').html(NumberEcho(Number(data.zan),10000,'万')); JQ('.cais').html(NumberEcho(Number(data.cai),10000,'万'));*/ //alert(data+' '+JSON.stringify(data)); try{ var str='',stats=NumberEcho(Number(data.stat),10000,'万'), zans=NumberEcho(Number(data.zan),10000,'万'), cais=NumberEcho(Number(data.cai),10000,'万'); str+='JQ(\'.stats\').html(\''+stats+'\');'; str+='JQ(\'.zans\').html(\''+zans+'\');'; str+='JQ(\'.cais\').html(\''+cais+'\');'; //浮动窗口操作 appcan.window.evaluatePopoverScript({name:'',popName:'new',scriptContent:str,}); //文章详情页 appcan.window.evaluatePopoverScript({name:'',popName:'ev_lists',scriptContent:str,}); //评价列表页 //多页面切换列表操作 str='JQ(\'.li[li_'+data.id+'] .stats\').html(\''+stats+'\');'; //alert(JQ(\'.li[li_'+data.id+']\').html()); uexWindow.evaluateMultiPopoverScript({ windowName:"", popName:"content", pageName:"found_b", js:str, }); }catch(e){ alert('InfoDinCaiCall:'+e.message); } } //InfoDinCaiCall end //2020-评价功能 end function FileSwiper(self,type){ //发送的文件列表 try{ var status=Number(JQ(self).attr('data-status')); //alert(type+'='+status); if(type==1 && status==1){ //如果是接收的消息且为未读时才发送已读消息到对方的APP上 var sss=htmlspecialchars_decode(JQ(self).attr('data-send-json')); //alert(JQ(self).parents('.li:eq(0)').attr('msgid')+'='+sss); sss=JSON.parse(sss); SendReadMsg(user,sss); JQ(self).attr('data-status',2); JQ('.chat .li[msgid="'+sss.message[0].id+'"] .read_status').html('已读').removeClass('over').addClass('over');//先处理显示效果 UpdateMsgRead(sss.message[0].id,sss.id); //更新为已读 } var o=JQ(self),file=o.find('.send_file').attr('data-download'); file=file.replace(cfg.url,''); if(!file || file=='undefined'){ file=o.find('.send_file').attr('data-upload'); var ft=FileType(file); //alert(file+' '+JSON.stringify(ft)); if(ft.status==1){ msg(ft.msg); return false; } var ok='pdf,xls,xlsx,doc,docx,txt,xml'; //允许读的格式 if(ok.indexOf(ft.ext_)==-1){ msg('无法识别的文件格式'); return false; } uexDocumentReader.openDocumentReader(file); return false; } //alert(JQ(self).html()); //远程下载 var ft=FileType(file); //alert(file+' '+JSON.stringify(ft)); if(ft.status==1){ msg(ft.msg); return false; } var ok='pdf,xls,xlsx,doc,docx,txt,xml'; //允许读的格式 if(ok.indexOf(ft.ext_)==-1){ msg('无法识别的文件格式'); return false; } file=cfg.url+(file.substr(1,file.length)); var ret = uexFileMgr.mkdir({ path:cfg.cache }); //alert(cacheFile+' '+ret); var f=FileInfo(file); //alert(JSON.stringify(f)); var cacheFile=cfg.cache+f.name; ret=uexFileMgr.isFileExistByPath(cacheFile); //本地文件是否存在 if(ret){ uexDocumentReader.openDocumentReader(cacheFile); return false; } var downloader = uexDownloaderMgr.create(); var headJson = '{"Content-type":"application/json;charset=utf-8"}'; uexDownloaderMgr.setHeaders(downloader, headJson); uexDownloaderMgr.download(downloader, file, //下载的远程地址 cacheFile, //本地文件地址 1, //1=断点续传 function(fileSize, percent, status){ try{ switch (status) { case 0: msg('下载 ' + SizeTo(fileSize,'kb') + ' 已完成' + percent+'%'); if(fileSize==0){ uexDownloaderMgr.cancelDownload(path,1); } break; case 1: //alert('下载完成'); msg('下载完成'); //var realFile=uexFileMgr.getFileRealPath(cacheFile); //本地真实的路径 uexDocumentReader.openDocumentReader(cacheFile); break; case 2: msg('下载失败'); uexDownloaderMgr.closeDownloader(downloader); //关闭下载对象 break; } }catch(e){ alert(e.message); } } ); //download end }catch(e){ if(cfg.execute==0){ alert(e.message); } } } //FileSwiper end //来自chat.js 因为消息记录搜索功能也需要用到 function evalImage(cs){ //公共图片动态加载 图片需要加cs类,要显示的图片放在data-src上即可。处理完即移除cs JQ(cs).each(function(i,e){ var s=JQ(this),dsrc=s.attr('data-src'); if(dsrc){ s.attr('src',dsrc); } }); //each end JQ(cs).removeClass(cs.replace('.','')); } //evalImage end function End(msg,cs,auto){ //msg=消息 cs=end加入尾部的类名 auto=1自动显示 var str='',css=cs ? cs.replace(/\./g,'').replace(/\#/g,'')+'_end' : '_end'; str+='
'+msg+'
'; if(auto){ css='.'+css; //alert(JQ(css).size()); if(JQ(css).size()==0){ JQ(cs).after(str); }else{ JQ(css).html(msg); } } return str; } //End end function openVideo(self){ //播放视频 var vPath=JQ(self).attr('data-path'),pic=JQ(self).attr('data-pic'),wap=isMobile(),win=JQ(window),h=0,w=0,str=''; //var vPath='https://storage.media.ext.hp.com/Consumer_PC_Drx_Overall_Video.mp4'; if(!vPath){ mob_msg('视频文件为空,请等待上传'); return false; } //判断视频路径是否存在 //判断当前界面并确定宽高 w=wap ? (win.width()*0.88) : (win.width()*0.6); h=wap ? ((win.width()*0.88*1080)/1920) : ((win.width()*0.6*1080)/1920); //poster="'+(pic ? pic : 'http://video-js.zencoder.com/oceans-clip.png')+'" str = '
'; str += '
'; str += ''; str += '
'; str += '
'; str += '×'; layMobile.open({ type:1,title:false,btn:false,content:str,shadeClose: true,anim:0,style:'-webkit-transition: all 1.3s;-moz-transition: all 1.3s;-ms-transition: all 1.3s;-o-transition: all 1.3s;transition: all 1.3s;width:0px;0px;background:none;', //开启遮罩关闭 yes:function(ind){ layMobile.close(ind); },no:function(ind){ //layMobile.close(ind); $('#layui-m-layer'+layMid.index.abc).remove(); },success:function(self,ind){ layMid.index.abc=$(self).attr('index'); //alert(self.innerHTML); JQ('.layui-m-layercont').attr('style','width:'+w+'px;height:'+h+'px;padding:0;position:relative;background:none;overflow: hidden;'); JQ('.layui-m-layerchild').attr('style','width:'+w+'px;height:'+h+'px;background:none;box-shadow:none;'); //外框宽高限制最大值 } }); } //openVideo end function ajaxm(obj){ //公用AJAX请求手机 debug=1 开启内容输出弹窗 func=自定运行函数 try{ if(typeof obj.debug=='undefined'){ obj.debug=0; } /*var client_abc=obj.url.indexOf('?')>-1 ? '&' : '?'; var us=getstorage('user'); var cl=getClient(); client_abc+='client_abc='+encodeURIComponent(JSON.stringify(cl.data))+'&agent_abc='+encodeURIComponent(cl.agent)+'&user_abc='+(us ? user.id : '');*/ var url=obj.url;//client_abc; if(obj.showloading){ ShowLoading('','#FFFFFF',obj.showloading==1 || obj.showloading==2 ? true : false,obj.showloading); } //==1表示等待遮罩背景 , ==2标识上传遮罩层 //alert(url); obj.async=typeof obj.async!='undefined' ? obj.async : true; var obja={ url:url, type:typeof (obj.type)!='undefined' ? obj.type : 'POST', data:typeof (obj.data)!='undefined' ? obj.data : {}, //offline:typeof (obj.offline)!='undefined' ? obj.offline : 'undefined', dataType:typeof (obj.dataType)!='undefined' ? obj.dataType : 'JSON', headers: typeof obj.headers ? obj.headers : {}, //offlineDataPath : typeof (obj.wgt)!='undefined' ? obj.wgt : 'wgt://cache/', timeout:typeof obj.timeout!='undefined' ? obj.timeout : 20000, //超时为20秒 cache:typeof obj.cache!='undefined' ? true : false, async:obj.async, success:function(data) { if(obj.showloading){ CloseLoading(); } //layer.open({content:JSON.stringify(data),time:2,skin:'msg'}); if(obj.debug){ mob_msg(data,600); return false;} //debug调试 显示10分钟 if(!obj.async){ return data; } if(obj.func){ eval(obj.func); } if(obj.call){ obj.call(data); } if(typeof obj.js!='undefined' && obj.js){ eval(obj.js); } },error : function(e) { if(obj.showloading){ CloseLoading(); } mob_msg('请求超时,请刷新并重试!',2); if(e.status==403){ clearstorage('token'); //清除登录缓存token clearstorage('login_user_cache'); //清楚记住的登录账号信息 } setTimeout(function(){ location='/'; },3000); } }; if(typeof obj.expires!='undefined') { obja.expires=obj.expires; } if(!obj.async){ return JQ.ajax(obja).responseText; } JQ.ajax(obja); }catch(e){ mob_msg('ajaxm执行前错误:'+e.message); } } //ajaxm end function isEmail(email){ //验证邮箱 var reg = new RegExp("^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$"); //正则表达式 if(email === ""){ //输入不能为空 //alert("输入不能为空!"); return false; }else if(!reg.test(email)){ //正则验证不通过,格式不对 //alert("验证不通过!"); return false; }else{ //alert("通过!"); return true; } } //isEmail end function mob_msg(msg,time,id,style){ time=time?time:2; layMobile.open({content:msg,skin:'msg',time:time,id:id?id:'public_msg',style:(style ? style:''),success:function(self){ var ind=$(self).attr('index'); layMid.index.mob_msg=ind; $(self).css({zIndex:99999999}); setTimeout(function(){ $('.layui-m-layer[index="'+ind+'"]').remove(); },time*1000); }}); } //mob_msg end function ShowLoading(zindex,bj,showbj,s){ var str=''; bj=bj ? bj : 'none'; zindex=zindex ? zindex : 19891018; str+='
'; str+='
'; str+='
'; if(s==1){ str+='Loading...'; } if(s==2){ str+='Uploading...'; } str+='
'; str+='
'; if(showbj){ str+='
'; } JQ('body').append(str); var o=JQ('.tb_show_waiting'); o.css({marginLeft:((JQ(window).width()-o.outerWidth())*0.5)+'px',marginTop:((JQ(window).height()-o.outerWidth())*0.5)+'px'}); } //ShowLoading end function CloseLoading(cs){ cs=cs ? cs : '.tb_show_waiting'; JQ(cs).remove(); JQ(cs+'_bj').remove(); } //CloseLoading end //下载文件 function DownFile(url,filename,type) { var token = getCookie('oatoken'),usertoken = getCookie('usertoken'); //console.log('下载用的TOKEN:',token,usertoken) var f,filenames,adownfile,t,baseUrl = window.location.origin,url_t,data={}; //console.log('传递资料',url,filename); //判断下载文件地址是否存在 if(!url){ mob_msg('请等待管理员上传下载文件!',2); return false; } //提示准备启动下载 mob_msg('立即开始下载,请耐心等待...',1); //判断文件在哪里 if(url.indexOf('.oss')>-1){ t=url.split('?'); f=FileInfo(t[0]).ext; filenames=filename+'.'+f; console.log('进入OSS地址'); if(url.indexOf('jieshun-web.oss')>-1){ console.log('进入OSS-私有桶地址'); //异步获取临时地址 - 拼接地址 data.file=encodeURIComponent(filenames); //文件名字 data.token=(type==0 ? '' : (type==1 ? usertoken : token)); //验证token 0=资料下载 1=用户下载 2=员工发下载 data.url=encodeURIComponent(t[0]); //文件地址 //获取完整地址 // url=baseUrl+'/pcApi/download?file='+data.file+'&token='+data.token+'&url='+data.url; // window.open(url,'_blank'); ajaxm({ url:"/api/download", type:'GET', //showloading: 1, //data:data, data:data, headers:{'content-type':'application/x-www-form-urlencoded'}, call:function(e){ if(e.success==false){ mob_msg(e.msg,2); return false; } //获取OSS临时地址 url=e.data; //复返回地址 //使用window.open 进行下载 //window.open(url,'_blank'); // adownfile=window.open('about:blank','_blank'); // adownfile.location.href=url; if(baseUrl.indexOf('https')>-1){ if(url.indexOf('https')==-1){ url=url.replace('http','https'); } } //使用A标签下载 adownfile = document.createElement('a'); adownfile.style.display = 'none'; adownfile.href = url; adownfile.setAttribute('download', filenames); adownfile.setAttribute('target', '_blank'); adownfile.rel='noopener noreferrer'; document.body.appendChild(adownfile); setTimeout(function () { adownfile.click(); document.body.removeChild(adownfile); }, 2000); } }); }else{ console.log('进入OSS-公共桶地址'); //使用window.open 进行下载 if(url.indexOf('?')>-1){ console.log('进入OSS-公共桶-老地址'); //使用window.open 进行下载 window.open(url,'_blank'); // adownfile=window.open('about:blank','_blank'); // adownfile.location.href=url; //使用A标签下载 // adownfile = document.createElement('a'); // adownfile.style.display = 'none'; // adownfile.href = url; // adownfile.setAttribute('download', filenames); // adownfile.setAttribute('target', '_blank'); // adownfile.rel='noopener noreferrer'; // document.body.appendChild(adownfile); // setTimeout(function () { // adownfile.click(); // document.body.removeChild(adownfile); // }, 2000); }else { console.log('进入OSS-公共桶-新地址'); //使用window.open 进行下载 window.open(encodeURI(url).replace(/\+/g,'%2B').replace('%252b','%2b'),'_blank'); // adownfile=window.open('about:blank','_blank'); // adownfile.location.href=encodeURI(url).replace(/\+/g,'%2B').replace('%252b','%2b'); //使用A标签下载 // adownfile = document.createElement('a'); // adownfile.style.display = 'none'; // adownfile.href = encodeURI(url).replace(/\+/g,'%2B').replace('%252b','%2b'); // adownfile.setAttribute('download', filenames); // adownfile.setAttribute('target', '_blank'); // adownfile.rel='noopener noreferrer'; // document.body.appendChild(adownfile); // setTimeout(function () { // adownfile.click(); // document.body.removeChild(adownfile); // }, 2000); } } }else{ console.log('进入本服务器文件存储地址'); f=FileInfo(url).ext; filenames=filename+'.'+f; url_t=url.split('/file/'); //拆分 //拼接地址 url=baseUrl+'/file/'+url_t[1]; //拼接完整地址 //使用window.open 进行下载 //window.open(url,'_blank'); // adownfile=window.open('about:blank','_blank'); // adownfile.location.href=url; //使用A标签下载 adownfile = document.createElement('a'); adownfile.style.display = 'none'; adownfile.href = url; adownfile.setAttribute('download', filenames); adownfile.setAttribute('target', '_blank'); adownfile.rel='noopener noreferrer'; document.body.appendChild(adownfile); setTimeout(function () { adownfile.click(); document.body.removeChild(adownfile); }, 2000); } } //DownFile end function saveAs(blob, filename) { if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, filename); } else { const link = document.createElement('a'); const body = document.querySelector('body'); link.href = window.URL.createObjectURL(blob); link.download = filename; // fix Firefox link.style.display = 'none'; body.appendChild(link); link.click(); body.removeChild(link); window.URL.revokeObjectURL(link.href); CloseLoading(); } } function getBlob(url) { return new Promise(resolve => { const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.onload = () => { if (xhr.status === 200) { resolve(xhr.response); } }; xhr.send(); }); } //分类、系列、网络分类- catalogs 、datasheet 请求接口打开新窗口预览文件 function OpenCataData(id) { if(!id){ msg('The current option has no associated files'); }else{ var download_id=id; } ajaxm({ //http://127.0.0.1:83/pc/downloadDetails?id=73 url:'/pc/downloadDetails',data:{id:download_id},call:function(e){ //alert(e); if(!e.code){ mob_msg(e.msg); return false; } //window.open(e.data.download_location);return false; //这种要被拦截 location=e.data.download_location; return false; //移除存在的A标签 JQ('#pub_downs').remove(); //新建的A标签 var a=document.createElement('a'); a.target="_blank"; a.href=e.data.download_location; a.id="pub_downs"; a.style.position='absolute'; a.style.left="-100000px"; a.type="pdf"; JQ('body').append(a); a.click(); } }); } //OpenCataData END function ShowPages(id,count,p,pagesize,call){ //显示页码 if(!call){ mob_msg('必须传入分页回调函数'); return false; } var obj={"layout":["prev","page","next","skip"],"curr":1,"groups":isWap ? 1 : 3,"limit":"20","first":false,"last":false,"count":""}; /* cellMinWidth=50 //单元格最小宽度 height=full-120 //120=底部的边距 page[layout]=['count','prev','page', 'next', 'limit', 'skip','refresh']; //自定义分页布局 defaultToolbar=['filter', 'exports', 'print', { title: '提示',layEvent:'LAYTABLE_TIPS',icon:'layui-icon-tips'}] //自定义头部工具栏右侧图标。如无需自定义,去除该参数即可 layEvent=事件名称 */ obj.elem=id; obj.limit=pagesize; //初始化时重新赋值每页显示条数 obj.count=count; //总数量 obj.curr=p; //当前页码 if(!isWap){ obj.first='首页';//'首页'; obj.last='尾页';//'尾页'; } obj.prev=''; //上一页 obj.next=''; //下一页 obj.jump=function(obj,first){ //点击页码进行分页 first=首次 //console.log(obj); //showPage(id,count,obj.curr); if(first){ return false; } call(obj.curr); }; layui.laypage.render(obj); //渲染分页 } //ShowPages end //下拉选项通用JS function PubSelectLs(self) { var obj=JQ(self).parents('[box]:eq(0)'); var d=JQ(self).data(); obj.find('.txt').html(d.text); //修改显示内容 obj.find('input').val(d.id); //把选择的ID给val obj.find('.box').hide(); setTimeout(function(){ obj.find('.box').removeAttr('style'); },1000); } //PubSelectLs END //检查输入数量不能为负数/小数点 function SumAmountJc(self) { var obj=JQ(self),b=obj.val(); //获取当前对象的val值 if(Number(b)<0){ mob_msg('Quantity cannot be negative',2); obj.val(1); return false; } if(b.toString().indexOf('.')>-1){ mob_msg('Quantity must be positive',2); obj.val(1); return false; } } //SumAmountJc END //产品数量加减并修改小计 function AmountChange(self) { var obj=JQ(self).parents('.box').eq(0); //获取单个商品的做大外框 var xj=obj.find('.subtoal'); //寻找小计的div var d=Number(JQ(self).attr('data')); //判断是增加还是减少 var s=Number(obj.find('input[name="amounttext"]').attr('data-stock')); //库存 var o=Number(obj.find('input[name="amounttext"]').val()); // 获取商品数量 var p=Number(obj.find('.pices').attr('data')); // 获取商品单价 //alert(p); if(d==0){//减 if(o==1){ obj.find('input[name="amounttext"]').val(1); xj.html('$'+Round(p*1,2,1)); }else{ obj.find('input[name="amounttext"]').val(o-1); xj.html('$'+Round(p*(o-1),2,1)); } } if(d==1){//加 if((o+1)<=s){ obj.find('input[name="amounttext"]').val(o+1); xj.html('$'+Round(p*(o+1),2,1)); }else{ mob_msg('The purchase quantity cannot exceed the maximum stock'); obj.find('input[name="amounttext"]').val(o); xj.html('$'+Round(p*o,2,1)); } } if(d==2){//输入 if(o==1 || o<1){ obj.find('input[name="amounttext"]').val(1); xj.html('$'+Round(p*1,2,1)); }else{ xj.html('$'+Round(p*o,2,1)); } } } //AmountChange END AutoAppHead(); //头部自动识别苹果和安卓兼容问题