1
0

addressAdd.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. var util = require('../../../utils/util.js');
  2. var api = require('../../../config/api.js');
  3. // 引入SDK核心类
  4. var QQMapWX = require('../../../lib/qqmap/qqmap-wx-jssdk.js');
  5. // https://apis.map.qq.com
  6. var app = getApp();
  7. // 实例化API核心类
  8. var qqMap = new QQMapWX({
  9. key: 'BNVBZ-U7RHQ-UUM5Q-GLW6J-SOKSZ-4GBDL' // 必填
  10. });
  11. Page({
  12. data: {
  13. address: {
  14. id: 0,
  15. provinceName: '',
  16. cityName: '',
  17. countyName: '',
  18. provinceId: 0,
  19. cityId: 0,
  20. countyId: 0,
  21. detailInfo: '',
  22. userName: '',
  23. telNumber: '',
  24. isDefault: 0
  25. },
  26. addressId: 0,
  27. openSelectRegion: false,
  28. selectRegionList: [
  29. { id: 0, name: '省份', parent_id: 1, type: 1 },
  30. { id: 0, name: '城市', parent_id: 1, type: 2 },
  31. { id: 0, name: '区县', parent_id: 1, type: 3 }
  32. ],
  33. regionType: 1,
  34. regionList: [],
  35. selectRegionDone: false
  36. },
  37. bindinputTelNumber(event) {
  38. let address = this.data.address;
  39. address.telNumber = event.detail.value;
  40. this.setData({
  41. address: address
  42. });
  43. },
  44. bindinputDetailInfo(event) {
  45. let address = this.data.address;
  46. address.detailInfo = event.detail.value;
  47. this.setData({
  48. address: address
  49. });
  50. },
  51. bindinputUserName(event) {
  52. let address = this.data.address;
  53. address.userName = event.detail.value;
  54. this.setData({
  55. address: address
  56. });
  57. },
  58. bindIsDefault() {
  59. let address = this.data.address;
  60. address.isDefault = !address.isDefault;
  61. this.setData({
  62. address: address
  63. });
  64. },
  65. getAddressDetail() {
  66. let that = this;
  67. util.request(api.AddressDetail, { id: that.data.addressId }).then(function (res) {
  68. if (res.errno === 0 && null != res.data) {
  69. that.setData({
  70. address: res.data
  71. });
  72. }
  73. that.getRegionList(1);
  74. that.initRegion();
  75. });
  76. },
  77. setRegionDoneStatus() {
  78. let that = this;
  79. let doneStatus = that.data.selectRegionList.every(item => {
  80. return item.id != 0;
  81. });
  82. that.setData({
  83. selectRegionDone: doneStatus
  84. })
  85. },
  86. chooseRegion() {
  87. let that = this;
  88. that.setData({
  89. openSelectRegion: !that.data.openSelectRegion
  90. });
  91. console.log(that.data.openSelectRegion);
  92. //设置区域选择数据
  93. let address = that.data.address;
  94. console.log(address);
  95. if (address.provinceId > 0 && address.cityId > 0 && address.countyId > 0) {
  96. let selectRegionList = that.data.selectRegionList;
  97. selectRegionList[0].id = address.provinceId;
  98. selectRegionList[0].name = address.provinceName;
  99. selectRegionList[0].parent_id = 1;
  100. selectRegionList[1].id = address.cityId;
  101. selectRegionList[1].name = address.cityName;
  102. selectRegionList[1].parent_id = address.provinceId;
  103. selectRegionList[2].id = address.countyId;
  104. selectRegionList[2].name = address.countyName;
  105. selectRegionList[2].parent_id = address.cityId;
  106. that.setData({
  107. selectRegionList: selectRegionList,
  108. regionType: 3
  109. });
  110. that.getRegionList(address.cityId);
  111. } else {
  112. that.setData({
  113. selectRegionList: [
  114. { id: 0, name: '省份', parent_id: 1, type: 1 },
  115. { id: 0, name: '城市', parent_id: 1, type: 2 },
  116. { id: 0, name: '区县', parent_id: 1, type: 3 }
  117. ],
  118. regionType: 1
  119. })
  120. that.getRegionList(1);
  121. }
  122. that.setRegionDoneStatus();
  123. },
  124. onLoad: function (options) {
  125. // 页面初始化 options为页面跳转所带来的参数
  126. console.log(options)
  127. if (options.id) {
  128. this.setData({
  129. addressId: options.id
  130. });
  131. this.getAddressDetail();
  132. }
  133. this.getRegionList(1);
  134. this.initRegion();
  135. },
  136. onReady: function () {
  137. },
  138. selectRegionType(event) {
  139. let that = this;
  140. let regionTypeIndex = event.target.dataset.regionTypeIndex;
  141. let selectRegionList = that.data.selectRegionList;
  142. //判断是否可点击
  143. if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].id <= 0)) {
  144. return false;
  145. }
  146. this.setData({
  147. regionType: regionTypeIndex + 1
  148. })
  149. let selectRegionItem = selectRegionList[regionTypeIndex];
  150. this.getRegionList(selectRegionItem.parent_id);
  151. this.setRegionDoneStatus();
  152. },
  153. selectRegion(event) {
  154. let that = this;
  155. let regionIndex = event.target.dataset.regionIndex;
  156. let regionItem = this.data.regionList[regionIndex];
  157. let regionType = regionItem.type;
  158. let selectRegionList = this.data.selectRegionList;
  159. selectRegionList[regionType - 1] = regionItem;
  160. if (regionType != 3) {
  161. this.setData({
  162. selectRegionList: selectRegionList,
  163. regionType: regionType + 1
  164. })
  165. this.getRegionList(regionItem.id);
  166. } else {
  167. this.setData({
  168. selectRegionList: selectRegionList
  169. })
  170. }
  171. //重置下级区域为空
  172. selectRegionList.map((item, index) => {
  173. if (index > regionType - 1) {
  174. item.id = 0;
  175. item.name = index == 1 ? '城市' : '区县';
  176. item.parent_id = 0;
  177. }
  178. return item;
  179. });
  180. this.setData({
  181. selectRegionList: selectRegionList
  182. })
  183. that.setData({
  184. regionList: that.data.regionList.map(item => {
  185. //标记已选择的
  186. if (that.data.regionType == item.type && that.data.selectRegionList[that.data.regionType - 1].id == item.id) {
  187. item.selected = true;
  188. } else {
  189. item.selected = false;
  190. }
  191. return item;
  192. })
  193. });
  194. this.setRegionDoneStatus();
  195. },
  196. doneSelectRegion() {
  197. if (this.data.selectRegionDone === false) {
  198. return false;
  199. }
  200. let address = this.data.address;
  201. let selectRegionList = this.data.selectRegionList;
  202. address.provinceId = selectRegionList[0].id;
  203. address.cityId = selectRegionList[1].id;
  204. address.countyId = selectRegionList[2].id;
  205. address.provinceName = selectRegionList[0].name;
  206. address.cityName = selectRegionList[1].name;
  207. address.countyName = selectRegionList[2].name;
  208. address.full_region = selectRegionList.map(item => {
  209. return item.name;
  210. }).join('');
  211. this.setData({
  212. address: address,
  213. openSelectRegion: false
  214. });
  215. },
  216. cancelSelectRegion() {
  217. this.setData({
  218. openSelectRegion: false,
  219. regionType: this.data.regionDoneStatus ? 3 : 1
  220. });
  221. },
  222. getRegionList(regionId) {
  223. let that = this;
  224. let regionType = that.data.regionType;
  225. util.request(api.RegionList, { parentId: regionId }).then(function (res) {
  226. if (res.errno === 0) {
  227. that.setData({
  228. regionList: res.data.map(item => {
  229. //标记已选择的
  230. if (regionType == item.type && that.data.selectRegionList[regionType - 1].id == item.id) {
  231. item.selected = true;
  232. } else {
  233. item.selected = false;
  234. }
  235. return item;
  236. })
  237. });
  238. }
  239. });
  240. },
  241. cancelAddress() {
  242. wx.navigateBack({})
  243. },
  244. saveAddress() {
  245. console.log(this.data.address)
  246. let address = this.data.address;
  247. if (address.userName == '') {
  248. util.showErrorToast('请输入姓名');
  249. return false;
  250. }
  251. if (address.telNumber == '') {
  252. util.showErrorToast('请输入手机号码');
  253. return false;
  254. }
  255. if (address.countyName == 0) {
  256. util.showErrorToast('请输入省市区');
  257. return false;
  258. }
  259. if (address.detailInfo == '') {
  260. util.showErrorToast('请输入详细地址');
  261. return false;
  262. }
  263. if (!(/^1[34578]\d{9}$/.test(address.telNumber)) || address.telNumber.length != 11) {
  264. util.showErrorToast('手机号有误');
  265. return false;
  266. }
  267. let that = this;
  268. util.request(api.AddressSave, {
  269. id: address.id,
  270. userName: address.userName,
  271. telNumber: address.telNumber,
  272. provinceName: address.provinceName,
  273. cityName: address.cityName,
  274. countyName: address.countyName,
  275. detailInfo: address.detailInfo,
  276. isDefault: address.isDefault,
  277. latitude: address.latitude,
  278. longitude: address.longitude,
  279. }, 'POST').then(function (res) {
  280. if (res.errno === 0) {
  281. wx.navigateTo({
  282. url: '/pages/ucenter/address/address',
  283. })
  284. }else{
  285. util.showErrorToast(res.errmsg);
  286. }
  287. });
  288. },
  289. onShow: function () {
  290. // 页面显示
  291. },
  292. onHide: function () {
  293. // 页面隐藏
  294. },
  295. onUnload: function () {
  296. // 页面关闭
  297. },
  298. /**
  299. * 初始化省市区
  300. */
  301. initRegion() {
  302. let that = this;
  303. if (null == that.data.addressId || that.data.addressId == 0) {
  304. wx.getFuzzyLocation({
  305. success: function (res) {
  306. console.log(res)
  307. // 调用接口
  308. qqMap.reverseGeocoder({
  309. location: {
  310. latitude: res.latitude,
  311. longitude: res.longitude
  312. },
  313. success: function (rs) {
  314. console.log(rs);
  315. let address = that.data.address;
  316. let selectRegionList = that.data.selectRegionList;
  317. if (rs.result){
  318. selectRegionList[0].id = rs.result.address_component.province;
  319. selectRegionList[0].name = rs.result.address_component.province;
  320. selectRegionList[0].parent_id = 1;
  321. selectRegionList[1].id = rs.result.address_component.city;
  322. selectRegionList[1].name = rs.result.address_component.city;
  323. selectRegionList[1].parent_id = rs.result.address_component.province;
  324. selectRegionList[2].id = rs.result.address_component.district;
  325. selectRegionList[2].name = rs.result.address_component.district;
  326. selectRegionList[2].parent_id = rs.result.address_component.city;
  327. address.provinceName = rs.result.address_component.province;
  328. address.cityName = rs.result.address_component.city;
  329. address.countyName = rs.result.address_component.district;
  330. address.full_region = address.provinceName + address.cityName + address.countyName;
  331. that.setData({
  332. address: address,
  333. selectRegionList: selectRegionList
  334. });
  335. that.getRegionList(1);
  336. }
  337. },
  338. fail: function (rs) {
  339. console.log(rs);
  340. },
  341. complete: function (rs) {
  342. console.log(rs);
  343. }
  344. });
  345. }
  346. })
  347. } else {
  348. let address = that.data.address;
  349. let selectRegionList = that.data.selectRegionList;
  350. selectRegionList[0].id = address.provinceId;
  351. selectRegionList[0].name = address.provinceName;
  352. selectRegionList[0].parent_id = 1;
  353. selectRegionList[1].id = address.cityId;
  354. selectRegionList[1].name = address.cityName;
  355. selectRegionList[1].parent_id = address.provinceId;
  356. selectRegionList[2].id = address.countyId;
  357. selectRegionList[2].name = address.countyName;
  358. selectRegionList[2].parent_id = address.cityId;
  359. address.full_region = address.provinceName + address.cityName + address.countyName;
  360. that.setData({
  361. address: address,
  362. selectRegionList: selectRegionList
  363. });
  364. that.getRegionList(1);
  365. }
  366. },
  367. bingAddressTap: function () {
  368. var that = this;
  369. wx.chooseLocation({
  370. success: function (res) {
  371. // console.log("res:" + res);
  372. let address = that.data.address;
  373. if(null==res.latitude){
  374. return;
  375. }
  376. // 解析省市区
  377. var regex = /^(北京市|天津市|重庆市|上海市|香港特别行政区|澳门特别行政区)/;
  378. let province = [];
  379. if (!(province = regex.exec(res.address))) {
  380. regex = /^(.*?(省|自治区))(.*?)$/;
  381. province = regex.exec(res.address);
  382. if (province != null) {
  383. address.provinceName = province[1];
  384. // console.log("试试:" + province[3]);
  385. // console.log("试试:" + res.name);
  386. // console.log(address);
  387. address = that.regexAddress(province[3], address, res.name);
  388. }else{
  389. wx.showToast({
  390. title: '收货地址请详细区县/区镇',
  391. icon: 'none'
  392. })
  393. }
  394. } else {
  395. address.provinceName = province[1];
  396. address = that.regexAddress(res.address, address, res.name);
  397. }
  398. console.log(address);
  399. address.full_region = address.provinceName + address.cityName + address.countyName;
  400. address.latitude = res.latitude;
  401. address.longitude = res.longitude;
  402. that.setData({
  403. address: address
  404. });
  405. }
  406. })
  407. },
  408. regexAddress: function (address, addressBean, name) {
  409. // var regex = /^(.*?[市州]|.*?地区|.*?特别行政区)(.*?[市区县])(.*?)$/g;
  410. var regex = /^(.*?[市州]|.*?地区|.*?特别行政区.*?区|.+盟|市辖区|.*?市|.*?县)(.*?[市区县]|.*?镇|.+海域|.+岛|.*?街|.*?路|.*?道)(.*?)$/g;
  411. // var regex = /^(.*?)(.*?)(.*?)$/g;
  412. var addxress = regex.exec(address);
  413. if (addxress != null) {
  414. addressBean.cityName = addxress[1];
  415. addressBean.countyName = addxress[2];
  416. addressBean.detailInfo = addxress[3] + "(" + name + ")";
  417. }
  418. return addressBean;
  419. }
  420. })