You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
10 KiB

7 months ago
import $reQuest from '@/common/http/' //请求函数
import $constant from '@/utils/constant' //常量
/* 计算星期几*/
function format(format, date) {
var Week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
var o = {
"M+": date.getMonth() + 1,
//month
"d+": date.getDate(),
//day
"h+": date.getHours(),
//hour
"m+": date.getMinutes(),
//minute
"s+": date.getSeconds(),
//second
"q+": Math.floor((date.getMonth() + 3) / 3),
//week
'w': Week[date.getDay()],
//quarter
"S": date.getMilliseconds() //millisecond
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
}
/* 计算两日期相差的日期年月日等 */
function dateDiff(interval, objDate2, date) {
var d = date,
i = {},
t = d.getTime(),
t2 = objDate2.getTime();
i['y'] = objDate2.getFullYear() - d.getFullYear();
i['q'] = i['y'] * 4 + Math.floor(objDate2.getMonth() / 4) - Math.floor(d.getMonth() / 4);
i['m'] = i['y'] * 12 + objDate2.getMonth() - d.getMonth();
i['ms'] = objDate2.getTime() - d.getTime();
i['w'] = Math.floor((t2 + 345600000) / (604800000)) - Math.floor((t + 345600000) / (604800000));
i['d'] = Math.floor(t2 / 86400000) - Math.floor(t / 86400000);
i['h'] = Math.floor(t2 / 3600000) - Math.floor(t / 3600000);
i['n'] = Math.floor(t2 / 60000) - Math.floor(t / 60000);
i['s'] = Math.floor(t2 / 1000) - Math.floor(t / 1000);
return i[interval];
}
/* 得到日期年月日等加数字后的日期 */
function dateAdd(interval, number, date) {
number = parseInt(number);
var dtTmp = date;
switch (interval) {
case 's':
return new Date(Date.parse(dtTmp) + (1000 * number));
case 'n':
return new Date(Date.parse(dtTmp) + (60000 * number));
case 'h':
return new Date(Date.parse(dtTmp) + (3600000 * number));
case 'd':
return new Date(Date.parse(dtTmp) + (86400000 * number));
case 'w':
return new Date(Date.parse(dtTmp) + ((86400000 * 7) * number));
case 'q':
return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + number * 3, dtTmp.getDate(), dtTmp.getHours(),
dtTmp.getMinutes(),
dtTmp.getSeconds());
case 'm':
return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(),
dtTmp.getSeconds());
case 'y':
return new Date((dtTmp.getFullYear() + number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(),
dtTmp.getSeconds());
}
}
//字符串转换成日期
function strToDate(str, formatStr) {
if (!str) {
return false;
}
var date = new Date(str.replace(/-/g, "/").replace(".0", ""));
if (formatStr) {
return format(formatStr, date);
}
return date;
}
/*特殊string时间格式化*/
function strDateFormat(str, formatStr) {
if (!str) return "";
var date = new Date(parseInt(str.substring(6, str.toString().length - 2)));
if (formatStr) {
return format(formatStr, date);
}
return date;
}
function showToast(text, time) {
let duration = 2500;
let title = "请填写提法语";
if (time) {
duration = time;
}
if (text) {
title = text;
}
uni.showToast({
title: title,
icon: 'none',
duration: duration,
mask: true
})
}
/** 手机号码验证*/
function isPhone(mobile) {
if (/^[0-9]{11}$/.test(mobile) || /^[0-9]{10}$/.test(mobile)) {
return true;
}
return false;
}
/** 退出登录*/
function loginOut() {
uni.clearStorageSync();
uni.switchTab({
url: "/pages/tab/index/index",
success() {
showToast("退登成功");
}
})
}
/** 保留两位数*/
function toFixedFun(num) {
if (!num) {
return "";
}
return num.toFixed(2);
}
function isJson(obj) {
let isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !
obj.length;
return isjson;
}
function contains(str, arr) {
for (var i = 0; i < arr; i++) {
if (str.indexOf(arr[i]) > -1) {
return true;
}
}
return false;
}
function isEmail(email) {
var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
if (reg.test(email)) {
return true;
} else {
return false;
}
}
function callPhone(num) {
if(!num){
return;
}
uni.makePhoneCall({
phoneNumber: num
});
}
function isLogin() {
let loginInfo = uni.getStorageSync($constant.LOGIN_INFO);
if (loginInfo && loginInfo.hasPhone) {
return true;
}
return false;
}
function getLoginInfo() {
let loginInfo = uni.getStorageSync($constant.LOGIN_INFO);
return loginInfo;
}
function setUserInfo(data, callback) {
let loginInfo = uni.getStorageSync($constant.LOGIN_INFO);
if (loginInfo && loginInfo.openid) {
callback && callback(loginInfo);
return;
}
if (data.detail.errMsg == "getUserInfo:ok") {
let userInfo = data.detail.userInfo;
uni.login({
success(res) {
if (res.code) {
var obj = {
js_code: res.code,
mod: "getLogin",
nickName: userInfo.nickName,
imgurl: userInfo.avatarUrl,
gender: userInfo.gender,
province: userInfo.province,
city: userInfo.city,
country: userInfo.country
}
$reQuest.doPost("Wx.aspx", obj).then(res => {
if (res.data.success) {
let body = res.data.data;
body.userinfo.hasPhone = body.hasphone == 1 ? true : false;
uni.setStorageSync($constant.LOGIN_INFO, body.userinfo);
callback && callback(body.userinfo);
} else {
showToast(res.data.message);
}
})
.catch(err => {
console.log('request fail', err);
});
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
}
function filterGroup(arrays, subGroupLength) {
let index = 0;
let newArrays = [];
while (index < arrays.length) {
newArrays.push(arrays.slice(index, index += subGroupLength));
}
return newArrays;
}
function isCardNo(num) {
num = num.toUpperCase();
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
return false;
}
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
//下面分别分析出生日期和校验位
var len, re;
len = num.length;
if (len == 15) {
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re);
//检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bCorrectDay;
bCorrectDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
(
dtmBirth.getDate() == Number(arrSplit[4]));
if (!bCorrectDay) {
return false;
} else {
//将15位身份证转成18位
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0,
i;
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
return true;
}
}
if (len == 18) {
re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
var arrSplit = num.match(re);
//检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bCorrectDay;
bCorrectDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
(dtmBirth.getDate() == Number(arrSplit[4]));
if (!bCorrectDay) {
return false;
} else {
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0,
i;
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1)) {
return false;
}
return true;
}
}
return false;
}
module.exports = {
showToast,
format,
dateDiff,
dateAdd,
strToDate,
strDateFormat,
isPhone,
loginOut,
toFixedFun,
isJson,
contains,
isEmail,
callPhone,
isLogin,
getLoginInfo,
setUserInfo,
filterGroup,
isCardNo
}