1
0
Code Issues Pull Requests Packages Projects Releases Wiki Activity GitHub Gitee

192 lines
5.0 KiB
JavaScript
Raw Normal View History

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