diff --git a/api/common.js b/api/common.js index 07b215c..225ab73 100644 --- a/api/common.js +++ b/api/common.js @@ -13,11 +13,7 @@ const commonApi = { timePeriods:(community_id)=>request.get(`/api/community-time-periods/community/${community_id}`) }, address:{ - list(commityId){ - const data = {}; - if(commityId){ - data.community_id = commityId; - } + list(data){ return request.get('/api/address',data) }, add:(data)=>request.post('/api/address',data), diff --git a/api/request.js b/api/request.js index 561e1b4..63c0830 100644 --- a/api/request.js +++ b/api/request.js @@ -7,6 +7,7 @@ if(envVersion=='develop'){ baseUrl = 'https://api.beefast.co' } let app = getApp(); +let navLoginPromise = null; const sendRequest = (options)=>{ @@ -32,13 +33,24 @@ const sendRequest = (options)=>{ }else if(result.statusCode==401){ const pages = getCurrentPages(); const currentPages = pages[pages.length-1]; - if(currentPages&¤tPages.route.indexOf('pages/login')>-1){ + + if(navLoginPromise){ return; } if(app)app = getApp(); const code = app?.globalData?.shared_user_code||''; - wx.navigateTo({ + if(currentPages&¤tPages.route.indexOf('pages/login')>-1){ + //用户先打开了小程序,然后又点开了朋友的分享页 + navLoginPromise = wx.redirectTo({ + url: '/pages/login/login?shared_user_code='+code, + }); + return; + } + navLoginPromise = wx.navigateTo({ url: '/pages/login/login?shared_user_code='+code, + }); + navLoginPromise.then(()=>{ + navLoginPromise = null; }) }else{ wx.showToast({ diff --git a/api/shop.js b/api/shop.js index 7ab2e4e..9fff943 100644 --- a/api/shop.js +++ b/api/shop.js @@ -12,7 +12,7 @@ export default { return request.get(`/api/merchant/${id}`,data); }, product:{ - list:(merchant_id)=>request.get('/api/merchant/product/list',merchant_id?{merchant_id}:{}), + list:(data)=>request.get('/api/merchant/product/list',data), detail:(product_id)=>request.get(`/api/merchant/product/${product_id}`) }, orderList:(data)=>request.get('/api/merchant-pay',data), diff --git a/app.js b/app.js index dac99d6..c29f628 100644 --- a/app.js +++ b/app.js @@ -13,7 +13,7 @@ App({ wx.onAppRoute((res)=>{ const page = getCurrentPages(); const currentPage = page[page.length-1]; - if(currentPage){ + if(currentPage&&!currentPage.useCustomShare){ currentPage.onShareAppMessage = async()=>{ if(!(this.globalData.appConfig&&this.globalData.appConfig.share_card_title)){ await this.getAppConfig(); @@ -21,10 +21,14 @@ App({ if(!(this.globalData.userInfo&&this.globalData.userInfo.user_code)){ await this.getUserInfo(); } + let path = '/pages/help/index/index'; + if(this.globalData.userInfo.user_code){ + path = `${path}?shared_user_code=${this.globalData.userInfo.user_code}`; + } return { title:this.globalData.appConfig.share_card_title, imageUrl:'/assets/imgs/login/share.jpg', - path:`/pages/help/index/index?shared_user_code=${this.globalData.userInfo.user_code||''}` + path:path } } } diff --git a/app.wxss b/app.wxss index 84aed10..a64df77 100644 --- a/app.wxss +++ b/app.wxss @@ -29,7 +29,7 @@ button .icon,button label{ vertical-align: middle; } button:not([size=mini]){ - width:auto!important; + width:auto; padding:30rpx 25rpx; font-size: 36rpx; } @@ -214,6 +214,13 @@ page-container .content{ padding-bottom:calc(constant(safe-area-inset-bottom) + 24rpx); padding-bottom:calc(env(safe-area-inset-bottom) + 24rpx); } +.bottom-bar.float,.bottom-bar-v2.float{ + padding:0; + border:0; + margin: 0 24rpx; + margin-bottom:calc(constant(safe-area-inset-bottom) + 24rpx); + margin-bottom:calc(env(safe-area-inset-bottom) + 24rpx); +} .custom-scroll-view{ height:100vh; display: flex; diff --git a/assets/icon/navbar/back-round.png b/assets/icon/navbar/back-round.png new file mode 100644 index 0000000..8987d76 Binary files /dev/null and b/assets/icon/navbar/back-round.png differ diff --git a/assets/icon/shop/share.png b/assets/icon/shop/share.png new file mode 100644 index 0000000..c660475 Binary files /dev/null and b/assets/icon/shop/share.png differ diff --git a/components/navbar/index.js b/components/navbar/index.js index edef0b9..a0e092b 100644 --- a/components/navbar/index.js +++ b/components/navbar/index.js @@ -1,5 +1,8 @@ // components/navBar.js Component({ + options:{ + multipleSlots:true + }, /** * 组件的属性列表 diff --git a/components/navbar/index.json b/components/navbar/index.json index c07b0d2..8b37bbf 100644 --- a/components/navbar/index.json +++ b/components/navbar/index.json @@ -1,5 +1,5 @@ { "component": true, "usingComponents": {}, - "styleIsolation": "shared" + "styleIsolation": "apply-shared" } \ No newline at end of file diff --git a/components/navbar/index.wxml b/components/navbar/index.wxml index fbd66c3..aac06c3 100644 --- a/components/navbar/index.wxml +++ b/components/navbar/index.wxml @@ -3,13 +3,17 @@ - + + + + {{backTitle}} + diff --git a/components/navbar/index.wxss b/components/navbar/index.wxss index 6cc5fad..46aaacd 100644 --- a/components/navbar/index.wxss +++ b/components/navbar/index.wxss @@ -1,5 +1,8 @@ /* components/navBar.wxss */ -.nav-bar{} +.nav-bar{ + transition-duration: .4s; + overflow: hidden; +} .nav-bar .title{ font-size: 36rpx; font-weight: 600; @@ -15,6 +18,8 @@ flex:1; display: flex; align-items: center; + text-overflow: ellipsis; + max-width: calc(100vw - 140rpx); } .nav-bar-content .left .btns{ display: inline-flex; @@ -29,10 +34,11 @@ /*单一一个返回或者加上 backTitle的时候*/ .nav-bar-content .back{ width:40rpx;height:40rpx; - padding:12rpx 14rpx 12rpx 0; + padding:12rpx 14rpx 12rpx 12rpx; } .nav-bar-content .back.home{ width:56rpx;height:56rpx; + padding:0; } .nav-bar-content .left .btns.border{ border: 1.2px solid #D8D8D8; @@ -46,6 +52,8 @@ font-size: 36rpx; font-weight: 600; white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .nav-bar-content .share{ width:30rpx;height:34rpx; diff --git a/pages/help/address/index/index.js b/pages/help/address/index/index.js index 7488e77..d1e6cf0 100644 --- a/pages/help/address/index/index.js +++ b/pages/help/address/index/index.js @@ -20,7 +20,8 @@ Page({ onLoad(options) { this.setData({ communityId:options.community_id, - communityName:options.community_name + communityName:options.community_name, + type:options.type }) }, @@ -36,7 +37,14 @@ Page({ */ onShow() { wx.showNavigationBarLoading(); - commonApi.address.list(this.data.communityId).then((data)=>{ + let params = {}; + if(this.data.type=='pickup'){ + params.community_id = this.data.communityId; + params.address_type = 'PICKUP'; + }else{ + params.address_type = 'COMMON'; + } + commonApi.address.list(params).then((data)=>{ wx.hideNavigationBarLoading(); this.setData({ addressList:data, diff --git a/pages/help/index/index.js b/pages/help/index/index.js index 57f238c..2ef2f4a 100644 --- a/pages/help/index/index.js +++ b/pages/help/index/index.js @@ -117,7 +117,10 @@ Page({ } }, getAddress(communityId){ - commonApi.address.list(communityId).then((data)=>{ + commonApi.address.list({ + community_id:communityId, + address_type:'PICKUP' + }).then((data)=>{ let currentAddress = data[0]||{}; data.map((item,index)=>{ if(item.is_default){ @@ -340,7 +343,7 @@ Page({ if(app.globalData.accessToken){ if(this.data.currentCommunity&&this.data.currentCommunity.id){ wx.navigateTo({ - url: `/pages/help/address/index/index?community_id=${this.data.currentCommunity.id}&community_name=${this.data.currentCommunity.name}`, + url: `/pages/help/address/index/index?type=pickup&community_id=${this.data.currentCommunity.id}&community_name=${this.data.currentCommunity.name}`, }) }else{ wx.showToast({ diff --git a/pages/help/package/index.js b/pages/help/package/index.js index 00e4b76..abb7ee5 100644 --- a/pages/help/package/index.js +++ b/pages/help/package/index.js @@ -214,6 +214,13 @@ Page({ }, manuallyAdd(){ let stationNames = this.data.stationList.map((item)=>item.name); + if(stationNames.length==0){ + wx.showToast({ + icon:'none', + title: '该小区未配置驿站', + }) + return; + } wx.showActionSheet({ itemList: stationNames, success:(res)=>{ diff --git a/pages/my/promation/activities/index.js b/pages/my/promation/activities/index.js index f082bd8..f841ee7 100644 --- a/pages/my/promation/activities/index.js +++ b/pages/my/promation/activities/index.js @@ -20,27 +20,20 @@ Page({ * 生命周期函数--监听页面加载 */ onLoad(options) { + const { miniProgram } = wx.getAccountInfoSync(); + const envVersion = miniProgram.envVersion; + if(envVersion=='develop'){ + this.setData({ + activityId:2 + }) + return; + } this.setData({ - activityId:options.id||2 + activityId:options.id }); }, getActivityDetail(){ - this.setData({ - detailLoading:true - }) - commonApi.activities.detail(this.data.activityId).then((data)=>{ - this.setData({ - detailLoading:false, - getting:false - }) - this.setData({ - detail:data - }) - }).catch(()=>{ - this.setData({ - detailLoading:false - }) - }) + }, getActivity(){ this.setData({ @@ -80,15 +73,38 @@ Page({ * 生命周期函数--监听页面显示 */ onShow() { - this.getActivityDetail(); - userApi.coupon.check(this.data.activityId).then((data)=>{ + this.setData({ + detailLoading:true + }) + commonApi.activities.detail(this.data.activityId).then((data)=>{ + this.setData({ + detailLoading:false, + getting:false, + detail:data + }); + return userApi.coupon.check(this.data.activityId); + }).then((data)=>{ if(!data.can_receive){ this.setData({ isShowModal:true, errorMsg:data.message }) } + }).catch((res)=>{ + this.setData({ + detailLoading:false + }) }) + + + // userApi.coupon.check(this.data.activityId).then((data)=>{ + // if(!data.can_receive){ + // this.setData({ + // isShowModal:true, + // errorMsg:data.message + // }) + // } + // }) }, /** diff --git a/pages/shop/detail/index.js b/pages/shop/detail/index.js index 1d05eb7..291ba08 100644 --- a/pages/shop/detail/index.js +++ b/pages/shop/detail/index.js @@ -1,5 +1,6 @@ import shopApi from '../../../api/shop'; import userApi from '../../../api/user'; +import {rpxToPx} from '../../../utils/util' const app = getApp(); @@ -19,7 +20,13 @@ Page({ scrollViewHeight:0, windowInfo:{}, - markdown:null + markdown:null, + + productInfoMD:{}, + productGuideMD:{}, + + scrollOverTop:false, + navBarHeight:0 }, showConfirm(event){ @@ -40,6 +47,9 @@ Page({ // }).catch(()=>{ this.getDetail(); // }) + this.createSelectorQuery().select('#navBar').boundingClientRect((res)=>{ + this.data.navBarHeight = res.height; + }).exec(); }, getDetail(lng,lat){ shopApi.product.detail(this.data.productId,lng,lat).then((data)=>{ @@ -51,7 +61,9 @@ Page({ } } this.setData({ - detail:data + detail:data, + productInfoMD:app.towxml('## 详情 \n- 第一项','markdown'), + productGuideMD:app.towxml('## 须知 \n- 第一项','markdown') }); }); }, @@ -65,9 +77,21 @@ Page({ }, makePhoneCall(){ wx.makePhoneCall({ - phoneNumber:this.data.detail.phone, + phoneNumber:this.data.detail.merchant.phone, }) }, + scrollViewScroll(event){ + + if(event.detail.scrollTop+this.data.navBarHeight>rpxToPx(500)){ + this.setData({ + scrollOverTop:true + }) + }else{ + this.setData({ + scrollOverTop:false + }) + } + }, /** * 生命周期函数--监听页面初次渲染完成 */ @@ -113,7 +137,12 @@ Page({ /** * 用户点击右上角分享 */ + useCustomShare:true, onShareAppMessage() { - + return { + title:this.data.detail.name, + imageUrl:this.data.detail.optimized_image_url, + path:`/pages/shop/detail/index?id=${this.data.productId}&shared_user_code=${app.globalData.userInfo.user_code||''}` + } } }) \ No newline at end of file diff --git a/pages/shop/detail/index.wxml b/pages/shop/detail/index.wxml index 77631c4..eaa8667 100644 --- a/pages/shop/detail/index.wxml +++ b/pages/shop/detail/index.wxml @@ -1,53 +1,84 @@ - - - - - - {{detail.name}} - - 定时达 - 已售100丨自提 - - - - - - - 仙人模斗 - 七栋二单元 + + + + + + + - - - - - 配送地址 - - 请选择收货地址 - - - - 配送地址 - - - - 朝阳时代西锦12栋1单元2072 + + {{detail.name}} + + 定时达 + 已售100丨自提 + + + + + + + {{detail.merchant.name}} + {{detail.merchant.address}} + + + - - - 周先生 18583236782 + + 配送地址 + + 请选择收货地址 + + + + 配送地址 + + + + 朝阳时代西锦12栋1单元2072 + + + + 周先生 18583236782 + + - - - - - 自提点 - - - - - 朝阳时代西锦12栋1单元2072 + + + 自提点 + + + + + 朝阳时代西锦12栋1单元2072 + + - + + + 商品详情 + + + + + + 购买须知 + + + + + + + + + + + + {{detail.sale_price}} + 赠蜂蜜{{detail.gift_points}}克 + diff --git a/pages/shop/detail/index.wxss b/pages/shop/detail/index.wxss index e69baef..f522e3b 100644 --- a/pages/shop/detail/index.wxss +++ b/pages/shop/detail/index.wxss @@ -1,3 +1,12 @@ +.nav-bar{ + z-index:100; + position: relative; +} +.custom-scroll-view{ + position: absolute; + width: 100%; + top:0;left:0; +} .swiper-container{ height:600rpx; position: relative; @@ -50,15 +59,34 @@ top:0;left:0; z-index: -1; } +.top .share{ + position: absolute; + bottom:24rpx;right:24rpx; + width:66rpx;height:66rpx; + background-color:rgba(0, 0, 0, 0.6); + border-radius: 50%; + display: flex; + align-items: center; + padding:0; + justify-content: center; +} +.top .share .icon{ + width:54rpx;height:52rpx; + +} +.product-info{ + padding-top:20rpx; +} .product-info .p-name{ - font-size: 34rpx; + font-size: 36rpx; + line-height: 56rpx; font-weight: 600; } .product-info .info{ display: flex; align-items: center; font-size: 26rpx; - margin-top:32rpx; + margin-top:22rpx; } .product-info .info .tag{ border: 1.2rpx solid rgba(255, 140, 18, 0.5); @@ -69,6 +97,7 @@ .product-info .info .desc{ flex:1; margin-left:14rpx; + color:#888888; } .product-info .spliter{ margin:30rpx 0; @@ -85,6 +114,12 @@ .product-info .user .center{ flex:1; margin-left:22rpx; + overflow: hidden; +} +.product-info .user .u-name,.product-info .user .building{ + overflow: hidden; + white-space: nowrap; + text-overflow:ellipsis; } .product-info .user .building{ font-size: 27rpx; @@ -117,4 +152,31 @@ .address .text{ font-size: 27rpx; margin-left: 20rpx; +} + +.bottom-bar.float{ + display: flex; + align-items: center; + border-radius: 60rpx; + overflow: hidden; + padding-left: 40rpx; + box-shadow: 0px 3px 6px 2px rgba(0, 0, 0, 0.05); +} +.bottom-bar .money{ + font-size: 52rpx; +} +.bottom-bar .tips{ + padding-top:14rpx; + font-size: 27rpx; + color:#FF8C12; + margin-left: 20rpx; + flex:1; +} +.bottom-bar .button{ + border-radius: 0; + height: 100rpx; + min-width: 240rpx; +} +.scroll-view-dispatch{ + height:calc(var(--safe-bottom) + 124rpx); } \ No newline at end of file diff --git a/pages/shop/index/index.js b/pages/shop/index/index.js index d8610e8..0dad098 100644 --- a/pages/shop/index/index.js +++ b/pages/shop/index/index.js @@ -10,13 +10,13 @@ Page({ */ data: { tabIndex:0, - categories:[], shopList:[], userInfo:{}, lng:null, lat:null, - scrollViewHeight:0, - pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false} + pager:{limit:10,loading:false,loadAll:false,pageIndex:0,refreshTrigger:false}, + + choosedCommunity:{} }, changeTab(event){ const tabIndex = event.currentTarget.dataset.index; @@ -42,18 +42,15 @@ Page({ this.setData({ pager:this.data.pager }); - const cid = this.data.categories.length>0?this.data.categories[this.data.tabIndex].id:0; const params = { skip:this.data.pager.pageIndex*this.data.pager.limit, - limit:this.data.pager.limit + limit:this.data.pager.limit, + community_id:this.data.choosedCommunity.id } if(this.data.lng&&this.data.lat){ params.longitude = this.data.lng; params.latitude = this.data.lat; } - if(cid){ - params.category_id = cid; - } shopApi.product.list().then((data)=>{ if(this.data.pager.pageIndex==0){ this.data.shopList = data.items; @@ -80,35 +77,57 @@ Page({ shopList:this.data.shopList, pager:this.data.pager }) + }).catch(()=>{ + this.setData({ + "pager.loading":false + }) }); }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { - const windowInfo = wx.getWindowInfo(); - this.setData({ - scrollViewHeight:windowInfo.windowHeight-windowInfo.statusBarHeight-44-174 - }) - app.getLocation().then((data)=>{ - this.setData({ - lng:data.longitude, - lat:data.latitude - }); - this.loadList(); - }).catch(()=>{ - this.loadList(); - }) - shopApi.category().then((data)=>{ - this.setData({ - categories:[{id:0,name:'全部'},...data.items] - }); - }) app.getUserInfo().then((data)=>{ this.setData({ userInfo:data }) + this.data.choosedCommunity = { + id:data.community_id, + name:data.community_name + }; + return wx.getStorage({key:'community-shop'}); + }).then((res)=>{ + this.data.choosedCommunity = res.data; + this.loadList(); + },(error)=>{ + this.loadList(); + }).finally(()=>{ + this.setData({ + choosedCommunity:this.data.choosedCommunity + }) + }) + }, + + //供选择社区页面用 + changeCommunity(community){ + wx.setStorage({ + key:'community-shop', + data:{ + id:community.id, + name:community.name + } + }); + this.setData({ + choosedCommunity:community + }) + this.refreshList(); + }, + chooseCommunity(){ + const currentId = this.data.choosedCommunity.id||this.data.userInfo.community_id; + console.log(currentId); + wx.navigateTo({ + url: `/pages/help/community/index?communityId=${currentId}`, }) }, diff --git a/pages/shop/index/index.wxml b/pages/shop/index/index.wxml index d16473e..427f074 100644 --- a/pages/shop/index/index.wxml +++ b/pages/shop/index/index.wxml @@ -1,21 +1,13 @@ - - - 蜂蜜 (克) - {{userInfo.points}} - 取快递自动抵扣 - - - - - + + + + {{choosedCommunity.name}} + + + + { const year = date.getFullYear() const month = date.getMonth() + 1 @@ -14,11 +15,15 @@ const formatNumber = n => { return n[1] ? n : `0${n}` } const getStatusNavBarHeight = ()=>{ - const windowInfo = wx.getWindowInfo(); return windowInfo.statusBarHeight+44; } +const rpxToPx = (rpx) => { + return (rpx / 750) * windowInfo.windowWidth; +} + module.exports = { formatTime, - getStatusNavBarHeight + getStatusNavBarHeight, + rpxToPx }