实例介绍
【实例简介】
【实例截图】
【核心代码】
/** * @param {function} fun 接口 * @param {object} options 接口参数 * @returns {Promise} Promise对象 */ function fetch(options) { options = options || {}; return new Promise((resolve, reject) => { options.success = resolve; options.fail = reject; wx.request(options); }); } const API = 'http://japi.zto.cn/zto/api_utf8/baseArea?msg_type=GET_AREA&data='; const conf = { addDot: function (arr) { if (arr instanceof Array) { const tmp = arr.slice(); tmp.map(val => { if (val.fullName.length > 4) { val.fullNameDot = val.fullName.slice(0, 4) '...'; } else { val.fullNameDot = val.fullName; } }); return tmp; } }, /** * 滑动事件 * @param {object} e 事件对象 */ bindChange: function (e) { const currentValue = e.detail.value; const { value, provinceData } = this.data.areaPicker; const self = _getCurrentPage(); const hideDistrict = self.config.hideDistrict; const provinceCondition = hideDistrict ? value[0] !== currentValue[0] && value[1] === currentValue[1] : value[0] !== currentValue[0] && value[1] === currentValue[1] && value[2] === currentValue[2]; const cityCondition = hideDistrict ? value[0] === currentValue[0] && value[1] !== currentValue[1] : value[0] === currentValue[0] && value[1] !== currentValue[1] && value[2] === currentValue[2]; const districtCondition = hideDistrict ? false : value[0] === currentValue[0] && value[1] === currentValue[1] && value[2] !== currentValue[2]; if (provinceCondition) { // 滑动省份 fetch({ url: API provinceData[currentValue[0]].code, method: 'GET' }).then((city) => { const cityData = city.data.result; if (cityData && cityData.length) { const dataWithDot = conf.addDot(city.data.result); this.setData({ 'areaPicker.cityData': dataWithDot }); return ( fetch({ url: API dataWithDot[0].code, method: 'GET' }) ); } else { this.setData({ 'areaPicker.cityData': [], 'areaPicker.districtData': [], 'areaPicker.address': provinceData[currentValue[0]].fullName, 'areaPicker.selected': [provinceData[currentValue[0]]], }); } }).then((district) => { const districtData = district.data.result; const { cityData } = this.data.areaPicker; if (districtData && districtData.length > 0) { const dataWithDot = conf.addDot(districtData); this.setData({ 'areaPicker.districtData': dataWithDot, 'areaPicker.value': [ currentValue[0], 0, 0 ], 'areaPicker.address': provinceData[currentValue[0]].fullName ' - ' cityData[0].fullName (hideDistrict ? '' : ' - ' dataWithDot[0].fullName), 'areaPicker.selected': hideDistrict ? [provinceData[currentValue[0]], cityData[0]] : [provinceData[currentValue[0]], cityData[0], dataWithDot[0]] }); } else { this.setData({ 'areaPicker.districtData': [], 'areaPicker.value': [ currentValue[0], currentValue[1], 0 ], 'areaPicker.address': provinceData[currentValue[0]].fullName ' - ' cityData[0].fullName, 'areaPicker.selected': [provinceData[currentValue[0]], cityData[0]] }); } }).catch((e) => { console.error(e); }); } else if (cityCondition) { const { provinceData, cityData } = this.data.areaPicker; // 滑动城市 fetch({ url: API cityData[currentValue[1]].code, method: 'GET' }).then((district) => { if (!district) return; const districtData = district.data.result; if (districtData && districtData.length > 0) { const dataWithDot = conf.addDot(districtData); this.setData({ 'areaPicker.districtData': dataWithDot, 'areaPicker.value': [ currentValue[0], currentValue[1], 0 ], 'areaPicker.address': provinceData[currentValue[0]].fullName ' - ' cityData[currentValue[1]].fullName (hideDistrict ? '' : ' - ' dataWithDot[0].fullName), 'areaPicker.selected': hideDistrict ? [provinceData[currentValue[0]], cityData[currentValue[1]]] : [provinceData[currentValue[0]], cityData[currentValue[1]], dataWithDot[0]] }); } else { this.setData({ 'areaPicker.districtData': [], 'areaPicker.value': [ currentValue[0], currentValue[1], 0 ], 'areaPicker.address': provinceData[currentValue[0]].fullName ' - ' cityData[currentValue[1]].fullName, 'areaPicker.selected': [provinceData[currentValue[0]], cityData[currentValue[1]]] }); } }).catch((e) => { console.error(e); }); } else if (districtCondition) { const { cityData, districtData } = this.data.areaPicker; // 滑动地区 this.setData({ 'areaPicker.value': currentValue, 'areaPicker.address': provinceData[currentValue[0]].fullName ' - ' cityData[currentValue[1]].fullName (hideDistrict ? '' : ' - ' districtData[currentValue[2]].fullName), 'areaPicker.selected': hideDistrict ? [provinceData[currentValue[0]], cityData[currentValue[1]]] : [provinceData[currentValue[0]], cityData[currentValue[1]], districtData[currentValue[2]]] }); } } }; function _getCurrentPage() { const pages = getCurrentPages(); const last = pages.length - 1; return pages[ last ]; } export const getSelectedAreaData = () => { const self = _getCurrentPage(); return self.data.areaPicker.selected; }; export default (config = {}) => { const self = _getCurrentPage(); self.setData({ 'areaPicker.hideDistrict': !config.hideDistrict }); self.config = config; self.bindChange = conf.bindChange.bind(self); fetch({ url: API '0', method: 'GET' }).then((province) => { const firstProvince = province.data.result[0]; const dataWithDot = conf.addDot(province.data.result); /** * 默认选择获取的省份第一个省份数据 */ self.setData({ 'areaPicker.provinceData': dataWithDot, 'areaPicker.selectedProvince.index': 0, 'areaPicker.selectedProvince.code': firstProvince.code, 'areaPicker.selectedProvince.fullName': firstProvince.fullName, }); return ( fetch({ url: API firstProvince.code, method: 'GET' }) ); }).then((city) => { const firstCity = city.data.result[0]; const dataWithDot = conf.addDot(city.data.result); self.setData({ 'areaPicker.cityData': dataWithDot, 'areaPicker.selectedCity.index': 0, 'areaPicker.selectedCity.code': firstCity.code, 'areaPicker.selectedCity.fullName': firstCity.fullName, }); /** * 省市二级则不请求区域 */ if (!config.hideDistrict) { return ( fetch({ url: API firstCity.code, method: 'GET' }) ); } else { const { provinceData, cityData } = self.data.areaPicker; self.setData({ 'areaPicker.value': [0, 0], 'areaPicker.address': provinceData[0].fullName ' - ' cityData[0].fullName, 'areaPicker.selected': [provinceData[0], cityData[0]] }); } }).then((district) => { if (!district) return; const firstDistrict = district.data.result[0]; const dataWithDot = conf.addDot(district.data.result); const { provinceData, cityData } = self.data.areaPicker; self.setData({ 'areaPicker.value': [0, 0, 0], 'areaPicker.districtData': dataWithDot, 'areaPicker.selectedDistrict.index': 0, 'areaPicker.selectedDistrict.code': firstDistrict.code, 'areaPicker.selectedDistrict.fullName': firstDistrict.fullName, 'areaPicker.address': provinceData[0].fullName ' - ' cityData[0].fullName ' - ' firstDistrict.fullName, 'areaPicker.selected': [provinceData[0], cityData[0], firstDistrict] }); }).catch((e) => { console.error(e); }); };
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论