UNPKG

nimble-ui

Version:
117 lines (113 loc) 4.86 kB
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; }