index.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /* eslint-disable no-param-reassign */
  2. import { fetchDeliveryAddressList } from '../../../../services/address/fetchAddress';
  3. import Toast from 'tdesign-miniprogram/toast/index';
  4. import { resolveAddress, rejectAddress } from '../../../../services/address/list';
  5. import { getAddressPromise } from '../../../../services/address/edit';
  6. Page({
  7. data: {
  8. addressList: [],
  9. deleteID: '',
  10. showDeleteConfirm: false,
  11. isOrderSure: false,
  12. },
  13. /** 选择模式 */
  14. selectMode: false,
  15. /** 是否已经选择地址,不置为true的话页面离开时会触发取消选择行为 */
  16. hasSelect: false,
  17. onLoad(query) {
  18. const { selectMode = '', isOrderSure = '', id = '' } = query;
  19. this.setData({
  20. isOrderSure: !!isOrderSure,
  21. id,
  22. });
  23. this.selectMode = !!selectMode;
  24. this.init();
  25. },
  26. init() {
  27. this.getAddressList();
  28. },
  29. onUnload() {
  30. if (this.selectMode && !this.hasSelect) {
  31. rejectAddress();
  32. }
  33. },
  34. getAddressList() {
  35. const { id } = this.data;
  36. fetchDeliveryAddressList().then((addressList) => {
  37. addressList.forEach((address) => {
  38. if (address.id === id) {
  39. address.checked = true;
  40. }
  41. });
  42. this.setData({ addressList });
  43. });
  44. },
  45. getWXAddressHandle() {
  46. wx.chooseAddress({
  47. success: (res) => {
  48. if (res.errMsg.indexOf('ok') === -1) {
  49. Toast({
  50. context: this,
  51. selector: '#t-toast',
  52. message: res.errMsg,
  53. icon: '',
  54. duration: 1000,
  55. });
  56. return;
  57. }
  58. Toast({
  59. context: this,
  60. selector: '#t-toast',
  61. message: '添加成功',
  62. icon: '',
  63. duration: 1000,
  64. });
  65. const { length: len } = this.data.addressList;
  66. this.setData({
  67. [`addressList[${len}]`]: {
  68. name: res.userName,
  69. phoneNumber: res.telNumber,
  70. address: `${res.provinceName}${res.cityName}${res.countryName}${res.detailInfo}`,
  71. isDefault: 0,
  72. tag: '微信地址',
  73. id: len,
  74. },
  75. });
  76. },
  77. });
  78. },
  79. confirmDeleteHandle({ detail }) {
  80. const { id } = detail || {};
  81. if (id !== undefined) {
  82. this.setData({ deleteID: id, showDeleteConfirm: true });
  83. Toast({
  84. context: this,
  85. selector: '#t-toast',
  86. message: '地址删除成功',
  87. theme: 'success',
  88. duration: 1000,
  89. });
  90. } else {
  91. Toast({
  92. context: this,
  93. selector: '#t-toast',
  94. message: '需要组件库发新版才能拿到地址ID',
  95. icon: '',
  96. duration: 1000,
  97. });
  98. }
  99. },
  100. deleteAddressHandle(e) {
  101. const { id } = e.currentTarget.dataset;
  102. this.setData({
  103. addressList: this.data.addressList.filter((address) => address.id !== id),
  104. deleteID: '',
  105. showDeleteConfirm: false,
  106. });
  107. },
  108. editAddressHandle({ detail }) {
  109. this.waitForNewAddress();
  110. const { id } = detail || {};
  111. wx.navigateTo({ url: `/pages/user/address/edit/index?id=${id}` });
  112. },
  113. selectHandle({ detail }) {
  114. if (this.selectMode) {
  115. this.hasSelect = true;
  116. resolveAddress(detail);
  117. wx.navigateBack({ delta: 1 });
  118. } else {
  119. this.editAddressHandle({ detail });
  120. }
  121. },
  122. createHandle() {
  123. this.waitForNewAddress();
  124. wx.navigateTo({ url: '/pages/user/address/edit/index' });
  125. },
  126. waitForNewAddress() {
  127. getAddressPromise()
  128. .then((newAddress) => {
  129. let addressList = [...this.data.addressList];
  130. newAddress.phoneNumber = newAddress.phone;
  131. newAddress.address = `${newAddress.provinceName}${newAddress.cityName}${newAddress.districtName}${newAddress.detailAddress}`;
  132. newAddress.tag = newAddress.addressTag;
  133. if (!newAddress.addressId) {
  134. newAddress.id = `${addressList.length}`;
  135. newAddress.addressId = `${addressList.length}`;
  136. if (newAddress.isDefault === 1) {
  137. addressList = addressList.map((address) => {
  138. address.isDefault = 0;
  139. return address;
  140. });
  141. } else {
  142. newAddress.isDefault = 0;
  143. }
  144. addressList.push(newAddress);
  145. } else {
  146. addressList = addressList.map((address) => {
  147. if (address.addressId === newAddress.addressId) {
  148. return newAddress;
  149. }
  150. return address;
  151. });
  152. }
  153. addressList.sort((prevAddress, nextAddress) => {
  154. if (prevAddress.isDefault && !nextAddress.isDefault) {
  155. return -1;
  156. }
  157. if (!prevAddress.isDefault && nextAddress.isDefault) {
  158. return 1;
  159. }
  160. return 0;
  161. });
  162. this.setData({
  163. addressList: addressList,
  164. });
  165. })
  166. .catch((e) => {
  167. if (e.message !== 'cancel') {
  168. Toast({
  169. context: this,
  170. selector: '#t-toast',
  171. message: '地址编辑发生错误',
  172. icon: '',
  173. duration: 1000,
  174. });
  175. }
  176. });
  177. },
  178. });