获取设备ID
var deviceId = api.deviceId(api里有封装好的这个方法 )
获取时间戳
var=timestamp = (new Date()).getTime()/1000;
consoledebug.log('时间戳————————————————————————>>>>'+JSON.stringify(timestamp))
定时器设置与方法
//定义一个定时器
定时器的总时间是30S
var maxTime = 30; // seconds
apiready = function () {
setTimeDevice()
//todo 监听页面消失的时候,关掉页面就可以了
api.addEventListener({
name:'viewdisappear'
},function(){
api.closeWin();
});
}
触发与更改定时器的条件
function setTimeDevice() {
$('#phone_num').focus(function (e) { 获取焦点刷新定时器
maxTime = 30
// clearInterval(intervalId); 清除定时器
});
$('#password').focus(function (e) {
maxTime = 30
// clearInterval(intervalId);
});
var intervalId = setInterval(function () {
maxTime--;
consoledebug.log(maxTime)
if (maxTime == 0) {
clearTimeout(intervalId);
ShowInvalidLoginMessage();
// clearInterval(intervalId);
return
}
}, 1000)
//当maxtime==0的时候 计时器停止走ShowInvalidLoginMessage() 关闭这个页面
function ShowInvalidLoginMessage() {
closeToWin('root')
}
}
另一种简单的定时器(简单好用) 关闭定时可以给想要关闭的定时器起别名然后在 定义一个clearTimeout(‘别名’)方法
定义全局变量
var waitingtime= 180//付款时间
// 等待支付时间取消订单方法
function waitingForBuy() {
//计时器等于0的时候调用取消订单接口
if (waitingtime === 0) {
var param={
device_id:device_id,
order_id:order_id,
timestamp:timestamp,
sign:hex_md5(detive_token+timestamp)
}
order_close(param,function (ret,err) {
consoledebug.log('order_close--------------------->>>返回的是'+JSON.stringify(ret))
if (ret.code=='202'){
closeToWin('root')
}
})
//倒计时计时器
} else {
consoledebug.log("-----------"+waitingtime)
$('#waiting_btn').text('请在'+waitingtime+"S内完成支付").addClass('disable')
waitingtime--
//给付款等待的计时器起一个别名
fuKuan=setTimeout(function () {
waitingForBuy()
}, 1000)
}
}
//关闭支付成功模版
function closemengban() {
if (colsetime===0){
openWin('makeing_win','../../make/',{},2,false)
//跳页之后取消付款等待的计时器
clearTimeout(fuKuan);
}else{
colsetime--
setTimeout(function () {
closemengban()
}, 1000)
}
}
双模版处理方法
//如果接口访问成功
if (ret.result) {
var msgObj = ret.ret.data
// 如果数组里有数据
if (msgObj.length > 0) {
// 走耗材预警状态 0或者1
if (progress_type == 0 || progress_type == 1) {
for (var i = 0; i < msgObj.length; i++) {
// 如果状态为0的时候 文字是应答
if (msgObj[i].progress == 0) {
msgObj[i].type_str = '应答'
// 如果状态为0的时候 文字是完成填料
} else if (msgObj[i].progress == 1) {
msgObj[i].type_str = '完成填料'
}
}
// 渲染状态0/1的模版
var interText = doT.template($("#message-content-template").text())
$("#message-content").append(interText(msgObj));
} else {
// 走除了 状态0 /1的模版
var interText = doT.template($("#message-content-template-done").text())
$("#message-content-done").append(interText(msgObj));
}
page++
loading_flag = false
} else {
//如果 没有数据状态显示
if (progress_type == 0 || progress_type == 1) {
if (page == 1 && msgObj.length == '0') {
$("#message-content").html(getNodataTipHtml('../..', "暂无耗材信息"));
return;
}
} else {
if (page == 1 && msgObj.length == '0') {
$("#message-content-done").html(getNodataTipHtml('../..', "暂无耗材信息"));
return;
}
}
}
} else {
}
}
}
获取焦点消失,失去焦点显示 直接加在div里
placeholder="提示文字"
onfocus="this.placeholder=''" // 获取焦点
onblur="this.placeholder=''提示文字" //失去焦点
输入框与背景字样式
这样写是光标与背景字之间没有间距页面也不会晃动
input::-webkit-input-placeholder{
font-size: 14px;
color:#AAAAAA ;
margin-left: 0;
padding-left: 0;
}
input{
width: auto !important;
height: 16px;
font-size: 14px;
position:relative;
left:20px
}
判断是否为空
if (judgeIsAnyNullStr(phone_num)){
showToast('请输入手机号')
return
}
封装好的judgeIsAnyNullStr方法
function judgeIsAnyNullStr(argument) {
consoledebug.log('judgeIsAnyNullStr argument is : ' + argument)
if (argument == null || argument == 'null' || argument == "" || argument == undefined || argument == "未设置" || argument == "undefined") {
return true
}
return false
}
验证码从新发送
封装好的 waitingForVerify()方法
var globalTimeForVerify = 60
/**
* @name 一分钟后获取验证码
*
* @author leek
*/
function waitingForVerify() {
if (globalTimeForVerify === 0) {
// var get_code=language_update($api.getStorage('language'),'get_code')
$('#verify_btn').text('重新发送').removeClass('disable')
$('#demo').addClass('aui-hide')
// bindClickVerify()
globalTimeForVerify = 60
} else {
$('#verify_btn').text(globalTimeForVerify + ' 已发送 ').addClass('disable')
$('#demo').removeClass('aui-hide')
globalTimeForVerify--
setTimeout(function () {
waitingForVerify()
}, 1000)
}
}
判断电话号格式是否正确
if (regular('phone_num', phone_num) !== true) {
showToast('请填写正确的手机号码')
return
}
regular 方法
/**
* @name 正则验证
*
* @author leek
*
* @param type 验证类型
* @param value 待验证值
* @returns {boolean}
*/
function regular(type, value) {
switch (type) {
// 手机号码
case 'phone_num':
var reg = new RegExp("^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$")
return reg.test(value) ? true : '请填写正确的手机号码格式'
break
// 身份证号码
case 'id_card':
var reg = new RegExp("^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$")
return reg.test(value) ? true : '请填写正确的身份证号码格式'
break
// 日期
case 'date':
var reg = new RegExp("^\\d{4}-\\d{1,2}-\\d{1,2}$")
return reg.test(value) ? true : '请填写正确的日期格式'
break
// 时间
case 'time':
var reg = new RegExp("^(20|21|22|23|[0-1]\\d):[0-5]d:[0-5]\\d$")
return reg.test(value) ? true : '请填写正确的时间格式'
break
// 日期时间
case 'date_time':
var reg = new RegExp("^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])s+(20|21|22|23|[0-1]\\d):[0-5]d:[0-5]\\d$")
return reg.test(value) ? true : '请填写正确的日期及时间格式'
break
// 验证码
case 'verify_code':
var reg = new RegExp("^\\d{4}$")
return reg.test(value) ? true : '请填写正确的验证码格式'
break
// 邮政编码
case 'post_code':
var reg = new RegExp("^[1-9][0-9]{5}$")
return reg.test(value) ? true : '请填写正确的验证码格式'
break
// 弱密码
case 'weak_password':
var reg = new RegExp("^\\w{6,16}$")
return reg.test(value) ? true : '密码长度在6~15之间,只能包含字母、数字和下划线'
break
// 强密码
case 'strong_password':
var reg = new RegExp("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$")
return reg.test(value) ? true : '密码必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间'
break
// 电子邮箱
case 'e-mail':
var reg = new RegExp("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$")
return reg.test(value) ? true : '请填写正确的Email地址格式'
break
// 姓名
case 'rel_name':
var reg = new RegExp("^[\u4E00-\u9FA5\\uf900-\\ufa2d·s]{2,20}$")
return reg.test(value) ? true : '请填写正确的中文姓名格式'
break
// 车牌号
case 'car_num':
var reg = new RegExp("([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})")
return reg.test(value) ? true : '请填写正确的车牌号格式'
break
default:
return true
}
}
字符串生成二维码(需要调用模块)
// 生成二维码
function canner() {
var FNScanner = api.require('FNScanner');
FNScanner.encodeImg({
content: pay_qr_code, 生成图片的字符串
saveToAlbum: false,
saveImg: {
path: 'fs://album.png', 生成图片名称(如果同时生成两个图片方法里这个不能重名)
w: 200, 图片宽
h: 200 图片高
}
}, function(ret, err) {
if (ret.status) {
$api.attr($api.byId('WXcode'),'src',ret.imgPath); WXcode就是图片
} else {
showToast('支付码加载失败')
}
});
}
<div style="margin-left:100px;margin-right:100px;margin-top: 20px">
<img id="WXcode" style="width: 400px;height: 300px"> 给IMG标签加id id名就是图片
</div>
样式 线1px
style=" border-bottom: 1px solid #F0F0F0"
模版判断
{{? it[i].run_status_str=="故障"}}
<div class="aui-font-size-14 aui-pull-right" style="color:#FF9600">{{=it[i].run_status_str}}</div>
{{?? it[i].run_status_str=="正常"}}
<div class="aui-font-size-14 aui-pull-right" style="color:#8B72FE">{{=it[i].run_status_str}}</div>
{{?? it[i].run_status_str=="停用"}}
<div class="aui-font-size-14 aui-pull-right" style="color:#FF0000">{{=it[i].run_status_str}}</div>
{{?}}
{{?it[i].is_complete_polling==false}}
<div class=" aui-col-xs-4 aui-margin-t-10 aui-font-size-14" align="right"
style="line-height: 4.1rem ;color: #8B72FE">未检
</div>
{{??}}
<div class=" aui-col-xs-4 aui-margin-t-10 aui-font-size-14" align="right"
style="line-height: 4.1rem ;color:#999999">已检
</div>
{{?}}
时间判断
if (ret.result) {
var msgObj = ret.ret
consoledebug.log("msgObj is :" + JSON.stringify(msgObj))
var date = new Date()
var hour = date.getHours()
var minute=date.getMinutes()
var second = date.getSeconds()
var sec = hour+':'+minute+':'+second
consoledebug.log('当前秒:'+hourAndMinutesToSecond(sec))
consoledebug.log('开始时间秒:'+hourAndMinutesToSecond(msgObj.am_begin_time))
consoledebug.log('结束时间的秒:'+hourAndMinutesToSecond(msgObj.am_end_time))
if (hourAndMinutesToSecond(msgObj.am_begin_time)<hourAndMinutesToSecond(sec)&&hourAndMinutesToSecond(sec)<hourAndMinutesToSecond(msgObj.am_end_time)){
msgObj.done_status_str1 = '进行中'
}else {
msgObj.done_status_str1 = '未开始'
}
if (hourAndMinutesToSecond(msgObj.pm_begin_time)<hourAndMinutesToSecond(sec)&&hourAndMinutesToSecond(sec)<hourAndMinutesToSecond(msgObj.pm_end_time)){
msgObj.done_status_str2 = '进行中'
}else {
msgObj.done_status_str2 = '未开始'
}
consoledebug.log('上午巡检的状态是------->>'+JSON.stringify(msgObj.done_status_str1))
consoledebug.log('下午巡检的状态是------->>'+JSON.stringify(msgObj.done_status_str2))
var interText = doT.template($("#message-content-template").text())
$("#message-content").html(interText(msgObj));
} else {
}
});
}
// 判断下午时间段是否到巡检时间
function pmtime(type) {
if (type=='进行中'){
openWin('equipment_inspection2_win','./equipment_inspection2/',{polling_time_type:'pm'},2,false)
}else{
showToast('还未到巡检时间')
return
}
}
// 判断上午时间段是否到巡检时间
function amtime(type) {
if (type=='进行中'){
openWin('equipment_inspection2_win','./equipment_inspection2/',{polling_time_type:'am'},2,false)
}else{
showToast('还未到巡检时间')
return
}
}
//获取当前秒
function hourAndMinutesToSecond(time) {
var hour = time.split(':')[0];
var min = time.split(':')[1];
var sec = time.split(':')[2];
var second = Number(hour*3600) + Number(min*60) + Number(sec);
return parseInt(second);
}
102错误解决方法在 api-manager.js 里解决 具体代码如下
api.ajax({
url: url,
method: method,
headers: {
"Content-type": "application/json;charset=UTF-8"
},
data: {
body: param
}
}, function (ret, err) {
consoledebug.log('Ajax ret is : ' + JSON.stringify(ret))
clearWaitingForProgress();
if (ret.code==102||ret.code==101){
// sendEvent('login_event','false_token')
var jsfun = 'showAlert();';
api.execScript({
name: 'login',
script: jsfun
});
openWinNotSlidBack('login_win', './html/login/', {}, 2)
clearStorage()
}
if (ret.result || ret.code == '200') {
callBack(ret, err)
} else {
consoledebug.log('Ajax err is : ' + JSON.stringify(err))
callBack(ret, err)
// toast("网络请求超时,请稍后重试")
return;
}
})
}