You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
yanzong_qianduan/pages/news/recycling/detail.vue

531 lines
12 KiB

<template>
<view class="recycling">
<view class="recycling-swiper">
<!-- <u-swiper :list="list" mode="number" height="750" indicator-pos="bottomRight"></u-swiper> -->
<image :src="info.recovery_image" style="width: 100%; height: 750rpx;"></image>
</view>
<view class="recycling-hd">
<view class="a">
<view class="price" v-if="type== 1">¥<text>{{info.server_price}}</text></view>
<view class="price" v-else>免支付预约</view>
<view class="exchange">已售{{info.sold}}</view>
</view>
<view class="b" v-if="type== 1">{{info.server_name}}</view>
<view class="c" v-if="type== 1">{{info.server_category}}</view>
<view class="b" v-if="type== 2">{{info.recovery_name}}</view>
<view class="c" v-if="type== 2">{{info.recovery_category}}</view>
<view class="d">
<view class="l">
<image src="@/static/news/icon-recycling-05.png"></image>24小时客服
</view>
<view class="l">
<image src="@/static/news/icon-recycling-05.png"></image>未服务全额退
</view>
<view class="l">
<image src="@/static/news/icon-recycling-05.png"></image>未额外收费
</view>
<view class="l">
<image src="@/static/news/icon-recycling-05.png"></image>全程保障
</view>
</view>
</view>
<view class="recycling-select">
<view class="item">
<view class="a">已选</view>
<view class="b" v-if="type == 1">上门服务</view>
<view class="b" v-else @click="openPage(2)">{{selector[tabIndex]}}<u-icon name="arrow-right"></u-icon></view>
</view>
<view class="item" v-if="type == 2">
<view class="a">门店</view>
<view class="b" @click="openPage(4)">
{{storeIndex>=0?storeList[storeIndex].shop_name:'请选择门店'}}<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="item">
<view class="a">服务</view>
<view class="b">优质服务全程跟踪</view>
</view>
</view>
<view class="recycling-chat" hidden>
<view class="a">
<view class="l">用户评价<text>(30)</text></view>
<view class="r">查看更多 <u-icon name="arrow-right"></u-icon></view>
</view>
<view class="b">
<view class="item">全部12</view>
<view class="item">沟通愉快4</view>
</view>
<view class="c">
<view class="item" v-for="i in 5" :key="i">
<view class="name">
<image src="@/static/news/avater.png"></image>Shark特
</view>
<view class="desc">非常棒讲解细致下次还来</view>
</view>
</view>
</view>
<view class="recycling-bd">
<view class="title">产品详情</view>
<view class="conten" v-html="info.content"></view>
</view>
<view class="recycling-fd">
<view class="a">
<image src="@/static/news/icon-recycling-06.png"></image>客服
<button open-type="contact"></button>
</view>
<view class="c" v-if="type== 1" @click="openPage(3)">立即预约</view>
<view class="c" v-else @click="openPage(5)">立即预约</view>
</view>
<u-picker v-model="isShow" mode="selector" :range="selector" @confirm="confirm"></u-picker>
<!-- 选择门店 -->
<u-popup v-model="isShow1" mode="bottom" border-radius="12" mask-close-able="false" closeable>
<view class="recycling-classify">
<view class="recycling-classify-hd">门店列表</view>
<view class="recycling-classify-bd">
<scroll-view scroll-y class="m">
<view class="item" v-for="(a,i) in storeList" :key="i" @click="tabMItem(a,i)"><view :class="storeIndex == i?'item-on':''">{{a.shop_name}}</view></view>
</scroll-view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import * as newFunApi from '@/api/newFun'
export default{
data(){
return {
addressInfo: {},
tabIndex: 0,
isShow: false,
selector: ["门店回收","上门回收","邮寄回收"],
type: 1,
info: {},
storeInfo: {},
isShow1: false,
storeList:[],
storeIndex: -1,
}
},
onLoad(o) {
let info = uni.getStorageSync("getInfo");
if(info.content){
info.content.replace(/style=""/g,'').replace(/<img src=/g,'<img style="width: 100%; display:block" src=');
}
this.info = info;
this.type = o.type
uni.setNavigationBarTitle({
title: o.type == 1?"服务详情": '上门回收'
})
},
onShow() {
if(uni.getStorageSync("AccessToken")){
this.getList()
}
},
methods: {
//获取门店列表
async getList() {
const { status, data } = await newFunApi.storeList({
platform: 'H5'
})
if(status == 200){
this.storeList = data.list
}
},
openPage(index) {
if(index == 2){
this.isShow = true;
}else if(index == 3){
if(!uni.getStorageSync("AccessToken")){
uni.navigateTo({
url: "/pages/login/index"
})
return ;
}
uni.navigateTo({
url: "/pages/news/recycling/confirm?tabIndex="+this.tabIndex+"&id="+this.info.server_id+"&type="+this.type
})
}else if(index == 5){
if(!uni.getStorageSync("AccessToken")){
uni.navigateTo({
url: "/pages/login/index"
})
return ;
}
if(this.storeInfo && this.storeInfo.shop_id){
uni.setStorageSync("storeHsInfo",this.storeInfo)
uni.navigateTo({
url: "/pages/news/recycling/confirm1?tabIndex="+this.tabIndex+"&id="+this.info.recovery_id+"&type="+this.type
})
}else{
uni.showToast({
title: '请选择门店',
icon: "none",
})
}
}else if(index == 4){
if(!uni.getStorageSync("AccessToken")){
uni.navigateTo({
url: "/pages/login/index"
})
return ;
}
this.isShow1 = true
}
},
tabMItem(a,i){
this.storeInfo = a;
this.storeIndex = i;
this.isShow1 = false
},
confirm(e){
this.tabIndex = e[0]
},
}
}
</script>
<style lang="scss" scoped>
.recycling{
padding-bottom: 130rpx;
overflow: hidden;
&-classify{
width: 100%;
overflow: hidden;
&-hd{
padding: 30rpx 60rpx;
position: relative;
font-size: 32rpx;
font-weight: 500;
color: #303030;
text-align: center;
.a{
display: flex;
align-items: center;
font-size: 28rpx;
font-weight: 500;
color: #FF624F;
position: absolute;
top: 30rpx;
left: 40rpx;
z-index: 2;
}
}
&-bd{
overflow: hidden;
display: flex;
align-items: flex-start;
.l{
width: 210rpx;
height: 560rpx;
background-color: #F7F8FA;
.item{
text-overflow: ellipsis;
overflow: hidden;
height: 70rpx;
font-size: 28rpx;
font-weight: 400;
color: #303030;
white-space: nowrap;
line-height: 70rpx;
padding-left: 30rpx;
box-sizing: border-box;
text-align: left;
&-on{
background-color: #fff;
font-weight: 500;
}
}
}
.m{
width: 100%;
text-align: center;
max-height: 560rpx;
.item{
text-overflow: ellipsis;
overflow: hidden;
height: 70rpx;
font-size: 28rpx;
font-weight: 400;
color: #303030;
white-space: nowrap;
line-height: 70rpx;
padding-left: 80rpx;
box-sizing: border-box;
text-align: left;
&-on{
color: #FF624F;
}
}
}
.r{
width: 540rpx;
height: 560rpx;
.item{
text-overflow: ellipsis;
overflow: hidden;
height: 70rpx;
font-size: 28rpx;
font-weight: 400;
color: #303030;
white-space: nowrap;
line-height: 70rpx;
padding-left: 80rpx;
box-sizing: border-box;
&-on{
color: #FF624F;
}
}
}
}
}
&-hd{
width: 720rpx;
min-height: 262rpx;
background: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
margin-top: 20rpx;
padding: 25rpx;
box-sizing: border-box;
.a{
display: flex;
align-items: baseline;
justify-content: space-between;
.price{
font-size: 32rpx;
font-weight: 500;
color: #ED2B00;
text{
margin-left: 10rpx;
font-size: 48rpx;
}
}
.exchange{
font-size: 24rpx;
font-weight: 400;
color: #989898;
}
}
.b{
font-size: 28rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #000000;
line-height: 43rpx;
}
.c{
font-size: 28rpx;
color: #989898;
line-height: 43rpx;
}
.d{
display: flex;
align-items: center;
font-size: 20rpx;
font-weight: 400;
color: #CDA55E;
margin-top: 10rpx;
.l{
display: flex;
align-items: center;
margin-right: 20rpx;
}
image{
width: 40rpx;
height: 40rpx;
}
}
}
&-select{
width: 720rpx;
background: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
margin-top: 20rpx;
padding: 15rpx 25rpx;
box-sizing: border-box;
.item{
padding: 12rpx 0;
display: flex;
align-items: center;
overflow: hidden;
.a{
width: 100rpx;
font-size: 24rpx;
font-weight: 400;
color: #C4C4C4;
}
.b{
flex: 1;
font-size: 24rpx;
font-weight: 400;
color: #3D3D3D;
display: flex;
align-items: center;
justify-content: space-between;
}
}
}
&-chat{
width: 720rpx;
background: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
margin-top: 20rpx;
padding: 15rpx 25rpx;
box-sizing: border-box;
.a{
display: flex;
align-items: baseline;
justify-content: space-between;
font-size: 32rpx;
font-weight: 500;
color: #000000;
padding-top: 10rpx;
.l{
text{
font-size: 28psx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
color: #909090;
}
}
.r{
flex: 1;
display: flex;
align-items: center;
font-size: 24rpx;
font-weight: 400;
color: #909090;
}
}
.b{
overflow: hidden;
width: 100%;
display: flex;
flex-wrap: wrap;
padding: 10rpx 0;
.item{
line-height: 50rpx;
background: #FFE7E7;
border-radius: 8rpx;
font-size: 28rpx;
font-weight: 400;
color: #515151;
padding: 0 20rpx;
margin-right: 20rpx;
margin-top: 20rpx;
}
}
.c{
.item{
padding: 20rpx 0;
border-top: 1px solid #f3f3f3;
&:first-child{
border-top: 1px solid #FFFFFF;
}
overflow: hidden;
.name{
font-size: 28rpx;
font-weight: 400;
color: #515151;
display: flex;
align-items: center;
image{
width: 75rpx;
height: 75rpx;
border-radius: 50%;
margin-right: 20rpx;
}
}
.desc{
font-size: 28rpx;
font-weight: 400;
color: #515151;
line-height: 45rpx;
margin-top: 20rpx;
}
}
}
}
&-bd{
width: 720rpx;
background: #FFFFFF;
border-radius: 8rpx;
margin: 0 auto;
margin-top: 20rpx;
padding: 25rpx 25rpx;
box-sizing: border-box;
.a{
font-size: 32rpx;
font-weight: 500;
color: #000000;
}
.b{
width: 100%;
padding: 20rpx 0;
image{
width: 100%;
}
}
}
&-fd{
width: 100%;
height: 120rpx;
background-color: #FFFFFF;
padding: 25rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
position: fixed;
left: 0;
bottom: 0;
z-index: 99;
.a{
width: 100rpx;
text-align: center;
font-size: 20rpx;
font-weight: 400;
color: #3D3D3D;
image{
width: 40rpx;
height: 40rpx;
display: block;
margin: 0 auto;
}
}
.b{
width: 200rpx;
height: 78rpx;
line-height: 78rpx;
background: #FF9E2B;
border-radius: 78rpx;
text-align: center;
font-size: 24rpx;
font-weight: 600;
color: #FFFFFF;
margin-left: 20rpx;
}
.c{
width: 500rpx;
height: 78rpx;
line-height: 78rpx;
background: linear-gradient(102deg, #FE5E06 0%, #F3221A 100%);
border-radius: 78rpx;
text-align: center;
font-size: 24rpx;
font-weight: 600;
color: #FFFFFF;
margin-left: 20rpx;
}
}
}
</style>