UNPKG

gxd-vue-library

Version:

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

224 lines (197 loc) 6.08 kB
'use strict'; 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) // })