245 lines
7.4 KiB
Vue
245 lines
7.4 KiB
Vue
|
<!-- 重量和体积 -->
|
|||
|
<template>
|
|||
|
<view class="weightAndVolume">
|
|||
|
<!-- 重量 -->
|
|||
|
<view class="weight-box">
|
|||
|
<view class="weight-box-title">预估重量</view>
|
|||
|
<!-- <uni-number-box max="9999" min="1" :value="weight" @change="changeWeight" /> -->
|
|||
|
<view class="number-box">
|
|||
|
<view class="minus-btn" :class="isLessThan ? 'active' : ''" @click="handleMinus">-</view>
|
|||
|
<input class="uni-input" type="digit" maxlength="4" v-model="weight" @blur="handleWeigthBlur"/>
|
|||
|
<view class="add-btn" :class="isExceed ? 'active' : ''" @click="handleAdd">+</view>
|
|||
|
</view>
|
|||
|
<view class="unit">kg</view>
|
|||
|
</view>
|
|||
|
<!-- 体积 -->
|
|||
|
<view class="volume-box">
|
|||
|
<view class="volume-box-title">总体积</view>
|
|||
|
<view class="isVolumeInfo">
|
|||
|
<view class="isVolumeInfo-title">补充体积预估费用更准确</view>
|
|||
|
<switch color="#1DC779" style="transform:scale(0.7)" @change="switchChange" :checked="isVolumeInfo" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- 体积输入框 -->
|
|||
|
<view class="isVolumeInfo-title-box" v-if='isVolumeInfo'>
|
|||
|
<uni-number-box />
|
|||
|
<view class="number-box">
|
|||
|
<view class="minus-btn" :class="isLessThanVolume ? 'active' : ''" @click="handleVolumeMinus">-</view>
|
|||
|
<input class="uni-input" type="digit" maxlength="6" v-model="volume" @blur="handleVolume" />
|
|||
|
<view class="add-btn" :class="isExceedVolume ? 'active' : ''" @click="handleVolumeAdd">+</view>
|
|||
|
</view>
|
|||
|
<view class="unit">m³</view>
|
|||
|
</view>
|
|||
|
<!-- 长宽高输入框 -->
|
|||
|
<view class="long-width-height" v-if="isVolumeInfo">
|
|||
|
<view class="long">
|
|||
|
<input class="uni-input" type="digit" :value="long" maxlength="3" placeholder="长 cm"
|
|||
|
@input="longFun" />
|
|||
|
</view>
|
|||
|
<view class="cheng">*</view>
|
|||
|
<view class="width">
|
|||
|
<input class="uni-input" type="digit" :value="width" maxlength="3" placeholder="宽 cm"
|
|||
|
@input="widthFun" />
|
|||
|
</view>
|
|||
|
<view class="cheng">*</view>
|
|||
|
<view class="height">
|
|||
|
<input class="uni-input" type="digit" :value="height" maxlength="3" placeholder="高 cm"
|
|||
|
@input="heightFun" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="accounting-rules">
|
|||
|
注:实际质量与体积以收派员确定为准,物品在包装后重量可能会增加,重量体积大时会体积重量收费,
|
|||
|
<text class="red" @click="openAccountRulesDialog">了解计费规则</text>
|
|||
|
</view>
|
|||
|
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script setup>
|
|||
|
import {
|
|||
|
ref,
|
|||
|
onMounted,
|
|||
|
} from 'vue';
|
|||
|
import {
|
|||
|
useStore
|
|||
|
} from 'vuex';
|
|||
|
const emits = defineEmits(["@getWeight", '@getVolume']);
|
|||
|
let isLessThan = ref(true); //判断重量是否小于0.1
|
|||
|
let isExceed = ref(false); //判断重量是否大于9999
|
|||
|
let isLessThanVolume = ref(true); //判断体积是否小于0.0001m³
|
|||
|
let isExceedVolume = ref(false); //判断体积是否大于99m³
|
|||
|
const weight = ref(1) //重量
|
|||
|
const volume = ref(0) //体积
|
|||
|
const long = ref() //长
|
|||
|
const width = ref() //宽
|
|||
|
const height = ref() //高
|
|||
|
const isVolumeInfo = ref(false)
|
|||
|
const store = useStore(); //vuex获取、储存数据
|
|||
|
const users = store.state.user
|
|||
|
onMounted(() => {
|
|||
|
weight.value = users.weight
|
|||
|
width.value = users.width
|
|||
|
height.value = users.height
|
|||
|
long.value = users.long
|
|||
|
volume.value = users.volume ? (Number(users.volume) / 1000000) : 0
|
|||
|
isVolumeInfo.value = users.width && users.long && users.height
|
|||
|
})
|
|||
|
// 减重量
|
|||
|
const handleMinus = () => {
|
|||
|
// 重量减去1
|
|||
|
if (weight.value > 1) {
|
|||
|
weight.value--;
|
|||
|
isExceed.value = false; //右侧加号去除置灰
|
|||
|
weight.value = weight.value.toFixed(1);
|
|||
|
}
|
|||
|
if (weight.value <= 1) {
|
|||
|
|
|||
|
isLessThan.value = true; //左侧减号置灰
|
|||
|
if (weight.value <= 0.1) {
|
|||
|
weight.value = 0.1
|
|||
|
}
|
|||
|
}
|
|||
|
emits('getWeight', weight.value)
|
|||
|
};
|
|||
|
|
|||
|
// 加重量
|
|||
|
const handleAdd = () => {
|
|||
|
// 重量加1
|
|||
|
if (weight.value < 9999) {
|
|||
|
++weight.value;
|
|||
|
isLessThan.value = false; //左侧减号去除置灰
|
|||
|
}
|
|||
|
if (weight.value === 9999) {
|
|||
|
isExceed.value = true; //右侧加号置灰
|
|||
|
}
|
|||
|
if (weight.value <= 1) {
|
|||
|
// weight.value = 1;
|
|||
|
isLessThan.value = true; //左侧减号置灰
|
|||
|
}
|
|||
|
emits('getWeight', weight.value)
|
|||
|
};
|
|||
|
|
|||
|
//触发重量输入如果输入0,自动判断为1kg,最小可输入值为0.1kg,最大值为9999kg
|
|||
|
const handleWeigthBlur = e => {
|
|||
|
let value = e.detail.value;
|
|||
|
if (value < 0.1) {
|
|||
|
value = 1;
|
|||
|
isLessThan.value = true; //左侧减号置灰
|
|||
|
} else {
|
|||
|
if (value >= 0.1 && value <= 1) {
|
|||
|
isLessThan.value = true;
|
|||
|
} else {
|
|||
|
isLessThan.value = false; //左侧减号去除置灰
|
|||
|
}
|
|||
|
|
|||
|
if (value >= 9999) {
|
|||
|
isExceed.value = true; //右侧加号置灰
|
|||
|
value = 9999;
|
|||
|
uni.showToast({
|
|||
|
title: '重量最大可不能超过9999kg',
|
|||
|
duration: 1000,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
} else {
|
|||
|
isExceed.value = false; //右侧加号去除置灰
|
|||
|
}
|
|||
|
}
|
|||
|
weight.value = value
|
|||
|
emits('getWeight', weight.value)
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// 体积
|
|||
|
const handleVolume = e => {
|
|||
|
let value = Number(e.detail.value);
|
|||
|
if (value < 0.0001) {
|
|||
|
isLessThanVolume.value = true;
|
|||
|
value = 0;
|
|||
|
} else {
|
|||
|
isLessThanVolume.value = false;
|
|||
|
if (value >= 999) {
|
|||
|
isExceedVolume.value = true; //右侧加号置灰
|
|||
|
value = 999;
|
|||
|
uni.showToast({
|
|||
|
title: '体积最大可不能超过999m³',
|
|||
|
duration: 1000,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
} else {
|
|||
|
value = Number(e.detail.value);
|
|||
|
isExceedVolume.value = false; //右侧加号去除置灰
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
volume.value = value
|
|||
|
emits('getVolume', (volume.value) * 1000000, long.value, width.value, height.value)
|
|||
|
};
|
|||
|
// 减体积
|
|||
|
const handleVolumeMinus = () => {
|
|||
|
// 体积减去1
|
|||
|
if (volume.value > 1) {
|
|||
|
volume.value--;
|
|||
|
isExceedVolume.value = false; //右侧加号去除置灰
|
|||
|
volume.value = volume.value.toFixed(1);
|
|||
|
}
|
|||
|
// 体积
|
|||
|
if (volume.value <= 1) {
|
|||
|
|
|||
|
isLessThanVolume.value = true; //左侧减号置灰
|
|||
|
if (weight.value <= 0.0001) {
|
|||
|
weight.value = 0.0001
|
|||
|
}
|
|||
|
}
|
|||
|
emits('getVolume', (volume.value) * 1000000, long.value, width.value, height.value)
|
|||
|
|
|||
|
};
|
|||
|
// 加体积
|
|||
|
const handleVolumeAdd = () => {
|
|||
|
// 体积加1
|
|||
|
if (volume.value < 999) {
|
|||
|
++volume.value;
|
|||
|
isLessThanVolume.value = false; //左侧减号去除置灰
|
|||
|
}
|
|||
|
if (volume.value === 999) {
|
|||
|
isExceedVolume.value = true; //右侧加号置灰
|
|||
|
}
|
|||
|
emits('getVolume', (volume.value) * 1000000, long.value, width.value, height.value)
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
//是否显示具体体积
|
|||
|
const switchChange = (e) => {
|
|||
|
isVolumeInfo.value = e.detail.value
|
|||
|
}
|
|||
|
//修改长度
|
|||
|
const longFun = (e) => {
|
|||
|
long.value = e.detail.value
|
|||
|
let valueFun = (Number(long.value) * Number(width.value) * Number(height.value)) / 1000000
|
|||
|
volume.value = valueFun < 0.0001 ? 0.0001 : valueFun
|
|||
|
emits('getVolume', ((volume.value) * 1000000), e.detail.value, width.value, height.value)
|
|||
|
}
|
|||
|
//修改宽度
|
|||
|
const widthFun = (e) => {
|
|||
|
width.value = e.detail.value
|
|||
|
let valueFun = (Number(long.value) * Number(width.value) * Number(height.value)) / 1000000
|
|||
|
volume.value = valueFun < 0.0001 ? 0.0001 : valueFun
|
|||
|
emits('getVolume', (volume.value) * 1000000, long.value, e.detail.value, height.value)
|
|||
|
}
|
|||
|
//修改高度
|
|||
|
const heightFun = (e) => {
|
|||
|
height.value = e.detail.value
|
|||
|
let valueFun = (Number(long.value) * Number(width.value) * Number(height.value)) / 1000000
|
|||
|
volume.value = valueFun < 0.0001 ? 0.0001 : valueFun
|
|||
|
emits('getVolume', (volume.value) * 1000000, long.value, width.value, e.detail.value)
|
|||
|
}
|
|||
|
|
|||
|
//打开计费规则弹窗
|
|||
|
const openAccountRulesDialog = () => {
|
|||
|
uni.navigateTo({
|
|||
|
url: '/subPages/account-rules/index'
|
|||
|
});
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style src="./weightAndVolume.scss" lang="scss" scoped></style>
|