/** * 获取URL参数 * @returns */ export function getUrlParams() { const urlParams: { [key: string]: string } = {}; let url = window.location.href; if (url.indexOf('?') !== -1) { url = url.substring(url.indexOf('?') + 1, url.length); const urlArr = url.split('&'); for (let i = 0, size = urlArr.length; i < size; i++) { const urlArrItem = urlArr[i].split('='); // 对参数值进行 URL 解码,避免中文字符串乱码 urlParams[urlArrItem[0]] = urlArrItem[1] ? decodeURIComponent(urlArrItem[1]) : ''; } } return urlParams; } /** * 从URL参数中提取指定的字段数值 * @param paramName 参数名称 * @param defaultValue 默认值 * @returns 参数值或默认值 * * @example * // 从当前页面URL提取debug参数 * const debug = getUrlParam('debug', false) * * // 提取数字参数 * const page = getUrlParam('page', 1) * * // 提取字符串参数 * const mode = getUrlParam('mode', 'production') */ export function getUrlParam(paramName: string, defaultValue: any = null): any { const urlParams = getUrlParams(); const paramValue = urlParams[paramName]; // 尝试转换数据类型 if (paramValue === 'true') return true; if (paramValue === 'false') return false; if (paramValue === 'null') return null; if (paramValue === 'undefined') return undefined; // 尝试转换为数字 const numValue = Number(paramValue); if (!isNaN(numValue) && isFinite(numValue)) { return numValue; } return paramValue ?? defaultValue; } /** * 从URL参数中提取多个字段数值 * @param params 参数配置对象,键为参数名,值为默认值 * @param url 可选的URL字符串,默认使用当前页面URL * @returns 包含所有参数值的对象 * * @example * const params = getUrlParams({ * debug: false, * mode: 'production', * page: 1, * theme: 'light' * }) */ export function getUrlParamsByKeys( params: Record, url?: string, ): Record { const result: Record = {}; for (const [paramName, defaultValue] of Object.entries(params)) { result[paramName] = getUrlParam(paramName, defaultValue); } return result; }