web-retail-h5/pages/other/haiConfirm.vue

855 lines
22 KiB
Vue
Raw Normal View History

2025-03-23 09:29:40 +08:00
<!--
* @Descripttion:
* @version:
* @Author: kBank
* @Date: 2022-11-21 15:11:22
-->
<template>
<view class="content">
<view class="context">
<u-form :model="form"
labelWidth="75"
:rules="rules"
ref="uForm">
<view class="subTxt">
<view>{{$t('w_0065')}}</view>
</view>
<u-form-item :label="$t('MY_ORD_10')"
borderBottom
prop="recName">
<u-input v-model="form.recName"
border="none"
:placeholder="$t('w_0067')" />
</u-form-item>
<u-form-item :label="$t('w_0242')"
borderBottom
prop="recPhone">
<u-input v-model="form.recPhone" maxlength="20"
border="none"
type="number"
:placeholder="$t('w_0321')" />
</u-form-item>
<u-form-item :label="$t('w_0068')"
borderBottom
prop="diqu"
@click='getDiqu'>
<view class="disFlex justBwn">
<u-input v-model="form.diqu"
:placeholder="$t('w_0322')"
border="none"></u-input>
<u-icon name="arrow-right"></u-icon>
</view>
</u-form-item>
<u-form-item :label="$t('S_C_27')"
borderBottom
prop="recAddress">
<u-input v-model="form.recAddress"
border="none"
maxlength="200"
:placeholder="$t('w_0070')" />
</u-form-item>
<u-form-item :label="$t('w_0071')"
borderBottom>
<u-input disabled
border="none"
v-model="form.postage" />
</u-form-item>
<u-form-item :label="$t('MY_WAL_22')"
borderBottom>
<u-input v-model="form.remark"
border="none"
:placeholder="$t('w_0072')" />
</u-form-item>
</u-form>
<view class="heng">
</view>
<view class="subTxt">
<view>{{$t('w_0073')}}</view>
</view>
<u-radio-group v-model="moren"
shape="circle"
placement="column"
@change="checkRadio">
<view v-for="item in addressList"
:key="item.pkId"
class="disFlex address_a">
<u-radio activeColor="red"
:name="item.pkId"></u-radio>
<view class="address_r">
<view class="disFlex justBwn">
<view class="disFlex">
<view>{{item.recName}}</view>
<view class="mr" v-show="item.isDefault == 1">{{$t('w_0263')}}</view>
</view>
<view class="disFlex">
<u-icon name="edit-pen"
@click="editAddress(item)"
style="margin-right:20rpx"
color="#999999"
size="20"></u-icon>
<u-icon name="trash"
@click="delAds(item.pkId)"
color="#999999"
size="20"></u-icon>
</view>
</view>
<view class="address_rc">{{item.recPhone}}</view>
<view class="tit3">{{item.recArea}}{{item.recAddress}}</view>
</view>
</view>
</u-radio-group>
<view v-for="(item, index) in goodList"
:key="index"
class="goodList">
<view class="goodList_i">
<view class="goodList_it">
<img :src="item.cover"
class="cover"
alt="">
<view class="goodList_ir">
<view class="goodList_ib">
<view class="tit1">
{{ item.productName }}
</view>
<view class="tit5">
x{{ item.quantity }}
</view>
</view>
<view class="goodList_ib">
<view class="tit2">
{{ item.waresPrice | numberToCurrency | isLocal}}
</view>
<view class="tit3">PV: {{ item.pv | numberToCurrency | isLocal}}</view>
</view>
</view>
</view>
<view v-for="(stem,sndex) in item.waresSkuList"
:key="sndex"
class="product_i">
<img :src="stem.image"
alt="">
<view class="product_il">
<view class="tit4">{{ stem.specValueNames }} </view>
<!-- <view class="tit5">x{{ stem.quantity }}</view> -->
</view>
</view>
<view class="fen">
<view class="disFlex justBwn">
<view class="tit3">{{$t('w_0080')}}(PV)</view>
<view class="tit1">{{ item.pvAmount | numberToCurrency}}</view>
</view>
<view class="disFlex justBwn">
<view class="tit3">{{$t('w_0093')}}</view>
<view class="tit1">{{ item.priceAmount | numberToCurrency}}</view>
</view>
</view>
</view>
</view>
<view class="pad">
<!-- <view class="disFlex justBwn">
<view class="tit3">{{$t('w_0083')}}(¥)</view>
<view class="tit1">{{ priceAmount | numberToCurrency | isLocal}}</view>
</view> -->
<view class="disFlex justBwn">
<view class="tit3">{{$t('w_0071')}}:</view>
<view class="tit1">{{ form.postage | numberToCurrency | isLocal}}</view>
</view>
<view class="disFlex justBwn">
<view class="tit3">{{$t('w_0325')}}</view>
<view class="tit1">{{ totalAmont | numberToCurrency | isLocal}}</view>
</view>
<!-- <view class="disFlex justBwn">
<view class="tit3">{{$t('ENU_TOTAL_V_1')}}</view>
<view class="tit1">{{ allGoodsData.achieveAmount | numberToCurrency | isLocal}}</view>
</view> -->
</view>
</view>
<!-- 占空 -->
<view style="height:296rpx"></view>
<!-- 底部 -->
<view class="footer_f">
<view class="footer">
<view class="footer_l">
<u-checkbox-group v-model="agreementShow"
shape="circle"
activeColor="#FB3024"
@change="checkboxChange">
<u-checkbox :name="1">
</u-checkbox>
</u-checkbox-group>
<view class="tit3">{{$t('w_0207')}}</view>
<view class="tit2"> {{$t('w_0208')}}</view>
</view>
<view class="footer_r">
<u-button type="success"
class="uBtn"
shape="circle"
:loading="isLoading"
:loadingText="$t('w_0313')"
@tap="goBuy"
color="linear-gradient(to right, #fb3024, #fb3024 )">{{$t('w_0085')}}</u-button>
</view>
</view>
</view>
<!-- 发货方式 -->
<u-picker :show="isDelivery"
@cancel='isDelivery=false'
@confirm="sureDelivery"
:columns="deliList"
keyName="label"></u-picker>
<!-- 运输方式 -->
<u-picker :show="isTrans"
@cancel='isTrans=false'
@confirm="sureTrans"
:columns="transList"
keyName="label"></u-picker>
<!-- 强制阅读协议 -->
<mustAgreeMent :waresCodeList='waresCodeList'></mustAgreeMent>
<u-modal :show="delAddress"
showConfirmButton
showCancelButton
:content="$t('w_0088')+''"
confirmColor='#DE3932'
@confirm="toDel"
@cancel="delAddress=false"
ref="uModal"
:asyncClose="true"></u-modal>
<v-address ref="address"
:defaultCode="defaultCode"
@addressData="addressData"></v-address>
</view>
</template>
<script>
import address from '@/components/address.vue'
import * as api from '@/config/regiest'
import mustAgreeMent from '@/components/mustAgreeMent.vue'
export default {
components: {
'v-address': address,
mustAgreeMent,
},
data() {
return {
delAddress:false,
waresCodeList: [],
defaultCode: [],
moren: '',
addressList: [],
deliList: [],
transList: [],
bankList: [],
isDelivery: false,
isBank: false,
isTrans: false,
placeList: [
[
{
id: 1,
label: this.$t('ENU_PLACE_D_1'),
},
{
id: 2,
label: this.$t('ENU_PLACE_D_2'),
},
],
],
isPlace: false,
countryIndex: 0,
isCountry: false,
userInfo: '',
countryList: [],
isClick: 0,
specialArea: 21,
shoppingArr: [],
allGoodsData: {
specialArea: 21,
},
pageList: {
mail: false,
card: false,
bankName: false,
bankNo: false,
accountBranch: false,
},
form: {
deliveryName: this.$t('ENU_DELIVERY_1'),
deliveryWay: 1,
postage: 0,
transType: 1,
pkGradeVal: '',
},
deliList: [],
diqu: '',
allData: [],
goodsNum: 1,
agreementShow: [],
priceAmount: 0, //商品总价
achiveAmount: 0, //总业绩
totalAmont: 0,
orderItemsParams: [],
isLoading: false,
centerCodeId: '',
rules: {
upgradeMemberCode: [
{
required: true,
validator: this.upgradeMemberCodePass,
trigger: ['blur'],
},
],
recName: [
{
required: true,
message: this.$t('w_0067'),
trigger: ['change', 'blur'],
},
],
recPhone: [
{
required: true,
message: this.$t('w_0321'),
trigger: ['change', 'blur'],
},
],
diqu: [
{
required: true,
message: this.$t('w_0069'),
trigger: ['change', 'blur'],
},
],
recAddress: [
{
required: true,
message: this.$t('w_0070'),
trigger: ['change', 'blur'],
},
],
},
allDataObj: {
pgpList: [],
},
goodList: [],
postList: [],
delId:''
}
},
onLoad(options) {
// // 数据源
// this.allData = JSON.parse(options.allData)
this.allData = JSON.parse(uni.getStorageSync('haiConfirm'))
let confirmOrderWaresInfoParamsList = []
this.allData.forEach((item) => {
item.waresSkuList.forEach((ctem) => {
confirmOrderWaresInfoParamsList.push({
pkTWares: ctem.pkTWares,
pkTWaresSku:ctem.pkTWaresSku||ctem.pkThWaresSku,
quantity: item.quantity,
source: item.source,
})
})
})
this.shoppingArr = JSON.parse(options.shoppArr)
// 获取购物车详情
this.getCatDetail(confirmOrderWaresInfoParamsList)
// 幂等性
this.getGenerate()
// 登录信息
this.userInfo = uni.getStorageSync('User')
this.form.upgradeMemberCode = this.userInfo.memberCode
this.getUserName()
},
onShow() {
// 获取地址
this.getAddressList()
},
methods: {
editAddress(item) {
uni.navigateTo({
url: '/pages/address/index?pkId=' + item.pkId,
})
},
delAds(id) {
this.delId = id
this.delAddress = true
},
toDel() {
api.delAddress(this.delId).then((res) => {
uni.showToast({
title: this.$t('w_0089'),
icon: 'none',
})
this.getAddressList()
})
this.delAddress = false
},
getCatDetail(confirmOrderWaresInfoParamsList) {
api
.waresinfo({
confirmOrderWaresInfoParamsList: confirmOrderWaresInfoParamsList,
})
.then((res) => {
this.goodList = res.data
let price = 0
this.goodList.forEach((item) => {
item.waresItemsParamList = []
price += parseFloat(item.priceAmount)
item.waresSkuList.forEach((ctem) => {
item.waresItemsParamList.push({
pkWaresSpecsSku: ctem.pkId,
})
})
})
this.priceAmount = price
this.totalAmont = price
let arr = []
this.goodList.forEach((item) => {
arr.push({
channel: item.source,
pkId: item.pkId,
quantity: item.quantity,
waresItemsParamList: item.waresItemsParamList,
})
})
this.postList = arr
this.allGoodsData.specialArea = 21
// 获取地址
// this.getAddressList()
// 获取运输方式
this.getTransList()
// 获取发货方式
this.getDeliveryList()
})
},
checkAddress() {},
// 升级编号获取name
upgradeMemberCodePass(rule, value, callback) {
if (!value) {
callback(new Error(this.$t('w_0046')))
} else {
api
.upgRel({
upgradeMemberCode: value,
})
.then((res) => {
if (res.code == 200) {
this.form.upgradeMemberName = res.data.upgradeMemberName
// this.getMember()
this.$forceUpdate()
callback()
} else {
callback(new Error(res.msg))
}
})
.catch((err) => {
callback(new Error(err))
})
}
},
getAddressList() {
api.addressList().then((res) => {
this.addressList = res.data
this.addressList.forEach((item) => {
if (item.isDefault == 1) {
this.moren = item.pkId
this.checkRadio()
}
})
})
},
getUserName() {
api
.upgRel({
upgradeMemberCode: this.form.upgradeMemberCode,
})
.then((res) => {
if (res.code == 200) {
this.form.upgradeMemberName = res.data.upgradeMemberName
this.$forceUpdate()
}
})
},
checkboxChange(e) {
console.log(
'%c [ e ]-749',
'font-size:13px; background:#384d26; color:#7c916a;',
e
)
},
checkRadio() {
let arr = []
this.addressList.forEach((item) => {
if (item.pkId == this.moren) {
this.form.recName = item.recName
this.form.nameList = item.recArea
this.form.recPhone = item.recPhone
this.form.recAddress = item.recAddress
this.form.recProvince = item.recProvince
this.form.recCity = item.recCity
if (item.recCounty) {
this.form.diqu = `${item.recProvinceVal}-${item.recCityVal}-${item.recCountyVal}`
this.form.recCounty = item.recCounty
} else {
this.form.diqu = `${item.recProvinceVal}-${item.recCityVal}`
this.form.recCounty = ''
}
this.defaultCode = [
item.recProvince,
item.recCity,
item.recCounty || '',
]
}
})
this.allGoodsData.deliveryWay = this.form.deliveryWay
this.allGoodsData.transType = this.form.transType
this.getPostAge()
this.$forceUpdate()
},
getPostAge() {
let deleteList = []
this.shoppingArr.forEach((item) => {
deleteList.push({
shoppingId: item,
})
})
this.allGoodsData.deleteList = deleteList
api.queryPostage(Object.assign({specialArea:21},this.allGoodsData,this.form)).then((res) => {
this.form.postage = res.data.postage
this.totalAmont =
parseFloat(this.priceAmount) +
parseFloat(res.data.postage)
})
},
getTransList() {
api.transportList().then((res) => {
let data = res.data.map((item) => {
return {
id: item.value,
label: item.label,
}
})
this.transList = [data]
if (this.userInfo.pkCountry == 1) {
this.form.transType = 1
data.forEach((item) => {
if (item.id == 1) {
this.form.transTypeLabel = item.label
}
})
}
})
},
getDeliveryList() {
api.deliveryList().then((res) => {
let data = res.data.map((item) => {
return {
id: item.value,
label: item.label,
}
})
this.deliList = [data]
if (this.userInfo.pkCountry == 1) {
this.form.deliveryWay = 1
data.forEach((item) => {
if (item.id == 1) {
this.form.deliveryWayLabel = item.label
}
})
}
})
},
sureTrans(e) {
const { value } = e
this.form.transType = value[0].id
this.form.transTypeLabel = value[0].label
this.isTrans = false
},
sureDelivery(e) {
const { value } = e
this.form.deliveryWay = value[0].id
this.form.deliveryWayLabel = value[0].label
this.isDelivery = false
},
getGenerate() {
api.generate().then((res) => {
uni.setStorageSync('mToken', res.msg)
})
},
goBuy() {
this.$refs.uForm.validate().then((res) => {
if (this.agreementShow.length == 0) {
uni.showToast({
title: this.$t('w_0091'),
icon: 'none',
duration: 1500,
})
return
}
this.isLoading = true
let deleteList = []
this.shoppingArr.forEach((item) => {
deleteList.push({
shoppingId: item,
})
})
api.confirmShareOrder(
Object.assign({}, this.form, this.allGoodsData, {
orderItemsParams: this.postList,
deleteList: deleteList,
})
).then((res) => {
this.isLoading = false
if (res.code == 200) {
uni.navigateTo({
url:
'/pages/pay/index?paramsPost=' +
JSON.stringify(res.data) +
'&businessType=1',
})
}
})
})
},
getDiqu() {
this.$refs.address.setShow()
},
confirmPopup() {},
addressData(diqu, obj) {
this.form.diqu = diqu
this.form.recProvince = obj.province
this.form.recCity = obj.city
this.form.recCounty = obj.county
this.$forceUpdate()
this.getPostAge()
// this.queryAdressPostage()
},
},
}
</script>
<style lang="scss" scoped>
.content {
.con_top {
width: 100%;
position: fixed;
display: flex;
background: #fb3024;
font-size: 28rpx;
font-weight: 400;
color: #ffffff;
padding: 24rpx 0;
z-index: 1;
.con_top_i {
flex: 1;
text-align: center;
.bai {
width: 52rpx;
height: 6rpx;
background: #ffffff;
margin: 0 auto;
margin-top: 10rpx;
}
}
}
.zhan {
height: 96rpx;
}
}
.countImg {
width: 62rpx;
height: 41rpx;
margin-right: 20rpx;
}
.context {
}
::v-deep .u-form-item__body {
padding: 10px 20px;
}
::v-deep .u-input__content {
padding: 0px 20rpx;
}
::v-deep .u-form-item__body__right__message {
margin-left: 105px !important;
}
.disFlex {
display: flex;
align-items: center;
}
.justBwn {
width: 100%;
justify-content: space-between;
}
.goodList {
display: flex;
padding: 20rpx;
border-bottom: 1px solid #eee;
}
.cover {
width: 136rpx;
height: 136rpx;
background: #ffffff;
border: 1px solid #eeeeee;
border-radius: 10rpx;
}
.goodList_i {
flex: 1;
}
.goodList_it {
display: flex;
padding: 0rpx 0 20rpx 0rpx;
.goodList_ir {
margin-left: 20rpx;
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.goodList_ib {
display: flex;
align-items: center;
justify-content: space-between;
img {
width: 56rpx;
height: 56rpx;
}
}
}
}
.product_i {
display: flex;
align-items: center;
background: #F6F6F6;
padding: 28rpx;
.product_il {
display: flex;
align-items: center;
flex: 1;
justify-content: space-between;
margin-left: 20rpx;
}
img {
width: 50rpx;
height: 50rpx;
background: #ffffff;
border: 1px solid #dddddd;
border-radius: 10rpx;
}
}
.fen {
background: #F6F6F6;
padding: 0 28rpx 28rpx 28rpx;
}
.pad {
padding: 28rpx;
}
.footer_f {
position: fixed;
bottom: 0;
width: 100%;
z-index: 10;
background: #f2f2f2;
height: 296rpx;
}
.footer {
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 20rpx 24rpx 40rpx 20rpx;
.footer_l {
display: flex;
justify-content: center;
margin: 30rpx 0 40rpx 0;
}
.footer_r {
// flex: 1;
display: flex;
align-items: center;
font-size: 20rpx;
font-weight: 500;
color: #333333;
}
}
.tit1 {
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
}
.tit2 {
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #fb3024;
}
.tit3 {
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #999999;
}
.tit4 {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
color: #333333;
}
.tit5 {
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #999999;
}
.heng {
height: 20rpx;
background: #f2f2f2;
}
.subTxt {
background: #fb3024;
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #fff;
padding: 35rpx 27rpx;
view {
border-left: 4px solid #fff;
padding: 0 20rpx;
}
}
.address_a {
padding: 27rpx;
border-bottom: 2rpx solid #eee;
}
.address_r {
flex: 1;
margin-left: 20rpx;
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: bold;
color: #333333;
}
.address_rc {
margin: 6rpx 0;
}
.mr {
margin-left: 20rpx;
background: #181818;
border-radius: 16rpx;
font-size: 20rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
padding: 6rpx 16rpx;
border-radius: 20px;
}
</style>