addressAdd.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. var util = require('../../../utils/util.js');
  2. var api = require('../../../config/api.js');
  3. var check = require('../../../utils/check.js');
  4. var app = getApp();
  5. Page({
  6. data: {
  7. address: {
  8. id: 0,
  9. provinceId: 0,
  10. cityId: 0,
  11. areaId: 0,
  12. address: '',
  13. name: '',
  14. mobile: '',
  15. isDefault: 0,
  16. provinceName: '',
  17. cityName: '',
  18. areaName: ''
  19. },
  20. addressId: 0,
  21. openSelectRegion: false,
  22. selectRegionList: [{
  23. id: 0,
  24. name: '省份',
  25. pid: 1,
  26. type: 1
  27. },
  28. {
  29. id: 0,
  30. name: '城市',
  31. pid: 1,
  32. type: 2
  33. },
  34. {
  35. id: 0,
  36. name: '区县',
  37. pid: 1,
  38. type: 3
  39. }
  40. ],
  41. regionType: 1,
  42. regionList: [],
  43. selectRegionDone: false
  44. },
  45. bindinputMobile(event) {
  46. let address = this.data.address;
  47. address.mobile = event.detail.value;
  48. this.setData({
  49. address: address
  50. });
  51. },
  52. bindinputName(event) {
  53. let address = this.data.address;
  54. address.name = event.detail.value;
  55. this.setData({
  56. address: address
  57. });
  58. },
  59. bindinputAddress(event) {
  60. let address = this.data.address;
  61. address.address = event.detail.value;
  62. this.setData({
  63. address: address
  64. });
  65. },
  66. bindIsDefault() {
  67. let address = this.data.address;
  68. address.isDefault = !address.isDefault;
  69. this.setData({
  70. address: address
  71. });
  72. },
  73. getAddressDetail() {
  74. let that = this;
  75. util.request(api.AddressDetail, {
  76. id: that.data.addressId
  77. }).then(function(res) {
  78. if (res.errno === 0) {
  79. if (res.data) {
  80. that.setData({
  81. address: res.data
  82. });
  83. }
  84. }
  85. });
  86. },
  87. setRegionDoneStatus() {
  88. let that = this;
  89. let doneStatus = that.data.selectRegionList.every(item => {
  90. return item.id != 0;
  91. });
  92. that.setData({
  93. selectRegionDone: doneStatus
  94. })
  95. },
  96. chooseRegion() {
  97. let that = this;
  98. this.setData({
  99. openSelectRegion: !this.data.openSelectRegion
  100. });
  101. //设置区域选择数据
  102. let address = this.data.address;
  103. if (address.provinceId > 0 && address.cityId > 0 && address.areaId > 0) {
  104. let selectRegionList = this.data.selectRegionList;
  105. selectRegionList[0].id = address.provinceId;
  106. selectRegionList[0].name = address.provinceName;
  107. selectRegionList[0].pid = 0;
  108. selectRegionList[1].id = address.cityId;
  109. selectRegionList[1].name = address.cityName;
  110. selectRegionList[1].pid = address.provinceId;
  111. selectRegionList[2].id = address.areaId;
  112. selectRegionList[2].name = address.areaName;
  113. selectRegionList[2].pid = address.cityId;
  114. this.setData({
  115. selectRegionList: selectRegionList,
  116. regionType: 3
  117. });
  118. this.getRegionList(address.cityId);
  119. } else {
  120. this.setData({
  121. selectRegionList: [{
  122. id: 0,
  123. name: '省份',
  124. pid: 0,
  125. type: 1
  126. },
  127. {
  128. id: 0,
  129. name: '城市',
  130. pid: 0,
  131. type: 2
  132. },
  133. {
  134. id: 0,
  135. name: '区县',
  136. pid: 0,
  137. type: 3
  138. }
  139. ],
  140. regionType: 1
  141. })
  142. this.getRegionList(0);
  143. }
  144. this.setRegionDoneStatus();
  145. },
  146. onLoad: function(options) {
  147. // 页面初始化 options为页面跳转所带来的参数
  148. console.log(options)
  149. if (options.id && options.id != 0) {
  150. this.setData({
  151. addressId: options.id
  152. });
  153. this.getAddressDetail();
  154. }
  155. },
  156. onReady: function() {
  157. },
  158. selectRegionType(event) {
  159. let that = this;
  160. let regionTypeIndex = event.target.dataset.regionTypeIndex;
  161. let selectRegionList = that.data.selectRegionList;
  162. //判断是否可点击
  163. if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].id <= 0)) {
  164. return false;
  165. }
  166. this.setData({
  167. regionType: regionTypeIndex + 1
  168. })
  169. let selectRegionItem = selectRegionList[regionTypeIndex];
  170. this.getRegionList(selectRegionItem.pid);
  171. this.setRegionDoneStatus();
  172. },
  173. selectRegion(event) {
  174. let that = this;
  175. let regionIndex = event.target.dataset.regionIndex;
  176. let regionItem = this.data.regionList[regionIndex];
  177. let regionType = regionItem.type;
  178. let selectRegionList = this.data.selectRegionList;
  179. selectRegionList[regionType - 1] = regionItem;
  180. if (regionType != 3) {
  181. this.setData({
  182. selectRegionList: selectRegionList,
  183. regionType: regionType + 1
  184. })
  185. this.getRegionList(regionItem.id);
  186. } else {
  187. this.setData({
  188. selectRegionList: selectRegionList
  189. })
  190. }
  191. //重置下级区域为空
  192. selectRegionList.map((item, index) => {
  193. if (index > regionType - 1) {
  194. item.id = 0;
  195. item.name = index == 1 ? '城市' : '区县';
  196. item.pid = 0;
  197. }
  198. return item;
  199. });
  200. this.setData({
  201. selectRegionList: selectRegionList
  202. })
  203. that.setData({
  204. regionList: that.data.regionList.map(item => {
  205. //标记已选择的
  206. if (that.data.regionType == item.type && that.data.selectRegionList[that.data.regionType - 1].id == item.id) {
  207. item.selected = true;
  208. } else {
  209. item.selected = false;
  210. }
  211. return item;
  212. })
  213. });
  214. this.setRegionDoneStatus();
  215. },
  216. doneSelectRegion() {
  217. if (this.data.selectRegionDone === false) {
  218. return false;
  219. }
  220. let address = this.data.address;
  221. let selectRegionList = this.data.selectRegionList;
  222. address.provinceId = selectRegionList[0].id;
  223. address.cityId = selectRegionList[1].id;
  224. address.areaId = selectRegionList[2].id;
  225. address.provinceName = selectRegionList[0].name;
  226. address.cityName = selectRegionList[1].name;
  227. address.areaName = selectRegionList[2].name;
  228. this.setData({
  229. address: address,
  230. openSelectRegion: false
  231. });
  232. },
  233. cancelSelectRegion() {
  234. this.setData({
  235. openSelectRegion: false,
  236. regionType: this.data.regionDoneStatus ? 3 : 1
  237. });
  238. },
  239. getRegionList(regionId) {
  240. let that = this;
  241. let regionType = that.data.regionType;
  242. util.request(api.RegionList, {
  243. pid: regionId
  244. }).then(function(res) {
  245. if (res.errno === 0) {
  246. that.setData({
  247. regionList: res.data.map(item => {
  248. //标记已选择的
  249. if (regionType == item.type && that.data.selectRegionList[regionType - 1].id == item.id) {
  250. item.selected = true;
  251. } else {
  252. item.selected = false;
  253. }
  254. return item;
  255. })
  256. });
  257. }
  258. });
  259. },
  260. cancelAddress() {
  261. wx.navigateBack();
  262. },
  263. saveAddress() {
  264. console.log(this.data.address)
  265. let address = this.data.address;
  266. if (address.name == '') {
  267. util.showErrorToast('请输入姓名');
  268. return false;
  269. }
  270. if (address.mobile == '') {
  271. util.showErrorToast('请输入手机号码');
  272. return false;
  273. }
  274. if (address.areaId == 0) {
  275. util.showErrorToast('请输入省市区');
  276. return false;
  277. }
  278. if (address.address == '') {
  279. util.showErrorToast('请输入详细地址');
  280. return false;
  281. }
  282. if (!check.isValidPhone(address.mobile)) {
  283. util.showErrorToast('手机号不正确');
  284. return false;
  285. }
  286. let that = this;
  287. util.request(api.AddressSave, {
  288. id: address.id,
  289. name: address.name,
  290. mobile: address.mobile,
  291. provinceId: address.provinceId,
  292. cityId: address.cityId,
  293. areaId: address.areaId,
  294. address: address.address,
  295. isDefault: address.isDefault
  296. }, 'POST').then(function(res) {
  297. if (res.errno === 0) {
  298. //返回之前,先取出上一页对象,并设置addressId
  299. var pages = getCurrentPages();
  300. var prevPage = pages[pages.length - 2];
  301. console.log(prevPage);
  302. if (prevPage.route == "pages/checkout/checkout") {
  303. prevPage.setData({
  304. addressId: res.data
  305. })
  306. try {
  307. wx.setStorageSync('addressId', res.data);
  308. } catch (e) {
  309. }
  310. console.log("set address");
  311. }
  312. wx.navigateBack();
  313. }
  314. });
  315. },
  316. onShow: function() {
  317. // 页面显示
  318. },
  319. onHide: function() {
  320. // 页面隐藏
  321. },
  322. onUnload: function() {
  323. // 页面关闭
  324. }
  325. })