freight-web/src/pagesConfig/components/avatar-input.vue

72 lines
1.3 KiB
Vue

<template>
<view class="input-box">
<up-icon
name="minus"
@click="decrease"
:size="22"
color="rgba(0,0,0,0.25)"
></up-icon>
<input
class="uni-input"
type="number"
placeholder="1"
v-model="num"
@input="handleInput"
disabled
/>
<up-icon
name="plus"
@click="increase"
:size="22"
color="rgba(0,0,0,0.25)"
></up-icon>
</view>
</template>
<script setup lang="ts">
const props = defineProps<{
min: number;
max: number;
value: number;
}>();
const emit = defineEmits(["changeValue"]);
const num = ref(props.value);
const handleInput = (event:any) => {
const value = parseInt(event.target.value);
if (!isNaN(value) && value >= 1) {
num.value = value;
} else {
num.value = 1;
}
};
const increase = () => {
if (num.value < props.max) {
num.value++;
emit("changeValue", num.value)
}
};
const decrease = () => {
if (num.value > props.min) {
num.value--;
emit("changeValue", num.value)
}
};
</script>
<style lang="scss" scoped>
.input-box {
display: flex;
align-items: center;
justify-items: center;
border: 1px solid rgba(0, 0, 0, 0.15);
padding: 4px;
border-radius: 5px;
margin: 0rpx 16rpx;
.uni-input {
text-align: center;
max-width: 100rpx;
color: rgba(0, 0, 0, 0.75);
}
}
</style>