123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- var util = require('../../../utils/util.js');
- var api = require('../../../config/api.js');
- // 引入SDK核心类
- var QQMapWX = require('../../../lib/qqmap/qqmap-wx-jssdk.js');
- // https://apis.map.qq.com
- var app = getApp();
- // 实例化API核心类
- var qqMap = new QQMapWX({
- key: 'BNVBZ-U7RHQ-UUM5Q-GLW6J-SOKSZ-4GBDL' // 必填
- });
- Page({
- data: {
- address: {
- id: 0,
- provinceName: '',
- cityName: '',
- countyName: '',
- provinceId: 0,
- cityId: 0,
- countyId: 0,
- detailInfo: '',
- userName: '',
- telNumber: '',
- isDefault: 0
- },
- addressId: 0,
- openSelectRegion: false,
- selectRegionList: [
- { id: 0, name: '省份', parent_id: 1, type: 1 },
- { id: 0, name: '城市', parent_id: 1, type: 2 },
- { id: 0, name: '区县', parent_id: 1, type: 3 }
- ],
- regionType: 1,
- regionList: [],
- selectRegionDone: false
- },
- bindinputTelNumber(event) {
- let address = this.data.address;
- address.telNumber = event.detail.value;
- this.setData({
- address: address
- });
- },
- bindinputDetailInfo(event) {
- let address = this.data.address;
- address.detailInfo = event.detail.value;
- this.setData({
- address: address
- });
- },
- bindinputUserName(event) {
- let address = this.data.address;
- address.userName = event.detail.value;
- this.setData({
- address: address
- });
- },
- bindIsDefault() {
- let address = this.data.address;
- address.isDefault = !address.isDefault;
- this.setData({
- address: address
- });
- },
- getAddressDetail() {
- let that = this;
- util.request(api.AddressDetail, { id: that.data.addressId }).then(function (res) {
- if (res.errno === 0 && null != res.data) {
- that.setData({
- address: res.data
- });
- }
- that.getRegionList(1);
- that.initRegion();
- });
- },
- setRegionDoneStatus() {
- let that = this;
- let doneStatus = that.data.selectRegionList.every(item => {
- return item.id != 0;
- });
- that.setData({
- selectRegionDone: doneStatus
- })
- },
- chooseRegion() {
- let that = this;
- that.setData({
- openSelectRegion: !that.data.openSelectRegion
- });
- console.log(that.data.openSelectRegion);
- //设置区域选择数据
- let address = that.data.address;
- console.log(address);
- if (address.provinceId > 0 && address.cityId > 0 && address.countyId > 0) {
- let selectRegionList = that.data.selectRegionList;
- selectRegionList[0].id = address.provinceId;
- selectRegionList[0].name = address.provinceName;
- selectRegionList[0].parent_id = 1;
- selectRegionList[1].id = address.cityId;
- selectRegionList[1].name = address.cityName;
- selectRegionList[1].parent_id = address.provinceId;
- selectRegionList[2].id = address.countyId;
- selectRegionList[2].name = address.countyName;
- selectRegionList[2].parent_id = address.cityId;
- that.setData({
- selectRegionList: selectRegionList,
- regionType: 3
- });
- that.getRegionList(address.cityId);
- } else {
- that.setData({
- selectRegionList: [
- { id: 0, name: '省份', parent_id: 1, type: 1 },
- { id: 0, name: '城市', parent_id: 1, type: 2 },
- { id: 0, name: '区县', parent_id: 1, type: 3 }
- ],
- regionType: 1
- })
- that.getRegionList(1);
- }
- that.setRegionDoneStatus();
- },
- onLoad: function (options) {
- // 页面初始化 options为页面跳转所带来的参数
- console.log(options)
- if (options.id) {
- this.setData({
- addressId: options.id
- });
- this.getAddressDetail();
- }
- this.getRegionList(1);
- this.initRegion();
- },
- onReady: function () {
- },
- selectRegionType(event) {
- let that = this;
- let regionTypeIndex = event.target.dataset.regionTypeIndex;
- let selectRegionList = that.data.selectRegionList;
- //判断是否可点击
- if (regionTypeIndex + 1 == this.data.regionType || (regionTypeIndex - 1 >= 0 && selectRegionList[regionTypeIndex - 1].id <= 0)) {
- return false;
- }
- this.setData({
- regionType: regionTypeIndex + 1
- })
- let selectRegionItem = selectRegionList[regionTypeIndex];
- this.getRegionList(selectRegionItem.parent_id);
- this.setRegionDoneStatus();
- },
- selectRegion(event) {
- let that = this;
- let regionIndex = event.target.dataset.regionIndex;
- let regionItem = this.data.regionList[regionIndex];
- let regionType = regionItem.type;
- let selectRegionList = this.data.selectRegionList;
- selectRegionList[regionType - 1] = regionItem;
- if (regionType != 3) {
- this.setData({
- selectRegionList: selectRegionList,
- regionType: regionType + 1
- })
- this.getRegionList(regionItem.id);
- } else {
- this.setData({
- selectRegionList: selectRegionList
- })
- }
- //重置下级区域为空
- selectRegionList.map((item, index) => {
- if (index > regionType - 1) {
- item.id = 0;
- item.name = index == 1 ? '城市' : '区县';
- item.parent_id = 0;
- }
- return item;
- });
- this.setData({
- selectRegionList: selectRegionList
- })
- that.setData({
- regionList: that.data.regionList.map(item => {
- //标记已选择的
- if (that.data.regionType == item.type && that.data.selectRegionList[that.data.regionType - 1].id == item.id) {
- item.selected = true;
- } else {
- item.selected = false;
- }
- return item;
- })
- });
- this.setRegionDoneStatus();
- },
- doneSelectRegion() {
- if (this.data.selectRegionDone === false) {
- return false;
- }
- let address = this.data.address;
- let selectRegionList = this.data.selectRegionList;
- address.provinceId = selectRegionList[0].id;
- address.cityId = selectRegionList[1].id;
- address.countyId = selectRegionList[2].id;
- address.provinceName = selectRegionList[0].name;
- address.cityName = selectRegionList[1].name;
- address.countyName = selectRegionList[2].name;
- address.full_region = selectRegionList.map(item => {
- return item.name;
- }).join('');
- this.setData({
- address: address,
- openSelectRegion: false
- });
- },
- cancelSelectRegion() {
- this.setData({
- openSelectRegion: false,
- regionType: this.data.regionDoneStatus ? 3 : 1
- });
- },
- getRegionList(regionId) {
- let that = this;
- let regionType = that.data.regionType;
- util.request(api.RegionList, { parentId: regionId }).then(function (res) {
- if (res.errno === 0) {
- that.setData({
- regionList: res.data.map(item => {
- //标记已选择的
- if (regionType == item.type && that.data.selectRegionList[regionType - 1].id == item.id) {
- item.selected = true;
- } else {
- item.selected = false;
- }
- return item;
- })
- });
- }
- });
- },
- cancelAddress() {
- wx.navigateBack({})
- },
- saveAddress() {
- console.log(this.data.address)
- let address = this.data.address;
- if (address.userName == '') {
- util.showErrorToast('请输入姓名');
- return false;
- }
- if (address.telNumber == '') {
- util.showErrorToast('请输入手机号码');
- return false;
- }
- if (address.countyName == 0) {
- util.showErrorToast('请输入省市区');
- return false;
- }
- if (address.detailInfo == '') {
- util.showErrorToast('请输入详细地址');
- return false;
- }
- if (!(/^1[34578]\d{9}$/.test(address.telNumber)) || address.telNumber.length != 11) {
- util.showErrorToast('手机号有误');
- return false;
- }
- let that = this;
- util.request(api.AddressSave, {
- id: address.id,
- userName: address.userName,
- telNumber: address.telNumber,
- provinceName: address.provinceName,
- cityName: address.cityName,
- countyName: address.countyName,
- detailInfo: address.detailInfo,
- isDefault: address.isDefault,
- latitude: address.latitude,
- longitude: address.longitude,
- }, 'POST').then(function (res) {
- if (res.errno === 0) {
- wx.navigateTo({
- url: '/pages/ucenter/address/address',
- })
- }else{
- util.showErrorToast(res.errmsg);
- }
- });
- },
- onShow: function () {
- // 页面显示
- },
- onHide: function () {
- // 页面隐藏
- },
- onUnload: function () {
- // 页面关闭
- },
- /**
- * 初始化省市区
- */
- initRegion() {
- let that = this;
- if (null == that.data.addressId || that.data.addressId == 0) {
- wx.getLocation({
- success: function (res) {
- console.log(res)
- // 调用接口
- qqMap.reverseGeocoder({
- location: {
- latitude: res.latitude,
- longitude: res.longitude
- },
- success: function (rs) {
- console.log(rs);
- let address = that.data.address;
- let selectRegionList = that.data.selectRegionList;
- if (rs.result){
- selectRegionList[0].id = rs.result.address_component.province;
- selectRegionList[0].name = rs.result.address_component.province;
- selectRegionList[0].parent_id = 1;
- selectRegionList[1].id = rs.result.address_component.city;
- selectRegionList[1].name = rs.result.address_component.city;
- selectRegionList[1].parent_id = rs.result.address_component.province;
- selectRegionList[2].id = rs.result.address_component.district;
- selectRegionList[2].name = rs.result.address_component.district;
- selectRegionList[2].parent_id = rs.result.address_component.city;
- address.provinceName = rs.result.address_component.province;
- address.cityName = rs.result.address_component.city;
- address.countyName = rs.result.address_component.district;
- address.full_region = address.provinceName + address.cityName + address.countyName;
- that.setData({
- address: address,
- selectRegionList: selectRegionList
- });
- that.getRegionList(1);
- }
- },
- fail: function (rs) {
- console.log(rs);
- },
- complete: function (rs) {
- console.log(rs);
- }
- });
- }
- })
- } else {
- let address = that.data.address;
- let selectRegionList = that.data.selectRegionList;
- selectRegionList[0].id = address.provinceId;
- selectRegionList[0].name = address.provinceName;
- selectRegionList[0].parent_id = 1;
- selectRegionList[1].id = address.cityId;
- selectRegionList[1].name = address.cityName;
- selectRegionList[1].parent_id = address.provinceId;
- selectRegionList[2].id = address.countyId;
- selectRegionList[2].name = address.countyName;
- selectRegionList[2].parent_id = address.cityId;
- address.full_region = address.provinceName + address.cityName + address.countyName;
- that.setData({
- address: address,
- selectRegionList: selectRegionList
- });
- that.getRegionList(1);
- }
- },
- bingAddressTap: function () {
- var that = this;
- wx.chooseLocation({
- success: function (res) {
- // console.log("res:" + res);
- let address = that.data.address;
- if(null==res.latitude){
- return;
- }
- // 解析省市区
- var regex = /^(北京市|天津市|重庆市|上海市|香港特别行政区|澳门特别行政区)/;
- let province = [];
- if (!(province = regex.exec(res.address))) {
- regex = /^(.*?(省|自治区))(.*?)$/;
- province = regex.exec(res.address);
- if (province != null) {
- address.provinceName = province[1];
- // console.log("试试:" + province[3]);
- // console.log("试试:" + res.name);
- // console.log(address);
- address = that.regexAddress(province[3], address, res.name);
- }else{
- wx.showToast({
- title: '收货地址请详细区县/区镇',
- icon: 'none'
- })
- }
- } else {
- address.provinceName = province[1];
- address = that.regexAddress(res.address, address, res.name);
- }
- console.log(address);
- address.full_region = address.provinceName + address.cityName + address.countyName;
- address.latitude = res.latitude;
- address.longitude = res.longitude;
- that.setData({
- address: address
- });
- }
- })
- },
- regexAddress: function (address, addressBean, name) {
- // var regex = /^(.*?[市州]|.*?地区|.*?特别行政区)(.*?[市区县])(.*?)$/g;
- var regex = /^(.*?[市州]|.*?地区|.*?特别行政区.*?区|.+盟|市辖区|.*?市|.*?县)(.*?[市区县]|.*?镇|.+海域|.+岛|.*?街|.*?路|.*?道)(.*?)$/g;
- // var regex = /^(.*?)(.*?)(.*?)$/g;
- var addxress = regex.exec(address);
- if (addxress != null) {
- addressBean.cityName = addxress[1];
- addressBean.countyName = addxress[2];
- addressBean.detailInfo = addxress[3] + "(" + name + ")";
- }
- return addressBean;
- }
- })
|