apicloud 公共类 common.js 封装实现 ajax请求数据 + 缓存 loading页面等

时间:2021-07-10 10:18:55
 
//设置主题样式
function getskin(dir) {
    /*换皮肤*/
    var skindir = "../../css/skin/" + dir + "/skin1.css";
    //alert(skindir);
    var skin = new auiSkin({
        name: "night", //皮肤样式名字,不能为中文
        skinPath: skindir, //皮肤样式表路径
        default: true, //是否默认立即使用


    });
    //skin.setSkin();
}


//更换主题样式
//getskin('001');




//判断是否为空
function isEmpty(str){
  if(str==null||typeof str=="undefined"||str.trim()==""){
  return true;
  }else{
  return false;
  }
}




function returnNotNullStr(str){
  if(isEmpty(str)){
    return '';
  }else{
    return str;
  }
}
//获取封装api.toast
function mytoast(msg, str_area) {
    api.toast({
        msg: msg,
        duration: 1500,
        location: str_area
    });
}


//关闭当前窗口
/**返回**/
function goback() {
    api.closeWin({});
}


//打开新窗口 dirAndName   ../dir/winname
//checklogin: 1:需要登录才能打开  0:不需要登录就打开
function openNewWin(dirAndName, checklogin,params) {


    //判断是否有参数
    var pageParam = {};
    if(typeof(params) != 'undefined'){
      pageParam = params;
      console.log("openNewWin存在pageparams:"+JSON.stringify(params));
    }
    //判断是否有登陆
    if (checklogin) {
        if (!isLogin()) {
            api.toast({
                msg: '请先登录!',
                duration: 2000,
                location: 'middle'
            });
            api.openWin({
                name: 'user_win',
                url: "widget://html/user/user_win.html",
            });


            return false;
        }
    }


    //拆分得到winows name
    var arr = dirAndName.split('/');
    var name = arr[arr.length - 1];
    //alert(name + ':'+dirAndName+'_win.html');
    //alert(name);
    api.openWin({
        name: name + '_win',
        url: dirAndName + '_win.html',
        bounces: false,
        pageParam:pageParam
    });
}


//打开一个播放器
function showOneVideo(snsShareID,snsTopicID,snsUserID){
  api.openWin({
      name: 'videoshow_win',
      url: './videoshow_win.html',
      pageParam: {
          snsShareID: snsShareID,
          snsTopicID: snsTopicID,
          snsUserID : snsUserID
      }
    });
}
//时间戳转换成日期格式 2010-10-20
function getLocalTime(mytime) {


  var now=new Date(parseInt(mytime));
  var year=now.getFullYear();
  var month=now.getMonth()+1;
  var date=now.getDate();
  var hour=now.getHours();
  var minute=now.getMinutes();
  var second=now.getSeconds();
  if(minute<10){
      minute="0"+minute;
  }
  if(second<10){
      second="0"+second;
  }
  return year+"-"+month+"-"+date+" "+hour+":"+minute;
  return year+"-"+month+"-"+date;
}


//top.dateFtt("yyyy-MM-dd hh:mm:ss",crtTime);
function dateFtt(fmt,mytime)
{ //author: meizz
  var date = new Date(parseInt(mytime));
  var o = {
    "M+" : date.getMonth()+1,                 //月份
    "d+" : date.getDate(),                    //日
    "h+" : date.getHours(),                   //小时
    "m+" : date.getMinutes(),                 //分
    "s+" : date.getSeconds(),                 //秒
    "q+" : Math.floor((date.getMonth()+3)/3), //季度
    "S"  : date.getMilliseconds()             //毫秒
  };
  if(/(y+)/.test(fmt))
    fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)
    if(new RegExp("("+ k +")").test(fmt))
  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  return fmt;
}




//判断
function isLogin() {
    var currendUID = $api.getStorage('snsUserID');
    if ( typeof(currendUID) != undefined && typeof(currendUID) != 'undefined' && currendUID != null) {
        console.log("--------------------------------已经登录----------------------");
        return true;
    } else {
        console.log("--------------------------------没有登录----------------------");
        return false;
    }
}


//验证手机号
function checkTel(tel) {


    if (!(/^1[34578]\d{9}$/.test(tel))) {
        return false;
    } else {
        return true;
    }
}


// 验证是否为正整数
/*function isIntNum(val){
    var regPos = / ^\d+$/; // 非负整数
    var regNeg = /^\-[1-9][0-9]*$/; // 负整数
    if(regPos.test(val) || regNeg.test(val)){
        return true;
    }else{
      console.log("不是数字");
        return false;
    }
}*/
//判断是否为正整数
function isPositiveInteger(s){//是否为正整数
     var re = /^[0-9]+$/ ;
     return re.test(s)
 }
//判断是否为数字  包含小数
function isNumber(num) {
  if (parseFloat(num).toString() == "NaN") {
    return false;
  } else {
    return true;
  }
}


//回到主界面
function backHomeWin() {
    //这个是回到主界面不会回到userwin
    api.closeToWin({
        name: 'root'
    });
}


//加载更多数据 显示 没有更多数据
function noMoreData() {
    //隐藏loading
    var hasMoreDom = $api.byId('hasmore');
    $api.addCls(hasMoreDom, 'aui-hide');
    //显示没有更多数据了
    var noMoreDom = $api.byId('nomore');
    $api.removeCls(noMoreDom, 'aui-hide');


}


//获取头像
function getUserHead(domid) {
    var imgsrc = $api.getStorage('snsUserHeadImage');
    //如果设置了头像
    if (imgsrc) {
        console.log("缓存的头像是" + imgsrc);
        var fs = api.require('fs');
        fs.exist({
            path: imgsrc
        }, function(ret, err) {
            if (ret.exist) {
                console.log("已经找到缓存头像:" + imgsrc);
                var imgDiv = $api.byId(domid);
                imgDiv.src = imgsrc;


            } else {
                //jieguo=false;
                console.log("缓存里面找不到头像图片");
            }
        });
    }


}


//缓存图片并返回  本地图片地址
function downloadSaveImage(imgurl, savePath) {
    var mypath;
    api.download({
        url: imgurl,
        savePath: savePath, //savePath: 'fs://head/head.png',
        report: true,
        cache: true,
        allowResume: true
    }, function(ret, err) {
        console.log("正在缓存图片imgurl结果是:" + JSON.stringify(ret));
        console.log("缓存图片错误:" + JSON.stringify(err));
        if (ret.state == 1) {
            mypath = ret.savePath;
        } else {
            mypath = false;
        }


    });


}




//没有默认图片地址 随机整数
function nub(minNum, maxNum) {
    switch (arguments.length) {
        case 1:
            return parseInt(Math.random() * minNum + 1);
            break;
        case 2:
            return parseInt(Math.random() * (maxNum - minNum + 1) + minNum);
            break;
        default:
            return 0;
            break;
    }
}






//缓存图片并存入$api.setStorage
function saveSnsHeadImg(imgurl, savepath) {
    api.download({
        url: imgurl,
        savePath: savepath, //savePath: 'fs://head/head.png',
        report: true,
        cache: true,
        allowResume: true
    }, function(ret, err) {


        console.log("正在缓存图片imgurl结果是:" + JSON.stringify(ret));
        if (ret.state == 1) {
            console.log("头像已经缓存 地址是:" + ret.savePath);
            $api.setStorage('snsUserHeadImage', ret.savePath);
            //发送消息 头像已经更改
            api.sendEvent({
                name: 'changmyhead',
                extra: {
                    headImgUrl: ret.savePath,
                }
            });


        } else {
            console.log("缓存图片错误:" + JSON.stringify(err));
        }


    });
}


//全屏加载中...
function loadingFullScreen(str) {
    var load = $api.byId('loadingFullScreen');
    //var html = '<div class="cf-font2" id="loadingFullScreen"><div class="loadBox clearfix"><div class="loadingBtn"><\/div><\/div><\/div>';
    var html = '<div class="cf-font2" id="loadingFullScreen"><div class="loadBox clearfix"><div class="rotate-loader"><\/div><\/div><\/div>';
    var htmlBox = document.documentElement;
    var bodyBox = document.body;
    if (load) {
        console.log("fullLoading存在");
    } else {
        console.log("fullLoading不存在");
        $api.append(document.body, html);
    }


    var load = $api.byId('loadingFullScreen');
    if (str) {
        load.style.display = 'block';
        load.addEventListener('touchmove', gundongEvent);
        //隐藏无网络框框
        notOnLine(false);


    } else {
        load.removeEventListener('click',gundongEvent,false);
        load.style.display = 'none';
    }


}


//无网络...
function notOnLine(str,callback) {
    var onlineBox = $api.byId('notOnLine');
    var path = "widget://res/nowifi-png.txt";
    var fs = api.require('fs');
    var urls = api.readFile({
        sync: true,
        path: path
    });
    var html = '<div class="cf-font2" id="notOnLine"><div class="notice clearfix" onclick="javascript:' + callback + '"><img src="'+urls+'" \/><div class="aui-font-size-14" style="color:#D1D2D4"  >网络异常、点击重新加载<\/div><\/div><\/div>';
    if (str) {
        console.log('callback' + callback);
        if (!onlineBox){
            $api.append(document.body, html);
        }
        var onlineBox = $api.byId('notOnLine');
        onlineBox.style.display = 'block';
        onlineBox.addEventListener('touchmove',gundongEvent);
        //隐藏loading框
        loadingFullScreen(false);
    } else {
        if(onlineBox){
          onlineBox.style.display = 'none';
        }


    }
}




var gundongEvent = function(event) {
    event.preventDefault();
}




//--------------------------------------------------------------------缓存相关-----------------------------------------------------------


//更换主题样式
//getskin('001');


//获取数据 并缓存 不使用全屏loading
function ajaxCacheData(folder, id, url,method,datas,callback) {
    readFile('/' + folder + '/' + id + '.json', function(ret, err) {
        if (ret.status) {
            //如果成功,说明有本地存储,读取时转换下数据格式
            //拼装json代码
            var cacheData = ret.data;
            console.log('/' + folder + '/' + id + '.json'+" 从缓存文件读取数据为:"+cacheData);
            callback(JSON.parse(cacheData));
            //iCache($('.cache'));
            //再远程取一下数据,防止有更新
            ajaxRequest(url, method, datas, function(ret, err) {
                console.log("对比更新 ret:"+JSON.stringify(ret)+"err"+JSON.stringify(err));
                if (ret) {
                    if(ret.code==200){
                        if (cacheData != JSON.stringify(ret)) {
                          console.log("----------有更新 处理返回数据");
                            //有更新处理返回数据
                            callback(ret);
                            //缓存数据
                            writeFile(ret, id, folder);
                            //iCache($('.cache'));
                        }else{
                          console.log("----------未更新内容 只读缓存内容");
                        }
                    }else{
                      //有缓存对比更新:加载失败
                      mytoast('加载失败',"middle");
                    }


                } else {
                    //有缓存对比更新:网络异常
                    mytoast('网络异常',"middle");
                }
            })
        } else {
            //如果失败则从服务器读取,利用上面的那个ajaxRequest方法从服务器GET数据
            ajaxRequest(url, method, datas, function(ret, err) {
              console.log("###########################无缓存重新请求ret:#######################"+JSON.stringify(ret)+"err"+JSON.stringify(err));
                if (ret) {
                    if(ret.code==200){
                      //处理返回数据
                      callback(ret);
                      //缓存数据
                      writeFile(ret, id, folder);
                      //iCache($('.cache'));
                    }else{
                      api.hideProgress();
                      mytoast('没有缓存:加载失败',"middle");
                    }


                } else {
                    api.hideProgress();
                    mytoast('没有缓存:网络异常',"middle");
                }
            })
        }
    })
}




//获取数据 并缓存 使用全屏loading
function ajaxCacheData2(folder, id, url,method,datas,refreshmethod,callback) {
    readFile('/' + folder + '/' + id + '.json', function(ret, err) {
        if (ret.status) {
            //如果成功,说明有本地存储,读取时转换下数据格式
            //拼装json代码
            //alert('取到缓存')
            var cacheData = ret.data;
            console.log('/' + folder + '/' + id + '.json'+" 从缓存文件读取数据为:"+cacheData);
            callback(JSON.parse(cacheData));
            loadingFullScreen(false);
            notOnLine(false);
            //iCache($('.cache'));
            //再远程取一下数据,防止有更新
            ajaxRequest(url, method, datas, function(ret, err) {
                console.log("对比更新 ret:"+JSON.stringify(ret)+"err"+JSON.stringify(err));
                if (ret) {
                    if(ret.code==200){
                        if (cacheData != JSON.stringify(ret)) {
                          console.log("----------有更新 处理返回数据");
                            //有更新处理返回数据
                            //alert('更新缓存')
                            callback(ret);
                            //缓存数据
                            writeFile(ret, id, folder);
                            //iCache($('.cache'));
                        }else{
                          console.log("----------未更新内容 只读缓存内容");
                        }
                    }else{
                          console.log("----------有更新 加载失败");
                    }


                } else {
                    mytoast('有缓存对比更新:网络异常',"middle");
                }
            })
        } else {
            //如果失败则从服务器读取,利用上面的那个ajaxRequest方法从服务器GET数据
            ajaxRequest(url, method, datas, function(ret, err) {
              console.log(JSON.stringify(datas));
              console.log("###########################无缓存重新请求ret:#######################"+url+JSON.stringify(ret)+"err"+JSON.stringify(err));
                if (ret) {
                    if(ret.code==200){
                      //处理返回数据
                      //alert('没取到缓存')
                      callback(ret);
                      api.hideProgress();
                      loadingFullScreen(false);
                      notOnLine(false);
                      //缓存数据
                      writeFile(ret, id, folder);
                      //iCache($('.cache'));
                    }else{
                      api.hideProgress();
                      loadingFullScreen(false);
                      notOnLine(true,refreshmethod);
                      console.log('没有缓存:加载失败',"middle");
                    }


                } else {
                    api.hideProgress();
                    loadingFullScreen(false);
                    notOnLine(true,refreshmethod);
                    console.log('没有缓存:网络异常',"middle");
                }
            })
        }
    })
}


//ajax请求
function ajaxRequest(url, method, datas, callBack) {
    var accessToken = $api.getStorage("accessToken");
    if( accessToken == 'undefined'){
      accessToken = 'ad035964311b7f2b.1628500a86f.6afe393b';


    }
    console.log("当前--------accessToken:"+accessToken);
    var serverUrl = APPconfig.ApiDomain.ajaxDomain;//全局里面配置
    var now = Date.now();
    if(method=='get'){
      sendData={};
    }
    api.ajax({
        url: serverUrl + url,
        method: method,
        cache: false,
        timeout: 5,
        dataType: 'json',
        headers:{Authorization:accessToken},
        data: {values: datas}
    }, function(ret, err) {
        callBack(ret, err);
    });
}






//读文件
function readFile(path, callBack) {
    var cacheDir = api.cacheDir;
    api.readFile({
        path: cacheDir + path
    }, function(ret, err) {
        callBack(ret, err);
    });
}
//写文件
function writeFile(json, id, path) {
    //缓存目录
    var cacheDir = api.cacheDir;
    api.writeFile({
        //保存路径
        path: cacheDir + '/' + path + '/' + id + '.json',
        //保存数据,记得转换格式
        data: JSON.stringify(json)
    }, function(ret, err) {


    })
}


//缓存图片
function iCache(selector) {
    selector.each(function(data) {
        ! function(data) {
            var url = selector.eq(data).attr("src");
            var img = this;
            var pos = url.lastIndexOf("/");
            var filename = url.substring(pos + 1);
            var path = api.cacheDir + "/pic/" + filename;
            var obj = api.require('fs');
            obj.exist({
                path: path
            }, function(ret, err) {
                //msg(ret);
                if (ret.exist) {
                    if (ret.directory) {
                        //api.alert({msg:'该路径指向一个文件夹'});
                    } else {
                        //api.alert({msg:'该路径指向一个文件'});
                        //selector.eq(data).src=path;
                        selector.eq(data).attr('src', null);
                        path = api.cacheDir + "/pic/" + filename;
                        selector.eq(data).attr('src', path);
                        //console.log(selector.eq(data).attr("src"));
                    }
                } else {
                    api.download({
                        url: url,
                        savePath: path,
                        report: false,
                        cache: true,
                        allowResume: true
                    }, function(ret, err) {
                        //msg(ret);
                        if (ret) {
                            var value = ('文件大小:' + ret.fileSize + ';下载进度:' + ret.percent + ';下载状态' + ret.state + '存储路径: ' + ret.savePath);
                        } else {
                            var value = err.msg;
                        };
                    });
                }
            });
        }(data);
    });
};