addressAdd.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  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 that = this;
  262. util.request(api.AddressSave, {
  263. id: address.id,
  264. userName: address.userName,
  265. telNumber: address.telNumber,
  266. provinceName: address.provinceName,
  267. cityName: address.cityName,
  268. countyName: address.countyName,
  269. detailInfo: address.detailInfo,
  270. isDefault: address.isDefault,
  271. latitude: address.latitude,
  272. longitude: address.longitude,
  273. }, 'POST').then(function (res) {
  274. if (res.errno === 0) {
  275. wx.navigateTo({
  276. url: '/pages/ucenter/address/address',
  277. })
  278. }
  279. });
  280. },
  281. onShow: function () {
  282. // 页面显示
  283. },
  284. onHide: function () {
  285. // 页面隐藏
  286. },
  287. onUnload: function () {
  288. // 页面关闭
  289. },
  290. /**
  291. * 初始化省市区
  292. */
  293. initRegion() {
  294. let that = this;
  295. if (null == that.data.addressId || that.data.addressId == 0) {
  296. wx.getLocation({
  297. success: function (res) {
  298. console.log(res)
  299. // 调用接口
  300. qqMap.reverseGeocoder({
  301. location: {
  302. latitude: res.latitude,
  303. longitude: res.longitude
  304. },
  305. success: function (rs) {
  306. console.log(rs);
  307. let address = that.data.address;
  308. let selectRegionList = that.data.selectRegionList;
  309. selectRegionList[0].id = rs.result.address_component.province;
  310. selectRegionList[0].name = rs.result.address_component.province;
  311. selectRegionList[0].parent_id = 1;
  312. selectRegionList[1].id = rs.result.address_component.city;
  313. selectRegionList[1].name = rs.result.address_component.city;
  314. selectRegionList[1].parent_id = rs.result.address_component.province;
  315. selectRegionList[2].id = rs.result.address_component.district;
  316. selectRegionList[2].name = rs.result.address_component.district;
  317. selectRegionList[2].parent_id = rs.result.address_component.city;
  318. address.provinceName = rs.result.address_component.province;
  319. address.cityName = rs.result.address_component.city;
  320. address.countyName = rs.result.address_component.district;
  321. address.full_region = address.provinceName + address.cityName + address.countyName;
  322. that.setData({
  323. address: address,
  324. selectRegionList: selectRegionList
  325. });
  326. that.getRegionList(1);
  327. },
  328. fail: function (rs) {
  329. console.log(rs);
  330. },
  331. complete: function (rs) {
  332. console.log(rs);
  333. }
  334. });
  335. }
  336. })
  337. } else {
  338. let address = that.data.address;
  339. let selectRegionList = that.data.selectRegionList;
  340. selectRegionList[0].id = address.provinceId;
  341. selectRegionList[0].name = address.provinceName;
  342. selectRegionList[0].parent_id = 1;
  343. selectRegionList[1].id = address.cityId;
  344. selectRegionList[1].name = address.cityName;
  345. selectRegionList[1].parent_id = address.provinceId;
  346. selectRegionList[2].id = address.countyId;
  347. selectRegionList[2].name = address.countyName;
  348. selectRegionList[2].parent_id = address.cityId;
  349. address.full_region = address.provinceName + address.cityName + address.countyName;
  350. that.setData({
  351. address: address,
  352. selectRegionList: selectRegionList
  353. });
  354. that.getRegionList(1);
  355. }
  356. },
  357. bingAddressTap: function () {
  358. var that = this;
  359. wx.chooseLocation({
  360. success: function (res) {
  361. console.log("res:" + res);
  362. let address = that.data.address;
  363. if(null==res.latitude){
  364. return;
  365. }
  366. // 解析省市区
  367. var regex = /^(北京市|天津市|重庆市|上海市|香港特别行政区|澳门特别行政区)/;
  368. let province = [];
  369. if (!(province = regex.exec(res.address))) {
  370. regex = /^(.*?(省|自治区))(.*?)$/;
  371. province = regex.exec(res.address);
  372. address.provinceName = province[1];
  373. address = that.regexAddress(province[3], address, res.name);
  374. } else {
  375. address.provinceName = province[1];
  376. address = that.regexAddress(res.address, address, res.name);
  377. }
  378. console.log(address);
  379. address.full_region = address.provinceName + address.cityName + address.countyName;
  380. address.latitude = res.latitude;
  381. address.longitude = res.longitude;
  382. that.setData({
  383. address: address
  384. });
  385. }
  386. })
  387. },
  388. regexAddress: function (address, addressBean, name) {
  389. var regex = /^(.*?[市州]|.*?地区|.*?特别行政区)(.*?[市区县])(.*?)$/g;
  390. var addxress = regex.exec(address);
  391. addressBean.cityName = addxress[1];
  392. addressBean.countyName = addxress[2];
  393. addressBean.detailInfo = addxress[3] + "(" + name + ")";
  394. return addressBean;
  395. }
  396. })