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,
|
||
});
|
||
}
|
||
});
|
||
},
|
||
});
|