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.

614 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<page-meta :page-style="'overflow:'+(showinfo?'hidden':'visible')"></page-meta>
<view class="cotainer">
<view class="orderInfo">
<view class="orderInfo-img">
<u-image :src="require('@/static/share.jpg')" height="350"></u-image>
<view>您提货的商品是</view>
</view>
<view class="orderInfo-info">
<u-image :src="require('@/static/share.jpg')" width="100" height="100"></u-image>
<view>{{cardInfo.sku?cardInfo.sku.name:''}}{{cardInfo.sku?cardInfo.sku.specs:''}}</view>
</view>
<view class="orderInfo-status">
<view>
<view>卡劵状态</view>
<view v-html="cardInfo.status_label"></view>
</view>
<view>
<view>卡劵状态</view>
<view v-html="cardInfo.status_label"></view>
</view>
<view>
<view>今日剩余可提货量</view>
<u-button size="mini">99</u-button>
</view>
</view>
</view>
<view class="orderForm">
<u-form :model="form" ref="uForm">
<u-form-item label="预约提货时间" required prop="send_date" label-position="top">
<u-input v-model="form.send_date" placeholder="请选择预约提货时间" @click="showCalendar = true"
type="select" />
</u-form-item>
<view class="orderForm-address">
<text><text>*</text>收货地址</text>
<u-button @click="changeLocation" size="mini">获取位置</u-button>
</view>
<u-form-item label=" " prop="area" label-position="top">
<u-input v-model="form.area" placeholder="请选择收货地址" @click="openArea" type="select" />
</u-form-item>
<u-form-item label="详细地址" required prop="address" label-position="top">
<u-input v-model="form.address" placeholder="请填写详细地址" type="textarea" />
</u-form-item>
<u-form-item label="收货人姓名" label-width="150" required prop="contact" label-position="left">
<u-input v-model="form.contact" placeholder="请填写收货人姓名" />
</u-form-item>
<u-form-item label="收货人电话" label-width="150" required prop="mobile" label-position="left">
<u-input v-model="form.mobile" placeholder="请填写收货人电话" />
</u-form-item>
<u-form-item label="备用电话" label-width="150" prop="mobile2" label-position="left">
<u-input v-model="form.mobile2" placeholder="请填写备用电话" />
</u-form-item>
<u-form-item label="是否本人收货" label-width="180" prop="myself" label-position="left">
<u-input v-model="myself" placeholder="请选择是否本人收货" @click="showIsMySelf = true" type="select" />
</u-form-item>
<u-form-item label="购买人姓名" label-width="150" prop="buy_name" label-position="left">
<u-input v-model="form.buy_name" placeholder="请填写购买人姓名" />
</u-form-item>
<u-form-item label="购买人电话" label-width="150" prop="buy_mobile" label-position="left">
<u-input v-model="form.buy_mobile" placeholder="请填写购买人电话" />
</u-form-item>
</u-form>
<view class="orderForm-btn">
<u-button type="primary" @click="submit">确认提货</u-button>
</view>
</view>
<!-- <u-calendar max-date="2050-12-31" v-model="showCalendar" @change="changeDate" :mode="'date'"></u-calendar> -->
<!-- <u-picker mode="region" v-model="showArea" @confirm="changeArea"></u-picker> -->
<aui-picker ref="pickers" :title="'地区选择'" :data="listArea" @callback="changeArea"></aui-picker>
<u-select @confirm="changeDate" v-model="showCalendar" :list="listDates"></u-select>
<u-select @confirm="changeIsMySelf" v-model="showIsMySelf" :list="listIsMySelf"></u-select>
<!-- 确认信息 -->
<view class="showinfo" v-if="showinfo">
<view class="content">
<view class="showinfo-info">
<view>您提货的商品是</view>
<u-image :src="require('@/static/share.jpg')" width="450" height="450"></u-image>
<view>{{cardInfo.sku?cardInfo.sku.name:''}}{{cardInfo.sku?cardInfo.sku.specs:''}}</view>
</view>
<view class="showinfo-wrap">
<view>发货时间</view>
<view style="text-align: center;">{{momentDay(date)}}</view>
</view>
<view class="showinfo-wrap">
<view>收货信息</view>
<view>
<view>
<text>收货人</text>
<text>{{form.contact}}</text>
</view>
<view>
<text>收货人电话</text>
<text>{{form.mobile}}</text>
</view>
<view>
<text>收货地址</text>
<text>{{form.area}}{{form.address}}</text>
</view>
</view>
</view>
<view class="showinfo-btn">
<u-button @click="showinfo = false">返回修改</u-button>
<u-button type="primary" @click="submit"></u-button>
</view>
</view>
</view>
<!-- 选择地址 -->
<view class="addressinfo" v-if="showAddress">
<view class="content">
<view class="content-close" @click="showAddress=false">
<u-icon name="close-circle" color="#000" size="50"></u-icon>
</view>
<view class="content-wrap">
<u-radio-group v-model="addressInfo" @change="changeAddress">
<u-radio v-for="(item, index) in listAddress" :key="index" :name="item.id">
<view class="content-contact">{{item.contact}} {{item.mobile}}</view>
<view class="content-address">{{item.area}}{{item.address}}</view>
</u-radio>
</u-radio-group>
</view>
</view>
</view>
</view>
</template>
<script>
import {
toast,
isMobile,
isNull
} from '@/common/util.js'
import solarLunar from '@/node_modules/solarlunar';
import auiPicker from '@/components/aui-picker.vue';
export default {
components: {
auiPicker
},
data() {
return {
showinfo: false,
showAddress: false,
listAddress: [],
addressInfo: '',
cardInfo: {},
form: {
card_number: '',
password: '',
send_date: '',
area: '',
address: '',
province_id: '',
city_id: '',
district_id: '',
contact: '',
mobile: '',
mobile2: '',
myself: 1,
buy_name: '',
buy_mobile: ''
},
listDates: [],
showCalendar: false,
date: '',
listArea: [],
showArea: false,
showIsMySelf: false,
myself: '是',
listIsMySelf: [{
value: 1,
label: '是'
}, {
value: 0,
label: '否'
}],
rules: {
send_date: [{
required: true,
message: '请选择预约提货时间',
trigger: ['change', 'blur'],
}],
area: [{
required: true,
message: '请选择收货地址',
trigger: ['change', 'blur'],
}],
address: [{
required: true,
message: '请填写详细地址',
trigger: ['blur'],
}],
contact: [{
required: true,
message: '请填写收货人姓名',
trigger: ['blur'],
}],
mobile: [{
required: true,
message: '请填写收货人电话',
trigger: ['blur'],
}, {
validator: (rule, value, callback) => {
return this.$u.test.mobile(value);
},
message: '手机号码不正确',
trigger: ['blur'],
}]
}
}
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
onLoad(option) {
if (option.hasCard) {
this.cardInfo = uni.getStorageSync("vuex_card") ? uni.getStorageSync("vuex_card").card : {}
this.form.card_number = uni.getStorageSync("vuex_card") ? uni.getStorageSync("vuex_card").card_number : ''
this.form.password = uni.getStorageSync("vuex_card") ? uni.getStorageSync("vuex_card").password : ''
uni.removeStorageSync("vuex_card")
this.getAddress()
this.getDates()
this.getArea()
} else {
toast("未查询到卡券信息")
uni.removeStorageSync("vuex_card")
uni.redirectTo({
url: '/pages/change/change'
})
}
},
methods: {
async getAddress() {
const res = await this.$u.api.getUserAddress()
this.listAddress = res.address
this.showAddress = this.listAddress.length > 0 ? true : false
},
changeAddress(e) {
console.log("e", e)
if (e) {
this.listAddress.map(item => {
if (item.id == e) {
this.form.address_id = item.id
this.form.area = item.area
this.form.address = item.address
this.form.province_id = item.province_id
this.form.city_id = item.city_id
this.form.district_id = item.district_id
this.form.contact = item.contact
this.form.mobile = item.mobile
this.showAddress = false
}
})
}
},
async getDates() {
await this.$u.api.getDates({
card_number: this.form.card_number,
password: this.form.password
}).then(res => {
console.log("dare", res)
let data = res.card
if (data.open_dates) {
for (var k in data.open_dates) {
this.listDates.push({
label: k,
value: k
})
}
}
}).then(res => {
})
},
changeDate(e) {
console.log(e)
if (e) {
// this.form.send_date = e.result
// this.date = e
this.date = e[0].label
this.form.send_date = e[0].value
}
},
async getArea() {
const res = await this.$u.api.getRegion()
this.listArea = res.regions
console.log(res)
console.log(this.listArea)
},
openArea() {
this.$refs.pickers.open().then(function() {
console.log('picker打开');
});
},
changeArea(e) {
console.log(e)
// return
if (e) {
let data = e.data
let _this = this
data.forEach(function(item, index) {
_this.form.area += item.value + ' ';
});
this.form.province_id = data[0] ? data[0].id : ''
this.form.city_id = data[1] ? data[1].id : ''
this.form.district_id = data[2] ? data[2].id : ''
console.log(this.form)
// this.form.area = e.province.label + e.city.label + e.area.label
// this.$u.api.matchRegion({
// province: e.province.label,
// city: e.city.label,
// district: e.area.label
// }).then(res => {
// this.form.province_id = res.province_id ? res.province_id.id : ''
// this.form.city_id = res.city_id ? res.city_id.id : ''
// this.form.district_id = res.district_id ? res.district_id.id : ''
// })
}
},
changeIsMySelf(e) {
console.log(e)
if (e) {
this.myself = e[0].label
this.form.myself = e[0].value
}
},
changeLocation() {
console.log("location")
let _this = this
uni.authorize({
scope: 'scope.userLocation',
success: (res) => {
console.log("authorize", res)
uni.chooseLocation({
success(res) {
console.log("res", res)
_this.form.area = res.address
_this.form.address = res.name
},
fail(res) {
console.log("fail", res)
}
})
},
fail(res) {
console.log("authorize-fail", res)
}
})
},
momentDay(date) {
console.log(date)
if(date){
const weeks = ["周日",'周一','周二','周三','周四','周五','周六',]
let dateArr = date.split("-")
let ymd = this.$moment(date).format("YYYY年MM月DD日")
let week = weeks[this.$moment(date).day()]
console.log(this.$moment(date).format("YYYY年MM月DD日"))
// return
const solar2lunarData = solarLunar.solar2lunar(dateArr[0], dateArr[1], dateArr[2]);
console.log(`农历${solar2lunarData.monthCn}${solar2lunarData.dayCn}`);
// return this.date + " " + LL
return `${ymd} ${week} 农历${solar2lunarData.monthCn}${solar2lunarData.dayCn}`
}
},
submit() {
if ((!isNull(this.form.mobile2) && this.form.mobile2.length > 0) || (!isNull(this.form.buy_mobile) && this
.form.buy_mobile.length > 0)) {
if (!isMobile(this.form.mobile2)) {
toast('备用电话不正确')
return
}
if (!isMobile(this.form.buy_mobile)) {
toast('购买人电话不正确')
return
}
}
this.$refs.uForm.validate(valid => {
console.log('验证通过');
if (valid) {
if (!this.showinfo) {
this.showinfo = true
console.log("this.showinfo", this.showinfo)
} else {
console.log('submit');
this.form.show = 0
this.$u.api.addUserOrder(this.form).then(res => {
console.log("res", res)
uni.removeStorageSync('vuex_card')
toast(res.msg)
setTimeout(function() {
uni.redirectTo({
url: '/packages/myorder/myorder'
})
}, 2000)
}).then(res => {
console.log('res1', res)
})
}
} else {
console.log('验证失败');
}
});
}
}
}
</script>
<style lang="scss">
.cotainer {
padding: 40rpx;
.addressinfo {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, .5);
z-index: 9999999;
display: flex;
align-items: center;
justify-content: center;
.content {
width: 80%;
height: 600rpx;
position: relative;
&-wrap {
box-sizing: border-box;
background: #fff;
border-radius: 20rpx;
overflow: scroll;
width: 100%;
height: 100%;
padding: 40rpx;
}
&-close {
position: absolute;
top: -20rpx;
right: -20rpx;
}
.u-radio {
align-items: baseline;
}
&-contact {}
&-address {
color: #ccc;
line-height: 1.2;
font-size: 28rpx;
}
}
}
.showinfo {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, .5);
z-index: 9999999;
display: flex;
align-items: center;
justify-content: center;
.content {
width: 100vw;
height: 100vh;
padding: 40rpx;
box-sizing: border-box;
background: #fff;
// border-radius: 16rpx;
overflow: scroll;
}
&-info {
display: flex;
flex-wrap: wrap;
justify-content: center;
>view {
margin: 20rpx;
font-size: 36rpx;
&:last-child {
width: 350rpx;
color: #ccc;
font-size: 28rpx;
text-align: center;
}
}
}
&-wrap {
>view {
&:first-child {
text-align: center;
margin: 20rpx;
}
&:last-child {
border: 1px solid #333;
padding: 20rpx;
border-radius: 15rpx;
font-weight: bold;
>view {
margin-bottom: 10rpx;
}
}
}
}
&-btn {
display: flex;
align-items: center;
justify-content: center;
margin: 30rpx;
u-button {
margin: 0 20rpx;
}
}
}
.orderInfo {
&-img {
text-align: center;
>view {
padding: 20rpx;
}
}
&-info {
display: flex;
align-items: center;
>view {
margin-left: 30rpx;
padding: 0 40rpx;
font-weight: bold;
}
}
&-status {
display: flex;
align-items: center;
flex-wrap: wrap;
>view {
width: calc(50% - 40rpx);
margin: 20rpx;
display: flex;
align-items: center;
margin-left: 0;
&:last-child {
width: 100%
}
>view {
margin-right: 20rpx;
}
}
}
}
.orderForm {
&-address {
height: 72rpx;
display: flex;
justify-content: space-between;
align-items: center;
line-height: 72rpx;
padding-top: 20rpx;
position: relative;
text {
text {
position: absolute;
left: -16rpx;
vertical-align: middle;
color: #fa3534;
padding-top: 6rpx;
}
}
}
&-btn {
margin: 40rpx;
}
}
}
</style>