192 lines
5.0 KiB
JavaScript
192 lines
5.0 KiB
JavaScript
|
/* eslint-disable no-param-reassign */
|
|||
|
import { fetchDeliveryAddressList } from '../../../../services/address/fetchAddress';
|
|||
|
import Toast from 'tdesign-miniprogram/toast/index';
|
|||
|
import { resolveAddress, rejectAddress } from './util';
|
|||
|
import { getAddressPromise } from '../edit/util';
|
|||
|
|
|||
|
Page({
|
|||
|
data: {
|
|||
|
addressList: [],
|
|||
|
deleteID: '',
|
|||
|
showDeleteConfirm: false,
|
|||
|
isOrderSure: false,
|
|||
|
},
|
|||
|
|
|||
|
/** 选择模式 */
|
|||
|
selectMode: false,
|
|||
|
/** 是否已经选择地址,不置为true的话页面离开时会触发取消选择行为 */
|
|||
|
hasSelect: false,
|
|||
|
|
|||
|
onLoad(query) {
|
|||
|
const { selectMode = '', isOrderSure = '', id = '' } = query;
|
|||
|
this.setData({
|
|||
|
isOrderSure: !!isOrderSure,
|
|||
|
id,
|
|||
|
});
|
|||
|
this.selectMode = !!selectMode;
|
|||
|
this.init();
|
|||
|
},
|
|||
|
|
|||
|
init() {
|
|||
|
this.getAddressList();
|
|||
|
},
|
|||
|
onUnload() {
|
|||
|
if (this.selectMode && !this.hasSelect) {
|
|||
|
rejectAddress();
|
|||
|
}
|
|||
|
},
|
|||
|
getAddressList() {
|
|||
|
const { id } = this.data;
|
|||
|
fetchDeliveryAddressList().then((addressList) => {
|
|||
|
addressList.forEach((address) => {
|
|||
|
if (address.id === id) {
|
|||
|
address.checked = true;
|
|||
|
}
|
|||
|
});
|
|||
|
this.setData({ addressList });
|
|||
|
});
|
|||
|
},
|
|||
|
getWXAddressHandle() {
|
|||
|
wx.chooseAddress({
|
|||
|
success: (res) => {
|
|||
|
if (res.errMsg.indexOf('ok') === -1) {
|
|||
|
Toast({
|
|||
|
context: this,
|
|||
|
selector: '#t-toast',
|
|||
|
message: res.errMsg,
|
|||
|
icon: '',
|
|||
|
duration: 1000,
|
|||
|
});
|
|||
|
return;
|
|||
|
}
|
|||
|
Toast({
|
|||
|
context: this,
|
|||
|
selector: '#t-toast',
|
|||
|
message: '添加成功',
|
|||
|
icon: '',
|
|||
|
duration: 1000,
|
|||
|
});
|
|||
|
const { length: len } = this.data.addressList;
|
|||
|
this.setData({
|
|||
|
[`addressList[${len}]`]: {
|
|||
|
name: res.userName,
|
|||
|
phoneNumber: res.telNumber,
|
|||
|
address: `${res.provinceName}${res.cityName}${res.countryName}${res.detailInfo}`,
|
|||
|
isDefault: 0,
|
|||
|
tag: '微信地址',
|
|||
|
id: len,
|
|||
|
},
|
|||
|
});
|
|||
|
},
|
|||
|
});
|
|||
|
},
|
|||
|
confirmDeleteHandle({ detail }) {
|
|||
|
const { id } = detail || {};
|
|||
|
if (id !== undefined) {
|
|||
|
this.setData({ deleteID: id, showDeleteConfirm: true });
|
|||
|
Toast({
|
|||
|
context: this,
|
|||
|
selector: '#t-toast',
|
|||
|
message: '地址删除成功',
|
|||
|
theme: 'success',
|
|||
|
duration: 1000,
|
|||
|
});
|
|||
|
} else {
|
|||
|
Toast({
|
|||
|
context: this,
|
|||
|
selector: '#t-toast',
|
|||
|
message: '需要组件库发新版才能拿到地址ID',
|
|||
|
icon: '',
|
|||
|
duration: 1000,
|
|||
|
});
|
|||
|
}
|
|||
|
},
|
|||
|
deleteAddressHandle(e) {
|
|||
|
const { id } = e.currentTarget.dataset;
|
|||
|
this.setData({
|
|||
|
addressList: this.data.addressList.filter((address) => address.id !== id),
|
|||
|
deleteID: '',
|
|||
|
showDeleteConfirm: false,
|
|||
|
});
|
|||
|
},
|
|||
|
editAddressHandle({ detail }) {
|
|||
|
this.waitForNewAddress();
|
|||
|
|
|||
|
const { id } = detail || {};
|
|||
|
wx.navigateTo({ url: `/pages/usercenter/address/edit/index?id=${id}` });
|
|||
|
},
|
|||
|
selectHandle({ detail }) {
|
|||
|
if (this.selectMode) {
|
|||
|
this.hasSelect = true;
|
|||
|
resolveAddress(detail);
|
|||
|
wx.navigateBack({ delta: 1 });
|
|||
|
} else {
|
|||
|
this.editAddressHandle({ detail });
|
|||
|
}
|
|||
|
},
|
|||
|
createHandle() {
|
|||
|
this.waitForNewAddress();
|
|||
|
wx.navigateTo({ url: '/pages/usercenter/address/edit/index' });
|
|||
|
},
|
|||
|
|
|||
|
waitForNewAddress() {
|
|||
|
getAddressPromise()
|
|||
|
.then((newAddress) => {
|
|||
|
let addressList = [...this.data.addressList];
|
|||
|
|
|||
|
newAddress.phoneNumber = newAddress.phone;
|
|||
|
newAddress.address = `${newAddress.provinceName}${newAddress.cityName}${newAddress.districtName}${newAddress.detailAddress}`;
|
|||
|
newAddress.tag = newAddress.addressTag;
|
|||
|
|
|||
|
if (!newAddress.addressId) {
|
|||
|
newAddress.id = `${addressList.length}`;
|
|||
|
newAddress.addressId = `${addressList.length}`;
|
|||
|
|
|||
|
if (newAddress.isDefault === 1) {
|
|||
|
addressList = addressList.map((address) => {
|
|||
|
address.isDefault = 0;
|
|||
|
|
|||
|
return address;
|
|||
|
});
|
|||
|
} else {
|
|||
|
newAddress.isDefault = 0;
|
|||
|
}
|
|||
|
|
|||
|
addressList.push(newAddress);
|
|||
|
} else {
|
|||
|
addressList = addressList.map((address) => {
|
|||
|
if (address.addressId === newAddress.addressId) {
|
|||
|
return newAddress;
|
|||
|
}
|
|||
|
return address;
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
addressList.sort((prevAddress, nextAddress) => {
|
|||
|
if (prevAddress.isDefault && !nextAddress.isDefault) {
|
|||
|
return -1;
|
|||
|
}
|
|||
|
if (!prevAddress.isDefault && nextAddress.isDefault) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
});
|
|||
|
|
|||
|
this.setData({
|
|||
|
addressList: addressList,
|
|||
|
});
|
|||
|
})
|
|||
|
.catch((e) => {
|
|||
|
if (e.message !== 'cancel') {
|
|||
|
Toast({
|
|||
|
context: this,
|
|||
|
selector: '#t-toast',
|
|||
|
message: '地址编辑发生错误',
|
|||
|
icon: '',
|
|||
|
duration: 1000,
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
});
|