/** * 演示程序当前的 “注册/登录” 等操作,是基于 “本地存储” 完成的 * 当您要参考这个演示程序进行相关 app 的开发时, * 请注意将相关方法调整成 “基于服务端Service” 的实现。 **/ (function($, owner) { //数组指定移除 Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }; var appwebsitename; mui.arlist = function(funi) { //var ar1 = new Array('1/a', '2/b', '3/c'); //var ar2 = new Array('3/a', '1/b', '2/c'); var jo1 = { 'ND/NetDiskSignIn': 'DMS/NetDiskSignIn', 'ND/appND_CatRightList': 'DMS/appND_CatRightList', "dms/appCatDocList": "dms/appCatDocList", "ND/UnShare": "DMS/UnShare", "dms/AppDview": "dms/AppDview", "nd/AddDoc": "dms/ndAddDoc", "dms/AddDoc": "dms/dmsAddDoc", 'UpFile/Upp': 'upfile/index', "dms/cabinetlist": "dms/cabinetlist", 'nd/ShareOutList': 'dms/ShareOutList', 'nd/ShareInList': 'dms/ShareInList', 'nd/CatDocDelete': 'dms/ndCatDocDelete', 'dms/DeleteCatDoc': 'dms/DeleteCatDoc', "dms/Disk_info": "dms/Disk_info", "nd/Catchange": "dms/ndCatchange", 'dms/renamecatalog': 'dms/renamecatalog', "ND/Catcre": "dms/ndCatcre", 'dms/addcatalog': 'dms/addcatalog', "nd/addatten": "dms/ndAddAtten", "ND/GetShareUser": "dms/ndGetShareUser", "ND/Shareshare": "dms/ndShareshare", "sysadmin/getPSNROLE": "dms/getPSNROLE", "SelPsn/SysRole":'project/SysRole', } var state = owner.getState(); // console.log(state.appwebsitename); if (state.appwebsitename == 'OIGunghoWebSite') return jo1[funi] || funi; else return funi } /** * 用户登录 **/ //outcallback 成功时执行的继续回调, //callback 失败执行的 owner.login = function(loginInfo, xhr, outcallback, callback) { callback = callback || $.noop; loginInfo = loginInfo || {}; loginInfo.account = loginInfo.account || ''; loginInfo.password = loginInfo.password || ''; if (loginInfo.account.length < 2) { return callback('账号最短为 2 个字符'); } if (loginInfo.password.length < 1) { return callback('密码最短为 1个字符'); } var login_soap = '' + '' + '' + '' + '' + loginInfo.account + '' + loginInfo.password + '01DMS]]>' + '' + '' + // ''+ // 'text]]>'+ // ''+ ''; //--webservice // var xhr=new plus.net.XMLHttpRequest(); //alert(login_soap); var cgi = "http://" + loginInfo.server; //+"/OrgWebS" if (loginInfo.server.split(':').length < 2) cgi = "http://" + loginInfo.server + ":5010"; ///OrgWebS xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { var ret = {}; var xmlele = xhr.responseXML; var domParser = new DOMParser(); var xmldoc = domParser.parseFromString(xmlele.getElementsByTagName("pszResponse")[0].firstChild.nodeValue, 'text/xml'); var errcode = xmldoc.getElementsByTagName('ErrCode')[0].firstChild.nodeValue; if (errcode != '0') return callback(xmldoc.getElementsByTagName('ErrInfo')[0].firstChild.nodeValue); else { ret.code = errcode; ret.data = {}; ret.data.Name = owner.getNodeValue(xmldoc, "UserName"); ret.data.ID = owner.getNodeValue(xmldoc, "UserLogin"); ret.data.SessionID = owner.getNodeValue(xmldoc, "SessionID"); ret.data.ConnIP = owner.getNodeValue(xmldoc, "ConnIP"); var org = xmldoc.getElementsByTagName('Org')[0]; var unit = xmldoc.getElementsByTagName('Unit')[0]; var admin = xmldoc.getElementsByTagName('Admin')[0]; ret.data.OrgID = owner.getNodeValue(org, "ID"); ret.data.OrgName = owner.getNodeValue(org, "Name"); ret.data.UnitID = owner.getNodeValue(unit, "ID"); ret.data.UnitName = owner.getNodeValue(unit, "Name"); ret.data.Admin = owner.getNodeValue(admin, "SysAdmin"); return outcallback(ret); // owner.getAppinfo(xhhr,loginInfo,cgi,ret,callback); } } } }; xhr.onerror = function(e) { return callback("登录失败,无效的网络地址"); } xhr.open('POST', cgi, true); xhr.setRequestHeader('Content-Type', "text/xml;charset=UTF-8"); xhr.send(login_soap); // //mui.ajax({ // url:loginInfo.server+'account/signin', // data:{ // uname:loginInfo.account, // pwd:loginInfo.password, // cname:loginInfo.host_name // }, // crossDomain: true, //强制使用5+跨域 // dataType:'json',//服务器返回json格式数据 // type:'post',//HTTP请求类型 // timeout:6000,//超时时间设置为10秒; // success:function(data){ // //服务器返回响应,根据响应结果,分析是否登录成功; // alert(JSON.stringify(data)); // var ret = data; // if(ret.code=='00000'){ // return owner.createState(loginInfo.server,loginInfo.account,ret.data, loginInfo.password,callback); // }else{ // return callback(ret.msg); // } // }, // error:function(xhr,type,errorThrown){ // //异常处理; // alert(JSON.stringify(type)); // return callback(type); // } // }); // $.post(loginInfo.server+'account/signin',{ // uname:loginInfo.account, // pwd:loginInfo.password, // cname:loginInfo.host_name, // },function(data){ // //服务器返回响应,根据响应结果,分析是否登录成功; // var ret = data; // if(ret.code=='00000'){ // return owner.createState(loginInfo.server,loginInfo.account,ret.data, loginInfo.password,callback); // }else{ // return callback(ret.msg); // } // },'json' // ); // var users = JSON.parse(localStorage.getItem('$users') || '[]'); // var authed = users.some(function(user) { // return loginInfo.account == user.account && loginInfo.password == user.password; // }); // if (authed) { // return owner.createState(loginInfo.account, callback); // } else { // return callback('用户名或密码错误'); // } }; owner.getAppinfo = function(xhr, Mobox_true_Gungho_false, loginInfo, userret, callback) { if (Mobox_true_Gungho_false) appwebsitename = 'OIMoboxWebSite'; else appwebsitename = 'OIGunghoWebSite'; var state = owner.getState(); state.appwebsitename = appwebsitename; owner.setState(state); var appgetinfo = ''; appgetinfo += '' + appwebsitename + ']]>'; appgetinfo += ''; //alert(appgetinfo); var cgi = "http://" + loginInfo.server + "/OrgWebS"; if (loginInfo.server.split(':').length < 2) cgi = "http://" + loginInfo.server + ":5010/OrgWebS"; xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { var xmlele = xhr.responseXML; var domParser = new DOMParser(); var xmldoc = domParser.parseFromString(xmlele.getElementsByTagName("pszResponse")[0].firstChild.nodeValue, 'text/xml'); var errcode = xmldoc.getElementsByTagName('ErrCode')[0].firstChild.nodeValue; if (errcode != '0') return callback(xmldoc.getElementsByTagName('ErrInfo')[0].firstChild.nodeValue); else { var app = xmldoc.getElementsByTagName('App')[0]; var ret = userret; ret.data.AppID = owner.getAttValue(app, "ID"); ret.data.AppName = owner.getAttValue(app, "Name"); ret.data.AppIP = owner.getAttValue(app, "ServerIP"); ret.data.AppPort = owner.getAttValue(app, "ServerPort"); ret.data.AppUrl = owner.getNodeValue(app, "URL"); return owner.webLogin(loginInfo, ret.data, ret.data.AppUrl + '/', callback); } } } }; xhr.onerror = function(e) { return callback("获取网站地址失败,无效的网络地址"); } xhr.open('POST', cgi, true); xhr.setRequestHeader('Content-Type', "text/xml;charset=UTF-8"); xhr.send(appgetinfo); } owner.getNodeValue = function(xmldoc, nodeval) { try { return xmldoc.getElementsByTagName(nodeval)[0].firstChild.nodeValue; } catch (e) { return ""; } } owner.getAttValue = function(xmldoc, attval) { try { return xmldoc.getAttribute(attval); } catch (e) { return ""; } } //web login owner.webLogin = function(loginInfo, r_d, appurl, callback) { //appurl="http://10.0.2.2:30961/work/"; //模拟器 + VS 调试 //appurl="http://192.168.1.115:30961/work/"; //真机 + VS 调试 // console.log(appurl + mui.arlist('ND/NetDiskSignIn')); // console.log(JSON.stringify({ // uname: loginInfo.account, // pwd: loginInfo.password, // cname: loginInfo.host_name // })); mui.ajax({ url: appurl + mui.arlist('ND/NetDiskSignIn'), data: { uname: loginInfo.account, pwd: loginInfo.password, cname: loginInfo.host_name }, crossDomain: true, //强制使用5+跨域 dataType: 'json', //服务器返回json格式数据 type: 'post', //HTTP请求类型 timeout: 10000, //超时时间设置为10秒; success: function(data) { //服务器返回响应,根据响应结果,分析是否登录成功; // alert(JSON.stringify(data)); var ret = data; if (ret.code == '00000') { return owner.createState(loginInfo.server, loginInfo.account, loginInfo.password, ret, appurl, callback); } else { return callback(ret.msg); } }, error: function(xhr, type, errorThrown) { //异常处理; //alert(type) return callback(type); } }); } //登陆成功 owner.createState = function(server, account, password, ret, url, callback) { var appcookie = ret.msg; ret = ret.data; var state = owner.getState(); state.account = ret.Name; state.token = ret.ID; state.Interadr = url; state.appcookie = appcookie; state.lastaddress = server; state.lastuser = { account: account, password: password }; state.ret = ret; state.prjenventype = ""; state.shownstar = "0"; var pjson = state.seruser || '{}'; if (pjson == '{}') pjson = JSON.parse(pjson); var users = pjson[server] || "[]"; if (users == '[]') users = JSON.parse(users); var hasaccount = true; users.some(function(user) { if (user.account == account && user.password == password) hasaccount = false; }) if (hasaccount) users.push({ account: account, password: password, name: ret.Name }); pjson[server] = users; state.seruser = pjson; state.shownstar = "0"; owner.setState(state); //写入缓存 记录 return callback(); }; /** * 新用户注册 **/ owner.reg = function(regInfo, callback) { callback = callback || $.noop; regInfo = regInfo || {}; regInfo.account = regInfo.account || ''; regInfo.password = regInfo.password || ''; if (regInfo.account.length < 5) { return callback('用户名最短需要 5 个字符'); } if (regInfo.password.length < 6) { return callback('密码最短需要 6 个字符'); } if (!checkEmail(regInfo.email)) { return callback('邮箱地址不合法'); } var users = JSON.parse(localStorage.getItem('$users') || '[]'); users.push(regInfo); localStorage.setItem('$users', JSON.stringify(users)); return callback(); }; /** * 获取当前状态 **/ owner.getState = function() { var stateText = localStorage.getItem('$state') || "{}"; return JSON.parse(stateText); }; /** * 设置当前状态 **/ owner.setState = function(state) { state = state || {}; localStorage.setItem('$state', JSON.stringify(state)); }; var checkEmail = function(email) { email = email || ''; return (email.length > 3 && email.indexOf('@') > -1); }; /** * 找回密码 **/ owner.forgetPassword = function(email, callback) { callback = callback || $.noop; if (!checkEmail(email)) { return callback('邮箱地址不合法'); } return callback(null, '新的随机密码已经发送到您的邮箱,请查收邮件。'); }; /** * 获取应用本地配置 **/ owner.setSettings = function(settings) { settings = settings || {}; localStorage.setItem('$settings', JSON.stringify(settings)); } /** * 设置应用本地配置 **/ owner.getSettings = function() { var settingsText = localStorage.getItem('$settings') || "{}"; return JSON.parse(settingsText); } /** * 获取本地是否安装客户端 **/ owner.isInstalled = function(id) { if (id === 'qihoo' && mui.os.plus) { return true; } if (mui.os.android) { var main = plus.android.runtimeMainActivity(); var packageManager = main.getPackageManager(); var PackageManager = plus.android.importClass(packageManager) var packageName = { "qq": "com.tencent.mobileqq", "weixin": "com.tencent.mm", "sinaweibo": "com.sina.weibo" } try { return packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES); } catch (e) {} } else { switch (id) { case "qq": var TencentOAuth = plus.ios.import("TencentOAuth"); return TencentOAuth.iphoneQQInstalled(); case "weixin": var WXApi = plus.ios.import("WXApi"); return WXApi.isWXAppInstalled() case "sinaweibo": var SinaAPI = plus.ios.import("WeiboSDK"); return SinaAPI.isWeiboAppInstalled() default: break; } } } /** * 获取网络类型状态 **/ owner.getNetwork = function() { var networkTypes = {}; networkTypes[plus.networkinfo.CONNECTION_UNKNOW] = "未知"; networkTypes[plus.networkinfo.CONNECTION_NONE] = "未连接网络"; networkTypes[plus.networkinfo.CONNECTION_ETHERNET] = "有线网络"; networkTypes[plus.networkinfo.CONNECTION_WIFI] = "WiFi网络"; networkTypes[plus.networkinfo.CONNECTION_CELL2G] = "2G网络"; //2G蜂窝网络 networkTypes[plus.networkinfo.CONNECTION_CELL3G] = "3G网络"; //3G蜂窝网络 networkTypes[plus.networkinfo.CONNECTION_CELL4G] = "4G网络"; //4G蜂窝网络 return networkTypes[plus.networkinfo.getCurrentType()]; } owner.isNetWork = function() { if (owner.getNetwork() == '未知' || owner.getNetwork() == '未连接网络') return false; return true; } owner.ajaxErr = function(xhr, type, tipmsg, cb) { if (type == 'timeout') { var btnArray = ['返回', '重试']; mui.confirm('返回上页还是重新获取', tipmsg + '超时', btnArray, function(e) { if (e.index == 0) { mui.back(); } if (e.index == 1) { cb(); } }) } else if (type == 'error') { var btnArray = ['返回', '重试']; mui.confirm('返回上页还是重新获取', tipmsg + '错误', btnArray, function(e) { if (e.index == 0) { mui.back(); } if (e.index == 1) { cb(); } }) } else if (type == 'parseerror') { if (xhr) { if (xhr.status == 500) { mui.alert('服务端内部错误', tipmsg + "失败"); } alert(xhr.responseText); } } else mui.alert(tipmsg + "失败"); } owner.appopenURL = function(url) { plus.runtime.openURL(url); } owner.appcreateDownload = function(urll, docinfoname) { //alert(urll); dtask = plus.downloader.createDownload(urll, { filename: '_doc/' + docinfoname }, function(d, status) { if (!dtask) { return; } //没有下载任务或已完成已清除 // 下载完成 if (status == 200) { dtask = null; owner.appopenfile('_doc/' + docinfoname); } else { mui.alert('文件下载失败', '', function() {}); } }); dtask.addEventListener("statechanged", function(task, status) { if (!dtask) { return; } var time = new Date(); switch (task.state) { case 1: // 开始 plus.nativeUI.toast("开始下载..."); break; case 2: // 已连接到服务器 plus.nativeUI.toast("链接到服务器..."); var t = new Date(); if ((t - time) / 1000 > 5) { dtask.abort(); mui.alert('长时间未链接,已取消', '', function() { // plus.downloader.clear(); if (dtask) { dtask.abort(); dtask = null; } }); return false; } break; case 3: // 已接收到数据 plus.nativeUI.toast('文件正在下载中..'); break; case 4: // 下载完成 plus.nativeUI.toast('下载完成!'); break; } }); dtask.start(); } owner.appopenfile = function(filename) { //alert(filename); plus.runtime.openFile(filename, {}, function(e) { console.log(e); console.log(e.message); plus.nativeUI.alert("无法打开此文件:" + ((e.memssage == 'undefined' || e.message == "not found 3th activity") ? "没发现能打开此文件的程序" : e.message)); }); } owner.appcreateUpload = function(serverurl, files, cb) { console.log(files.length); for (var i = 0; i < files.length; i++) { file = files[i]; console.log(file); var utask = plus.uploader.createUpload(serverurl, { method: "POST" }, function(t, status) { //上传完成 // alert(status); if (status == 200) { // alert(t.responseText); var ret = JSON.parse(t.responseText); // return; console.log(ret) console.log(ret.code == '00000') if (ret.code == '00000') { plus.nativeUI.toast("上传完成"); cb(ret.data, i == files.length); } else { mui.alert(ret.msg, '', function() { return; }) } } else { mui.alert(ret.msg, '', function() { return; }) } } ); utask.addEventListener("statechanged", function(tas, status) { if (!utask) { return; } switch (tas.state) { case 3: // 已接收到数据 // if(!utask) { // return; // } // var B=(parseInt(tas.uploadedSize)/parseInt(tas.totalSize)).toFixed(2)*100; // plus.nativeUI.toast("上传中..."+B+"%"); break; } }); utask.addFile(file, { key: 0 }); utask.start(); } } owner.loadXML = function(xmlString) { var xmlDoc = null; //判断浏览器的类型 //支持IE浏览器 if (!window.DOMParser && window.ActiveXObject) { //window.DOMParser 判断是否是非ie浏览器 var xmlDomVersions = ['MSXML.2.DOMDocument.6.0', 'MSXML.2.DOMDocument.3.0', 'Microsoft.XMLDOM']; for (var i = 0; i < xmlDomVersions.length; i++) { try { xmlDoc = new ActiveXObject(xmlDomVersions[i]); xmlDoc.async = false; xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串 break; } catch (e) {} } } //支持Mozilla浏览器 else if (window.DOMParser && document.implementation && document.implementation.createDocument) { try { /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。 * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法 * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型 * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。 */ domParser = new DOMParser(); xmlDoc = domParser.parseFromString(xmlString, 'text/xml'); } catch (e) {} } else { return null; } return xmlDoc; } owner.loadXMLgetattributevalue = function(tag, atr) { try { return tag.getAttribute(atr); } catch (e) { return "" }; } owner.loadXMLgetnodelue = function(tag) { try { return tag.firstChild.nodeValue } catch (e) { return "" }; } owner.reloadwebview = function(pageId) { if (pageId) { var _page = plus.webview.getWebviewById(pageId); if (_page) { _page.reload(true); } } } /** * @param {Object} func 参数为方法调用 function(){thisfun(args1,args2)}) */ //跳转登录 owner.jump_login = function() { var loginweb = plus.webview.getWebviewById(plus.runtime.appid); mui.fire(loginweb, 'show', null); loginweb.show("pop-in"); } owner.relogined = function(func) { //调用方式 //app.relogined(function(){thisfun(args1,args2)})) var masklogin = mui.createMask(); var state = owner.getState(); masklogin.show(); //显示遮罩 setTimeout(function() { masklogin.close(); //关闭遮罩 }, 50000) var loginInfo = { server: state.lastaddress, account: state.lastuser.account, password: state.lastuser.password, host_name: plus.device.model }; owner.login(loginInfo, (new plus.net.XMLHttpRequest()), function(ret) { if (JSON.stringify(ret) != '{}' && ret.code == '0') { owner.getAppinfo((new plus.net.XMLHttpRequest()), loginInfo, ret, function(errr) { masklogin.close(); //关闭遮罩 if (errr) { plus.nativeUI.toast(errr + "可能您的网络状态不太好"); return; } if (typeof func == 'function') { func(); } }); } }, function(err) { mask.close(); //关闭遮罩 if (err) { owner.jump_login(); plus.nativeUI.toast(err + "可能您的网络状态不太好"); return; } }); } owner.dateUtils = { UNITS: { '年': 31557600000, '月': 2629800000, '天': 86400000, '小时': 3600000, '分钟': 60000, '秒': 1000 }, humanize: function(milliseconds) { var humanize = ''; mui.each(this.UNITS, function(unit, value) { if (milliseconds >= value) { humanize = Math.floor(milliseconds / value) + unit + '前'; return false; } return true; }); return humanize; // || '刚刚'; }, format: function(dateStr, notime) { var date = this.parse(dateStr) return this.openinfo_formatter_ttime(dateStr, 'notime'); var diff = Date.now() - date.getTime(); if (diff < this.UNITS['天']) { return this.humanize(diff); } else return this.openinfo_formatter_ttime(dateStr, notime) var _format = function(number) { return (number < 10 ? ('0' + number) : number); }; return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDate()) + '-' + _format( date.getHours()) + ':' + _format(date.getMinutes()); }, parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象 var a = str.split(/[^0-9]/); return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]); }, openinfo_formatter_ttime: function(cellvalue, nowhat) { if(!cellvalue) return ""; var cv_o = cellvalue.split(' ')[0]; var cv_t = cellvalue.split(' ')[1]; if (nowhat) { cv_t = ""; } var date = new Date(); var time = cv_o; var h_m = ""; if (cv_t) h_m = cv_t.split(':')[0] + ':' + cv_t.split(':')[1]; if (cv_o.split('-').length == 3) if (date.getFullYear() == cv_o.split('-')[0]) { time = " " + cv_o.split('-')[1] + '-' + cv_o.split('-')[2]; if (date.getMonth() + 1 == cv_o.split('-')[1]) { if (date.getDate() == cv_o.split('-')[2]) time = "今天"; if (date.getDate() - 1 == cv_o.split('-')[2]) time = '昨天'; if (date.getDate() - 2 == cv_o.split('-')[2]) time = '前天'; } } else { time = cv_o.split('-')[1] + '-' + cv_o.split('-')[2]; if (date.getFullYear() - 1 == cv_o.split('-')[0]) { //time = time + " 去年"; } if (date.getFullYear() - 2 == cv_o.split('-')[0]) { //time = time + " 前年"; } time = cv_o.split('-')[0] + '-' + time; } return time + " " + h_m; }, formatSize: function(cellvalue) { var div = cellvalue; if (parseInt(cellvalue)) { var intsize = parseInt(cellvalue); if (intsize < 1024 * 1024) div = (parseInt(cellvalue) / 1024).toFixed('1') + 'k'; else if (intsize < 1024 * 1024 * 1024) div = (parseInt(cellvalue) / 1024 / 1024).toFixed('2') + 'M'; else div = (parseInt(cellvalue) / 1024 / 1024 / 1024).toFixed('2') + 'M'; } return div; } }; owner.Pjax=function(url,data,opt={}){ return new Promise(function(res,rej){ $.ajax({ url: url, data: data, crossDomain: true, //强制使用5+跨域 dataType: 'json', //服务器返回json格式数据 type: opt.method||'post', //HTTP请求类型 timeout: 10000, //超时时间设置为10秒; headers: { "appcookie": opt.headers||state.appcookie }, success: function(data) { res(data); }, error: function(xhr, type, errorThrown) { //异常处理 rej(type); } }) }) } // var Pjax=class{ // constructor(url) { // this.url=url; // this.opta={}; // this.dataType='json'; // this.type='post'; // } // static data(da){ // this.opta=da||{}; console.log(this.opta);return this; // } // static do(){ // console.log(this.url); // console.log(this.opta); // console.log(this.dataType); // console.log(this.type); // } // } }(mui, window.app = {}));