nimble-ui
Version:
117 lines (113 loc) • 4.86 kB
JavaScript
import { getBackData, callFn } from 'nimble-lib';
import Address from '../../Services/address';
import Popup from '../popup';
import { EVENT_TYPE, PAGE_TYPE, ADDRESS_DATA_TYPE } from '../../Services/address/constants';
/**
* 创建install方法(为了不污染Vue所以不在此处挂载)
* @param {*} NuAddress 地址库组件
* @returns {Function}
*/
export default function createInstall (NuAddress) {
let install = function (Vue, config) {
let $sAddress = Address(Vue, config);
config = config || {};
let $tPopup = Popup(Vue, {
routerOption: {
queryKey: 'addressPage'
}
});
$sAddress.$on(EVENT_TYPE.REDIRECT, ({ type, options }) => {
let props = {
/**
* 获取数据
* @param {String} dataType 数据类型
* @param {Object} params 参数
* @param {Object} headers 请求头
* @returns {Promise}
*/
getAddressData (dataType, params, headers) {
let _name = '';
return new Promise((resolve, reject) => {
switch ((dataType || '') + '') {
case ADDRESS_DATA_TYPE.GET_ADDRESSES:
_name = 'getAddresses';
break;
case ADDRESS_DATA_TYPE.SET_DEFAULT:
_name = 'setDefault';
break;
case ADDRESS_DATA_TYPE.DELETE_ADDRESS:
_name = 'deleteAddress';
break;
case ADDRESS_DATA_TYPE.GET_REGION_NAME:
_name = 'getRegionName';
break;
case ADDRESS_DATA_TYPE.ADD_OR_EDIT_ADDRESS:
_name = 'addOrEditAddress';
break;
case ADDRESS_DATA_TYPE.GET_FORM_CONFIG:
_name = 'getFormConfig';
break;
}
if (_name && $sAddress[_name]) {
let _back = $sAddress[_name](params, headers);
_back && _back.then(resolve, reject);
} else {
reject(new Error(dataType + '类型不支持'));
}
});
},
filterItem: options.filterItem,
pageType: type,
/**
* 可选参数
*/
isBack: options.isBack,
/**
* 提示信息回调
*/
message: $sAddress.message.bind($sAddress)
};
getBackData(config && config.filterRedirect, [type, props, options]).then((addressModule) => {
switch (type) {
case PAGE_TYPE.ADDRESS_LIST:
case PAGE_TYPE.ADDRESS_EDIT:
getBackData(addressModule || NuAddress, null, true).then((res) => {
$tPopup.popupData(res && res.default, Object.assign({
wrapCla: 'nu_address-popup', // 最外层追加的Class名
maskCloseFlag: 0,
isClickBgClose: false,
alignCla: 'fullScreen', // ''|'bottom'|'top'|'fullScreen'|'centerMiddle',
transitionCls: 'toLeft',
props: props
}), (config && config.popup) || {}).then((_res) => {
_res = _res || {};
let _fnName = 'cancel';
if (_res.type === 'confirm') {
_fnName = 'checked';
}
if (_fnName && $sAddress) {
callFn($sAddress[_fnName], [_res.data], $sAddress);
}
});
});
break;
default:
break;
}
});
});
return $sAddress;
};
/**
* install方法
* @param {Vue} Vue vue
* @param {Object} options 可选参数
* @returns {Address}
*/
install.install = function (Vue, options) {
let $sAddress = install(Vue, options);
Vue.use($sAddress, options);
return $sAddress;
};
return install;
}