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.
 
 

243 lines
6.0 KiB

<template>
<div class="group tw-mb-[20px]">
<div class="tw-flex tw-justify-between tw-items-center tw-mb-[20px]">
<h3 class="t14 tw-font-bold tw-mb-0 md:t16">
{{ $t(label) }}<span class="required tw-font-normal t12 md:t14">*</span>
<span v-if="validation.length==false" class="required md:tw-ml-[20px] tw-font-normal t12 md:t14">{{ $t("Required.") }}</span>
</h3>
<button class="'seeMore tw-transition tw-btn-md tw-body-4 tw-text-secondary-default tw-px-[16px] tw-py-[9px]"
@click="clearAll()">
{{ $t("Clear all") }}
</button>
</div>
<div>
<div class="optionGroup tw-border tw-border-solid tw-border-slate-200 tw-rounded-[12px] tw-bg-white tw-p-[20px]">
<div v-for="(item, index) in quantitySelectList" :key="index">
<quantitySelectOption :index="index" :item="item" :hasValue="hasValue"
:seeMore="seeMore" @disabled="disabled($event)" @selected="selected($event)" @change="change($event)">
</quantitySelectOption>
</div>
</div>
<button v-show="length !== undefined && length > 3" :class="[
'seeMore tw-transition tw-btn-md tw-text-primary-1 tw-border tw-border-solid tw-border-primary-1 tw-px-[30px] tw-py-[8.5px] tw-mt-[20px] tw-w-full tw-rounded-xl hover:tw-bg-primary-3 xl:hover:tw-bg-transparent xl:tw-border-none',
seeMore ? 'open' : '',
]" @click="seeMore = !seeMore">
{{ $t(seeMoreText) }}
</button>
</div>
</div>
</template>
<script>
import quantitySelectOption from "@/components/service/content/quantitySelectOption";
export default {
components: {
quantitySelectOption,
},
props: {
label: {
type: String,
},
quantitySelectList: {
type: Array,
},
pickupServiceShow:{
type: Boolean,
}
},
data() {
return {
hasValue: null,
seeMore: false,
formData: {
selectList: [],
truckList: []
},
validation:{
length: true
},
errors: null,
};
},
computed: {
seeMoreText() {
if (this.seeMore == false) {
return "See more";
} else {
return "See less";
}
},
length() {
if (this.quantitySelectList) {
return this.quantitySelectList.length;
} else {
return 0;
}
},
// clear() {
// return this.pickupServiceShow;
// },
},
watch: {
// clear: {
// handler: function (value) {
// // if(value==false){
// // this.hasValue = null;
// // this.formData.selectList = [];
// // this.formData.truckList = [];
// // this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
// // }
// }
// }
},
methods: {
disabled(i) {
this.hasValue = i;
},
selected(data){
if(this.formData.selectList.length>0){
for(let i=0;i<this.formData.selectList.length;i++){
if(this.formData.selectList[i].id == data.id){
this.formData.selectList.splice(i, 1);
break;
}
}
}
if(data.number>0){
this.formData.selectList.push(data);
}
if(this.formData.selectList.length>0){
this.validation.length = true;
}else{
this.validation.length = false;
}
this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
},
change(data){
if(this.formData.truckList.length>0){
for(let i=0;i<this.formData.truckList.length;i++){
if(this.formData.truckList[i].id == data.id){
this.formData.truckList.splice(i, 1);
break;
}
}
}
if(data.number!="" && data.number!=0){
this.formData.truckList.push(data);
}
this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
},
clearAll() {
this.hasValue = 0;
this.$nextTick(() => {
this.hasValue = null;
});
this.formData.selectList = [];
this.formData.truckList = [];
this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
},
validators() {
if (this.formData.selectList.length <= 0) {
this.validation.length = false;
} else {
this.validation.length = true;
}
this.errors = Object.entries(this.validation).filter(
(e) => e[1] == false
);
if (this.errors.length > 0) {
return false;
} else {
return true;
}
},
},
};
</script>
<style lang="scss" scoped>
.custom-button {
background-position: center;
background-repeat: no-repeat;
background-size: 12px;
}
.button {
&-reduce {
background-image: url("~/assets/svg/reduce.svg");
background-color: #e5e5e5;
}
&-add {
background-image: url("~/assets/svg/add.svg");
background-color: #f48800;
}
}
:deep() {
.optionGroup {
.optionItem:last-child {
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
}
}
.seeMore {
&-hide {
position: relative;
max-height: 295px;
overflow: hidden;
&::after {
content: "";
display: block;
position: absolute;
background: url("~/assets/img/gradient_white.png") repeat-x left bottom;
width: 100%;
height: 130px;
left: 0;
bottom: 0;
z-index: 1;
transition: bottom 0.5s;
}
}
&-show {
position: relative;
max-height: 100%;
overflow: initial;
&::after {
display: none;
}
}
@media screen and (min-width: 1366px) {
position: relative;
display: flex;
align-items: center;
justify-content: center;
&::after {
content: "";
display: inline-block;
position: relative;
background-image: url("~/assets/svg/arrow-down-primary.svg");
background-position: center center;
background-repeat: no-repeat;
background-size: 100%;
width: 9px;
height: 6px;
margin-left: 16px;
transition: all 0.2s linear;
}
&.open {
&::after {
transform: rotate(180deg);
}
}
}
}
</style>