123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- import { PAGE_CODE } from '~/common/c.js'
- // 把多次encodeURIComponent结果decode到最终不变
- export const parseEncodeURIComponent = (s = '') => {
- let decodeStr = decodeURIComponent(s)
- if (decodeStr === s) {
- return decodeStr
- } else {
- return parseEncodeURIComponent(decodeStr)
- }
- }
- export const getPageCode = href => {
- if (typeof window === 'undefined') {
- // console.log('此方法只支持在浏览器中执行')
- return PAGE_CODE.defaultCode
- }
- if (!href) {
- return PAGE_CODE.defaultCode
- }
- let pageCode = PAGE_CODE.defaultCode
- let domA = document.createElement('a')
- domA.href = href
- const path = domA.pathname
- domA = null
- // 首页路径 匹配范围 / /cn /cn/ /en /en/ //nuxt会报错 忽略
- // 文章路径 /articles /articles/ /cn/articles /cn/articles/ /en/articles /en/articles/
- if (
- /^(\/|\/cn|\/en)(\/?)$/.test(path) ||
- /^(\/cn|\/en)?\/articles(\/?)$/.test(path)
- ) {
- pageCode = PAGE_CODE.articleList
- } else if (/^(\/cn|\/en)?\/article\/\d+(\/?)$/.test(path)) {
- // 文章详情路径 /article/:id /article/:id/ /cn/article/:id /cn/article/:id/ /en/article/:id /en/article/:id/
- pageCode = PAGE_CODE.article
- } else if (/^(\/cn|\/en)?\/videos(\/?)$/.test(path)) {
- // 视频路径 /videos /videos/ /cn/videos /cn/videos/ /en/videos /en/videos/
- pageCode = PAGE_CODE.videoList
- }
- return pageCode
- }
- export const MyCookie = {
- transferCookieStrToObj: cookieStr => {
- if (!cookieStr) {
- // console.log('请传入cookies string')
- return {}
- }
- const pairs = cookieStr.split(';')
- const cookies = {}
- for (let i = 0; i < pairs.length; i++) {
- const pair = pairs[i].split('=')
- // cookies[pair[0].trim()] = unescape(pair[1].trim())
- cookies[pair[0].trim()] = pair[1].trim()
- }
- return cookies
- },
- setCookie: (key, value = '', exdays = 1, domainCtrl = false) => {
- if (typeof window === 'undefined') {
- // console.log('此方法只支持在浏览器中执行')
- return false
- }
- if (!key) {
- // console.log('请传入cookie name')
- return false
- }
- const d = new Date()
- d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000)
- if (domainCtrl) {
- const domain =
- window.location.host.indexOf('hoolihome.com') !== -1
- ? '.hoolihome.com'
- : ''
- document.cookie = `${key}=${value}; domain=${domain}; path=/; expires=${d.toGMTString()}`
- } else {
- document.cookie = `${key}=${value}; path=/; expires=${d.toGMTString()}`
- }
- },
- getCookie: key => {
- if (typeof window === 'undefined') {
- // console.log('此方法只支持在浏览器中执行')
- return false
- }
- if (!key) {
- // console.log('请传入cookie name')
- return false
- }
- const cookieStr = document.cookie
- if (cookieStr.length > 0) {
- let cStart = cookieStr.indexOf(key + '=')
- if (cStart !== -1) {
- cStart = cStart + key.length + 1
- let cEnd = cookieStr.indexOf(';', cStart)
- if (cEnd === -1) cEnd = cookieStr.length
- // return unescape(cookieStr.substring(cStart, cEnd))
- return cookieStr.substring(cStart, cEnd)
- }
- }
- return ''
- },
- deleteCookie: (key, domainCtrl = false) => {
- if (typeof window === 'undefined') {
- // console.log('此方法只支持在浏览器中执行')
- return false
- }
- if (!key) {
- // console.log('请传入cookie name')
- return false
- }
- if (domainCtrl) {
- const domain =
- window.location.host.indexOf('hoolihome.com') !== -1
- ? '.hoolihome.com'
- : ''
- document.cookie = `${key}=; domain=${domain}; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`
- } else {
- document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`
- }
- }
- }
- export const isObjectEmpty = obj => {
- if (!obj || typeof obj !== 'object') {
- return true
- }
- for (let key in obj) {
- return false
- }
- return true
- }
- export const loadSrc = (url, domId, type) => {
- if (typeof window === 'undefined') {
- return false
- }
- return new Promise((resolve, reject) => {
- if (!url) {
- reject(new Error('请设置加载资源的url'))
- return false
- }
- if (!domId) {
- reject(new Error('请设置加载资源的dom Id'))
- return false
- }
- if (document.getElementById(domId)) {
- resolve()
- } else {
- if (type === 'css') {
- let cssLink = document.createElement('link')
- cssLink.id = domId
- cssLink.type = 'text/css'
- cssLink.rel = 'stylesheet'
- cssLink.href = url
- cssLink.onload = () => {
- resolve()
- }
- document.head.appendChild(cssLink)
- } else {
- let jsScript = document.createElement('script')
- jsScript.id = domId
- jsScript.type = 'text/javascript'
- jsScript.onload = () => {
- resolve()
- }
- jsScript.src = url
- document.body.appendChild(jsScript)
- }
- }
- })
- }
- // ahex 转 rgba
- export const colorToRgba = color => {
- let rgba = ''
- color = color.substr(1)
- let colorLen = color.length
- let aValue, rValue, gValue, bValue
- aValue = '0xFF'
- if (colorLen === 6 || colorLen === 8) {
- if (colorLen === 8) {
- aValue = '0x' + color.substr(0, 2)
- color = color.substr(2)
- }
- rValue = '0x' + color.substr(0, 2)
- gValue = '0x' + color.substr(2, 2)
- bValue = '0x' + color.substr(4, 2)
- rgba =
- 'rgba(' +
- parseInt(rValue) +
- ',' +
- parseInt(gValue) +
- ',' +
- parseInt(bValue) +
- ',' +
- parseInt(aValue) / 255 +
- ')'
- }
- return rgba
- }
- export const countStringBytes = str => {
- var r = 0
- for (var i = 0; i < str.length; i++) {
- var c = str.charCodeAt(i)
- // Shift_JIS: 0x0 ~ 0x80, 0xa0 , 0xa1 ~ 0xdf , 0xfd ~ 0xff
- // Unicode : 0x0 ~ 0x80, 0xf8f0, 0xff61 ~ 0xff9f, 0xf8f1 ~ 0xf8f3
- if (
- (c >= 0x0 && c < 0x81) ||
- c == 0xf8f0 ||
- (c >= 0xff61 && c < 0xffa0) ||
- (c >= 0xf8f1 && c < 0xf8f4)
- ) {
- r += 1
- } else {
- r += 2
- }
- }
- return r
- }
- export const cstr = s => {
- /*处理null、undefined或NaN字符串*/
- if (s) {
- return s.toString()
- } else {
- return ''
- }
- }
- export const formatTimeCountToStr = t => {
- /*格式化时间戳差*/
- if (t > 0) {
- let h = Math.floor((t / 60 / 60) % 24)
- if (h < 10) {
- h = `0${h}`
- }
- let m = Math.floor((t / 60) % 60)
- if (m < 10) {
- m = `0${m}`
- }
- let s = Math.floor(t % 60)
- if (s < 10) {
- s = `0${s}`
- }
- return `${h}:${m}:${s}`
- }
- return ''
- }
- export const formatTimeToStr = t => {
- if (t) {
- t = parseInt(t)
- let time = new Date(t * 1000)
- let year = time.getFullYear()
- let month = time.getMonth() + 1
- if (month < 10) {
- month = `0${month}`
- }
- let date = time.getDate()
- if (date < 10) {
- date = `0${date}`
- }
- let hour = time.getHours()
- if (hour < 10) {
- hour = `0${hour}`
- }
- let minute = time.getMinutes()
- if (minute < 10) {
- minute = `0${minute}`
- }
- let second = time.getSeconds()
- if (second < 10) {
- second = `0${second}`
- }
- return `${year}-${month}-${date} ${hour}:${minute}:${second}`
- }
- return ''
- }
- export const deepClone = obj => {
- /* 深度克隆对象 */
- try {
- return JSON.parse(JSON.stringify(obj))
- } catch (e) {
- return obj
- }
- }
- export const money = (m, c, w) => {
- /*m:金额;c:保留小数位数,只能取值0,1,2;w:1返回整个金额,2返回整数部分,3返回小数部分*/
- if (c !== 0 && c !== 1 && c !== 2) {
- // console.log('传入保留小数位数参数错误')
- return ''
- }
- if (w !== 1 && w !== 2 && w !== 3) {
- // console.log('传入返回类型参数错误')
- return ''
- }
- if (0 === m) {
- /*由于0=false,需特殊处理*/
- return deal('0', '')
- } else {
- if (!m || isNaN(m)) {
- return ''
- }
- m = m.toString()
- if (-1 === m.indexOf('.')) {
- return deal(m, '')
- } else {
- var s_arr = m.split('.')
- return deal(s_arr[0], s_arr[1])
- }
- }
- function deal(p, f) {
- /*p为整数部分*/
- if (0 === c) {
- if (1 === w) {
- return p
- } else if (2 === w) {
- return p
- } else if (3 === w) {
- return ''
- }
- } else if (1 === c) {
- if (0 === f.length) {
- f = '0'
- } else if (f.length >= 2) {
- f = f.substring(0, 1)
- }
- if (1 === w) {
- return p + '.' + f
- } else if (2 === w) {
- return p
- } else if (3 === w) {
- return f
- }
- } else if (2 === c) {
- if (0 === f.length) {
- f = '00'
- } else if (1 === f.length) {
- f = f + '0'
- } else if (f.length >= 3) {
- f = f.substring(0, 2)
- }
- if (1 === w) {
- return p + '.' + f
- } else if (2 === w) {
- return p
- } else if (3 === w) {
- return f
- }
- }
- }
- }
- export const myValidator = {
- /* 校验字段合法性rule */
- checkMobile: s => {
- /* 校验手机号格式是否正确 */
- if (s) {
- s = s.toString().trim()
- var rule = /^\d{3,20}$/
- return rule.test(s)
- }
- return false
- },
- checkEmail: s => {
- /* 校验邮箱格式是否正确 */
- if (s) {
- s = s.toString().trim()
- let rule = /^(([^()[\]\\.,;:\s@\"]+(\.[^()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/g
- return rule.test(s)
- }
- return false
- },
- checkPwd: s => {
- /* 校验登录密码格式是否正确 */
- if (s) {
- s = s.toString().trim()
- var rule = /^(?=.*[a-zA-Z]+)(?=.*[0-9]+)[a-zA-Z0-9]{8,16}$/
- return rule.test(s)
- }
- return false
- },
- checkCode: s => {
- /* 校验短信或邮箱验证码格式是否正确 */
- if (s) {
- s = s.toString().trim()
- var rule = /^\d{6}$/
- return rule.test(s)
- }
- return false
- },
- checkImgCode: s => {
- /* 校验图片验证码格式是否正确 */
- if (s) {
- s = s.toString().trim()
- var rule = /^[a-zA-Z]{4}$/
- return rule.test(s)
- }
- return false
- },
- checkNickname: s => {
- /* 校验昵称格式是否正确 */
- if (s) {
- s = s.toString().trim()
- var rule = /^[A-Za-z0-9\u4e00-\u9fa5]{2,20}$/
- return rule.test(s)
- }
- return false
- }
- }
|