@ -0,0 +1,22 @@ | |||
import api from './api.js' | |||
const fetch = (key, data = {}, transform = true, loadingTitle) => { | |||
return new Promise(resolve => { | |||
const callback = (res) => { | |||
if (!transform) { | |||
resolve(res) | |||
return | |||
} | |||
if (res.code == 200) { | |||
resolve(res.result) | |||
} else { | |||
reject(res) | |||
} | |||
} | |||
api(key, data, callback, loadingTitle) | |||
}) | |||
} | |||
export default fetch |
@ -0,0 +1,111 @@ | |||
<template> | |||
<view class="category"> | |||
<view class="flex flex-column category-item" v-for="item in categoryOptions" :key="item.id"> | |||
<image class="img" :src="item.icon" mode="widthFix"></image> | |||
<view>{{ item.label }}</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
categoryOptions: [], | |||
} | |||
}, | |||
created() { | |||
this.getData() | |||
}, | |||
methods: { | |||
getData() { | |||
// todo: fetch | |||
this.categoryOptions = [ | |||
{ | |||
id: '001', | |||
icon: '/static/image/temp-1.png', | |||
label: '主题研学', | |||
}, | |||
{ | |||
id: '002', | |||
icon: '/static/image/temp-2.png', | |||
label: '社会实践', | |||
}, | |||
{ | |||
id: '003', | |||
icon: '/static/image/temp-3.png', | |||
label: '研学交流', | |||
}, | |||
{ | |||
id: '004', | |||
icon: '/static/image/temp-4.png', | |||
label: '周末研学', | |||
}, | |||
{ | |||
id: '005', | |||
icon: '/static/image/temp-5.png', | |||
label: '假期专项', | |||
}, | |||
{ | |||
id: '006', | |||
icon: '/static/image/temp-6.png', | |||
label: '研学日记', | |||
}, | |||
{ | |||
id: '007', | |||
icon: '/static/image/temp-7.png', | |||
label: '研学政策', | |||
}, | |||
{ | |||
id: '008', | |||
icon: '/static/image/temp-8.png', | |||
label: '本地研学', | |||
}, | |||
{ | |||
id: '009', | |||
icon: '/static/image/temp-9.png', | |||
label: '公司动态', | |||
}, | |||
{ | |||
id: '010', | |||
icon: '/static/image/temp-10.png', | |||
label: '全部', | |||
}, | |||
] | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.category { | |||
margin-top: 158rpx; | |||
width: 100%; | |||
padding: 24rpx 32rpx; | |||
box-sizing: border-box; | |||
display: grid; | |||
grid-template-columns: repeat(5, 1fr); | |||
column-gap: 16rpx; | |||
row-gap: 4rpx; | |||
background: linear-gradient(#DAF3FF, #FBFEFF 50rpx, #FBFEFF); | |||
border: 2rpx solid #FFFFFF; | |||
border-radius: 32rpx; | |||
&-item { | |||
padding: 16rpx 0; | |||
row-gap: 12rpx; | |||
font-size: 22rpx; | |||
color: #9B9B9B; | |||
.img { | |||
width: 72rpx; | |||
height: auto; | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,157 @@ | |||
<template> | |||
<view class="live"> | |||
<view class="flex live-header"> | |||
<view>图片直播</view> | |||
<button class="flex btn"> | |||
<view>查看全部</view> | |||
<image class="img" src="@/static/image/icon-arrow-right.png" mode="widthFix"></image> | |||
</button> | |||
</view> | |||
<!-- todo: auto scroll --> | |||
<view class="live-content"> | |||
<view class="live-item" v-for="item in liveList" :key="item.id"> | |||
<image class="live-item-bg" :src="item.image" mode="aspectFill"></image> | |||
<view class="live-item-info"> | |||
<view class="text-ellipsis live-item-info-title">{{ item.title }}</view> | |||
<view class="live-item-info-time">{{ item.time }}</view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
liveList: [], | |||
} | |||
}, | |||
created() { | |||
this.getData() | |||
}, | |||
methods: { | |||
getData() { | |||
// todo: fetch | |||
this.liveList = [ | |||
{ | |||
id: '001', | |||
image: '/static/image/temp-15.png', | |||
title: '苕溪露营漂流', | |||
time: '2025-04-18', | |||
}, | |||
{ | |||
id: '002', | |||
image: '/static/image/temp-16.png', | |||
title: '科技奇遇记', | |||
time: '2025-04-18', | |||
}, | |||
{ | |||
id: '003', | |||
image: '/static/image/temp-17.png', | |||
title: '满陇桂雨', | |||
time: '2025-04-18', | |||
}, | |||
{ | |||
id: '004', | |||
image: '/static/image/temp-18.png', | |||
title: '跟着皇帝游江南', | |||
time: '2025-04-18', | |||
}, | |||
{ | |||
id: '005', | |||
image: '/static/image/temp-15.png', | |||
title: '苕溪露营漂流', | |||
time: '2025-04-18', | |||
}, | |||
{ | |||
id: '006', | |||
image: '/static/image/temp-16.png', | |||
title: '科技奇遇记', | |||
time: '2025-04-18', | |||
}, | |||
] | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.live { | |||
width: 100%; | |||
padding: 32rpx; | |||
box-sizing: border-box; | |||
background-image: linear-gradient(164deg,#DAF3FF, #FBFEFF , #FBFEFF); | |||
border: 2rpx solid #FFFFFF; | |||
border-radius: 32rpx; | |||
&-header { | |||
justify-content: space-between; | |||
font-size: 36rpx; | |||
font-weight: 500; | |||
color: #191919; | |||
.btn { | |||
column-gap: 4rpx; | |||
font-size: 24rpx; | |||
color: #8B8B8B; | |||
.img { | |||
width: 32rpx; | |||
height: auto; | |||
} | |||
} | |||
} | |||
&-content { | |||
margin-top: 16rpx; | |||
white-space: nowrap; | |||
width: 100%; | |||
overflow-x: auto; | |||
font-size: 0; | |||
} | |||
&-item { | |||
flex: none; | |||
display: inline-block; | |||
width: 180rpx; | |||
height: 240rpx; | |||
border-radius: 12rpx; | |||
overflow: hidden; | |||
position: relative; | |||
& + & { | |||
margin-left: 16rpx; | |||
} | |||
&-bg { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
&-info { | |||
position: absolute; | |||
left: 0; | |||
bottom: 0; | |||
width: 100%; | |||
padding: 8rpx 12rpx; | |||
box-sizing: border-box; | |||
&-title { | |||
font-size: 26rpx; | |||
font-weight: 600; | |||
color: #FFFFFF; | |||
} | |||
&-time { | |||
font-size: 22rpx; | |||
color: #FFFFFF; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,137 @@ | |||
<template> | |||
<view class="product"> | |||
<image class="product-img" :src="data.image" mode="aspectFill"></image> | |||
<view class="flex flex-column product-info"> | |||
<view class="product-info-top"> | |||
<view class="product-name text-ellipsis-2">{{ data.name }}</view> | |||
<view class="product-desc text-ellipsis">{{ data.desc }}</view> | |||
</view> | |||
<view class="flex product-info-bottom"> | |||
<view class="product-detail"> | |||
<view class="flex product-price"> | |||
<view class="product-price-val"> | |||
<text>¥</text> | |||
<text class="highlight">{{ priceInt }}</text> | |||
<text>{{ `${priceFrac}起` }}</text> | |||
</view> | |||
<view class="product-price-bef" v-if="data.originalPrice"> | |||
{{ `¥${data.originalPrice}` }} | |||
</view> | |||
</view> | |||
<view class="product-registered"> | |||
{{ `${data.registered}人已报名` }} | |||
</view> | |||
</view> | |||
<button class="btn">报名</button> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
props: { | |||
data: { | |||
type: Object, | |||
default() { | |||
return {} | |||
} | |||
} | |||
}, | |||
computed: { | |||
priceInt() { | |||
return parseInt(this.data.currentPrice) | |||
}, | |||
priceFrac() { | |||
return (this.data.currentPrice % this.priceInt).toFixed(2).slice(1) | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.product { | |||
height: 464rpx; | |||
background: #FFFFFF; | |||
border: 2rpx solid #FFFFFF; | |||
border-radius: 32rpx; | |||
overflow: hidden; | |||
font-size: 0; | |||
&-img { | |||
width: 100%; | |||
height: 220rpx; | |||
} | |||
&-info { | |||
height: 244rpx; | |||
padding: 16rpx 16rpx 24rpx 16rpx; | |||
box-sizing: border-box; | |||
justify-content: space-between; | |||
&-top { | |||
} | |||
&-bottom { | |||
width: 100%; | |||
justify-content: space-between; | |||
} | |||
} | |||
&-name { | |||
font-size: 28rpx; | |||
font-weight: 500; | |||
color: #000000; | |||
} | |||
&-desc { | |||
margin-top: 8rpx; | |||
font-size: 24rpx; | |||
color: #8B8B8B; | |||
} | |||
&-detail { | |||
} | |||
&-price { | |||
justify-content: flex-start; | |||
align-items: baseline; | |||
column-gap: 6rpx; | |||
&-val { | |||
font-size: 24rpx; | |||
font-weight: 500; | |||
color: #FF4800; | |||
.highlight { | |||
font-size: 32rpx; | |||
} | |||
} | |||
&-bef { | |||
text-decoration: line-through; | |||
font-size: 24rpx; | |||
color: #8B8B8B; | |||
} | |||
} | |||
&-registered { | |||
font-size: 24rpx; | |||
color: #8B8B8B; | |||
} | |||
.btn { | |||
padding: 11rpx 16rpx; | |||
font-size: 26rpx; | |||
font-weight: 500; | |||
color: #FFFFFF; | |||
background: #00A9FF; | |||
border-radius: 24rpx; | |||
} | |||
} | |||
</style> |
@ -0,0 +1,103 @@ | |||
<template> | |||
<view> | |||
<view class="tabs"> | |||
<uv-tabs | |||
:list="tabs" | |||
:activeStyle="{ | |||
'font-family': 'PingFang SC', | |||
'font-weight': 500, | |||
'font-size': '28rpx', | |||
'line-height': 1.5, | |||
'color': '#FFFFFF', | |||
'background-color': '#191919', | |||
'border-radius': '34rpx', | |||
'padding': '12rpx 32rpx', | |||
}" | |||
:inactiveStyle="{ | |||
'font-family': 'PingFang SC', | |||
'font-weight': 400, | |||
'font-size': '28rpx', | |||
'line-height': 1.5, | |||
'color': '#191919', | |||
'background-color': '#E4E7EB', | |||
'border-radius': '34rpx', | |||
'padding': '12rpx 32rpx', | |||
}" | |||
lineWidth="0" | |||
lineHeight="0" | |||
@change="onTabChange" | |||
></uv-tabs> | |||
</view> | |||
<view v-if="list.length" class="content"> | |||
<view v-for="item in list" :key="item.id"> | |||
<productCard | |||
:data="item" | |||
></productCard> | |||
</view> | |||
</view> | |||
<template v-else> | |||
<uv-empty mode="list"></uv-empty> | |||
</template> | |||
</view> | |||
</template> | |||
<script> | |||
import productCard from '@/components/home/productCard.vue' | |||
export default { | |||
components: { | |||
productCard, | |||
}, | |||
props: { | |||
list: { | |||
type: Array, | |||
default() { | |||
return [] | |||
} | |||
}, | |||
}, | |||
data() { | |||
return { | |||
tabs: [], | |||
current: null, | |||
} | |||
}, | |||
created() { | |||
this.fetchCategory() | |||
}, | |||
methods: { | |||
fetchCategory() { | |||
// todo: fetch | |||
this.tabs = [ | |||
{ name: '全部' }, | |||
// todo: jump to detail | |||
{ id: '001', name: '草原运动会' }, | |||
{ id: '002', name: '我的韶山行' }, | |||
{ id: '003', name: '出境游' }, | |||
] | |||
}, | |||
onTabChange(e) { | |||
console.log('onTabChange', e.index) | |||
this.current = e.index | |||
// todo: jump to detail | |||
// this.$emit('categoryChange', { classId: this.tabs[this.current].id }) | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.tabs { | |||
width: calc(100% + 22px); | |||
transform: translateX(-11px); | |||
} | |||
.content { | |||
margin-top: 24rpx; | |||
display: grid; | |||
grid-template-columns: repeat(2, 1fr); | |||
gap: 16rpx; | |||
} | |||
</style> |
@ -0,0 +1,90 @@ | |||
<template> | |||
<view class="recommend"> | |||
<view class="flex recommend-item" v-for="item in recommendList" :key="item.id"> | |||
<image class="img" :src="item.icon" mode="widthFix"></image> | |||
<view> | |||
<view class="label">{{ item.label }}</view> | |||
<view :class="['desc', item.highlight ? 'highlight' : '']">{{ item.desc }}</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
recommendList: [], | |||
} | |||
}, | |||
created() { | |||
this.getData() | |||
}, | |||
methods: { | |||
getData() { | |||
// todo: fetch | |||
this.recommendList = [ | |||
{ | |||
id: '001', | |||
icon: '/static/image/temp-11.png', | |||
label: '限时优惠', | |||
desc: '速抢折扣', | |||
highlight: true, | |||
}, | |||
{ | |||
id: '002', | |||
icon: '/static/image/temp-12.png', | |||
label: '口碑爆款', | |||
desc: '热销推荐', | |||
}, | |||
{ | |||
id: '003', | |||
icon: '/static/image/temp-13.png', | |||
label: '新上线路', | |||
desc: '全新上线', | |||
}, | |||
] | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.recommend { | |||
display: grid; | |||
grid-template-columns: repeat(3, 1fr); | |||
column-gap: 12rpx; | |||
&-item { | |||
justify-content: flex-start; | |||
column-gap: 8rpx; | |||
padding: 16rpx; | |||
box-sizing: border-box; | |||
background: linear-gradient(to right, #FFF5EA, #FFFCF9 70%, #FFFCF9); | |||
border-radius: 16rpx; | |||
.img { | |||
width: 56rpx; | |||
height: auto; | |||
} | |||
.label { | |||
font-size: 26rpx; | |||
color: #181818; | |||
} | |||
.desc { | |||
font-size: 22rpx; | |||
color: #9B9B9B; | |||
&.highlight { | |||
color: #FF9035; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,73 @@ | |||
<template> | |||
<view class="swiper"> | |||
<uv-swiper | |||
:list="bannerList" keyName="image" | |||
indicator | |||
indicatorMode="dot" | |||
indicatorInactiveColor="rgba(255, 255, 255, 0.7)" | |||
height="228rpx" | |||
@click="onClickBanner" | |||
></uv-swiper> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
bannerList: [], | |||
} | |||
}, | |||
created() { | |||
this.getData() | |||
}, | |||
methods: { | |||
getData() { | |||
// todo: fetch | |||
this.bannerList = [ | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
{ | |||
image: '/static/image/temp-14.png', | |||
}, | |||
] | |||
}, | |||
onClickBanner(index) { | |||
console.log('onClickBanner', index) | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.swiper { | |||
border-radius: 32rpx; | |||
overflow: hidden; | |||
/deep/ .uv-swiper-indicator__wrapper__dot, | |||
/deep/ .uv-swiper-indicator__wrapper__dot--active { | |||
margin: 0 4rpx; | |||
width: 30rpx; | |||
height: 10rpx; | |||
} | |||
/deep/ .uv-swiper-indicator__wrapper__dot--active { | |||
background: linear-gradient(to right, #21FEEC 40%, #019AF9); | |||
} | |||
} | |||
</style> |
@ -1,112 +0,0 @@ | |||
<template> | |||
<view class="list"> | |||
<view class="item" | |||
v-for="(item, index) in 10" | |||
@click="$utils.navigateTo('/pages_order/product/productDetail?id=123')" | |||
:key="index"> | |||
<image | |||
class="image" | |||
src="https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg" mode=""></image> | |||
<view class="info"> | |||
<view class="title"> | |||
桌布租赁 | |||
</view> | |||
<view class="price"> | |||
<text>¥58</text>元/起 | |||
</view> | |||
<view class="favorable"> | |||
<view class="t"> | |||
限时优惠 | |||
</view> | |||
<view class="p"> | |||
¥48 | |||
</view> | |||
</view> | |||
<view class="num"> | |||
已售卖5000+件 | |||
</view> | |||
</view> | |||
<view class="btn"> | |||
<uv-icon name="shopping-cart" | |||
color="#fff"></uv-icon> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name:"productList", | |||
data() { | |||
return { | |||
}; | |||
}, | |||
methods : { | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.list{ | |||
display: flex; | |||
flex-wrap: wrap; | |||
.item{ | |||
position: relative; | |||
width: 300rpx; | |||
padding: 20rpx; | |||
background-color: #fff; | |||
border-radius: 20rpx; | |||
margin-top: 20rpx; | |||
&:nth-child(odd){ | |||
margin-right: 20rpx; | |||
} | |||
.image{ | |||
width: 300rpx; | |||
height: 250rpx; | |||
border-radius: 20rpx; | |||
} | |||
.info{ | |||
font-size: 26rpx; | |||
.title{ | |||
font-size: 30rpx; | |||
} | |||
.price{ | |||
color: #D03F25; | |||
margin-top: 6rpx; | |||
text{ | |||
font-size: 34rpx; | |||
font-weight: 900; | |||
} | |||
} | |||
.favorable{ | |||
display: flex; | |||
background-image: url(/static/image/product/favorable.png); | |||
background-size: 100% 100%; | |||
width: fit-content; | |||
padding: 5rpx 10rpx; | |||
font-size: 18rpx; | |||
margin-top: 6rpx; | |||
.p{ | |||
color: #fff; | |||
margin-left: 10rpx; | |||
} | |||
} | |||
.num{ | |||
margin-top: 6rpx; | |||
font-size: 22rpx; | |||
color: #888; | |||
} | |||
} | |||
.btn{ | |||
position: absolute; | |||
right: 20rpx; | |||
bottom: 20rpx; | |||
padding: 10rpx; | |||
border-radius: 50%; | |||
background-color: $uni-color; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,130 +0,0 @@ | |||
<template> | |||
<view class="commission"> | |||
<image src="/static/image/center/10.png" mode=""></image> | |||
<view class="price"> | |||
<view class="title"> | |||
总佣金(元) | |||
</view> | |||
<view class="num"> | |||
7890.34元 | |||
</view> | |||
</view> | |||
<view class="font-menu" | |||
v-if="purse"> | |||
<view @click="toRunningWater(index)" | |||
v-for="(item, index) in list" | |||
:key="index">{{ item.name }}</view> | |||
</view> | |||
<view class="btn" | |||
v-if="!purse" | |||
@click="toPurse"> | |||
提现 | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name: "userShopCommission", | |||
props : { | |||
purse : { | |||
default : false, | |||
}, | |||
}, | |||
data() { | |||
return { | |||
list : [ | |||
{ | |||
name : '余额记录', | |||
}, | |||
{ | |||
name : '提现记录', | |||
}, | |||
{ | |||
name : '佣金记录', | |||
}, | |||
], | |||
}; | |||
}, | |||
methods : { | |||
// 跳转到钱包提现 | |||
toPurse(){ | |||
uni.navigateTo({ | |||
url:'/pages_order/mine/purse' | |||
}) | |||
}, | |||
// 跳转到记录页面 | |||
toRunningWater(index){ | |||
uni.navigateTo({ | |||
url:'/pages_order/mine/runningWater?status=' + index | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.commission { | |||
width: 700rpx; | |||
height: 300rpx; | |||
position: relative; | |||
margin: 20rpx auto; | |||
color: #fff; | |||
image { | |||
width: 700rpx; | |||
height: 300rpx; | |||
position: absolute; | |||
border-radius: 20rpx; | |||
} | |||
.price { | |||
position: absolute; | |||
left: 50rpx; | |||
top: 80rpx; | |||
font-weight: 900; | |||
.title { | |||
font-size: 32rpx; | |||
} | |||
.num { | |||
font-size: 44rpx; | |||
margin-top: 20rpx; | |||
} | |||
} | |||
.font-menu { | |||
font-size: 24rpx; | |||
font-family: PingFang SC, PingFang SC-Regular; | |||
font-weight: 500; | |||
text-align: center; | |||
color: #ffffff; | |||
line-height: 24rpx; | |||
width: 710rpx; | |||
position: absolute; | |||
left: 0; | |||
bottom: 25rpx; | |||
display: flex; | |||
view{ | |||
width: 160rpx; | |||
} | |||
} | |||
.btn { | |||
position: absolute; | |||
right: 50rpx; | |||
bottom: 50rpx; | |||
background-color: #FDC440; | |||
width: 160rpx; | |||
height: 60rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
border-radius: 30rpx; | |||
} | |||
} | |||
</style> |
@ -1,260 +0,0 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar/> | |||
<view class="user"> | |||
<uv-checkbox-group | |||
shape="circle" | |||
v-model="checkboxValue"> | |||
<uv-swipe-action> | |||
<view | |||
v-for="(item, index) in list" | |||
:key="index"> | |||
<view style="margin-top: 20rpx;"></view> | |||
<uv-swipe-action-item | |||
:options="options"> | |||
<view class="item"> | |||
<view class="checkbox"> | |||
<uv-checkbox | |||
:name="item.id" | |||
activeColor="#FA5A0A" | |||
size="40rpx" | |||
icon-size="35rpx" | |||
></uv-checkbox> | |||
</view> | |||
<image | |||
class="image" | |||
src="https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg" | |||
mode=""></image> | |||
<view class="info"> | |||
<view class="title"> | |||
<view class=""> | |||
{{ item.title }} | |||
</view> | |||
<view class=""> | |||
<uv-number-box v-model="item.num" | |||
@change="valChange"></uv-number-box> | |||
</view> | |||
</view> | |||
<view class="unit"> | |||
规格:{{ item.unit }} | |||
<uv-icon name="arrow-down"></uv-icon> | |||
</view> | |||
<view class="price"> | |||
¥<text>{{ item.price }}</text>元 | |||
</view> | |||
</view> | |||
</view> | |||
</uv-swipe-action-item> | |||
</view> | |||
</uv-swipe-action> | |||
</uv-checkbox-group> | |||
<view class="action"> | |||
<view class="icon"> | |||
<image src="/static/image/cart/1.png" mode=""></image> | |||
<view class="num"> | |||
{{ checkboxValue.length }} | |||
</view> | |||
</view> | |||
<view class="price"> | |||
<view class="count"> | |||
合计 | |||
<view class=""> | |||
¥<text>{{ totalPrice }}</text> | |||
</view> | |||
</view> | |||
<view class="text"> | |||
共{{ checkboxValue.length }}件,已享受更低优惠 | |||
</view> | |||
</view> | |||
<view class="btn"> | |||
去结算 | |||
</view> | |||
</view> | |||
</view> | |||
<tabber select="cart" /> | |||
</view> | |||
</template> | |||
<script> | |||
import tabber from '@/components/base/tabbar.vue' | |||
export default { | |||
components: { | |||
tabber, | |||
}, | |||
data() { | |||
return { | |||
value : 0, | |||
checkboxValue : [], | |||
options: [ | |||
{ | |||
text: '删除', | |||
style: { | |||
backgroundColor: '#FA5A0A' | |||
} | |||
}, | |||
], | |||
list : [ | |||
{ | |||
id : 1, | |||
title : '桌布租赁', | |||
num : 1, | |||
price : 299, | |||
unit : '120*40*75【桌子尺寸】', | |||
}, | |||
{ | |||
id : 2, | |||
title : '桌布租赁', | |||
num : 1, | |||
price : 299, | |||
unit : '120*40*75【桌子尺寸】', | |||
}, | |||
], | |||
} | |||
}, | |||
computed: { | |||
totalPrice(){ | |||
if (!this.checkboxValue.length) { | |||
return 0 | |||
} | |||
let price = 0 | |||
this.list.forEach(n => { | |||
if(this.checkboxValue.includes(n.id)){ | |||
price += n.price * n.num | |||
} | |||
}) | |||
return price | |||
}, | |||
}, | |||
methods: { | |||
valChange(){ | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page { | |||
padding-bottom: 200rpx; | |||
/deep/ .uv-swipe-action{ | |||
width: 100%; | |||
} | |||
} | |||
.user { | |||
.item{ | |||
background-color: #fff; | |||
display: flex; | |||
padding: 30rpx; | |||
.checkbox{ | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.image{ | |||
width: 200rpx; | |||
height: 200rpx; | |||
border-radius: 20rpx; | |||
} | |||
.info{ | |||
flex: 1; | |||
.title{ | |||
display: flex; | |||
padding: 10rpx 20rpx; | |||
justify-content: space-between; | |||
} | |||
.unit{ | |||
font-size: 24rpx; | |||
padding: 10rpx 20rpx; | |||
color: #717171; | |||
display: flex; | |||
align-items: center; | |||
} | |||
.price{ | |||
color: $uni-color; | |||
font-size: 28rpx; | |||
padding: 10rpx 20rpx; | |||
text{ | |||
font-size: 36rpx; | |||
font-weight: 900; | |||
} | |||
} | |||
} | |||
} | |||
.action{ | |||
width: 700rpx; | |||
position: fixed; | |||
bottom: 220rpx; | |||
left: 25rpx; | |||
background-color: #fff; | |||
height: 100rpx; | |||
border-radius: 50rpx; | |||
box-shadow: 0 0 6rpx 6rpx #00000010; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
overflow: hidden; | |||
z-index: 999; | |||
.icon{ | |||
position: relative; | |||
width: 80rpx; | |||
height: 80rpx; | |||
margin: 0 20rpx; | |||
image{ | |||
width: 80rpx; | |||
height: 80rpx; | |||
} | |||
.num{ | |||
position: absolute; | |||
right: 10rpx; | |||
top: 0rpx; | |||
background-color: $uni-color; | |||
color: #fff; | |||
font-size: 18rpx; | |||
border-radius: 50%; | |||
height: 30rpx; | |||
width: 30rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
} | |||
.price{ | |||
.count{ | |||
display: flex; | |||
font-size: 26rpx; | |||
align-items: center; | |||
view{ | |||
color: $uni-color; | |||
margin-left: 10rpx; | |||
text{ | |||
font-size: 32rpx; | |||
font-weight: 900; | |||
} | |||
} | |||
} | |||
.text{ | |||
font-size: 20rpx; | |||
color: #717171; | |||
} | |||
} | |||
.btn{ | |||
margin-left: auto; | |||
background-color: $uni-color; | |||
height: 100%; | |||
padding: 0 50rpx; | |||
color: #fff; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,191 +0,0 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar/> | |||
<view class="category"> | |||
<uv-vtabs | |||
:chain="chain" | |||
:list="category" | |||
height="1000px" | |||
:barItemBadgeStyle="{right:'20px',top:'12px'}" | |||
@change="change"> | |||
<uv-vtabs-item> | |||
<view class="category-title"> | |||
租赁 | |||
</view> | |||
<view class="list"> | |||
<view class="item" v-for="(item,index) in list" :key="index" | |||
@click="$utils.navigateTo('/pages_order/product/productDetail?id=123')"> | |||
<view class="item-image"> | |||
<image | |||
:src="item.image" | |||
mode="aspectFill"></image> | |||
</view> | |||
<view class="item-unit"> | |||
<text class="text">{{item.unit}}</text> | |||
</view> | |||
</view> | |||
</view> | |||
</uv-vtabs-item> | |||
</uv-vtabs> | |||
</view> | |||
<tabber select="category" /> | |||
</view> | |||
</template> | |||
<script> | |||
import tabber from '@/components/base/tabbar.vue' | |||
export default { | |||
components: { | |||
tabber, | |||
}, | |||
data() { | |||
return { | |||
category: [ | |||
{ | |||
name : '桌布' | |||
}, | |||
{ | |||
name : '桌布' | |||
}, | |||
{ | |||
name : '桌布' | |||
}, | |||
], | |||
list : [ | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
{ | |||
unit : '100*50*60', | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
}, | |||
], | |||
chain: false, | |||
value: 0 | |||
} | |||
}, | |||
computed: { | |||
list2() { | |||
const _list = this.list[this.value]?.childrens; | |||
return _list ? _list : []; | |||
} | |||
}, | |||
onReady() { | |||
}, | |||
methods: { | |||
change(index) { | |||
console.log('选项改变:', index) | |||
this.value = index; | |||
} | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page{ | |||
/deep/ .uv-vtabs{ | |||
height: calc(100vh - 360rpx) !important; | |||
} | |||
/deep/ .uv-vtabs__bar{ | |||
height: calc(100vh - 360rpx) !important; | |||
} | |||
/deep/ .uv-vtabs__content{ | |||
height: calc(100vh - 360rpx) !important; | |||
} | |||
} | |||
.category { | |||
font-size: 30rpx; | |||
color: #333; | |||
.category-title{ | |||
position: relative; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
height: 120rpx; | |||
&::before, | |||
&::after { | |||
position: absolute; | |||
top: 50%; | |||
content: ''; | |||
width: 10%; | |||
border-top: 2rpx solid black; | |||
} | |||
&::before { | |||
left: 25%; | |||
} | |||
&::after { | |||
right: 25%; | |||
} | |||
} | |||
.list{ | |||
display: flex; | |||
flex-wrap: wrap; | |||
margin: 0 auto; | |||
width: 490rpx; | |||
.item { | |||
padding: 10rpx 20rpx; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: center; | |||
align-items: center; | |||
margin-bottom: 20rpx; | |||
.item-image { | |||
width: 120rpx; | |||
height: 120rpx; | |||
image{ | |||
height: 100%; | |||
width: 100%; | |||
border-radius: 50%; | |||
} | |||
} | |||
.item-unit { | |||
font-size: 24rpx; | |||
margin-top: 15rpx; | |||
color: #555; | |||
} | |||
} | |||
.gap { | |||
padding: 0 30rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,353 +0,0 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar title="个人中心" /> | |||
<view class="head"> | |||
<view class="headImage"> | |||
<image src="" mode=""></image> | |||
</view> | |||
<view class="info"> | |||
<view class="name"> | |||
倾心. | |||
</view> | |||
<!-- <view class="vip"> | |||
VIP1 | |||
</view> --> | |||
<view class="tips"> | |||
今天是您来的的第32天 | |||
</view> | |||
</view> | |||
<!-- <view class="headBtn" @click="headBtn"> | |||
角色切换 | |||
</view> --> | |||
<view class="setting"> | |||
<uv-icon name="setting" size="40rpx"></uv-icon> | |||
</view> | |||
</view> | |||
<!-- 水洗店 --> | |||
<view class="userShop" v-if="userShop"> | |||
<userShopCommission /> | |||
<view class="userList"> | |||
<view class="title"> | |||
我的用户 | |||
</view> | |||
<view class="list"> | |||
<view class="item" v-for="(item, index) in 20" :key="index"> | |||
<view class="name"> | |||
客户:王生 | |||
</view> | |||
<view class="num"> | |||
剩余水洗布:198 | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 酒店 --> | |||
<view class="user" v-else> | |||
<view class="line"> | |||
<view class="item"> | |||
<view class="image"> | |||
<image src="/static/image/center/1.png" mode=""></image> | |||
</view> | |||
<view class=""> | |||
余额¥3000 | |||
</view> | |||
</view> | |||
<view class="item"> | |||
<view class="image"> | |||
<image src="/static/image/center/4.png" mode=""></image> | |||
</view> | |||
<view class=""> | |||
押金¥30000 | |||
</view> | |||
</view> | |||
</view> | |||
<view class="line grid"> | |||
<view class="title"> | |||
常用功能 | |||
</view> | |||
<uv-grid :col="4" :border="false"> | |||
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/address')"> | |||
<image class="image" src="/static/image/center/7.png" mode=""></image> | |||
<text class="grid-text">地址管理</text> | |||
</uv-grid-item> | |||
<uv-grid-item @click="$utils.redirectTo('/index/order')"> | |||
<image class="image" src="/static/image/center/8.png" mode=""></image> | |||
<text class="grid-text">订单管理</text> | |||
</uv-grid-item> | |||
<uv-grid-item @click="$utils.navigateTo('/pages_order/order/refundsOrExchange?index='+0)"> | |||
<image class="image" src="/static/image/center/5.png" mode=""></image> | |||
<text class="grid-text">换货</text> | |||
</uv-grid-item> | |||
<uv-grid-item @click="$utils.navigateTo('/pages_order/order/refundsOrExchange?index='+1)"> | |||
<image class="image" src="/static/image/center/7.png" mode=""></image> | |||
<text class="grid-text">退货</text> | |||
</uv-grid-item> | |||
</uv-grid> | |||
</view> | |||
<view class="line grid"> | |||
<uv-grid :col="4" :border="false"> | |||
<uv-grid-item @click="contactUs"> | |||
<image class="image" src="/static/image/center/9.png" mode=""></image> | |||
<text class="grid-text">联系客服</text> | |||
</uv-grid-item> | |||
<uv-grid-item> | |||
<image class="image" src="/static/image/center/6.png" mode=""></image> | |||
<text class="grid-text">我的租赁</text> | |||
</uv-grid-item> | |||
<uv-grid-item @click="$utils.redirectTo('/index/cart')"> | |||
<image class="image" src="/static/image/center/7.png" mode=""></image> | |||
<text class="grid-text">租赁车</text> | |||
</uv-grid-item> | |||
<uv-grid-item | |||
@click="$utils.navigateTo('/pages_order/auth/loginAndRegisterAndForgetPassword?index='+2)"> | |||
<image class="image" src="/static/image/center/7.png" mode=""></image> | |||
<text class="grid-text">申请成为水洗店</text> | |||
</uv-grid-item> | |||
</uv-grid> | |||
</view> | |||
</view> | |||
<tabber select="center" /> | |||
</view> | |||
</template> | |||
<script> | |||
import tabber from '@/components/base/tabbar.vue' | |||
import { | |||
mapGetters | |||
} from 'vuex' | |||
import userShopCommission from '@/components/userShop/userShopCommission.vue' | |||
export default { | |||
components: { | |||
tabber, | |||
userShopCommission, | |||
}, | |||
computed: { | |||
...mapGetters(['userShop']), | |||
}, | |||
data() { | |||
return { | |||
} | |||
}, | |||
methods: { | |||
headBtn() { | |||
let self = this | |||
uni.showModal({ | |||
title: '演示切换角色之后的效果', | |||
success(res) { | |||
if (res.confirm) { | |||
self.$store.state.shop = !self.$store.state.shop | |||
} | |||
} | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page { | |||
.warp { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
height: 100%; | |||
} | |||
.rect { | |||
width: 600rpx; | |||
height: 300rpx; | |||
background-color: #fff; | |||
border-radius: 20rpx; | |||
overflow: hidden; | |||
.title { | |||
padding: 10rpx 0 0 15rpx; | |||
background-color: #fd5100; | |||
color: #FFF; | |||
text-align: left; | |||
width: 100%; | |||
height: 18%; | |||
font-size: 36rpx; | |||
} | |||
.center { | |||
height: 40%; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
font-size: 36rpx; | |||
} | |||
.bottom { | |||
display: flex; | |||
justify-content: center; | |||
gap: 50rpx; | |||
} | |||
} | |||
} | |||
image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.head { | |||
display: flex; | |||
background-color: #fff; | |||
padding: 40rpx 20rpx; | |||
align-items: center; | |||
position: relative; | |||
.headImage { | |||
width: 120rpx; | |||
height: 120rpx; | |||
background-image: url(/static/image/center/3.png); | |||
background-size: 100% 100%; | |||
overflow: hidden; | |||
border-radius: 50%; | |||
margin-right: 40rpx; | |||
} | |||
.info { | |||
font-size: 28rpx; | |||
.vip { | |||
background-color: #FCCC92; | |||
color: #FA6239; | |||
width: 100rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
height: 40rpx; | |||
border-radius: 20rpx; | |||
margin-top: 20rpx; | |||
} | |||
.name { | |||
font-size: 32rpx; | |||
} | |||
.tips { | |||
font-size: 26rpx; | |||
color: #ABABAB; | |||
} | |||
} | |||
.headBtn { | |||
margin-left: auto; | |||
padding: 15rpx 20rpx; | |||
background-color: $uni-color; | |||
color: #fff; | |||
border-radius: 20rpx; | |||
margin-top: 50rpx; | |||
} | |||
.setting { | |||
position: absolute; | |||
right: 50rpx; | |||
top: 50rpx; | |||
} | |||
} | |||
.userShop { | |||
.userList { | |||
.title { | |||
font-size: 32rpx; | |||
font-weight: 900; | |||
padding: 20rpx; | |||
} | |||
.list { | |||
display: flex; | |||
flex-wrap: wrap; | |||
.item { | |||
width: 270rpx; | |||
margin: 20rpx; | |||
display: flex; | |||
flex-direction: column; | |||
padding: 40rpx 30rpx; | |||
background-color: #fff; | |||
border-radius: 30rpx; | |||
line-height: 60rpx; | |||
.name {} | |||
.num { | |||
color: $uni-color; | |||
font-weight: 600; | |||
font-size: 28rpx; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
.user { | |||
.line { | |||
display: flex; | |||
background-color: #fff; | |||
margin-top: 20rpx; | |||
padding: 20rpx 0; | |||
.item { | |||
flex: 1; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
padding: 20rpx 0; | |||
&:nth-child(1) { | |||
border-right: 1px solid #00000013; | |||
} | |||
.image { | |||
width: 100rpx; | |||
height: 70rpx; | |||
margin-right: 20rpx; | |||
} | |||
} | |||
} | |||
.grid { | |||
flex-direction: column; | |||
font-size: 26rpx; | |||
padding: 20rpx; | |||
.title { | |||
margin-bottom: 30rpx; | |||
font-size: 28rpx; | |||
font-weight: 600; | |||
} | |||
.image { | |||
width: 70rpx; | |||
height: 70rpx; | |||
margin-bottom: 10rpx; | |||
} | |||
text { | |||
text-align: center; | |||
width: 120rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,412 +1,305 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar/> | |||
<view class="search"> | |||
<view @click="showSelectArea" class="left-area"> | |||
<image src="@/static/image/home/address-icon.png"></image> | |||
<view class="area">{{ area }}</view> | |||
<image src="@/static/image/home/arrow-icon.png" mode="aspectFit"></image> | |||
<view class="parting-line">|</view> | |||
</view> | |||
<view class="center-area"> | |||
<image | |||
style="margin-right: 20rpx;" | |||
src="@/static/image/home/search-icon.png"></image> | |||
<input v-model="queryParams.title" | |||
placeholder="桌布租赁" /> | |||
</view> | |||
<!-- <view class="right-area"> | |||
<view @click="searchAddress" class="search-button"> | |||
搜索 | |||
</view> | |||
</view> --> | |||
</view> | |||
<view class="swipe"> | |||
<uv-swiper | |||
:list="bannerList" | |||
indicator | |||
height="320rpx" | |||
keyName="url"></uv-swiper> | |||
<view class="page__view"> | |||
<!-- todo: 轮播图 --> | |||
<view class="bg"> | |||
<image class="img" src="@/static/image/bg.png" mode="widthFix"></image> | |||
</view> | |||
<!-- 水洗店 --> | |||
<view class="userShop" | |||
v-if="userShop"> | |||
<view class="list"> | |||
<view class="item" | |||
v-for="(item, index) in 4" | |||
:key="index"> | |||
<view class=""> | |||
<view class=""> | |||
我的客户 | |||
</view> | |||
<view class="num"> | |||
{{ 30 }} | |||
</view> | |||
</view> | |||
<view class=""> | |||
<image :src="`/static/image/home/${index}.png`" mode=""></image> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 酒店 --> | |||
<view class="user" | |||
v-else> | |||
<uv-notice-bar | |||
fontSize="28rpx" | |||
:text="text"></uv-notice-bar> | |||
<view class="main"> | |||
<view class="shop"> | |||
<image | |||
class="image" | |||
src="https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg" | |||
mode=""></image> | |||
<view class="shopInfo"> | |||
<view class="title"> | |||
HOUS水洗店 | |||
</view> | |||
<view class="tags"> | |||
<view class="tag"> | |||
桌布水洗 | |||
</view> | |||
<view class="tag"> | |||
桌布租赁 | |||
</view> | |||
</view> | |||
<view class="time"> | |||
9:00-18:00 | |||
</view> | |||
<view class="address"> | |||
长沙市天心区桂花坪街道231号 | |||
</view> | |||
</view> | |||
<view class="btns"> | |||
<view class="btn" | |||
@click="$utils.navigateTo('/pages_order/auth/wxUserInfo')"> | |||
我要水洗 | |||
</view> | |||
</view> | |||
<view class="tips"> | |||
关联门店:主信门店 | |||
<!-- 搜索栏 --> | |||
<view :class="['flex', 'search', searchStyle.class]"> | |||
<uv-search | |||
v-model="keyword" | |||
placeholder="输入关键词搜索" | |||
:color="searchStyle.color" | |||
bgColor="transparent" | |||
:showAction="searchStyle.showAction" | |||
@custom="search" | |||
@search="search" | |||
@focus="isFocusSearch = true" | |||
@blur="isFocusSearch = false" | |||
> | |||
<template #prefix> | |||
<image class="search-icon" :src="searchStyle.icon" mode="widthFix"></image> | |||
</template> | |||
</uv-search> | |||
<view class="border"> | |||
<view class="border-left"></view> | |||
</view> | |||
</view> | |||
<view class="section"> | |||
<categoryView></categoryView> | |||
</view> | |||
<view class="section"> | |||
<recommendView></recommendView> | |||
</view> | |||
<view class="productList"> | |||
<productList/> | |||
<view class="section"> | |||
<swiperView></swiperView> | |||
</view> | |||
<view class="section"> | |||
<pictureLiveView></pictureLiveView> | |||
</view> | |||
<view class="section reason"> | |||
<image class="img" src="@/static/image/temp-19.png" mode="widthFix"></image> | |||
</view> | |||
<view class="section"> | |||
<productView :list="list" @categoryChange="onCategoryChange"></productView> | |||
</view> | |||
</view> | |||
<!-- <selectArea ref="selectArea" @close="closeAreaPro" @select="selectArea"></selectArea> --> | |||
<PrivacyAgreementPoup/> | |||
<tabber select="home"/> | |||
<tabber select="home" /> | |||
</view> | |||
</template> | |||
<script> | |||
import PrivacyAgreementPoup from '@/components/config/PrivacyAgreementPoup.vue' | |||
import Position from '@/utils/position.js' | |||
import mixinsList from '@/mixins/list.js' | |||
import tabber from '@/components/base/tabbar.vue' | |||
import productList from '@/components/user/productList.vue' | |||
import { mapGetters } from 'vuex' | |||
// import selectArea from '../../components/selectArea.vue'; | |||
import categoryView from '@/components/home/categoryView.vue' | |||
import recommendView from '@/components/home/recommendView.vue' | |||
import swiperView from '@/components/home/swiperView.vue' | |||
import pictureLiveView from '@/components/home/pictureLiveView.vue' | |||
import productView from '@/components/home/productView.vue' | |||
export default { | |||
components : { | |||
tabber, | |||
productList, | |||
PrivacyAgreementPoup, | |||
mixins: [mixinsList], | |||
components: { | |||
tabber, | |||
categoryView, | |||
recommendView, | |||
swiperView, | |||
pictureLiveView, | |||
productView, | |||
}, | |||
data() { | |||
return { | |||
area: '长沙', | |||
text : '长沙市刘师傅在服务过程中客户投诉“服务过程中有不文明的行为”.....', | |||
queryParams: { | |||
pageNo: 1, | |||
pageSize: 10, | |||
title: '' | |||
}, | |||
bannerList: [ | |||
{ | |||
url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png', | |||
}, | |||
{ | |||
url: 'https://cdn.uviewui.com/uview/swiper/swiper2.png', | |||
}, | |||
{ | |||
url: 'https://cdn.uviewui.com/uview/swiper/swiper3.png', | |||
}, | |||
], | |||
productList: [], | |||
keyword: '', | |||
isFocusSearch: false, | |||
// todo | |||
mixinsListApi: '', | |||
} | |||
}, | |||
computed : { | |||
...mapGetters(['userShop']), | |||
onLoad() { | |||
// let id = '1948353988875821058' | |||
// uni.navigateTo({ | |||
// url: `/pages_order/thesis/createPdf?id=${id}` | |||
// }) | |||
// return | |||
}, | |||
methods: { | |||
//显示选择地区 | |||
showSelectArea() { | |||
// this.$refs.selectArea.open() | |||
computed: { | |||
searchStyle() { | |||
let focusStyle = { | |||
class: 'focus', | |||
color: '#181818', | |||
icon: '/static/image/icon-search-dark.png', | |||
showAction: true, | |||
} | |||
let blurStyle = { | |||
class: 'blur', | |||
color: '#FFFFFF', | |||
icon: '/static/image/icon-search-light.png', | |||
showAction: false, | |||
} | |||
return this.isFocusSearch ? focusStyle : blurStyle | |||
}, | |||
//搜索地址 | |||
searchAddress() { | |||
Position.getLocation(res => { | |||
Position.selectAddress(res.longitude, res.latitude, success => { | |||
let address = this.extractProvinceAndCity(success) | |||
this.queryParams.title = address.city | |||
}) | |||
}, | |||
methods: { | |||
search() { | |||
console.log('search', this.keyword) | |||
uni.navigateTo({ | |||
url: '/pages_order/product/search?search=' + this.keyword | |||
}) | |||
// this.keyword = '' | |||
}, | |||
//提取用户选择的地址信息(省市县信息) | |||
extractProvinceAndCity(res) { //提取用户选择的地址信息(省市) | |||
if (!res.address && res.name) { //用户直接选择城市的逻辑 | |||
return { | |||
province: '', | |||
city: res.name | |||
}; | |||
} | |||
if (res.address) { //用户选择了详细地址,要从详细地址中提取出省市县信息 | |||
// 使用正则表达式匹配省市县 | |||
const regex = /(?<province>[\u4e00-\u9fa5]+?省)(?<city>[\u4e00-\u9fa5]+?(?:市|自治州|盟|地区))/; | |||
const match = res.address.match(regex); | |||
if (match) { // 如果匹配成功,则返回省和市的信息 | |||
return { | |||
province: match.groups.province, | |||
city: match.groups.city | |||
}; | |||
} | |||
} | |||
return { //用户没选择地址就点了确定按钮 | |||
province: '', | |||
city: '' | |||
} | |||
// todo: delete | |||
getData() { | |||
this.list = [ | |||
{ | |||
id: '001', | |||
image: '/static/image/temp-20.png', | |||
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '002', | |||
image: '/static/image/temp-21.png', | |||
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '003', | |||
image: '/static/image/temp-22.png', | |||
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '004', | |||
image: '/static/image/temp-23.png', | |||
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
] | |||
this.total = this.list.length | |||
}, | |||
} | |||
onCategoryChange(e) { | |||
const { classId } = e || {} | |||
if (classId) { | |||
this.queryParams.classId = classId | |||
} else { | |||
delete this.queryParams.classId | |||
} | |||
this.queryParams.pageNo = 1 | |||
this.queryParams.pageSize = 10 | |||
this.getData() | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.bg { | |||
width: 100%; | |||
height: auto; | |||
border-bottom-left-radius: 40rpx; | |||
border-bottom-right-radius: 40rpx; | |||
font-size: 0; | |||
overflow: hidden; | |||
.img { | |||
width: 100%; | |||
height: auto; | |||
} | |||
} | |||
.main { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
padding: 100rpx 32rpx calc(120rpx + env(safe-area-inset-bottom) + 100rpx) 32rpx; | |||
box-sizing: border-box; | |||
} | |||
.search { | |||
height: 82rpx; | |||
width: 710rpx; | |||
background: #FFFFFF; | |||
margin: 20rpx auto; | |||
border-radius: 41rpx; | |||
box-sizing: border-box; | |||
padding: 0 15rpx; | |||
display: flex; | |||
align-items: center; | |||
// justify-content: space-between; | |||
.left-area, | |||
.center-area { | |||
display: flex; | |||
align-items: center; | |||
$w: 474rpx; | |||
$h: 64rpx; | |||
$radius: 32rpx; | |||
$borderWidth: 4rpx; | |||
width: $w; | |||
height: $h; | |||
position: relative; | |||
border-radius: $radius; | |||
&-icon { | |||
margin: 0 13rpx 0 26rpx; | |||
width: 30rpx; | |||
height: auto; | |||
} | |||
.left-area { | |||
max-width: 160rpx; | |||
image { | |||
flex-shrink: 0; | |||
width: 26rpx; | |||
height: 26rpx; | |||
/deep/ .uv-search__content { | |||
padding: 12rpx 0; | |||
border: 4rpx solid transparent; | |||
} | |||
&.blur { | |||
background: #FFFFFF66; | |||
&:before, | |||
&:after { | |||
width: calc(#{$w} - #{$radius}); | |||
height: $borderWidth; | |||
position: absolute; | |||
left: $radius; | |||
content: ' '; | |||
background: linear-gradient(to right, #FFFFFF, #FFFFFF00); | |||
} | |||
.area { | |||
font-size: 24rpx; | |||
display: -webkit-box; | |||
-webkit-line-clamp: 2; | |||
/* 限制显示两行 */ | |||
-webkit-box-orient: vertical; | |||
overflow: hidden; | |||
text-overflow: ellipsis; | |||
color: #292929; | |||
&:before { | |||
top: 0; | |||
} | |||
.parting-line { | |||
flex-shrink: 0; | |||
font-size: 26rpx; | |||
color: #ccc; | |||
margin: 0rpx 5rpx; | |||
&:after { | |||
bottom: 0; | |||
} | |||
} | |||
.center-area { | |||
display: flex; | |||
flex-wrap: nowrap; | |||
align-items: center; | |||
width: calc(100% - 290rpx); | |||
margin-left: 30rpx; | |||
image { | |||
width: 26rpx; | |||
height: 26rpx; | |||
} | |||
.van-field { | |||
background-color: transparent; | |||
box-sizing: border-box; | |||
height: 82rpx; | |||
line-height: 82rpx; | |||
width: calc(100% - 30rpx); | |||
padding: 0rpx 10rpx 0rpx 0rpx; | |||
input { | |||
height: 82rpx; | |||
font-size: 60rpx; | |||
.border { | |||
width: $radius; | |||
overflow: hidden; | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
&-left { | |||
width: calc(#{$radius} * 2 - #{$borderWidth} * 2); | |||
height: calc(#{$h} - #{$borderWidth} * 2); | |||
border: $borderWidth solid #FFFFFF; | |||
border-radius: $radius; | |||
} | |||
} | |||
} | |||
.right-area { | |||
.search-button { | |||
background: #60BDA2; | |||
height: 60rpx; | |||
width: 130rpx; | |||
&.focus { | |||
/deep/ .uv-search__content { | |||
background: #FFFFFF !important; | |||
border-color: #CFEFFF !important; | |||
} | |||
/deep/ .uv-search__action { | |||
padding: 19rpx 24rpx; | |||
font-size: 26rpx; | |||
border-radius: 35rpx; | |||
color: white; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
font-weight: 500; | |||
line-height: 1; | |||
color: #FFFFFF; | |||
background: #00A9FF; | |||
border-radius: 32rpx; | |||
} | |||
} | |||
} | |||
.swipe{ | |||
overflow: hidden; | |||
border-radius: 20rpx; | |||
margin: 20rpx; | |||
} | |||
.page{ | |||
& /deep/ .uv-icon__icon{ | |||
font-size: 30rpx !important; | |||
.section { | |||
& + & { | |||
margin-top: 32rpx; | |||
} | |||
} | |||
.reason { | |||
width: 100%; | |||
font-size: 0; | |||
border-radius: 32rpx; | |||
overflow: hidden; | |||
// 水洗店 | |||
.userShop{ | |||
.list{ | |||
display: flex; | |||
flex-wrap: wrap; | |||
.item{ | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
width: 330rpx; | |||
margin: 20rpx; | |||
padding: 30rpx 0; | |||
color: #FFFFFF; | |||
line-height: 50rpx; | |||
border-radius: 20rpx; | |||
font-size: 28rpx; | |||
.num{ | |||
font-size: 38rpx; | |||
font-weight: 900; | |||
} | |||
image{ | |||
width: 110rpx; | |||
height: 110rpx; | |||
margin-left: 20rpx; | |||
} | |||
&:nth-child(1){ | |||
background: #F07A77; | |||
} | |||
&:nth-child(2){ | |||
background: #F48B4E; | |||
} | |||
&:nth-child(3){ | |||
background: #6487E1; | |||
} | |||
&:nth-child(4){ | |||
background: #61B7E6; | |||
} | |||
} | |||
} | |||
} | |||
// 酒店 | |||
.user{ | |||
padding: 20rpx; | |||
.shop{ | |||
position: relative; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
background-color: #fff; | |||
margin-top: 20rpx; | |||
border-radius: 20rpx; | |||
padding: 20rpx; | |||
overflow: hidden; | |||
.image{ | |||
width: 180rpx; | |||
height: 180rpx; | |||
margin-right: 20rpx; | |||
border-radius: 20rpx; | |||
} | |||
.shopInfo{ | |||
font-size: 22rpx; | |||
.title{ | |||
font-size: 30rpx; | |||
} | |||
.tags{ | |||
display: flex; | |||
.tag{ | |||
padding: 4rpx 6rpx; | |||
border: 1rpx solid #FFAC6E; | |||
color: #FFAC6E; | |||
margin-right: 10rpx; | |||
margin-top: 10rpx; | |||
font-size: 18rpx; | |||
} | |||
} | |||
.time{ | |||
margin-top: 10rpx; | |||
display: flex; | |||
} | |||
.address{ | |||
margin-top: 10rpx; | |||
display: flex; | |||
} | |||
} | |||
.btns{ | |||
margin-left: auto; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
.btn{ | |||
background-color: $uni-color; | |||
color: #fff; | |||
box-shadow: 0 0 5rpx 5rpx #FFAC6E; | |||
padding: 10rpx 20rpx; | |||
flex-shrink: 0; | |||
border-radius: 35rpx; | |||
} | |||
} | |||
.tips{ | |||
position: absolute; | |||
top: 0; | |||
right: 0; | |||
font-size: 24rpx; | |||
color: #FFAC6E; | |||
background-color: #FEF5EE; | |||
padding: 10rpx 20rpx; | |||
border-radius: 10rpx; | |||
} | |||
} | |||
.img { | |||
width: 100%; | |||
height: auto; | |||
} | |||
} | |||
</style> | |||
</style> |
@ -1,263 +0,0 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar | |||
title="订单中心" | |||
/> | |||
<uv-tabs :list="tabs" | |||
:activeStyle="{color : '#FD5100', fontWeight : 600}" | |||
lineColor="#FD5100" | |||
lineHeight="8rpx" | |||
lineWidth="50rpx" | |||
@click="clickTabs"></uv-tabs> | |||
<view v-if="orderList.length > 0" class="list"> | |||
<view class="item" | |||
v-for="(item, index) in orderList.records" | |||
@click="toOrderDetail(item.id)" | |||
:key="index"> | |||
<view class="top"> | |||
<view class="service"> | |||
<text>{{item.projectId_dictText}}</text> | |||
<text>{{item.type_dictText}}</text> | |||
</view> | |||
<view class="status"> | |||
<text> {{item.state_dictText}}</text> | |||
</view> | |||
</view> | |||
<view class="content"> | |||
<view class="left"> | |||
<image mode="aspectFill" :src="item.image"></image> | |||
</view> | |||
<view class="right"> | |||
<view class="text-hidden-1"> | |||
客户姓名:{{item.name}} | |||
</view> | |||
<view class="text-hidden-1"> | |||
产品规格:{{item.unit}} | |||
</view> | |||
<view class="text-hidden-1"> | |||
租赁地址:{{item.address}} | |||
</view> | |||
<!-- <view class="text-hidden-1"> | |||
总计时间:{{item.useTime}}分钟 | |||
</view> --> | |||
</view> | |||
</view> | |||
<view class="bottom"> | |||
<view class="price"> | |||
总价格:<text class="num">{{item.money}}元</text> | |||
</view> | |||
<view class="b1"> | |||
查看物流 | |||
</view> | |||
<!-- <view @click.stop="toPayOrder(item)" class="b2" v-if="item.state == 0"> | |||
立即付款 | |||
</view> | |||
<view class="b1" @click.stop="moreOrder(item.projectId,toPlaceorder)" v-if="item.state == 3"> | |||
再来一单 | |||
</view> | |||
<view class="b2" @click.stop="toEvaluate(item.id,item.projectId,item.technicianId)" v-if="item.state == 3"> | |||
立即评价 | |||
</view> | |||
<view class="b2" @click.stop="moreOrder(item.projectId,toPlaceorder)" v-if="item.state == 4"> | |||
再来一单 | |||
</view> --> | |||
</view> | |||
</view> | |||
</view> | |||
<tabber select="order"/> | |||
</view> | |||
</template> | |||
<script> | |||
import tabber from '@/components/base/tabbar.vue' | |||
import { mapGetters } from 'vuex' | |||
export default { | |||
components : { | |||
tabber, | |||
}, | |||
computed : { | |||
...mapGetters(['userShop']), | |||
}, | |||
data() { | |||
return { | |||
tabs: [{ | |||
name: '全部' | |||
}, | |||
{ | |||
name: '租赁押金' | |||
}, | |||
{ | |||
name: '水洗租赁' | |||
}, | |||
{ | |||
name: '破损换货' | |||
}, | |||
{ | |||
name: '退货退款' | |||
} | |||
], | |||
queryParams: { | |||
pageNo: 1, | |||
pageSize: 10 | |||
}, | |||
// orderList: [ | |||
// { | |||
// money : 99.99, | |||
// address : '广东省广州市越秀区城南故事C3栋2802', | |||
// name : '李**', | |||
// phone : '150*****091', | |||
// unit : '120*40*75【桌子尺寸】', | |||
// image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
// state_dictText : '已完成', | |||
// } | |||
// ], //订单列表数据 | |||
orderList : { | |||
records : [], | |||
total : 0, | |||
}, | |||
state : -1, | |||
} | |||
}, | |||
onShow() { | |||
this.orderPage() | |||
}, | |||
//滚动到屏幕底部 | |||
onReachBottom() { | |||
if(this.queryParams.pageSize < this.orderList.total){ | |||
this.queryParams.pageSize += 10 | |||
this.orderPage() | |||
} | |||
}, | |||
methods: { | |||
orderPage(){ | |||
let queryParams = { | |||
...this.queryParams, | |||
} | |||
if(this.state != -1){ | |||
queryParams.state = this.state | |||
} | |||
this.$api('orderPage', queryParams, res => { | |||
if(res.code == 200){ | |||
this.orderList = res.result | |||
} | |||
}) | |||
}, | |||
//点击tab栏 | |||
clickTabs(index) { | |||
if (index == 0) { | |||
this.state = -1; | |||
} else { | |||
this.state = index - 1; | |||
} | |||
this.queryParams.pageSize = 10 | |||
this.orderPage() | |||
}, | |||
//跳转订单详情页面 | |||
toOrderDetail(id) { | |||
uni.navigateTo({ | |||
url: '/pages_order/order/orderDetail?id=' + id | |||
}) | |||
}, | |||
getOrderList(){ | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page{ | |||
} | |||
.list { | |||
.item { | |||
width: calc(100% - 40rpx); | |||
background-color: #fff; | |||
margin: 20rpx; | |||
box-sizing: border-box; | |||
border-radius: 16rpx; | |||
padding: 30rpx; | |||
.top { | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
font-size: 30rpx; | |||
.service {} | |||
.status { | |||
font-size: 26rpx; | |||
font-weight: 600; | |||
} | |||
} | |||
.content { | |||
display: flex; | |||
margin: 10rpx 0; | |||
.left { | |||
width: 150rpx; | |||
height: 150rpx; | |||
border-radius: 10rpx; | |||
image { | |||
width: 150rpx; | |||
height: 150rpx; | |||
border-radius: 10rpx; | |||
} | |||
} | |||
.right { | |||
width: calc(100% - 160rpx); | |||
color: #777; | |||
font-size: 24rpx; | |||
padding-left: 20rpx; | |||
line-height: 40rpx; | |||
background-color: #F8F8F8; | |||
} | |||
} | |||
.bottom { | |||
display: flex; | |||
justify-content: space-between; | |||
font-size: 25rpx; | |||
.price { | |||
font-weight: 900; | |||
text { | |||
color: #ff780099; | |||
font-size: 30rpx; | |||
} | |||
} | |||
.b1 { | |||
border: 1px solid #777; | |||
color: #777; | |||
box-sizing: border-box; | |||
} | |||
.b2 { | |||
background: linear-gradient(178deg, #4FD3BC, #60C285); | |||
color: #fff; | |||
} | |||
view { | |||
margin: 12rpx; | |||
border-radius: 28rpx; | |||
padding: 8rpx 28rpx; | |||
margin-bottom: 0; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -1,244 +0,0 @@ | |||
<template> | |||
<scroll-view | |||
scroll-y="true" | |||
:style="{height: height}" | |||
@scrolltolower="moreAddress"> | |||
<uv-radio-group v-model="selectAddress" | |||
@change="editDefault" | |||
v-if="addressList.length > 0"> | |||
<view v-for="item in addressList" :key="item.id" class="address-item"> | |||
<view class="address-item-top" | |||
@click="select(item)"> | |||
<view class="img-box"> | |||
<image src="../../static/address/icon.png" mode="aspectFill"></image> | |||
</view> | |||
<view class="address-info"> | |||
<view class="user-info"> | |||
<text class="user-name">{{ item.name }}</text> | |||
<text class="user-phone">{{ item.phone }}</text> | |||
<text v-if="item.defaultFlag == 1" class="is-default">默认</text> | |||
</view> | |||
<view class="address-detail"> | |||
{{ item.address + " " + item.addressDetail }} | |||
</view> | |||
</view> | |||
</view> | |||
<view class="controls" | |||
v-if="controls"> | |||
<view class="default-checkbox"> | |||
<uv-radio | |||
:name="item.id" | |||
label-disabled | |||
size="30rpx" | |||
icon-size="30rpx"> | |||
默认地址 | |||
</uv-radio> | |||
</view> | |||
<view class="edit-btn"> | |||
<uv-icon name="edit-pen"></uv-icon> | |||
<text @click="editAddress(item)" class="control-title">编辑</text> | |||
</view> | |||
<view class="del-btn"> | |||
<uv-icon name="trash"></uv-icon> | |||
<text class="control-title" @click="deleteAddress(item.id)">删除</text> | |||
</view> | |||
</view> | |||
</view> | |||
</uv-radio-group> | |||
<view | |||
style="padding: 100rpx 0;" | |||
v-else> | |||
<uv-empty | |||
mode="history" | |||
textSize="28rpx" | |||
iconSize="100rpx"/> | |||
</view> | |||
</scroll-view> | |||
</template> | |||
<script> | |||
export default { | |||
props : { | |||
controls : { | |||
default : false, | |||
type : Boolean, | |||
}, | |||
height : { | |||
default : 'calc(90vh - 180rpx)' | |||
} | |||
}, | |||
data() { | |||
return { | |||
selectAddress : 0, | |||
queryParams: { | |||
pageNo: 1, | |||
pageSize: 10, | |||
}, | |||
addressList: [], | |||
total : 0, | |||
} | |||
}, | |||
methods: { | |||
//获取地址列表 | |||
getAddressList() { | |||
return new Promise((success, fail) => { | |||
this.$api('addressPage', this.queryParams, res => { | |||
if (res.code == 200) { | |||
this.addressList = res.result.records || []; | |||
this.total = res.result.total || 0; | |||
res.result.records.forEach(n => { //筛选默认地址 | |||
if (n.defaultFlag == 1) { | |||
this.selectAddress = n.id | |||
} | |||
}) | |||
success(res.result) | |||
} | |||
}) | |||
}) | |||
}, | |||
// 加载更多 | |||
moreAddress(){ | |||
if(this.queryParams.pageSize > this.total){ | |||
return | |||
} | |||
this.queryParams.pageSize += 10 | |||
this.getAddressList() | |||
}, | |||
// 删除地址 | |||
deleteAddress(e){ | |||
this.$emit('deleteAddress', e) | |||
}, | |||
// 修改地址 | |||
editAddress(e){ | |||
this.$emit('editAddress', e) | |||
}, | |||
// 切换默认地址 | |||
editDefault(e){ | |||
this.$emit('editDefault', e) | |||
}, | |||
// 选择了地址 | |||
select(e){ | |||
this.$emit('select', e) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.address-item { | |||
background: white; | |||
border-radius: 20rpx; | |||
overflow: hidden; | |||
margin-bottom: 20rpx; | |||
padding: 15rpx 15rpx 0rpx 15rpx; | |||
width: 680rpx; | |||
.address-item-top { | |||
border-bottom: 1px dashed #D3D1D1; | |||
display: flex; | |||
align-items: center; | |||
padding: 0rpx 0rpx 15rpx 0rpx; | |||
.img-box { | |||
width: 120rpx; | |||
height: 120rpx; | |||
image { | |||
width: 75%; | |||
height: 75%; | |||
display: block; | |||
margin: 12.5% auto; | |||
} | |||
} | |||
.address-info { | |||
width: calc(100% - 120rpx); | |||
height: 100%; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-between; | |||
.user-info { | |||
display: flex; | |||
align-items: center; | |||
text { | |||
display: block; | |||
line-height: 40rpx; | |||
margin-right: 20rpx; | |||
} | |||
.user-name, | |||
.user-phone { | |||
font-size: 30rpx; | |||
} | |||
.is-default { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
background: #FEB773; | |||
color: white; | |||
width: 80rpx; | |||
height: 35rpx; | |||
border-radius: 20rpx; | |||
font-size: 22rpx; | |||
} | |||
} | |||
.address-detail { | |||
color: #4a4a4a; | |||
font-size: 26rpx; | |||
overflow: hidden; | |||
display: -webkit-box; | |||
-webkit-box-orient: vertical; | |||
-webkit-line-clamp: 2; | |||
text-overflow: ellipsis; | |||
} | |||
} | |||
} | |||
.controls { | |||
display: flex; | |||
align-items: center; | |||
justify-content: space-between; | |||
align-items: center; | |||
font-size: 26rpx; | |||
padding: 15rpx 15rpx 25rpx 15rpx; | |||
.default-checkbox { | |||
display: flex; | |||
text { | |||
margin-left: 8rpx; | |||
} | |||
} | |||
.control-title { | |||
height: 30rpx; | |||
line-height: 30rpx; | |||
color: #666666; | |||
} | |||
view { | |||
display: flex; | |||
align-items: center; | |||
} | |||
image { | |||
width: 23rpx; | |||
height: 23rpx; | |||
vertical-align: middle; | |||
margin-right: 8rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,220 +0,0 @@ | |||
<template> | |||
<uv-popup round="40rpx" ref="addressPopup" :customStyle="{ height: 'auto' , width : '100%' , padding : '20rpx'}"> | |||
<view class="redact-address"> | |||
<view class="redact-address-title">{{title}}</view> | |||
<uv-form label-width="210rpx" :model="addressDetail" ref="form"> | |||
<uv-form-item label="联系人" prop="name"> | |||
<uv-input v-model="addressDetail.name" placeholder="请输入联系人姓名" border="none"> | |||
</uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="手机号" prop="phone"> | |||
<uv-input v-model="addressDetail.phone" placeholder="请输入手机号" border="none"> | |||
</uv-input> | |||
</uv-form-item> | |||
<uv-form-item label="所在地区" prop="address"> | |||
<uv-input v-model="addressDetail.address" placeholder="请选择所在地区" border="none"> | |||
</uv-input> | |||
<template #right> | |||
<view style="padding-right: 40rpx;color: #FBAB32;" @click.stop="selectAddr"> | |||
<image src="../../static/address/selectIcon.png" mode="aspectFit"></image>定位 | |||
</view> | |||
</template> | |||
</uv-form-item> | |||
<uv-form-item label="详细地址" prop="addressDetail"> | |||
<uv-input v-model="addressDetail.addressDetail" placeholder="请输入详细地址" border="none"> | |||
</uv-input> | |||
</uv-form-item> | |||
</uv-form> | |||
<view @click="onSubmit" class="save">{{ addressDetail.id ? '修改地址' : '新增地址'}}</view> | |||
</view> | |||
</uv-popup> | |||
</template> | |||
<script> | |||
import Position from '@/utils/position.js' | |||
export default { | |||
data() { | |||
return { | |||
addressDetail: {} | |||
} | |||
}, | |||
props: { | |||
title: { | |||
type: String, | |||
default: '新增地址' | |||
} | |||
}, | |||
methods: { | |||
open(addressDetail) { | |||
this.addressDetail = addressDetail | |||
this.$refs.addressPopup.open('bottom') | |||
}, | |||
close(){ | |||
this.$refs.addressPopup.close() | |||
}, | |||
//新增和修改地址 | |||
onSubmit() { | |||
let isOk = this.parameterVerification(this.addressDetail) | |||
if (isOk && !isOk.auth) { | |||
return uni.showToast({ | |||
icon: 'none', | |||
title: isOk.title, | |||
'zIndex': 10000 | |||
}) | |||
} | |||
this.$emit('saveOrUpdate', this.addressDetail) | |||
}, | |||
//验证用户参数合法性 | |||
parameterVerification(addressDetaila) { | |||
let { | |||
name, | |||
phone, | |||
address, | |||
addressDetail | |||
} = addressDetaila | |||
if (name.trim() == '') { | |||
return { | |||
title: '请填写联系人', | |||
auth: false | |||
} | |||
} else if (phone.trim() == '') { | |||
return { | |||
title: '请填写手机号', | |||
auth: false | |||
} | |||
} else if (address.trim() == '') { | |||
return { | |||
title: '请填写所在地区', | |||
auth: false | |||
} | |||
} else if (addressDetail.trim() == '') { | |||
return { | |||
title: '请填写详细地址', | |||
auth: false | |||
} | |||
} else if (phone.trim() != '') { | |||
if (!this.$utils.verificationPhone(phone)) { | |||
return { | |||
title: '手机号格式不合法', | |||
auth: false | |||
} | |||
} | |||
} | |||
return { | |||
title: '验证通过', | |||
auth: true | |||
} | |||
}, | |||
//地图上选择地址 | |||
selectAddr() { | |||
Position.getLocation(res => { | |||
Position.selectAddress(res.longitude, res.latitude, success => { | |||
this.setAddress(success) | |||
}) | |||
}) | |||
}, | |||
//提取用户选择的地址信息复制给表单数据 | |||
setAddress(res) { | |||
//经纬度信息 | |||
this.addressDetail.latitude = res.latitude | |||
this.addressDetail.longitude = res.longitude | |||
if (!res.address && res.name) { //用户直接选择城市的逻辑 | |||
return this.addressDetail.address = res.name | |||
} | |||
if (res.address || res.name) { | |||
return this.addressDetail.address = res.address + res.name | |||
} | |||
this.addressDetail.address = '' //用户啥都没选就点击勾选 | |||
}, | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.redact-address { | |||
box-sizing: border-box; | |||
.redact-address-title { | |||
height: 80rpx; | |||
line-height: 80rpx; | |||
font-size: 30rpx; | |||
color: #333333; | |||
font-weight: 600; | |||
} | |||
.save { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
width: 90%; | |||
height: 80rpx; | |||
border-radius: 40rpx; | |||
color: white; | |||
font-size: 28rpx; | |||
margin: 0rpx auto; | |||
background: $uni-color; | |||
margin-top: 150rpx; | |||
} | |||
image { | |||
width: 25rpx; | |||
height: 25rpx; | |||
} | |||
//修改组件默认样式 | |||
.uv-form { | |||
padding: 30rpx 0rpx; | |||
} | |||
&::v-deep .uv-cell { | |||
padding: 0rpx 0rpx; | |||
font-size: 26rpx; | |||
&::after { | |||
border: none !important; | |||
} | |||
.uv-field__label { | |||
display: flex; | |||
align-items: center; | |||
height: 80rpx; | |||
} | |||
.uv-field__control, | |||
.uv-field__right-icon { | |||
height: 80rpx; | |||
font-size: 26rpx; | |||
border-bottom: 2rpx solid #cbc8c8; | |||
} | |||
.uv-field__right-icon { | |||
display: flex; | |||
align-items: center; | |||
height: 78rpx; | |||
color: #5FCC9F; | |||
} | |||
.uv-cell__value { | |||
height: 120rpx; | |||
} | |||
} | |||
&::v-deep .uv-field__error-message { | |||
color: #5AC796; | |||
font-size: 20rpx; | |||
margin-top: 10rpx; | |||
} | |||
} | |||
</style> |
@ -1,77 +0,0 @@ | |||
<template> | |||
<view class="submit"> | |||
<view class="" | |||
@click="$emit('share')"> | |||
<uv-icon | |||
size="40rpx" | |||
name="share-square"></uv-icon> | |||
<view class=""> | |||
分享 | |||
</view> | |||
</view> | |||
<view class="" | |||
@click="$utils.navigateTo('/index/cart')"> | |||
<uv-icon | |||
size="40rpx" | |||
name="shopping-cart"></uv-icon> | |||
<view class=""> | |||
购物车 | |||
</view> | |||
</view> | |||
<view class="btn" | |||
@click="$emit('submit')"> | |||
{{ submiitTitle }} | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
name:"submit", | |||
props : { | |||
submiitTitle : { | |||
default : '立即租赁', | |||
type : String, | |||
} | |||
}, | |||
data() { | |||
return { | |||
} | |||
}, | |||
methods: { | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.submit{ | |||
position: fixed; | |||
bottom: 0; | |||
left: 0; | |||
width: 100vw; | |||
background-color: #fff; | |||
height: 100rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
font-size: 24rpx; | |||
.btn{ | |||
background: $uni-color; | |||
width: 600rpx; | |||
height: 80rpx; | |||
color: #fff; | |||
border-radius: 40rpx; | |||
font-size: 28rpx; | |||
} | |||
view{ | |||
width: 100rpx; | |||
margin: 0 10rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
flex-direction: column; | |||
} | |||
} | |||
</style> |
@ -1,367 +0,0 @@ | |||
<template> | |||
<uv-popup ref="popup" | |||
:round="30" | |||
bgColor="#f7f7f7"> | |||
<view class="content"> | |||
<!-- 地址 --> | |||
<view class="address" | |||
@click="openAddress"> | |||
<image src="../../static/address/selectIcon.png" mode=""></image> | |||
<view class=""> | |||
{{ address.name }} | |||
</view> | |||
<view class=""> | |||
{{ address.addressDetail }} | |||
</view> | |||
<view class="icon"> | |||
<uv-icon | |||
size="30rpx" | |||
name="arrow-right"></uv-icon> | |||
</view> | |||
</view> | |||
<!-- 商品信息和数量 --> | |||
<view class="submit-info"> | |||
<view class="title"> | |||
桌布租赁 | |||
</view> | |||
<view class="box"> | |||
<image | |||
class="image" | |||
:src="unit.pic" | |||
mode=""></image> | |||
<view class="info"> | |||
<view class="price"> | |||
¥<text>{{ unit.depositPrice }}</text>元 | |||
</view> | |||
<view class="unit"> | |||
请选择规格 | |||
</view> | |||
<view class=""> | |||
<uv-number-box v-model="num"></uv-number-box> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 规格 --> | |||
<view class="submit-unit"> | |||
<view class="title"> | |||
规格选择 | |||
</view> | |||
<view class="list"> | |||
<view :class="{act : unitIndex == index}" | |||
v-for="(item, index) in detail.hotelGoodsSkuList" | |||
@click="selectUnit(item, index)" | |||
:key="index"> | |||
{{ item.title }} | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 费用明细 --> | |||
<view class="expense-detail"> | |||
<view class="title"> | |||
费用明细 | |||
</view> | |||
<view class="detail"> | |||
押金:¥{{ unit.depositPrice }} | |||
</view> | |||
</view> | |||
<!-- 提交按钮 --> | |||
<view class="submit-btn"> | |||
<view class="l" | |||
@click="addCart"> | |||
加入租赁车 | |||
</view> | |||
<view class="r" | |||
@click="orderPay"> | |||
{{ submiitTitle }} | |||
</view> | |||
</view> | |||
</view> | |||
<uv-popup ref="addressPopup" :round="30"> | |||
<addressList | |||
ref="addressList" | |||
height="60vh" | |||
@select="selectAddress" | |||
/> | |||
</uv-popup> | |||
</uv-popup> | |||
</template> | |||
<script> | |||
import addressList from '../address/addressList.vue' | |||
export default { | |||
components : { | |||
addressList, | |||
}, | |||
props : { | |||
submiitTitle : { | |||
default : '立即租赁', | |||
type : String, | |||
}, | |||
detail : { | |||
default : {} | |||
} | |||
}, | |||
data() { | |||
return { | |||
unitIndex : 0, | |||
address : { | |||
name : '请选择联系人', | |||
addressDetail : '', | |||
}, | |||
num : 1, | |||
unit : {}, | |||
addressTotal : 0, | |||
} | |||
}, | |||
methods: { | |||
// 打开 | |||
open(){ | |||
this.$refs.popup.open('bottom') | |||
if(!this.unit.id){ | |||
this.selectUnit(this.detail.hotelGoodsSkuList[0], 0) | |||
} | |||
// 获取地址列表 | |||
this.$refs.addressList.getAddressList().then(res => { | |||
this.addressTotal = res.total | |||
if(this.addressTotal != 0){ | |||
this.address = res.records[0] | |||
} | |||
}) | |||
}, | |||
// 关闭 | |||
close(){ | |||
this.$refs.popup.close() | |||
}, | |||
// 打开选择地址 | |||
openAddress(){ | |||
if (this.addressTotal == 0) { | |||
this.$refs.popup.close() | |||
return uni.navigateTo({ | |||
url: '/pages_order/mine/address?type=back' | |||
}) | |||
} | |||
this.$refs.addressPopup.open('bottom') | |||
}, | |||
// 选择地址 | |||
selectAddress(e){ | |||
this.address = e | |||
this.$refs.addressPopup.close() | |||
}, | |||
// 选择规格 | |||
selectUnit(item, index){ | |||
this.unit = item | |||
this.unitIndex = index | |||
}, | |||
addCart(){ | |||
this.$api('cartAdd', { | |||
id : this.detail.id, | |||
skuId : this.unit.id, | |||
}, res => { | |||
if(res.code == 200){ | |||
uni.showToast({ | |||
title: '添加成功', | |||
}); | |||
this.$refs.popup.close() | |||
} | |||
}) | |||
}, | |||
orderPay(){ | |||
let data = { | |||
id : this.detail.id,//商品id | |||
skuId : this.unit.id,//规格id | |||
addressId : this.address.id,//地址id | |||
sku : this.unit.title,//规格 | |||
num : this.num, | |||
} | |||
if(this.$utils.verificationAll(data, { | |||
skuId : '请选择规格', | |||
addressId : '请选择地址', | |||
})){ | |||
return | |||
} | |||
this.$api('orderPay', data, res => { | |||
if(res.code == 200){ | |||
uni.redirectTo({ | |||
url: '/pages/index/order' | |||
}) | |||
// uni.requestPayment({ | |||
// provider: 'wxpay', // 服务提提供商 | |||
// timeStamp: res.result.timeStamp, // 时间戳 | |||
// nonceStr: res.result.nonceStr, // 随机字符串 | |||
// package: res.result.packageValue, | |||
// signType: res.result.signType, // 签名算法 | |||
// paySign: res.result.paySign, // 签名 | |||
// success: function (res) { | |||
// console.log('支付成功',res); | |||
// uni.redirectTo({ | |||
// url: '/pages/index/order' | |||
// }) | |||
// }, | |||
// fail: function (err) { | |||
// console.log('支付失败',err); | |||
// uni.showToast({ | |||
// icon:'none', | |||
// title:"支付失败" | |||
// }) | |||
// } | |||
// }); | |||
} | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.content{ | |||
max-height: 80vh; | |||
overflow: hidden; | |||
overflow-y: auto; | |||
.address{ | |||
display: flex; | |||
padding: 20rpx; | |||
background-color: #fff; | |||
image{ | |||
width: 30rpx; | |||
height: 30rpx; | |||
margin: 20rpx; | |||
} | |||
view{ | |||
margin: 20rpx; | |||
overflow:hidden; //超出的文本隐藏 | |||
text-overflow:ellipsis; //溢出用省略号显示 | |||
white-space:nowrap; //溢出不换行 | |||
} | |||
.icon{ | |||
margin-left: auto; | |||
} | |||
} | |||
.submit-info{ | |||
background-color: #fff; | |||
padding: 30rpx; | |||
margin-top: 20rpx; | |||
.title{ | |||
font-size: 30rpx; | |||
padding: 10rpx; | |||
font-weight: 600; | |||
} | |||
.box{ | |||
display: flex; | |||
margin-top: 10rpx; | |||
.image{ | |||
width: 200rpx; | |||
height: 200rpx; | |||
border-radius: 20rpx; | |||
margin-right: 20rpx; | |||
} | |||
.info{ | |||
flex: 1; | |||
.unit{ | |||
font-size: 24rpx; | |||
padding: 10rpx 20rpx; | |||
color: #717171; | |||
display: flex; | |||
align-items: center; | |||
} | |||
.price{ | |||
color: $uni-color; | |||
font-size: 28rpx; | |||
padding: 10rpx 20rpx; | |||
text{ | |||
font-size: 36rpx; | |||
font-weight: 900; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
.submit-unit{ | |||
padding: 30rpx; | |||
background-color: #fff; | |||
.title{ | |||
font-size: 28rpx; | |||
font-weight: 600; | |||
} | |||
.list{ | |||
display: flex; | |||
flex-wrap: wrap; | |||
font-size: 22rpx; | |||
.act{ | |||
color: $uni-color; | |||
border: 1px solid $uni-color; | |||
background-color: #F9E7DE; | |||
} | |||
view{ | |||
border-radius: 15rpx; | |||
width: 320rpx; | |||
background-color: #F3F3F3; | |||
border: 1px solid #F3F3F3; | |||
margin: 10rpx; | |||
display: flex; | |||
justify-content: center; | |||
padding: 15rpx 0; | |||
} | |||
} | |||
} | |||
.expense-detail{ | |||
padding: 30rpx; | |||
background-color: #fff; | |||
font-size: 28rpx; | |||
.title{ | |||
font-weight: 600; | |||
} | |||
.detail{ | |||
background-color: #F6F6F6; | |||
color: #717171; | |||
margin: 10rpx 0; | |||
padding: 10rpx 20rpx; | |||
} | |||
} | |||
.submit-btn{ | |||
width: 600rpx; | |||
height: 80rpx; | |||
color: #fff; | |||
border-radius: 40rpx; | |||
font-size: 28rpx; | |||
margin: 20rpx auto; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
border: 1rpx solid $uni-color; | |||
overflow: hidden; | |||
.l{ | |||
flex: 1; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
color: $uni-color; | |||
} | |||
.r{ | |||
background: $uni-color; | |||
flex: 1; | |||
height: 100%; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,213 +0,0 @@ | |||
<template> | |||
<view class="address"> | |||
<navbar title="地址管理" leftClick @leftClick="leftClick" /> | |||
<view class="address-list"> | |||
<addressList | |||
controls | |||
ref="addressList" | |||
@deleteAddress="deleteAddress" | |||
@editAddress="editAddress" | |||
@editDefault="editDefault"/> | |||
</view> | |||
<redactAddress | |||
ref="addressPopup" | |||
:addressDetail="addressDetail" | |||
@saveOrUpdate="saveOrUpdate" | |||
:title="title"></redactAddress> | |||
<view class="add-btn"> | |||
<view @click="addBtn" class="btn"> | |||
新增地址 | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import redactAddress from '../components/address/redactAddress.vue' | |||
import addressList from '../components/address/addressList.vue' | |||
export default { | |||
components: { | |||
redactAddress, | |||
addressList | |||
}, | |||
data() { | |||
return { | |||
title: '新增地址', | |||
type : '', | |||
} | |||
}, | |||
onLoad(args) { | |||
this.type = args.type | |||
if(this.type == 'back'){ | |||
this.addBtn() | |||
} | |||
}, | |||
onShow() { | |||
this.getAddressList() | |||
}, | |||
methods: { | |||
//获取地址列表 | |||
getAddressList() { | |||
this.$refs.addressList.getAddressList() | |||
}, | |||
//获取地址详情 | |||
editAddress(address) { | |||
this.$refs.addressPopup.open({...address}) | |||
}, | |||
//返回个人中心 | |||
leftClick() { | |||
uni.navigateBack(-1) | |||
}, | |||
//添加和修改地址 | |||
saveOrUpdate(addressDetail) { | |||
let data = { | |||
name: addressDetail.name, | |||
phone: addressDetail.phone, | |||
address: addressDetail.address, | |||
addressDetail: addressDetail.addressDetail, | |||
defaultId: addressDetail.defaultId || '0', | |||
latitude: addressDetail.latitude, | |||
longitude: addressDetail.longitude | |||
} | |||
if (addressDetail.id) { | |||
data.id = addressDetail.id | |||
} | |||
this.$api(data.id ? 'addressEdit' : 'addressAdd', data, res => { | |||
if (res.code == 200) { | |||
this.$refs.addressPopup.close() | |||
this.getAddressList() | |||
if(this.type == 'back'){ | |||
uni.navigateBack(-1) | |||
} | |||
uni.showToast({ | |||
title: '操作成功', | |||
icon: 'none' | |||
}) | |||
} | |||
}) | |||
}, | |||
//修改默认地址 | |||
editDefault(id) { | |||
this.$api('addressDefault', { | |||
id: id, | |||
}, res => { | |||
if (res.code == 200) { | |||
this.$refs.addressPopup.close() | |||
uni.showToast({ | |||
title: '操作成功', | |||
icon: 'none' | |||
}) | |||
this.getAddressList() | |||
} | |||
}) | |||
}, | |||
//删除地址 | |||
deleteAddress(id) { | |||
let self = this | |||
uni.showModal({ | |||
title: '删除地址', | |||
content: '确认删除此地址?删除后数据不可恢复', | |||
success(e) { | |||
if(e.confirm){ | |||
self.$api('addressDelete', { | |||
id | |||
}, res => { | |||
if (res.code == 200) { | |||
uni.showToast({ | |||
title: '删除成功', | |||
icon: 'none' | |||
}) | |||
self.getAddressList() | |||
} | |||
}) | |||
} | |||
} | |||
}) | |||
}, | |||
//点击新增按钮 | |||
addBtn() { | |||
this.title = '新增地址' | |||
this.$refs.addressPopup.open({ //初始化数据 | |||
name: '', | |||
phone: '', | |||
address: '', | |||
addressDetail: '', | |||
defaultId: '', | |||
latitude: '', | |||
longitude: '' | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.address { | |||
width: 750rpx; | |||
margin: 0rpx auto; | |||
background: #F5F5F5; | |||
box-sizing: border-box; | |||
min-height: 100vh; | |||
.address-list { | |||
padding: 40rpx 20rpx 120rpx 20rpx; | |||
} | |||
.add-btn { | |||
position: fixed; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
left: 0; | |||
bottom: 0; | |||
width: 750rpx; | |||
height: 100rpx; | |||
background: white; | |||
.btn { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
width: 85%; | |||
height: 80rpx; | |||
border-radius: 40rpx; | |||
color: white; | |||
text-align: center; | |||
font-size: 28rpx; | |||
background: $uni-color; | |||
} | |||
} | |||
} | |||
@media all and (min-width: 961px) { | |||
.add-btn { | |||
left: 50% !important; | |||
transform: translateX(-50%); | |||
} | |||
} | |||
//选择位置地图样式 | |||
:deep(.uni-system-choose-location) { | |||
z-index: 99999 !important; | |||
} | |||
</style> |
@ -1,172 +0,0 @@ | |||
<template> | |||
<!-- 帮助与反馈 --> | |||
<view class="help"> | |||
<navbar title="帮助与反馈" leftClick @leftClick="$utils.navigateBack" /> | |||
<view class="help-box"> | |||
<view> | |||
<view class="help-issue"> | |||
<text>问题和意见</text> | |||
<text style="color: #BD3624;">*</text> | |||
</view> | |||
<uv-textarea v-model="form.question" :count="true" border="none" height="400" | |||
placeholder="请把发现的问题提交给我们,感谢您的参与(必填)" | |||
:text-style="{color:'#BCB7B7',fontSize:'28rpx'}" /> | |||
</view> | |||
<view> | |||
<view class="help-issue"> | |||
<text>问题截图</text> | |||
<!-- <text style="color: #BD3624;">*</text> --> | |||
</view> | |||
<view class="help-screenshot"> | |||
<uv-upload :fileList="fileList" multiple :maxCount="3" width="180rpx" | |||
height="180rpx" multiple @afterRead="afterRead" @delete="deleteImage"> | |||
<image src="../static/help/uploading.png" mode="aspectFill" | |||
style="width: 180rpx;height: 180rpx;" /> | |||
</uv-upload> | |||
</view> | |||
</view> | |||
<view> | |||
<view class="help-issue"> | |||
<text>联系方式</text> | |||
<text style="color: #BD3624;">*</text> | |||
</view> | |||
<view class="form-sheet-cell"> | |||
<view> | |||
联系姓名 | |||
</view> | |||
<input placeholder="请输入联系姓名" v-model="form.name" /> | |||
</view> | |||
<view class="form-sheet-cell"> | |||
<view> | |||
联系电话 | |||
</view> | |||
<input placeholder="请输入联系电话" v-model="form.phone" /> | |||
</view> | |||
</view> | |||
<view class="help-button"> | |||
<!-- <view>历史提交</view> --> | |||
<view @click="submit">确认</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
form : { | |||
question : '', | |||
phone : '', | |||
name : '', | |||
image : '', | |||
}, | |||
fileList: [] | |||
} | |||
}, | |||
onLoad(args) { | |||
}, | |||
methods: { | |||
deleteImage(e){ | |||
this.fileList.splice(e.index, 1) | |||
}, | |||
afterRead(e){ | |||
let self = this | |||
e.file.forEach(file => { | |||
self.$Oss.ossUpload(file.url).then(url => { | |||
self.fileList.push({ | |||
url | |||
}) | |||
}) | |||
}) | |||
}, | |||
submit(){ | |||
let data = JSON.parse(JSON.stringify(this.form)) | |||
if(this.$utils.verificationAll(this.form, { | |||
question : '请输入你的问题和意见',//问题和意见 | |||
// image : '请上传截图',// | |||
name : '请输入姓名',// | |||
phone : '请输入手机号码',//手机号码 | |||
})){ | |||
return | |||
} | |||
data.image = this.fileList.map((item) => item.url).join(",") | |||
this.$api('addAdvice', data, res => { | |||
if(res.code == 200){ | |||
uni.showToast({ | |||
title: res.message, | |||
icon:'none' | |||
}) | |||
setTimeout(uni.navigateBack, 800, -1) | |||
} | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.help { | |||
.help-box { | |||
width: 92%; | |||
margin-left: 4%; | |||
.help-issue { | |||
margin: 20rpx; | |||
font-size: 28rpx; | |||
font-weight: 600; | |||
color: #333333; | |||
} | |||
.help-screenshot { | |||
display: flex; | |||
align-items: center; | |||
background-color: #fff; | |||
padding: 20rpx; | |||
} | |||
.form-sheet-cell{ | |||
display: flex; | |||
background-color: #fff; | |||
padding: 20rpx 30rpx; | |||
font-size: 24rpx; | |||
align-items: center; | |||
view{ | |||
width: 150rpx; | |||
} | |||
} | |||
.help-button { | |||
display: flex; | |||
justify-content: center; | |||
font-size: 24rpx; | |||
flex-shrink: 0; | |||
margin-top: 60rpx; | |||
view { | |||
padding: 14rpx 120rpx; | |||
border-radius: 38rpx; | |||
} | |||
view:nth-child(1) { | |||
background: $uni-color; | |||
color: #fff; | |||
} | |||
view:nth-child(2) { | |||
color: #FFFDF6; | |||
background-color: #C83741; | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -1,283 +0,0 @@ | |||
<template> | |||
<view class="promotion"> | |||
<navbar title="二维码" | |||
bgColor="#A3D250" | |||
color="#fff" | |||
leftClick @leftClick="$utils.navigateBack" /> | |||
<view class="promotion-card"> | |||
<!-- <view class="user-info"> --> | |||
<!-- <image class="image" :src="userInfo.headImage" mode="widthFix"></image> --> | |||
<!-- <image class="image" src="../../static/logo.png" mode="widthFix"></image> --> | |||
<!-- <view class="user-name">{{ userInfo.nickName }}</view> --> | |||
<!-- <view class="user-name">湖南第一深情</view> --> | |||
<!-- </view> --> | |||
<!-- <view class="invitation-code-img"> | |||
<image | |||
style="width: 400rpx;" | |||
:src="imagePath" mode="widthFix"></image> | |||
</view> --> | |||
<image style="width: 100%;" :src="imagePath" mode="widthFix"></image> | |||
<!-- <view class="invitation-code">加油站: {{ title }}</view> --> | |||
<canvas id="myCanvas" type="2d" canvas-id="firstCanvas1"></canvas> | |||
</view> | |||
<view class="btns"> | |||
<view class="btn" | |||
@click="preservationImg(imagePath)">保存</view> | |||
<!-- <view class="btn">立即邀请</view> --> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import { mapState } from 'vuex' | |||
export default { | |||
name: 'Promotion', | |||
computed: { | |||
...mapState(['userInfo']), | |||
}, | |||
data() { | |||
return { | |||
url: '', | |||
title: '123123', | |||
baseUrl: 'https://dianpin-img.xzaiyp.top/', | |||
canvas: {}, | |||
imagePath: '', | |||
} | |||
}, | |||
onShow() { | |||
this.getQrCode() | |||
this.$store.commit('getUserInfo') | |||
}, | |||
methods: { | |||
getQrCode() { | |||
this.$api('getInviteCode', res => { | |||
if (res.code == 200) { | |||
this.url = res.result.url | |||
this.title = res.result.name | |||
this.draw() | |||
} | |||
}) | |||
}, | |||
draw() { | |||
uni.showLoading({ | |||
title: "拼命绘画中..." | |||
}) | |||
wx.createSelectorQuery() | |||
.select('#myCanvas') // 绘制的canvas的id | |||
.fields({ | |||
node: true, | |||
size: true | |||
}) | |||
.exec((res) => { | |||
const canvas = res[0].node | |||
// 渲染上下文 | |||
const ctx = canvas.getContext('2d') | |||
// Canvas 画布的实际绘制宽高 | |||
const width = res[0].width | |||
const height = res[0].height | |||
// 初始化画布大小 | |||
const dpr = wx.getWindowInfo().pixelRatio | |||
//根据dpr调整 | |||
// dpr 2 4 | |||
// 3 6 | |||
let Ratio = dpr * 2 | |||
console.log("bug", dpr) | |||
canvas.width = width * dpr | |||
canvas.height = height * dpr | |||
this.canvas = canvas | |||
ctx.scale(dpr, dpr) | |||
ctx.clearRect(0, 0, width, height) | |||
ctx.fillStyle = '#fff' | |||
ctx.fillRect(0, 0, canvas.width, canvas.height) | |||
//用户图片 | |||
// const image = canvas.createImage() | |||
// image.onload = () => { | |||
// ctx.drawImage(image, 30, 18, 40, 40) | |||
// } | |||
// image.src = '/public/img/wechar_1.png' | |||
// image.src = this.userInfo.headImage | |||
ctx.fillStyle = 'black' | |||
ctx.font = '22px PingFangSC-regular'; | |||
let s = this.title || '加油站' | |||
ctx.fillText(s, canvas.width / Ratio - s.length * 11, 50); | |||
//二维码图片 | |||
const coderImage = canvas.createImage() | |||
coderImage.src = this.baseUrl + this.url | |||
coderImage.onload = () => { | |||
ctx.drawImage(coderImage, | |||
canvas.width / Ratio - 240 / 2, 100, 240, 240) | |||
} | |||
// 绘制完成后存储路径 | |||
setTimeout(() => { | |||
wx.canvasToTempFilePath({ | |||
x: 0, | |||
y: 0, | |||
width: this.canvas.width, | |||
height: this.canvas.height, | |||
canvas, | |||
success: (res) => { | |||
var tempFilePath = res.tempFilePath; | |||
this.imagePath = tempFilePath | |||
uni.hideLoading() | |||
} | |||
}); | |||
}, 600); | |||
}) | |||
}, | |||
back() { | |||
uni.navigateBack(-1) | |||
}, | |||
preservationImg(img) { | |||
let that = this | |||
uni.authorize({ | |||
/* scope.writePhotosAlbum 类型是保存到相册 */ | |||
scope: 'scope.writePhotosAlbum', | |||
success() { | |||
/* 已授权进入 */ | |||
/* 保存图片到相册方法方法 */ | |||
that.imgApi(img); | |||
}, | |||
complete(res) { | |||
/* 判断如果没有授权就打开设置选项让用户重新授权 */ | |||
uni.getSetting({ | |||
success(res) { | |||
if (!res.authSetting['scope.writePhotosAlbum']) { | |||
/* 打开设置的方法 */ | |||
that.openInstall(); | |||
} | |||
} | |||
}); | |||
} | |||
}); | |||
}, | |||
imgApi(image) { | |||
/* 获取图片的信息 */ | |||
uni.getImageInfo({ | |||
src: image, | |||
success: function(image) { | |||
/* 保存图片到手机相册 */ | |||
uni.saveImageToPhotosAlbum({ | |||
filePath: image.path, | |||
success: function() { | |||
uni.showModal({ | |||
title: '保存成功', | |||
content: '图片已成功保存到相册', | |||
showCancel: false | |||
}); | |||
}, | |||
complete(res) { | |||
console.log(res); | |||
} | |||
}); | |||
} | |||
}); | |||
}, | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.promotion { | |||
width: 100%; | |||
height: 100vh; | |||
background-color: $uni-color; | |||
.promotion-card { | |||
width: 90%; | |||
margin: 100rpx auto 0rpx auto; | |||
box-shadow: 0rpx 0rpx 15rpx rgba(0, 0, 0, .2); | |||
border-radius: 15rpx; | |||
padding: 40rpx 30rpx; | |||
box-sizing: border-box; | |||
background-color: #fff; | |||
.user-info { | |||
display: flex; | |||
align-items: center; | |||
.image { | |||
width: 80rpx; | |||
height: 80rpx; | |||
border-radius: 50%; | |||
margin-right: 10rpx; | |||
} | |||
.user-name { | |||
font-size: 30rpx; | |||
} | |||
} | |||
.invitation-code-img { | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
margin: 100rpx 0rpx; | |||
.image { | |||
width: 30%; | |||
border-radius: 50%; | |||
} | |||
} | |||
.invitation-code { | |||
text-align: center; | |||
color: #818181; | |||
font-size: 28rpx; | |||
} | |||
} | |||
.btns { | |||
position: fixed; | |||
left: 0; | |||
bottom: 0; | |||
width: 100%; | |||
height: 120rpx; | |||
display: flex; | |||
background: #fff; | |||
font-size: 28rpx; | |||
color: $uni-color; | |||
.btn { | |||
flex: 1; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
&:nth-child(2) { | |||
background: orange; | |||
} | |||
} | |||
} | |||
} | |||
#myCanvas { | |||
position: fixed; | |||
left: 100%; | |||
/* visibility: hidden */ | |||
/* visibility: hidden; */ | |||
/* margin-top: 100rpx; */ | |||
margin: 68rpx auto; | |||
width: 750rpx; | |||
height: 750rpx; | |||
/* line-height: 20px; */ | |||
background-color: rgba(255, 255, 255, 1); | |||
text-align: center; | |||
} | |||
</style> |
@ -1,109 +0,0 @@ | |||
<template> | |||
<view class="purse"> | |||
<navbar title="立即提现" leftClick @leftClick="$utils.navigateBack" /> | |||
<!-- 水洗店 --> | |||
<view class="userShop"> | |||
<userShopCommission purse /> | |||
</view> | |||
<view class="from-body"> | |||
<view>我要提现</view> | |||
<view class="from-line"> | |||
<input placeholder="请输入提现金额" /> | |||
</view> | |||
<view class="from-line"> | |||
<input placeholder="请输入姓名" /> | |||
</view> | |||
<view class="from-line"> | |||
<input placeholder="请输入开户行" /> | |||
</view> | |||
<view class="from-line"> | |||
<input placeholder="请输入银行卡卡号" /> | |||
</view> | |||
<view class="mt56">提现说明</view> | |||
<view style="line-height: 45rpx; font-size: 24rpx;color: #666666;" v-html="notice"> | |||
</view> | |||
<!-- <p>1、本次提现必须通过银行卡提现,暂不支持其他途径。</p> | |||
<p>2、如若遇到24小时提现未到账,请联系客服。</p> --> | |||
</view> | |||
<view class="b-fiexd"> | |||
<view class="button-submit">提交</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import userShopCommission from '@/components/userShop/userShopCommission.vue' | |||
export default { | |||
components: { | |||
userShopCommission, | |||
}, | |||
data() { | |||
return { | |||
notice : '' | |||
} | |||
}, | |||
methods: { | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.purse{ | |||
min-height: 100vh; | |||
background-color: #ffffff; | |||
.from-body { | |||
padding: 40rpx 20rpx; | |||
font-size: 28rpx; | |||
font-family: PingFang SC, PingFang SC-Bold; | |||
font-weight: 700; | |||
text-align: left; | |||
color: #333333; | |||
line-height: 40px; | |||
padding-bottom: 160rpx; | |||
.from-line { | |||
margin-top: 40rpx; | |||
} | |||
input { | |||
width: 612rpx; | |||
height: 90rpx; | |||
line-height: 90rpx; | |||
background: #F5F5F5; | |||
border-radius: 46rpx; | |||
padding: 0 50rpx; | |||
font-size: 28rpx; | |||
font-family: PingFang SC, PingFang SC-Regular; | |||
font-weight: 400; | |||
text-align: left; | |||
color: #333; | |||
} | |||
} | |||
.button-submit { | |||
width: 596rpx; | |||
height: 90rpx; | |||
line-height: 90rpx; | |||
background: $uni-color; | |||
border-radius: 46rpx; | |||
margin: 20rpx auto; | |||
font-size: 28rpx; | |||
font-family: PingFang SC, PingFang SC-Regular; | |||
font-weight: 400; | |||
text-align: center; | |||
color: #ffffff; | |||
} | |||
} | |||
</style> |
@ -1,88 +0,0 @@ | |||
<template> | |||
<view class="running-water"> | |||
<navbar :title="title[status]" leftClick @leftClick="leftClick" /> | |||
<view class="tab-box"> | |||
<view class="tab-box1" v-if="agentFlow && agentFlow.total"> | |||
<uv-cell center border :title="item.title" | |||
v-for="(item, index) in agentFlow.records" | |||
:value="x[item.type] + item.money" :label="item.createTime" /> | |||
</view> | |||
<view | |||
style="padding: 100rpx 0;" | |||
v-else> | |||
<uv-empty | |||
mode="history" | |||
textSize="28rpx" | |||
iconSize="100rpx"/> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
data() { | |||
return { | |||
title : ['余额记录','提现记录','佣金记录'], | |||
agentFlow : { | |||
total : 0, | |||
records : [ | |||
{ | |||
type : 0, | |||
money : 100, | |||
createTime : '2024-04-02 20:00', | |||
title : "佣金提现", | |||
}, | |||
{ | |||
type : 0, | |||
money : 100, | |||
createTime : '2024-04-02 20:00', | |||
title : "佣金提现", | |||
}, | |||
{ | |||
type : 0, | |||
money : 100, | |||
createTime : '2024-04-02 20:00', | |||
title : "佣金提现", | |||
}, | |||
] | |||
}, | |||
x : ['+', '-' , '-' , '+'], | |||
status : 0, | |||
} | |||
}, | |||
onLoad(e) { | |||
this.status = e.status | |||
}, | |||
methods: { | |||
leftClick() { //返回钱包 | |||
uni.navigateBack(-1) | |||
}, | |||
getAgentFlow(){ //获取流水记录 | |||
let type = this.status; | |||
this.$api('getAgentFlow', { type }, res => { | |||
if(res.code == 200){ | |||
this.agentFlow = res.result | |||
} | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
.running-water{ | |||
width: 750rpx; | |||
background: #F5F5F5; | |||
margin: 0 auto; | |||
min-height: 100vh; | |||
.tab-box{ | |||
margin: 20rpx; | |||
background-color: #fff; | |||
border-radius: 20rpx; | |||
overflow: hidden; | |||
} | |||
} | |||
</style> |
@ -1,567 +0,0 @@ | |||
<template> | |||
<view> | |||
<navbar | |||
title="订单详情" | |||
leftClick | |||
@leftClick="$utils.navigateBack" | |||
/> | |||
<!-- 水洗店 --> | |||
<view class="" | |||
v-if="userShop"> | |||
<view class="controls"> | |||
<view class="title"> | |||
<image src="../static/order/icon.png" mode=""></image> | |||
服务完成 | |||
</view> | |||
<view class="tips"> | |||
待送回 | |||
</view> | |||
<view class="btns"> | |||
<view class="btn1"> | |||
快递寄回 | |||
</view> | |||
<view class="btn2"> | |||
线下配送 | |||
</view> | |||
</view> | |||
</view> | |||
<view class="steps"> | |||
<uv-steps | |||
activeColor="#FD5100" | |||
:current="stepsCurrent" dot> | |||
<uv-steps-item :title="item" | |||
:key="index" | |||
v-for="(item, index) in steps"></uv-steps-item> | |||
</uv-steps> | |||
</view> | |||
</view> | |||
<!-- 酒店和水洗店 --> | |||
<view class="info"> | |||
<view class="flex" | |||
style="display: flex;"> | |||
<view style="width: 8rpx;height: 30rpx; | |||
background: #FD5100;border-radius: 6rpx;" /> | |||
<view class="head-title">服务项目</view> | |||
</view> | |||
<view class="flex"> | |||
<view class="server-item"> | |||
<view class="img-box"> | |||
<image :src="msgShop.image" mode="aspectFill"></image> | |||
</view> | |||
<view class="server-info"> | |||
<view class="server-title"> | |||
{{msgOrder.projectName}} | |||
<!-- <view class="coupon">领券立减</view> --> | |||
</view> | |||
<view class="current-price"> | |||
<text class="unit">¥</text>{{msgOrder.money}} | |||
</view> | |||
<view class="sales-volume" style="margin-top: 5px;"> | |||
<view class="desc">规格:{{msgOrder.unit}}</view> | |||
</view> | |||
<view class="time-coupon"> | |||
<!-- <view class="flex"> | |||
<image src="@/static/home/time-icon.png"></image> | |||
<view class="time">{{msgOrder.useTime}}分钟</view> | |||
</view> --> | |||
<!-- <view class="sales-volume"> | |||
<image src="@/static/icons/icon1.png"></image> | |||
<view class="desc">已售出{{msgShop.payNum}}+单</view> | |||
</view> --> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- <view class="line min_tips"> | |||
<view class="head-div flex"> | |||
<view style="width: 118rpx;height: 118rpx;border-radius: 50%;overflow: hidden;"> | |||
<image style="width: 118rpx;" :src="msgTechnician.image" mode="widthFix"></image> | |||
</view> | |||
<view style="padding: 10rpx 34rpx;display: flex;flex-direction: column;justify-content: space-around;"> | |||
<view class="nickname"> | |||
{{msgTechnician.title}} | |||
<view v-if="msgTechnician.isVip" class="tag"> | |||
<image src="@/static/order/s.png" mode="aspectFit"></image> | |||
<view class="auth">官方认证</view> | |||
</view> | |||
</view> | |||
<view class="days"> | |||
<van-rate v-model="msgTechnician.score" :size="10" readonly color="#ffb54c" void-icon="star" | |||
void-color="#eee" /> | |||
<view class=""> | |||
好评{{msgTechnician.pinNum}} | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<view @click="gototechnicianDetail(msgTechnician)" class="btn-x"> | |||
服务技师 | |||
</view> | |||
</view> --> | |||
<view class="line address"> | |||
<view class="address-top"> | |||
<!-- <view class=""> | |||
服务地址 | |||
</view> --> | |||
<view class="copy"> | |||
<image @click="copy(msgOrder.name + ' ' + msgOrder.phone + ' ' + msgOrder.address)" src="/static/order/copy.png"></image> | |||
</view> | |||
</view> | |||
<view class="addressDetail"> | |||
<view class="">{{msgOrder.name}} {{msgOrder.phone}}</view> | |||
<view class="">{{msgOrder.address}}</view> | |||
</view> | |||
</view> | |||
<view class="line"> | |||
<view class="t min_tips"> | |||
<view class=""> | |||
实付款 | |||
</view> | |||
<view class="current-price"> | |||
¥{{ msgOrder.money }} | |||
</view> | |||
</view> | |||
<view class="min_tips"> | |||
<view class=""> | |||
租赁费用 | |||
</view> | |||
<view class=""> | |||
¥{{ msgOrder.price }} | |||
</view> | |||
</view> | |||
<view class="min_tips"> | |||
<view class=""> | |||
水洗费用 | |||
</view> | |||
<view class=""> | |||
¥{{ msgOrder.price}} | |||
</view> | |||
</view> | |||
<view class="min_tips"> | |||
<view class=""> | |||
押金 | |||
</view> | |||
<view class=""> | |||
¥{{ msgOrder.price }} | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 订单信息 --> | |||
<view class="line"> | |||
<view class="t min_tips"> | |||
<view class=""> | |||
订单信息 | |||
</view> | |||
</view> | |||
<view class="min_tips"> | |||
<view class=""> | |||
订单编号 | |||
</view> | |||
<view class=""> | |||
{{msgOrder.id}} | |||
</view> | |||
</view> | |||
<view class="min_tips"> | |||
<view class=""> | |||
下单时间 | |||
</view> | |||
<view class=""> | |||
{{msgOrder.createTime}} | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 下单须知 --> | |||
<view class="line"> | |||
<view class="t min_tips"> | |||
<view class=""> | |||
下单须知 | |||
</view> | |||
</view> | |||
<view class="min_tips" style="line-height: 40rpx;"> | |||
{{msgShop.projectExplain}} | |||
</view> | |||
<view class="btns"> | |||
<view @click="clickService" class="btn"> | |||
联系客服 | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import { mapGetters } from 'vuex' | |||
export default { | |||
computed : { | |||
...mapGetters(['userShop']), | |||
}, | |||
data() { | |||
return { | |||
stepsCurrent : 0, | |||
steps : [ | |||
'接单', | |||
'检查', | |||
'开始清洗', | |||
'服务完成', | |||
], | |||
msgShop : { | |||
money : 99.99, | |||
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg', | |||
projectExplain : '1.xxxxxxxxxx xxxxxxxxxx。2.xxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxx。3.。', | |||
}, | |||
msgOrder : { | |||
money : 99.99, | |||
address : '广东省广州市越秀区城南故事C3栋2802', | |||
name : '李**', | |||
phone : '150*****091', | |||
unit : '120*40*75【桌子尺寸】', | |||
state_dictText : '已完成', | |||
price : 199.99, | |||
id : '020644568964457', | |||
createTime : '2024-01-18 15:39', | |||
projectName : '桌布租赁' | |||
}, | |||
} | |||
}, | |||
methods: { | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.order { | |||
background: linear-gradient(#4899a6, #6fc6ad, #6fc6ad); | |||
padding-bottom: 10px; | |||
} | |||
.controls{ | |||
margin: 20rpx; | |||
background-color: #fff; | |||
height: 400rpx; | |||
display: flex; | |||
flex-direction: column; | |||
width: 710rpx; | |||
border-radius: 20rpx; | |||
justify-content: center; | |||
align-items: center; | |||
.title{ | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
font-size: 40rpx; | |||
image{ | |||
width: 100rpx; | |||
height: 100rpx; | |||
margin-right: 20rpx; | |||
} | |||
} | |||
.tips{ | |||
font-size: 26rpx; | |||
color: #FD5100; | |||
margin-top: 10rpx; | |||
} | |||
.btns{ | |||
margin-top: 50rpx; | |||
display: flex; | |||
view{ | |||
margin: 0 20rpx; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
color: #fff; | |||
background-color: $uni-color; | |||
padding: 15rpx 40rpx; | |||
border-radius: 40rpx; | |||
} | |||
.btn2{ | |||
background-color: #FFFFFF; | |||
border: 1px solid #A7A7A7; | |||
color: #A7A7A7; | |||
} | |||
} | |||
} | |||
.steps{ | |||
margin: 20rpx; | |||
background-color: #fff; | |||
display: flex; | |||
flex-direction: column; | |||
width: 710rpx; | |||
border-radius: 20rpx; | |||
padding: 70rpx 0; | |||
/deep/ .uv-text__value{ | |||
font-size: 22rpx !important; | |||
} | |||
} | |||
.box { | |||
padding: 20px; | |||
.btns { | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
margin-top: 10px; | |||
.btn { | |||
color: #fff; | |||
padding: 10rpx 50rpx; | |||
background-color: #ffb300; | |||
border-radius: 30rpx; | |||
font-size: 25rpx; | |||
margin-right: 10rpx; | |||
} | |||
.btc{ | |||
background: #ccc; | |||
} | |||
} | |||
} | |||
.info { | |||
margin: 10px; | |||
padding: 20rpx; | |||
background-color: #fff; | |||
width: calc(100% - 40px); | |||
border-radius: 10px; | |||
.head-title { | |||
font-family: PingFang SC, PingFang SC-Bold; | |||
color: #2f2e2e; | |||
line-height: 30rpx; | |||
margin-left: 10rpx; | |||
} | |||
.server-item { | |||
display: flex; | |||
flex-wrap: wrap; | |||
align-items: center; | |||
justify-content: space-between; | |||
background: white; | |||
border-radius: 15rpx; | |||
box-sizing: border-box; | |||
margin: 20rpx 0rpx; | |||
width: 100%; | |||
.img-box { | |||
width: 150rpx; | |||
height: 150rpx; | |||
border-radius: 10rpx; | |||
overflow: hidden; | |||
image { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
} | |||
.server-info { | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-around; | |||
width: calc(100% - 180rpx); | |||
box-sizing: border-box; | |||
padding: 10rpx 15rpx; | |||
.server-title { | |||
display: flex; | |||
margin-bottom: 10rpx; | |||
} | |||
.coupon { | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
background: #F29E45; | |||
color: white; | |||
width: 120rpx; | |||
height: 40rpx; | |||
border-radius: 10rpx; | |||
margin-left: 10rpx; | |||
font-size: 22rpx; | |||
} | |||
.time-coupon, | |||
.price { | |||
display: flex; | |||
flex-wrap: wrap; | |||
align-items: center; | |||
} | |||
.time-coupon { | |||
margin: 10rpx 0rpx; | |||
font-size: 26rpx; | |||
justify-content: space-between; | |||
width: 100%; | |||
.flex { | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
image { | |||
width: 25rpx; | |||
height: 25rpx; | |||
} | |||
.time { | |||
color: #B8B8B8; | |||
margin-left: 6rpx; | |||
} | |||
} | |||
.sales-volume { | |||
display: flex; | |||
align-items: center; | |||
color: #B8B8B8; | |||
font-size: 24rpx; | |||
image { | |||
width: 25rpx; | |||
height: 25rpx; | |||
} | |||
} | |||
} | |||
} | |||
.address { | |||
.address-top{ | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
image{ | |||
width: 30rpx; | |||
height: 30rpx; | |||
} | |||
} | |||
.addressDetail { | |||
color: #777; | |||
font-size: 22rpx; | |||
padding: 5px 0; | |||
} | |||
text { | |||
background-color: #F29E45; | |||
padding: 8rpx 10rpx; | |||
color: #fff; | |||
font-size: 20rpx; | |||
margin-left: 10px; | |||
border-radius: 5px; | |||
} | |||
} | |||
.min_tips { | |||
font-size: 22rpx; | |||
color: #777; | |||
display: flex; | |||
justify-content: space-between; | |||
padding: 5px 0; | |||
align-items: center; | |||
} | |||
.current-price { | |||
font-size: 30rpx; | |||
color: #FD5100; | |||
} | |||
.line { | |||
border-top: 2px dotted #00000011; | |||
padding: 20rpx 0; | |||
.t { | |||
padding: 5px 0; | |||
color: #000; | |||
font-size: 26rpx; | |||
} | |||
} | |||
.head-div { | |||
.nickname { | |||
font-size: 30rpx; | |||
font-weight: 600; | |||
text-align: left; | |||
line-height: 42rpx; | |||
display: flex; | |||
align-items: center; | |||
.tag { | |||
position: relative; | |||
display: flex; | |||
align-items: center; | |||
image { | |||
height: 45rpx; | |||
width: 90rpx; | |||
vertical-align: middle; | |||
} | |||
.auth { | |||
position: absolute; | |||
white-space: nowrap; | |||
color: #FF6200; | |||
left: 23rpx; | |||
font-size: 17rpx; | |||
} | |||
} | |||
} | |||
.days { | |||
font-size: 20rpx; | |||
font-weight: 400; | |||
text-align: left; | |||
line-height: 56rpx; | |||
display: flex; | |||
align-items: center; | |||
view { | |||
padding-left: 5px; | |||
} | |||
} | |||
} | |||
.btn-x { | |||
color: #6fc6ad; | |||
border: 1px solid #6fc6ad; | |||
padding: 10rpx 20rpx; | |||
border-radius: 30rpx; | |||
} | |||
.btns { | |||
display: flex; | |||
justify-content: center; | |||
.btn { | |||
color: #6fc6ad; | |||
border: 1px solid #6fc6ad; | |||
padding: 10rpx 20rpx; | |||
border-radius: 30rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -1,353 +0,0 @@ | |||
<template> | |||
<view class="refundsOrExchange"> | |||
<navbar :title="title[titleIndex]" leftClick @leftClick="$utils.navigateBack" /> | |||
<view class="frame"> | |||
<!-- 商品简介 --> | |||
<view class="itme1" @click="openSpPopup"> | |||
<view class="left"> | |||
<img src="../../static/image/center/1.png" alt="" style="width: 100%;height: 100%;"> | |||
</view> | |||
<view class="center"> | |||
<view>{{ commodity.title }}</view> | |||
<view>{{ commodity.smallTitle }}</view> | |||
</view> | |||
<view class="right">×{{ commodity.total }}</view> | |||
</view> | |||
<!--<commoditySelect ></commoditySelect>--> | |||
<!-- 申请类型&申请原因 --> | |||
<view class="item2"> | |||
<view class="type"> | |||
<span>申请类型</span> | |||
<span>退货退款</span> | |||
</view> | |||
<uv-line></uv-line> | |||
<view class="reason"> | |||
<view>申请原因</view> | |||
<view> | |||
<uv-input placeholder="请输入申请原因" border="none" clearable></uv-input> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 退货数量&申请金额--> | |||
<view class="item3"> | |||
<view class="type"> | |||
<span>{{ titleIndex == 0 ? '退货数量' : '换货数量' }}</span> | |||
<span> | |||
<uv-number-box :min="1" :max="100"></uv-number-box> | |||
</span> | |||
</view> | |||
<uv-line v-if='titleIndex == 0 ? true :false'></uv-line> | |||
<view class="reason" v-if='titleIndex == 0 ? true :false'> | |||
<view>申请原因</view> | |||
<view> | |||
<uv-input disabled placeholder="$" border="none" clearable></uv-input> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 申请说明 --> | |||
<view class="item4"> | |||
<view>申请说明(选填)</view> | |||
<view> | |||
<uv-input placeholder="请您详细填写申请说明" border="none" clearable></uv-input> | |||
</view> | |||
<view> | |||
<uv-upload :fileList="fileList" :maxCount="5" multiple width="150rpx" height="150rpx" | |||
@delete="deleteImage" @afterRead="afterRead" :previewFullImage="true"></uv-upload> | |||
</view> | |||
</view> | |||
<!-- 联系电话 --> | |||
<view class="item5"> | |||
<view class="phone"> | |||
<view>联系电话</view> | |||
<view> | |||
<uv-input placeholder="请输入联系电话" border="none" clearable></uv-input> | |||
</view> | |||
</view> | |||
</view> | |||
</view> | |||
<!-- 底部按钮 --> | |||
<!--商品选择--> | |||
<uv-popup ref="spPopup" :round="30"> | |||
</uv-popup> | |||
</view> | |||
</template> | |||
<script> | |||
export default { | |||
onLoad(option) { | |||
this.titleIndex = option.index | |||
}, | |||
components: { | |||
}, | |||
data() { | |||
return { | |||
titleIndex: 0, | |||
title: ['申请换货', '申请退货'], | |||
fileList: [], | |||
bottomBtnStyle: { | |||
color: '#FFF', | |||
backgroundColor: '#fd5100', | |||
fontSize: '34rpx', | |||
text: '提交申请', | |||
width: '400rpx', | |||
height: '80rpx', | |||
borderRadius: '100rpx', | |||
bottom: '40rpx' | |||
}, | |||
commodityList: [{ | |||
title: '商品名称', | |||
smallTitle: '产品规格:120*4*75【桌子尺寸】', | |||
total: 1, | |||
}, | |||
{ | |||
title: '商品名称1', | |||
smallTitle: '产品规格:120*4*75【桌子尺寸】', | |||
total: 1, | |||
}, | |||
{ | |||
title: '商品名称2', | |||
smallTitle: '产品规格:120*4*75【桌子尺寸】', | |||
total: 1, | |||
} | |||
], | |||
commodity: { | |||
title: '商品名称', | |||
smallTitle: '产品规格:120*4*75【桌子尺寸】', | |||
total: 1, | |||
}, | |||
} | |||
}, | |||
mounted() { | |||
}, | |||
methods: { | |||
openSpPopup() { | |||
this.$refs.spPopup.open('bottom'); | |||
}, | |||
// 选择退换货商品回调 | |||
selectCommodity(e) { | |||
console.log(e, "selectCommodity--e") | |||
this.commodity = e | |||
this.$refs.spPopup.close() | |||
}, | |||
confirm() { | |||
console.log("==="); | |||
}, | |||
deleteImage(e) { | |||
this.fileList.splice(e.index, 1) | |||
}, | |||
afterRead(e) { | |||
let self = this | |||
e.file.forEach(file => { | |||
self.$Oss.ossUpload(file.url).then(url => { | |||
self.fileList.push({ | |||
url | |||
}) | |||
}) | |||
}) | |||
}, | |||
} | |||
} | |||
</script> | |||
<style lang="scss" scoped> | |||
* { | |||
box-sizing: border-box; | |||
} | |||
.refundsOrExchange { | |||
.frame { | |||
display: flex; | |||
flex-direction: column; | |||
gap: 30rpx; | |||
width: 100%; | |||
padding-top: 40rpx; | |||
background-color: #f5f5f5; | |||
.itme1 { | |||
display: flex; | |||
height: 200rpx; | |||
background-color: #ffffff; | |||
.left { | |||
padding: 40rpx; | |||
width: 20%; | |||
border-radius: 10rpx; | |||
background-color: #ffffff; | |||
} | |||
.center { | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: center; | |||
gap: 20rpx; | |||
width: 60%; | |||
padding: 0rpx 0 0 20rpx; | |||
background-color: #ffffff; | |||
// 给第一个 view 设置样式 | |||
>view:first-of-type { | |||
font-size: 36rpx; | |||
color: #333; | |||
} | |||
// 给第二个 view 设置样式 | |||
>view:nth-of-type(2) { | |||
font-size: 28rpx; | |||
color: #666666; | |||
} | |||
} | |||
.right { | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
width: 10%; | |||
color: #666666; | |||
background-color: #ffffff; | |||
} | |||
} | |||
.item2 { | |||
width: 100vw; | |||
.type { | |||
display: flex; | |||
align-items: center; | |||
background-color: #FFF; | |||
height: 80rpx; | |||
padding: 0 0 0 20rpx; | |||
>span:nth-of-type(1) { | |||
width: 30%; | |||
} | |||
>span:nth-of-type(2) { | |||
width: 70%; | |||
} | |||
} | |||
.reason { | |||
display: flex; | |||
align-items: center; | |||
background-color: #FFF; | |||
height: 80rpx; | |||
// margin: 10rpx 0 0 0; | |||
padding: 10rpx 0 0 20rpx; | |||
>view:nth-of-type(1) { | |||
width: 30%; | |||
} | |||
>view:nth-of-type(2) { | |||
width: 70%; | |||
padding: 0 20rpx 0 0; | |||
} | |||
} | |||
} | |||
.item3 { | |||
width: 100vw; | |||
.type { | |||
display: flex; | |||
align-items: center; | |||
background-color: #FFF; | |||
height: 80rpx; | |||
padding: 0 0 0 20rpx; | |||
>span:nth-of-type(1) { | |||
width: 70%; | |||
} | |||
>span:nth-of-type(2) { | |||
width: 30%; | |||
} | |||
} | |||
.reason { | |||
display: flex; | |||
align-items: center; | |||
background-color: #FFF; | |||
height: 80rpx; | |||
// margin: 10rpx 0 0 0; | |||
padding: 10rpx 0 0 20rpx; | |||
>view:nth-of-type(1) { | |||
width: 30%; | |||
} | |||
>view:nth-of-type(2) { | |||
width: 70%; | |||
padding: 0 20rpx 0 0; | |||
} | |||
} | |||
} | |||
.item4 { | |||
display: flex; | |||
flex-direction: column; | |||
padding: 10rpx 0 0 20rpx; | |||
background-color: #FFF; | |||
>view:nth-of-type(1) { | |||
background-color: #FFF; | |||
} | |||
>view:nth-of-type(2) { | |||
margin: 10rpx 0 10rpx 0; | |||
background-color: #FFF; | |||
} | |||
} | |||
.item5 { | |||
display: flex; | |||
flex-direction: column; | |||
padding: 0 0 0 20rpx; | |||
background-color: #FFF; | |||
.phone { | |||
display: flex; | |||
align-items: center; | |||
background-color: #FFF; | |||
height: 80rpx; | |||
// margin: 10rpx 0 0 0; | |||
padding: 10rpx 0 0 20rpx; | |||
>view:nth-of-type(1) { | |||
width: 30%; | |||
} | |||
>view:nth-of-type(2) { | |||
width: 70%; | |||
padding: 0 20rpx 0 0; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
</style> |
@ -1,169 +0,0 @@ | |||
<template> | |||
<view class="page"> | |||
<navbar title="商品详情" leftClick @leftClick="$utils.navigateBack" /> | |||
<view class="swipe"> | |||
<uv-swiper | |||
:list="productDetail.image.split(',')" | |||
indicator | |||
height="350rpx"></uv-swiper> | |||
</view> | |||
<view class="info"> | |||
<view class="title"> | |||
桌布租赁 | |||
</view> | |||
<view class="info-line"> | |||
<view class="price"> | |||
¥<text>45.9</text>起 | |||
</view> | |||
<view class="num"> | |||
已售1000+ | |||
<image src="../static/product/like.png" mode=""></image> | |||
</view> | |||
</view> | |||
<view class="tips"> | |||
<view class="tip"> | |||
专业设备 | |||
</view> | |||
<view class="tip"> | |||
科学流程 | |||
</view> | |||
<view class="tip"> | |||
质量保证 | |||
</view> | |||
</view> | |||
</view> | |||
<view class="info-unit"> | |||
<uv-cell title="是否有桌布" isLink> | |||
<template #icon> | |||
<text class="text">桌布</text> | |||
</template> | |||
</uv-cell> | |||
<uv-cell title="请选择规格" isLink> | |||
<template #icon> | |||
<text class="text">规格</text> | |||
</template> | |||
</uv-cell> | |||
<uv-cell> | |||
<template #icon> | |||
<text>上门取件·送货上门</text> | |||
</template> | |||
</uv-cell> | |||
</view> | |||
<view class="content"> | |||
<view class="title"> | |||
商品详情 | |||
</view> | |||
<uv-parse :content="productDetail.content"></uv-parse> | |||
</view> | |||
<!-- 分享和租赁按钮 --> | |||
<submit | |||
@submit="$refs.submitUnitSelect.open()" | |||
@share="share"/> | |||
<!-- 选择规格 --> | |||
<submitUnitSelect ref="submitUnitSelect"/> | |||
</view> | |||
</template> | |||
<script> | |||
import submit from '../components/product/submit.vue' | |||
import submitUnitSelect from '../components/product/submitUnitSelect.vue' | |||
export default { | |||
components : { | |||
submit, | |||
submitUnitSelect | |||
}, | |||
data() { | |||
return { | |||
productDetail : { | |||
image : 'https://cdn.uviewui.com/uview/swiper/swiper3.png,https://cdn.uviewui.com/uview/swiper/swiper2.png', | |||
content : '', | |||
} | |||
} | |||
}, | |||
onLoad(args) { | |||
console.log(args); | |||
}, | |||
methods: { | |||
// 分享商品 | |||
share(){ | |||
}, | |||
// 选择完成规格立即租赁下单 | |||
submit(){ | |||
} | |||
} | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page{ | |||
.swipe{ | |||
} | |||
.info{ | |||
padding: 30rpx; | |||
background-color: #fff; | |||
.title{ | |||
font-size: 34rpx; | |||
font-weight: 900; | |||
} | |||
.info-line{ | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
margin-top: 30rpx; | |||
.price{ | |||
font-size: 28rpx; | |||
color: $uni-color; | |||
text{ | |||
font-size: 34rpx; | |||
} | |||
} | |||
.num{ | |||
font-size: 24rpx; | |||
image{ | |||
width: 24rpx; | |||
height: 24rpx; | |||
} | |||
} | |||
} | |||
.tips{ | |||
display: flex; | |||
font-size: 20rpx; | |||
margin-top: 30rpx; | |||
.tip{ | |||
margin-right: 40rpx; | |||
} | |||
} | |||
} | |||
.info-unit{ | |||
margin-top: 20rpx; | |||
padding: 30rpx; | |||
background-color: #fff; | |||
/deep/ text{ | |||
font-size: 26rpx; | |||
} | |||
/deep/ .text{ | |||
color: #7C7C7C; | |||
margin-right: 20rpx; | |||
font-size: 26rpx; | |||
} | |||
} | |||
.content{ | |||
background-color: #fff; | |||
margin-top: 20rpx; | |||
.title{ | |||
padding: 30rpx; | |||
} | |||
} | |||
} | |||
</style> |
@ -0,0 +1,264 @@ | |||
<template> | |||
<view class="page__view"> | |||
<!-- 导航栏 --> | |||
<navbar title="搜索结果" leftClick @leftClick="$utils.navigateBack" bgColor="transparent" color="#191919" /> | |||
<!-- 搜索栏 --> | |||
<view class="flex search"> | |||
<uv-search | |||
v-model="keyword" | |||
placeholder="输入关键词搜索" | |||
color="#181818" | |||
bgColor="transparent" | |||
:showAction="true" | |||
@custom="search" | |||
@search="search" | |||
@focus="isFocusSearch = true" | |||
@blur="isFocusSearch = false" | |||
> | |||
<template #prefix> | |||
<image class="search-icon" src="/static/image/icon-search-dark.png" mode="widthFix"></image> | |||
</template> | |||
</uv-search> | |||
</view> | |||
<view class="main"> | |||
<view class="flex sort"> | |||
<view :class="['flex', 'sort-item', queryParams.sort == 'comprehensive' ? 'is-active' : '']" @click="onClickSort('comprehensive')">综合</view> | |||
<view :class="['flex', 'sort-item', ['sale-asc', 'sale-desc'].includes(queryParams.sort) ? 'is-active' : '']" @click="onClickSort('sale')"> | |||
<view>销量</view> | |||
<view class="sort-item-icon"> | |||
<uv-icon v-if="queryParams.sort == 'sale-asc'" name="arrow-up-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon> | |||
<uv-icon v-else-if="queryParams.sort == 'sale-desc'" name="arrow-down-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon> | |||
<image v-else style="width: 8rpx; height: auto;" src="/static/image/icon-sort.png" mode="widthFix"></image> | |||
</view> | |||
</view> | |||
<view :class="['flex', 'sort-item', ['price-asc', 'price-desc'].includes(queryParams.sort) ? 'is-active' : '']" @click="onClickSort('price')"> | |||
<view>价格</view> | |||
<view class="sort-item-icon"> | |||
<uv-icon v-if="queryParams.sort == 'price-asc'" name="arrow-up-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon> | |||
<uv-icon v-else-if="queryParams.sort == 'price-desc'" name="arrow-down-fill" color="#00A9FF" size="16rpx" :bold="true"></uv-icon> | |||
<image v-else style="width: 8rpx; height: auto;" src="/static/image/icon-sort.png" mode="widthFix"></image> | |||
</view> | |||
</view> | |||
</view> | |||
<view v-if="list.length" class="content"> | |||
<view v-for="item in list" :key="item.id"> | |||
<productCard | |||
:data="item" | |||
></productCard> | |||
</view> | |||
</view> | |||
<template v-else> | |||
<uv-empty mode="list"></uv-empty> | |||
</template> | |||
</view> | |||
</view> | |||
</template> | |||
<script> | |||
import mixinsList from '@/mixins/list.js' | |||
import productCard from '@/components/home/productCard.vue' | |||
export default { | |||
mixins: [mixinsList], | |||
components: { | |||
productCard, | |||
}, | |||
data() { | |||
return { | |||
keyword: '', | |||
queryParams: { | |||
pageNo: 1, | |||
pageSize: 10, | |||
title: '', | |||
sort: 'comprehensive', | |||
}, | |||
// todo | |||
mixinsListApi: '', | |||
} | |||
}, | |||
onLoad({ search }) { | |||
if (search) { | |||
this.keyword = search | |||
this.queryParams.title = search | |||
} | |||
this.getData() | |||
}, | |||
methods: { | |||
// todo: delete | |||
getData() { | |||
this.list = [ | |||
{ | |||
id: '001', | |||
image: '/static/image/temp-20.png', | |||
name: '新疆天山行7/9日丨醉美伊犁&吐鲁番双套餐', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '002', | |||
image: '/static/image/temp-24.png', | |||
name: '坝上双草原6日|乌兰布统+锡林郭勒+长城', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '003', | |||
image: '/static/image/temp-25.png', | |||
name: '牛湖线探秘 | 清远牛湖线徒步,探秘天坑与大草原', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '004', | |||
image: '/static/image/temp-26.png', | |||
name: '低海拔藏区草原,汉藏文化大穿越', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '005', | |||
image: '/static/image/temp-27.png', | |||
name: '新丝路到敦煌7日 | 甘青轻松穿越,沙漠+草原', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
{ | |||
id: '006', | |||
image: '/static/image/temp-28.png', | |||
name: '呼伦贝尔6/8日|经典or环线双套餐可选', | |||
desc: '国内游·7-9天·12岁+', | |||
currentPrice: 688.99, | |||
originalPrice: 1200, | |||
registered: 4168, | |||
}, | |||
] | |||
this.total = this.list.length | |||
}, | |||
search() { | |||
this.queryParams.pageNo = 1 | |||
this.queryParams.pageSize = 10 | |||
this.queryParams.title = this.keyword | |||
this.getData() | |||
}, | |||
onClickSort(key) { | |||
switch(key) { | |||
case 'comprehensive': | |||
this.queryParams.sort = 'comprehensive' | |||
break; | |||
case 'sale': | |||
if (this.queryParams.sort == 'sale-desc') { | |||
this.queryParams.sort = 'sale-asc' | |||
} else { | |||
this.queryParams.sort = 'sale-desc' | |||
} | |||
break; | |||
case 'price': | |||
if (this.queryParams.sort == 'price-desc') { | |||
this.queryParams.sort = 'price-asc' | |||
} else { | |||
this.queryParams.sort = 'price-desc' | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style scoped lang="scss"> | |||
.page__view { | |||
background: linear-gradient(#DAF3FF, #F4F4F4 200rpx, #F4F4F4); | |||
} | |||
.search { | |||
$h: 64rpx; | |||
$radius: 32rpx; | |||
$borderWidth: 4rpx; | |||
margin: 24rpx 32rpx 0 32rpx; | |||
width: calc(100% - 32rpx * 2); | |||
height: $h; | |||
position: relative; | |||
border-radius: $radius; | |||
&-icon { | |||
margin: 0 13rpx 0 26rpx; | |||
width: 30rpx; | |||
height: auto; | |||
} | |||
/deep/ .uv-search__content { | |||
padding: 12rpx 0; | |||
background: #FFFFFF !important; | |||
border-color: #CFEFFF !important; | |||
border: 4rpx solid transparent; | |||
} | |||
/deep/ .uv-search__action { | |||
padding: 19rpx 24rpx; | |||
font-size: 26rpx; | |||
font-weight: 500; | |||
line-height: 1; | |||
color: #FFFFFF; | |||
background: #00A9FF; | |||
border-radius: 32rpx; | |||
} | |||
} | |||
.main { | |||
margin-top: 24rpx; | |||
padding: 0 32rpx 100rpx 32rpx; | |||
} | |||
.sort { | |||
justify-content: space-between; | |||
&-item { | |||
padding: 12rpx 32rpx; | |||
font-size: 28rpx; | |||
line-height: 1.5; | |||
color: #191919; | |||
column-gap: 4rpx; | |||
&.is-active { | |||
font-weight: 600; | |||
color: #00A9FF; | |||
} | |||
&-icon { | |||
width: 32rpx; | |||
display: inline-flex; | |||
align-items: center; | |||
justify-content: center; | |||
} | |||
} | |||
} | |||
.content { | |||
margin-top: 24rpx; | |||
display: grid; | |||
grid-template-columns: repeat(2, 1fr); | |||
gap: 16rpx; | |||
} | |||
</style> |
@ -1 +0,0 @@ | |||
<?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 t="1726157567630" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6220" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M513.536 628.6336c101.6832 0 280.8832 38.7072 310.8864 193.7408 77.5168-77.5168 124.928-185.9584 124.928-305.0496 0-241.152-194.6624-435.8144-435.8144-435.8144S77.7216 277.0944 77.7216 517.2224c0 119.0912 47.4112 227.6352 124.928 306.0736 30.0032-154.9312 209.2032-194.6624 310.8864-194.6624z m0-439.7056c112.3328 0 204.3904 91.0336 204.3904 204.3904 0 112.3328-91.0336 204.3904-204.3904 204.3904a203.776 203.776 0 0 1-204.3904-204.3904c0.1024-112.4352 92.0576-204.3904 204.3904-204.3904z m0 0" fill="#cdcdcd" p-id="6221"></path><path d="M515.4816 1006.8992c-65.8432 0-129.8432-12.9024-189.952-38.4-58.1632-24.576-110.2848-59.8016-155.136-104.5504A485.56032 485.56032 0 0 1 65.8432 708.8128c-25.6-60.2112-38.5024-124.1088-38.5024-189.952 0-65.8432 12.9024-129.8432 38.4-189.952 24.576-58.1632 59.8016-110.2848 104.5504-155.136 44.8512-44.8512 96.9728-79.9744 155.136-104.5504C385.6384 43.6224 449.536 30.72 515.4816 30.72c65.8432 0 129.8432 12.9024 189.952 38.4 58.1632 24.576 110.2848 59.8016 155.136 104.5504 44.8512 44.8512 79.9744 96.9728 104.5504 155.136C990.6176 389.0176 1003.52 452.9152 1003.52 518.8608c0 65.8432-12.9024 129.8432-38.4 189.952-24.576 58.1632-59.8016 110.2848-104.5504 155.136a485.56032 485.56032 0 0 1-155.136 104.5504 484.39296 484.39296 0 0 1-189.952 38.4z m0-936.8576c-60.6208 0-119.3984 11.8784-174.6944 35.2256a447.76448 447.76448 0 0 0-142.6432 96.1536A444.42624 444.42624 0 0 0 101.9904 344.064a446.70976 446.70976 0 0 0-35.2256 174.6944c0 60.6208 11.8784 119.3984 35.2256 174.6944 22.6304 53.4528 54.9888 101.4784 96.1536 142.6432 41.1648 41.2672 89.1904 73.6256 142.6432 96.1536 55.296 23.3472 114.0736 35.2256 174.6944 35.2256 60.6208 0 119.3984-11.8784 174.6944-35.2256 53.4528-22.6304 101.4784-54.9888 142.6432-96.1536 41.2672-41.1648 73.6256-89.1904 96.1536-142.6432 23.3472-55.296 35.2256-114.0736 35.2256-174.6944 0-60.6208-11.8784-119.3984-35.2256-174.6944a447.76448 447.76448 0 0 0-96.1536-142.6432 444.42624 444.42624 0 0 0-142.6432-96.1536 447.44704 447.44704 0 0 0-174.6944-35.2256z m0 0" fill="#cdcdcd" p-id="6222"></path></svg> |