1
0

addressAdd.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  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. this.setData({
  89. openSelectRegion: !this.data.openSelectRegion
  90. });
  91. //设置区域选择数据
  92. let address = this.data.address;
  93. if (address.provinceId > 0 && address.cityId > 0 && address.countyId > 0) {
  94. let selectRegionList = this.data.selectRegionList;
  95. selectRegionList[0].id = address.provinceId;
  96. selectRegionList[0].name = address.provinceName;
  97. selectRegionList[0].parent_id = 1;
  98. selectRegionList[1].id = address.cityId;
  99. selectRegionList[1].name = address.cityName;
  100. selectRegionList[1].parent_id = address.provinceId;
  101. selectRegionList[2].id = address.countyId;
  102. selectRegionList[2].name = address.countyName;
  103. selectRegionList[2].parent_id = address.cityId;
  104. this.setData({
  105. selectRegionList: selectRegionList,
  106. regionType: 3
  107. });
  108. this.getRegionList(address.cityId);
  109. } else {
  110. this.setData({
  111. selectRegionList: [
  112. { id: 0, name: '省份', parent_id: 1, type: 1 },
  113. { id: 0, name: '城市', parent_id: 1, type: 2 },
  114. { id: 0, name: '区县', parent_id: 1, type: 3 }
  115. ],
  116. regionType: 1
  117. })
  118. this.getRegionList(1);
  119. }
  120. this.setRegionDoneStatus();
  121. },
  122. onLoad: function (options) {
  123. // 页面初始化 options为页面跳转所带来的参数
  124. console.log(options)
  125. if (options.id) {
  126. this.setData({
  127. addressId: options.id
  128. });
  129. this.getAddressDetail();
  130. }
  131. this.getRegionList(1);
  132. this.initRegion();
  133. },
  134. onReady: function () {
  135. },
  136. selectRegionType(event) {
  137. let that = this;
  138. let regionTypeIndex = event.target.dataset.regionTypeIndex;
  139. let selectRegionList = that.data.selectRegionList;
  140. //判断是否可点击
  141. if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].id <= 0)) {
  142. return false;
  143. }
  144. this.setData({
  145. regionType: regionTypeIndex + 1
  146. })
  147. let selectRegionItem = selectRegionList[regionTypeIndex];
  148. this.getRegionList(selectRegionItem.parent_id);
  149. this.setRegionDoneStatus();
  150. },
  151. selectRegion(event) {
  152. let that = this;
  153. let regionIndex = event.target.dataset.regionIndex;
  154. let regionItem = this.data.regionList[regionIndex];
  155. let regionType = regionItem.type;
  156. let selectRegionList = this.data.selectRegionList;
  157. selectRegionList[regionType - 1] = regionItem;
  158. if (regionType != 3) {
  159. this.setData({
  160. selectRegionList: selectRegionList,
  161. regionType: regionType + 1
  162. })
  163. this.getRegionList(regionItem.id);
  164. } else {
  165. this.setData({
  166. selectRegionList: selectRegionList
  167. })
  168. }
  169. //重置下级区域为空
  170. selectRegionList.map((item, index) => {
  171. if (index > regionType - 1) {
  172. item.id = 0;
  173. item.name = index == 1 ? '城市' : '区县';
  174. item.parent_id = 0;
  175. }
  176. return item;
  177. });
  178. this.setData({
  179. selectRegionList: selectRegionList
  180. })
  181. that.setData({
  182. regionList: that.data.regionList.map(item => {
  183. //标记已选择的
  184. if (that.data.regionType == item.type && that.data.selectRegionList[that.data.regionType - 1].id == item.id) {
  185. item.selected = true;
  186. } else {
  187. item.selected = false;
  188. }
  189. return item;
  190. })
  191. });
  192. this.setRegionDoneStatus();
  193. },
  194. doneSelectRegion() {
  195. if (this.data.selectRegionDone === false) {
  196. return false;
  197. }
  198. let address = this.data.address;
  199. let selectRegionList = this.data.selectRegionList;
  200. address.provinceId = selectRegionList[0].id;
  201. address.cityId = selectRegionList[1].id;
  202. address.countyId = selectRegionList[2].id;
  203. address.provinceName = selectRegionList[0].name;
  204. address.cityName = selectRegionList[1].name;
  205. address.countyName = selectRegionList[2].name;
  206. address.full_region = selectRegionList.map(item => {
  207. return item.name;
  208. }).join('');
  209. this.setData({
  210. address: address,
  211. openSelectRegion: false
  212. });
  213. },
  214. cancelSelectRegion() {
  215. this.setData({
  216. openSelectRegion: false,
  217. regionType: this.data.regionDoneStatus ? 3 : 1
  218. });
  219. },
  220. getRegionList(regionId) {
  221. let that = this;
  222. let regionType = that.data.regionType;
  223. util.request(api.RegionList, { parentId: regionId }).then(function (res) {
  224. if (res.errno === 0) {
  225. that.setData({
  226. regionList: res.data.map(item => {
  227. //标记已选择的
  228. if (regionType == item.type && that.data.selectRegionList[regionType - 1].id == item.id) {
  229. item.selected = true;
  230. } else {
  231. item.selected = false;
  232. }
  233. return item;
  234. })
  235. });
  236. }
  237. });
  238. },
  239. cancelAddress() {
  240. wx.navigateBack({})
  241. },
  242. saveAddress() {
  243. console.log(this.data.address)
  244. let address = this.data.address;
  245. if (address.userName == '') {
  246. util.showErrorToast('请输入姓名');
  247. return false;
  248. }
  249. if (address.telNumber == '') {
  250. util.showErrorToast('请输入手机号码');
  251. return false;
  252. }
  253. if (address.countyName == 0) {
  254. util.showErrorToast('请输入省市区');
  255. return false;
  256. }
  257. if (address.detailInfo == '') {
  258. util.showErrorToast('请输入详细地址');
  259. return false;
  260. }
  261. let regular = /^1[3|4|5|7|8]\d{9}$/;
  262. if (!regular.test(address.telNumber)) {
  263. util.showErrorToast('手机格式不正确')
  264. return false;
  265. }
  266. let that = this;
  267. util.request(api.AddressSave, {
  268. id: address.id,
  269. userName: address.userName,
  270. telNumber: address.telNumber,
  271. provinceName: address.provinceName,
  272. cityName: address.cityName,
  273. countyName: address.countyName,
  274. detailInfo: address.detailInfo,
  275. isDefault: address.isDefault,
  276. latitude: address.latitude,
  277. longitude: address.longitude,
  278. }, 'POST').then(function (res) {
  279. if (res.errno === 0) {
  280. var pages = getCurrentPages();
  281. var currPage = pages[pages.length - 1];  //当前页面
  282. var prevPage = pages[pages.length - 2]; //上一个页面
  283. wx.navigateBack();
  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. selectRegionList[0].id = rs.result.address_component.province;
  318. selectRegionList[0].name = rs.result.address_component.province;
  319. selectRegionList[0].parent_id = 1;
  320. selectRegionList[1].id = rs.result.address_component.city;
  321. selectRegionList[1].name = rs.result.address_component.city;
  322. selectRegionList[1].parent_id = rs.result.address_component.province;
  323. selectRegionList[2].id = rs.result.address_component.district;
  324. selectRegionList[2].name = rs.result.address_component.district;
  325. selectRegionList[2].parent_id = rs.result.address_component.city;
  326. address.provinceName = rs.result.address_component.province;
  327. address.cityName = rs.result.address_component.city;
  328. address.countyName = rs.result.address_component.district;
  329. address.full_region = address.provinceName + address.cityName + address.countyName;
  330. that.setData({
  331. address: address,
  332. selectRegionList: selectRegionList
  333. });
  334. that.getRegionList(1);
  335. },
  336. fail: function (rs) {
  337. console.log(rs);
  338. },
  339. complete: function (rs) {
  340. console.log(rs);
  341. }
  342. });
  343. }
  344. })
  345. } else {
  346. let address = that.data.address;
  347. let selectRegionList = that.data.selectRegionList;
  348. selectRegionList[0].id = address.provinceId;
  349. selectRegionList[0].name = address.provinceName;
  350. selectRegionList[0].parent_id = 1;
  351. selectRegionList[1].id = address.cityId;
  352. selectRegionList[1].name = address.cityName;
  353. selectRegionList[1].parent_id = address.provinceId;
  354. selectRegionList[2].id = address.countyId;
  355. selectRegionList[2].name = address.countyName;
  356. selectRegionList[2].parent_id = address.cityId;
  357. address.full_region = address.provinceName + address.cityName + address.countyName;
  358. that.setData({
  359. address: address,
  360. selectRegionList: selectRegionList
  361. });
  362. that.getRegionList(1);
  363. }
  364. },
  365. bingAddressTap: function () {
  366. var that = this;
  367. wx.chooseLocation({
  368. success: function (res) {
  369. console.log("res:" + res);
  370. let address = that.data.address;
  371. if(null==res.latitude){
  372. return;
  373. }
  374. // 解析省市区
  375. var regex = /^(北京市|天津市|重庆市|上海市|香港特别行政区|澳门特别行政区)/;
  376. let province = [];
  377. if (!(province = regex.exec(res.address))) {
  378. regex = /^(.*?(省|自治区))(.*?)$/;
  379. province = regex.exec(res.address);
  380. address.provinceName = province[1];
  381. address = that.regexAddress(province[3], address, res.name);
  382. } else {
  383. address.provinceName = province[1];
  384. address = that.regexAddress(res.address, address, res.name);
  385. }
  386. console.log(address);
  387. address.full_region = address.provinceName + address.cityName + address.countyName;
  388. address.latitude = res.latitude;
  389. address.longitude = res.longitude;
  390. that.setData({
  391. address: address
  392. });
  393. }
  394. })
  395. },
  396. regexAddress: function (address, addressBean, name) {
  397. var regex = /^(.*?[市州]|.*?地区|.*?特别行政区)(.*?[市区县])(.*?)$/g;
  398. var addxress = regex.exec(address);
  399. addressBean.cityName = addxress[1];
  400. addressBean.countyName = addxress[2];
  401. addressBean.detailInfo = addxress[3] + "(" + name + ")";
  402. return addressBean;
  403. }
  404. })