manage-address.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import PageContainerBehavior from "../../../../core/behavior/page-container.behavior";
  2. import tickleBehavior, {
  3. getTickleContext,
  4. } from "../../../../core/behavior/tickle.behavior";
  5. import { getAddressListMethod, orderPayAddressMethod } from "../../request";
  6. // module/diet/pages/delivery-address/delivery-address.ts
  7. Page({
  8. behaviors: [PageContainerBehavior, tickleBehavior],
  9. properties: {},
  10. data: {
  11. addressList: [], // 当前展示的列表
  12. allAddressList: [], // 原始完整列表
  13. selectedIndex: -1,
  14. searchValue: "",
  15. noResult: false, // 新增
  16. type: "",
  17. orderId: "",
  18. },
  19. onLoad(options: any) {
  20. if (options.type) {
  21. this.setData({ type: options.type });
  22. wx.setStorageSync("type", options.type);
  23. }
  24. if (options.orderId) {
  25. this.setData({ orderId: options.orderId });
  26. wx.setStorageSync("orderId", options.orderId);
  27. }
  28. },
  29. // 更新订单地址
  30. async updataOrderAddress(id: string, address: any) {
  31. const data = {
  32. provinceName: address.provinceName,
  33. provinceCode: address.provinceCode,
  34. cityName: address.cityName,
  35. cityCode: address.cityCode,
  36. areaName: address.areaName,
  37. areaCode: address.areaCode,
  38. detailAddress: address.detailAddress,
  39. liaison: address.liaison,
  40. phone: address.phone,
  41. };
  42. await orderPayAddressMethod(id, data);
  43. },
  44. // 选择地址
  45. async selectAddress(e: any) {
  46. const item = e.currentTarget.dataset.item;
  47. const type = wx.getStorageSync("type");
  48. const orderId = wx.getStorageSync("orderId");
  49. const pages = getCurrentPages();
  50. const findTargetPageIndex = (targetRoute: string) => {
  51. for (let i = pages.length - 1; i >= 0; i--) {
  52. if (pages[i].route === targetRoute) {
  53. return pages.length - 1 - i; // 需要返回的层级数
  54. }
  55. }
  56. return -1;
  57. };
  58. if (type === "orderDetail") {
  59. // 订单详情 切换地址
  60. try {
  61. await this.updataOrderAddress(orderId, item);
  62. const targetRoute = "module/order/pages/order-detail/order-detail";
  63. const delta = findTargetPageIndex(targetRoute);
  64. if (delta > 0) {
  65. // 返回到目标页面
  66. wx.navigateBack({ delta });
  67. } else {
  68. // 如果找不到目标页面,返回到上一页
  69. wx.navigateBack();
  70. }
  71. } catch (error: any) {
  72. getTickleContext.call(this).showWarnMessage(error.errMsg);
  73. }
  74. } else if (type === "orderList") {
  75. // 订单列表 切换地址
  76. try {
  77. await this.updataOrderAddress(orderId, item);
  78. const targetRoute = "module/article/pages/order-list/order-list";
  79. const delta = findTargetPageIndex(targetRoute);
  80. if (delta > 0) {
  81. wx.navigateBack({ delta });
  82. } else {
  83. wx.navigateBack();
  84. }
  85. } catch (error: any) {
  86. getTickleContext.call(this).showWarnMessage(error.errMsg);
  87. }
  88. } else if (type === "confirmeOrder") {
  89. wx.setStorageSync('selectedAddress', item);
  90. // 确认订单页面 切换地址
  91. const confirmeOrderPage = pages.find(
  92. (page: any) =>
  93. page.route === "module/order/pages/confirme-order/confirme-order"
  94. );
  95. if (confirmeOrderPage) {
  96. wx.redirectTo({
  97. url: "/" + confirmeOrderPage.route + "?isDefault=1",
  98. });
  99. }
  100. } else {
  101. // 其他页面 切换地址
  102. }
  103. },
  104. // 搜索
  105. onSearchChange(e: any) {
  106. const keyword = (e.detail.value || "").trim().toLowerCase();
  107. const allList = this.data.allAddressList || [];
  108. if (!keyword) {
  109. this.setData({ addressList: allList, noResult: false });
  110. return;
  111. }
  112. const filtered = allList.filter(
  113. (item: any) =>
  114. (item.liaison || "").toLowerCase().includes(keyword) ||
  115. (item.phone || "").toLowerCase().includes(keyword) ||
  116. (item.fullAddress || "").toLowerCase().includes(keyword)
  117. );
  118. this.setData({
  119. addressList: filtered,
  120. noResult: filtered.length === 0,
  121. });
  122. },
  123. // 编辑地址
  124. onEdit(e: any) {
  125. const id = e.currentTarget.dataset.id;
  126. // 跳转编辑
  127. wx.navigateTo({
  128. url: `/module/article/pages/add-address/add-address?id=${id}&type=${this.data.type} `,
  129. });
  130. },
  131. // 新增地址
  132. onAddress() {
  133. // 新增地址逻辑
  134. wx.navigateTo({
  135. url:
  136. "/module/article/pages/add-address/add-address?type=" + this.data.type,
  137. });
  138. },
  139. async load() {
  140. wx.showLoading({ title: "加载中" });
  141. try {
  142. // 获取所有的地址列表
  143. const res = await getAddressListMethod("", "");
  144. if (res && res.length > 0) {
  145. res.forEach((item: any) => {
  146. item.fullAddress = `${item.provinceName} ${item.cityName} ${item.areaName} ${item.detailAddress}`;
  147. item.tag = item.tagList[0] || "";
  148. });
  149. this.setData({
  150. noResult: false,
  151. addressList: res, // 当前展示
  152. allAddressList: res, // 原始
  153. });
  154. } else {
  155. this.setData({
  156. noResult: true,
  157. addressList: [],
  158. allAddressList: [],
  159. });
  160. }
  161. } catch (error: any) {
  162. getTickleContext.call(this).showWarnMessage(error.errMsg);
  163. }
  164. wx.hideLoading();
  165. },
  166. // 导入微信地址
  167. onImportWechatAddress() {
  168. wx.chooseAddress({
  169. success: (res) => {
  170. // 拼接参数
  171. const params = encodeURIComponent(
  172. JSON.stringify({
  173. liaison: res.userName,
  174. phone: res.telNumber,
  175. region:
  176. res.provinceName + " " + res.cityName + " " + res.countyName,
  177. provinceName: res.provinceName,
  178. cityName: res.cityName,
  179. areaName: res.countyName,
  180. detailAddress: res.detailInfoNew,
  181. })
  182. );
  183. wx.navigateTo({
  184. url: `/module/article/pages/add-address/add-address?imported=${params}`,
  185. });
  186. },
  187. fail: () => {
  188. wx.showToast({ title: "导入失败或用户取消", icon: "none" });
  189. },
  190. });
  191. },
  192. onShow() {
  193. // 加载地址列表
  194. this.load();
  195. },
  196. });