This commit is contained in:
魏啾
2024-04-30 18:27:43 +08:00
parent 25acfbeb91
commit 3b85017f91
24 changed files with 2846 additions and 108 deletions

View File

@@ -35,8 +35,8 @@ export default {
orderorderInfo(data) { //订单回显
return uni.api.get("/order/orderInfo", data);
},
loginwxuserInfo(data) { //微信用户详情
return uni.api.get("/login/wx/userInfo", data);
loginwxuserInfo(data) { //用户详情
return uni.api.get("/login/userInfo", data);
},
paymemeberIn(data) { //充值
return uni.api.post("/pay/memeberIn", data);
@@ -77,4 +77,19 @@ export default {
orderfindCoupons(data) { //系统优惠券
return uni.api.get("/order/findCoupons", data);
},
loginuserInfo(data) { //获取用户信息
return uni.api.get("/login/userInfo", data);
},
tbPlatformDict(data) { //获取菜单
return uni.api.get("/tbPlatformDict", data);
},
distirictsubShopList(data) { //预约到店(店铺列表)
return uni.api.get("/distirict/subShopList", data);
},
distiricttopCommon(data) { //获取top部分(店铺列表)
return uni.api.get("/distirict/topCommon", data);
},
orderfindWiningUser(data) { //获取免单订单
return uni.api.get("/order/findWiningUser", data);
},
}

View File

@@ -39,7 +39,11 @@
y: 0
},
screenWidth: 0,
itemStyle: []
itemStyle: [
{
transform:''
}
]
};
},
watch: {
@@ -50,16 +54,16 @@
}
}
},
created() {
mounted() {
var macInfo = uni.getSystemInfoSync();
this.screenWidth = macInfo.screenWidth;
// 计算swiper样式
this.swiperList.forEach((item, index) => {
this.itemStyle.push(this.getStyle(index))
})
this.timersetInterval = setInterval(() => {
this.endMove()
}, 2000);
// this.timersetInterval = setInterval(() => {
// this.endMove()
// }, 2000);
},
methods: {
getStyle(e) {
@@ -97,7 +101,6 @@
this.slideNote.y = e.changedTouches[0] ? e.changedTouches[0].pageY : 0;
},
endMove(e) {
console.log(e, 86)
var newList = JSON.parse(JSON.stringify(this.itemStyle))
// if ((e.changedTouches[0].pageX - this.slideNote.x) < 0) {
// 向左滑动
@@ -116,8 +119,7 @@
<style lang="scss">
.swiperPanel {
margin: 20rpx 0;
height: 100rpx;
height: 28rpx;
width: 100%;
overflow: hidden;
position: relative;

174
components/listitem.vue Normal file
View File

@@ -0,0 +1,174 @@
<template>
<view class="content">
<view class="contentone flex-center">
<image class="contentoneimage" src="@/static/ewm.png" mode="aspectFill"></image>
<text class="contentonetext">精选推荐</text>
</view>
<view class="contenttow flex-between">
<view class="contenttowitem" v-for="(item,index) in 6">
<image class="contenttowitemimage" src="@/static/icon_cart.png" mode=""></image>
<view class="contenttowitemtiter">
库迪咖啡|全场饮品任选券|多店美团可用
</view>
<view class="contenttowitemone flex-between">
<view class="contenttowitemone_dingwei flex-start">
<image class="contenttowitemone_dingweiimage"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/dw.png" mode="aspectFill"></image>
<view class="contenttowitemone_dingweinumer">
2.5km
</view>
</view>
<view class="contenttowitemone_text">
已售192.9
</view>
</view>
<view class="contenttowitemtow flex-start">
<view class="contenttowitemtow_one">
券后¥7.22
</view>
<view class="contenttowitemtow_tow">
3.2
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {};
},
props: {
title: {
type: String,
default: ''
},
opacity: {
type: Boolean,
default: false
},
titleshow: {
type: Boolean,
default: false
},
},
computed: {
HeighT() { //手机类型的尺寸
return this.$store.getters.is_BarHeight
},
},
methods: {
clicknavigateBack() {
uni.navigateBack()
}
}
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
padding: 0 32rpx;
.contentone {
.contentoneimage {
width: 32.12rpx;
height: 36.13rpx;
}
.contentonetext {
margin-left: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #000000;
}
}
.contenttow {
width: 100%;
.contenttowitem {
margin-top: 32rpx;
width: 316rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
.contenttowitemimage {
width: 100%;
height: 220rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 0rpx 0rpx;
}
.contenttowitemtiter {
padding: 0 20rpx;
margin-top: 8rpx;
width: 100%;
height: 72rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
.contenttowitemone {
padding: 0 20rpx;
.contenttowitemone_dingwei {
margin-top: 6rpx;
.contenttowitemone_dingweiimage {
width: 17.9rpx;
height: 21.65rpx;
}
.contenttowitemone_dingweinumer {
margin-left: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 20rpx;
color: #666666;
}
}
.contenttowitemone_text {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 20rpx;
color: #666666;
}
}
.contenttowitemtow {
padding: 0 20rpx 8rpx 20rpx;
.contenttowitemtow_one {
margin-top: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 28rpx;
color: #FF4C11;
}
.contenttowitemtow_tow {
margin-top: 6rpx;
margin-left: 6rpx;
padding: 2rpx 14rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #FF4C11;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 20rpx;
color: #FF4C11;
}
}
}
}
}
</style>

View File

@@ -19,7 +19,7 @@
<view class="navbar_tow_one flex-start">
<u-icon name="arrow-left" color="#000" size="40"></u-icon>
</view>
<view class="navbar_tow_tow" v-if="opacity">
<view class="navbar_tow_tow" v-if="opacity || titleshow">
{{title}}
</view>
</view>
@@ -42,6 +42,10 @@
type: Boolean,
default: false
},
titleshow: {
type: Boolean,
default: false
},
},
computed: {
HeighT() { //手机类型的尺寸

View File

@@ -0,0 +1,86 @@
<template>
<view>
<view class="scroll_box">
<swiper class="swiper" circular="true" vertical="true" display-multiple-items="4" :autoplay="autoplay"
:interval="interval" :duration="duration">
<swiper-item v-for="(item,index) in list" :key="index">
<view class="swiper-item">
<view class="line1">{{item.nickName}}</view>
<view class="line2">
<text>抽到</text>
<text class="line2-amount">{{item.value}}</text>
</view>
</view>
</swiper-item>
</swiper>
</view>
</view>
</template>
<script>
export default {
name: '',
props: {
autoplay: {
type: Boolean,
default: true
},
interval: {
type: Number,
default: 1000
},
duration: {
type: Number,
default: 1000
},
datalist: {
type: Array,
default: []
},
},
data() {
return {
list: [],
}
},
watch: {
datalist: {
immediate: true,
handler(val) {
this.list = val
}
}
}
}
</script>
<style scoped lang="scss">
.scroll_box {
background: #FFFFFF;
border-radius: 10rpx;
.swiper {
height: 400rpx;
}
}
.swiper-item::after {
content: '';
clear: both;
}
.swiper-item {
overflow: auto;
}
.swiper-item .line1 {
float: left;
}
.swiper-item .line2 {
float: right;
}
.swiper-item .line2 .line2-amount {
color: #EF4A4A;
}
</style>

View File

@@ -64,7 +64,8 @@
"postcss" : true
},
"usingComponents" : true,
"libVersion" : "latest"
"libVersion" : "latest",
"requiredPrivateInfos" : [ "getLocation", "onLocationChange", "chooseLocation", "chooseAddress" ]
},
"h5" : {
"devServer" : {

View File

@@ -13,12 +13,33 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/index/freedaily",
"style": {
"navigationBarTitleText": "每日免单",
"navigationStyle": "custom"
}
},
{
"path": "pages/index/tothestore",
"style": {
"navigationBarTitleText": "预约到店",
"navigationStyle": "custom"
}
},
{
"path": "pages/index/coupons/index",
"style": {
"navigationBarTitleText": "红包中心"
}
},
{
"path": "pages/index/drinks",
"style": {
"navigationBarTitleText": "咖啡饮品",
"navigationStyle": "custom"
}
},
{
"path": "pages/index/hotlist",
"style": {
@@ -32,6 +53,13 @@
"navigationBarTitleText": "选择城市"
}
},
{
"path": "pages/product/index",
"style": {
"navigationBarTitleText": "商品详情",
"navigationStyle": "custom"
}
},
{
"path": "pages/login/login",
"style": {
@@ -47,7 +75,9 @@
{
"path": "pages/order/order",
"style": {
"navigationBarTitleText": "订单列表"
"navigationBarTitleText": "订单列表",
"navigationBarBackgroundColor": "#FFD158",
"navigationBarTextStyle": "white"
}
},
{
@@ -114,6 +144,13 @@
"navigationBarTitleText": "优惠券"
}
},
{
"path": "pages/user/information",
"style": {
"navigationBarTitleText": "完善信息",
"navigationStyle": "custom"
}
},
{
"path": "pages/user/shop/index",
"style": {

View File

@@ -6,15 +6,14 @@
<view class="onecontentright flex-start">
<view class="onecontentrightimage">
<view class="onecontentrightimageabsolute">
<u-swiper circular previousMargin='30' nextMargin="30" :list="bannervo.counponsInfo" keyName="logo"
radius="14" height='28' bgColor='none' imgMode='aspectFit'></u-swiper>
<view class="swiperPanel" @touchstart="startMove" @touchend="endMove">
<view class="swiperItem" v-for="(item, index) in bannervo.counponsInfo" :key="index"
:style="{transform: itemStyle[index].transform, zIndex: itemStyle[index].zIndex, opacity: itemStyle[index].opacity}">
<view class="children">
<image class="pic" :src="item.logo"></image>
</view>
</view>
</view>
<!-- <view class="onecontentrightimageabsolutetow">
<u-swiper circular previousMargin="30" nextMargin="30" :list="bannervo.logo" keyName="coverImg"
radius="14" height='28' bgColor='none' imgMode='aspectFit'></u-swiper>
</view> -->
</view>
<view class="onecontentrighttext">
<swiper class="swiper" circular :autoplay="true" :vertical='true' :interval="2000">
@@ -30,12 +29,22 @@
</template>
<script>
import customSwiper from '@/components/blackmonth-swiper/index'
export default {
components: {
customSwiper
},
data() {
return {
isScroll: false,
minCount: 0,
fontColor: 'black'
fontColor: 'black',
timersetInterval: '0', //定时器
slideNote: {
x: 0,
y: 0
},
screenWidth: 0
};
},
props: {
@@ -43,20 +52,68 @@
type: Object,
default () {
return {
coupons: '',
logo: []
counponsInfo: []
}
}
},
itemStyle: {
type: Array,
default () {
return []
}
},
title: {
type: String,
default: '每日特价'
},
img: {
timersetnteritem: {
type: String,
default: ''
},
default: '0'
}
},
watch: {
timersetnteritem(newVal, oldVal) {
console.log(newVal, oldVal)
if (newVal == 1) {
clearTimeout(this.timersetInterval);
this.timersetInterval = null;
} else {
this.timersetIntervalnewVal()
}
}
},
mounted() {
this.timersetIntervalnewVal()
},
methods: {
timersetIntervalnewVal() {
this.timersetInterval = setInterval(() => {
this.endMove()
}, 2000);
},
startMove(e) {
this.slideNote.x = e.changedTouches[0] ? e.changedTouches[0].pageX : 0;
this.slideNote.y = e.changedTouches[0] ? e.changedTouches[0].pageY : 0;
},
endMove(e) {
// this.itemStyless = []
var newList = JSON.parse(JSON.stringify(this.itemStyle))
console.log(newList)
// if ((e.changedTouches[0].pageX - this.slideNote.x) < 0) {
// 向左滑动
var last = [newList.pop()]
newList = last.concat(newList)
// } else {
// 向右滑动
// newList.push(newList[0])
// newList.splice(0, 1)
// }
this.$emit('changeValue',newList);
this.$forceUpdate();
}
}
};
</script>
@@ -94,6 +151,42 @@
position: relative;
overflow: hidden;
height: 28rpx;
margin-right: 10rpx;
.swiperPanel {
height: 28rpx;
width: 100%;
overflow: hidden;
position: relative;
.swiperItem {
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
transition: all .5s;
/* 定义一个动画关键帧 */
.children {
height: 100%;
width: 25%;
// margin: 2rpx auto;
/* 应用动画,设置动画时长、循环次数和速度曲线 */
.pic {
height: 100%;
width: 100%;
border-radius: 50%;
// box-shadow: 0 0 10px #333;
}
}
}
}
.onecontentrightimageabsolute {
width: 100%;
@@ -101,6 +194,7 @@
top: 0;
position: absolute;
z-index: 9;
height: 28rpx;
}

View File

@@ -31,7 +31,6 @@
},
methods: {
clickdistrict(item) {
uni.pro.navigateTo('index/coupons/index');
switch (item.jumpType) {
case 'absolute':
uni.pro.navigateTo('webview/webview', {
@@ -39,7 +38,7 @@
});
break;
case 'relative':
uni.pro.navigateTo(item.absUrl);
uni.pro.navigateTo(item.absUrl,item);
break;
case 'scan':
if (!uni.utils.pluschooseImage()) {
@@ -52,7 +51,7 @@
scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
success: res => {
// 当needResult 为 1 时,扫码返回的结果
console.log(res.resultStr,res)
console.log(res.resultStr, res)
}
});
} else {
@@ -68,7 +67,7 @@
// #ifdef APP || MP-WEIXIN
uni.scanCode({
success: res => {
console.log(res.result,res)
console.log(res.result, res)
}
});
// #endif
@@ -91,6 +90,9 @@
flex-wrap: nowrap;
.towcontent_item {
width: 25%;
margin-left: 34rpx;
image {
width: 92rpx;
height: 92rpx;
@@ -102,7 +104,12 @@
font-weight: 400;
font-size: 28rpx;
color: #333333;
white-space: nowrap;
}
}
.towcontent_item:nth-child(1) {
margin-left: 0rpx;
}
}
</style>

555
pages/index/drinks.vue Normal file
View File

@@ -0,0 +1,555 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat class="navbar" :opacity='opacitys' :title='titlename' :titleshow='false'></navseat>
<view class="onecontent">
<image class="onecontentimage" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/bsb.png" mode=" "></image>
<!-- 小内切圆 -->
<view class="after"></view>
<view class="onecontentabsolute">
</view>
</view>
<view class="towcontent">
<view :class="isFixedTop?'towcontentlistxitemboxfixed':''" :style="{'top':customheighttop + 'px'}">
<view class="towcontentlistxitem flex-start">
<view class="towcontentlistxitembox flex-colum"
:class="towcontentclickindex == index?'towcontentlistxitemboxopacity':''"
v-for="(item,index) in listbox" :key="index" @click="towcontentclick(index)">
<text>{{item.name}}</text>
<image v-if="towcontentclickindex == index"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/dg.png" mode="widthFix">
</image>
</view>
</view>
<view class="towcontentlistxitembt flex-start">
<view class="towcontentlistxitembtitem" :class="index==1?'towcontentlistxitembtitemaktev':''"
v-for="(item,index) in 3" :key="index">
2小时销量飙升榜
</view>
</view>
</view>
<view v-if="isFixedTop" :style="{'height':windowHeight - seighT + 'px'}"></view>
<view class="towcontentboutton" :style="{'height':seighT + 'px'}">
<!-- <scroll-view :style="{'height':seighT + 'px'}" scroll-y @scrolltolower="loadMore"> -->
<view class="fivecontent_item" v-for="(item,index) in 20" :key="index">
<view class="fivecontent_item_nav flex-start">
<image src="@/static/avatar.png" mode="aspectFill"></image>
<view class="fivecontent_item_nav_left">
<view class="fivecontent_item_nav_lefttop flex-between">
<view>
{{item.shopName}}
</view>
<view>
龙首.{{item.distances}}m
</view>
</view>
<view class="flex-start">
<view class="fivecontent_item_nav_leftlang flex-start"
v-for="(s,index1) in item.shopTag" :key="index1">
<image src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/hong_h.png"
mode="aspectFill"></image>
<text>{{s}}</text>
</view>
</view>
</view>
</view>
<view class="fivecontent_item_box">
<view class="fivecontent_item_boxitem flex-between">
<image :src="item.image" mode=""></image>
<view class="fivecontent_item_boxitemleft flex-colum-start">
<view class="fivecontent_item_boxitemleftone flex-between">
<view>{{item.productName}}</view>
<text>已抢{{item.realSalesNumber}}</text>
</view>
<view class="fivecontent_item_boxitemlefttow flex-start"
v-for="(c,index2) in item.proTag" :key="index2">
<image src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/hong_h.png"
mode="aspectFill"></image>
<text>{{c}}</text>
</view>
<view class="indexboxitemleftthere flex-colum-start">
<view class="indexboxitemleftthereabsolute">
马上抢
</view>
<view class="indexboxitemlefttheretext flex-start">
<view class="indexboxitemlefttheretextone">
<text>¥</text>
<text>{{item.salePrice}}</text>
</view>
<view class="indexboxitemlefttheretexttow">
¥{{item.discount}}
</view>
</view>
<view class="indexboxitemleftthere_countdown flex-between">
<text class="indexboxitemleftthere_countdowntext">共省{{item.save}}</text>
<view class="indexboxitemleftthere_countdowntexts">
<!-- <uni-countdown @timeup="updateCity" :show-day="false"
:day="item.end_times.d" :hour="item.end_times.h"
:minute="item.end_times.m" :second="item.end_times.s"
:indexs='index' color="#FFFFFF" border-color="#00B26A"
splitorColor="#FFFFFF" :font-size="7"></uni-countdown> -->
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<u-loadmore height='40' :status="form.status" iconSize='24' fontSize='24' />
<!-- </scroll-view> -->
</view>
</view>
</view>
</template>
<script>
import navseat from '@/components/navseat.vue'
export default {
components: {
navseat
},
data() {
return {
titlename: '咖啡',
opacitys: false,
towcontentclickindex: 0,
windowHeight: '',
seighT: '',
customheighttop: '', //top高度
isFixedTop: false,
Topdistance: 3000, //吸顶初始距离
listbox: [{
name: '全部'
},
{
name: '美食正餐'
},
{
name: '饮品小吃'
}
],
form: {
address: '', //地址
type: '', //品类
orderBy: '', //1.理我最近 2.销量优先 3.价格优先
distance: '', //附近1KM 1选中 0不选中
page: 1, //页数
size: 10, //页容量
status: 'loadmore'
},
};
},
onPageScroll(e) {
if (e.scrollTop <= 44) { //搜索导航栏
this.opacitys = false
} else {
this.opacitys = true
}
if (e.scrollTop >= this.Topdistance) { //类别导航栏
this.isFixedTop = true
} else {
this.isFixedTop = false
}
},
onLoad() {
setTimeout(() => {
this.GetTop()
}, 1000)
},
computed: {
HeighT() { //手机类型的尺寸
return this.$store.getters.is_BarHeight
},
},
methods: {
//G滚动底部
loadMore(e) {
console.log(e)
},
//获取元素距离顶部的距离
GetTop() {
uni.getSystemInfo({
success: (data) => {
console.log(data)
this.windowHeight = data.windowHeight - data.statusBarHeight //总高度
// #ifdef MP-WEIXIN
const custom = wx.getMenuButtonBoundingClientRect()
this.seighT = data.windowHeight - custom.height - custom.top;
console.log(custom)
this.customheighttop = custom.height + custom.top
// #endif
// #ifdef APP-PLUS
this.customheighttop = data.statusBarHeight / 2
this.seighT = data.windowHeight - data.statusBarHeight / 2
// #endif
this.$u.getRect('.towcontentlistxitembt').then(res => {
this.seighT = this.seighT - res.height //高度
})
this.$u.getRect('.towcontentlistxitem').then(res => {
this.Topdistance = res.top - this.HeighT.heightBar //滚动距离 //滚动距离
this.seighT = this.seighT - res.height //高度
console.log(res)
})
}
})
},
towcontentclick(index) {
this.towcontentclickindex = index
}
}
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
.onecontent {
width: 100%;
height: 492rpx;
position: relative;
.onecontentimage {
position: absolute;
width: 100%;
height: 100%;
top: 0;
}
.after {
position: absolute;
bottom:32rpx;
right: 0;
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
text-align: center;
background-image: radial-gradient(160rpx at 0px 0px, rgba(0, 0, 0, 0) 40rpx, #fff 40rpx);
}
.onecontentabsolute {
position: absolute;
width: 100%;
padding: 0 52rpx;
bottom: 64rpx;
.onecontentabsoluteitem {
padding: 8rpx 16rpx;
background: #FFFFFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
image {
width: 24.16rpx;
height: 29.31rpx;
}
input {
padding: 0 16rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.onecontentabsoluteitembotton {
width: 120rpx;
height: 56rpx;
line-height: 56rpx;
text-align: center;
background: linear-gradient(109deg, #FF9D84 0%, #FFFFFF 100%);
border-radius: 28rpx 28rpx 28rpx 28rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 24rpx;
color: #333333;
}
}
}
}
.towcontent {
position: relative;
margin-top: -32rpx;
.towcontentlistxitemboxfixed {
position: fixed;
top: 0;
width: 100%;
z-index: 99;
margin-top: 0rpx !important;
}
.towcontentlistxitem {
// margin-top: -32rpx;
padding: 36rpx 28rpx 0rpx 28rpx;
border-radius: 24rpx 0rpx 0rpx 0rpx;
background: #F9F9F9;
.towcontentlistxitembox:nth-child(1) {
margin-left: 0;
}
.towcontentlistxitembox {
margin-left: 48rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
.towcontentlistxitemboxopacity {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
image {
width: 38.83rpx;
height: 8.62rpx;
}
}
.towcontentlistxitembt {
padding: 28rpx;
overflow-x: auto;
flex-wrap: nowrap;
background: #F9F9F9;
.towcontentlistxitembtitem {
flex: none;
padding: 8rpx 24rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
margin-left: 32rpx;
}
.towcontentlistxitembtitem:nth-child(1) {
margin-left: 0;
}
.towcontentlistxitembtitemaktev {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
background: #FEE06A;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
}
.towcontentboutton {
padding: 0 28rpx;
.fivecontent_item:nth-child(1) {
margin-top: 0;
}
.fivecontent_item {
margin-top: 32rpx;
padding: 24rpx;
width: 100%;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.fivecontent_item_nav {
image {
width: 60rpx;
height: 60rpx;
border-radius: 8rpx;
}
.fivecontent_item_nav_left {
flex: auto;
margin-left: 12rpx;
.fivecontent_item_nav_lefttop {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #666666;
}
.fivecontent_item_nav_leftlang {
margin-top: 8rpx;
width: max-content;
padding: 4rpx 10rpx;
background: #FFF9E1;
border-radius: 4rpx 4rpx 4rpx 4rpx;
text {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 16rpx;
color: #F9A511;
}
image {
width: 10.82rpx;
height: 14.06rpx;
}
}
.fivecontent_item_nav_leftlang:nth-child(2) {
margin-left: 12rpx;
background: #FEE9DF;
}
}
}
.fivecontent_item_box {
margin-top: 20rpx;
border-top: 2rpx solid #E5E5E5;
padding-top: 14rpx;
.fivecontent_item_boxitem {
image {
width: 192rpx;
height: 192rpx;
border-radius: 12rpx;
}
.fivecontent_item_boxitemleft {
margin-left: 24rpx;
flex: auto;
.fivecontent_item_boxitemleftone {
width: 100%;
text {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
view {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.fivecontent_item_boxitemlefttow {
margin-top: 8rpx;
width: max-content;
padding: 4rpx 10rpx;
background: #FFF9E1;
border-radius: 4rpx 4rpx 4rpx 4rpx;
text {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 16rpx;
color: #F9A511;
}
image {
width: 10.82rpx;
height: 14.06rpx;
}
}
.fivecontent_item_boxitemlefttow:nth-child(2) {
margin-left: 12rpx;
background: #FFD6D7;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
.indexboxitemleftthere {
position: relative;
margin-top: 30rpx;
padding-left: 16rpx;
width: 100%;
height: 88rpx;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/qinggou.png) no-repeat;
background-size: 100% 100%;
.indexboxitemleftthereabsolute {
position: absolute;
top: 14rpx;
right: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 24rpx;
color: #FFFFFF;
}
.indexboxitemlefttheretext {
.indexboxitemlefttheretextone {
text {
font-family: SourceHanSansCN-Bold, SourceHanSansCN-Bold;
font-weight: normal;
color: #FF5053;
}
text:nth-child(2) {
font-weight: bold;
font-size: 34rpx;
}
text:nth-child(1) {
font-size: 24rpx;
}
}
.indexboxitemlefttheretexttow {
margin-left: 12rpx;
font-size: 20rpx;
font-family: SourceHanSansCN-Regular, SourceHanSansCN-Regular;
font-weight: normal;
color: #999999;
text-decoration: line-through;
}
}
.indexboxitemleftthere_countdown {
width: 100%;
padding-right: 7rpx;
.indexboxitemleftthere_countdowntext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.indexboxitemleftthere_countdowntexts {
font-family: Roboto, Roboto;
font-weight: 400;
color: #333333;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 16rpx;
color: #FFFFFF;
}
}
}
}
}
}
}
}
}
}
</style>

333
pages/index/freedaily.vue Normal file
View File

@@ -0,0 +1,333 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat :opacity='opacity' :title='titlename' :titleshow='true'></navseat>
<view class="onecontent">
<view class="onecontentabsolute"></view>
</view>
<view class="towcontent">
<view class="towcontentone">
<image class="towcontentoneimage" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/mrmd1.png"
mode="aspectFill"></image>
<view class="towcontentonebox">
<image class="towcontentoneboximage"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/mrmd2.png" mode="aspectFill">
</image>
<view class="towcontentoneboxswiper">
<swiper class="swiper" circular :autoplay='true' :vertical='true' display-multiple-items="4" :interval="'3000'">
<swiper-item class="swiperitem" v-for="(item,index) in orderfindWiningUserlist"
:key="index">
<view class="swiper-item">{{item.userName}}* 免单{{item.orderAmount}}元订单号{{item.orderNo}}
</view>
</swiper-item>
</swiper>
</view>
</view>
</view>
<view class="towcontentoness">
<view class="towcontentonebox_box">
订单数82
</view>
<view class="towcontentonebox">
<view class="towcontentoneboxswiper">
<view class="swiper-item" style="margin-bottom: 32rpx;">
<view class="swiper_itemone">
金额
</view>
<view class="swiper_itemtow">
订单号
</view>
<view class="swiper_itemthere">
免单状态
</view>
</view>
<swiper class="swiper" circular :autoplay='true' :vertical='true' interval="3000" display-multiple-items="4">
<swiper-item class="swiperitem" v-for="(item,index) in orderfindWiningUserlist" :key="index">
<view class="swiper-item">
<view class="swiper_itemone">
{{item.orderAmount}}
</view>
<view class="swiper_itemtow">
{{item.orderNo}}
</view>
<view class="swiper_itemthere">
{{item.isRefund == true ? '已免单':'待免单'}}
</view>
</view>
</swiper-item>
</swiper>
</view>
</view>
</view>
<view class="towcontenttow">
每笔订单完成后30天内均有机会获得免单
</view>
</view>
</view>
</template>
<script>
import navseat from '@/components/navseat.vue'
export default {
components: {
navseat
},
data() {
return {
titlename: '今日上新',
opacity: false,
orderfindWiningUserlist: [],
form: {
address: '', //地址
type: '', //品类
orderBy: '', //1.理我最近 2.销量优先 3.价格优先
other: '', //附近1KM 1选中 0不选中
page: 1, //页数
size: 10, //页容量
status: 'loadmore'
},
};
},
onLoad(e) {
console.log(e)
this.orderfindWiningUser()
this.titlename = e.name
},
onPageScroll(e) {
if (e.scrollTop <= 44) { //搜索导航栏
this.opacity = false
} else {
this.opacity = true
}
},
methods: {
cut(str, firstStr, lastStr) {
let start = str.indexOf(firstStr);
let end = str.lastIndexOf(lastStr);
return str.slice(start, end + 1); //slice方法截取的部分不包括第二参数所在位置
},
async orderfindWiningUser() {
let res = await this.api.orderfindWiningUser()
this.orderfindWiningUserlist = res.data.map((i) => {
i.userName = i.userName.slice(0, 1)
return i
})
}
}
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
.onecontent {
width: 100%;
height: 684.19rpx;
position: relative;
background: linear-gradient(96deg, #F9F2D9 0%, #FBE1DA 100%);
.onecontentabsolute {
position: absolute;
top: 0;
height: 534.19rpx;
width: 100%;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/mrmd.png) no-repeat;
background-size: 100% 100%;
}
}
.towcontent {
position: relative;
padding: 0 28rpx;
width: 100%;
margin-top: -100rpx;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(249, 242, 217, 0.77) 10%, #F5DFDF 100%);
.towcontentone {
position: relative;
width: 100%;
background: linear-gradient(180deg, rgba(255, 241, 204, 0.77) 0%, rgba(255, 255, 255, 0.56) 40%, #FFFFFF 100%);
border-radius: 30rpx 30rpx 30rpx 30rpx;
border: 2rpx solid #FFFFFF;
padding: 32rpx 24rpx;
.towcontentoneimage {
position: absolute;
top: -30rpx;
left: 50%;
transform: translatex(-50%);
width: 118rpx;
height: 46rpx;
}
.towcontentonebox {
width: 100%;
.towcontentoneboximage {
width: 171.63rpx;
height: 37.24rpx;
}
.towcontentoneboxswiper {
width: 100%;
padding-top: 24rpx;
overflow: hidden;
.swiper {
height: 242rpx;
.swiperitem {
height: 40rpx;
.swiper-item {
display: block;
height: 40rpx;
text-align: left;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
}
}
}
}
.towcontentoness {
margin-top: 48rpx;
width: 100%;
background: rgba(255, 255, 255, 0.96);
border-radius: 30rpx 30rpx 30rpx 30rpx;
padding: 38rpx 48rpx;
.towcontentonebox_box {
margin: 0 auto;
text-align: center;
width: 262rpx;
height: 58rpx;
line-height: 58rpx;
background: #FFA436;
border-radius: 30rpx 30rpx 30rpx 30rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #FFFFFF;
}
.towcontentonebox {
width: 100%;
.towcontentoneboximage {
width: 171.63rpx;
height: 37.24rpx;
}
.swiper-item {
display: flex;
justify-content: space-between;
align-items: center;
.swiper_itemone {
width: 25%;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.swiper_itemtow {
width: auto;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.swiper_itemthere {
width: 25%;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.towcontentoneboxswiper {
width: 100%;
height: 242rpx;
padding-top: 24rpx;
overflow: hidden;
.swiper {
height: 230rpx;
.swiperitem {
height: 40rpx;
.swiper-item {
display: flex;
justify-content: space-between;
align-items: center;
.swiper_itemone {
width: 25%;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.swiper_itemtow {
width: auto;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.swiper_itemthere {
width: 25%;
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
}
}
}
}
}
.towcontenttow {
margin-top: 32rpx;
padding-bottom: 144rpx;
text-align: center;
width: 100%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
}
</style>

View File

@@ -1,8 +1,9 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat class="navbar" :opacity='opacitys' :title='titlename'></navseat>
<navseat class="navbar" :opacity='opacitys' :title='titlename' :titleshow='false'></navseat>
<view class="onecontent">
<image class="onecontentimage" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/bsb.png" mode=" "></image>
<view class="onecontentabsolute">
</view>
</view>
@@ -215,8 +216,12 @@
width: 100%;
height: 492rpx;
position: relative;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/bsb.png) no-repeat;
background-size: cover;
.onecontentimage {
position: absolute;
width: 100%;
height: 100%;
top: 0;
}
.onecontentabsolute {
position: absolute;
@@ -262,6 +267,7 @@
.towcontent {
position: relative;
margin-top: -32rpx;
.towcontentlistxitemboxfixed {
position: fixed;
top: 0;

View File

@@ -43,10 +43,8 @@
<!-- 轮播图 -->
<swipers :carousel='hometoplist.carousel'></swipers>
<!-- 广告 -->
<advertisement :bannervo='hometoplist.bannerVO'></advertisement>
<view class="" style="width: 200rpx;">
<!-- <customSwiper :swiper-list="hometoplist.bannerVO.counponsInfo" :timersetnteritem='timersetInterval' /> -->
</view>
<advertisement :bannervo='hometoplist.bannerVO' :itemStyle='itemStyle'
:timersetnteritem='timersetInterval' @changeValue="changeParentValue"></advertisement>
<!-- 金刚区 -->
<diamond :district='hometoplist.district'></diamond>
<!-- 今日上线 -->
@@ -244,6 +242,8 @@
district: [],
},
itemStyle: [ //样式
],
homelist: [], //下面数据
clickhometoplistmenulist: {}, //下拉点击的数据
form: {
@@ -291,16 +291,14 @@
setTimeout(() => {
this.GetTop()
}, 1000)
},
onReachBottom() {
this.onLoadhome()
},
onShow() {
this.hometop()
this.init_fn()
this.timersetInterval = '0'
},
methods: {
closeproductlist() {
@@ -332,11 +330,40 @@
}
})
},
changeParentValue(newValue) {
console.log(newValue)
this.itemStyle = newValue
},
getStyle(e) {
if (e > this.hometoplist.bannerVO.counponsInfo.length / 2) {
var right = this.hometoplist.bannerVO.counponsInfo.length - e
return {
transform: 'scale(' + (1) + ') translate(-' + (right * 20) + '%,0px)',
zIndex: 9999 - right,
opacity: 1
}
} else {
return {
transform: 'scale(' + (1) + ') translate(' + (e * 20) + '%,0px)',
zIndex: 9999 - e,
opacity: 1
}
}
},
// 首页上面数据
async hometop() {
try {
let res = await this.api.homehomePageUp()
this.hometoplist = res.data
if (this.hometoplist.bannerVO.counponsInfo) {
this.itemStyle = []
this.hometoplist.bannerVO.counponsInfo.forEach((item,
index) => {
this.itemStyle.push(this.getStyle(index))
})
}
// 计算swiper样式
} catch (e) {}
},
// 下面初始数据

View File

@@ -1,8 +1,9 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat :opacity='opacity' :title='titlename'></navseat>
<navseat :opacity='opacity' :title='titlename' :titleshow='false'></navseat>
<view class="onecontent">
<image class="onecontentimage" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/nav.png" mode=""></image>
<view class="onecontentabsolute">
<view class="onecontentabsoluteitem flex-between">
<image src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/l.png" mode=""></image>
@@ -130,9 +131,15 @@
width: 100%;
height: 492rpx;
position: relative;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/nav.png) no-repeat;
background-size: cover;
.onecontentimage{
position: absolute;
width: 100%;
height: 100%;
top: 0;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/nav.png) no-repeat;
background-size: cover;
}
.onecontentabsolute {
position: absolute;
width: 100%;

300
pages/index/tothestore.vue Normal file
View File

@@ -0,0 +1,300 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat :opacity='opacity' :title='toplist.name' :titleshow='false'></navseat>
<view class="onecontent">
<image class="onecontentimage" :src="toplist.coverImg" mode=""></image>
<view class="onecontentabsolute">
</view>
</view>
<view class="towcontent">
<view class="fivecontent_item flex-between" v-for="(item,index) in list.list" :key="index">
<view class="fivecontent_itemone flex-start">
<image class="fivecontent_itemoneimage" :src="item.coverImg" mode=""></image>
<view class="fivecontent_itemonebox">
<view class="fivecontent_itemoneboxone flex-start">
<view class="fivecontent_itemoneboxone_o">
热销TOP{{index}}
</view>
<view class="fivecontent_itemoneboxone_t">
{{item.shopName}}
</view>
</view>
<view class="fivecontent_itemoneboxtow flex-start">
<image class="fivecontent_itemoneboxtowimage"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/dw.png" mode="widthFix"></image>
<view class="fivecontent_itemoneboxtow_o">
{{item.address}}
</view>
<view class="fivecontent_itemoneboxtow_t">
{{item.distances}}km
</view>
</view>
</view>
</view>
<view class="fivecontent_itemtow" @click="makePhoneCall(item)">
马上预约
</view>
</view>
<u-loadmore height='40' :status="form.status" iconSize='24' fontSize='24' />
</view>
<!-- 小内切圆 -->
<!-- <view class="after"></view> -->
</view>
</template>
<script>
import navseat from '@/components/navseat.vue'
export default {
components: {
navseat
},
data() {
return {
titlename: '今日上新',
opacity: false,
list: {},
toplist: {},
form: {
address: '', //地址
type: '', //品类
orderBy: '', //1.理我最近 2.销量优先 3.价格优先
other: '', //附近1KM 1选中 0不选中
page: 1, //页数
size: 10, //页容量
status: 'loadmore'
},
};
},
onPageScroll(e) {
if (e.scrollTop <= 44) { //搜索导航栏
this.opacity = false
} else {
this.opacity = true
}
},
onReachBottom() {
this.onLoadhome()
},
onShow() {
this.init_fn()
this.distiricttopCommon()
},
methods: {
init_fn(e) {
this.list = []
this.form.page = 1 //页数
this.form.size = 10 //页数
this.form.status = 'loadmore' //页数
this.distirictsubShopList()
},
makePhoneCall(item) {
uni.makePhoneCall({
phoneNumber: item.phone //仅为示例
});
},
async distiricttopCommon() {
let res = await this.api.distiricttopCommon({
type: 'subShop', //团购卷品类Id/subShop-预约到店
orderBy: ''
})
console.log(res.data)
if (res.code == 0) {
this.toplist = res.data.carousel[0]
}
},
async distirictsubShopList() {
let res = await this.api.distirictsubShopList({
address: '西安市', //地址
lng: '108.949158',
lat: '34.301731',
distanceInKm: '10', //默认10 以经纬度为中心 多大范围以内 单位km
isPage: '', //是否分页 1分页 0不分页
page: this.form.page, //页数
size: this.form.size, //页容量
})
if (res.data.pages < this.form.page) {
this.form.status = 'nomore'
return false;
} else {
this.form.status = 'loading';
this.form.page = ++this.form.page;
setTimeout(() => {
this.list = [...this.list, ...res.data.list];
this.form.status = 'loading';
if (res.data.pageNum == res.data.pages) {
this.form.status = 'nomore';
} else {
this.form.status = 'loading';
}
}, 500)
}
this.list = res.data
}
}
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
.onecontent {
width: 100%;
height: 460rpx;
position: relative;
.onecontentimage {
position: absolute;
width: 100%;
height: 100%;
top: 0;
}
.onecontentabsolute {
position: absolute;
width: 100%;
padding: 0 52rpx;
bottom: 64rpx;
.onecontentabsoluteitem {
padding: 8rpx 16rpx;
background: #FFFFFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
image {
width: 24.16rpx;
height: 29.31rpx;
}
input {
padding: 0 16rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.onecontentabsoluteitembotton {
width: 120rpx;
height: 56rpx;
line-height: 56rpx;
text-align: center;
background: linear-gradient(109deg, #FF9D84 0%, #FFFFFF 100%);
border-radius: 28rpx 28rpx 28rpx 28rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 24rpx;
color: #333333;
}
}
}
}
.towcontent {
position: relative;
margin-top: -32rpx;
padding: 32rpx 28rpx;
border-radius: 24rpx 24rpx 0rpx 0rpx;
background: #F9F9F9;
.fivecontent_item:nth-child(1) {
margin-top: 0;
}
.fivecontent_item {
background: #FFFFFF;
padding: 16rpx 24rpx;
margin-top: 32rpx;
width: 100%;
border-radius: 10rpx 10rpx 10rpx 10rpx;
.fivecontent_itemone {
.fivecontent_itemoneimage {
width: 84rpx;
height: 84rpx;
border-radius: 16rpx;
}
.fivecontent_itemonebox {
margin-left: 16rpx;
height: 84rpx;
display: flex;
flex-direction: column;
.fivecontent_itemoneboxone {
.fivecontent_itemoneboxone_o {
padding: 2rpx 8rpx;
background: linear-gradient(116deg, #FF9D2B 0%, #FF4805 100%);
border-radius: 4rpx 4rpx 4rpx 4rpx;
font-family: Roboto, Roboto;
font-weight: 500;
font-size: 16rpx;
color: #FFFFFF;
}
.fivecontent_itemoneboxone_t {
margin-left: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.fivecontent_itemoneboxtow {
margin-top: 10rpx;
.fivecontent_itemoneboxtowimage {
width: 24rpx;
height: 24rpx;
}
.fivecontent_itemoneboxtow_o {
margin-left: 8rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.fivecontent_itemoneboxtow_t {
margin-left: 16rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
}
}
}
.fivecontent_itemtow {
padding: 8rpx 16rpx;
background: #FEE06A;
border-radius: 24rpx 24rpx 24rpx 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 24rpx;
color: #333333;
}
}
}
.after {
position: absolute;
top: -40rpx;
right: 0;
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
text-align: center;
background-image: radial-gradient(160rpx at 0px 0px, rgba(0, 0, 0, 0) 40rpx, #fff 40rpx);
}
}
</style>

View File

@@ -62,16 +62,11 @@
},
async loginwxuserInfo() {
let res = await this.api.loginwxuserInfo({
userId: uni.cache.get('userInfo').id,
shopId: uni.cache.get('shopUser').shopId
userId: uni.cache.get('userInfo').id
})
if (res.code == 0) {
uni.cache.set('userInfo', res.data.userInfo);
uni.cache.set('shopUser', res.data.shopUser);
uni.cache.set('shopInfo', res.data.shopInfo);
this.shopUser = uni.cache.get('shopUser')
uni.cache.set('userInfo', res.data);
this.userInfo = uni.cache.get('userInfo')
this.shopInfo = uni.cache.get('shopInfo')
}
},
makePhoneCall(e) {

View File

@@ -7,7 +7,11 @@
</view>
<view class="line-wrap"
:style="{ left: `${(100 / tabs.length) * active}%`, width: `${100 / tabs.length}%` }">
<view class="line"></view>
<view class="line">
<image style="width:40rpx; height: 10rpx;"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/dg.png" mode="aspectFill">
</image>
</view>
</view>
</view>
</u-sticky>
@@ -46,8 +50,7 @@
<view class="content">
<view class="shop-info">
<view class="shop-item">
<view class="cover flex-start" v-for="(item1,index1) in item.detailList"
:key="index1">
<view class="cover flex-start" v-for="(item1,index1) in item.detailList" :key="index1">
<!-- <image :src="item1.productImg" style="width: 200rpx;height: 200rpx; border-radius: 20rpx;" mode="widthFix"></image> -->
<c-image width="200" height="200" radius="20" :src="item1.productImg"></c-image>
</view>
@@ -74,6 +77,8 @@
</view>
</view>
</view>
<image style="margin:32rpx auto;" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/nomore.png"
v-if="is_end" mode="aspectFill"></image>
<u-loadmore :status="form.status" fontSize="28" color="#999" iconSize="28" />
</view>
</template>
@@ -137,16 +142,11 @@
methods: {
async loginwxuserInfo() {
let res = await this.api.loginwxuserInfo({
userId: uni.cache.get('userInfo').id,
shopId: uni.cache.get('shopUser').shopId
userId: uni.cache.get('userInfo').id
})
if (res.code == 0) {
uni.cache.set('userInfo', res.data.userInfo);
uni.cache.set('shopUser', res.data.shopUser);
uni.cache.set('shopInfo', res.data.shopInfo);
this.shopUser = uni.cache.get('shopUser')
uni.cache.set('userInfo', res.data);
this.userInfo = uni.cache.get('userInfo')
this.shopInfo = uni.cache.get('shopInfo')
}
},
orderinfo(e) {
@@ -203,10 +203,15 @@
$tabH: 80upx;
$color: #ff411d;
page {
background: #f6f6f6;
}
.tab-wrap {
display: flex;
height: $tabH;
position: relative;
background: #ffd158;
padding: 48rpx 0 72rpx 0;
.item {
flex: 1;
@@ -215,11 +220,15 @@
justify-content: center;
position: relative;
z-index: 2;
text {
color: #fff;
}
}
.line-wrap {
position: absolute;
bottom: 0;
bottom: 48rpx;
display: flex;
justify-content: center;
padding-bottom: 8upx;
@@ -227,16 +236,22 @@
.line {
$h: 6upx;
width: 30%;
height: $h;
margin-top: 6rpx;
// width: 30%;
// height: $h;
border-radius: $h;
background-color: $color;
// background-color: $color;
}
}
}
.list-wrap {
padding: $paddingSize;
position: relative;
margin-top: -24rpx;
z-index: 99999;
background: #f6f6f6;
border-radius: 24rpx 24rpx 0rpx 0rpx;
.item {
border-radius: 20upx;

View File

@@ -46,8 +46,7 @@
<view class="content">
<view class="shop-info">
<view class="shop-item">
<view class="cover flex-start" v-for="(item1,index1) in item.detailList"
:key="index1">
<view class="cover flex-start" v-for="(item1,index1) in item.detailList" :key="index1">
<!-- <image :src="item1.productImg" style="width: 200rpx;height: 200rpx; border-radius: 20rpx;" mode="widthFix"></image> -->
<c-image width="200" height="200" radius="20" :src="item1.productImg"></c-image>
</view>
@@ -137,16 +136,11 @@
methods: {
async loginwxuserInfo() {
let res = await this.api.loginwxuserInfo({
userId: uni.cache.get('userInfo').id,
shopId: uni.cache.get('shopUser').shopId
userId: uni.cache.get('userInfo').id
})
if (res.code == 0) {
uni.cache.set('userInfo', res.data.userInfo);
uni.cache.set('shopUser', res.data.shopUser);
uni.cache.set('shopInfo', res.data.shopInfo);
this.shopUser = uni.cache.get('shopUser')
uni.cache.set('userInfo', res.data);
this.userInfo = uni.cache.get('userInfo')
this.shopInfo = uni.cache.get('shopInfo')
}
},
orderinfo(e) {

View File

@@ -1,7 +1,7 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat class="navbar" :opacity='opacitys' :title='titlename'></navseat>
<navseat class="navbar" :opacity='opacitys' :title='titlename' :titleshow='false'></navseat>
<view class="onecontent">
<view :style="[{'padding-top':HeighT.customBar +44+'px'}]"></view>
<view class="onecontentabsolute flex-center">

910
pages/product/index.vue Normal file
View File

@@ -0,0 +1,910 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat :opacity='opacity' :title='titlename' :titleshow='false'></navseat>
<view class="onecontent">
<!-- 小内切圆 -->
<view class="after"></view>
<image class="onecontentimage" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/today/nav.png"
mode=""></image>
</view>
<view class="towcontent">
<view class="onetowcontent flex-between">
<view class="onetowcontent_one flex-start">
<view class="onetowcontent_oneo">
到手
</view>
<view class="onetowcontent_onet">
12.00
</view>
<view class="onetowcontent_oneth">
8
</view>
<view class="onetowcontent_onefour">
15.00
</view>
</view>
<view class="onetowcontent_tow flex-center">
<image src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/product/h.png" mode="aspectFill">
</image>
<text>已售620份</text>
</view>
<view class="after"></view>
</view>
<view class="towtowcontent">
<view class="towtowcontent_one">
书亦烧仙草|青提烧仙草
</view>
<view class="towtowcontent_tow flex-start">
<view class="flex-center">
<image class="towtowcontent_towimage" src="@/static/avatar.png" mode="aspectFill"></image>
<text class="towtowcontent_towtext">随时退</text>
</view>
</view>
</view>
<view class="therecontent">
<view class="onetherecontent flex-between">
<view class="onetherecontent_o">
通用门店
</view>
<view class="onetherecontent_t flex-start">
<view class="">
15家店可用
</view>
<u-icon name="arrow-right" color="#999999" size="28"></u-icon>
</view>
</view>
<view class="towtherecontent flex-between">
<view class="towtherecontent_o">
书亦烧仙草西安龙首门店
</view>
<u-icon name="phone-fill" color="#333333" size="50"></u-icon>
</view>
<view class="theretherecontent">
营业时间周一至周日 10:00-21:00
</view>
<view class="fourtherecontent flex-start">
<image class="fourtherecontentimage"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/product/d.png" mode="aspectFill"></image>
<view class="fourtherecontent_o">
30.0km
</view>
<view class="fourtherecontent_t">
龙首印象城向西20米
</view>
</view>
</view>
<view class="fourcontent">
<view class="fourcontent_o">
套餐详情
</view>
<view class="fourcontent_t">
饮品
</view>
<view class="fourcontent_th flex-between">
<view class="fourcontent_th_one flex-start">
<view>
青提烧仙草
</view>
<view>
网友推荐TOP5
</view>
</view>
<view class="fourcontent_th_tow flex-start">
<view class="fourcontent_th_towo">
1
</view>
<view class="fourcontent_th_towt">
12.00
</view>
</view>
</view>
</view>
<view class="fivecontent">
<view class="fivecontentone">
购买须知
</view>
<view class="fivecontenitem">
<view class="fivecontenitemone">
使用日期
</view>
<view class="fivecontenitemtow">
购买15天内有效
</view>
</view>
<view class="fivecontenitem">
<view class="fivecontenitemone">
可用时间
</view>
<view class="fivecontenitemtow">
全天可用
</view>
</view>
<view class="fivecontenitem">
<view class="fivecontenitemone">
预约方式
</view>
<view class="fivecontenitemtow">
无需预约高峰期需等位
</view>
</view>
<view class="fivecontenitem">
<view class="fivecontenitemone">
退款说明
</view>
<view class="fivecontenitemtow">
此为限时限量特惠产品请在规定期限内使用使用期限
内可申请全额退款逾期未使用自动全额退款
</view>
</view>
<view class="fivecontenitem">
<view class="fivecontenitemone">
使用规则
</view>
<view class="fivecontenitemtow">
不可使用包间
本单发票由商家提供详情请咨询商家
堂食外带均可
1.购买本券购买后无需复制券码进入书亦烧仙草小APP/
程序我的-兑换卡券点击获取美团券即可
2.使用请登录书亦烧仙草APP/小程序,选择对应商品结算时
券会自动抵扣
3.限1件商品使用不可抵扣配送费奶油等附加费用如遇门
店原料不足无法供应时或售罄您可视情况更换核销门店或
退款处理
4.适用范围部分门店不可用最终已下单时系统结算为准
5.售后服务如有疑问请致电400-888-1717
团购用户可享受店内其他所有优惠
使用优惠券购买团单有效期以优惠券规则为准
每人每天最多购买2张美团券
无需预约消费高峰期可能需要等位
</view>
</view>
</view>
<view class="sixcontent flex-start" @click="showpopup = true">
<view>
价格说明
</view>
<u-icon name="arrow-right" color="#333333" size="28"></u-icon>
</view>
</view>
<view class="bottomcontent flex-between">
<view class="bottomcontent_texttop flex-start">
附近推荐
</view>
<view class="bottomcontent_textright flex-start">
去首页
<u-icon name="arrow-right" color="#999999" size="28"></u-icon>
</view>
</view>
<view class="fivecontentes">
<view class="fivecontent_item" v-for="(item,index) in homelist" :key="index">
<view class="fivecontent_item_nav flex-start">
<image :src="item.shopImage" mode="aspectFill"></image>
<view class="fivecontent_item_nav_left">
<view class="fivecontent_item_nav_lefttop flex-between">
<view>
{{item.shopName}}
</view>
<view>
龙首.{{item.distances}}m
</view>
</view>
<view class="fivecontent_item_nav_lefttopstart flex-start">
<view class="fivecontent_item_nav_leftlang flex-start"
v-for="(s,index1) in item.shopTag" :key="index1"
:style="{'background':s.backColor,'color':s.backColor}">
<image class="fivecontent_item_nav_leftlangimage" v-if="s.shareImg"
:src="s.shareImg" mode="aspectFill"></image>
<text class="fivecontent_item_nav_leftlangtext">{{s.name}}</text>
</view>
</view>
</view>
</view>
<view class="fivecontent_item_box">
<view class="fivecontent_item_boxitem flex-between">
<image :src="item.image" mode=""></image>
<view class="fivecontent_item_boxitemleft flex-colum-start">
<view class="fivecontent_item_boxitemleftone flex-between">
<view>{{item.productName}}</view>
<text>已抢{{item.realSalesNumber}}</text>
</view>
<view class="flex-start flexstartboxfttow">
<view class="fivecontent_item_boxitemlefttow flex-start"
v-for="(c,index2) in item.proTag" :key="index2"
:style="{'background':c.backColor,'color':c.backColor}">
<image class="fivecontent_item_boxitemlefttowimage" v-if="c.shareImg"
:src="c.shareImg" mode="aspectFill"></image>
<text class="fivecontent_item_boxitemlefttowtext">{{c.name}}</text>
</view>
</view>
<view class="indexboxitemleftthere flex-colum-start">
<view class="indexboxitemleftthereabsolute">
马上抢
</view>
<view class="indexboxitemlefttheretext flex-start">
<view class="indexboxitemlefttheretextone">
<text>¥</text>
<text>{{item.salePrice}}</text>
</view>
<view class="indexboxitemlefttheretexttow">
¥{{item.discount}}
</view>
</view>
<view class="indexboxitemleftthere_countdown flex-between">
<text class="indexboxitemleftthere_countdowntext">共省{{item.save}}</text>
<view class="indexboxitemleftthere_countdowntexts">
<uni-countdown @timeup="updateCity" :show-day="false"
:day="item.end_times.d" :hour="item.end_times.h"
:minute="item.end_times.m" :second="item.end_times.s"
:indexs='index' color="#FFFFFF" border-color="#00B26A"
splitorColor="#FFFFFF" :font-size="7"></uni-countdown>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<u-popup :show="showpopup" :round="40" @close="showpopup = false">
<view class="classshowpopup">
<view class="classshowpopuptop">
价格说明
</view>
<view class="classshowpopupabsolute">
<u-icon name="close" color="#333333" size="28"></u-icon>
</view>
<view class="classshowpopupitem">
<view class="classshowpopupitemone">
团购价
</view>
<view class="classshowpopupitemtow">
指团购商品/服务的销售价格是用户最终决定是否购买商品/服务
的依据
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import navseat from '@/components/navseat.vue'
export default {
components: {
navseat
},
data() {
return {
titlename: '今日上新',
opacity: false,
showpopup:false,
form: {
address: '', //地址
type: '', //品类
orderBy: '', //1.理我最近 2.销量优先 3.价格优先
other: '', //附近1KM 1选中 0不选中
page: 1, //页数
size: 10, //页容量
status: 'loadmore'
},
};
},
onPageScroll(e) {
if (e.scrollTop <= 44) { //搜索导航栏
this.opacity = false
} else {
this.opacity = true
}
},
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
.onecontent {
width: 100%;
height: 490rpx;
position: relative;
z-index: 9;
.after {
position: absolute;
bottom: 40rpx;
right: 0;
width: 40rpx;
height: 40rpx;
line-height: 40rpx;
text-align: center;
z-index: 8;
background-image: radial-gradient(160rpx at 0px 0px, rgba(0, 0, 0, 0) 40rpx, #fff 40rpx);
}
.onecontentimage {
position: absolute;
width: 100%;
height: 100%;
top: 0;
z-index: 2;
}
}
.towcontent {
position: relative;
margin-top: -40rpx;
width: 100%;
z-index: 10;
background: #F9F9F9;
padding: 32rpx 28rpx;
border-radius: 40rpx 0 0rpx 0rpx;
.onetowcontent {
position: relative;
width: 100%;
padding: 24rpx 24rpx 48rpx 24rpx;
background: linear-gradient(87deg, #FE6560 0%, #FD5976 100%);
border-radius: 24rpx 24rpx 0 0;
.after {
position: absolute;
bottom: 24rpx;
right: 0;
width: 24rpx;
height: 24rpx;
line-height: 24rpx;
text-align: center;
z-index: 8;
background-image: radial-gradient(160rpx at 0px 0px, rgba(0, 0, 0, 0) 24rpx, #fff 24rpx);
}
.onetowcontent_one {
.onetowcontent_oneo {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #FFFFFF;
}
.onetowcontent_onet {
margin-left: 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 28rpx;
color: #FFFFFF;
}
.onetowcontent_oneth {
margin-left: 4rpx;
padding: 2rpx 16rpx;
border-radius: 4rpx 4rpx 4rpx 4rpx;
border: 2rpx solid #FFFFFF;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 20rpx;
color: #FFFFFF;
}
.onetowcontent_onefour {
margin-left: 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
}
}
.onetowcontent_tow {
image {
width: 10.82rpx;
height: 14.06rpx;
}
text {
margin-left: 5rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
}
background: rgba(129, 79, 39, 0.14);
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding: 4rpx 18rpx;
}
}
.towtowcontent {
position: relative;
padding: 0 24rpx;
z-index: 11;
width: 100%;
margin-top: -24rpx;
border-radius: 24rpx 0 24rpx 24rpx;
background: #FFFFFF;
.towtowcontent_one {
padding-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
padding-bottom: 24rpx;
border-bottom: 2rpx solid #E5E5E5;
}
.towtowcontent_tow {
padding: 24rpx 0;
.flex-center {
margin-left: 16rpx;
.towtowcontent_towimage {
width: 24rpx;
height: 24rpx;
}
.towtowcontent_towtext {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
}
}
}
.therecontent {
width: 100%;
padding: 32rpx 24rpx;
background: #FFFFFF;
margin-top: 32rpx;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.onetherecontent {
.onetherecontent_o {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
.onetherecontent_t {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
}
.towtherecontent {
margin-top: 32rpx;
.towtherecontent_o {
width: 364rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.theretherecontent {
padding: 16rpx 0 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
border-bottom: 2rpx solid #E5E5E5;
}
.fourtherecontent {
padding-top: 24rpx;
.fourtherecontentimage {
width: 24rpx;
height: 24rpx;
}
.fourtherecontent_o {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.fourtherecontent_t {
margin-left: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
}
}
.fourcontent {
margin-top: 32rpx;
padding: 32rpx 24rpx;
width: 100%;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.fourcontent_o {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
.fourcontent_t {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.fourcontent_th {
margin-top: 32rpx;
.fourcontent_th_one {
view:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
view:nth-child(2) {
margin-left: 8rpx;
padding: 4rpx 16rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 16rpx;
color: #FF5053;
background: #FFD6D7;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
}
}
.fourcontent_th_tow {
.fourcontent_th_towo {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #999999;
}
.fourcontent_th_towt {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
}
}
.fivecontent {
margin-top: 32rpx;
padding: 32rpx 24rpx;
width: 100%;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.fivecontentone {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
}
.fivecontenitem {
margin-top: 32rpx;
.fivecontenitemone {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.fivecontenitemtow {
margin-top: 16rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
}
}
.sixcontent {
padding: 0rpx 24rpx 32rpx 24rpx;
width: 100%;
background: #FFFFFF;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
}
}
.bottomcontent{
padding: 0 28rpx;
.bottomcontent_texttop{
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
.bottomcontent_texttop::before{
content: '';
display: inline-block;
width: 4rpx;
height: 22rpx;
background: #333333;
margin-right: 10rpx;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
.bottomcontent_textright{
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
}
.fivecontentes {
padding: 0 28rpx;
overflow: auto;
.fivecontent_item:nth-child(1) {
margin-top: 0;
}
.fivecontent_item {
margin-top: 32rpx;
padding: 24rpx 32rpx;
width: 100%;
background: #FFFFFF;
border-radius: 18rpx 18rpx 18rpx 18rpx;
.fivecontent_item_nav {
image {
width: 60rpx;
height: 60rpx;
border-radius: 8rpx;
}
.fivecontent_item_nav_left {
flex: auto;
margin-left: 12rpx;
.fivecontent_item_nav_lefttop {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #666666;
}
.fivecontent_item_nav_lefttopstart {
margin-top: 8rpx;
.fivecontent_item_nav_leftlang {
margin-left: 12rpx;
width: max-content;
padding: 4rpx 10rpx;
background: #FFF9E1;
border-radius: 4rpx 4rpx 4rpx 4rpx;
.fivecontent_item_nav_leftlangtext {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 16rpx;
color: #F9A511;
}
.fivecontent_item_nav_leftlangimage {
width: 10.82rpx;
height: 14.06rpx;
}
}
.fivecontent_item_nav_leftlang:nth-child(1) {
margin-left: 0;
}
}
}
}
.fivecontent_item_box {
margin-top: 20rpx;
border-top: 2rpx solid #E5E5E5;
padding-top: 14rpx;
.fivecontent_item_boxitem {
image {
width: 192rpx;
height: 192rpx;
border-radius: 12rpx;
}
.fivecontent_item_boxitemleft {
margin-left: 24rpx;
flex: auto;
.fivecontent_item_boxitemleftone {
width: 100%;
text {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
view {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.flexstartboxfttow {
.fivecontent_item_boxitemlefttow {
margin-left: 16rpx;
margin-top: 8rpx;
width: max-content;
padding: 4rpx 10rpx;
background: #FFF9E1;
border-radius: 4rpx 4rpx 4rpx 4rpx;
.fivecontent_item_boxitemlefttowtext {
margin-left: 6rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 16rpx;
color: #F9A511;
}
.fivecontent_item_boxitemlefttowimage {
width: 10.82rpx;
height: 14.06rpx;
}
}
.fivecontent_item_boxitemlefttow:nth-child(1) {
margin-left: 0;
background: #FFD6D7;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
}
.indexboxitemleftthere {
position: relative;
margin-top: 30rpx;
padding-left: 16rpx;
width: 100%;
height: 88rpx;
background: url(https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/qinggou.png) no-repeat;
background-size: 100% 100%;
.indexboxitemleftthereabsolute {
position: absolute;
top: 14rpx;
right: 12rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 24rpx;
color: #FFFFFF;
}
.indexboxitemlefttheretext {
.indexboxitemlefttheretextone {
text {
font-family: SourceHanSansCN-Bold, SourceHanSansCN-Bold;
font-weight: normal;
color: #FF5053;
}
text:nth-child(2) {
font-weight: bold;
font-size: 34rpx;
}
text:nth-child(1) {
font-size: 24rpx;
}
}
.indexboxitemlefttheretexttow {
margin-left: 12rpx;
font-size: 20rpx;
font-family: SourceHanSansCN-Regular, SourceHanSansCN-Regular;
font-weight: normal;
color: #999999;
text-decoration: line-through;
}
}
.indexboxitemleftthere_countdown {
width: 100%;
padding-right: 7rpx;
.indexboxitemleftthere_countdowntext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.indexboxitemleftthere_countdowntexts {
font-family: Roboto, Roboto;
font-weight: 400;
color: #333333;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: bold;
font-size: 16rpx;
color: #FFFFFF;
}
}
}
}
}
}
}
}
.classshowpopup{
position: relative;
width: 100%;
background: #FFFFFF;
border-radius: 40rpx 40rpx 0rpx 0rpx;
padding: 48rpx 28rpx 28rpx 28rpx;
.classshowpopuptop{
text-align: center;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 36rpx;
color: #333333;
width: 100%;
}
.classshowpopupabsolute{
position: absolute;
top: 55rpx;
right: 28rpx;
}
.classshowpopupitem{
margin-top: 32rpx;
.classshowpopupitemone{
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 32rpx;
color: #333333;
}
.classshowpopupitemtow{
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
}
}
}
</style>

View File

@@ -43,6 +43,8 @@
</view>
</view>
</view>
<image style="margin:32rpx auto;" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/nomore.png"
v-if="is_end" mode="aspectFill"></image>
<u-loadmore height='40' :status="form.status" iconSize='24' fontSize='24' />
</view>
</view>
@@ -68,6 +70,7 @@
],
towcontentclickindex: 0,
list: [],
is_end:false,
form: {
page: 1, //页数
size: 10, //页容量
@@ -110,6 +113,9 @@
})
if (res.data.pages < this.form.page) {
this.form.status = 'nomore'
if (res.data.pageNum == 1) {
this.is_end = true
}
return false;
} else {
this.form.status = 'loading';

129
pages/user/information.vue Normal file
View File

@@ -0,0 +1,129 @@
<template>
<view class="content">
<!-- 占位符导航栏 -->
<navseat :opacity='opacity' :title='titlename' :titleshow='true'></navseat>
<view class="onecontent">
<view :style="[{'padding-top':HeighT.customBar +44+'px'}]"></view>
<view class="onecontentbox">
<image class="onecontentboximage" src="@/static/avatar.png" mode=""></image>
<view class="onecontentboxitem flex-between">
<view class="onecontentboxitemtext">
昵称
</view>
<input class="onecontentboxiteminput" type="text" placeholder="请输入昵称">
</view>
<view class="onecontentboxitem flex-between" style="border-top: 1rpx dotted #333333;">
<view class="onecontentboxitemtext">
手机号
</view>
<input class="onecontentboxiteminput" type="text" placeholder="请输入手机号">
</view>
</view>
<view class="onecontentboxitemnamber">
保存
</view>
</view>
</view>
</template>
<script>
import navseat from '@/components/navseat.vue'
export default {
components: {
navseat
},
data() {
return {
titlename: '完善信息',
opacity: false,
form: {
address: '', //地址
type: '', //品类
orderBy: '', //1.理我最近 2.销量优先 3.价格优先
other: '', //附近1KM 1选中 0不选中
page: 1, //页数
size: 10, //页容量
status: 'loadmore'
},
};
},
onPageScroll(e) {
if (e.scrollTop <= 44) { //搜索导航栏
this.opacitys = false
} else {
this.opacitys = true
}
},
computed: {
HeighT() { //手机类型的尺寸
return this.$store.getters.is_BarHeight
},
},
};
</script>
<style scoped lang="scss">
page {
background: #F9F9F9;
}
.content {
.onecontent {
padding: 0 28rpx;
width: 100%;
height: 446rpx;
background: linear-gradient(180deg, #FFD158 0%, #F9F9F9 100%);
.onecontentbox {
position: relative;
margin-top: 116rpx;
width: 100%;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding: 75rpx 32rpx 0rpx 32rpx;
.onecontentboximage {
position: absolute;
left: 50%;
top: -60rpx;
width: 120rpx;
height: 120rpx;
border-radius: 50%;
transform: translateX(-50%);
}
.onecontentboxitem {
padding: 24rpx 0;
.onecontentboxitemtext{
font-family: PingFang SC, PingFang SC;
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
.onecontentboxiteminput{
text-align: right;
flex: auto;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 24rpx;
color: #999999;
height: 100%;
}
}
}
.onecontentboxitemnamber{
margin-top: 84rpx;
text-align: center;
width: 100%;
padding: 20rpx 0;
background: #FFD158;
border-radius: 46rpx 46rpx 46rpx 46rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 36rpx;
color: #333333;
}
}
}
</style>

View File

@@ -2,14 +2,11 @@
<view class="container">
<view class="user-info-wrap">
<view style="width: 108rpx; height: 108rpx;border-radius: 50%;">
<button open-type="chooseAvatar" @chooseavatar='onChooseAvatar'
style="padding: 0;margin: 0; width: 108rpx; height: 108rpx;border-radius: 50%;">
<image style="width: 108rpx; height: 108rpx;" v-if="userInfo.avatar" :src="userInfo.avatar"
<image style="width: 108rpx; height: 108rpx; border-radius: 50%;" v-if="userInfo.avatar" :src="userInfo.avatar"
mode="aspectFill">
</image>
<image style="width: 108rpx; height: 108rpx;" v-else src="@/static/avatar.png" mode="aspectFill">
<image style="width: 108rpx; height: 108rpx; border-radius: 50%;" v-else src="@/static/avatar.png" mode="aspectFill">
</image>
</button>
</view>
<view class="info flex-colum-start">
<text class="phone">{{userInfo.telephone || '无'}}</text>
@@ -17,52 +14,73 @@
</view>
<view class="userinfoone">
<view class="userinfoonebox">
<view class="userinfooneboxitem flex-between">
<view class="userinfooneboxitem flex-between" @click="clickinfo(item,index)"
v-for="(item,index) in teblist" :key="index">
<view class="userinfooneboxitemleft flex-start">
<image src="@/static/ewm.png" mode="aspectFill"></image>
<text>优惠券</text>
<image :src="item.shareImg" mode="aspectFill"></image>
<text>{{item.name}}</text>
</view>
<u-icon name="arrow-right" color="#575B66" size="28"></u-icon>
</view>
</view>
</view>
<listitem></listitem>
</view>
</template>
<script>
import uploadImage from "@/js_sdk/yushijie-ossutil/ossutil/uploadFile.js";
import listitem from "@/components/listitem.vue";
export default {
components: {
listitem
},
data() {
return {
shopUser: {},
userInfo: {},
shopInfo: {}
shopInfo: {},
teblist: []
};
},
onShow() {
if (uni.cache.get('token')) {
this.loginwxuserInfo()
this.tbPlatformDict()
}
},
methods: {
blurname(e) {
console.log(e);
this.userlist.nickname = e.detail.value
clickinfo(item, index) {
switch (item.jumpType) {
case 'scan': //拉起相机
this.form.type = item.value
break;
case 'relative': //内部页面
uni.pro.navigateTo(relUrl)
break;
case 'absolute': //外链url
uni.navigateTo({
url: `/pages/webview/webview?url=${item.menuUrl}`
});
break;
}
},
async loginwxuserInfo() {
let res = await this.api.loginwxuserInfo({
userId: uni.cache.get('userInfo').id,
shopId: uni.cache.get('shopUser').shopId
userId: uni.cache.get('userInfo').id
})
if (res.code == 0) {
uni.cache.set('userInfo', res.data.userInfo);
uni.cache.set('shopUser', res.data.shopUser);
uni.cache.set('shopInfo', res.data.shopInfo);
this.shopUser = uni.cache.get('shopUser')
uni.cache.set('userInfo', res.data);
this.userInfo = uni.cache.get('userInfo')
this.shopInfo = uni.cache.get('shopInfo')
}
},
async tbPlatformDict() {
let res = await this.api.tbPlatformDict({
type: 'ownMenu'
})
console.log(res)
if (res.code == 0) {
this.teblist = res.data
}
},
// / 更换头像
@@ -108,6 +126,7 @@
width: 750rpx;
background: #FFD158;
border-radius: 0rpx 0rpx 40rpx 0rpx;
.info {
flex: 1;
padding-left: $paddingSize;
@@ -130,7 +149,7 @@
.user-info-wrap::after {
position: absolute;
content: '';
bottom:40rpx;
bottom: 40rpx;
right: 0;
width: 40rpx;
height: 40rpx;
@@ -138,27 +157,32 @@
text-align: center;
background-image: radial-gradient(40rpx at 0px 0px, rgba(0, 0, 0, 0) 40rpx, #fff 40rpx);
}
.userinfoone{
.userinfoone {
position: relative;
padding: 48rpx 28rpx;
width:100%;
width: 100%;
top: -40rpx;
background: #F6F6F6;
border-radius: 40rpx 0 0rpx 0rpx;
.userinfoonebox{
.userinfoonebox {
padding: 32rpx 20rpx 32rpx 52rpx;
border-radius: 22rpx;
background: #FFFFFF;
width: 100%;
.userinfooneboxitem{
.userinfooneboxitem {
width: 100%;
margin-top: 32rpx;
.userinfooneboxitemleft{
image{
.userinfooneboxitemleft {
image {
width: 41.33rpx;
height:36.9rpx;
height: 36.9rpx;
}
text{
text {
margin-left: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
@@ -167,7 +191,8 @@
}
}
}
.userinfooneboxitem:nth-child(1){
.userinfooneboxitem:nth-child(1) {
margin-top: 0;
}
}

16
pages/webview/webview.vue Normal file
View File

@@ -0,0 +1,16 @@
<template>
<web-view :src="src"></web-view>
</template>
<script>
export default {
data() {
return {
src: ''
};
},
onLoad(options) {
this.src = options.url;
}
};
</script>