480 lines
12 KiB
Vue
480 lines
12 KiB
Vue
|
<template>
|
|||
|
<view class="pb100">
|
|||
|
<view class="form-title">{{ $t('w_0065') }}</view>
|
|||
|
<view class="form-group mb20">
|
|||
|
<view class="form-item">
|
|||
|
<view class="form-label">
|
|||
|
<text class="domation mr10">*</text>
|
|||
|
{{ $t('MY_ORD_10') }}
|
|||
|
</view>
|
|||
|
<input class="form-input" type="text" v-model="FormData.recName" :placeholder="$t('S_C_70') + $t('MY_ORD_10') + $t('PER_DA_14')" />
|
|||
|
</view>
|
|||
|
<view class="form-item">
|
|||
|
<view class="form-label">
|
|||
|
<text class="domation mr10">*</text>
|
|||
|
{{ $t('w_0052') }}
|
|||
|
</view>
|
|||
|
<input class="form-input" type="text" v-model="FormData.recPhone" :placeholder="$t('w_0053')" />
|
|||
|
</view>
|
|||
|
<view class="form-item" @click="showMulLinkageThreePicker">
|
|||
|
<view class="form-label">
|
|||
|
<text class="domation mr10">*</text>
|
|||
|
{{ $t('w_0068') }}
|
|||
|
</view>
|
|||
|
<input class="form-input" disabled type="text" v-model="FormData.nameList" :placeholder="$t('CK_KS_38')" />
|
|||
|
<text class="icon iconfont icon-jiantou"></text>
|
|||
|
</view>
|
|||
|
<view class="form-item">
|
|||
|
<view class="form-label">
|
|||
|
<text class="domation mr10">*</text>
|
|||
|
{{ $t('S_C_27') }}
|
|||
|
</view>
|
|||
|
<textarea auto-height class="form-textarea" v-model="FormData.recAddress" :placeholder="$t('w_0070')" />
|
|||
|
</view>
|
|||
|
<view class="form-item">
|
|||
|
<view class="form-label">
|
|||
|
<text class="white mr10">*</text>
|
|||
|
{{ $t('MY_WAL_22') }}
|
|||
|
</view>
|
|||
|
<textarea auto-height class="form-textarea" v-model="FormData.remark" placeholder="" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="form-title">{{ $t('w_0073') }}</view>
|
|||
|
<view class="prefecture form-group mb20">
|
|||
|
<view class="d-b-s address-item" v-for="(item, index) in memberAddress" :key="index">
|
|||
|
<view class="radio-check d-c-c" :class="{ checked: checkedindex == index }" @click.stop="checkedFunc(item, index)">
|
|||
|
<u-icon name="checkbox-mark" color="#fff" size="26rpx"></u-icon>
|
|||
|
</view>
|
|||
|
<view class="flex-1">
|
|||
|
<view class="f28 gray3 fb mb10 d-s-s">
|
|||
|
{{ item.recName }}
|
|||
|
<text class="small-text-btn" v-if="item.isDefault == 1">{{ $t('w_0263') }}</text>
|
|||
|
</view>
|
|||
|
<!-- <view class="f26 gray3 mb10">{{item.recPhone}}</view> -->
|
|||
|
<view class="f24 gray9">{{ item.recArea }}</view>
|
|||
|
</view>
|
|||
|
<view class="d-c-c">
|
|||
|
<view class="icon-box plus d-c-c ml30" @click="gotoPage('/pages/user/address/edit?pkId=' + item.pkId)">
|
|||
|
<image class="add_icon_img edit" src="/static/icon/add-edit.png" mode="aspectFill"></image>
|
|||
|
</view>
|
|||
|
<view class="icon-box plus d-c-c ml30" @click="delAddress(item.pkId)">
|
|||
|
<image class="add_icon_img delete" src="/static/icon/add-delete.png" mode="aspectFill"></image>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="product-box">
|
|||
|
<view class="product-title">{{ $t('w_0077') }}</view>
|
|||
|
<view class="product-list order-product">
|
|||
|
<view v-for="(item, index) in productList" :key="index" class="product-item">
|
|||
|
<view class="d-b-s mb20">
|
|||
|
<image class="product-img" :src="item.cover" mode=""></image>
|
|||
|
<view class="product-info d-c d-b-s flex-1">
|
|||
|
<view class="text-ellipsis-2 f28 gray3">{{ item.productName }}</view>
|
|||
|
</view>
|
|||
|
<view class="f24 gray9 ml20">X{{ FormData.quantity }}</view>
|
|||
|
</view>
|
|||
|
<view class="mb10 gray9 f26">{{ $t('MN_F_41') }}:{{ item.specsName }}</view>
|
|||
|
</view>
|
|||
|
<view class="ww100 pt30">
|
|||
|
<view class="d-b-c mb20">
|
|||
|
<view class="flex-1 f26 gray9">{{ $t('w_0071') }}</view>
|
|||
|
<view class="f26 gray3">{{ currencyIcon() }}{{ postageData || '0.00' }}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<button class="normal-sub-btn" style="margin-top: 37rpx;" @click="subFunc">{{ $t('MY_CK_13') }}</button>
|
|||
|
<mpvueCityPicker v-if="is_load" ref="mpvueCityPicker" :province="province" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm"></mpvueCityPicker>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
|
|||
|
export default {
|
|||
|
components: {
|
|||
|
mpvueCityPicker
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
is_load: false,
|
|||
|
productList: [],
|
|||
|
/* 地址 */
|
|||
|
cityPickerValueDefault: [0, 0, 0],
|
|||
|
province: [],
|
|||
|
checkedindex: 0,
|
|||
|
showPop: true,
|
|||
|
FormData: {
|
|||
|
pkId: '',
|
|||
|
quantity: '',
|
|||
|
recAddress: '',
|
|||
|
recCity: '',
|
|||
|
recCounty: '',
|
|||
|
recName: '',
|
|||
|
recPhone: '',
|
|||
|
recProvince: '',
|
|||
|
nameList: ''
|
|||
|
},
|
|||
|
postageData: '0.0',
|
|||
|
memberAddress: []
|
|||
|
};
|
|||
|
},
|
|||
|
onLoad(e) {
|
|||
|
this.FormData.quantity = e.quantity;
|
|||
|
this.FormData.pkId = e.pkId;
|
|||
|
this.getAreaData();
|
|||
|
},
|
|||
|
onShow() {
|
|||
|
this.getMemberAddress();
|
|||
|
this.getData();
|
|||
|
},
|
|||
|
methods: {
|
|||
|
postage() {
|
|||
|
let self = this;
|
|||
|
this._get(
|
|||
|
'activity/api/pick/postage',
|
|||
|
{
|
|||
|
quantity: self.FormData.quantity,
|
|||
|
pkId: self.FormData.pkId,
|
|||
|
recProvince: self.FormData.recProvince,
|
|||
|
recCity: self.FormData.recCity
|
|||
|
},
|
|||
|
res => {
|
|||
|
self.postageData = res.data;
|
|||
|
}
|
|||
|
);
|
|||
|
},
|
|||
|
// 获取省市区
|
|||
|
getData() {
|
|||
|
let self = this;
|
|||
|
self._get(
|
|||
|
'activity/api/pick/detail',
|
|||
|
{
|
|||
|
quantity: self.FormData.quantity,
|
|||
|
pkId: self.FormData.pkId
|
|||
|
},
|
|||
|
function(res) {
|
|||
|
self.productList = res.data.detailList;
|
|||
|
}
|
|||
|
);
|
|||
|
},
|
|||
|
// 获取省市区
|
|||
|
getAreaData() {
|
|||
|
let self = this;
|
|||
|
self._get('system/api/area/tree', {}, function(res) {
|
|||
|
self.province = res.data;
|
|||
|
self.is_load = true;
|
|||
|
});
|
|||
|
},
|
|||
|
/*三级联动选择*/
|
|||
|
showMulLinkageThreePicker() {
|
|||
|
this.$refs.mpvueCityPicker.show();
|
|||
|
},
|
|||
|
checkedFunc(e, n) {
|
|||
|
this.checkedindex = n;
|
|||
|
this.FormData.recName = e.recName;
|
|||
|
this.FormData.recPhone = e.recPhone;
|
|||
|
this.FormData.recProvince = e.recProvince;
|
|||
|
this.FormData.recCity = e.recCity;
|
|||
|
this.FormData.recCounty = e.recCounty;
|
|||
|
this.FormData.nameList = e.recArea;
|
|||
|
this.FormData.recAddress = e.recAddress;
|
|||
|
this.FormData.dizhi = [e.recProvince, e.recCity, e.recCounty];
|
|||
|
this.postage();
|
|||
|
},
|
|||
|
/*确定选择的省市区*/
|
|||
|
onConfirm(e) {
|
|||
|
let self = this;
|
|||
|
self.FormData['rec' + 'Province'] = e.cityCode[0];
|
|||
|
self.FormData['rec' + 'City'] = e.cityCode[1];
|
|||
|
self.FormData['rec' + 'County'] = e.cityCode[2];
|
|||
|
self.FormData.nameList = self.getAddName();
|
|||
|
self.postage();
|
|||
|
},
|
|||
|
getAddName: function() {
|
|||
|
let self = this;
|
|||
|
let pid = 0;
|
|||
|
let cid = 0;
|
|||
|
let aid = 0;
|
|||
|
let defaultValue = [0, 0, 0];
|
|||
|
pid = self.FormData['rec' + 'Province'];
|
|||
|
cid = self.FormData['rec' + 'City'];
|
|||
|
aid = self.FormData['rec' + 'County'];
|
|||
|
defaultValue = self.cityPickerValueDefault;
|
|||
|
let address = self.getAddressName(pid, cid, aid, defaultValue);
|
|||
|
return address;
|
|||
|
},
|
|||
|
/* 省市区回显 */
|
|||
|
getAddressName(pid, cid, aid, piker) {
|
|||
|
let self = this;
|
|||
|
/* 省市区列表 */
|
|||
|
if (!self.province) {
|
|||
|
return;
|
|||
|
}
|
|||
|
let add = '';
|
|||
|
let citydata = [];
|
|||
|
let areadata = [];
|
|||
|
self.province.forEach((item, index) => {
|
|||
|
if (item['id'] == pid) {
|
|||
|
add += item['name'];
|
|||
|
citydata = item['children'];
|
|||
|
piker[0] = index;
|
|||
|
citydata.forEach((citem, cindex) => {
|
|||
|
if (citem['id'] == cid) {
|
|||
|
add += citem['name'];
|
|||
|
areadata = citem['children'] ? citem['children'] : [];
|
|||
|
piker[1] = cindex;
|
|||
|
if (areadata) {
|
|||
|
areadata.forEach((aitem, aindex) => {
|
|||
|
if (aitem['id'] == aid) {
|
|||
|
add += aitem['name'];
|
|||
|
piker[2] = aindex;
|
|||
|
return;
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
return add;
|
|||
|
},
|
|||
|
getMemberAddress() {
|
|||
|
let self = this;
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
self._get('member/api/member-address/list', {}, function(res) {
|
|||
|
if (res.code == 200) {
|
|||
|
self.memberAddress = res.data;
|
|||
|
let e = self.memberAddress[0];
|
|||
|
self.FormData.recName = e.recName;
|
|||
|
self.FormData.recPhone = e.recPhone;
|
|||
|
self.FormData.recProvince = e.recProvince;
|
|||
|
self.FormData.recCity = e.recCity;
|
|||
|
self.FormData.recCounty = e.recCounty;
|
|||
|
self.FormData.nameList = e.recArea;
|
|||
|
self.FormData.recAddress = e.recAddress;
|
|||
|
self.FormData.dizhi = [e.recProvince, e.recCity, e.recCounty];
|
|||
|
self.postage();
|
|||
|
resolve(true);
|
|||
|
} else {
|
|||
|
uni.showToast({
|
|||
|
title: res.msg,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
resolve(false);
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
},
|
|||
|
/*删除地址*/
|
|||
|
delAddress(e) {
|
|||
|
let self = this;
|
|||
|
wx.showModal({
|
|||
|
title: self.$t('w_0034'),
|
|||
|
content: self.$t('w_0088'),
|
|||
|
success: function(o) {
|
|||
|
o.confirm &&
|
|||
|
self._delete('member/api/member-address/' + e, {}, function(result) {
|
|||
|
if (result.code == 1) {
|
|||
|
uni.showToast({
|
|||
|
title: self.$t('w_0089'),
|
|||
|
duration: 2000
|
|||
|
});
|
|||
|
self.getMemberAddress();
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
},
|
|||
|
closeFunc(e) {
|
|||
|
console.log(e);
|
|||
|
if (e) {
|
|||
|
}
|
|||
|
this.showPop = false;
|
|||
|
},
|
|||
|
subFunc() {
|
|||
|
let self = this;
|
|||
|
let params = self.FormData;
|
|||
|
self._post('activity/api/pick/order', params, res => {
|
|||
|
self.gotoPage('/pages/order/cashier?orderCode=' + res.data + '&specialArea=8');
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss">
|
|||
|
.agreement-box {
|
|||
|
width: 750rpx;
|
|||
|
background: #ffffff;
|
|||
|
padding: 28rpx 22rpx;
|
|||
|
box-sizing: border-box;
|
|||
|
margin-top: 2rpx;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
.agreement-content {
|
|||
|
font-size: 24rpx;
|
|||
|
font-family: SourceHanSansCN;
|
|||
|
font-weight: 400;
|
|||
|
color: #999999;
|
|||
|
line-height: 32rpx;
|
|||
|
word-break: break-all;
|
|||
|
margin-bottom: 32rpx;
|
|||
|
}
|
|||
|
.agreement-btn {
|
|||
|
min-width: 320rpx;
|
|||
|
height: 76rpx;
|
|||
|
line-height: 1.5;
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
padding: 0 20rpx;
|
|||
|
box-sizing: border-box;
|
|||
|
background: #282828;
|
|||
|
border-radius: 38rpx;
|
|||
|
color: #ffffff;
|
|||
|
font-size: 24rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
.form-title {
|
|||
|
width: 750rpx;
|
|||
|
height: 106rpx;
|
|||
|
background: #fb3024;
|
|||
|
padding-left: 44rpx;
|
|||
|
position: relative;
|
|||
|
box-sizing: border-box;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #fff;
|
|||
|
line-height: 106rpx;
|
|||
|
font-weight: bold;
|
|||
|
z-index: 1;
|
|||
|
}
|
|||
|
.form-title::before {
|
|||
|
content: '';
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
bottom: 0;
|
|||
|
margin: auto;
|
|||
|
left: 25rpx;
|
|||
|
width: 6rpx;
|
|||
|
height: 24rpx;
|
|||
|
background-color: #fff;
|
|||
|
z-index: 1;
|
|||
|
}
|
|||
|
.form-group {
|
|||
|
padding: 0 22rpx;
|
|||
|
background: #ffffff;
|
|||
|
.form-item {
|
|||
|
min-height: 104rpx;
|
|||
|
box-sizing: border-box;
|
|||
|
padding: 15rpx 0;
|
|||
|
line-height: 1.5;
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
border-bottom: 1rpx solid #eee;
|
|||
|
.icon-jiantou {
|
|||
|
font-size: 32rpx;
|
|||
|
color: 090000;
|
|||
|
}
|
|||
|
.form-tips {
|
|||
|
font-size: 24rpx;
|
|||
|
color: #999;
|
|||
|
}
|
|||
|
.form-label {
|
|||
|
width: 170rpx;
|
|||
|
flex-shrink: 0;
|
|||
|
word-break: break-all;
|
|||
|
margin-right: 20rpx;
|
|||
|
font-size: 28rpx;
|
|||
|
}
|
|||
|
.disabled-input {
|
|||
|
width: 450rpx;
|
|||
|
height: 78rpx;
|
|||
|
padding: 0 18rpx;
|
|||
|
line-height: 78rpx;
|
|||
|
background: #eee;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #333;
|
|||
|
flex: 1;
|
|||
|
}
|
|||
|
.form-textarea {
|
|||
|
width: 450rpx;
|
|||
|
padding: 0 18rpx;
|
|||
|
line-height: 1.5;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #333;
|
|||
|
flex: 1;
|
|||
|
background: #fff;
|
|||
|
}
|
|||
|
.form-input {
|
|||
|
width: 450rpx;
|
|||
|
height: 78rpx;
|
|||
|
padding: 0 18rpx;
|
|||
|
line-height: 78rpx;
|
|||
|
background: #fff;
|
|||
|
font-size: 28rpx;
|
|||
|
color: #333;
|
|||
|
flex: 1;
|
|||
|
}
|
|||
|
}
|
|||
|
.form-item:last-child {
|
|||
|
border: none;
|
|||
|
}
|
|||
|
}
|
|||
|
.form-upload {
|
|||
|
padding: 30rpx 23rpx;
|
|||
|
}
|
|||
|
.form-upload-name {
|
|||
|
font-size: 28rpx;
|
|||
|
color: #333;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
}
|
|||
|
.form-upload-tips {
|
|||
|
font-size: 24rpx;
|
|||
|
color: #999;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
}
|
|||
|
.form-upload-tips2 {
|
|||
|
font-size: 24rpx;
|
|||
|
color: #fb3024;
|
|||
|
line-height: 1.5;
|
|||
|
}
|
|||
|
.upload-add {
|
|||
|
width: 142rpx;
|
|||
|
height: 142rpx;
|
|||
|
margin-right: 18rpx;
|
|||
|
margin-bottom: 18rpx;
|
|||
|
}
|
|||
|
.radiogroup::v-deep uni-radio:not([disabled]) .uni-radio-input:hover {
|
|||
|
border-color: #eee;
|
|||
|
}
|
|||
|
.radio-check {
|
|||
|
width: 34rpx;
|
|||
|
height: 34rpx;
|
|||
|
background: #ffffff;
|
|||
|
border: 1rpx solid #dddddd;
|
|||
|
border-radius: 50%;
|
|||
|
box-sizing: border;
|
|||
|
position: relative;
|
|||
|
margin-right: 20rpx;
|
|||
|
flex-shrink: 0;
|
|||
|
}
|
|||
|
.radio-check.checked {
|
|||
|
border: 1rpx solid #fb3024;
|
|||
|
background: #fb3024;
|
|||
|
}
|
|||
|
.product-box {
|
|||
|
padding: 26rpx 18rpx 36rpx 20rpx;
|
|||
|
background: #ffffff;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
.product-title {
|
|||
|
font-size: 28rpx;
|
|||
|
color: #333;
|
|||
|
margin-bottom: 5rpx;
|
|||
|
font-weight: bold;
|
|||
|
border-bottom: 1rpx solid #eee;
|
|||
|
padding-bottom: 28rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|