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/confirm.vue

777 lines
17 KiB

<template>
<view class="recycling">
<view class="recycling-hd" v-if="type == 2">
<image :src="$picUrl+'/static/news/recyling-banner-01.png'"></image>
</view>
<view class="recycling-bd">
<view class="tab">
<view class="a" v-if="type == 2">
<view class="item" @click="tabItem(1)"></view>
<view class="item" @click="tabItem(2)"></view>
<view class="item" @click="tabItem(3)"></view>
</view>
<view class="b" v-if="type == 2">
<image v-if="tabIndex == 1" :src="$picUrl+'/static/news/icon-recyling-tab-01.png'"></image>
<image v-if="tabIndex == 2" :src="$picUrl+'/static/news/icon-recyling-tab-02.png'"></image>
<image v-if="tabIndex == 3" :src="$picUrl+'/static/news/icon-recyling-tab-03.png'"></image>
</view>
<view class="b" v-else>
<image :src="$picUrl+'/static/news/icon-recyling-tab-04.png'"></image>
</view>
</view>
<view class="goods">
<!-- <view class="a">
<image src="@/static/news/icon-mall.jpg"></image>京送家电武隆路店
</view> -->
<view class="b">
<!-- <view class="l">
<image class="pic" src="@/static/home/phone.jpg"></image>
<view class="info">
<view class="tel">13770577307</view>
<view class="address">杭州市萧山区宏达路234号 国际中心</view>
<view class="time">营业时间:10:00-18:00</view>
</view>
<view class="do">
<view class="tel">
<image src="@/static/news/tel.png"></image>电话
</view>
<view class="tel">
<image src="@/static/news/address.png"></image>导航
</view>
</view>
</view> -->
<view class="r">
<image class="pic" :src="info.server_image"></image>
<view class="info">
<view class="tel">{{info.server_name}}</view>
<view class="price">¥<text>{{info.server_price}}</text></view>
</view>
<view class="num">
x1
</view>
</view>
</view>
</view>
<view class="form">
<view class="item">
<view class="a">服务时间</view>
<view class="b" @click="openPage(1)">
<view class="select" :class="server_time?'select-on':''">{{server_time?server_time:(type == 1?'请选择预约上门时间':'请选择预约到店时间')}}
</view>
<u-icon style="margin-left: 10rpx;" name="arrow-right"></u-icon>
</view>
</view>
<view class="item">
<view class="a">优惠券</view>
<view class="b" @click="openPage(2)">
<view class="select" :class="couponIndex >= 0?'select-on':''">
{{couponIndex >= 0? couponList[couponIndex].name:(couponList.length > 0?(couponIndex == -9998?'不使用优惠券':'请选择优惠券'):'暂无优惠券')}}
</view>
<u-icon style="margin-left: 10rpx;" name="arrow-right"></u-icon>
</view>
</view>
<view class="item">
<view class="a">联系人</view>
<view class="b">
<input class="box1" v-model="username" type="text" placeholder="联系人姓名" />
<!-- <view class="radio">
<u-radio-group v-model="radioValue" active-color="red">
<u-radio name="先生">先生</u-radio>
<u-radio name="女士">女士</u-radio>
</u-radio-group>
</view> -->
</view>
</view>
<view class="item">
<view class="a">联系电话</view>
<view class="b">
<input class="box" v-model="mobile" type="number" placeholder="联系人手机号码" />
</view>
</view>
<view class="item" v-if="type == 1">
<view class="a">所在城市</view>
<view class="b" @click="addrshow=true">
<input type="text" disabled style="font-size: 28rpx;" placeholder="请选择地址"
v-model="region">
<u-icon name="arrow-right" color="#8B8B8B" size="30"></u-icon>
<u-picker @confirm="changeRegion" v-model="addrshow" mode="region"></u-picker>
</view>
</view>
<view class="item" v-if="type == 1">
<view class="a">详细地址</view>
<view class="b">
<input class="box" v-model="address" type="text" placeholder="例:12幢1单元102室" />
</view>
</view>
<view class="remark" style="margin-top: 20rpx;">
<view class="name">备注 :</view>
<view class="xu">
<view class="li" @click="openPage(5,'可提前来')">可提前来</view>
<view class="li" @click="openPage(5,'来之前打电话')">来之前打电话</view>
<view class="li" @click="openPage(5,'请尽快联系我')">请尽快联系我</view>
</view>
<view class="content">
<u-input v-model="remake" height="260" type="textarea" placeholder="请输入您的留言,最多可留言100字"
:border="true" />
</view>
</view>
</view>
</view>
<view class="recycling-fd">
<view class="a" v-if="type==2">免支付预购</view>
<view class="c" v-else style="color: #FE483B;font-size: 30rpx;">¥{{pay_price}}元</view>
<view class="b" @click="openPage(3)">提交订单</view>
</view>
<!-- 选择优惠券 -->
<u-popup v-model="isShow" 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" @click="tabMItem(-1,'-9998')">
<view :class="couponIndex == -9998?'item-on':''">不使用</view>
</view>
<view class="item" v-for="(a,i) in couponList" :key="i" @click="tabMItem(a,i)">
<view :class="couponIndex == i?'item-on':''">{{a.name}}</view>
</view>
</scroll-view>
</view>
</view>
</u-popup>
<!-- 时间选择器 -->
<u-picker mode="time" :params="params" v-model="show" confirm-color="#FE483B" :show-time-tag="false"
@confirm="confirm"></u-picker>
<addShuiyin />
</view>
</template>
<script>
import * as newFunApi from '@/api/newFun'
export default {
data() {
return {
params: {
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true
},
userInfo: {},
orderInfo: {},
list2: [],
pay_price: 0,
show2: true,
isShow: false,
show: false,
addrshow: false,
info: {},
type: 1,
isClick: true,
radioValue: "男士",
couponIndex: -9999,
tabIndex: 1,
fileList: [{
url: 'http://pics.sc.chinaz.com/files/pic/pic9/201912/hpic1886.jpg',
}],
tabMIndex: 0,
address: "",
coupon_id: "",
remake: "",
username: "",
mobile: "",
server_time: "",
region: [],
couponList: [],
server_id: "",
order_id: ""
}
},
onLoad(o) {
this.type = o.type;
this.server_id = o.id;
if (this.type == 1 && o.id) {
this.getServerCheckOrder()
}
},
methods: {
tabMItem(a, i) {
this.couponIndex = i
this.coupon_id = (a ? a.user_coupon_id : "")
this.isShow = false;
this.getServerCheckOrder(1)
},
//获取优惠券列表
async getServerCheckOrder(type) {
const {
status,
data
} = await newFunApi.serverCheckOrder({
server_id: this.server_id,
coupon_id: this.coupon_id
})
if (status == 200) {
this.info = data.info
this.couponList = data.coupon_list;
this.coupon_id = data.coupon_id
this.coupon_money = data.coupon_money
this.pay_price = data.pay_price
console.log(this.couponIndex)
}
},
confirm(e) {
this.server_time = e.year + "-" + e.month + '-' + e.day + " " + e.hour + "-" + e.minute + '-' + e.second
},
tabItem(i) {
this.tabIndex = i
},
changeRegion(e) {
this.addrshow = false
this.region = e.province.name + e.city.name + e.area.name;
},
openPage(i, a) {
if (i == 1) {
this.show = true
} else if (i == 2) {
this.isShow = true
} else if (i == 3) {
if (!this.server_time) {
uni.showToast({
icon: "none",
title: "服务时间不能为空"
})
return;
}
if (!this.username) {
uni.showToast({
icon: "none",
title: "联系人不能为空"
})
return;
}
if (!this.mobile) {
uni.showToast({
icon: "none",
title: "联系号码不能为空"
})
return;
}
if (!/^1[2|3|4|5|6|7|8|9]\d{9}$/.test(this.mobile)) {
uni.showToast({
icon: "none",
title: "联系号码格式不正确"
})
return;
}
if (this.region.length == 0) {
uni.showToast({
icon: "none",
title: "请选择所在城市"
})
return;
}
if (!this.address) {
uni.showToast({
icon: "none",
title: "详细地址不能为空"
})
return;
}
if (this.isClick == false) {
return;
}
this.isClick = false;
this.toServerCreateOrder();
} else if (i == 5) {
this.remake = a
} else {
}
},
//创建订单
async toServerCreateOrder() {
let {
status,
data,
message
} = await newFunApi.serverCreateOrder({
server_id: this.server_id,
client: 'MP-WEIXIN',
server_address: this.region[0] + this.region[1] + this.region[2] + this.address,
server_time: this.server_time,
coupon_id: this.coupon_id,
remake: this.remake,
username: this.username,
mobile: this.mobile,
})
if (status == 200) {
this.isClick = true
this.order_id = data.order_id
uni.redirectTo({
url: "/pages/news/recycling/pay?type=fuwu&order_id=" + data.order_id
})
} else {
this.isClick = true
uni.showToast({
icon: "none",
title: message
})
setTimeout(() => {
uni.redirectTo({
url: "/pages/news/recycling/orderList"
})
}, 2000)
}
},
}
}
</script>
<style lang="scss" scoped>
.recycling {
min-height: 100vh;
background-color: #FFFFFF;
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;
}
}
}
}
}
.slot-btn {
width: 80px;
height: 80px;
background: #FFFFFF;
border-radius: 10rpx;
border: 1px solid #C0C0C0;
text-align: center;
font-size: 24rpx;
font-weight: 500;
color: #D1D1D1;
image {
width: 50rpx;
height: 50rpx;
margin-top: 20rpx;
}
}
&-hd {
width: 686rpx;
height: 152rpx;
border-radius: 8rpx;
overflow: hidden;
margin: 0 auto;
margin-top: 30rpx;
image {
width: 100%;
height: 100%;
}
}
&-bd {
width: 690rpx;
min-height: 280rpx;
overflow: hidden;
margin: 0 auto;
margin-top: 30rpx;
position: relative;
.tab {
width: 690rpx;
height: 280rpx;
.b {
width: 100%;
height: 100%;
display: block;
image {
width: 100%;
height: 100%;
display: block;
}
}
.a {
width: 100%;
height: 98rpx;
position: absolute;
left: 0;
top: 0;
z-index: 2;
display: flex;
align-items: center;
.item {
flex: 1;
height: 100%;
}
}
}
.goods {
padding: 30rpx 35rpx;
overflow: hidden;
border-left: 1px solid #F1F1F1;
border-right: 1px solid #F1F1F1;
.a {
display: flex;
align-items: center;
image {
width: 50rpx;
height: 50rpx;
margin-right: 10rpx;
}
font-size: 28rpx;
font-weight: 500;
color: #000000;
}
.b {
padding: 20rpx 0;
overflow: hidden;
.l {
display: flex;
align-items: center;
overflow: hidden;
.pic {
width: 182rpx;
height: 146rpx;
border-radius: 6rpx;
margin-right: 10rpx;
}
.info {
width: 305rpx;
margin-right: 20rpx;
.title {
font-size: 24rpx;
font-weight: 400;
color: #5C5C5C;
}
.address {
font-size: 24rpx;
font-weight: 400;
color: #5C5C5C;
height: 80rpx;
line-height: 40rpx;
overflow: hidden;
}
.time {
font-size: 24rpx;
font-weight: 400;
color: #5C5C5C;
}
}
.do {
flex: 1;
text-align: center;
font-size: 20rpx;
font-weight: 400;
color: #989898;
display: flex;
align-items: center;
justify-content: space-between;
image {
width: 30rpx;
height: 30rpx;
display: block;
margin: 0 auto;
margin-bottom: 20rpx;
}
}
}
.r {
display: flex;
align-items: flex-start;
overflow: hidden;
margin-top: 30rpx;
.pic {
width: 182rpx;
height: 146rpx;
border-radius: 6rpx;
margin-right: 10rpx;
}
.info {
width: 305rpx;
margin-right: 20rpx;
.title {
font-size: 28rpx;
font-weight: 400;
color: #212121;
}
.price {
font-size: 32rpx;
font-weight: 500;
color: #FF584D;
margin-top: 20rpx;
}
}
.num {
flex: 1;
text-align: center;
font-size: 30rpx;
font-weight: 400;
color: #989898;
text-align: right;
}
}
}
}
.form {
padding: 0 40rpx;
overflow: hidden;
border-left: 1px solid #F1F1F1;
border-right: 1px solid #F1F1F1;
border-bottom: 1px solid #F1F1F1;
.remark {
.name {
font-size: 28rpx;
font-weight: 400;
color: #313131;
}
.xu {
display: flex;
flex-wrap: wrap;
overflow: hidden;
.li {
line-height: 52rpx;
background: #FFFFFF;
border-radius: 6rpx;
border: 1px solid #EDEDED;
padding: 0 20rpx;
margin-right: 20rpx;
text-align: center;
font-size: 24rpx;
font-weight: 400;
color: #949494;
margin-top: 20rpx;
}
}
.content {
padding: 20rpx 0 50rpx;
font-size: 28rpx;
color: #212121;
}
}
.photo {
padding: 20rpx 0;
overflow: hidden;
}
.item {
padding: 20rpx 0;
border-bottom: 1px solid #F4F4F4;
display: flex;
align-items: center;
.a {
width: 160rpx;
font-size: 28rpx;
font-weight: 400;
color: #313131;
line-height: 45rpx;
}
.b {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.select {
flex: 1;
font-size: 28rpx;
font-weight: 400;
line-height: 45rpx;
color: #949494;
&-on {
color: #212121;
}
}
.box {
flex: 1;
font-size: 28rpx;
color: #212121;
line-height: 45rpx;
}
.box1 {
width: 160rpx;
font-size: 28rpx;
color: #212121;
line-height: 45rpx;
}
.radio {
display: flex;
align-items: center;
justify-content: flex-end;
flex: 1;
border-left: 1px solid #E6E6E6;
}
}
}
}
}
&-fd {
width: 100%;
height: 120rpx;
background-color: #FFFFFF;
padding: 25rpx 25rpx;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
position: fixed;
left: 0;
bottom: 0;
z-index: 99;
.a {
font-size: 28rpx;
font-weight: 400;
color: #727272;
}
.b {
width: 502rpx;
height: 88rpx;
line-height: 88rpx;
background: #FE483B;
border-radius: 88rpx;
text-align: center;
font-size: 28rpx;
font-weight: 600;
color: #FFFFFF;
}
}
}
</style>