@@ -0,0 +1,3 @@ | |||||
{ | |||||
"bytedanceMiniappIDE.previewScene": "default" | |||||
} |
@@ -0,0 +1,93 @@ | |||||
const Http = require("./utils/HttpBasics.js") | |||||
const config = require("./config/config.js"); | |||||
App({ | |||||
data:{}, | |||||
globalData:{ | |||||
token: null, | |||||
imgHttps: 'https://formall.oss-accelerate.aliyuncs.com/douyin/drawable-xhdpi/', | |||||
platform:null,//手机型号 | |||||
systemInfo:"", | |||||
curHtml:"", | |||||
marketName:"", | |||||
mouldType:1, | |||||
appId:"ttef6599d8705b49b101", | |||||
selected:0, | |||||
}, | |||||
onLaunch: function () { | |||||
let that = this | |||||
try { | |||||
var res = tt.getSystemInfoSync(); | |||||
that.statusBarHeight = res.statusBarHeight | |||||
console.log(`手机型号为 ${res.platform}`); | |||||
this.globalData.platform = res.platform | |||||
} catch (error) { | |||||
console.log(`获取系统信息失败`); | |||||
} | |||||
tt.getSystemInfo({ | |||||
success(res) { | |||||
that.globalData.systemInfo = res | |||||
that.logn(); | |||||
}, | |||||
fail(res) { | |||||
console.log(`getSystemInfo 调用失败`); | |||||
}, | |||||
}); | |||||
}, | |||||
statusBarHeight: 0, | |||||
logn(){ | |||||
let that = this; | |||||
tt.login({ | |||||
success:(res=>{ | |||||
let {code} = res | |||||
Http.post({ | |||||
url:config.api.login, | |||||
data:{ | |||||
code:code, | |||||
appId:'ttef6599d8705b49b101', | |||||
systemInfo:JSON.stringify(this.globalData.systemInfo) | |||||
} | |||||
}).then(res=>{ | |||||
// debugger | |||||
if (res.data.mall){ | |||||
that.globalData.marketName = res.data.mall.name ? res.data.mall.name : "" | |||||
} | |||||
that.globalData.mouldType = res.data.mouldType ? res.data.mouldType:0; | |||||
if (res.data.subMalls) { | |||||
const squareList = JSON.parse(res.data.subMalls) | |||||
tt.setStorageSync("squareList", squareList) | |||||
if (res.data.mall){ | |||||
tt.setStorageSync("selectedMall", res.data.mall.tenantId) | |||||
} | |||||
} | |||||
Http.setToken(res.data.token); | |||||
that.globalData.token = res.data.token | |||||
if (that.tokenCallback) { | |||||
that.tokenCallback(res.data.token); | |||||
} | |||||
}).catch(err=>{ | |||||
console.log(err); | |||||
tt.showModal({ | |||||
title: '提示', | |||||
showCancel: false, | |||||
content: '登录失败,请重新尝试', | |||||
success: (res) => { | |||||
if (res.cancel) { | |||||
//点击取消,默认隐藏弹框 | |||||
} else { | |||||
//点击确定 | |||||
tt.reLaunch({ | |||||
url: '/pages/index/index', | |||||
}) | |||||
} | |||||
} | |||||
}); | |||||
}) | |||||
}), | |||||
}); | |||||
} | |||||
}) |
@@ -0,0 +1,42 @@ | |||||
{ | |||||
"pages": [ | |||||
"index/index", | |||||
"index/searchbar", | |||||
"pages/index/index", | |||||
"index/user", | |||||
"pages/mainOrder/mainOrder", | |||||
"pages/detailOrder/detailOrder", | |||||
"pages/ticket/ticket", | |||||
"pages/ticketDetail/ticketDetail", | |||||
"pages/coupon/detail/index", | |||||
"pages/editUser/editUser", | |||||
"pages/specialcourtesy/specialcourtesy", | |||||
"pages/complaint/complaint", | |||||
"pages/mallInfo/mallInfo", | |||||
"pages/getuserinfo/getuserinfo", | |||||
"pages/bannerdetail/bannerdetail", | |||||
"pages/topicDetail/index", | |||||
"pages/main/index", | |||||
"pages/integralmall/index", | |||||
"pages/integralmall/integraHistory/index", | |||||
"pages/order/detail/index", | |||||
"pages/order/index/index", | |||||
"pages/orderquanma/index", | |||||
"pages/edit/edit", | |||||
"pages/questionnaire/questionnaire", | |||||
"pages/questionnaire/questionnaireLsit/questionnaireLsit", | |||||
"pages/searchbar/searchbar", | |||||
"pages/index/searchbar/detail/index", | |||||
"pages/integralmall/payIntegcoupondetail/index", | |||||
"pages/integralmall/payIntegcouponStatus/index", | |||||
"pages/getPhone/getPhone" | |||||
], | |||||
"window": { | |||||
"backgroundTextStyle": "light", | |||||
"navigationBarBackgroundColor": "#fff", | |||||
"navigationBarTitleText": "Mini Program", | |||||
"navigationBarTextStyle": "black", | |||||
"navigationStyle": "custom" | |||||
} | |||||
} |
@@ -0,0 +1,141 @@ | |||||
.BoxBg{ | |||||
background-color: #f6f6f6; | |||||
min-height: 100vh; | |||||
} | |||||
view, text { | |||||
font-family: PingFangSC-Regular; | |||||
} | |||||
@font-face { | |||||
font-family: "iconfont"; /* project id 777313 */ | |||||
src: url("//at.alicdn.com/t/font_777313_jq7td4d3uab.eot"); | |||||
src: url("//at.alicdn.com/t/font_777313_jq7td4d3uab.eot?#iefix") | |||||
format("embedded-opentype"), | |||||
url("//at.alicdn.com/t/font_777313_jq7td4d3uab.woff") format("woff"), | |||||
url("//at.alicdn.com/t/font_777313_jq7td4d3uab.ttf") format("truetype"), | |||||
url("//at.alicdn.com/t/font_777313_jq7td4d3uab.svg#iconfont") format("svg"); | |||||
} | |||||
.iconfont { | |||||
font-family: "iconfont" !important; | |||||
font-size: 36rpx; | |||||
font-style: normal; | |||||
-webkit-font-smoothing: antialiased; | |||||
-webkit-text-stroke-width: 0.2rpx; | |||||
-moz-osx-font-smoothing: grayscale; | |||||
} | |||||
.clearfix:after { | |||||
content: "."; | |||||
display: block; | |||||
height: 0; | |||||
clear: both; | |||||
visibility: hidden; | |||||
} | |||||
/* 定位 */ | |||||
.icon-dingweib:before { | |||||
content: "\e652"; | |||||
} | |||||
/* 三角 */ | |||||
.icon-choose:before { | |||||
content: "\e601"; | |||||
} | |||||
/* 右箭头 */ | |||||
.icon-right:before { | |||||
content: "\e612"; | |||||
} | |||||
/* 边框 */ | |||||
.app-border-top, | |||||
.app-border-bottom { | |||||
position: relative; | |||||
width: 100%; | |||||
} | |||||
.app-border-top::after, | |||||
.app-border-bottom::after { | |||||
content: ""; | |||||
position: absolute; | |||||
background-color: #ddd; | |||||
display: block !important; | |||||
z-index: 1; | |||||
top: auto; | |||||
right: auto; | |||||
width: 100%; | |||||
height: 1rpx; | |||||
transform-origin: 50% 100%; | |||||
transform: scaleY(0.5); | |||||
} | |||||
.app-border-top:last-child:after, | |||||
.app-border-bottom:last-child::after { | |||||
display: none !important; | |||||
} | |||||
.app-border-top::after { | |||||
top: 0; | |||||
} | |||||
.app-border-bottom::after { | |||||
bottom: 0; | |||||
} | |||||
.app-border-left, | |||||
.app-border-right { | |||||
position: relative; | |||||
height: 100%; | |||||
} | |||||
.app-border-left::before, | |||||
.app-border-right::before { | |||||
content: ""; | |||||
position: absolute; | |||||
background-color: #ddd; | |||||
display: block; | |||||
z-index: 1; | |||||
top: 0; | |||||
bottom: 0; | |||||
height: 100%; | |||||
width: 1rpx; | |||||
transform-origin: 50% 100%; | |||||
transform: scaleX(0.5); | |||||
} | |||||
.app-border-left::before { | |||||
left: 0; | |||||
} | |||||
.app-border-right::before { | |||||
right: 0; | |||||
} | |||||
view, | |||||
text { | |||||
font-family: PingFangSC-Regular; | |||||
} | |||||
page { | |||||
width: 100%; | |||||
min-height: 100vh; | |||||
font-weight: 400; | |||||
padding-bottom: 160rpx; | |||||
background: #F4F5F9; | |||||
} | |||||
.fl{ | |||||
float: left; | |||||
} | |||||
.fr{ | |||||
float: right; | |||||
} | |||||
.canWrap{ | |||||
position: fixed; | |||||
bottom: -20000rpx; | |||||
left: -2000rpx; | |||||
width: 100%; | |||||
height: 100%; | |||||
overflow: visible; | |||||
} | |||||
.canWrap canvas{ | |||||
width: 690rpx; | |||||
height: 450rpx; | |||||
} | |||||
@@ -0,0 +1,38 @@ | |||||
// components/advertisement.js | |||||
const Http = require("../../utils/HttpBasics"); | |||||
var config = require("../../config/config.js"); | |||||
Component({ | |||||
properties: { | |||||
ggdata: { | |||||
type: Object, | |||||
value: {} | |||||
} | |||||
}, | |||||
data: { | |||||
flag: false, | |||||
alphaData1: null, | |||||
}, | |||||
methods: { | |||||
gotoGg: function (e) { | |||||
console.log(this.data.ggdata) | |||||
let that = this; | |||||
tt.navigateTo({ | |||||
url: `/${that.data.ggdata.pagePath}&g=1`, | |||||
}) | |||||
}, | |||||
a: function () { | |||||
this.setData({ flag: false }) | |||||
}, | |||||
closeGg: function () { | |||||
let that = this; | |||||
var animation = tt.createAnimation({}) | |||||
// animation.opacity(0).step({ duration: 1000 }) | |||||
setTimeout(function () { | |||||
that.setData({ flag: true }) | |||||
}, 500) | |||||
animation.rotateZ(180).scale(0).opacity(0.5).step({ duration: 1000 }) | |||||
that.setData({ alphaData1: animation.export() }); | |||||
}, | |||||
}, | |||||
}); |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
<!--components/advertisement.wxml--> | |||||
<view class="b1" hidden="{{flag}}"> | |||||
<view class='b3'> | |||||
<view class="t_w"> | |||||
<view class="b2" animation="{{alphaData}}"> | |||||
<icon type="cancel" size="30" color="#fff" class='cancel_icon' bindtap="closeGg"/> | |||||
<!-- <view class='line'></view> --> | |||||
<image class="t_image" data-data="{{ggdata}}" mode='widthFix' src="{{ggdata.coverImg}}" bindtap="gotoGg" data-couponChannelId="{{ggdata.produceId}}" /> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,47 @@ | |||||
/* components/advertisement.wxss */ | |||||
.b1{ | |||||
position:fixed; | |||||
width:100%; | |||||
height:100%; | |||||
top:0px; | |||||
background:rgba(0,0,0,0.8); | |||||
overflow: hidden; | |||||
z-index: 1000; | |||||
} | |||||
.b3{ | |||||
/* margin:0 auto; */ | |||||
width:100%; | |||||
height:100%; | |||||
position:relative; | |||||
} | |||||
.t_w{ | |||||
width: 100%; | |||||
position: absolute; | |||||
top: 50%; | |||||
left: 50%; | |||||
margin-top: -50%; | |||||
margin-left: -50%; | |||||
} | |||||
.b2{ | |||||
overflow: hidden; | |||||
border-radius: 10rpx; | |||||
} | |||||
.t_image{ | |||||
width: 70%; | |||||
border-radius: 16rpx; | |||||
display: block; | |||||
margin: 0 auto; | |||||
} | |||||
.cancel_icon{ | |||||
position: absolute; | |||||
right: 65rpx; | |||||
top: -40rpx; | |||||
} | |||||
.line{ | |||||
width:2rpx; | |||||
height: 75rpx; | |||||
background: #fff; | |||||
position: absolute; | |||||
right: 370rpx; | |||||
bottom: -125rpx; | |||||
} |
@@ -0,0 +1,91 @@ | |||||
// pages/index/sw/index.js | |||||
const imgurl = require("../../utils/imgurl"); | |||||
const app = getApp() | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 | |||||
*/ | |||||
properties: { | |||||
list: { | |||||
value: [], | |||||
type: Array | |||||
} | |||||
}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
bannerUrl: imgurl.banner.url, | |||||
currentIndex: 0, | |||||
mouldType:0, | |||||
}, | |||||
/** | |||||
* 组件的方法列表 | |||||
*/ | |||||
methods: { | |||||
gotobannerdetail: function(e) { | |||||
console.log(this.data.list) | |||||
if (e.currentTarget.dataset.data.type == 3) { | |||||
// 小程序路径 | |||||
let indexOf = (e.currentTarget.dataset.data.pagePath).indexOf("="); | |||||
console.log(indexOf, "123") | |||||
let id = (e.currentTarget.dataset.data.pagePath).substring(indexOf); | |||||
let type = (e.currentTarget.dataset.data.pagePath).substr(indexOf + 1, 2)// 2020/7/22 变量获取pagePath中的type | |||||
console.log(indexOf, id, type); | |||||
console.log(e.currentTarget.dataset.data.pagePath) | |||||
if(type == 'cd' || type == 'sd'){ | |||||
tt.navigateTo({ | |||||
url: `/${e.currentTarget.dataset.data.pagePath}`, | |||||
}) | |||||
}else if(type == "wj"){ | |||||
tt.navigateTo({ | |||||
url: `/pages/questionnaire/questionnaire?id=${id}`, | |||||
}) | |||||
}else if (type == 'ra'){ | |||||
tt.navigateTo({ | |||||
url: `/pages/radetail/index?id=${id}`, | |||||
}) | |||||
} | |||||
}else if(e.currentTarget.dataset.data.type==2){ | |||||
// 自由图文 | |||||
tt.navigateTo({ | |||||
url: `/pages/freeBannerDetail/index?id=${e.currentTarget.dataset.id}` | |||||
}); | |||||
}else if(e.currentTarget.dataset.data.type==4){ | |||||
tt.navigateToMiniProgram({ | |||||
appId: e.currentTarget.dataset.data.goAppid, | |||||
// path: 'page/index/index?id=123', | |||||
// extraData: { | |||||
// foo: 'bar' | |||||
// }, | |||||
// envVersion: 'develop', | |||||
success(res) { | |||||
// 打开成功 | |||||
} | |||||
}) | |||||
} | |||||
else{ | |||||
// 固定格式 | |||||
tt.navigateTo({ | |||||
url: `/pages/bannerdetail/bannerdetail?id=${e.currentTarget.dataset.id}` | |||||
}); | |||||
} | |||||
}, | |||||
handleChange: function (e) { | |||||
this.setData({ | |||||
currentIndex: e.detail.current | |||||
}) | |||||
}, | |||||
}, | |||||
attached: function () { | |||||
// 在组件实例进入页面节点树时执行 | |||||
if (app.globalData.mouldType){ | |||||
this.setData({ | |||||
mouldType: app.globalData.mouldType | |||||
}) | |||||
} | |||||
}, | |||||
}); |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,19 @@ | |||||
<view tt:if="{{list.length>0&&mouldType==0}}" class="index-slide-view"> | |||||
<swiper class="imageContainer" bindchange="handleChange" previous-margin="39rpx" next-margin="40rpx" circular autoplay> | |||||
<block tt:for="{{list}}" tt:key="{{index}}"> | |||||
<swiper-item class="item"> | |||||
<image data-id="{{item.id}}" data-data="{{item}}" bindtap='gotobannerdetail' class="itemImg {{currentIndex == index ? 'active': ''}}" src="{{item.coverImg}}"></image> | |||||
</swiper-item> | |||||
</block> | |||||
</swiper> | |||||
</view> | |||||
<view tt:if="{{list.length>0&&mouldType==1}}" class="index-slide-view"> | |||||
<swiper class="imageContainer1" bindchange="handleChange" indicator-color indicator-active-color="#fff" indicator-dots previous-margin="40rpx" next-margin="40rpx" circular autoplay> | |||||
<block tt:for="{{list}}" tt:key="{{index}}"> | |||||
<swiper-item class="item1"> | |||||
<image data-id="{{item.id}}" data-data="{{item}}" bindtap='gotobannerdetail' class="itemImg1 {{currentIndex == index ? 'active1_a': 'active1'}}" src="{{item.coverImg}}"></image> | |||||
</swiper-item> | |||||
</block> | |||||
</swiper> | |||||
</view> |
@@ -0,0 +1,81 @@ | |||||
.imageContainer { | |||||
width: 100%; | |||||
height: 304rpx; | |||||
} | |||||
.itemImg { | |||||
position: absolute; | |||||
width: 640rpx; | |||||
height: 227rpx; | |||||
border-radius: 15rpx; | |||||
overflow: hidden; | |||||
z-index: 5; | |||||
opacity: 0.7; | |||||
top: 20%; | |||||
margin: 0 20rpx; | |||||
} | |||||
.active { | |||||
opacity: 1; | |||||
z-index: 10; | |||||
width: 640rpx; | |||||
height: 270rpx; | |||||
top: 11%; | |||||
transition: all 0.2s ease-in 0s; | |||||
} | |||||
.item { | |||||
width: 100%; | |||||
height: 304rpx; | |||||
overflow: hidden; | |||||
border-radius: 16rpx; | |||||
} | |||||
.index-slide-view { | |||||
margin-top: -30rpx; | |||||
} | |||||
.index-slide-view1 { | |||||
margin-top: -40rpx; | |||||
} | |||||
.imageContainer1 { | |||||
width: 100%; | |||||
height: 400rpx; | |||||
} | |||||
.itemImg1 { | |||||
position: absolute; | |||||
width: 640rpx; | |||||
height: 360rpx; | |||||
border-radius: 15rpx; | |||||
overflow: hidden; | |||||
z-index: 5; | |||||
opacity: 0.7; | |||||
top: 12%; | |||||
margin: 0 20rpx; | |||||
} | |||||
.active1_a { | |||||
opacity: 1; | |||||
z-index: 10; | |||||
width: 640rpx; | |||||
top: 11%; | |||||
transition: all 0.2s ease-in 0s; | |||||
} | |||||
.active1 { | |||||
opacity: 1; | |||||
z-index: 10; | |||||
width: 640rpx; | |||||
height: 310rpx; | |||||
top: 17%; | |||||
transition: all 0.2s ease-in 0s; | |||||
} | |||||
.item1 { | |||||
width: 100%; | |||||
height: 360rpx; | |||||
overflow: hidden; | |||||
border-radius: 16rpx; | |||||
} | |||||
@@ -0,0 +1,32 @@ | |||||
Component({ | |||||
data: { | |||||
schedule:0 | |||||
}, | |||||
properties: { | |||||
item:{ | |||||
type:Object, | |||||
value:{} | |||||
} | |||||
}, | |||||
methods: { | |||||
go(e){ | |||||
let url = e.currentTarget.dataset.url | |||||
tt.navigateTo({ | |||||
url: url, // 指定页面的 url | |||||
success: (res) => { | |||||
}, | |||||
fail: (res) => { | |||||
}, | |||||
}); | |||||
} | |||||
}, | |||||
// created:function(){ | |||||
// } | |||||
}) |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,27 @@ | |||||
<view class="commodityBox" bindtap="go" data-url="/pages/coupon/detail/index?id={{item.id}}&navbarTitle={{item.title}}"> | |||||
<view class="commodiImg"> | |||||
<image src="{{item.coverImg}}" class="img"/> | |||||
</view> | |||||
<view class="textBox"> | |||||
<view class="title">{{item.title}}</view> | |||||
<view class="marketBox"> | |||||
<view class="progress"> | |||||
<view class="progress_a" style="{{item.schedule}}"></view> | |||||
</view> | |||||
<view class="progressText">{{item.remainInventoryText}}</view> | |||||
</view> | |||||
<view class="payBox"> | |||||
<view class="payNumBox"> | |||||
<view style="overflow:hidden"> | |||||
<view class="payIcon">¥</view> | |||||
<view class="price">{{item.salePriceStr}}</view> | |||||
</view> | |||||
<view class="original">¥{{item.priceStr}}</view> | |||||
</view> | |||||
<view tt:if="{{item.salePriceStr==0&&item.remainInventory!=0&&item.targetAd==101}}" class="payBtn">免费领取</view> | |||||
<view tt:if="{{item.salePriceStr!=0&&item.remainInventory!=0&&item.targetAd==101}}" class="payBtn">立即购买</view> | |||||
<view tt:if="{{item.salePriceStr!=0&&item.remainInventory==0&&item.targetAd==101}}" class="noBtn" class="payBtn">已售空</view> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,121 @@ | |||||
.commodityBox{ | |||||
width:96%; | |||||
margin: 20rpx auto 0 auto; | |||||
background-color: #ffffff; | |||||
overflow: hidden; | |||||
border-radius: 10rpx; | |||||
} | |||||
.commodiImg{ | |||||
float: left; | |||||
width: 300rpx; | |||||
height: 176rpx; | |||||
border-radius: 10rpx; | |||||
/* background-color: aqua; */ | |||||
margin: 20rpx; | |||||
} | |||||
.img{ | |||||
width: 300rpx; | |||||
height: 176rpx; | |||||
border-radius: 10rpx; | |||||
} | |||||
.textBox{ | |||||
width: 50%; | |||||
float: left; | |||||
margin-top: 20rpx; | |||||
font-size: 28rpx; | |||||
} | |||||
.title{ | |||||
height: 80rpx; | |||||
overflow:hidden; | |||||
text-overflow:ellipsis; | |||||
display:-webkit-box; | |||||
-webkit-box-orient:vertical; | |||||
-webkit-line-clamp:2; | |||||
font-size: 30rpx; | |||||
font-weight: 500; | |||||
} | |||||
.marketBox{ | |||||
overflow: hidden; | |||||
height: 40rpx; | |||||
} | |||||
.progress{ | |||||
height: 20rpx; | |||||
width: 46%; | |||||
border-radius: 10rpx; | |||||
float: left; | |||||
background-color: #e6e6e6; | |||||
margin-top: 10rpx; | |||||
position: relative; | |||||
overflow: hidden; | |||||
} | |||||
.progress_a{ | |||||
/* width: 20%; */ | |||||
height: 20rpx; | |||||
/* border-radius: 10rpx; */ | |||||
background-color: #fb3e5c; | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
} | |||||
.progressText{ | |||||
float: right; | |||||
width: 50%; | |||||
font-size: 26rpx; | |||||
color: #707070; | |||||
} | |||||
.payBox{ | |||||
overflow: hidden; | |||||
} | |||||
.payNumBox{ | |||||
float: left; | |||||
/* overflow: hidden; | |||||
height: 40rpx; */ | |||||
} | |||||
.payIcon{ | |||||
font-size: 24rpx; | |||||
float: left; | |||||
color: #fb3e5c; | |||||
line-height: 40rpx; | |||||
} | |||||
.price{ | |||||
height: 40rpx; | |||||
line-height: 40rpx; | |||||
float: left; | |||||
font-size: 30rpx; | |||||
color: #fb3e5c; | |||||
} | |||||
.original{ | |||||
font-size: 26rpx; | |||||
color: #707070; | |||||
text-decoration: line-through; | |||||
} | |||||
.payBtn{ | |||||
color: #fff; | |||||
background:linear-gradient(to right,#fc3e5a,#f86883); | |||||
float: right; | |||||
margin-right: 10%; | |||||
margin-top: 20rpx; | |||||
height: 60rpx; | |||||
line-height: 60rpx; | |||||
width: 180rpx; | |||||
text-align: center; | |||||
border-radius: 60rpx; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
.noBtn{ | |||||
color: #fff; | |||||
background:#e6e6e6; | |||||
float: right; | |||||
margin-right: 10%; | |||||
margin-top: 20rpx; | |||||
height: 60rpx; | |||||
line-height: 60rpx; | |||||
width: 180rpx; | |||||
text-align: center; | |||||
border-radius: 60rpx; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
@@ -0,0 +1,133 @@ | |||||
const util = require("../../utils/util"); | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 util.toHHmmss(res.data.endTime,); | |||||
*/ | |||||
properties: { | |||||
special:{ | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
titleImgUrl:{ | |||||
type:String, | |||||
value:"", | |||||
}, | |||||
isShowCount:{ | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
obj:{ | |||||
type:Object, | |||||
value:{} | |||||
} | |||||
}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
setIntervalLsit:[] | |||||
}, | |||||
attached: function () { | |||||
let this_ =this | |||||
let arr = [] | |||||
let tempLsit = [] | |||||
// 处理首页定时 | |||||
if (this_.properties.obj.couponList!=null&&this_.properties.obj.couponList.length>0){ | |||||
//限时抢购 倒计时 | |||||
this_.properties.obj.couponList.map((item,index)=>{//初次渲染 | |||||
if (item.targetAd==2){ | |||||
let tempObj = {} | |||||
let beginTime = item.beginTime;//开始时间 | |||||
let endTime = item.endTime;//结束时间 | |||||
let present = new Date().getTime()//当前时间 | |||||
let textTime = item.beginTime >= present?"距开始":"距结束" | |||||
tempObj={ | |||||
value: item.beginTime >= present ? beginTime - present : endTime - present, | |||||
valueText: item.beginTime >= present ? util.toHHmmss(beginTime - present) : util.toHHmmss(endTime - present), | |||||
// vaFlag: tempObj.value<=0?true:false,//活动是否结束 | |||||
index:index, | |||||
interval:"" , | |||||
beginTime: beginTime,//开始时间 | |||||
endTime: endTime,//开始时间 | |||||
textTime: textTime | |||||
} | |||||
arr.push(tempObj) | |||||
this_.setData({ | |||||
setIntervalLsit: arr | |||||
}) | |||||
} | |||||
}) | |||||
} | |||||
tempLsit =this_.data.setIntervalLsit | |||||
tempLsit.map((item,index)=>{//再次渲染 | |||||
item.interval = setInterval(function(){ | |||||
let present = new Date().getTime()//当前时间 | |||||
if(item.value<=1){ | |||||
clearInterval(item.interval) | |||||
item.vaFlag = true,//活动是否结束 | |||||
console.log(item.value, "活动已经结束") | |||||
}else{ | |||||
let tempTime = item.beginTime >= present ? item.beginTime - present : item.endTime - present | |||||
// console.log(tempTime, "presents") | |||||
item.value = tempTime, | |||||
item.valueText = util.toHHmmss(tempTime - 1000) | |||||
item.textTime = item.beginTime >= present ? "距开始" : "距结束", | |||||
item.vaFlag= item.value <= 0 ? true : false,//活动是否结束 | |||||
this_.setData({ | |||||
setIntervalLsit: tempLsit | |||||
}) | |||||
} | |||||
},1000) | |||||
}) | |||||
// 处理首页定时 | |||||
}, | |||||
detached: function () { | |||||
this.data.setIntervalLsit.map(item=>{ | |||||
clearInterval(item.interval) | |||||
}) | |||||
console.log("88888") | |||||
// 在组件实例被从页面节点树移除时执行 ; | |||||
}, | |||||
/** | |||||
* 组件的方法列表 | |||||
*/ | |||||
methods: { | |||||
lookAll(){ | |||||
tt.navigateTo({ | |||||
url: `/${this.properties.obj.weappPath}`, | |||||
}) | |||||
}, | |||||
goDetail(e){ | |||||
console.log(e.currentTarget.dataset) | |||||
let couponChannelId = e.currentTarget.dataset.id | |||||
let couponId = e.currentTarget.dataset.couponid | |||||
let type = e.currentTarget.dataset.type | |||||
if (type==9){ | |||||
tt.navigateTo({ | |||||
url: `/pages/spellGroup/mySpellGroup/index?couponChannelId=${couponChannelId}&couponId=${couponId}`, | |||||
}) | |||||
}else{ | |||||
tt.navigateTo({ | |||||
url: `/pages/coupon/detail/index?couponChannelId=${couponChannelId}&couponId=${couponId}`, | |||||
}) | |||||
} | |||||
}, | |||||
gotoTopic(e) { | |||||
let id = e.currentTarget.dataset.id | |||||
tt.navigateTo({ | |||||
url: `/pages/topicDetail/index?id=${id}` | |||||
}) | |||||
}, | |||||
} | |||||
}) |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,65 @@ | |||||
<!-- <view class='product' tt:if="{{showTopic}}" bindtap='gotoTopic'> | |||||
<image src='{{cover}}' mode='widthFix'></image> | |||||
</view> --> | |||||
<view tt:if="{{obj.couponList.length>0||obj.isOnlyAd==1}}"> | |||||
<view class='product' bindtap='gotoTopic' data-id="{{obj.id}}" tt:if="{{obj.isOnlyAd==1}}"> | |||||
<image src='{{obj.cover}}' mode='scaleToFill'></image> | |||||
</view> | |||||
<view class="commBox" tt:if="{{obj.topicType!=1||(obj.topicType==1&&obj.isOnlyAd==0)}}"> | |||||
<view class="titleBox"> | |||||
<image class="titleImg" src="{{titleImgUrl}}" tt:if="{{!special}}"></image> | |||||
<view class="specialTitle" tt:if="{{special}}">{{obj.name}}</view> | |||||
<view class="more" bindtap="lookAll">查看更多优惠活动 | |||||
<image class="rup" src="https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_icon_jt.png"></image> | |||||
</view> | |||||
</view> | |||||
<view class="contBox"> | |||||
<view class="topImg" tt:if="{{obj.cover}}" bindtap="lookAll"> | |||||
<image src="{{obj.cover}}" mode='scaleToFill'></image> | |||||
</view> | |||||
<div class="itemBox" tt:if="{{obj.couponList&&obj.couponList.length>0}}"> | |||||
<view class="item" tt:for="{{obj.couponList}}" tt:key="index" bindtap="goDetail" data-type="{{item.type}}" data-id="{{item.id}}" data-couponid="{{item.couponId}}"> | |||||
<view class="itemImg"> | |||||
<image src="{{item.coverImg}}" mode='scaleToFill'></image> | |||||
<view class="sellout" tt:if="{{item.remainInventory==0}}"> | |||||
<image class="selloutImg" src="https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_img_ysx.png"></image> | |||||
</view> | |||||
</view> | |||||
<view class="titleNameBox"> | |||||
<view class="titleName">{{item.title}}</view> | |||||
</view> | |||||
<view class="priceBox"> | |||||
<view class="sellingBox f"> | |||||
<view class="fuhao">¥</view> | |||||
<view class="int" tt:if="{{item.type!=50}}">{{item.salePriceStrQ?item.salePriceStrQ:item.salePriceStr}}</view> | |||||
<view class="fuhao" tt:if="{{item.type!=50}}">{{item.salePriceStrH?'.'+item.salePriceStrH:''}}</view> | |||||
<view class="int" tt:if="{{item.type==50}}">{{item.creditPrice}}</view> | |||||
<view class="fuhao" tt:if="{{item.type==50}}"> 积分</view> | |||||
</view> | |||||
<view class="originalBox r"> | |||||
<view class="origina">¥{{item.priceStr}}</view> | |||||
</view> | |||||
</view> | |||||
<view class="countBox" tt:if="{{isShowCount}}"> | |||||
<view class="countText f">{{setIntervalLsit[index].textTime}}</view> | |||||
<view class="countDate r">{{setIntervalLsit[index].vaFlag?'活动已结束':setIntervalLsit[index].valueText}}</view> | |||||
</view> | |||||
</view> | |||||
<view class="item moreItem" bindtap="lookAll"> | |||||
<view class="noDataImg"> | |||||
<image src="https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_img_zwlp.png"></image> | |||||
</view> | |||||
<view class="noDataText">查看更多优惠活动</view> | |||||
</view> | |||||
</div> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,259 @@ | |||||
.commBox { | |||||
width: 96%; | |||||
margin: 27rpx auto; | |||||
background-color: #fff; | |||||
border-radius: 20rpx; | |||||
overflow: hidden; | |||||
} | |||||
.titleBox { | |||||
width: 100%; | |||||
overflow: hidden; | |||||
height: 140rpx; | |||||
background-image: url("https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_icon_d9qt.png"); | |||||
background-size: 100% 100%; | |||||
background-repeat: no-repeat; | |||||
} | |||||
.titleImg { | |||||
width: 180rpx; | |||||
height: 40rpx; | |||||
float: left; | |||||
margin: 20rpx; | |||||
display: block; | |||||
} | |||||
.specialTitle { | |||||
float: left; | |||||
margin: 10rpx 20rpx; | |||||
font-size: 38rpx; | |||||
font-family: YouSheBiaoTiHei; | |||||
font-weight: 600; | |||||
color: #37332d; | |||||
} | |||||
.more { | |||||
float: right; | |||||
font-size: 24rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 500; | |||||
color: #866741; | |||||
margin: 16rpx 20rpx; | |||||
} | |||||
.rup { | |||||
width: 13rpx; | |||||
height: 20rpx; | |||||
margin: 2rpx 0 0 6rpx; | |||||
} | |||||
.contBox { | |||||
overflow: hidden; | |||||
/* width: 96%; */ | |||||
margin: -50rpx auto 0 auto; | |||||
} | |||||
.topImg { | |||||
width: 100%; | |||||
height: 140rpx; | |||||
border-radius: 16rpx; | |||||
margin-bottom: 40rpx; | |||||
/* background-color: chartreuse; */ | |||||
} | |||||
.topImg image { | |||||
border-radius: 16rpx; | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
.itemBox { | |||||
overflow: hidden; | |||||
display: -webkit-box; | |||||
overflow-x: scroll; | |||||
-webkit-overflow-scrolling: touch; | |||||
margin: 20rpx auto; | |||||
width: 96%; | |||||
} | |||||
.itemBox::-webkit-scrollbar { | |||||
display: none; | |||||
} | |||||
.item { | |||||
width: 240rpx; | |||||
/* background-color: antiquewhite; */ | |||||
margin-right: 20rpx; | |||||
} | |||||
.itemImg { | |||||
position: relative; | |||||
width: 240rpx; | |||||
height: 240rpx; | |||||
border-radius: 16rpx; | |||||
/* background-color: aquamarine; */ | |||||
} | |||||
.itemImg image { | |||||
width: 100%; | |||||
height: 100%; | |||||
border-radius: 16rpx; | |||||
} | |||||
.sellout { | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
background-color: rgba(0, 0, 0, 0.5); | |||||
width: 240rpx; | |||||
height: 240rpx; | |||||
border-radius: 20rpx; | |||||
} | |||||
.selloutImg { | |||||
width: 195rpx !important; | |||||
height: 154rpx !important; | |||||
margin: 18% auto; | |||||
display: block; | |||||
} | |||||
.titleNameBox { | |||||
/* font-size: 18px; */ | |||||
height: 80rpx; | |||||
line-height: 40rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
} | |||||
.titleName { | |||||
width: 100%; | |||||
font-size: 28rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 500; | |||||
color: #333; | |||||
margin-top: 10rpx; | |||||
display: -webkit-box; | |||||
-webkit-line-clamp: 2; | |||||
-webkit-box-orient: vertical; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
} | |||||
.priceBox { | |||||
overflow: hidden; | |||||
margin: 10rpx 0; | |||||
} | |||||
.f { | |||||
float: left; | |||||
} | |||||
.r { | |||||
float: right; | |||||
} | |||||
.sellingBox { | |||||
overflow: hidden; | |||||
} | |||||
.fuhao { | |||||
color: #df2d2d; | |||||
font-size: 24rpx; | |||||
float: left; | |||||
font-family: OPPOSans; | |||||
/* font-weight: bold; */ | |||||
margin-top: 10rpx; | |||||
} | |||||
.int { | |||||
float: left; | |||||
font-size: 36rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: bold; | |||||
color: #df2d2d; | |||||
} | |||||
.originalBox { | |||||
overflow: hidden; | |||||
} | |||||
.origina { | |||||
text-align: right; | |||||
font-size: 24rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 400; | |||||
text-decoration: line-through; | |||||
color: #999; | |||||
margin-top: 10rpx; | |||||
margin-right: 10rpx; | |||||
} | |||||
.countBox { | |||||
width: 100%; | |||||
height: 46rpx; | |||||
background-image: url("https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_icon_bq.png"); | |||||
background-size: 100% 100%; | |||||
background-repeat: no-repeat; | |||||
margin-bottom: 20rpx; | |||||
line-height: 46rpx; | |||||
overflow: hidden; | |||||
} | |||||
.countText { | |||||
font-size: 22rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 400; | |||||
color: #999; | |||||
background: linear-gradient(180deg, #dcb07d 0%, #f5e0bf 100%); | |||||
-webkit-background-clip: text; | |||||
-webkit-text-fill-color: transparent; | |||||
margin-left: 8rpx; | |||||
} | |||||
.countDate { | |||||
font-size: 24rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: bold; | |||||
color: #4c3820; | |||||
margin-right: 8rpx; | |||||
} | |||||
.moreItem { | |||||
background: #f7f7f7; | |||||
border-radius: 8px; | |||||
} | |||||
.noDataImg { | |||||
width: 160rpx; | |||||
height: 160rpx; | |||||
margin: 25% auto 5% auto; | |||||
} | |||||
.noDataImg image { | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
.noDataText { | |||||
text-align: center; | |||||
font-size: 22rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 500; | |||||
color: #999; | |||||
} | |||||
.product { | |||||
width: 96%; | |||||
height: 140rpx; | |||||
margin: 30rpx auto 10rpx; | |||||
border-radius: 16rpx; | |||||
overflow: hidden; | |||||
} | |||||
.product image { | |||||
height: 100%; | |||||
display: block; | |||||
width: 100%; | |||||
} | |||||
@@ -0,0 +1,46 @@ | |||||
const app = getApp() | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 | |||||
*/ | |||||
properties: { | |||||
paramAtoB: String, | |||||
from: String, | |||||
data: { | |||||
value: {}, | |||||
type: Object | |||||
}, | |||||
}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
mouldType: 0, | |||||
}, | |||||
attached: function () { | |||||
// 在组件实例进入页面节点树时执行 | |||||
if (app.globalData.mouldType) { | |||||
this.setData({ | |||||
mouldType: app.globalData.mouldType | |||||
}) | |||||
} | |||||
}, | |||||
methods: { | |||||
gotoDetail(e) { | |||||
let couponId = e.currentTarget.dataset.couponid; | |||||
let title = e.currentTarget.dataset.title; | |||||
let id = e.currentTarget.dataset.id; | |||||
let targetAd = e.currentTarget.dataset.targetad; | |||||
if (id && targetAd != 7) { | |||||
tt.navigateTo({ | |||||
url: `/pages/coupon/detail/index?couponChannelId=${id}&couponId=${couponId}&title=${title}`, | |||||
}) | |||||
} else if (targetAd == 7) { | |||||
tt.navigateTo({ | |||||
url: `/pages/spellGroup/mySpellGroup/index?couponChannelId=${id}&couponId=${couponId}&title=${title}`, | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
}); |
@@ -0,0 +1,6 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": { | |||||
"i-button": "../../dist/button/index" | |||||
} | |||||
} |
@@ -0,0 +1,75 @@ | |||||
<view class='navigator' bindtap='gotoDetail' data-id='{{data.id}}' data-targetAd='{{data.targetAd}}' hover-class='hover' | |||||
data-couponId='{{data.couponId}}' data-title='{{data.title}}'> | |||||
<view class="presell" tt:if="{{data.type==10}}" style="{{mouldType==1?'top: 280rpx;':''}}">预售 </view> | |||||
<!-- 首页优惠券列表页面 --> | |||||
<view class="coupons"> | |||||
<!-- fromMerchant 根据这个字段判断 --> | |||||
<view class="superscript" tt:if="{{from == 'fromMerchant'}}"> | |||||
<!-- 角标的三种实现 --> | |||||
<view class="rect" style='background: #31b968;' tt:if="{{data.targetAd == 2}}"></view> | |||||
<view class="rect" style='background: orange;' tt:if="{{data.targetAd == 6}}"></view> | |||||
<view class="rect" style='background: #d900ae;' tt:if="{{data.targetAd == 7}}"></view> | |||||
<view class="rect" style='background: #5dae01;' tt:if="{{data.targetAd == 5}}"></view> | |||||
<view class="desc" tt:if="{{data.targetAd == 2}}">限时券</view> | |||||
<view class="desc" tt:if="{{data.targetAd == 6}}">砍价券</view> | |||||
<view class="desc" tt:if="{{data.targetAd == 7}}">拼团券</view> | |||||
<view class="desc" tt:if="{{data.targetAd == 5}}">消费卡</view> | |||||
</view> | |||||
<view class="coupons-img"> | |||||
<image src="{{data.coverImg}}" style="{{mouldType==1?'height: 300rpx;':''}}" mode='aspectFill' lazy-load="true"> | |||||
</image> | |||||
</view> | |||||
<view class="coupons-info"> | |||||
<view class="coupons-info-name tit">{{data.title}}</view> | |||||
<view class="coupons-info-name subtitle">{{data.subTitle}}</view> | |||||
<view class="coupons-info-price-p"> | |||||
<view class='price' tt:if="{{data.type!=10}}"> | |||||
<text tt:if="{{data.targetAd == 101||data.targetAd == 5}}"><text class='rmb'>¥</text> | |||||
<text class='num'>{{data.salePriceStr}}</text> | |||||
<text tt:if="{{!(data.type==5&&data.unit==1)}}" class='view02'>¥{{data.priceStr}}</text> | |||||
</text> | |||||
<text tt:if="{{data.targetAd == 2}}"><text class='saleprice'>抢购价</text> | |||||
<text class='rmb'>¥</text>{{data.salePriceStr}} | |||||
</text> | |||||
<text tt:if="{{data.targetAd == 6}}"><text class='saleprice'>可砍至</text> | |||||
<text class='rmb'>¥</text>{{data.salePriceStr}} | |||||
</text> | |||||
<text tt:if="{{data.targetAd == 7}}"><text class='saleprice'>拼团价</text> | |||||
<text class='rmb'>¥</text>{{data.salePriceStr}} | |||||
</text> | |||||
<view class="coupons-info-manjian" style="margin-top:10rpx;" tt:if="{{data.type == 1}}"> | |||||
<!-- <view class='view01' tt:if="{{data.unit==0}}">¥{{data.priceStr}}</view> --> | |||||
<view tt:if="{{data.unit==1}}">{{data.priceStr}}小时</view> | |||||
</view> | |||||
<view class="coupons-info-manjian" tt:elif="{{data.type == 3||data.type==4||data.type==5}}"> | |||||
<!-- <text class='view01' tt:if="{{data.unit==0}}">¥{{data.priceStr}}</text> --> | |||||
<text tt:if="{{data.unit==1}}">{{data.priceStr}}小时</text> | |||||
</view> | |||||
</view> | |||||
<view class="earnest" tt:if="{{data.type==10}}"> | |||||
预售定金:¥{{data.salePriceStr}} | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="coupons-btn"> | |||||
<!-- 优惠券价格 --> | |||||
<i-button i-class="coupons-btn-gm" tt:if="{{data.salePriceStr==0&&data.remainInventory!=0&&data.targetAd == 101}}" | |||||
data-date='{{data}}'>免费领</i-button> | |||||
<i-button i-class="coupons-btn-gm" | |||||
tt:if="{{data.salePriceStr!=0&&data.remainInventory!=0&&data.targetAd == 101||data.salePriceStr!=0&&data.remainInventory!=0&&data.targetAd == 5}}" | |||||
data-date='{{data}}'>购买</i-button> | |||||
<i-button i-class="coupons-btn-gm" tt:if="{{data.remainInventory!=0&&data.targetAd == 2}}" data-date='{{data}}'> | |||||
去抢购</i-button> | |||||
<i-button i-class="coupons-btn-gm" tt:if="{{data.remainInventory!=0&&data.targetAd == 6}}" data-date='{{data}}'> | |||||
去砍价</i-button> | |||||
<i-button i-class="coupons-btn-gm" tt:if="{{data.remainInventory!=0&&data.targetAd == 7}}" data-date='{{data}}'> | |||||
去拼团</i-button> | |||||
<i-button i-class="coupons-btn-gms" tt:if="{{data.remainInventory==0}}" data-date='{{data}}'>已售罄</i-button> | |||||
<i-button i-class="coupons-btn-gms" tt:if="{{data.status==1}}" data-date='{{data}}'>已下架</i-button> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,372 @@ | |||||
@import "../../app.ttss"; | |||||
.coupons { | |||||
position: relative; | |||||
width: 340rpx; | |||||
display: inline-block; | |||||
overflow: hidden; | |||||
border-radius: 12rpx; | |||||
} | |||||
.earnest{ | |||||
color: red; | |||||
font-size: 24rpx; | |||||
padding-left: 10rpx; | |||||
} | |||||
.coupons-border { | |||||
height: 1rpx; | |||||
left: 30rpx; | |||||
right: 30rpx; | |||||
background: #f5f5f5; | |||||
position: absolute; | |||||
bottom: 0; | |||||
} | |||||
.coupons-img image { | |||||
display: block; | |||||
width: 300rpx; | |||||
height: 176rpx; | |||||
margin: 20rpx auto 0; | |||||
/* border-top-left-radius: 10rpx; | |||||
border-top-right-radius: 10rpx; */ | |||||
} | |||||
.coupons-info { | |||||
width: 90%; | |||||
height: 152rpx; | |||||
border-radius: 0rpx 0rpx 10rpx 10rpx; | |||||
background: #fff; | |||||
margin: 0 auto; | |||||
} | |||||
.coupons-info-name { | |||||
font-size: 30rpx; | |||||
color: #3c3c3c; | |||||
letter-spacing: 0; | |||||
line-height: 38rpx; | |||||
} | |||||
.coupons-info-price { | |||||
padding: 16rpx 0 0; | |||||
} | |||||
.i { | |||||
font-size: 24rpx; | |||||
font-style: normal; | |||||
} | |||||
.coupons-info-price-p { | |||||
display: inline-block; | |||||
font-size: 50rpx; | |||||
margin-bottom: 26rpx; | |||||
width: 100%; | |||||
} | |||||
.price { | |||||
font-size: 36rpx; | |||||
font-family: PingFang-SC-Bold; | |||||
font-weight: bold; | |||||
line-height: 44rpx; | |||||
margin-left: 16rpx; | |||||
padding-top: 16rpx; | |||||
color: #fd832d; | |||||
width: 60%; | |||||
overflow: hidden; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
} | |||||
.rmb { | |||||
font-size: 24rpx !important; | |||||
margin-right: 4rpx !important; | |||||
color: #FD782D!; | |||||
} | |||||
.num { | |||||
color: #fd782d; | |||||
} | |||||
.tit { | |||||
overflow: hidden; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
font-size: 28rpx; | |||||
line-height: 32rpx; | |||||
padding-top: 20rpx; | |||||
padding-left: 10rpx; | |||||
color: #333; | |||||
letter-spacing: 0; | |||||
} | |||||
.coupons-info-price-o { | |||||
display: block; | |||||
text-align: center; | |||||
font-size: 26rpx; | |||||
color: #b4b4b4; | |||||
letter-spacing: 0.96rpx; | |||||
text-decoration: line-through; | |||||
line-height: 24rpx; | |||||
} | |||||
.coupons-info-distance { | |||||
font-size: 22rpx; | |||||
color: #c0c0c0; | |||||
letter-spacing: 0; | |||||
padding-bottom: 10rpx; | |||||
line-height: 30rpx; | |||||
} | |||||
.coupons-info-address { | |||||
font-size: 22rpx; | |||||
color: #585858; | |||||
letter-spacing: 0; | |||||
line-height: 30rpx; | |||||
} | |||||
.coupons-btn { | |||||
position: absolute; | |||||
bottom: 14rpx; | |||||
right: 24rpx; | |||||
} | |||||
.coupons-btn-gm { | |||||
border-radius: 10px !important; | |||||
margin: 0 !important; | |||||
padding: 0 !important; | |||||
font-size: 26rpx; | |||||
color: #fff !important; | |||||
letter-spacing: 0; | |||||
height: 51rpx !important; | |||||
width: 100rpx !important; | |||||
line-height: 51rpx !important; | |||||
background: linear-gradient(127deg, rgba(252, 177, 74, 1) 0%, rgba(254, 70, 20, 1) 100%) !important; | |||||
} | |||||
.coupons-btn-gms { | |||||
background: #b9b9b9 !important; | |||||
border-radius: 10px !important; | |||||
opacity: 0.6; | |||||
margin: 0 !important; | |||||
padding: 0 !important; | |||||
font-family: PingFangSC-Semibold; | |||||
font-size: 26rpx; | |||||
font-weight: 400; | |||||
color: #fff !important; | |||||
letter-spacing: 0; | |||||
height: 51rpx !important; | |||||
width: 100rpx !important; | |||||
line-height: 51rpx !important; | |||||
} | |||||
.subtitle { | |||||
font-size: 24rpx; | |||||
color: #999; | |||||
overflow: hidden; | |||||
height: 24rpx; | |||||
width: 65%; | |||||
padding-left: 10rpx; | |||||
line-height: 24rpx; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
margin-top: 12rpx; | |||||
} | |||||
.coupons-info-manjian { | |||||
font-weight: normal; | |||||
font-size: 20rpx; | |||||
line-height: 34rpx; | |||||
display: inline-block; | |||||
color: #ff4949; | |||||
letter-spacing: 0; | |||||
} | |||||
.coupons-info-manjian1 { | |||||
font-weight: normal; | |||||
font-size: 20rpx; | |||||
line-height: 22rpx; | |||||
color: #919191; | |||||
letter-spacing: 0; | |||||
overflow: hidden; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
width: 300rpx; | |||||
margin-top: 16rpx; | |||||
} | |||||
.coupons-info-manjian text { | |||||
display: block; | |||||
line-height: 20rpx; | |||||
} | |||||
.coupons-info-manjian > text:nth-of-type(1) { | |||||
display: block; | |||||
/* color: #FF4949; */ | |||||
opacity: 0.6; | |||||
} | |||||
.view02 { | |||||
font-size: 20rpx; | |||||
line-height: 34rpx; | |||||
text-decoration: line-through; | |||||
color: #999 !important; | |||||
font-weight: normal; | |||||
letter-spacing: 0; | |||||
margin-left: 10rpx; | |||||
} | |||||
.view01 { | |||||
text-decoration: line-through; | |||||
color: #999 !important; | |||||
} | |||||
.txt2 { | |||||
display: block; | |||||
color: #ccc; | |||||
} | |||||
/**上拉加载更多**/ | |||||
.userinfo { | |||||
display: flex; | |||||
flex-direction: column; | |||||
align-items: center; | |||||
} | |||||
.userinfo-avatar { | |||||
width: 128rpx; | |||||
height: 128rpx; | |||||
margin: 20rpx; | |||||
border-radius: 50%; | |||||
} | |||||
.userinfo-nickname { | |||||
color: #aaa; | |||||
} | |||||
.sy { | |||||
display: block; | |||||
text-align: right; | |||||
width: 181rpx; | |||||
font-size: 24rpx; | |||||
color: #999; | |||||
height: 40rpx; | |||||
margin-top: 106rpx; | |||||
} | |||||
.usermotto { | |||||
margin-top: 200px; | |||||
} | |||||
scroll-view { | |||||
width: 100%; | |||||
} | |||||
.item { | |||||
width: 90%; | |||||
height: 300rpx; | |||||
margin: 20rpx auto; | |||||
background: brown; | |||||
overflow: hidden; | |||||
} | |||||
.item .img { | |||||
width: 430rpx; | |||||
margin-right: 20rpx; | |||||
float: left; | |||||
} | |||||
.title { | |||||
font-size: 30rpx; | |||||
display: block; | |||||
margin: 30rpx auto; | |||||
} | |||||
.description { | |||||
font-size: 26rpx; | |||||
line-height: 15rpx; | |||||
} | |||||
.navigator-hover { | |||||
opacity: 1 !important; | |||||
background: #fff; | |||||
} | |||||
.hover { | |||||
opacity: 0.6; | |||||
} | |||||
.navigator { | |||||
display: inline-block; | |||||
background: #fff; | |||||
border-radius: 12rpx; | |||||
position: relative; | |||||
} | |||||
.presell { | |||||
position: absolute; | |||||
width: 300rpx; | |||||
height: 40rpx; | |||||
background-color: rgba(247, 21, 21, 0.6); | |||||
z-index: 100; | |||||
top: 158rpx; | |||||
line-height: 20px; | |||||
text-align: center; | |||||
color: #fff; | |||||
margin-left: 20rpx; | |||||
font-size: 26rpx; | |||||
} | |||||
.navigator:nth-of-type(2n+1) { | |||||
/* margin-right: 10rpx; */ | |||||
} | |||||
.superscript { | |||||
position: absolute; | |||||
top: -10rpx; | |||||
left: -12rpx; | |||||
width: 86rpx; | |||||
height: 86rpx; | |||||
overflow: hidden; | |||||
} | |||||
/* 使用背景色渐变 */ | |||||
.superscript .gradual { | |||||
width: 100%; | |||||
height: 100%; | |||||
background: linear-gradient(135deg, #31b968 50%, transparent 50%); | |||||
} | |||||
/* 使用三角形 */ | |||||
.superscript .triangle { | |||||
width: 0; | |||||
height: 0; | |||||
border-top: 130rpx solid #31b968; | |||||
border-right: 130rpx solid transparent; | |||||
} | |||||
/* 使用矩形旋转, 和父节点的 overflow:hidden 配合 */ | |||||
.superscript .rect { | |||||
width: 176rpx; | |||||
height: 183rpx; | |||||
margin: -91rpx 0 0 -91rpx; | |||||
transform: rotateZ(45deg); | |||||
} | |||||
.superscript .desc { | |||||
position: absolute; | |||||
top: 29%; | |||||
left: 16%; | |||||
z-index: 1; | |||||
color: #fff; | |||||
font-size: 23rpx; | |||||
transform: rotate(-45deg); | |||||
} | |||||
.saleprice { | |||||
font-size: 24rpx; | |||||
display: inline-block; | |||||
margin-right: 10rpx; | |||||
font-weight: 400; | |||||
} |
@@ -0,0 +1,120 @@ | |||||
const config = require("../../config/config"); | |||||
const Http = require("../../utils/HttpBasics"); | |||||
// d:\fumaolianke\ttFmC\tt富茂C\components\getPhoen\getPhoen.js | |||||
Component({ | |||||
data: { | |||||
phone: "", | |||||
auth: "", | |||||
time: "获取验证码", | |||||
verFlag: true, | |||||
currentTime: 61, | |||||
setInter: '' | |||||
}, | |||||
properties: { | |||||
type: Boolean, | |||||
showBox: false | |||||
}, | |||||
methods: { | |||||
getCode() { | |||||
var that = this; | |||||
var currentTime = that.data.currentTime | |||||
that.data.setInter = setInterval(function () { | |||||
currentTime--; | |||||
that.setData({ | |||||
time: currentTime + '秒' | |||||
}) | |||||
if (currentTime <= 0) { | |||||
clearInterval(that.data.setInter) | |||||
that.setData({ | |||||
time: '获取验证码', | |||||
currentTime: 61, | |||||
verFlag: true | |||||
}) | |||||
} | |||||
}, 1000) | |||||
}, | |||||
setPhone(e) { | |||||
this.setData({ | |||||
phone: e.detail.value | |||||
}) | |||||
}, | |||||
setAuth(e) { | |||||
this.setData({ | |||||
auth: e.detail.value | |||||
}) | |||||
}, | |||||
verify() { | |||||
let phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/; | |||||
if (!this.data.verFlag) { | |||||
return | |||||
} | |||||
if (phoneReg.test(this.data.phone)) { | |||||
Http.get({ | |||||
url: config.api.sendValidationCode, | |||||
data: { | |||||
phone: this.data.phone, | |||||
type:6 | |||||
} | |||||
}).then(res => { | |||||
console.log(res, "res"); | |||||
this.setData({ | |||||
verFlag: false | |||||
}) | |||||
this.getCode() | |||||
}).catch(err => { | |||||
tt.showToast({ | |||||
title: err.message ? err.message : err.data, // 内容 | |||||
icon: "none" | |||||
}); | |||||
}) | |||||
} else { | |||||
tt.showToast({ | |||||
title: '手机号有误', | |||||
icon: "none", | |||||
}) | |||||
} | |||||
}, | |||||
hieBox(){ | |||||
this.triggerEvent("heiBox" ,false) | |||||
}, | |||||
hiePhoen(){ | |||||
this.triggerEvent("hiePhoen" ,false) | |||||
}, | |||||
send() { | |||||
let phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/; | |||||
if (phoneReg.test(this.data.phone)) { | |||||
if(this.data.auth!=""){ | |||||
Http.get({ | |||||
url: config.api.validationCode, | |||||
data: { | |||||
phone: this.data.phone, | |||||
code: this.data.auth, | |||||
type:6 | |||||
} | |||||
}).then(res => { | |||||
this.hiePhoen() | |||||
}).catch(err => { | |||||
tt.showToast({ | |||||
title: err.message ? err.message : err.data, // 内容 | |||||
icon: "none" | |||||
}); | |||||
}) | |||||
}else{ | |||||
tt.showToast({ | |||||
title: '请输入验证码', | |||||
icon: "none", | |||||
}) | |||||
} | |||||
} else { | |||||
tt.showToast({ | |||||
title: '手机号有误', | |||||
icon: "none", | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
}) |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,29 @@ | |||||
<view class="box" tt:if="{{showBox}}"> | |||||
<view class="phoneBox"> | |||||
<view class="hiePhone"> | |||||
<view class="f">授权手机号</view> | |||||
<view class="r" bindtap="hieBox" > | |||||
<image src="../../assets/itemImg/phDel.png" style="width: 100%;height: 100%;"/> | |||||
</view> | |||||
</view> | |||||
<view class="userPhone"> | |||||
<input | |||||
type="number" | |||||
placeholder="请输入手机号码" | |||||
bindinput="setPhone" | |||||
value = "{{phone}}" | |||||
class="inputPhone" | |||||
/> | |||||
<view class="btn" bindtap="verify">{{time}}</view> | |||||
</view> | |||||
<input | |||||
type="number" | |||||
placeholder="请输入验证码" | |||||
bindinput="setAuth" | |||||
value="{{auth}}" | |||||
class="auth" | |||||
/> | |||||
<view class="send" bindtap="send">授权手机号</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,95 @@ | |||||
.box{ | |||||
width: 100%; | |||||
height: 100vh; | |||||
position: fixed; | |||||
top: 0; | |||||
left: 0; | |||||
background: rgba(0, 0, 0, 0.3); | |||||
z-index: 100000; | |||||
} | |||||
.phoneBox{ | |||||
position: absolute; | |||||
width: 80%; | |||||
/* height: 200rpx; */ | |||||
border-radius: 12rpx; | |||||
background-color: #f6f6f6; | |||||
transform: translate(-50%, -50%); | |||||
top: 50%; | |||||
left: 50%; | |||||
overflow: hidden; | |||||
} | |||||
.userPhone{ | |||||
overflow: hidden; | |||||
margin: 20rpx ; | |||||
} | |||||
.inputPhone{ | |||||
float: left; | |||||
text-indent: 40rpx; | |||||
font-size: 28rpx; | |||||
color: #000; | |||||
letter-spacing: 0; | |||||
margin-top: 28rpx; | |||||
width: 50%; | |||||
display: block; | |||||
} | |||||
.btn{ | |||||
width: 210rpx !important; | |||||
border-radius: 16rpx; | |||||
margin-top: 12rpx; | |||||
margin-right: 30rpx; | |||||
font-size: 30rpx!important; | |||||
letter-spacing: 0; | |||||
padding: 0!important; | |||||
float: right; | |||||
height: 80rpx; | |||||
line-height: 80rpx; | |||||
background: #52a0fd; | |||||
color: #fff; | |||||
text-align: center; | |||||
} | |||||
.auth{ | |||||
width: 50%; | |||||
text-indent: 40rpx; | |||||
font-size: 28rpx; | |||||
color: #000; | |||||
letter-spacing: 0; | |||||
margin: 20rpx; | |||||
} | |||||
.send{ | |||||
width: 80%; | |||||
line-height: 80rpx; | |||||
height: 80rpx; | |||||
background: #52a0fd; | |||||
color: #fff; | |||||
font-size: 36rpx; | |||||
text-align: center; | |||||
margin: 40rpx auto 20rpx auto; | |||||
border-radius: 12rpx; | |||||
font-size: 30rpx; | |||||
} | |||||
.hiePhone{ | |||||
width: 80%; | |||||
margin: 10rpx auto; | |||||
overflow: hidden; | |||||
} | |||||
.f{ | |||||
float: left; | |||||
font-size: 30rpx; | |||||
height: 60rpx; | |||||
line-height: 60rpx; | |||||
margin-left: 30%; | |||||
} | |||||
.r{ | |||||
width: 40rpx; | |||||
height: 40rpx; | |||||
/* line-height: 60rpx; */ | |||||
text-align: center; | |||||
float: right; | |||||
margin-top: 10rpx; | |||||
/* font-size: 30rpx; */ | |||||
} | |||||
input{ | |||||
text-align: left; | |||||
} |
@@ -0,0 +1,143 @@ | |||||
// pages/index/sw/index.js | |||||
let config = require("../../config/config.js"); | |||||
let Http = require("../../utils/HttpBasics"); | |||||
let app = getApp(); | |||||
const imgurl = require("../../utils/imgurl"); | |||||
const bgColor = require("../../utils/bgColor.js") | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 | |||||
*/ | |||||
properties: {}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
sql: bgColor.colorFirst.main.sql, | |||||
txt: bgColor.colorFirst.main.txt, | |||||
change: imgurl.change.url, | |||||
None: imgurl.None.url, | |||||
jianUrl: imgurl.jian.url, | |||||
barginicon: imgurl.barginicon.url, | |||||
wangmeimeibargin: imgurl.wangmeimeibargin.url, | |||||
kData:[], | |||||
kSize:'', | |||||
pSize: '', | |||||
pData:[], | |||||
couponId:'', | |||||
couponId1: '', | |||||
}, | |||||
/** | |||||
* 组件的方法列表 | |||||
*/ | |||||
methods: { | |||||
//获取砍价拼团数据 | |||||
getList(val) { | |||||
// debugger | |||||
let that = this; | |||||
let param = '' | |||||
if(val=='1'){ | |||||
param={ | |||||
targetAd : 6, | |||||
couponId: this.data.couponId | |||||
} | |||||
}else{ | |||||
param = { | |||||
targetAd : 7, | |||||
couponId: this.data.couponId1 | |||||
} | |||||
} | |||||
Http.get({ | |||||
url: config.api.change, | |||||
data:param, | |||||
}).then(res => { | |||||
if(res.data != undefined && res.data){ | |||||
if(val=='1'){ | |||||
that.setData({ | |||||
kData: res.data.data, | |||||
kSize: res.data.size, | |||||
couponId: res.data.data.couponId, | |||||
}); | |||||
}else{ | |||||
that.setData({ | |||||
pData: res.data.data, | |||||
pSize:res.data.size, | |||||
couponId1: res.data.data.couponId | |||||
}); | |||||
} | |||||
} else { | |||||
if(val=='1'){ | |||||
that.setData({ | |||||
kData: '', | |||||
kSize: '', | |||||
couponId: '', | |||||
}); | |||||
}else{ | |||||
that.setData({ | |||||
pData: '', | |||||
pSize:'', | |||||
couponId1: '' | |||||
}); | |||||
} | |||||
} | |||||
}) | |||||
.catch(err => { | |||||
console.log(err) | |||||
tt.showToast({ | |||||
title: err.errMsg, | |||||
icon: 'none', | |||||
duration: 2000, | |||||
mask: false | |||||
}); | |||||
}) | |||||
}, | |||||
// 换一换 | |||||
getChange(){ | |||||
let that = this | |||||
if (that.kSize != 1 && that.kSize != 0){ | |||||
that.getList(1) | |||||
} | |||||
if (that.pSize!=1 && that.pSize !=0) { | |||||
that.getList(2) | |||||
} | |||||
}, | |||||
//跳转砍价详情 | |||||
gotokjdetail: function (e) { | |||||
tt.navigateTo({ | |||||
url: `/pages/coupon/detail/index?couponChannelId=${ | |||||
e.currentTarget.dataset.couponchannelid | |||||
}&couponId=${ | |||||
e.currentTarget.dataset.couponid | |||||
}&targetAd=${ | |||||
e.currentTarget.dataset.targetad | |||||
}` | |||||
}); | |||||
}, | |||||
//跳转拼团详情 | |||||
gotoptdetail: function (e) { | |||||
tt.navigateTo({ | |||||
url: `/pages/spellGroup/mySpellGroup/index?couponChannelId=${ | |||||
e.currentTarget.dataset.couponchannelid | |||||
}&couponId=${ | |||||
e.currentTarget.dataset.couponid | |||||
}&targetAd=${ | |||||
e.currentTarget.dataset.targetad | |||||
}` | |||||
}); | |||||
}, | |||||
}, | |||||
ready() { | |||||
app.couponChannelListCallback = (token,val) => { | |||||
Http.setToken(token); | |||||
this.getList(1); | |||||
this.getList(2); | |||||
}; | |||||
if (app.globalData.token && app.globalData.token != null) { | |||||
app.couponChannelListCallback(app.globalData.token); | |||||
} | |||||
} | |||||
}); |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,59 @@ | |||||
<view class='hotBox'> | |||||
<view class='hotTitle'> | |||||
<view class='titleL'> | |||||
<view class='sql' style='background:{{sql}}'></view> | |||||
<text>爆款专区</text> | |||||
</view> | |||||
<view class='titleR' bindtap='getChange'tt:if="{{pSize>=2||kSize>=2}}" > | |||||
<text style='color:{{txt}}'>换一换</text> | |||||
<view> | |||||
<image src='{{change}}' bindtap='' mode='aspectFill'></image> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class='hotCon clearfix'> | |||||
<view class='kanjia' tt:if="{{kSize}}" bindtap="gotokjdetail" data-couponId='{{kData.couponId}}' data-couponChannelId="{{kData.id}}" data-targetAd="{{kData.targetAd}}" > | |||||
<view > | |||||
<image mode='aspectFill' lazy-load='true' src="{{kData.coverImg}}" /> | |||||
</view> | |||||
<view class='kjText'> | |||||
<text class='title'>{{kData.title}}</text> | |||||
<text class='price'>¥{{kData.priceStr}}</text> | |||||
<text class='sale'><text>¥</text>{{kData.salePriceStr}}</text> | |||||
<view class=' btn btnk'>砍价</view> | |||||
</view> | |||||
</view> | |||||
<view class='kanjia' tt:if="{{!kSize}}"> | |||||
<view> | |||||
<image src='{{None}}' bindtap='' mode='aspectFill'></image> | |||||
</view> | |||||
<view class='kjText'> | |||||
<text class='title'>疯狂补货中…</text> | |||||
<text class='expect'>敬请期待</text> | |||||
<view class='btnk btnNone'>砍价</view> | |||||
</view> | |||||
</view> | |||||
<view class='pintuan' tt:if="{{pSize}}" bindtap="gotoptdetail" data-couponId='{{pData.couponId}}' data-couponChannelId="{{pData.id}}" data-targetAd="{{pData.targetAd}}"> | |||||
<view> | |||||
<image mode='aspectFill' lazy-load='true' src="{{pData.coverImg}}" /> | |||||
</view> | |||||
<view class='ptText'> | |||||
<text class='title'>{{pData.title}}</text> | |||||
<text class='price'>¥{{pData.priceStr}}</text> | |||||
<text class='sale'> <text>¥</text>{{pData.salePriceStr}}</text> | |||||
<view class='btn btnp' >拼团</view> | |||||
</view> | |||||
</view> | |||||
<view class='pintuan' tt:if="{{!pSize}}"> | |||||
<view> | |||||
<image src='{{None}}' bindtap='' mode='aspectFill'></image> | |||||
</view> | |||||
<view class='ptText'> | |||||
<text class='title'>疯狂补货中...</text> | |||||
<text class='expect'>敬请期待</text> | |||||
<view class='btnp btnNone'>拼团</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,133 @@ | |||||
@import "../../app.ttss"; | |||||
.hotBox{ | |||||
width:710rpx; | |||||
margin: 0 auto ; | |||||
} | |||||
.hotTitle{ | |||||
width: 100%; | |||||
height: 60rpx; | |||||
line-height: 60rpx; | |||||
font-size: 30rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
font-family:PingFangSC-Medium; | |||||
} | |||||
.titleL .titleR{ | |||||
width: 100rpx; | |||||
} | |||||
.titleR text{ | |||||
float: left; | |||||
margin-right: 10rpx; | |||||
font-family:PingFangSC-Regular!important; | |||||
} | |||||
.titleR view{ | |||||
height: 40rpx; | |||||
width: 40rpx; | |||||
/* margin-top: 10rpx; */ | |||||
float: left; | |||||
} | |||||
.titleR image{ | |||||
height: 28rpx; | |||||
width: 28rpx; | |||||
} | |||||
.sql{ | |||||
width:12rpx; | |||||
height:24rpx; | |||||
border-radius:8rpx; | |||||
float: left; | |||||
margin: 20rpx 10rpx 0 0; | |||||
} | |||||
.hotCon{ | |||||
width: 100%; | |||||
} | |||||
.kanjia, .pintuan{ | |||||
width: 346rpx; | |||||
height: 156rpx; | |||||
float: left; | |||||
border-radius: 12rpx; | |||||
display: flex; | |||||
justify-content: space-between; | |||||
position: relative; | |||||
} | |||||
.kanjia{ | |||||
margin-right: 18rpx; | |||||
background:linear-gradient(130deg,rgba(50,177,252,1) 0%,rgba(47,108,255,1) 100%); | |||||
} | |||||
.pintuan{ | |||||
background:linear-gradient(127deg,rgba(252,177,74,1) 0%,rgba(254,70,20,1) 100%); | |||||
} | |||||
.hotCon image{ | |||||
width: 86rpx; | |||||
height: 86rpx; | |||||
margin: 24rpx 0 46rpx 16rpx; | |||||
} | |||||
.hotCon .btn{ | |||||
width:80rpx; | |||||
height:44rpx; | |||||
line-height: 44rpx; | |||||
background:rgba(255,255,255,1); | |||||
border-radius:18rpx; | |||||
font-size: 24rpx; | |||||
position: absolute; | |||||
right: 20rpx; | |||||
bottom: 20rpx; | |||||
text-align: center; | |||||
} | |||||
.btnk{ | |||||
color: #2C8DFF; | |||||
} | |||||
.btnp{ | |||||
color: #FD782D; | |||||
} | |||||
.btnNone{ | |||||
width:80rpx; | |||||
height:44rpx; | |||||
line-height: 44rpx; | |||||
border-radius:18rpx; | |||||
font-size: 24rpx; | |||||
position: absolute; | |||||
right: 20rpx; | |||||
bottom: 20rpx; | |||||
text-align: center; | |||||
background:rgba(255,255,255,0.5) | |||||
} | |||||
.kjText,.ptText{ | |||||
color: #FFFFFF; | |||||
margin: 14rpx 10rpx 20rpx 10rpx; | |||||
} | |||||
.title{ | |||||
width: 210rpx; | |||||
font-size: 30rpx; | |||||
overflow: hidden; | |||||
text-overflow:ellipsis; | |||||
white-space:nowrap; | |||||
float: left; | |||||
} | |||||
.price{ | |||||
width: 128rpx; | |||||
overflow: hidden; | |||||
text-overflow:ellipsis; | |||||
white-space:nowrap; | |||||
font-size: 22rpx; | |||||
text-decoration:line-through; | |||||
float: left; | |||||
} | |||||
.expect{ | |||||
width: 210rpx; | |||||
font-size: 22rpx; | |||||
float: left; | |||||
} | |||||
.sale{ | |||||
width: 140rpx; | |||||
font-size: 32rpx; | |||||
float: left; | |||||
margin-top: -8rpx; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
overflow: hidden; | |||||
} | |||||
.sale text{ | |||||
font-size: 20rpx!important; | |||||
} |
@@ -0,0 +1 @@ | |||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="128px" height="128.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#202020" d="M711.1 928.3c-13.2 0-26.3-5-36.4-15.2L297.8 532.9c-20.1-20.2-20.1-53.1 0-73.3L674.7 79.2c20.1-20.3 52.6-20.3 72.7 0 20.1 20.2 20.1 53.1 0 73.3L406.9 496.2l340.5 343.6c20.1 20.3 20.1 53.1 0 73.3-10 10.1-23.2 15.2-36.3 15.2z" /></svg> |
@@ -0,0 +1 @@ | |||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="128px" height="128.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#202020" d="M962.986667 480.426667l-422.4-379.733334a42.666667 42.666667 0 0 0-57.173334 0l-422.4 379.733334a42.666667 42.666667 0 0 0 57.173334 63.146666l9.813333-8.533333V896a42.666667 42.666667 0 0 0 42.666667 42.666667h682.666666a42.666667 42.666667 0 0 0 42.666667-42.666667v-360.96l9.813333 8.533333a42.666667 42.666667 0 0 0 28.586667 11.093334 42.666667 42.666667 0 0 0 31.573333-14.08 42.666667 42.666667 0 0 0-2.986666-60.16zM469.333333 853.333333v-170.666666h85.333334v170.666666z m341.333334-384v384h-170.666667v-213.333333a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666667v213.333333H213.333333v-384a61.013333 61.013333 0 0 0 0-9.386666l298.666667-270.08 298.666667 270.08a61.013333 61.013333 0 0 0 0 9.386666z" /></svg> |
@@ -0,0 +1,83 @@ | |||||
const app = getApp() | |||||
Component({ | |||||
properties: { | |||||
background: { | |||||
type: String, | |||||
value: '#F4F5F9' | |||||
}, | |||||
color: { | |||||
type: String, | |||||
value: '#000' | |||||
}, | |||||
text: { | |||||
type: String, | |||||
value: 'Wechat' | |||||
}, | |||||
showLocationIf: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
back: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
home: { | |||||
type: Boolean, | |||||
value: false | |||||
} | |||||
}, | |||||
data: { | |||||
array: ['A广场', 'B广场-北京西单'], | |||||
index: 1, | |||||
statusBarHeight: app.statusBarHeight + 'px', | |||||
navigationBarHeight: (app.statusBarHeight + 44) + 'px', | |||||
indexFlaig:null, | |||||
}, | |||||
methods: { | |||||
backHome: function () { | |||||
app.globalData.selected = 0 | |||||
let tempUrl = '/index/index' | |||||
tt.reLaunch({ | |||||
url: tempUrl, | |||||
success(res) { | |||||
console.log(`${res}`); | |||||
}, | |||||
fail(err) { | |||||
console.log(`navigateTo调用失败`,err,tempUrl); | |||||
}, | |||||
}); | |||||
}, | |||||
bindPickerChange: function (e) { | |||||
console.log('picker发送选择改变,携带值为', e.detail.value) | |||||
this.setData({ | |||||
index: e.detail.value | |||||
}) | |||||
}, | |||||
back:function() { | |||||
tt.navigateBack({ | |||||
delta: 1, | |||||
success(res) { | |||||
console.log(`${res}`); | |||||
}, | |||||
fail(err) { | |||||
console.log(`navigateTo调用失败`,err); | |||||
}, | |||||
}) | |||||
} | |||||
}, | |||||
attached: function(){ | |||||
this.setData({ | |||||
indexFlaig:app.globalData.selected | |||||
}) | |||||
let pages = getCurrentPages(); | |||||
console.log(pages.length); | |||||
if (pages.length <= 1) { | |||||
this.setData({ | |||||
back: false | |||||
}) | |||||
} | |||||
} | |||||
}) |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,20 @@ | |||||
<view class="navbar" style="background:{{background}}!important;"> | |||||
<view style="{{'height: ' + statusBarHeight}}"></view> | |||||
<view class='title-container'> | |||||
<view class='capsule' tt:if="{{ back || home}}"> | |||||
<view bindtap='back' tt:if="{{indexFlaig!=2 && back}}" > | |||||
<image style="left:36%;" src='img/back.svg'></image> | |||||
</view> | |||||
<view bindtap='backHome' tt:if="{{home}}"> | |||||
<image src='img/home.svg' style="width:90%;"></image> | |||||
</view> | |||||
</view> | |||||
<view class='title' style="color:{{color}}!important">{{text}}</view> | |||||
<picker bindchange="bindPickerChange" tt:if="{{showLocationIf}}" class="pick-box" value="{{index}}" range="{{array}}"> | |||||
<icon class='iconfont icon-daohangdizhiweizhi'></icon> | |||||
<view class="picker locations"> | |||||
{{array[index]}} | |||||
</view> | |||||
</picker> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,92 @@ | |||||
.navbar { | |||||
width: 100vw; | |||||
background-color: #F4F5F9; | |||||
position: fixed; | |||||
left: 0; | |||||
top: 0; | |||||
/* height:150rpx; */ | |||||
overflow: hidden; | |||||
z-index: 400000000; | |||||
} | |||||
.title-container { | |||||
height: 44px; | |||||
display: flex; | |||||
align-items: center; | |||||
position: relative; | |||||
} | |||||
.capsule { | |||||
margin-left: 10px; | |||||
height: 32px; | |||||
border: 1px solid #e1e1e3; | |||||
border-radius: 60px; | |||||
display: flex; | |||||
align-items: center; | |||||
padding: 0 20rpx; | |||||
background: #fff!important; | |||||
} | |||||
.capsule > view { | |||||
width: 35px; | |||||
height: 60%; | |||||
position: relative; | |||||
} | |||||
.capsule > view:nth-child(2) { | |||||
border-left: 1px solid #777; | |||||
} | |||||
.capsule image { | |||||
width: 70%; | |||||
height: 100%; | |||||
position: absolute; | |||||
left: 50%; | |||||
top: 50%; | |||||
transform: translate(-50%,-50%); | |||||
} | |||||
.title { | |||||
color: #000; | |||||
position: absolute; | |||||
left: 104px; | |||||
right: 104px; | |||||
font-weight: 600; | |||||
font-size: 32rpx; | |||||
text-align: center; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
white-space: nowrap; | |||||
} | |||||
@font-face { | |||||
font-family: 'iconfont'; /* project id 1353695 */ | |||||
src: url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.eot'); | |||||
src: url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.eot?#iefix') format('embedded-opentype'), | |||||
url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.woff2') format('woff2'), | |||||
url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.woff') format('woff'), | |||||
url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.ttf') format('truetype'), | |||||
url('//at.alicdn.com/t/font_1353695_nyv2ld9xqk8.svg#iconfont') format('svg'); | |||||
} | |||||
.iconfont { | |||||
font-family: "iconfont" !important; | |||||
font-size: 16px; | |||||
font-style: normal; | |||||
-webkit-font-smoothing: antialiased; | |||||
-moz-osx-font-smoothing: grayscale; | |||||
} | |||||
.icon-daohangdizhiweizhi:before { | |||||
content: "\e787"; | |||||
} | |||||
.locations{ | |||||
font-size: 28rpx; | |||||
display: inline-block; | |||||
width: 200rpx; | |||||
overflow: hidden; | |||||
text-overflow:ellipsis; | |||||
white-space: nowrap; | |||||
} | |||||
.pick-box{ | |||||
width: 260rpx; | |||||
padding-left: 20rpx; | |||||
} |
@@ -0,0 +1,45 @@ | |||||
// components/optimization/optimization.js | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 | |||||
*/ | |||||
properties: { | |||||
businessList:{ | |||||
type:Array, | |||||
value:[] | |||||
}, | |||||
businessData: { | |||||
type: Array, | |||||
value: [] | |||||
}, | |||||
}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
classIndex:0 | |||||
}, | |||||
/** | |||||
* 组件的方法列表 | |||||
*/ | |||||
methods: { | |||||
goDetail(e){ | |||||
let couponChannelId = e.currentTarget.dataset.id | |||||
let couponId = e.currentTarget.dataset.couponid | |||||
tt.navigateTo({ | |||||
url: `/pages/coupon/detail/index?couponChannelId=${couponChannelId}&couponId=${couponId}`, | |||||
}) | |||||
}, | |||||
setIndex(e){ | |||||
let index = e.currentTarget.dataset.index | |||||
let id = e.currentTarget.dataset.id | |||||
this.triggerEvent('businessid',id) | |||||
this.setData({ | |||||
classIndex:index | |||||
}) | |||||
} | |||||
} | |||||
}) |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,40 @@ | |||||
<view class="optimizationBox"> | |||||
<view class="titleImg"> | |||||
<view class="textl f">优选好物</view> | |||||
<view class="textr r">Preferred Good</view> | |||||
</view> | |||||
<view class="classifyBox"> | |||||
<view class="itemBox" tt:for="{{businessList}}" tt:key="{{index}}" bindtap="setIndex" data-index="{{index}}" data-id="{{item.id}}"> | |||||
<view class="{{classIndex==index?'className_a':'className'}}">{{item.title}}</view> | |||||
<view class="xian" tt:if="{{classIndex==index}}"></view> | |||||
</view> | |||||
</view> | |||||
<view class="contBox"> | |||||
<view class="contLsitBox"> | |||||
<view class="item" tt:for="{{businessData}}" tt:key="{{index}}" bindtap="goDetail" data-couponid="{{item.couponId}}" data-id="{{item.id}}"> | |||||
<view class="itemImg"> | |||||
<image src="{{item.coverImg}}" mode='scaleToFill'></image> | |||||
</view> | |||||
<view class="titleName">{{item.title}}</view> | |||||
<view class="priceBox"> | |||||
<view class="sellingBox f"> | |||||
<view class="fuhao">¥</view> | |||||
<view class="int">{{item.salePriceStrQ?item.salePriceStrQ:item.salePriceStr}}</view> | |||||
<view class="fuhao">{{item.salePriceStrH?'.'+item.salePriceStrH:''}}</view> | |||||
</view> | |||||
<view class="priceNum r">已售 {{item.sale}}</view> | |||||
<view class="originalBox r"> | |||||
<view class="origina">¥{{item.priceStr}}</view> | |||||
</view> | |||||
</view> | |||||
<view class="sellout" tt:if="{{item.remainInventory==0}}"> | |||||
<image class="selloutImg" src="https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_img_ysx.png"></image> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> |
@@ -0,0 +1,202 @@ | |||||
.optimizationBox { | |||||
/* overflow: hidden; */ | |||||
margin-top: 20rpx; | |||||
} | |||||
.titleImg { | |||||
width: 96%; | |||||
height: 80rpx; | |||||
margin: 0rpx auto; | |||||
background-image: url("https://formall.oss-accelerate.aliyuncs.com/cimg/v20211214/home_ggw_yxhw.png"); | |||||
background-size: 100% 100%; | |||||
background-repeat: no-repeat; | |||||
} | |||||
.textl { | |||||
font-size: 34rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: bold; | |||||
color: #dfbe99; | |||||
margin: 20rpx; | |||||
} | |||||
.textr { | |||||
font-size: 30rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 300; | |||||
color: #91897e; | |||||
margin: 20rpx; | |||||
} | |||||
.f { | |||||
float: left; | |||||
} | |||||
.r { | |||||
float: right; | |||||
} | |||||
.classifyBox { | |||||
width: 100%; | |||||
border-radius: 20rpx 20rpx 0 0; | |||||
background-color: #fff; | |||||
overflow: hidden; | |||||
display: -webkit-box; | |||||
overflow-x: scroll; | |||||
-webkit-overflow-scrolling: touch; | |||||
/* margin: 10rpx 0; *//* background: linear-gradient(0deg, #F5F5F5, #fff); */ | |||||
} | |||||
.classifyBox::-webkit-scrollbar { | |||||
display: none; | |||||
} | |||||
.itemBox { | |||||
width: 100rpx; | |||||
height: 100rpx; | |||||
margin: 0 20rpx; | |||||
} | |||||
.className { | |||||
font-size: 28rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 500; | |||||
color: #454340; | |||||
text-align: center; | |||||
margin: 20rpx auto 10rpx auto; | |||||
} | |||||
.className_a { | |||||
font-size: 30rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 800; | |||||
color: #c99f67; | |||||
text-align: center; | |||||
background: linear-gradient(180deg, #cc9a60 0%, #dfbf8e 100%); | |||||
-webkit-background-clip: text; | |||||
-webkit-text-fill-color: transparent; | |||||
margin: 20rpx auto 10rpx auto; | |||||
} | |||||
.xian{ | |||||
width: 22rpx; | |||||
height: 5rpx; | |||||
background: linear-gradient(180deg, #D5A56E, #E9D0AA); | |||||
border-radius: 3px; | |||||
margin: 0 auto; | |||||
} | |||||
.contBox{ | |||||
background: linear-gradient(0deg, #F5F5F5, rgba(255, 255, 255, 0.5)); | |||||
/* height: 350rpx; */ | |||||
} | |||||
.contLsitBox{ | |||||
width: 96%; | |||||
margin: 0 auto; | |||||
display: flex; | |||||
overflow: hidden; | |||||
justify-content: space-between; | |||||
flex-wrap: wrap; | |||||
} | |||||
.item{ | |||||
width: 49%; | |||||
background-color: #fff; | |||||
border-radius: 20rpx; | |||||
margin: 12rpx 0; | |||||
position: relative; | |||||
} | |||||
.itemImg{ | |||||
width: 100%; | |||||
height: 350rpx; | |||||
border-radius: 20rpx; | |||||
/* background-color: aquamarine; */ | |||||
} | |||||
.itemImg image{ | |||||
width: 100%; | |||||
height: 100%; | |||||
border-radius: 20rpx 20rpx 0 0; | |||||
} | |||||
.titleName{ | |||||
width:90%; | |||||
height: 80rpx; | |||||
font-size: 28rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 500; | |||||
color: #333333; | |||||
margin: 10rpx auto 0 auto; | |||||
overflow: hidden; | |||||
text-overflow: ellipsis; | |||||
display: -webkit-box; | |||||
-webkit-line-clamp: 2; | |||||
-webkit-box-orient: vertical; | |||||
white-space:normal; | |||||
} | |||||
.priceBox{ | |||||
width: 90%; | |||||
overflow: hidden; | |||||
margin: 10rpx auto; | |||||
} | |||||
.f{ | |||||
float: left; | |||||
} | |||||
.r{ | |||||
float:right; | |||||
} | |||||
.sellingBox{ | |||||
overflow: hidden | |||||
} | |||||
.fuhao{ | |||||
color: #DF2D2D; | |||||
font-size: 24rpx; | |||||
float: left; | |||||
font-family: OPPOSans; | |||||
/* font-weight: bold; */ | |||||
margin-top: 10rpx | |||||
} | |||||
.int{ | |||||
float: left; | |||||
font-size: 36rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: bold; | |||||
color: #DF2D2D; | |||||
} | |||||
.originalBox{ | |||||
overflow: hidden | |||||
} | |||||
.origina{ | |||||
text-align: right; | |||||
font-size: 24rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 400; | |||||
text-decoration: line-through; | |||||
color: #999999; | |||||
margin-top: 10rpx; | |||||
margin-right: 10rpx; | |||||
} | |||||
.priceNum{ | |||||
text-align: right; | |||||
font-size: 24rpx; | |||||
font-family: OPPOSans; | |||||
font-weight: 400; | |||||
color: #999999; | |||||
margin-top: 10rpx; | |||||
/* margin-right: 10rpx; */ | |||||
} | |||||
.sellout{ | |||||
position: absolute; | |||||
top: 0; | |||||
left: 0; | |||||
background-color: rgba(0, 0, 0, 0.5); | |||||
width: 100%; | |||||
height: 100%; | |||||
border-radius: 20rpx; | |||||
} | |||||
.selloutImg{ | |||||
width: 195rpx !important; | |||||
height: 154rpx !important; | |||||
margin: 50% auto; | |||||
display: block | |||||
} |
@@ -0,0 +1,79 @@ | |||||
const imgurl = require("../../utils/imgurl"); | |||||
Component({ | |||||
/** | |||||
* 组件的属性列表 | |||||
*/ | |||||
properties: { | |||||
merchantVoList: { | |||||
value: [], | |||||
type: Array | |||||
} | |||||
}, | |||||
/** | |||||
* 组件的初始数据 | |||||
*/ | |||||
data: { | |||||
teljpgUrl: imgurl.teljpg.url, | |||||
showMore:false, | |||||
more: "点击查看更多", | |||||
hidden:"hidden", | |||||
height: "" | |||||
}, | |||||
/** | |||||
* 组件的方法列表 | |||||
*/ | |||||
methods: { | |||||
/** | |||||
* 跳转到门店列表的详情页面 | |||||
*/ | |||||
gotoDetail(e) { | |||||
tt.navigateTo({ | |||||
url: `/pages/index/searchbar/detail/index?id=${e.currentTarget.dataset.id}` | |||||
}) | |||||
}, | |||||
// 点击查看更多 | |||||
more: function () { | |||||
console.log(this.properties.merchantVoList,"merchantVoList"); | |||||
let that = this; | |||||
if (that.data.more == '点击查看更多') { | |||||
this.setData({ | |||||
hidden: "", | |||||
height: 'auto!important', | |||||
more: "点击收起", | |||||
showMore: true | |||||
}) | |||||
} else { | |||||
that.setData({ | |||||
hidden: "hidden", | |||||
height: 4 * 140 + 'rpx', | |||||
more: "点击查看更多", | |||||
showMore: true | |||||
}) | |||||
} | |||||
}, | |||||
phone: function (e) { | |||||
let that = this; | |||||
tt.makePhoneCall({ | |||||
phoneNumber: e.target.dataset.merchantlinkphone | |||||
}); | |||||
} | |||||
}, | |||||
ready: function () { | |||||
let merchantVoList = this.properties.merchantVoList; | |||||
if (merchantVoList.length>0){ | |||||
if (merchantVoList.length <= 4) { | |||||
this.setData({ | |||||
height: merchantVoList.length * 140 + 'rpx', | |||||
showMore: false, | |||||
hidden:"hidden" | |||||
}) | |||||
} else if (merchantVoList && merchantVoList.length > 4) { | |||||
this.setData({ | |||||
height: 4 * 140 + 'rpx' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
}); |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,19 @@ | |||||
<view class='applyshop'>适用门店</view> | |||||
<view class='posi' style='overflow:{{hidden}};height:{{height}}'> | |||||
<view class='posi_logo' tt:for="{{merchantVoList}}" tt:key="index"> | |||||
<view bindtap='gotoDetail' data-id='{{item.id}}'> | |||||
<image src='{{item.merchantImgUrl}}'></image> | |||||
</view> | |||||
<view bindtap='gotoDetail' data-id='{{item.id}}'> | |||||
<view class='name'>{{item.merchantName}}</view> | |||||
<view class='shopVoList'> | |||||
<view tt:for="{{item.shopVoList}}" tt:key="{{index}}" tt:for-item="itemName"> | |||||
<text>{{itemName.buildingName}}{{itemName.floorName}}--{{itemName.shopNumber}}</text> | |||||
<text class='douhao' tt:if="{{item.shopVoList.length>1}}">,</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<image tt:if="{{item.linkLinePhone}}" bindtap='phone' data-merchantLinkPhone='{{item.linkLinePhone}}' class="tel" src="{{teljpgUrl}}" mode="widthFix" /> | |||||
</view> | |||||
</view> | |||||
<view class='bottom' bindtap='more' tt:if="{{showMore}}">{{more}}</view> |
@@ -0,0 +1,76 @@ | |||||
.applyshop { | |||||
font-size: 30rpx; | |||||
height: 70rpx; | |||||
line-height: 70rpx; | |||||
text-indent: 1em; | |||||
color: #333; | |||||
background: #fff; | |||||
} | |||||
.posi { | |||||
position: relative; | |||||
width: 100%; | |||||
background: #FFF; | |||||
} | |||||
.posi_logo { | |||||
position: relative; | |||||
width: 92%; | |||||
display: flex; | |||||
padding: 20rpx 0; | |||||
background: #fff; | |||||
margin: 0 auto; | |||||
} | |||||
.posi_logo view:nth-child(1) { | |||||
border-radius: 16rpx; | |||||
} | |||||
.posi_logo view:nth-child(1) image { | |||||
display: block; | |||||
width: 100rpx; | |||||
height: 100rpx; | |||||
border-radius: 16rpx; | |||||
margin-right: 16rpx; | |||||
border: 1px solid #e5e5e5; | |||||
} | |||||
.name{ | |||||
font-size: 32rpx; | |||||
color: #333; | |||||
letter-spacing: 0; | |||||
width: 500rpx; | |||||
white-space: nowrap; | |||||
text-overflow: ellipsis; | |||||
overflow: hidden; | |||||
} | |||||
.posi_logo view:nth-child(2) view { | |||||
font-size: 32rpx; | |||||
color: #333; | |||||
letter-spacing: 0; | |||||
} | |||||
.shopVoList { | |||||
display: flex !important; | |||||
padding-left: 0 !important; | |||||
flex-direction: row !important; | |||||
} | |||||
.shopVoList text { | |||||
font-size: 20rpx !important; | |||||
color: #b8b8b8 !important; | |||||
} | |||||
.bottom{ | |||||
background: #fff; | |||||
color: #666; | |||||
text-align: center; | |||||
padding: 20rpx 0; | |||||
font-size: 32rpx; | |||||
} | |||||
.tel { | |||||
position: absolute; | |||||
right: 0; | |||||
top: 0; | |||||
bottom: 0; | |||||
margin: auto; | |||||
width: 50rpx; | |||||
height: 50rpx; | |||||
} |
@@ -0,0 +1,72 @@ | |||||
const Http = require("../../utils/HttpBasics"); | |||||
var config = require("../../config/config.js"); | |||||
let app = getApp(); | |||||
Component({ | |||||
data: { | |||||
selected: null, | |||||
"color": "#abb1be", | |||||
"selectedColor": "#fc3e5a", | |||||
list: [ | |||||
{ | |||||
"pagePath": "/index/index", | |||||
"text": "首页", | |||||
"iconPath": "../../assets/images/home.png", | |||||
"selectedIconPath": "../../assets/images/home_a.png" | |||||
}, | |||||
{ | |||||
"pagePath": "/index/searchbar", | |||||
"text": "门店", | |||||
"iconPath": "../../assets/images/portal.png", | |||||
"selectedIconPath": "../../assets/images/portal_a.png" | |||||
}, | |||||
{ | |||||
"pagePath": "/pages/order/index/index", | |||||
"text": "订单", | |||||
"iconPath": "../../assets/images/dindan.png", | |||||
"selectedIconPath": "../../assets/images/dindan_a.png" | |||||
}, | |||||
{ | |||||
"pagePath": "/index/user", | |||||
"text": "我的", | |||||
"iconPath": "../../assets/images/user.png", | |||||
"selectedIconPath": "../../assets/images/user_a.png" | |||||
} | |||||
] | |||||
}, | |||||
properties: { | |||||
}, | |||||
lifetimes: { | |||||
attached: function () { | |||||
// 在组件实例进入页面节点树时执行 | |||||
console.log(app.globalData.selected,'selected'); | |||||
this.setData({ | |||||
selected:app.globalData.selected | |||||
}) | |||||
}, | |||||
detached: function () { | |||||
// 在组件实例被从页面节点树移除时执行 | |||||
}, | |||||
}, | |||||
methods: { | |||||
navigateTo(e) { | |||||
// this.setData({ | |||||
// list: this.data.home_a_img | |||||
// }) | |||||
// console.log(this.data.home_a_img) | |||||
const data = e.currentTarget.dataset; | |||||
// this.setData({ | |||||
// selected: data.index | |||||
// }) | |||||
app.globalData.selected = data.index | |||||
console.log(app.globalData.selected); | |||||
const url = data.path; | |||||
tt.reLaunch({ | |||||
url | |||||
}); | |||||
}, | |||||
} | |||||
}) |
@@ -0,0 +1,4 @@ | |||||
{ | |||||
"component": true, | |||||
"usingComponents": {} | |||||
} |
@@ -0,0 +1,8 @@ | |||||
<view class="tab-bar" tt:if="{{list.length!=0}}"> | |||||
<view class="tab-bar-border"></view> | |||||
<view tt:for="{{list}}" tt:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="navigateTo"> | |||||
<image src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></image> | |||||
<view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view> | |||||
</view> | |||||
</view> | |||||
@@ -0,0 +1,41 @@ | |||||
.tab-bar { | |||||
position: fixed; | |||||
bottom: 0; | |||||
left: 0; | |||||
right: 0; | |||||
height: 70rpx; | |||||
padding: 10rpx; | |||||
background: white; | |||||
display: flex; | |||||
padding-bottom: env(safe-area-inset-bottom); | |||||
overflow: hidden; | |||||
} | |||||
.tab-bar-border { | |||||
background-color: rgba(0, 0, 0, 0.33); | |||||
position: absolute; | |||||
left: 0; | |||||
top: 0; | |||||
width: 100%; | |||||
height: 1px; | |||||
transform: scaleY(0.5); | |||||
} | |||||
.tab-bar-item { | |||||
flex: 1; | |||||
text-align: center; | |||||
display: flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
flex-direction: column; | |||||
} | |||||
.tab-bar-item image { | |||||
width: 46rpx; | |||||
height: 46rpx; | |||||
} | |||||
.tab-bar-item view { | |||||
font-size: 20rpx; | |||||
} | |||||
@@ -0,0 +1,398 @@ | |||||
var config = { | |||||
api: { | |||||
/* | |||||
*欢乐城首页专题 | |||||
*/ | |||||
showList:"/topic/showList", | |||||
/* | |||||
*记录微信订阅 | |||||
*/ | |||||
activityDey:"/wxActivity/listStatus",//活动日历日期 | |||||
activityCalendar:'/wxActivity/list',//活动日历列表 | |||||
signDey:"/userSign/listStatus",//签到日期列表 | |||||
continuousDye:"/userSign/signInStatus",//连续签到天数 | |||||
userSign:"/userSign/signIn",//签到 | |||||
signRule:"/credit/credit_rules",//签到规则 | |||||
wxMsg: '/user/updateMsg', | |||||
/** | |||||
* 获取首页按钮 | |||||
*/ | |||||
wxCustomizeModule:"/wxCustomizeModule/list", | |||||
/** | |||||
* 微信消息推送获取模板id | |||||
*/ | |||||
templateId: "/wxMsg/templateList", | |||||
//问卷列表 | |||||
questionnaire :"/wxQuestionOneself/list", | |||||
//问卷详情 | |||||
questionnaireDetail:"/wxQuestionOneself/detailsById", | |||||
//提交问卷 | |||||
submitQuestin:"/wxQuestionOneself/userAdd", | |||||
//投诉建议add | |||||
suggest:"/wxOpinion/add", | |||||
/** | |||||
* 接口用途:login | |||||
*/ | |||||
login: "/user/login", | |||||
/** | |||||
* 授权后获取用户的昵称,unionId等信息 | |||||
*/ | |||||
getUserInfo: "/user/getUserInfo", | |||||
//图片上传 | |||||
imgUpload: '/upload/awsFileUpload', | |||||
/** | |||||
* 接口用途:授权后获取用户的手机号 | |||||
*/ | |||||
getUserPhone: "/user/getUserPhone", | |||||
/** | |||||
* 检查用户授权状态 | |||||
*/ | |||||
checkUserStatus: "/user/checkUserStatus", | |||||
/** | |||||
* 检查用户手机授权状态 | |||||
*/ | |||||
checkPhoneStatus: "/user/checkPhoneStatus", | |||||
/** | |||||
* 商户优惠信息 | |||||
*/ | |||||
listByMerchant: "/wxCouponChannel/listByMerchant", | |||||
/** | |||||
* 优惠券详情 | |||||
*/ | |||||
couponDetail: "/wxCoupon/detail", | |||||
/** | |||||
* 购物车订单详情 | |||||
*/ | |||||
goodsDetail:"/order/goodsDetail", | |||||
/** | |||||
* 优惠券图文混排详情 | |||||
*/ | |||||
couponHtmlDetail: "/wxCoupon/html", | |||||
couponHtmlDetailForPkg: "/couponOrder/html", | |||||
/** | |||||
* 获取样式 | |||||
*/ | |||||
setType: '/wxMiniappTheme/getOne', | |||||
/** | |||||
* 业态查询 | |||||
* filter | |||||
* 2 券 | |||||
* 1 商户 | |||||
*/ | |||||
businessList: "/wxBusiness/listAll", | |||||
/** | |||||
* 频道查询 | |||||
*/ | |||||
couponChannelList: "/wxCouponChannel/list", | |||||
/** | |||||
* 换一换change | |||||
*/ | |||||
change: "/wxCouponChannel/change", | |||||
/** | |||||
* 下订单 | |||||
*/ | |||||
orderSave: "/order/save", | |||||
/** | |||||
* 多少量下单 | |||||
*/ | |||||
goodsShopCartSave:"/order/goodsShopCartSave", | |||||
/** | |||||
* 支付订单 | |||||
*/ | |||||
payOrderCreate: "/pay/create", | |||||
/** | |||||
* 订单状态更新 | |||||
*/ | |||||
payOrderUpdate: "/pay/updatePayOrder", | |||||
/** | |||||
* 订单列表 /order/list | |||||
*/ | |||||
orderList: "/order/listGoods_v1", | |||||
getWeRunData: '/user/getWeRunData', | |||||
/** | |||||
* 订单详情 | |||||
*/ | |||||
orderDetail: "/order/detail_v1", | |||||
// 券包详情 | |||||
// orderDetailAll: "/order/detail_v1", | |||||
/** | |||||
* 券包 | |||||
*/ | |||||
couponOrderList: "/couponOrder/list", | |||||
/** | |||||
* 券包详情 | |||||
*/ | |||||
couponOrderDetail: "/couponOrder/detail", /// TODO | |||||
/** | |||||
* 验证码发送 | |||||
*/ | |||||
sendValidationCode: "/wxMsgValidationcode/sendvalidationcode", | |||||
/** | |||||
* 验证码确认 | |||||
*/ | |||||
validationCode: "/wxMsgValidationcode/hasvalidationcode", | |||||
/** | |||||
* 车场信息获取 | |||||
*/ | |||||
scoreLevelInfo: '/mall/scoreLevelInfo', | |||||
getParkInfo: "/wxPark/info", | |||||
/** | |||||
* 用户所绑车牌获取 | |||||
*/ | |||||
userCarCount: "/user/carCount", | |||||
/** | |||||
* 用户所绑车牌获取 | |||||
*/ | |||||
getUserCarList: "/user/carList", | |||||
/** | |||||
* 联合登录 | |||||
*/ | |||||
carInit: "/car/init", | |||||
/** | |||||
* 绑车牌 | |||||
*/ | |||||
bindCar: "/car/bindCar", | |||||
/** | |||||
* 解绑车牌 | |||||
*/ | |||||
unbindCar: "/car/unbindCar", | |||||
/** | |||||
* 停车费 | |||||
*/ | |||||
getCarStopFee: "/car/getCarStopFee", | |||||
/** | |||||
* 停车费抵扣 (TJD) | |||||
*/ | |||||
deductionFee: "/car/deductionFee", | |||||
/** | |||||
* 优免券领取 | |||||
*/ | |||||
getCarCoupon: "/car/getCoupon", | |||||
/** | |||||
* 停车券包 | |||||
*/ | |||||
couponOrderCarList: "/car/couponOrderList", | |||||
/** | |||||
* banner | |||||
*/ | |||||
bannerlist: "/wxCampaign/list", | |||||
/** | |||||
* banner详情页面 | |||||
*/ | |||||
bannerDetail: "/wxCampaign/findById", | |||||
/** | |||||
* 授权个人信息 | |||||
* 和授权手机号 | |||||
* 和login页面 | |||||
* 页面的图标 | |||||
*/ | |||||
marketicon: '/mall/getAppIcon', | |||||
/** | |||||
* 获取停车场状态 | |||||
*/ | |||||
getParkStatus: '/car/getParkStatus', | |||||
/** | |||||
* 检查核销的状态 | |||||
*/ | |||||
getStatus: "/couponOrder/getStatus", | |||||
/** | |||||
* 获得成长值 | |||||
*/ | |||||
getScore: '/user/userinfo', | |||||
/** | |||||
* 小程序分享 | |||||
* title | |||||
* 描述 | |||||
*/ | |||||
getWeapNote: '/mall/getWeapNote', | |||||
/** | |||||
* 商场信息(小程序分享) | |||||
*/ | |||||
getMallInfo: '/mall/mallInfo', | |||||
/** | |||||
* 小程序获取游戏路径 | |||||
*/ | |||||
getGame: '/game/getOne', | |||||
/** | |||||
* 小程序获取广告路径 | |||||
*/ | |||||
getGg: '/floatingLayer/getFloatingLayer', | |||||
/** | |||||
* 小程序某一个游戏信息 | |||||
*/ | |||||
getOneGame: '/game/getOneGame', | |||||
/** | |||||
* 用户更新信息 | |||||
*/ | |||||
updateInfo: "/user/updateUserInfo", | |||||
/** | |||||
* 查询问卷 | |||||
*/ | |||||
getQuestion: "/wxQuestion/getQuestion", | |||||
/** | |||||
* 提交问卷 | |||||
*/ | |||||
answerQuestion: "/wxQuestion/answerQuestion", | |||||
/** | |||||
* | |||||
获取打折商户列表 | |||||
*/ | |||||
discountMerchantList: "/mall/discountMerchantList", | |||||
/** | |||||
* 卡包分页列表接口 | |||||
*/ | |||||
cardorderList: "/couponOrder/cardList", | |||||
/** | |||||
* 卡券详情接口 | |||||
*/ | |||||
cardDetail: "/couponOrder/cardDetail", | |||||
/** | |||||
* C端扫B端储值卡支付订单 | |||||
*/ | |||||
cardPayOrder: "/cardPay/order_create", | |||||
/** | |||||
* 兑换历史列表 | |||||
*/ | |||||
scoreHistory: "/scoreHistory/list", | |||||
/** | |||||
* 获取用户折扣率 | |||||
*/ | |||||
getDiscountInfo: "/user/getDiscountInfo", | |||||
/** | |||||
* C端扫B端储值卡交易流水列表接口 | |||||
*/ | |||||
cardpayList: "/cardPay/list", | |||||
/** | |||||
* 根据code查询接口 | |||||
*/ | |||||
findByCode: "/merchant/findByCode", | |||||
/** | |||||
* 参与砍价 | |||||
*/ | |||||
pressOrderJoin: "/press/pressOrderJoin", | |||||
/** | |||||
* 我的砍价列表 | |||||
*/ | |||||
pressOrderList: "/order/pressOrderList", | |||||
/** | |||||
* 砍价订单详情 | |||||
*/ | |||||
pressOrderDetail: "/order/pressOrderDetail", | |||||
/** | |||||
* | |||||
*/ | |||||
getPressOrderStatus: "/press/getPressOrderStatus", | |||||
/** | |||||
* 查询转赠卡状态 | |||||
*/ | |||||
queryCardStatus: "/couponOrder/queryCardStatus", | |||||
/** | |||||
* 领取转赠卡 | |||||
*/ | |||||
cardAccept: '/couponOrder/cardAccept', | |||||
/** | |||||
* 获取我的拼团列表 | |||||
*/ | |||||
getMySepllList: '/orderGroup/queryOrderGroup', | |||||
/** | |||||
*查询差1个的团购信息 | |||||
*/ | |||||
queryRemainOne: '/orderGroup/queryRemainOne', | |||||
/** | |||||
* *分页列表接口 | |||||
*/ | |||||
merchantList: "/merchant/list", | |||||
/* | |||||
* 查询拼团状态 | |||||
*/ | |||||
queryOrderGroupStatus: '/orderGroup/queryOrderGroupStatus', | |||||
/** | |||||
* 去拼团 | |||||
*/ | |||||
toOrderGroup: '/orderGroup/toOrderGroup', | |||||
/** | |||||
* 查询是否已参团 | |||||
*/ | |||||
queryAttendStatus: '/orderGroup/queryAttendStatus', | |||||
/** | |||||
* 专题 | |||||
*/ | |||||
topicShow: "/topic/show", | |||||
/** | |||||
* 专题详情 | |||||
*/ | |||||
topicFindById: "/topic/findById", | |||||
/** | |||||
* 积分券详情 | |||||
*/ | |||||
integralDetail: '/wxCoupon/findById', | |||||
/** | |||||
* 会员积分记录 | |||||
*/ | |||||
integralList: '/credit/list', | |||||
/** | |||||
* 用户更新位置信息 | |||||
*/ | |||||
updateLBS: "/user/updateLBS", | |||||
/** | |||||
* 用户更新信息 | |||||
*/ | |||||
updateUserInfo: "/user/updateUserInfo", | |||||
/** | |||||
* 用户更新scene | |||||
*/ | |||||
updateScene: "/user/updateScene", | |||||
/** | |||||
* 富文本详情 | |||||
*/ | |||||
printHtmlById: "/wxCampaign/printHtmlById", | |||||
acfindById: "/wxActivity/findById", | |||||
acPrintHtmlById: "/wxActivity/printHtmlById", | |||||
//参与活动 | |||||
activityJoin: "/wxActivityJoin/join", | |||||
//签到 | |||||
activitySign: "/wxActivityJoin/sign", | |||||
activityList: "/wxActivityJoin/list", | |||||
//获取未支付的订单 | |||||
getUnPaidOrder: "/order/getUnPaidOrder", | |||||
getCouponOrderByPassword: '/couponPassword/getCouponOrderByPassword', | |||||
getbuildingfloorlist: '/wxMallBuilding/getbuildingfloorlist', | |||||
//商场信息接口 | |||||
getMallInfo: "/mall/mallInfo", | |||||
// 获取楼层楼座数据 | |||||
getbuildingfloorlist: "/wxMallBuilding/getbuildingfloorlist", | |||||
// 获取所有直播间和商品信息 | |||||
getReplayList: "/live/replayList", | |||||
// 获取直播房间回放数据和商品信息 | |||||
getRoomList: "/live/roomList", | |||||
//商城地图 | |||||
getStoreMap:"/wxMallBuilding/getbuildingfloorlist", | |||||
//判断有没有蜂鸟地图 | |||||
ifFengMap:'/fengniaomap/getConfig', | |||||
//分享小程序二维码 | |||||
getQrcodeFx:"/user/userinfoQrCode", | |||||
//添加收货地址 | |||||
collectSite:"/userBasicInfoAddress/saveOrUpdate", | |||||
//收货地址列表 | |||||
siteList: "/userBasicInfoAddress/list", | |||||
//查询收货地址 | |||||
siteCheck: "/userBasicInfoAddress/findById", | |||||
//删除收获地址 | |||||
siteDel: "/userBasicInfoAddress/del", | |||||
//确认收货 | |||||
verify:"/couponOrder/verify", | |||||
//全包下订单 | |||||
couponPackageSave :"/order/couponPackageSave", | |||||
//获取动态核销码 | |||||
dynamicId:"/couponOrder/dynamicId" | |||||
}, | |||||
}; | |||||
/* | |||||
for (var key in config.api) { | |||||
config.api[key] = apiPrefix + config.api[key]; | |||||
} | |||||
*/ | |||||
module.exports = config; |
@@ -0,0 +1,29 @@ | |||||
Component({ | |||||
externalClasses: ['i-class', 'i-class-alone'], | |||||
properties: { | |||||
count: { | |||||
type: Number, | |||||
value: 0, | |||||
observer: 'finalCount' | |||||
}, | |||||
overflowCount: { | |||||
type: Number, | |||||
value: 99 | |||||
}, | |||||
dot: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
}, | |||||
data: { | |||||
finalCount: 0 | |||||
}, | |||||
methods: { | |||||
finalCount() { | |||||
this.setData({ | |||||
finalCount: parseInt(this.data.count) >= parseInt(this.data.overflowCount) ? `${this.data.overflowCount}+` : this.data.count | |||||
}); | |||||
}, | |||||
} | |||||
}); |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<view class="i-class i-badge"> | |||||
<slot></slot> | |||||
<view class="i-badge-dot" tt:if="{{ dot }}"></view> | |||||
<view class="i-badge-count i-class-alone" tt:elif="{{ count !== 0 }}">{{ finalCount }}</view> | |||||
</view> |
@@ -0,0 +1 @@ | |||||
.i-badge{position:relative;display:inline-block;line-height:1;vertical-align:middle}.i-badge-count{position:absolute;transform:translateX(50%);top:-6px;right:0;height:18px;border-radius:9px;min-width:18px;background:#ed3f14;border:1px solid transparent;color:#fff;line-height:18px;text-align:center;padding:0 5px;font-size:12px;white-space:nowrap;transform-origin:-10% center;z-index:10;box-shadow:0 0 0 1px #fff;box-sizing:border-box;text-rendering:optimizeLegibility}.i-badge-count-alone{top:auto;display:block;position:relative;transform:translateX(0)}.i-badge-dot{position:absolute;transform:translateX(-50%);transform-origin:0 center;top:-4px;right:-8px;height:8px;width:8px;border-radius:100%;background:#ed3f14;z-index:10;box-shadow:0 0 0 1px #fff} |
@@ -0,0 +1,80 @@ | |||||
Component({ | |||||
externalClasses: ['i-class'], | |||||
properties: { | |||||
// default, primary, ghost, info, success, warning, error | |||||
type: { | |||||
type: String, | |||||
value: '', | |||||
}, | |||||
inline: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
// default, large, small | |||||
size: { | |||||
type: String, | |||||
value: '', | |||||
}, | |||||
// circle, square | |||||
shape: { | |||||
type: String, | |||||
value: 'square' | |||||
}, | |||||
disabled: { | |||||
type: Boolean, | |||||
value: false, | |||||
}, | |||||
loading: { | |||||
type: Boolean, | |||||
value: false, | |||||
}, | |||||
long: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
openType: String, | |||||
appParameter: String, | |||||
hoverStopPropagation: Boolean, | |||||
hoverStartTime: { | |||||
type: Number, | |||||
value: 20 | |||||
}, | |||||
hoverStayTime: { | |||||
type: Number, | |||||
value: 70 | |||||
}, | |||||
lang: { | |||||
type: String, | |||||
value: 'en' | |||||
}, | |||||
sessionFrom: { | |||||
type: String, | |||||
value: '' | |||||
}, | |||||
sendMessageTitle: String, | |||||
sendMessagePath: String, | |||||
sendMessageImg: String, | |||||
showMessageCard: Boolean | |||||
}, | |||||
methods: { | |||||
handleTap () { | |||||
if (this.data.disabled) return false; | |||||
this.triggerEvent('click'); | |||||
}, | |||||
bindgetuserinfo({ detail = {} } = {}) { | |||||
this.triggerEvent('getuserinfo', detail); | |||||
}, | |||||
bindcontact({ detail = {} } = {}) { | |||||
this.triggerEvent('contact', detail); | |||||
}, | |||||
bindgetphonenumber({ detail = {} } = {}) { | |||||
this.triggerEvent('getphonenumber', detail); | |||||
}, | |||||
binderror({ detail = {} } = {}) { | |||||
this.triggerEvent('error', detail); | |||||
} | |||||
} | |||||
}); |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,20 @@ | |||||
<button | |||||
class="i-class i-btn {{ long ? 'i-btn-long' : '' }} {{ 'i-btn-' + size }} {{ 'i-btn-' + type }} {{ 'i-btn-' + shape }} {{ loading ? 'i-btn-loading' : '' }} {{ disabled ? 'i-btn-disabled' : ''}} {{ inline ? 'i-btn-inline' : '' }}" | |||||
hover-class="i-btn-hover" | |||||
bindtap="handleTap" | |||||
open-type="{{ openType }}" | |||||
app-parameter="{{ appParameter }}" | |||||
hover-stop-propagation="{{ hoverStopPropagation }}" | |||||
hover-start-time="{{ hoverStartTime }}" | |||||
hover-stay-time="{{ hoverStayTime }}" | |||||
session-from="{{ sessionFrom }}" | |||||
send-message-title="{{ sendMessageTitle }}" | |||||
send-message-path="{{ sendMessagePath }}" | |||||
send-message-img="{{ sendMessageImg }}" | |||||
show-message-card="{{ showMessageCard }}" | |||||
bindcontact="bindcontact" | |||||
bindgetuserinfo="bindgetuserinfo" | |||||
bindgetphonenumber="bindgetphonenumber" | |||||
binderror="binderror" | |||||
plain="true" | |||||
><view class="i-btn-loading-inner" tt:if="{{loading}}"></view><slot></slot></button> |
@@ -0,0 +1,39 @@ | |||||
.i-btn{ | |||||
text-align:center; | |||||
vertical-align:middle; | |||||
touch-action:manipulation; | |||||
cursor:pointer; | |||||
background-image:none; | |||||
white-space:nowrap; | |||||
user-select:none; | |||||
font-size:14px; | |||||
border-radius:2px; | |||||
border:0!important; | |||||
position:relative; | |||||
text-decoration:none; | |||||
height:44px; | |||||
line-height:44px; | |||||
box-shadow:inset 0 0 0 1px rgba(0,0,0,.1); | |||||
color:#fff!important; | |||||
background:#f7f7f7; | |||||
color:#495060; | |||||
margin:10px | |||||
} | |||||
.i-btn-hover{opacity:.9} | |||||
.i-btn-long{border-radius:0;margin:0;box-shadow:none} | |||||
.i-btn-large{height:48px;line-height:48px} | |||||
.i-btn-small{height:40px;line-height:40px} | |||||
.i-btn-primary{color:#fff!important;background:#2d8cf0!important} | |||||
.i-btn-ghost{color:#fff!important;background:#fff!important;color:#495060!important} | |||||
.i-btn-success{color:#fff!important;background:#19be6b!important} | |||||
.i-btn-warning{color:#fff!important;background:#f90!important} | |||||
.i-btn-error{color:#fff!important;background:#ed3f14!important} | |||||
.i-btn-info{color:#fff!important;background:#2db7f5!important} | |||||
.i-btn-circle{border-radius:44px} | |||||
.i-btn-large.i-btn-circle{border-radius:48px} | |||||
.i-btn-small.i-btn-circle{border-radius:40px} | |||||
.i-btn-loading{opacity:.6} | |||||
.i-btn-loading-inner{display:inline-block;margin-right:12px;vertical-align:middle;width:14px;height:14px;background:0 0;border-radius:50%;border:2px solid #fff;border-color:#fff #fff #fff transparent;animation:btn-spin .6s linear;animation-iteration-count:infinite} | |||||
.i-btn-disabled{color:#bbbec4!important;background:#f7f7f7!important} | |||||
.i-btn-inline{display:inline-block}@keyframes btn-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} | |||||
button::after{ border: none; } |
@@ -0,0 +1,40 @@ | |||||
Component({ | |||||
externalClasses: ['i-class'], | |||||
options: { | |||||
multipleSlots: true | |||||
}, | |||||
relations : { | |||||
'../sticky/index' : { | |||||
type : 'parent' | |||||
} | |||||
}, | |||||
data : { | |||||
top : 0, | |||||
height : 0, | |||||
isFixed : false, | |||||
index : -1, | |||||
}, | |||||
methods: { | |||||
updateScrollTopChange(scrollTop){ | |||||
const data = this.data; | |||||
const top = data.top; | |||||
const height = data.height; | |||||
this.setData({ | |||||
isFixed : ( scrollTop >= top && scrollTop < top + height ) ? true : false | |||||
}) | |||||
}, | |||||
updateDataChange(index) { | |||||
const className = '.i-sticky-item'; | |||||
const query = tt.createSelectorQuery().in(this); | |||||
query.select( className ).boundingClientRect((res)=>{ | |||||
if( res ){ | |||||
this.setData({ | |||||
top : res.top, | |||||
height : res.height, | |||||
index : index | |||||
}) | |||||
} | |||||
}).exec() | |||||
} | |||||
} | |||||
}) |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,10 @@ | |||||
<view class="i-sticky-item"> | |||||
<view class="i-sticky-item-header i-class {{ isFixed === true ? 'i-sticky-fixed' : '' }}"> | |||||
<view class="i-sticky-title"> | |||||
<slot name="title"></slot> | |||||
</view> | |||||
</view> | |||||
<view class="i-index-item-content"> | |||||
<slot name="content"></slot> | |||||
</view> | |||||
</view> |
@@ -0,0 +1 @@ | |||||
.i-sticky-item-header{background:#eee;font-size:14px;width:100%;height:32px;line-height:32px}.i-sticky-item-content{font-size:14px}.i-sticky-title{width:100%;padding:0 15px;box-sizing:border-box;background:#eee}.i-sticky-fixed .i-sticky-title{position:fixed;top:0} |
@@ -0,0 +1,64 @@ | |||||
Component({ | |||||
externalClasses: ['i-class'], | |||||
properties : { | |||||
scrollTop : { | |||||
type : Number, | |||||
observer(val){ | |||||
this._updateScrollTopChange(); | |||||
} | |||||
} | |||||
}, | |||||
relations : { | |||||
'../sticky-item/index' : { | |||||
type : 'child', | |||||
linked(){ | |||||
this._updateDataChange(); | |||||
}, | |||||
linkChanged () { | |||||
this._updateDataChange(); | |||||
}, | |||||
unlinked () { | |||||
this._updateDataChange(); | |||||
} | |||||
} | |||||
}, | |||||
data : { | |||||
timer : null, | |||||
itemLength : 0, | |||||
}, | |||||
methods : { | |||||
_updateScrollTopChange(){ | |||||
const stickies = this.getRelationNodes('../sticky-item/index'); | |||||
console.log(stickies,"stickies"); | |||||
if(stickies && stickies.length > 0 ){ | |||||
stickies.forEach((item) => { | |||||
if( item ){ | |||||
item.updateScrollTopChange( this.data.scrollTop ); | |||||
} | |||||
}) | |||||
} | |||||
}, | |||||
_updateDataChange( ){ | |||||
const stickies = this.getRelationNodes('../sticky-item/index'); | |||||
if(stickies && stickies.length > 0 ){ | |||||
if( this.data.timer ){ | |||||
clearTimeout( this.data.timer ) | |||||
this.setData({ | |||||
timer : null | |||||
}) | |||||
} | |||||
this.data.timer = setTimeout(()=>{ | |||||
stickies.forEach((item,index) => { | |||||
if( item ){ | |||||
item.updateDataChange(index); | |||||
} | |||||
}) | |||||
},0) | |||||
this.setData({ | |||||
timer : this.data.timer | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
}) |
@@ -0,0 +1,3 @@ | |||||
{ | |||||
"component": true | |||||
} |
@@ -0,0 +1,3 @@ | |||||
<view class="i-sticky i-class"> | |||||
<slot></slot> | |||||
</view> |
@@ -0,0 +1,50 @@ | |||||
Component({ | |||||
externalClasses: ["i-class"], | |||||
relations: { | |||||
"../tabs/index": { | |||||
type: "parent" | |||||
} | |||||
}, | |||||
properties: { | |||||
key: { | |||||
type: String, | |||||
value: "" | |||||
}, | |||||
title: { | |||||
type: String, | |||||
value: "" | |||||
}, | |||||
dot: { | |||||
type: Boolean, | |||||
value: false | |||||
}, | |||||
count: { | |||||
type: Number, | |||||
value: 0 | |||||
} | |||||
}, | |||||
data: { | |||||
current: false, | |||||
currentColor: "", | |||||
scroll: false | |||||
}, | |||||
methods: { | |||||
changeCurrent(current) { | |||||
this.setData({ current }); | |||||
}, | |||||
changeCurrentColor(currentColor) { | |||||
this.setData({ currentColor }); | |||||
}, | |||||
changeScroll(scroll) { | |||||
this.setData({ scroll }); | |||||
}, | |||||
handleClickItem() { | |||||
const parent = this.getRelationNodes("../tabs/index")[0]; | |||||
parent.emitEvent(this.data.key); | |||||
} | |||||
} | |||||
}); |