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 //返回周岁年龄 } }