Some checks failed
site-dist-deploy / build-and-deploy (push) Has been cancelled
158 lines
3.9 KiB
TypeScript
158 lines
3.9 KiB
TypeScript
/**
|
||
* 拼接参数
|
||
* @param {Object} data
|
||
*/
|
||
export const param = (data) => {
|
||
if (!data) {
|
||
return ''
|
||
}
|
||
|
||
let url = ''
|
||
for (const k in data) {
|
||
const value = data[k] !== undefined ? data[k] : ''
|
||
url += `&${k}=${encodeURIComponent(value)}`
|
||
}
|
||
return url ? url.substr(1) : ''
|
||
}
|
||
/**
|
||
* 拼接参数,处理对象类型数据
|
||
*/
|
||
export const paramToObj = (data) => {
|
||
if (!data) {
|
||
return ''
|
||
}
|
||
let url = ''
|
||
for (const k in data) {
|
||
const value = data[k] !== undefined ? data[k] : ''
|
||
if (typeof value === 'object') {
|
||
url += `&${k}=${encodeURIComponent(JSON.stringify(value))}`
|
||
} else {
|
||
url += `&${k}=${encodeURIComponent(value)}`
|
||
}
|
||
}
|
||
return url ? url.substr(1) : ''
|
||
}
|
||
|
||
/**
|
||
* 为了获取微信登录的code
|
||
* @param {string} name
|
||
*/
|
||
export const getQueryString = (name) => {
|
||
const reg = `(^|&)${name}=([^&]*)(&|$)`
|
||
const query = window.location.search.substr(1) || window.location.hash.split('?')[1]
|
||
const r = query ? query.match(reg) : null
|
||
if (r != null) return decodeURIComponent(r[2])
|
||
return null
|
||
}
|
||
|
||
/**
|
||
* 为了获取URL上的值
|
||
* @param {*} name 需要获取的key
|
||
* @param {*} isMerge 是否合并hash和search,search优先级高
|
||
*/
|
||
export const getAllQueryString = (name, isMerge = true) => {
|
||
const reg = `(?:^|&)${name}=([^&]*)(?:&|$)`
|
||
const search = window.location.search.substr(1)
|
||
const hash = window.location.hash.split('?')[1]
|
||
const searchR = search ? search.match(reg) && search.match(reg)![1] : null
|
||
const hashR = hash ? hash.match(reg) && hash.match(reg)![1] : null
|
||
if (isMerge) {
|
||
const result = searchR || hashR
|
||
return result ? unescape(result) : null
|
||
}
|
||
return {
|
||
search: searchR ? unescape(searchR) : null,
|
||
hash: hashR ? unescape(hashR) : null,
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 授权时把所有参数进行筛选,防止二次授权存在多个code情况
|
||
* @param {string} url
|
||
*/
|
||
export function parseURL(url) {
|
||
const a = document.createElement('a')
|
||
a.href = url
|
||
const protocol = a.protocol.replace(':', '')
|
||
const host = a.hostname
|
||
const path = a.pathname.replace(/^([^\/])/, '/$1')
|
||
return {
|
||
href: `${protocol}://${host}${path}?`,
|
||
source: url,
|
||
protocol,
|
||
host,
|
||
port: a.port,
|
||
query: a.search,
|
||
params: (function () {
|
||
const params = {}
|
||
const seg = a.search.replace(/^\?/, '').split('&')
|
||
const len = seg.length
|
||
let p
|
||
for (let i = 0; i < len; i++) {
|
||
if (seg[i]) {
|
||
p = seg[i].split('=')
|
||
params[p[0]] = p[1]
|
||
}
|
||
}
|
||
return params
|
||
})(),
|
||
hash: a.hash.replace('#', ''),
|
||
path,
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取url query对象
|
||
*/
|
||
export function urlGetParam() {
|
||
const t = location.search
|
||
.substring(1)
|
||
.split('&')
|
||
.filter((item) => !!item)
|
||
const f = {}
|
||
for (let i = 0; i < t.length; i++) {
|
||
const x = t[i].split('=')
|
||
f[x[0]] = x[1]
|
||
}
|
||
return f
|
||
}
|
||
|
||
/**
|
||
* 批量删除地址参数
|
||
* @param {array} removes 需要删除的参数
|
||
* @param {boolean} hash 返回的链接是否拼上hash值
|
||
*/
|
||
export function removeUrlQuery(removes, isHash = false) {
|
||
const currentParam = urlGetParam()
|
||
removes.forEach((removeItem) => {
|
||
delete currentParam[removeItem]
|
||
})
|
||
return `${location.origin}${location.pathname}?${param(currentParam)}${
|
||
isHash ? location.hash : ''
|
||
}`
|
||
}
|
||
|
||
/**
|
||
* 获取链接上的keyValue
|
||
*/
|
||
export function hrefKeyValue(key, url) {
|
||
const reg = new RegExp(/(\w+)=(\w+)/, 'gi')
|
||
const currentUrl = url || location.href
|
||
const results = currentUrl.match(reg)
|
||
if (results) {
|
||
const resultKeyValues = results.map((o) => ({
|
||
[o.split('=')[0]]: o.split('=')[1],
|
||
}))
|
||
const result = resultKeyValues.find((o) => o.hasOwnProperty(key))
|
||
return (result && result[key]) || null
|
||
}
|
||
return null
|
||
}
|
||
/**
|
||
* 替换url中的参数
|
||
*/
|
||
export function replaceQueryString(url, name, value) {
|
||
const re = new RegExp(name + '=[^&]*', 'gi')
|
||
return url.replace(re, name + '=' + value)
|
||
}
|