nimble-ui
Version:
208 lines (196 loc) • 6.65 kB
JavaScript
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);
}