UNPKG

nimble-ui

Version:
208 lines (196 loc) 6.65 kB
import AddressBase from './address.base'; import { DEFAULT_CONFIG, ADDRESS_DATA_TYPE, EVENT_TYPE, PAGE_TYPE } from '../constants'; export class Address extends AddressBase { defaultOption = DEFAULT_CONFIG; name = 'Address'; constructor (options) { super(options); const _that = this; _that.setDefaultOptions(options); } /** * 获取默认地址 * @param {Object} options 可选参数 * @param {Boolean} options.force 如果没有获取到默认地址,是否强制唤起选地址库页面 * @param {Boolean} options.isReset 是否reset * @returns {Promise} */ getDefault (options) { const _that = this; let _options = _that.getOptions(options); if (_options.isReset) { _that._addressInfo = null; } let res = _that._getDefaultPromise || new Promise((resolve, reject) => { if (_that._addressInfo) { resolve(_that._addressInfo); } else { _that._getUserInfo({ type: 'getDefault' }).then((userInfo) => { if (userInfo && userInfo.islogin) { _that.getAddresses().then((addressList) => { addressList = addressList || []; let _defaultAddr; for (let i = 0; i < addressList.length; i++) { const _addrItem = addressList[i]; if (_addrItem && _addrItem.isDefault) { _defaultAddr = _addrItem; break; } } if (!_defaultAddr && _options.force) { if (addressList.length) { _options = Object.assign({}, _options, { type: PAGE_TYPE.ADDRESS_EDIT }); } _that.select(_options).then(resolve, reject); } else { _that.successfilter(_defaultAddr || null).then(resolve, reject); } }, reject); } else { resolve(null); } }, reject); } }); res.then(() => { _that._getDefaultPromise = null; }, () => { _that._getDefaultPromise = null; }); _that._getDefaultPromise = res; return res; } /** * 用户选择地址 * @param {Object} options 可选参数 * @param {Boolean} options.isBack 是否设置默认后返回 * @param {string} options.type 页面类型 * @returns {Promise} */ select (options) { const _that = this; return new Promise((resolve, reject) => { _that._getUserInfo({ type: 'selectAddress' }).then((userInfo) => { if (userInfo && userInfo.islogin) { _that._toAddressPage(options).then(resolve, reject); } else { reject(new Error('islogin false')); } }, reject); }); } /** * 获取地址库列表 * @returns {Promise} */ getAddresses () { const _that = this; return new Promise((resolve, reject) => { _that._getUserInfo({ type: ADDRESS_DATA_TYPE.GET_ADDRESSES }).then((userInfo) => { if (userInfo && userInfo.islogin) { _that._getData(ADDRESS_DATA_TYPE.GET_ADDRESSES).then(resolve, reject); } else { reject(new Error('islogin false')); } }, reject); }); } /** * 设置为默认地址 * @param {Object} item 车型数据 * @returns {Promise} */ setDefault (item) { const _that = this; _that._addressInfo = null; return new Promise((resolve, reject) => { _that._getUserInfo({ type: ADDRESS_DATA_TYPE.SET_DEFAULT }).then((userInfo) => { if (userInfo && userInfo.islogin) { _that._getData(ADDRESS_DATA_TYPE.SET_DEFAULT, item).then(resolve, reject); } else { reject(new Error('islogin false')); } }, reject); }); } /** * 删除地址信息 * @param {Object} item 地址信息 * @returns {Promise} */ deleteAddress (item) { const _that = this; _that._addressInfo = null; return new Promise((resolve, reject) => { _that._getUserInfo().then((userInfo) => { if (userInfo && userInfo.islogin) { _that._getData(ADDRESS_DATA_TYPE.DELETE_ADDRESS, item).then(resolve, reject); } else { reject(new Error('islogin false')); } }, reject); }); } /** * 获取省市区地址 * @param {Object} item 地址信息 * @returns {Promise} */ getRegionName (item) { const _that = this; return _that._getData(ADDRESS_DATA_TYPE.GET_REGION_NAME, item); } /** * 添加地址信息 * @param {Object} item 地址信息 * @returns {Promise} */ addOrEditAddress (item) { const _that = this; _that._addressInfo = null; return new Promise((resolve, reject) => { _that._getUserInfo().then((userInfo) => { if (userInfo && userInfo.islogin) { item = item || {}; _that._getData(ADDRESS_DATA_TYPE.ADD_OR_EDIT_ADDRESS, item).then(resolve, reject); } else { reject(new Error('islogin false')); } }, reject); }); } /** * 用户取消了选择地址 */ cancel () { this.$emit(EVENT_TYPE.CANCEL_ADDRESS); } /** * 用户选择了地址 * @param {Event} evt 事件对象 */ checked (evt) { this.$emit(EVENT_TYPE.CHECKED_ADDRESS, evt); } } /** * * 实例化工厂方法 * @export * @param {Vue} Vue vue * @param {any} options 配置选项 * @returns {Photo} */ export default function addressFactory(Vue, options) { return new Address(options); }