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.
 
 

280 lines
8.3 KiB

<template>
<div class="tw-mb-[20px] tw-rounded-[20px] tw-px-[20px] tw-py-[30px] tw-border tw-border-solid tw-border-slate-200">
<div class="element tw-grid tw-grid-cols-1 md:tw-grid-cols-[90px_auto] xl:tw-grid-cols-[90px_auto] tw-gap-[10px]">
<div class="tw-flex tw-items-center">
<label class="tw-font-normal tw-mb-[10px] md:tw-mb-0">
<span>{{ $t("Package")}}</span><span class="required">*</span>
</label>
</div>
<elementSelectNew
:select="{
id: 'Package',
label: 'Package',
required: true,
}"
:isRow="true"
:itemsCenter="true"
:labelWidth="0"
:selectWidth="200"
:selectList="selectPackageList"
:default="formData.package"
:validation="validation.package"
@change="formData.package = $event"
></elementSelectNew>
</div>
<div class="element tw-grid tw-grid-cols-1 md:tw-grid-cols-[90px_auto_auto_auto] xl:tw-grid-cols-[90px_auto_auto_auto] tw-gap-[10px] tw-mt-[20px]">
<div class="tw-flex tw-items-center">
<label class="tw-font-normal tw-mb-[10px] md:tw-mb-0">
<span>{{ $t("Size (cm)")}}</span><span class="required">*</span>
</label>
</div>
<elementSelectNew
:select="{
id: 'Length',
label: '',
required: true,
}"
:isRow="true"
:itemsCenter="true"
:labelWidth="0"
:selectWidth="200"
:selectList="selectLengthList"
:default="formData.length"
:validation="validation.length"
@change="formData.length = $event"
></elementSelectNew>
<elementSelectNew
:select="{
id: 'Width',
label: '',
required: true,
}"
:isRow="true"
:itemsCenter="true"
:labelWidth="0"
:selectWidth="200"
:selectList="selectWidthList"
:default="formData.width"
:validation="validation.width"
@change="formData.width = $event"
></elementSelectNew>
<elementSelectNew
:select="{
id: 'Height',
label: '',
required: true,
}"
:isRow="true"
:itemsCenter="true"
:labelWidth="0"
:selectWidth="200"
:selectList="selectHeightList"
:default="formData.height"
:validation="validation.height"
@change="formData.height = $event"
></elementSelectNew>
</div>
<div class="element tw-grid tw-grid-cols-1 md:tw-grid-cols-2 xl:tw-grid-cols-2 tw-gap-[10px] tw-mt-[20px]">
<div class="element tw-grid tw-grid-cols-1 md:tw-grid-cols-[90px_auto] xl:tw-grid-cols-[90px_auto] tw-gap-[10px]">
<div class="tw-flex tw-items-center">
<label class="tw-font-normal tw-mb-[10px] md:tw-mb-0">
<span>{{ $t("Weight (kg)")}}</span><span class="required">*</span>
</label>
</div>
<elementInputNew
:input="{
id: 'Weight',
required: true,
type: 'text',
placeholder: '',
}"
:maxlength="11"
:validation="validation.weight"
@change="formData.weight = $event"
></elementInputNew>
</div>
<div class="element tw-grid tw-grid-cols-1 md:tw-grid-cols-[90px_auto] xl:tw-grid-cols-[90px_auto] tw-gap-[10px]">
<div class="tw-flex tw-items-center">
<label class="tw-font-normal tw-mb-[10px] md:tw-mb-0 tw-ml-[20px]">
<span>{{ $t("Quantity")}}</span><span class="required">*</span>
</label>
</div>
<elementSelectNew
:select="{
id: 'Quantity',
label: 'Quantity',
required: true,
}"
:isRow="true"
:itemsCenter="true"
:labelWidth="0"
:selectWidth="200"
:selectList="selectQuantityList"
:default="formData.quantity"
:validation="validation.quantity"
@change="formData.quantity = $event"
></elementSelectNew>
</div>
</div>
<div class="tw-border-0 tw-border-b tw-border-solid tw-border-neutrals-200 tw-mt-[20px]"></div>
<div class="group tw-mt-[30px]">
<h3 class="t14 tw-font-bold tw-mb-[10px] md:t16">
{{ $t("Service Type") }}
</h3>
<typeGroup :packages="packages" @type="changeType($event)"></typeGroup>
</div>
</div>
</template>
<script>
import elementSelectNew from "@/components/newComponent/form/ElementSelectNew";
import elementInputNew from "@/components/newComponent/form/ElementInputNew";
import typeGroup from "@/components/service/content/typeGroup.vue";
import is from "is_js";
export default {
components: {
elementSelectNew,
elementInputNew,
typeGroup
},
props: {
selectPackageList: {
type: Array,
},
selectLengthList: {
type: Array,
},
selectWidthList: {
type: Array,
},
selectHeightList: {
type: Array,
},
selectQuantityList: {
type: Array,
},
},
data() {
return {
formData: {
package: "",
length: "",
width: "",
height: "",
weight: "",
quantity: "",
},
validation: {
package: true,
length: true,
width: true,
height: true,
weight: true,
quantity: true,
},
errors: null,
packages: [{
package_id: '1',
name: '嘉義',
is_customize: 1,
choices:[{title: '接機服務',text: 'qweqweq'},{title: '送機服務',text: '13123'}],
plan_title: '接送機服務',
specifications: [{
title: '賓士7人座車',
}]
},{
package_id: '1',
name: '臺南',
is_customize: 1,
choices:[{title: '接機服務',text: 'qweqweq'},{title: '送機服務',text: '13123'}],
plan_title: '接送機服務',
specifications: [{
title: '賓士7人座車',
}]
}],
};
},
methods: {
reset() {
this.formData = {
package: "",
length: "",
width: "",
height: "",
weight: "",
quantity: "",
};
},
save() {
this.validators();
if (this.validators()) {
const patchData = JSON.parse(JSON.stringify(this.formData));
}
},
validators() {
if (is.empty(this.formData.package)) {
this.validation.package = false;
} else {
this.validation.package = true;
}
if (is.empty(this.formData.length || is.not.email(this.formData.length))) {
this.validation.length = false;
} else {
this.validation.length = true;
}
if (is.empty(this.formData.width || is.not.email(this.formData.width))) {
this.validation.width = false;
} else {
this.validation.width = true;
}
if (is.empty(this.formData.height || is.not.email(this.formData.height))) {
this.validation.height = false;
} else {
this.validation.height = true;
}
if (is.empty(this.formData.weight || is.not.email(this.formData.weight))) {
this.validation.weight = false;
} else {
this.validation.weight = true;
}
if (is.empty(this.formData.quantity || is.not.email(this.formData.quantity))) {
this.validation.quantity = false;
} else {
this.validation.quantity = true;
}
this.errors = Object.entries(this.validation).filter(
(e) => e[1] == false
);
if (this.errors.length > 0) {
return false;
} else {
return true;
}
},
changeType(index) {
let vm = this;
vm.activePackage = index;
vm.packageId = vm.content.packages[index].package_id
? vm.content.packages[index].package_id
: "";
vm.packageName = vm.content.packages[index].name
? vm.content.packages[index].name
: "";
},
},
};
</script>
<style lang="scss" scoped>
select {
-moz-appearance: none;
/* Firefox */
-webkit-appearance: none;
/* Safari and Chrome */
appearance: none;
background-image: url("~/assets/svg/down-arrow.svg");
background-size: 9px 6px;
background-position: right 20px center;
background-repeat: no-repeat;
}
</style>