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

662 lines
15 KiB

<template>
<view class="recycling">
<view class="recycling-swiper">
<!-- <u-swiper :list="list" mode="number" height="750" indicator-pos="bottomRight"></u-swiper> -->
<image v-if="type==1" :src="info.server_image" mode="widthFix" style="width: 100%; max-height: 750rpx;">
</image>
<image v-else :src="info.recovery_image" mode="widthFix" style="width: 100%; max-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="b" v-if="type== 2">{{info.recovery_name}}</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="c" v-if="type== 2">{{info.recovery_category}}</view> -->
<view class="d">
<view class="l">
<image :src="$picUrl+'/static/news/icon-recycling-05.png'"></image>24小时客服
</view>
<view class="l">
<image :src="$picUrl+'/static/news/icon-recycling-05.png'"></image>未服务全额退
</view>
<view class="l">
<image :src="$picUrl+'/static/news/icon-recycling-05.png'"></image>未额外收费
</view>
<view class="l">
<image :src="$picUrl+'/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" @click="getCarouselList()">
<text v-html="serviceContent"></text>
<u-icon name="arrow-right"></u-icon>
</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="$picUrl+'/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" style="margin-top: 20rpx;" v-html="info.content"></view>
</view>
<view class="recycling-fd">
<view class="a" v-if="isToken">
<image :src="$picUrl+'/static/news/icon-recycling-06.png'"></image>客服
<button open-type="contact"></button>
</view>
<view class="a" v-else @click="openPage(6)">
<image :src="$picUrl+'/static/news/icon-recycling-06.png'"></image>客服
</view>
<!-- 10普通用户20会员30分销商40店主 -->
<!-- <template v-if="isToken == false || userInfo.user_type <= 20"> -->
<template v-if="isToken == false || userInfo.user_type <= 100">
<view class="c" v-if="type== 1" @click="openPage(3)">立即预约</view>
<view class="c" v-else @click="openPage(5)">立即预约</view>
</template>
<!-- <template v-else>
<view class="c">只对普通用户与会员用户预约</view>
</template> -->
</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'
import * as Api from '@/api/help'
export default {
data() {
return {
addressInfo: {},
tabIndex: 0,
isShow: false,
selector: ["门店回收", "上门回收", "邮寄回收"],
type: 1,
info: {},
storeInfo: {},
isShow1: false,
storeList: [],
storeIndex: -1,
isToken: false,
userInfo: {},
serviceContent: '优质服务全程跟踪'
}
},
onLoad(o) {
let info = uni.getStorageSync("getInfo");
if (info.content) {
info.content = info.content.replace(/<img src=/g, '<img style="width: 100%; display:block" src=')
console.log(info.content)
}
this.info = info;
this.type = o.type
uni.setNavigationBarTitle({
title: o.type == 1 ? "服务详情" : '旧物回收'
})
},
onShow() {
if (uni.getStorageSync("AccessToken")) {
this.getList()
this.userInfo = uni.getStorageSync("userInfo");
this.isToken = true;
} else {
this.userInfo = {}
this.isToken = false;
}
},
methods: {
// 获取预售规则
getCarouselList(type) {
const app = this;
Api.getAgreement({
type: 'recycling_services'
})
.then(result => {
let content = result.data.detail.content || '';
if (content) {
content = content.replace(/style=""/g, '').replace(/<img src=/g,
'<img style="width: 100%; display:block" src=')
}
this.serviceContent = this.setText(content)
})
.finally(() => app.isLoading = false)
},
setText(val) {
if (val != null && val != "") {
var re1 = new RegExp("<.+?>|&.+?;", "g"); //匹配html标签的正则表达式,"g"是搜索匹配多个符合的内容
var msg = val.replace(re1, ""); //执行替换成空字符
msg = msg.replace(/\s/g, ""); //去掉所有的空格(中文空格、英文空格都会被替换)
msg = msg.replace(/[\r\n]/g, ""); //去掉所有的换行符
return msg.substr(0, 100); //获文本文字内容的前100个字符
} else return ''
},
//获取门店列表
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
} else if (index == 6) {
uni.navigateTo({
url: "/pages/login/index"
})
}
},
tabMItem(a, i) {
this.storeInfo = a;
this.storeIndex = i;
this.isShow1 = false
},
confirm(e) {
this.tabIndex = e[0]
},
}
}
</script>
<style lang="scss" scoped>
.conten {
overflow: hidden;
::v-deep img {
width: 100% !important;
}
}
.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: 80rpx;
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: 30rpx;
font-weight: 400;
color: #C4C4C4;
}
.b {
flex: 1;
font-size: 30rpx;
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;
position: relative;
image {
width: 40rpx;
height: 40rpx;
display: block;
margin: 0 auto;
}
button {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 2;
opacity: 0;
}
}
.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>