14 changed files with 319 additions and 4 deletions
Unified View
Diff Options
-
2app.js
-
1app.json
-
14components/city-change/README.md
-
106components/city-change/index.js
-
3components/city-change/index.json
-
26components/city-change/index.wxml
-
73components/city-change/index.wxss
-
71pages/home/city-test/index.js
-
5pages/home/city-test/index.json
-
5pages/home/city-test/index.wxml
-
1pages/home/city-test/index.wxss
-
4pages/home/index/index.js
-
9pages/home/index/index.wxml
-
3pages/home/index/index.wxss
@ -0,0 +1,14 @@ |
|||||
|
<city-change styles='max-height:100%;' bindcitytap='cityTap'></city-change> wxml页面引用 |
||||
|
注意: |
||||
|
1.需要引用组件的index.json中需要 |
||||
|
"usingComponents": { |
||||
|
"city-change":"/components/city-change/index" |
||||
|
} |
||||
|
|
||||
|
2.在index.js中可以添加以下方法以便于获取回调 |
||||
|
cityTap(e){ |
||||
|
console.log('fasdfsdfsdfds'); |
||||
|
console.log(e); |
||||
|
const cityName=e.detail.cityname; |
||||
|
wx.navigateBack(); |
||||
|
}, |
||||
@ -0,0 +1,106 @@ |
|||||
|
// import qqmap from '../../utils/map.js'; //如果需要定位打开wxml和js中注释部分,替换此处map.js为实际引用
|
||||
|
const app = getApp() |
||||
|
Component({ |
||||
|
properties: { |
||||
|
styles:{//这个是可以自定义最外层的view的样式
|
||||
|
type:String, |
||||
|
value:'', |
||||
|
observer: function (newval, oldval) { |
||||
|
// 监听改变
|
||||
|
console.log(newval, oldval); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
data: { |
||||
|
//下面是字母排序
|
||||
|
|
||||
|
letter: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"], |
||||
|
cityListId: '', |
||||
|
//下面是城市列表信息,这里只是模拟数据
|
||||
|
citylist: [{ "letter": "A", "data": [{ "id": "v7", "cityName": "安徽" }] }, { "letter": "B", "data": [{ "id": "v10", "cityName": "巴中" }, { "id": "v4", "cityName": "包头" }, { "id": "v1", "cityName": "北京" }] }, { "letter": "C", "data": [{ "id": "v15", "cityName": "成都" }] }, { "letter": "D", "data": [{ "id": "v21", "cityName": "稻城" }] }, { "letter": "G", "data": [{ "id": "v17", "cityName": "广州" }, { "id": "v29", "cityName": "桂林" }] }, { "letter": "H", "data": [{ "id": "v9", "cityName": "海南" }, { "id": "v3", "cityName": "呼和浩特" }] }, { "letter": "L", "data": [{ "id": "v24", "cityName": "洛阳" }, { "id": "v20", "cityName": "拉萨" }, { "id": "v14", "cityName": "丽江" }] }, { "letter": "M", "data": [{ "id": "v13", "cityName": "眉山" }] }, { "letter": "N", "data": [{ "id": "v27", "cityName": "南京" }] }, { "letter": "S", "data": [{ "id": "v18", "cityName": "三亚" }, { "id": "v2", "cityName": "上海" }] }, { "letter": "T", "data": [{ "id": "v5", "cityName": "天津" }] }, { "letter": "W", "data": [{ "id": "v12", "cityName": "乌鲁木齐" }, { "id": "v25", "cityName": "武汉" }] }, { "letter": "X", "data": [{ "id": "v23", "cityName": "西安" }, { "id": "v28", "cityName": "香港" }, { "id": "v19", "cityName": "厦门" }] }, { "letter": "Z", "data": [{ "id": "v8", "cityName": "张家口" }] }], |
||||
|
//下面是热门城市数据,模拟数据
|
||||
|
newcity: ['北京', '上海', '广州', '深圳', '成都', '杭州'], |
||||
|
// citySel: '全国',
|
||||
|
locateCity: '', |
||||
|
height: app.globalData.safeFragmentHeight, |
||||
|
}, |
||||
|
methods: { |
||||
|
//点击城市
|
||||
|
cityTap(e) { |
||||
|
const val = e.currentTarget.dataset.val || '', |
||||
|
types = e.currentTarget.dataset.types || '', |
||||
|
Index = e.currentTarget.dataset.index || '', |
||||
|
that=this; |
||||
|
let city = this.data.citySel; |
||||
|
switch (types) { |
||||
|
case 'locate': |
||||
|
//定位内容
|
||||
|
city = this.data.locateCity; |
||||
|
break; |
||||
|
case 'national': |
||||
|
//全国
|
||||
|
city = '全国'; |
||||
|
break; |
||||
|
case 'new': |
||||
|
//热门城市
|
||||
|
city = val; |
||||
|
break; |
||||
|
case 'list': |
||||
|
//城市列表
|
||||
|
city = val.cityName; |
||||
|
break; |
||||
|
} |
||||
|
if(city){ |
||||
|
wx.setStorage({ |
||||
|
key: 'city', |
||||
|
data: city |
||||
|
}) //点击后给父组件可以通过bindcitytap事件,获取到cityname的值,这是子组件给父组件传值和触发事件的方法
|
||||
|
this.triggerEvent('citytap', { cityname: city }); |
||||
|
}else{ |
||||
|
console.log('还没有'); |
||||
|
this.getLocate(); |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
//点击城市字母
|
||||
|
letterTap(e) { |
||||
|
const Item = e.currentTarget.dataset.item; |
||||
|
this.setData({ |
||||
|
cityListId: Item |
||||
|
}); |
||||
|
console.log(this.data.cityListId); |
||||
|
}, |
||||
|
//调用定位
|
||||
|
// getLocate(){
|
||||
|
// let that=this;
|
||||
|
// new qqmap().getLocateInfo().then(function (val) {//这个方法在另一个文件里,下面有贴出代码
|
||||
|
// console.log(val);
|
||||
|
// if (val.indexOf('市') !== -1) {//这里是去掉“市”这个字
|
||||
|
// console.log(val.indexOf('市') - 1);
|
||||
|
// val = val.slice(0, val.indexOf('市'));
|
||||
|
// console.log(val);
|
||||
|
// }
|
||||
|
// that.setData({
|
||||
|
// locateCity: val
|
||||
|
// });
|
||||
|
// //把获取的定位和获取的时间放到本地存储
|
||||
|
// wx.setStorageSync('locatecity', { city: val, time: new Date().getTime() });
|
||||
|
// });
|
||||
|
// }
|
||||
|
}, |
||||
|
ready(){ |
||||
|
// console.log(getApp());
|
||||
|
// let that = this,
|
||||
|
// cityOrTime = wx.getStorageSync('locatecity')||{},
|
||||
|
// time = new Date().getTime(),
|
||||
|
// city='';
|
||||
|
// if (!cityOrTime.time||(time - cityOrTime.time > 1800000)){//每隔30分钟请求一次定位
|
||||
|
// this.getLocate();
|
||||
|
// }else{//如果未满30分钟,那么直接从本地缓存里取值
|
||||
|
// that.setData({
|
||||
|
// locateCity: cityOrTime.city
|
||||
|
// })
|
||||
|
// }
|
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"component": true |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
<view class='city_box' style='{{styles}}'> |
||||
|
<view class='city_left'> |
||||
|
<scroll-view scroll-y style='width:100%;height:85vh;' scroll-with-animation scroll-into-view="{{cityListId}}"> |
||||
|
<!-- <view class='city_locate' data-types='locate' catchtap='cityTap'> |
||||
|
<text class='city_locate_title'>自动定位</text> |
||||
|
<text class='city_locate_text' style='{{!locateCity&&"color:#33b9ff;"}}'>{{locateCity||'点击定位'}}</text> |
||||
|
</view> --> |
||||
|
<view class='national' data-types='national' catchtap='cityTap'>全国</view> |
||||
|
<view class='new_city'> |
||||
|
<view class='new_city_title'>热门城市</view> |
||||
|
<view class='new_city_box'> |
||||
|
<text class='new_city_text' wx:for='{{newcity}}' wx:key='this' data-types='new' catchtap='cityTap' data-val='{{item}}'>{{item}}</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class='city_list_box'> |
||||
|
<block wx:for='{{citylist}}' wx:key='this' wx:for-item='letterItem' wx:for-index='letterIndex'> |
||||
|
<view class='city_first_letter' id='{{letterItem.letter}}'>{{letterItem.letter}}</view> |
||||
|
<text class='city_name' wx:for='{{letterItem.data}}' wx:key='this' data-types='list' catchtap='cityTap' data-index='{{index}}' data-val='{{item}}'>{{item.cityName}}</text> |
||||
|
</block> |
||||
|
</view> |
||||
|
</scroll-view> |
||||
|
</view> |
||||
|
<view class='city_right'> |
||||
|
<text class='letter_item' wx:for='{{letter}}' wx:key='this' catchtap='letterTap' data-item='{{item}}'>{{item}}</text> |
||||
|
</view> |
||||
|
</view> |
||||
@ -0,0 +1,73 @@ |
|||||
|
.city_box{ |
||||
|
height:100%; |
||||
|
background: #fff; |
||||
|
display: flex; |
||||
|
} |
||||
|
.city_left{ |
||||
|
flex: 1; |
||||
|
} |
||||
|
.city_right{ |
||||
|
width: 60rpx; |
||||
|
margin-top: 20rpx; |
||||
|
flex-direction: column; |
||||
|
justify-content: space-around; |
||||
|
} |
||||
|
.letter_item{ |
||||
|
flex: 1; |
||||
|
height: 40rpx; |
||||
|
display: block; |
||||
|
font-size: 24rpx; |
||||
|
color: #33B9FF; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.city_locate,.national{ |
||||
|
height: 80rpx; |
||||
|
line-height: 80rpx; |
||||
|
border-bottom: 1px solid #efefef; |
||||
|
font-size: 28rpx; |
||||
|
color: #333; |
||||
|
padding-left: 25rpx; |
||||
|
} |
||||
|
.city_locate_title{ |
||||
|
color: #999; |
||||
|
margin-right: 20rpx; |
||||
|
} |
||||
|
.new_city{ |
||||
|
background: #efefef; |
||||
|
font-size: 28rpx; |
||||
|
} |
||||
|
.new_city_title{ |
||||
|
line-height: 50rpx; |
||||
|
color: #999; |
||||
|
padding-left: 25rpx; |
||||
|
margin-bottom: 20rpx; |
||||
|
} |
||||
|
.new_city_box{ |
||||
|
display: flex; |
||||
|
flex-wrap: wrap; |
||||
|
} |
||||
|
.new_city_text{ |
||||
|
width: 200rpx; |
||||
|
text-align: center; |
||||
|
line-height: 70rpx; |
||||
|
background: #fff; |
||||
|
border-radius: 35rpx; |
||||
|
margin:0 0 22rpx 22rpx; |
||||
|
} |
||||
|
.city_first_letter{ |
||||
|
line-height: 40rpx; |
||||
|
height: 40rpx; |
||||
|
padding-left: 25rpx; |
||||
|
font-size: 28rpx; |
||||
|
background: #eee; |
||||
|
color: #999; |
||||
|
} |
||||
|
.city_name{ |
||||
|
display: block; |
||||
|
line-height: 80rpx; |
||||
|
height: 80rpx; |
||||
|
border-bottom: 1px solid #efefef; |
||||
|
font-size: 28rpx; |
||||
|
color: #333; |
||||
|
padding-left: 25rpx; |
||||
|
} |
||||
@ -0,0 +1,71 @@ |
|||||
|
// pages/home/city-test/index.js
|
||||
|
Page({ |
||||
|
|
||||
|
/** |
||||
|
* 页面的初始数据 |
||||
|
*/ |
||||
|
data: { |
||||
|
|
||||
|
}, |
||||
|
cityTap(e){ |
||||
|
console.log('fasdfsdfsdfds'); |
||||
|
console.log(e); |
||||
|
const cityName=e.detail.cityname; |
||||
|
wx.navigateBack(); |
||||
|
}, |
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad: function (options) { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面初次渲染完成 |
||||
|
*/ |
||||
|
onReady: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面显示 |
||||
|
*/ |
||||
|
onShow: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面隐藏 |
||||
|
*/ |
||||
|
onHide: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面卸载 |
||||
|
*/ |
||||
|
onUnload: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面相关事件处理函数--监听用户下拉动作 |
||||
|
*/ |
||||
|
onPullDownRefresh: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面上拉触底事件的处理函数 |
||||
|
*/ |
||||
|
onReachBottom: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 用户点击右上角分享 |
||||
|
*/ |
||||
|
onShareAppMessage: function () { |
||||
|
|
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
"usingComponents": { |
||||
|
"city-change":"/components/city-change/index" |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,5 @@ |
|||||
|
<!--pages/home/city-test/index.wxml--> |
||||
|
<cu-custom bgColor="bg-white" isBack="{{true}}"> |
||||
|
<view slot="content" class="text-black text-xl">城市选择</view> |
||||
|
</cu-custom> |
||||
|
<city-change styles='max-height:100%;' bindcitytap='cityTap'></city-change> |
||||
@ -0,0 +1 @@ |
|||||
|
/* pages/home/city-test/index.wxss */ |
||||
Write
Preview
Loading…
Cancel
Save