|
|
(function(owner) { |
|
|
//c2c微服务访问url前缀 |
|
|
owner.C2CUrl = "https://zhixinchains.com/otc/"; |
|
|
//币币微服务 |
|
|
owner.CCTUrl = "https://zhixinchains.com/cct/"; |
|
|
//user微服务访问url前缀 |
|
|
owner.walletFileUrl = "https://file.zhixinchains.com/"; |
|
|
owner.confBaseUrl = "https://zhixinchains.com/sysconf/"; |
|
|
owner.currencyBaseUrl = "https://zhixinchains.com/currency/"; |
|
|
// 本地user地址 |
|
|
owner.UserUrl = "https://zhixinchains.com/user/"; |
|
|
owner.walletBaseUrl = "https://zhixinchains.com/user/"; |
|
|
// 本地登录地址 |
|
|
owner.loginBaseUrl = "https://zhixinchains.com/user/"; |
|
|
// ########钱包模块的服务器####### |
|
|
owner.btcBaseUrl = "https://zhixinchains.com/btc/"; |
|
|
owner.ethBaseUrl = "https://zhixinchains.com/eth/"; |
|
|
owner.eosBaseUrl = "https://zhixinchains.com/eos/"; |
|
|
|
|
|
// 本地user地址 |
|
|
// 极光聊天本地地址 |
|
|
owner.Host_jm = "https://zhixinchains.com/imjg/" |
|
|
// owner.UserUrl = "http://192.168.105.82:10121/"; |
|
|
// // 本地登录地址 |
|
|
// owner.loginBaseUrl = "http://192.168.105.52:8101/"; |
|
|
// // ########钱包模块的服务器####### |
|
|
// owner.btcBaseUrl = "http://192.168.105.52:8301/"; |
|
|
// owner.ethBaseUrl = "http://192.168.105.52:8201/"; |
|
|
// owner.eosBaseUrl = "http://192.168.105.52:8401/"; |
|
|
|
|
|
//自选行情 |
|
|
owner.marketChoiceKey = "$market-choice"; |
|
|
|
|
|
//默认打开页面方式 |
|
|
owner.aniShow = "pop-in"; |
|
|
|
|
|
//已经预加载的页面 |
|
|
owner.preate = {}; |
|
|
|
|
|
//预加载页面过期时间(ms) |
|
|
owner.preateTimeout = 1000 * 60 * 5; |
|
|
|
|
|
// //预加载倒计时列表 |
|
|
// owner.timeouts = {}; |
|
|
|
|
|
//避免快速点击打开多个页面 |
|
|
owner.openw = null; |
|
|
|
|
|
/** |
|
|
* 存储数据到本地 |
|
|
* @param {String} key : 数据标识 |
|
|
* @param {Object} values : 数据 |
|
|
*/ |
|
|
owner.setLocalStorage = function(key, values) { |
|
|
values = values || {}; |
|
|
if(typeof values == 'object') { |
|
|
localStorage.setItem(key, JSON.stringify(values)); |
|
|
} else { |
|
|
localStorage.setItem(key, values); |
|
|
} |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取本地存储数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getLocalStorage = function(key) { |
|
|
var settingsText = localStorage.getItem(key) || "{}"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 根据key值删除存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeLocalStorage = function(key) { |
|
|
localStorage.removeItem(key); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 不合法数据格式化 |
|
|
* @param {String} val |
|
|
*/ |
|
|
owner.escapeString = function(val) { |
|
|
if(val) { |
|
|
val = val.replace(/\\/g, "\\\\"); |
|
|
val = val.replace(/\"/g, "\\\""); |
|
|
val = val.replace(/\?/g, "?"); |
|
|
val = val.replace(/\n|\r|\t/g, function() { |
|
|
var a = arguments[0]; |
|
|
return(a == '\n') ? '\\n' : (a == '\r') ? '\\r' : |
|
|
(a == '\t') ? '\\t' : "" |
|
|
}); |
|
|
} |
|
|
return val; |
|
|
} |
|
|
|
|
|
/** |
|
|
* 不合法数据格式化 |
|
|
* @param {String} val |
|
|
*/ |
|
|
owner.escapeValue = function(val) { |
|
|
if(val) { |
|
|
if($.isArray(val)) { // 数组类型 |
|
|
for(var i = 0, len = val.length; i < len; i++) { |
|
|
var value = val[i]; |
|
|
if(typeof value == 'string') { |
|
|
val[i] = owner.escapeString(value); // 设置新值 |
|
|
} |
|
|
} |
|
|
} else if(typeof val == 'string') { // 字符类型 |
|
|
val = owner.escapeString(val); // 设置新值 |
|
|
} // 其他不处理 |
|
|
} |
|
|
return val; |
|
|
} |
|
|
|
|
|
/** |
|
|
* form表单序列化 |
|
|
* @param {Document} formDcument : 表单dcument对象 |
|
|
*/ |
|
|
owner.serialize = function(formDcument) { |
|
|
var valueList = []; //保存待处理的值,结构为: name , value |
|
|
var data = {}; //返回结果的json数组 |
|
|
|
|
|
//唯一值的 |
|
|
var queryCSS = "input[type='color'][name]" + ",input[type='date'][name]" + ",input[type='datetime'][name]" + |
|
|
",input[type='datetime-local'][name]" + ",input[type='email'][name]" + ",input[type='hidden'][name]" + |
|
|
",input[type='month'][name]" + ",input[type='number'][name]" + ",input[type='password'][name]" + |
|
|
",input[type='range'][name]" + ",input[type='search'][name]" + ",input[type='tel'][name]" + |
|
|
",input[type='text'][name]" + ",input[type='time'][name]" + ",input[type='url'][name]" + |
|
|
",input[type='week'][name]" + ",input[type='radio'][name]:checked" + ",textarea[name]"; |
|
|
var onlyValList = formDcument.querySelectorAll(queryCSS); |
|
|
for(var i = 0; i < onlyValList.length; i++) { |
|
|
var dom = onlyValList[i]; |
|
|
var name = dom.getAttribute("name"); //键名 |
|
|
var value = owner.escapeString(dom.value); //值 |
|
|
data[name] = value; |
|
|
} |
|
|
|
|
|
//checkbox |
|
|
var checkboxList = formDcument.querySelectorAll("input[type='checkbox'][name]:checked"); |
|
|
var existCheckbox = {}; //已处理过的checkbox |
|
|
for(var i = 0; i < checkboxList.length; i++) { |
|
|
var name = checkboxList[i].getAttribute("name"); |
|
|
//判断是否已处理 |
|
|
if(existCheckbox[name]) { |
|
|
continue; |
|
|
} |
|
|
var value = new Array(); |
|
|
//获取相同的checkbox |
|
|
var doms = formDcument.querySelectorAll("input[type='checkbox'][name='" + name + "']:checked"); |
|
|
for(var j = 0; j < doms.length; j++) { |
|
|
var val = owner.escapeString(doms[j].value); |
|
|
value.push(val); |
|
|
} |
|
|
data[name] = value; |
|
|
existCheckbox[name] = true; |
|
|
} |
|
|
|
|
|
//select |
|
|
var selectList = formDcument.querySelectorAll("select[name]"); |
|
|
for(var i = 0; i < selectList.length; i++) { |
|
|
var dom = selectList[i]; |
|
|
var name = dom.getAttribute("name"); //键名 |
|
|
//多选select |
|
|
if(dom.getAttribute("multiple")) { |
|
|
var value = new Array(); |
|
|
for(j = 0; j < dom.length; j++) { |
|
|
if(dom.options[j].selected) { |
|
|
var val = owner.escapeString(dom[j].value); |
|
|
value.push(val); |
|
|
} |
|
|
} |
|
|
data[name] = value; |
|
|
} else { |
|
|
var index = dom.selectedIndex; |
|
|
var value = owner.escapeString(dom.options[index].value); |
|
|
data[name] = value; |
|
|
} |
|
|
} |
|
|
return data; |
|
|
} |
|
|
/** |
|
|
* |
|
|
* @param {Object} formDcument : form表单 |
|
|
* @param {Object} data : JS对象 |
|
|
*/ |
|
|
owner.formFilling = function(formDcument, data) { |
|
|
//输入值的 |
|
|
var queryCSS = "input[type='color'][fillName]" + ",input[type='date'][fillName]" + ",input[type='datetime'][fillName]" + |
|
|
",input[type='datetime-local'][fillName]" + ",input[type='email'][fillName]" + ",input[type='hidden'][fillName]" + |
|
|
",input[type='month'][fillName]" + ",input[type='number'][fillName]" + ",input[type='password'][fillName]" + |
|
|
",input[type='range'][fillName]" + ",input[type='search'][fillName]" + ",input[type='tel'][fillName]" + |
|
|
",input[type='text'][fillName]" + ",input[type='time'][fillName]" + ",input[type='url'][fillName]" + |
|
|
",input[type='week'][fillName]" + ",textarea[fillName]"; |
|
|
var fillOne = formDcument.querySelectorAll(queryCSS); |
|
|
for(var i = 0; i < fillOne.length; i++) { |
|
|
var dom = fillOne[i]; |
|
|
var fillName = dom.getAttribute("fillName"); //键名 |
|
|
var value = data[fillName]; //值 |
|
|
if(value) { //若有此值则填充数据 |
|
|
dom.value = data[fillName]; |
|
|
} |
|
|
} |
|
|
|
|
|
//radio,checkbox |
|
|
var fillTwo = formDcument.querySelectorAll("input[type='radio'][fillName],input[type='checkbox'][fillName]"); |
|
|
var existFillTwo = {}; //已处理过的 |
|
|
for(var i = 0; i < fillTwo.length; i++) { |
|
|
var dom = fillTwo[i]; |
|
|
var fillName = dom.getAttribute("fillName"); //键名 |
|
|
//判断是否已处理 |
|
|
if(existFillTwo[fillName]) { |
|
|
continue; |
|
|
} |
|
|
var value = data[fillName]; //值 |
|
|
if(value) { //若有此值 |
|
|
//判断是否是数组 |
|
|
if(typeof value === 'object' && Array == value.constructor) { |
|
|
for(var j = 0; j < value.length; j++) { |
|
|
var val = value[j]; |
|
|
//获取相同的radio,checkbox |
|
|
var domsCSS = "input[type='radio'][fillName='" + fillName + "'][value='" + val + "']" + |
|
|
",input[type='checkbox'][fillName='" + fillName + "'][value='" + val + "']" |
|
|
var doms = formDcument.querySelectorAll(domsCSS); |
|
|
for(var k = 0; k < doms.length; k++) { //选中 |
|
|
doms[j].checked = true; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
//获取相同的radio,checkbox |
|
|
var domsCSS = "input[type='radio'][fillName='" + fillName + "'][value='" + value + "']" + |
|
|
",input[type='checkbox'][fillName='" + fillName + "'][value='" + value + "']" |
|
|
var doms = formDcument.querySelectorAll(domsCSS); |
|
|
for(var j = 0; j < doms.length; j++) { //选中 |
|
|
doms[j].checked = true; |
|
|
} |
|
|
} |
|
|
} |
|
|
existFillTwo[fillName] = true; |
|
|
} |
|
|
|
|
|
//select |
|
|
var selectList = formDcument.querySelectorAll("select[fillName]"); |
|
|
for(var i = 0; i < selectList.length; i++) { |
|
|
var dom = selectList[i]; |
|
|
var fillName = dom.getAttribute("fillName"); //键名 |
|
|
var value = data[fillName]; //值 |
|
|
if(value) { //若有此值 |
|
|
//判断是否是数组 |
|
|
if(typeof value === 'object' && Array == value.constructor) { |
|
|
for(j = 0; j < value.length; j++) { |
|
|
for(k = 0; k < dom.length; k++) { |
|
|
var opt = dom.options[k]; |
|
|
if(opt.value == value[j]) { |
|
|
opt.selected = true; |
|
|
} |
|
|
} |
|
|
} |
|
|
} else { |
|
|
for(j = 0; j < dom.length; j++) { |
|
|
var opt = dom.options[j]; |
|
|
if(opt.value == value) { |
|
|
opt.selected = true; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
/** |
|
|
* |
|
|
* @param {String} url : 页面地址 |
|
|
* @param {String} id :窗口标识 |
|
|
* @param {Object} styles : 窗口样式 |
|
|
* @param {Object} extras : 传递参数 |
|
|
* @param {String} aniShow : 显示方式 |
|
|
* @param {String} isHide : 是否显示 |
|
|
*/ |
|
|
owner.openWin = function(url, id, styles, extras, aniShow, isHide) { |
|
|
//避免快速点击打开多个页面 |
|
|
if(owner.openw) { |
|
|
return null; |
|
|
} |
|
|
owner.openw = id; |
|
|
//默认是右进显示 |
|
|
aniShow || (aniShow = owner.aniShow); |
|
|
styles || (styles = {}); |
|
|
extras || (extras = {}); |
|
|
var page = plus.webview.create(url, id, styles, extras); |
|
|
page.addEventListener("loaded", function() { |
|
|
if(!isHide) { |
|
|
var data2 = new Date(); |
|
|
page.show(aniShow); |
|
|
} |
|
|
}, false); |
|
|
page.addEventListener("hide", function() { |
|
|
owner.openw = null; |
|
|
}, false); |
|
|
page.addEventListener("close", function() { |
|
|
owner.openw = null; |
|
|
}, false); |
|
|
return page; |
|
|
} |
|
|
|
|
|
/** |
|
|
* |
|
|
* @param {String} url : 页面地址 |
|
|
* @param {String} id :窗口标识 |
|
|
* @param {Object} styles : 窗口样式 |
|
|
* @param {Object} extras : 传递参数 |
|
|
* @param {String} aniShow : 显示方式 |
|
|
* @param {String} isHide : 是否隐藏 |
|
|
*/ |
|
|
owner.preloadWin = function(url, id, styles, extras, aniShow, isHide) { |
|
|
//避免快速点击打开多个页面 |
|
|
if(owner.openw) { |
|
|
return null; |
|
|
} |
|
|
owner.openw = id; |
|
|
//默认是右进显示 |
|
|
aniShow || (aniShow = owner.aniShow); |
|
|
styles || (styles = {}); |
|
|
extras || (extras = {}); |
|
|
var page = owner.preate[id]; |
|
|
//若此页面已在预加载列表中 |
|
|
if(page) { |
|
|
page.show(aniShow); |
|
|
// delete owner.timeouts[id]; |
|
|
// clearTimeout(owner.timeouts[id]); |
|
|
return page; |
|
|
} else { |
|
|
styles.scrollIndicator = 'none'; //隐藏滚动条 |
|
|
styles.scalable = false; //窗口不可缩放 |
|
|
styles.popGesture = 'hide'; //右划隐藏 |
|
|
//预加载页面 |
|
|
page = mui.preload({ |
|
|
url: url, |
|
|
id: id, |
|
|
styles: styles, |
|
|
extras: extras |
|
|
}); |
|
|
page.addEventListener("loaded", function() { |
|
|
if(!isHide) { |
|
|
page.show(aniShow); |
|
|
} else { |
|
|
owner.openw = null; |
|
|
} |
|
|
}, false); |
|
|
owner.preate[id] = page; |
|
|
//页面隐藏监听, |
|
|
page.addEventListener("hide", function() { |
|
|
owner.openw = null; |
|
|
//默认页面隐藏过了一定时间后没有再次打开则关闭 |
|
|
// var timeout = setTimeout(function() { |
|
|
// page.close(); |
|
|
// }, owner.preateTimeout); |
|
|
// owner.timeouts[id] = timeout; |
|
|
}, false); |
|
|
//页面关闭监听 |
|
|
page.addEventListener("close", function() { |
|
|
owner.openw == id ? owner.openw = null : ""; |
|
|
delete owner.preate[id]; |
|
|
}, false); |
|
|
} |
|
|
return page; |
|
|
} |
|
|
|
|
|
owner.formatDate = function(time) { |
|
|
var date = new Date(time); |
|
|
var year = date.getFullYear(); |
|
|
var month = date.getMonth() + 1; |
|
|
var day = date.getDate(); |
|
|
var hours = date.getHours(); |
|
|
var minutes = date.getMinutes(); |
|
|
var seconds = date.getSeconds(); |
|
|
return year + "-" + (month < 10 ? ('0' + month) : month) + "-" + |
|
|
(day < 10 ? ('0' + day) : day) + " " + |
|
|
(hours < 10 ? ('0' + hours) : hours) + ":" + |
|
|
(minutes < 10 ? ('0' + minutes) : minutes) + ":" + |
|
|
(seconds < 10 ? ('0' + seconds) : seconds); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 格式化eth显示 |
|
|
* @param {Object} eth |
|
|
*/ |
|
|
owner.formatEth = function(eth) { |
|
|
if(eth == '0') { |
|
|
return eth; |
|
|
} |
|
|
var index = eth.indexOf('.'); |
|
|
if(index != -1) { |
|
|
var point = eth.substring(index + 1); |
|
|
if(point.length > 6) { |
|
|
eth = eth.substring(0, index + 7); |
|
|
eth = parseFloat(eth) + ''; |
|
|
} |
|
|
} |
|
|
return eth; |
|
|
} |
|
|
|
|
|
/** |
|
|
* 格式化cny显示 |
|
|
* @param {Object} cny |
|
|
*/ |
|
|
owner.formatCny = function(cny) { |
|
|
if(cny == 0) { |
|
|
return cny; |
|
|
} |
|
|
cny += ""; |
|
|
var index = cny.indexOf('.'); |
|
|
if(index != -1) { |
|
|
var point = cny.substring(index + 1); |
|
|
if(cny.length > 2) { |
|
|
cny = cny.substring(0, index + 3); |
|
|
} |
|
|
} else { |
|
|
cny += '.00'; |
|
|
} |
|
|
return cny; |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储用户数据到本地 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setUserLocalStorage = function(values) { |
|
|
values = values || {}; |
|
|
localStorage.setItem("userInfo", JSON.stringify(values)); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取本地存储的用户数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getUserLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("userInfo") || "{}"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 根据key值删除存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeUserLocalStorage = function(key) { |
|
|
localStorage.removeItem("userInfo"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储Token |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setTokenStorage = function(values) { |
|
|
values = values || ''; |
|
|
localStorage.setItem("user_token", values); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取Token |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getTokenStorage = function() { |
|
|
return localStorage.getItem("user_token"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 删除Token |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeTokenStorage = function(key) { |
|
|
localStorage.removeItem("user_token"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储托管用户资金密码是否设置的标识 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setIsWalletPassLocalStorage = function(values) { |
|
|
values = values || false; |
|
|
localStorage.setItem("isWalletPass", values); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取托管用户资金密码是否设置的标识 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getIsWalletPassLocalStorage = function() { |
|
|
var isStatus = (localStorage.getItem("isWalletPass") == null || localStorage.getItem("isWalletPass") == 'false'); |
|
|
return isStatus ? false : true; |
|
|
} |
|
|
/** |
|
|
* 根据key值删除托用户资金密码是否设置的标识 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeIsWalletPassLocalStorage = function() { |
|
|
localStorage.removeItem("isWalletPass"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储托管用户数据到本地 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setCoinWalletInfoLocalStorage = function(values) { |
|
|
values = values || []; |
|
|
localStorage.setItem("ethWalletInfo", JSON.stringify(values)); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取本地存储的托管用户数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getCoinWalletInfoLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("ethWalletInfo") || "[]"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
/** |
|
|
* 根据key值删除托管用户存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeCoinWalletInfoLocalStorage = function() { |
|
|
localStorage.removeItem("ethWalletInfo"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储托管用户数据到本地 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setEthWalletTokenListLocalStorage = function(values) { |
|
|
values = values || []; |
|
|
localStorage.setItem("ethWalletTokenList", JSON.stringify(values)); |
|
|
} |
|
|
/** |
|
|
* 获取本地存储的托管用户数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getEthWalletTokenListLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("ethWalletTokenList") || "[]"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
/** |
|
|
* 根据key值删除托管用户存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeEthWalletTokenListLocalStorage = function() { |
|
|
localStorage.removeItem("ethWalletTokenList"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储用户数据到本地 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setC2cUserLocalStorage = function(values) { |
|
|
values = values || {}; |
|
|
localStorage.setItem("c2cUserInfo", JSON.stringify(values)); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取本地存储的用户数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getC2cUserLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("c2cUserInfo") || "{}"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 根据key值删除存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeC2cUserLocalStorage = function(key) { |
|
|
localStorage.removeItem("c2cUserInfo"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储托管用户数据到本地 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setC2CCoinWalletInfoLocalStorage = function(values) { |
|
|
values = values || []; |
|
|
localStorage.setItem("ethC2CWalletInfo", JSON.stringify(values)); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取本地存储的托管用户数据 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getC2CCoinWalletInfoLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("ethC2CWalletInfo") || "[]"; |
|
|
return JSON.parse(settingsText); |
|
|
} |
|
|
/** |
|
|
* 根据key值删除托管用户存储数据 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeC2CCoinWalletInfoLocalStorage = function() { |
|
|
localStorage.removeItem("ethC2CWalletInfo"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储国际化标识 |
|
|
* @param {Object} values : 用户数据 |
|
|
*/ |
|
|
owner.setLanguageLocalStorage = function(values) { |
|
|
values = values || "zh_CN"; |
|
|
localStorage.setItem("language", values); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 获取国际化标识 |
|
|
* @param {String} key : 数据标识 |
|
|
*/ |
|
|
owner.getLanguageLocalStorage = function() { |
|
|
var settingsText = localStorage.getItem("language") || "zh_CN"; |
|
|
return settingsText; |
|
|
} |
|
|
|
|
|
/** |
|
|
* 删除国际化标识缓存 |
|
|
* @param {Object} key |
|
|
*/ |
|
|
owner.removeLanguageLocalStorage = function(key) { |
|
|
localStorage.removeItem("language"); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储app汇率 |
|
|
* @param {Object} values : app最新版本 |
|
|
*/ |
|
|
owner.setExchangeRateLocalStorage = function(values) { |
|
|
values = values || "CNY"; |
|
|
localStorage.setItem("$exchangeRate", values); |
|
|
} |
|
|
|
|
|
/** |
|
|
* app汇率 |
|
|
*/ |
|
|
owner.getExchangeRateLocalStorage = function() { |
|
|
return localStorage.getItem("$exchangeRate") || "USD"; |
|
|
} |
|
|
|
|
|
/** |
|
|
* 存储app最新版本 |
|
|
* @param {Object} values : app最新版本 |
|
|
*/ |
|
|
owner.setVersionLocalStorage = function(values) { |
|
|
values = values || ""; |
|
|
localStorage.setItem("$version", values); |
|
|
} |
|
|
|
|
|
/** |
|
|
* app最新版本 |
|
|
*/ |
|
|
owner.getVersionLocalStorage = function() { |
|
|
return localStorage.getItem("$version") || ""; |
|
|
} |
|
|
|
|
|
/** |
|
|
* mui.toast重写 |
|
|
*/ |
|
|
owner.toast = function(msg) { |
|
|
plus.nativeUI.toast(msg, { |
|
|
verticalAlign: 'center' |
|
|
}); |
|
|
} |
|
|
|
|
|
/** |
|
|
* 格式化数据值 |
|
|
* @param {Object} value |
|
|
*/ |
|
|
owner.formatValue = function(value) { |
|
|
if(value == 0) return '0.000000'; |
|
|
var val = parseFloat(value); |
|
|
if(val < 0) { |
|
|
val = -val; |
|
|
} |
|
|
if(val < 0.0001) { |
|
|
val = compute.Mul(val, 1e8, 8); |
|
|
val = compute.Div(val, 1e8, 8); |
|
|
val = val.toFixed(8); |
|
|
} else if(val < 0.1) { |
|
|
val = compute.Mul(val, 1e6, 6); |
|
|
val = compute.Div(val, 1e6, 6); |
|
|
val = val.toFixed(6); |
|
|
} else if(val < 10) { |
|
|
val = compute.Mul(val, 1e4, 4); |
|
|
val = compute.Div(val, 1e4, 4); |
|
|
val = val.toFixed(4); |
|
|
} else { |
|
|
val = compute.Mul(val, 1e2, 2); |
|
|
val = compute.Div(val, 1e2, 2); |
|
|
val = val.toFixed(2); |
|
|
} |
|
|
return val; |
|
|
} |
|
|
|
|
|
/*** |
|
|
* 格式化数据值 - 通过字符串截取方式 |
|
|
* @param value 值 |
|
|
* @param decimal 小数最大长度 |
|
|
*/ |
|
|
owner.formatValueStr = function (value, decimal) { |
|
|
//默认长度为8 |
|
|
if (decimal == null || decimal == '') { |
|
|
decimal = 8; |
|
|
} |
|
|
//防止NaN |
|
|
if (isNaN(value)) { |
|
|
return Number(0); |
|
|
} |
|
|
value = value.toString(); |
|
|
//小数点索引 |
|
|
var valueIndex = value.indexOf('.'); |
|
|
//存在小数的情况 |
|
|
if (valueIndex != -1) { |
|
|
//小数位数据 |
|
|
var valueFloat = value.substring(valueIndex + 1); |
|
|
|
|
|
//判断格式化数据大小,保留小数 |
|
|
value = parseFloat(value); |
|
|
if (value < 0.0001) { |
|
|
decimal = 8; |
|
|
} else if (value < 0.1) { |
|
|
decimal = 6; |
|
|
} else if (value < 10) { |
|
|
decimal = 4; |
|
|
} else { |
|
|
decimal = 2; |
|
|
} |
|
|
|
|
|
//小数位长度大于格式化长度 |
|
|
if (valueFloat.length > decimal) { |
|
|
//需要保留的小数位 + 1 |
|
|
var floatNum = parseFloat(value).toFixed(Number(decimal) + 1); |
|
|
//截取数据,保留小数并不用四舍五入 |
|
|
value = floatNum.substring(0, floatNum.length - 1); |
|
|
} |
|
|
} |
|
|
return parseFloat(value); |
|
|
} |
|
|
|
|
|
/*** |
|
|
* 简单的小函数,只做了+ 、- 、* 、/四则运算,第一、二个参数为参与运算的两个数,第三个参数为运算符(+ - * /) |
|
|
* 思路是运算前用字符串处理拿掉 '.' ,运算结束后还原倍数。 |
|
|
* https://www.cnblogs.com/superjsman/p/10049528.html |
|
|
* @param {Object} one |
|
|
* @param {Object} two |
|
|
* @param {Object} str |
|
|
*/ |
|
|
owner.floatPoint = function(one, two, str) { |
|
|
//转化为字符串 |
|
|
one = '' + one |
|
|
two = '' + two |
|
|
//切割成整数部分和小数部分 |
|
|
var oneStr = one.split('.') |
|
|
var twoStr = two.split('.') |
|
|
|
|
|
// 处理参数一或二为整数的情况 |
|
|
if(!oneStr[1]) { |
|
|
oneStr[1] = '' |
|
|
} |
|
|
if(!twoStr[1]) { |
|
|
twoStr[1] = '' |
|
|
} |
|
|
|
|
|
var length = null |
|
|
//比较小数部分的长度,以确定剥离小数点后放大的倍数 |
|
|
var oneFloatLength = oneStr[1].length |
|
|
var TwoFloatLength = twoStr[1].length |
|
|
if(oneFloatLength > TwoFloatLength) { |
|
|
length = oneFloatLength |
|
|
twoStr[1] = twoStr[1].padEnd(length, '0') |
|
|
} else if(TwoFloatLength > oneFloatLength) { |
|
|
length = TwoFloatLength |
|
|
twoStr[1] = oneStr[1].padEnd(length, '0') |
|
|
} else { |
|
|
length = TwoFloatLength |
|
|
} |
|
|
// 拼接成处理后的数字 |
|
|
var oneBig = oneStr[0] + oneStr[1] |
|
|
var twoBig = twoStr[0] + twoStr[1] |
|
|
|
|
|
//根据运算符决定运算后缩小的倍数 |
|
|
var result = null |
|
|
switch(str) { |
|
|
case '+': |
|
|
; |
|
|
case '-': |
|
|
result = eval(oneBig + str + twoBig) / (10 * length) |
|
|
break; |
|
|
case '*': |
|
|
result = eval(oneBig + str + twoBig) / (10 * (length * 2)) |
|
|
break; |
|
|
case '/': |
|
|
result = eval(oneBig + str + twoBig) |
|
|
} |
|
|
return result |
|
|
} |
|
|
|
|
|
/*** |
|
|
* 数组排序 |
|
|
* @param data 数据源 |
|
|
* @param sort 排序规则 ASC升序 | DESC倒序 |
|
|
* @param field 排序字段 |
|
|
* @returns {sortData} 排序后的数据 |
|
|
*/ |
|
|
owner.sortArray = function(data, sort, field) { |
|
|
//数据源是否为空 |
|
|
if(data == null) { |
|
|
throw new Error('数据源为空!'); |
|
|
} |
|
|
//排序字段是否为空 |
|
|
if(field == null || field == '') { |
|
|
throw new Error('排序字段为空!'); |
|
|
} |
|
|
//默认排序为升序 |
|
|
if(sort == null || sort == '') { |
|
|
sort = 'ASC' |
|
|
} |
|
|
//排序逻辑函数 |
|
|
var sortFun = null; |
|
|
//升序排序逻辑函数 |
|
|
if(sort == 'ASC' || sort == 'asc') { |
|
|
sortFun = function(a, b) { |
|
|
return a[field] - b[field]; |
|
|
} |
|
|
} |
|
|
//倒序排序逻辑函数 |
|
|
if(sort == 'DESC' || sort == 'desc') { |
|
|
sortFun = function(a, b) { |
|
|
return b[field] - a[field]; |
|
|
} |
|
|
} |
|
|
//如果逻辑函数为空 |
|
|
if(sortFun == null) { |
|
|
throw new Error('排序参数异常!'); |
|
|
} |
|
|
//返回排序数据 |
|
|
return data.sort(sortFun); |
|
|
} |
|
|
|
|
|
}(window.app = {})); |
|
|
|
|
|
window.addEventListener("resize", function() { |
|
|
if(document.activeElement.tagName == "INPUT" || document.activeElement.tagName == "TEXTAREA") { |
|
|
document.activeElement.scrollIntoViewIfNeeded(); |
|
|
} |
|
|
}); |
|
|
|
|
|
/** |
|
|
* @method js控制input框只能输入数字和一位小数点和小数点后面n位小数 |
|
|
* |
|
|
* @param {Object} obj 文本框对象 |
|
|
* @param {Object} _decimals 小数点位数 |
|
|
*/ |
|
|
function formatNumber(obj, _decimals) { |
|
|
obj.value = obj.value.replace(/[^\d\.]/g, ""); //清除“数字”和“.”以外的字符 |
|
|
if(/\d+\.\d*\./.test(obj.value)) { |
|
|
var secondPonitIndex = obj.value.indexOf(".", obj.value.indexOf(".") + 1); |
|
|
obj.value = obj.value.substring(0, secondPonitIndex); //只保留第一个. 清除多余的 |
|
|
} |
|
|
//obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的 |
|
|
var reg = new RegExp("^(\\d+)\\.(\\d{" + _decimals + "}).*$"); |
|
|
obj.value = obj.value.replace(reg, '$1.$2'); //只能输入n个小数 |
|
|
if(obj.value.indexOf(".") < 0 && obj.value != "") { //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额 |
|
|
obj.value = parseFloat(obj.value); |
|
|
} |
|
|
if(obj.value.indexOf(".") == 0) { //如果输入类似.123 变为0.123 |
|
|
obj.value = "0" + obj.value; |
|
|
} |
|
|
} |
|
|
|
|
|
/** |
|
|
* splitValue 获取当前时间 |
|
|
* @param value |
|
|
* @returns {array} |
|
|
*/ |
|
|
function formatDate(date, fmt) { |
|
|
if (/(y+)/.test(fmt)) { |
|
|
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); |
|
|
} |
|
|
|
|
|
var o = { |
|
|
'M+': date.getMonth() + 1, |
|
|
'd+': date.getDate(), |
|
|
'h+': date.getHours(), |
|
|
'm+': date.getMinutes(), |
|
|
's+': date.getSeconds() |
|
|
}; |
|
|
|
|
|
for (var k in o) { |
|
|
if (new RegExp("(".concat(k, ")")).test(fmt)) { |
|
|
var str = o[k] + ''; |
|
|
fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length)); |
|
|
} |
|
|
} |
|
|
|
|
|
return fmt; |
|
|
} |
|
|
|
|
|
var compute = { |
|
|
/* |
|
|
函数,加法函数,用来得到精确的加法结果 |
|
|
说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 |
|
|
参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) |
|
|
调用:Calc.Add(arg1,arg2,d) |
|
|
返回值:两数相加的结果 |
|
|
*/ |
|
|
Add: function(arg1, arg2, d) { |
|
|
arg1 = arg1.toString(), arg2 = arg2.toString(); |
|
|
var arg1Arr = arg1.split("."), |
|
|
arg2Arr = arg2.split("."), |
|
|
d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", |
|
|
d2 = arg2Arr.length == 2 ? arg2Arr[1] : ""; |
|
|
var maxLen = Math.max(d1.length, d2.length); |
|
|
var m = Math.pow(10, maxLen); |
|
|
var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen)); |
|
|
var d = arguments[2]; |
|
|
return typeof d === "number" ? Number((result).toFixed(d)) : result; |
|
|
}, |
|
|
/* |
|
|
函数:减法函数,用来得到精确的减法结果 |
|
|
说明:函数返回较为精确的减法结果。 |
|
|
参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数 |
|
|
调用:Calc.Sub(arg1,arg2) |
|
|
返回值:两数相减的结果 |
|
|
*/ |
|
|
Sub: function(arg1, arg2, d) { |
|
|
return this.Add(arg1, -Number(arg2), arguments[2]); |
|
|
}, |
|
|
/* |
|
|
函数:乘法函数,用来得到精确的乘法结果 |
|
|
说明:函数返回较为精确的乘法结果。 |
|
|
参数:arg1:第一个乘数;arg2第二个乘数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) |
|
|
调用:Calc.Mul(arg1,arg2) |
|
|
返回值:两数相乘的结果 |
|
|
*/ |
|
|
Mul: function(arg1, arg2, d) { |
|
|
var r1 = arg1.toString(), |
|
|
r2 = arg2.toString(), |
|
|
m, resultVal, d = arguments[2]; |
|
|
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0); |
|
|
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m); |
|
|
if(typeof d !== "number") { |
|
|
return Number(resultVal) |
|
|
} else { |
|
|
var beiTen = Math.pow(10, parseInt(d)); |
|
|
resultVal = (parseInt(resultVal * beiTen) / beiTen).toFixed(parseInt(d)); |
|
|
return Number(resultVal); |
|
|
} |
|
|
}, |
|
|
/* |
|
|
函数:除法函数,用来得到精确的除法结果 |
|
|
说明:函数返回较为精确的除法结果。 |
|
|
参数:arg1:除数;arg2被除数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数) |
|
|
调用:Calc.Div(arg1,arg2) |
|
|
返回值:arg1除于arg2的结果 |
|
|
*/ |
|
|
Div: function(arg1, arg2, d) { |
|
|
var r1 = arg1.toString(), |
|
|
r2 = arg2.toString(), |
|
|
m, resultVal, d = arguments[2]; |
|
|
m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0); |
|
|
resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m); |
|
|
if(typeof d !== "number") { |
|
|
return Number(resultVal) |
|
|
} else { |
|
|
var beiTen = Math.pow(10, parseInt(d)); |
|
|
resultVal = (parseInt(resultVal * beiTen) / beiTen).toFixed(parseInt(d)); |
|
|
return Number(resultVal); |
|
|
} |
|
|
} |
|
|
}; |