Files
ebiz-h5/src/assets/js/business-common.js
2023-06-26 11:29:31 +08:00

646 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import utilsAge from '@/assets/js/utils/age'
import CacheUtils from '@/assets/js/utils/cacheUtils'
/**
* @desc 扩展对象继承
* @param {Object} out 一个或多个对象
* @return {Object} 对象
*/
Object.extend = function(out) {
out = out || {}
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i]) continue
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key)) out[key] = arguments[i][key]
}
}
return out
}
/**
* @desc 时间格式转化
* @param {String} format 转化格式
* @return {String} 已转化的时间
*/
Date.prototype.format = function(format) {
let args = {
'M+': this.getMonth() + 1,
'd+': this.getDate(),
'h+': this.getHours(),
'm+': this.getMinutes(),
's+': this.getSeconds(),
'q+': Math.floor((this.getMonth() + 3) / 3), // quarter
S: this.getMilliseconds()
}
if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
for (var i in args) {
var n = args[i]
if (new RegExp('(' + i + ')').test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? n : ('00' + n).substr(('' + n).length))
}
return format
}
export default {
/**
* @desc 判断对象是否为空
* @param {Object} o 对象
* @return {Boolean}
*/
isEmptyObject(o = {}) {
let flag = true
for (let k in o) {
if (k) {
flag = false
break
}
}
return flag
},
/**
* @description 去除前后空格
* @param {String} 值
* @return {String}
*/
trim(val) {
return val.replace(/(^\s*)|(\s*$)/g, '')
},
// 获取query特定参数
getQueryParameter() {
let activityFromApp = this.getQuery().activityFromApp
let appUserToken = this.getQuery().appUserToken
let env = this.getQuery().env
let query = {}
if (activityFromApp) {
query.activityFromApp = activityFromApp
}
if (appUserToken) {
query.appUserToken = decodeURIComponent(appUserToken.replace(/%20/g, '+'))
}
if (env) {
query.env = env
}
return query
},
/**
* 替换字符串具体位置字符
* @param {String} str 目标字符串
* @param {String} char 字符
* @param {Number} start 数组开始索引
* @param {Number} end 数组结束索引
* @return {[type]} [description]
*/
replaceChar(str = '', char = '*', start = 0, end) {
let list = []
if (str) {
list = str.split('')
let len = list.length
start = start > 0 ? (start <= len ? start : len) : 0
end = end ? (end > start ? end : start) : len
for (let i = 0; i < len; i++) {
if (i >= start && i < end) {
list[i] = char
}
}
}
return list.join('')
},
addSpace(value) {
if (value) {
return value.replace(/\s/g, '').replace(/(.{4})/g, '$1 ')
}
return value
},
// 字符省略
ellipsis(value = '', num = -1) {
if (value) {
let str = ''
if (num > 0 && value.length > num) {
str = '...'
}
return value.slice(0, num) + str
}
return value
},
/**
* @desc 获取 cookie
* @param {String}
* @return {*}
*/
getCookie(name1) {
let rs = ''
var name = name1 + '='
var ca = document.cookie.split(';')
for (var i = 0; i < ca.length; i++) {
var c = ca[i]
while (c.charAt(0) == ' ') {
c = c.substring(1)
}
if (c.indexOf(name) != -1) {
rs = this._string2json(c.substring(name.length, c.length))
}
}
return rs
},
/**
* @desc 设置 cookie
* @param {String} name 名称
* @param {*} value 值
* @param {Number} hours 时长
*/
setCookie(name, value, hours) {
let str = name + '=' + this._json2string(value)
if (hours && hours > 0) {
var date = new Date()
date.setTime(date.getTime() + hours * 3600 * 1000)
str += '; expires=' + date.toUTCString()
}
document.cookie = str
},
/**
* @desc 清除 cookie
* @param {String} 名称
*/
delCookie(name) {
var date = new Date()
date.setTime(date.getTime() - 10000)
document.cookie = name + '=a; expires=' + date.toGMTString()
},
/**
* @desc 获取 localStorage 中指定的变量
* @param {String} name 名称
* @return {*} rs
*/
getStorage(name) {
return this._string2json(CacheUtils.getLocItem(name))
},
/**
* @desc 设置或添加 localStorage 中指定的变量
* @param {String} name 名称
*/
setStorage(name, value) {
CacheUtils.setLocItem(name,this._json2string(value))
},
/**
* @desc 删除 localStorage 中指定的变量
* @param {String} name 名称
*/
delStorage(name) {
CacheUtils.removeLocItem(name)
},
/**
* @desc json转string
* @param {*} value 值
* @return {*} value 值
*/
_json2string(value) {
return JSON.stringify(value)
},
/**
* 获取设备类型
*/
device() {
let ua = navigator.userAgent
return {
isChrome: ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
// eslint-disable-next-line no-useless-escape
isAndroid: ua.match(/(Android);?[\s\/]+([\d.]+)?/),
isIphone: ua.indexOf('iPhone') != -1,
isWeixin: ua.match(/MicroMessenger/i),
mobile: !!ua.match(/AppleWebKit.*Mobile.*/)
}
},
/**
* 签名位置
*/
signParams() {
let ua = navigator.userAgent
let device = {
isChrome: ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
// eslint-disable-next-line no-useless-escape
isAndroid: ua.match(/(Android);?[\s\/]+([\d.]+)?/),
isIphone: ua.indexOf('iPhone') != -1,
isWeixin: ua.match(/MicroMessenger/i)
}
if(device.isIphone) {
return {
signatureWidth: 80,
signatureHeight: 40
}
}else if(device.isAndroid){
return {
signatureWidth: 160,
signatureHeight: 80
}
}else {
return {
signatureWidth: 80,
signatureHeight: 40
}
}
},
/**
* 设置title
*/
setTitle(title) {
let device = this.device()
if (device.isIphone && device.isWeixin) {
document.title = title
var i = document.createElement('iframe')
i.src = '/favicon.ico'
i.style.display = 'none'
i.onload = function() {
setTimeout(function() {
i.remove()
}, 9)
}
document.body.appendChild(i)
} else {
document.title = title
}
},
/**
* @desc string转json
* @param {*} value 值
* @return {*} value 值
*/
_string2json(value) {
try {
value = JSON.parse(value)
} catch (e) {
//console.log(e)
}
return value
},
/**
*@desc 只能输入单词字符
*@param { String } value
*/
character(value) {
if (value) {
value = value.replace(/[^A-Za-z0-9]/g, '')
}
return value
},
m2km(value) {
if (value < 1000) return value + 'm'
else if (value >= 1000 && value <= 20000) return (value / 1000).toFixed(1) + 'km'
else if (value >= 2000) return '>20km'
return value
},
/**
* 除法
* @param {Number} dividend 被除数
* @param {Number} divisor 除数
* @return {Number} 值
*/
divide(dividend, divisor = 100) {
if (dividend && divisor) {
dividend = Number(dividend)
return this.toFloatFixed(dividend / divisor)
}
return dividend
},
// 保留小数位替代Number.toFixed()方法针对于某些数据16.455)不能做到四舍五入
toFixed(value, num = 0) {
let pos = value.toString().indexOf('.')
let decimalPlaces = value.toString().length - pos - 1
let intValue = value * Math.pow(10, decimalPlaces)
let divisor1 = Math.pow(10, decimalPlaces - num)
let divisor2 = Math.pow(10, num)
return Math.round(intValue / divisor1) / divisor2
},
/**
* 获取App信息
*/
detectApp() {
var ua = navigator.userAgent
//RegExp.$1; RegExp.$2; RegExp.$3;
//var info = ua.match(/(CarmeApp)\s*[v]*(\d+\.\d+\.\d+)\s*\/\s*(IOS|Android)/i)
ua.match(/(CarmeApp)\s*[v]*(\d+\.\d+\.\d+)\s*\/\s*(IOS|Android)/i)
return {
appName: RegExp.$1,
appVersion: RegExp.$2,
appOS: RegExp.$3
}
},
/**
* 如果是小数则保留小数位,默认两位
* @param {[type]} value [description]
* @param {Number} num [description]
* @return {[type]} [description]
*/
toFloatFixed(value, num = 2) {
let values = Number(value)
if (values) {
if (/^\d+\.\d+/.test(values)) {
return this.toFixed(values, num)
} else {
return this.toFixed(values)
}
}
return value
},
// 获取周
getWeek(str) {
let rs = ''
switch (str + '') {
case '1':
rs = '一'
break
case '2':
rs = '二'
break
case '3':
rs = '三'
break
case '4':
rs = '四'
break
case '5':
rs = '五'
break
case '6':
rs = '六'
break
case '7':
case '0':
rs = '日'
break
default:
break
}
return rs
},
// 获取补全的时间
getTime(str) {
if (str < 10) {
return '0' + str
}
return str
},
// 数组去重
unrepeat(arr) {
if (arr instanceof Array) {
let hash = {}
let rsArr = []
let len = arr.length
// eslint-disable-next-line no-unused-vars
let type = ''
for (let i = 0; i < len; i++) {
if (typeof arr[i] == 'string') {
type = 'string'
}
if (!hash[arr[i]]) {
hash[arr[i]] = arr[i]
rsArr.push(arr[i])
}
}
return rsArr
}
},
// 一层对象数组去重
unrepeatObj(arr, key) {
if (arr instanceof Array) {
let hash = {}
let rsArr = []
let len = arr.length
let type = ''
for (let i = 0; i < len; i++) {
if (typeof arr[i] == 'string') {
type = 'string'
}
if (!hash[arr[i][key]]) {
hash[arr[i][key]] = arr[i]
rsArr.push(arr[i])
}
}
return rsArr
}
},
/**
@desc只能输入整数
@param
value 操作数值
max 最大值
**/
intOnly(value, max = Infinity, min = 0) {
if (value) {
let regular0 = /^0{1,}$/
if (regular0.test(value)) {
// 如果输入1个0以上去除掉
value = value.replace(/^0{1,}$/, '')
}
if (/[^0-9]*$/.test(value)) {
value = value.replace(/\D/g, '')
} else {
if (value > max) value = value.substr(0, value.length - 1)
if (value < min) value = min
}
}
return value
},
//解析url参数
getQuery() {
var query = []
// 当url是通过传参过来的话我们把第一个参数作为url并进行解析
if (arguments[0]) {
let lnk = document.createElement('a')
lnk.href = arguments[0]
query = this.extractQuery(lnk)
} else {
/*
var query = window.location.search.split('?');
if(query.length <= 1) query = window.location.hash.split('#');
query = query.length > 1 ? query[1].split('&') : []
*/
query = this.extractQuery(window.location)
}
var json = {}
for (var i = 0, len = query.length; i < len; i++) {
var key = query[i].split('=')[0],
index = query[i].indexOf('='),
value = query[i].substr(index + 1)
json[key] = value
}
return json
},
extractQuery(lnk) {
var query = lnk.search.split('?')
//url/#/repairBooking?activityFromApp=1
if (query.length <= 1) query = lnk.hash.split('?')
query = query.length > 1 ? query[1].split('&') : []
return query
},
formatDate(date, fmt) {
date = date == undefined ? new Date() : date
date = typeof date == 'number' ? new Date(date) : date
fmt = fmt || 'yyyy-MM-dd HH:mm:ss'
var obj = {
y: date.getFullYear(), // 年份注意必须用getFullYear
M: date.getMonth() + 1, // 月份注意是从0-11
d: date.getDate(), // 日期
q: Math.floor((date.getMonth() + 3) / 3), // 季度
w: date.getDay(), // 星期注意是0-6
H: date.getHours(), // 24小时制
h: date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, // 12小时制
m: date.getMinutes(), // 分钟
s: date.getSeconds(), // 秒
S: date.getMilliseconds() // 毫秒
}
var week = ['天', '一', '二', '三', '四', '五', '六']
for (var i in obj) {
fmt = fmt.replace(new RegExp(i + '+', 'g'), function(m) {
var val = obj[i] + ''
if (i == 'w') return (m.length > 2 ? '星期' : '周') + week[val]
for (var j = 0, len = val.length; j < m.length - len; j++) val = '0' + val
return m.length == 1 ? val : val.substring(val.length - m.length)
})
}
return fmt
},
//初始化localstorg信息
intLocalStorage(res, isProposal) {
let appntDTO = ''
let insuredDTO = ''
if (isProposal) {
appntDTO = res.appntDTO
insuredDTO = res.insuredDTOs && res.insuredDTOs[0]
} else {
appntDTO = res.orderDTO.appntDTO
insuredDTO = res.orderDTO.insuredDTOs[0]
}
let age = appntDTO.birthday?utilsAge.getAge(appntDTO.birthday, new Date()):appntDTO.age
CacheUtils.setLocItem('saleInsuredInfo',
JSON.stringify({
workcompany: appntDTO.workcompany,
birthday: appntDTO.birthday,
name: appntDTO.name,
sex: appntDTO.sex,
idType: appntDTO.idType,
age,
idNo: appntDTO.idNo,
appntId: appntDTO.appntId,
healthGrade: appntDTO.healthGrade,
lifeGrade: appntDTO.lifeGrade,
mobile: appntDTO.mobile,
occupationName: appntDTO.occupationName,
occupationCode: appntDTO.occupationCode,
// marriage: appntDTO.marriage,
medical: appntDTO.medical,
certificateValidate: appntDTO.certificateValidate,
certiexpiredate: appntDTO.certiexpiredate,
nativeplace: appntDTO.nativeplace,
isAsync: appntDTO.isAsync
})
)
if (insuredDTO) {
let insuredPersonAge = insuredDTO.birthday?utilsAge.getAge(insuredDTO.birthday, new Date()):insuredDTO.insuredAge
CacheUtils.setLocItem('saleInsuredPersonInfo',
JSON.stringify({
birthday: insuredDTO.birthday,
name: insuredDTO.name,
sex: insuredDTO.sex,
idType: insuredDTO.idType,
insuredAge: insuredPersonAge,
// marriage: insuredDTO.marriage,
relationToAppnt: insuredDTO.relationToAppnt,
medical: insuredDTO.medical,
occupationName: insuredDTO.occupationName,
occupationCode: insuredDTO.occupationCode,
insuredId: insuredDTO.insuredId,
idNo: insuredDTO.idNo,
healthGrade: insuredDTO.healthGrade,
lifeGrade: insuredDTO.lifeGrade,
mobile: insuredDTO.mobile
})
)
let [chooseProductCodes, mainRiskCodes, addRiskCodes] = [[], [], []]
if (insuredDTO.riskDTOLst && insuredDTO.riskDTOLst.length > 0) {
insuredDTO.riskDTOLst.forEach(item => {
chooseProductCodes.push(item.riskCode)
if (item.isMainRisk == 0) {
mainRiskCodes.push(item.riskCode)
} else {
addRiskCodes.push(item.riskCode)
}
})
}
CacheUtils.setLocItem('mainRiskCodes',JSON.stringify(mainRiskCodes))
CacheUtils.setLocItem('oldAddRiskCodes',JSON.stringify(addRiskCodes))
CacheUtils.setLocItem('chooseProductCodes',JSON.stringify(chooseProductCodes))
} else {
CacheUtils.setLocItem('mainRiskCodes','')
CacheUtils.setLocItem('oldAddRiskCodes','')
CacheUtils.setLocItem('chooseProductCodes','')
if (!isProposal) {
CacheUtils.setLocItem('saleInsuredPersonInfo','')
}
}
},
/*根据出生日期算出年龄*/
jsGetAge(strBirthday) {
var returnAge
var strBirthdayArr = strBirthday.split('-')
var birthYear = strBirthdayArr[0]
var birthMonth = strBirthdayArr[1]
var birthDay = strBirthdayArr[2]
let d = new Date()
var nowYear = d.getFullYear()
var nowMonth = d.getMonth() + 1
var nowDay = d.getDate()
if (nowYear == birthYear) {
returnAge = 0 //同年 则为0岁
} else {
var ageDiff = nowYear - birthYear //年之差
if (ageDiff > 0) {
if (nowMonth == birthMonth) {
var dayDiff = nowDay - birthDay //日之差
if (dayDiff < 0) {
returnAge = ageDiff - 1
} else {
returnAge = ageDiff
}
} else {
var monthDiff = nowMonth - birthMonth //月之差
if (monthDiff < 0) {
returnAge = ageDiff - 1
} else {
returnAge = ageDiff
}
}
} else {
returnAge = -1 //返回-1 表示出生日期输入错误 晚于今天
}
}
return returnAge //返回周岁年龄
}
}