UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

108 lines (91 loc) 2.88 kB
'use strict'; //https://www.jianshu.com/p/9b8f2cdfcbe1 //https://segmentfault.com/a/1190000014161454 const {pathToRegexp, match, parse, compile} = require("path-to-regexp"); import store from './../store'; /** * @description 检查变量类型 * @param obj * @returns {*} */ export function check(obj) { let toString = Object.prototype.toString; let map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regExp', '[object Undefined]': 'undefined', '[object Null]': 'null', '[object Object]': 'object', '[object Error]': 'error' }; return map[toString.call(obj)]; } /** * @description 是否有特殊字符 * @param path * @returns {boolean} */ export function hasSpecialPlaceholder(path) { return /(:[a-zA-z0-9_]+)/g.test(path) } /** * @description 解析字符操作带有 ":xxx"并且不带"?" 的参数,并返回数组 * @param path {String} Api地址 * @param isAllParams {boolean} 是否返回所有带有":xxx" false => :xxx true=>:xxx or :xxx? * @returns {[]} */ export function parsePathToParams(path, isAllParams = true){ return parse(path).filter(item=>{ if(isAllParams) return check(item) === 'object' && item['name']; else return check(item) === 'object' && item['name'] && item['modifier'] !== '?'; }).map(item=>{ return item['name'] }) } /** * @description 返回替换后带参数的api地址,并删除替换的参数 * @param path {String} Api地址 * @param params 参数对象 * @returns {{params: *, url: *}} 返回参数的api地址API */ export function compilePath(path,params) { let commonParams = store.state['commonParams'] || {}; params = { ...params, ...commonParams, }; let data = JSON.parse(JSON.stringify(params)); let paramsKey = parsePathToParams(path, false); let compileObj = compile(path); let paramLen = paramsKey.filter(key=>{ return params[key]; }); console.log('compilePath',params) //传入需要替换参数小于需要替换参数个数报错 if(paramLen.length < paramsKey.length) { throw new Error(JSON.stringify({message: '参数个数错误',source: params, target: paramsKey, path: path})) } let url = compileObj(data); if(parsePathToParams(path).length >0) { parsePathToParams(path).map(item=>{ if(data[item]) delete data[item]; }) } return {url, result: data}; } /** * @description 返回值统一处理 * @param res {Object} * @param isOpenNoResultKey {Boolean} */ export function returnData(res, isOpenNoResultKey) { res = (res.result && (res.code || res.msg)) ? res.result : res; res = (res.data && (res.code || res.msg)) ? res.data : res; if (isOpenNoResultKey) res = {data: res}; return res; }