feat: ทำ form input
This commit is contained in:
parent
7c530c1149
commit
1885c4ceb1
7 changed files with 284 additions and 7 deletions
72
src/components/01_branch-management/FormBranchContact.vue
Normal file
72
src/components/01_branch-management/FormBranchContact.vue
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
const telephoneNo = defineModel<string>('telephoneNo');
|
||||||
|
const contact = defineModel<string>('contact');
|
||||||
|
const email = defineModel<string>('email');
|
||||||
|
const contactName = defineModel<string>('contactName');
|
||||||
|
const operatingHours = defineModel<string>('operatingHours');
|
||||||
|
const lineId = defineModel<string>('lineId');
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
title?: string;
|
||||||
|
dense?: boolean;
|
||||||
|
outlined?: boolean;
|
||||||
|
readonly?: boolean;
|
||||||
|
separator?: boolean;
|
||||||
|
}>();
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="col-3 app-text-muted">• {{ $t(`${title}`) }}</div>
|
||||||
|
<div class="col-9 row q-col-gutter-md">
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-5"
|
||||||
|
:label="$t('formDialogInputEmailHq')"
|
||||||
|
v-model="email"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-7"
|
||||||
|
:label="$t('formDialogInputTelephoneHq')"
|
||||||
|
v-model="telephoneNo"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-5"
|
||||||
|
:label="$t('formDialogInputContactName')"
|
||||||
|
v-model="contactName"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-7"
|
||||||
|
:label="$t('formDialogInputTelephoneContact')"
|
||||||
|
v-model="contact"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-5"
|
||||||
|
label="Line ID"
|
||||||
|
v-model="lineId"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<q-separator
|
||||||
|
v-if="separator"
|
||||||
|
class="col-12 q-mt-xl q-mb-md"
|
||||||
|
style="padding-block: 0.5px"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
const code = defineModel<string>('code');
|
||||||
|
const taxNo = defineModel<string>('taxNo');
|
||||||
|
const name = defineModel<string>('name');
|
||||||
|
const nameEN = defineModel<string>('nameEN');
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
title?: string;
|
||||||
|
dense?: boolean;
|
||||||
|
outlined?: boolean;
|
||||||
|
readonly?: boolean;
|
||||||
|
separator?: boolean;
|
||||||
|
}>();
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="col-3 app-text-muted">• {{ $t(`${title}`) }}</div>
|
||||||
|
<div class="col-9 row q-col-gutter-md">
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
readonly
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-6"
|
||||||
|
:label="$t('formDialogInputCode')"
|
||||||
|
v-model="code"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
:readonly="readonly"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-6"
|
||||||
|
:label="$t('formDialogInputTaxNo')"
|
||||||
|
v-model="taxNo"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
:readonly="readonly"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-12"
|
||||||
|
:label="$t('formDialogInputNameHq')"
|
||||||
|
v-model="name"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
:dense="dense"
|
||||||
|
:outlined="outlined"
|
||||||
|
:readonly="readonly"
|
||||||
|
hide-bottom-space
|
||||||
|
class="col-12"
|
||||||
|
:label="$t('formDialogInputNameHqEn')"
|
||||||
|
v-model="nameEN"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<q-separator
|
||||||
|
v-if="separator"
|
||||||
|
class="col-12 q-mt-xl q-mb-md"
|
||||||
|
style="padding-block: 0.5px"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const location = defineModel<string>('qr');
|
const longitude = defineModel<string>('longitude');
|
||||||
|
const latitude = defineModel<string>('latitude');
|
||||||
|
|
||||||
|
function getLocation() {
|
||||||
|
navigator.geolocation.getCurrentPosition((position) => {
|
||||||
|
longitude.value = position.coords.longitude.toString();
|
||||||
|
latitude.value = position.coords.latitude.toString();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
title?: string;
|
title?: string;
|
||||||
|
|
@ -10,8 +18,46 @@ defineProps<{
|
||||||
}>();
|
}>();
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="col-3 app-text-muted">• ข้อมูลที่อยู่สำนักงานใหญ่</div>
|
<div class="col-3 app-text-muted">• {{ $t(`${title}`) }}</div>
|
||||||
<div class="col-9 row">Location</div>
|
<div class="col-9 bordered rounded row no-padding">
|
||||||
|
<div class="col-12 q-pl-md q-py-sm app-text-muted">location</div>
|
||||||
|
|
||||||
|
<div v-if="!!longitude && !!latitude" class="col-12 flex flex-center">
|
||||||
|
<iframe
|
||||||
|
:src="`https://maps.google.com/maps?q=${latitude}, ${longitude}&z=15&output=embed`"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
frameborder="0"
|
||||||
|
style="border: 0"
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="col-12 flex flex-center"
|
||||||
|
style="
|
||||||
|
height: 100px;
|
||||||
|
background-image: url(/map.png);
|
||||||
|
background-position: center center;
|
||||||
|
background-size: 920px 400px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<q-btn
|
||||||
|
:text-color="$q.dark.isActive ? 'black' : 'white'"
|
||||||
|
style="
|
||||||
|
background: var(--blue-5);
|
||||||
|
color: var(--blue-0);
|
||||||
|
font-size: 12px;
|
||||||
|
width: 150px;
|
||||||
|
"
|
||||||
|
unelevated
|
||||||
|
rounded
|
||||||
|
:label="$t('formDialogBtnLocation')"
|
||||||
|
@click="getLocation()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<q-separator
|
<q-separator
|
||||||
v-if="separator"
|
v-if="separator"
|
||||||
class="col-12 q-mt-xl q-mb-md"
|
class="col-12 q-mt-xl q-mb-md"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const qr = defineModel<string>('qr');
|
import { Icon } from '@iconify/vue';
|
||||||
|
|
||||||
|
const qr = defineModel<string | null>('qr');
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
title?: string;
|
title?: string;
|
||||||
|
|
@ -8,13 +10,85 @@ defineProps<{
|
||||||
readonly?: boolean;
|
readonly?: boolean;
|
||||||
separator?: boolean;
|
separator?: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
defineEmits<{
|
||||||
|
(e: 'upload'): void;
|
||||||
|
}>();
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div class="col-3 app-text-muted">• ข้อมูลที่อยู่สำนักงานใหญ่</div>
|
<div class="col-3 app-text-muted">• {{ title }}</div>
|
||||||
<div class="col-9 row">QRCode</div>
|
<div
|
||||||
|
:class="{ 'dark-form-show-qr-code': $q.dark.isActive }"
|
||||||
|
class="col-9 row q-col-gutter-md q-mt-lg branch-form-show-qr-code"
|
||||||
|
>
|
||||||
|
<div class="col-12 flex flex-center">
|
||||||
|
<q-img
|
||||||
|
v-if="qr"
|
||||||
|
:src="qr as string"
|
||||||
|
style="width: 150px; height: 150px"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-btn
|
||||||
|
@click="$emit('upload')"
|
||||||
|
class="branch-form-btn-qr-code"
|
||||||
|
:class="{ 'dark-form-btn-qr-code': $q.dark.isActive }"
|
||||||
|
v-else
|
||||||
|
unelevated
|
||||||
|
:color="$q.dark.isActive ? 'black' : 'grey-2'"
|
||||||
|
:text-color="$q.dark.isActive ? 'white' : 'grey-5'"
|
||||||
|
>
|
||||||
|
<Icon icon="teenyicons:add-outline" width="30px" height="50px" />
|
||||||
|
</q-btn>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 flex flex-center q-py-md">
|
||||||
|
<q-btn
|
||||||
|
:text-color="$q.dark.isActive ? 'black' : 'white'"
|
||||||
|
style="background: var(--blue-5); color: var(--blue-0); font-size: 12px"
|
||||||
|
unelevated
|
||||||
|
rounded
|
||||||
|
:label="$t('formDialogUploadQrCode')"
|
||||||
|
@click="$emit('upload')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<q-separator
|
<q-separator
|
||||||
v-if="separator"
|
v-if="separator"
|
||||||
class="col-12 q-mt-xl q-mb-md"
|
class="col-12 q-mt-xl q-mb-md"
|
||||||
style="padding-block: 0.5px"
|
style="padding-block: 0.5px"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.branch-form-show-qr-code {
|
||||||
|
--_bg-branch-form-show-qr-code: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
var(--indigo-0),
|
||||||
|
var(--sand-0)
|
||||||
|
);
|
||||||
|
--_border-branch-form-show-qr-code: 2px dashed var(--gray-4);
|
||||||
|
border: var(--_border-branch-form-show-qr-code);
|
||||||
|
border-radius: 10px;
|
||||||
|
background-image: var(--_bg-branch-form-show-qr-code);
|
||||||
|
&.dark-form-show-qr-code {
|
||||||
|
background: var(--gray-9);
|
||||||
|
border-radius: 10px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.branch-form-btn-qr-code {
|
||||||
|
--_color-btn-qr-code: 3px solid var(--gray-4);
|
||||||
|
border: var(--_color-btn-qr-code);
|
||||||
|
border-radius: 6px;
|
||||||
|
&.dark-form-btn-qr-code {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.branch-form-input-Contact {
|
||||||
|
--_bg-branch-form-input-Contact: var(--gray-1-hsl);
|
||||||
|
background: hsl(var(--_bg-branch-form-input-Contact));
|
||||||
|
&.dark-form-input-Contact {
|
||||||
|
--_bg-branch-form-input-Contact: var(--gray-10-hsl);
|
||||||
|
border: 2px solid var(--gray-9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import FormAddress from './02_personnel-management/FormAddress.vue';
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
title: string;
|
title: string;
|
||||||
|
titleFormAddress?: string;
|
||||||
addressTitle?: string;
|
addressTitle?: string;
|
||||||
addressTitleEN?: string;
|
addressTitleEN?: string;
|
||||||
addressSeparator?: boolean;
|
addressSeparator?: boolean;
|
||||||
|
|
@ -83,6 +84,7 @@ const zipCode = defineModel<string>('zipCode', { default: '' });
|
||||||
<FormAddress
|
<FormAddress
|
||||||
dense
|
dense
|
||||||
outlined
|
outlined
|
||||||
|
:title="titleFormAddress"
|
||||||
:separator="addressSeparator"
|
:separator="addressSeparator"
|
||||||
v-model:isOpen="modal"
|
v-model:isOpen="modal"
|
||||||
v-model:address="address"
|
v-model:address="address"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
export default {
|
export default {
|
||||||
|
formDialogTitleLocation: 'Head Office Location',
|
||||||
|
formDialogTitleInformation: 'Basic Information',
|
||||||
|
formDialogTitleContact: 'Contact Information',
|
||||||
|
|
||||||
formDialogInputCode: 'Head Office Code',
|
formDialogInputCode: 'Head Office Code',
|
||||||
formDialogInputTaxNo: 'Tax Identification Number',
|
formDialogInputTaxNo: 'Tax Identification Number',
|
||||||
formDialogInputTaxNoValidate: 'Please enter the Tax Identification Number',
|
formDialogInputTaxNoValidate: 'Please enter the Tax Identification Number',
|
||||||
|
|
@ -21,9 +25,15 @@ export default {
|
||||||
formDialogInputTelephoneHq: 'Head Office Telephone Number',
|
formDialogInputTelephoneHq: 'Head Office Telephone Number',
|
||||||
formDialogInputEmailHq: 'Head Office Contact Email',
|
formDialogInputEmailHq: 'Head Office Contact Email',
|
||||||
|
|
||||||
|
formDialogInputContactName: 'Contact',
|
||||||
|
|
||||||
|
formDialogInputOperatingHours: 'Operating Hours',
|
||||||
|
|
||||||
formDialogInputAddressValidate: 'Please enter the address',
|
formDialogInputAddressValidate: 'Please enter the address',
|
||||||
formDialogInputProvinceValidate: 'Please enter the province',
|
formDialogInputProvinceValidate: 'Please enter the province',
|
||||||
|
|
||||||
formDialogInputDistrictValidate: 'Please enter the district',
|
formDialogInputDistrictValidate: 'Please enter the district',
|
||||||
formDialogInputSubDistrictValidate: 'Please enter the sub-district',
|
formDialogInputSubDistrictValidate: 'Please enter the sub-district',
|
||||||
|
|
||||||
|
formDialogBtnLocation: 'Start sharing location',
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
export default {
|
export default {
|
||||||
|
formDialogTitleLocation: 'สถานที่ตั้งสำนักงานใหญ่',
|
||||||
|
formDialogTitleInformation: 'ข้อมูลพื้นฐาน',
|
||||||
|
formDialogTitleContact: 'ข้อมูลติดต่อ',
|
||||||
|
|
||||||
formDialogInputCode: 'รหัสสำนักงานใหญ่',
|
formDialogInputCode: 'รหัสสำนักงานใหญ่',
|
||||||
formDialogInputTaxNo: 'เลขประจำตัวผู้เสียภาษี',
|
formDialogInputTaxNo: 'เลขประจำตัวผู้เสียภาษี',
|
||||||
formDialogInputTaxNoValidate: 'โปรดระบุเลขประจำตัวผู้เสียภาษี',
|
formDialogInputTaxNoValidate: 'โปรดระบุเลขประจำตัวผู้เสียภาษี',
|
||||||
|
|
@ -13,15 +17,21 @@ export default {
|
||||||
formDialogInputNameHqEnValidate: 'โปรดระบุชื่อสำนักงานใหญ่ (ภาษาอังกฤษ)',
|
formDialogInputNameHqEnValidate: 'โปรดระบุชื่อสำนักงานใหญ่ (ภาษาอังกฤษ)',
|
||||||
formDialogInputNameSubBranchEnValidate: 'โปรดระบุชื่อสาขา (ภาษาอังกฤษ)',
|
formDialogInputNameSubBranchEnValidate: 'โปรดระบุชื่อสาขา (ภาษาอังกฤษ)',
|
||||||
|
|
||||||
formDialogInputTelephoneContact: 'เบอร์โทรศัพท์',
|
formDialogInputTelephoneContact: 'เบอร์โทรศัพท์ติดต่อ',
|
||||||
formDialogUploadQrCode: 'อัปโหลด QR Code',
|
formDialogUploadQrCode: 'อัปโหลด QR Code',
|
||||||
|
|
||||||
formDialogInputTelephoneHq: 'เบอร์โทรศัพท์สำนักงานใหญ่',
|
formDialogInputTelephoneHq: 'เบอร์โทรศัพท์สำนักงานใหญ่',
|
||||||
formDialogInputEmailHq: 'อีเมลติดต่อสำนักงานใหญ่',
|
formDialogInputEmailHq: 'อีเมลติดต่อสำนักงานใหญ่',
|
||||||
|
|
||||||
|
formDialogInputContactName: 'ติดต่อ',
|
||||||
|
|
||||||
|
formDialogInputOperatingHours: 'เวลาทําการ',
|
||||||
|
|
||||||
formDialogInputAddressValidate: 'โปรดระบุที่อยู่',
|
formDialogInputAddressValidate: 'โปรดระบุที่อยู่',
|
||||||
formDialogInputProvinceValidate: 'โปรดระบุจังหวัด',
|
formDialogInputProvinceValidate: 'โปรดระบุจังหวัด',
|
||||||
|
|
||||||
formDialogInputDistrictValidate: 'โปรดระบุอำเภอ',
|
formDialogInputDistrictValidate: 'โปรดระบุอำเภอ',
|
||||||
formDialogInputSubDistrictValidate: 'โปรดระบุตำบล',
|
formDialogInputSubDistrictValidate: 'โปรดระบุตำบล',
|
||||||
|
|
||||||
|
formDialogBtnLocation: 'เริ่มแชร์โลเคชั่น',
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue