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
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>
|
|
|