gxd-vue-library
Version:
依赖与element Ui插件库,聚福宝福利PC端插件库
224 lines (197 loc) • 6.08 kB
JavaScript
;
import request from '@/utils/request';
import {
compilePath,
returnData
} from '@/utils/xd.path';
import {baseCloneDeep} from "@/utils/xd.base";
const {isOpenNoResultKey, system} = require('./../../settings');
const urlOptions = {
//v1
p1: '/:server/v1/:fn/options',
p2: '/:server/v1/:xsiteid/:fn/options',
p3: '/:server/v1/:xsiteid/:xnamespace/:fn/options',
p4: '/:server/v1/:fn/children',
p5: '/:server/v1/:xsiteid/:fn/children',
p6: '/:server/v1/:xsiteid/:xnamespace/:fn/children',
//v2
p21: '/:server/v2/:fn/options',
p22: '/:server/v2/:xsiteid/:fn/options',
p23: '/:server/v2/:xsiteid/:xnamespace/:fn/options',
p24: '/:server/v2/:fn/children',
p25: '/:server/v2/:xsiteid/:fn/children',
p26: '/:server/v2/:xsiteid/:xnamespace/:fn/children',
//v3
p31: '/:server/v3/:fn/options',
p32: '/:server/v3/:xsiteid/:fn/options',
p33: '/:server/v3/:xsiteid/:xnamespace/:fn/options',
p34: '/:server/v3/:fn/children',
p35: '/:server/v3/:xsiteid/:fn/children',
p36: '/:server/v3/:xsiteid/:xnamespace/:fn/children'
};
import store from "@/store";
/**
* @description 检查变量类型
* @param obj
* @returns {*}
*/
function checkVarType(obj) {
let toString = Object.prototype.toString;
let map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Array]': 'array',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object',
'[object Promise]': 'promise'
};
return map[toString.call(obj)];
}
/**
* @description 获取选项卡和自定义模糊搜索功能
* @param params { Object }
* @param params.fn { String } 引用模块名称 (必选)
* @param params.path { String|urlOptions } 路径规则地址,其值为:【p1,p2,p3,p4,p5,p6】 (必选)
* @param params.server { String } 服务模块 (必选)
* @param params.xsiteid { String } 站点ID (可选)当使用p2,p3, p5, p6路径规则时为必选
* @param params.namespace { String } 业务空间 (可选)当使用p3, p6路径规则时为必选
* @param params.params {Object} 当为自定义模糊搜索功能 必选参数:{keyword:xxx,page_size: 10}
* @returns { Promise | * }
*/
function handleOptions(params) {
if(!params.server || !params.fn || !params.path){
throw new Error(`【server,fn,path】参数不能为空,\n params=>${JSON.stringify(params, null, 2)}`);
}
//解决超管与加盟商后台服务名字混用问题
let reg = /^([0-9a-zA-Z])+\-(admin|partner)/;
if (reg.test(params.server)) {
let splitServer = params.server.split('-');
if(params.server!=='partner-admin' && params.server!=='admin-partner') {
if (system === 'admin') {
params.server = splitServer[0] + '-admin'
} else {
params.server = splitServer[0] + '-partner'
}
}
}
//判断规则是否存在
if(!urlOptions[params.path]) {
throw new Error(`params.path其值为:【p1,p2,p3,p4,p5,p6 】,\n params=>${JSON.stringify(params, null, 2)}`);
}
//获取公共参数
let commonParams = baseCloneDeep(store.state.commonParams) || {};
params = {...params, ...commonParams};
//p2,p3
if((params.path === 'p2' || params.path === 'p3' || params.path === 'p5' || params.path === 'p6') && !params.xsiteid){
throw new Error(`params.path=p2,p3,p5,p6时候,params.xsiteid不能为空,\n params=>${JSON.stringify(params, null, 2)}`);
}
//p3路径
if((params.path === 'p3' || params.path === 'p6') && !params.xnamespace){
throw new Error(`params.path=p3时候,params.xnamespace,\n params=>${JSON.stringify(params, null, 2)}`);
}
//替换fn选项
let path = urlOptions[params.path];
path = path.replace(/:fn/, params.fn);
delete params.fn;
//自定义模糊搜索功能参数设置
if (params.params && params.params.keyword !== undefined) {
params.params['page_size'] = params.params['page_size'] || 10;
path = path.replace('options', 'like-options')
}
let server = params.server;
console.warn(`apiUrl: ${path.replace(':server', server)}`)
//设置参数
let {url, result} = compilePath(path, params);
delete result['path'];
result = {...result, ...params.params};
delete result['params'];
return request({
url: url,
method: 'get',
params: result,
apiPath: path.replace(':server', server)
})
}
/**
* @description 获取选项卡列表
* @param params
*/
export function getOptions(params){
if(checkVarType(params) === 'object') {
return new Promise((resolve, reject) => {
handleOptions(params)
.then(res=>{
resolve(returnData(res, isOpenNoResultKey));
})
.catch(error=>{
reject(error)
})
})
}
else {
let arr = params.map(item=>{
if(checkVarType(item) === 'promise') return item;
return new Promise((resolve, reject) => {
handleOptions(item)
.then(res => {
resolve(returnData(res, isOpenNoResultKey));
})
.catch(error => {
reject(error)
})
});
});
return Promise.all(arr);
}
}
// getOptions([
// {
// server: 'product-partner',
// //namespace: 'shop', //p3需要传值
// fn: 'pos',
// path: 'p1',
// params: {
// a: '1',
// b: '2',
// }
// },
// {
// server: 'product-partner',
// fn: 'film',
// path: 'p2',
// params: {
// a: '1',
// b: '2',
// }
// },
// {
// server: 'product-partner',
// namespace: 'shop', //p3需要传值
// fn: 'risk',
// path: 'p3',
// params: {
// a: '1',
// b: '2',
// }
// }
// ]).then(res => {
// console.log(res)
// }).catch(res => {
// console.error(res)
// })
// getOptions({
// server: 'product-partner',
// //namespace: 'shop', //p3需要传值
// fn: 'shop',
// path: 'p1',
// params: {
// a: '1',
// b: '2',
// }
// }).then(res => {
// console.log(res)
// }).catch(res => {
// console.error(res)
// })