feat: add service dialog

This commit is contained in:
puriphatt 2024-06-18 02:01:02 +00:00
parent c19f6fefe3
commit 2b44855585
3 changed files with 227 additions and 58 deletions

View file

@ -4,72 +4,108 @@ const detail = defineModel<string>('detail');
const name = defineModel<string>('name'); const name = defineModel<string>('name');
const code = defineModel<string>('code'); const code = defineModel<string>('code');
const serviceCode = defineModel<string>('serviceCode');
const serviceName = defineModel<string>('serviceName');
const serviceDescription = defineModel<string>('serviceDescription');
defineProps<{ defineProps<{
dense?: boolean; dense?: boolean;
outlined?: boolean; outlined?: boolean;
readonly?: boolean; readonly?: boolean;
separator?: boolean; separator?: boolean;
isType?: boolean; isType?: boolean;
service?: boolean;
}>(); }>();
</script> </script>
<template> <template>
<div class="row"> <div class="col-3 app-text-muted">
<div class="col-4 app-text-muted"> {{ $t(`formDialogTitleInformation`) }}
{{ $t(`formDialogTitleInformation`) }} </div>
</div> <div v-if="!service" class="col-9 row q-col-gutter-md">
<div class="col-8 row q-col-gutter-md"> <q-input
<q-input :dense="dense"
:dense="dense" :outlined="!readonly"
:outlined="!readonly" :readonly="readonly"
:readonly="readonly" :borderless="readonly"
:borderless="readonly" hide-bottom-space
hide-bottom-space class="col-6"
class="col-6" :label="
:label=" $t(isType ? 'productAndServiceTypeCode' : 'productAndServiceGroupCode')
$t( "
isType ? 'productAndServiceTypeCode' : 'productAndServiceGroupCode', v-model="code"
) />
" <q-input
v-model="code" :dense="dense"
/> :outlined="!readonly"
<q-input :readonly="readonly"
:dense="dense" :borderless="readonly"
:outlined="!readonly" hide-bottom-space
:readonly="readonly" class="col-6"
:borderless="readonly" :label="
hide-bottom-space $t(isType ? 'productAndServiceTypeName' : 'productAndServiceGroupName')
class="col-6" "
:label=" v-model="name"
$t( />
isType ? 'productAndServiceTypeName' : 'productAndServiceGroupName', <q-input
) :dense="dense"
" :outlined="!readonly"
v-model="name" :readonly="readonly"
/> :borderless="readonly"
<q-input hide-bottom-space
:dense="dense" type="textarea"
:outlined="!readonly" class="col-12"
:readonly="readonly" :label="$t('detail')"
:borderless="readonly" v-model="detail"
hide-bottom-space />
type="textarea" <q-input
class="col-12" :dense="dense"
:label="$t('detail')" :outlined="!readonly"
v-model="detail" :readonly="readonly"
/> :borderless="readonly"
<q-input hide-bottom-space
:dense="dense" type="textarea"
:outlined="!readonly" class="col-12"
:readonly="readonly" :label="$t('formDialogInputRemark')"
:borderless="readonly" v-model="remark"
hide-bottom-space />
type="textarea" </div>
class="col-12"
:label="$t('formDialogInputRemark')" <div v-if="service" class="col-9 row q-col-gutter-md">
v-model="remark" <q-input
/> for="input-service-code"
</div> :dense="dense"
:outlined="!readonly"
:readonly="readonly"
:borderless="readonly"
hide-bottom-space
class="col-3"
:label="$t('serviceCode')"
v-model="serviceCode"
/>
<q-input
for="input-service-name"
:dense="dense"
:outlined="!readonly"
:readonly="readonly"
:borderless="readonly"
hide-bottom-space
class="col-9"
:label="$t('serviceName')"
v-model="serviceName"
/>
<q-input
for="input-service-description"
:dense="dense"
:outlined="!readonly"
:readonly="readonly"
:borderless="readonly"
hide-bottom-space
type="textarea"
class="col-12"
:label="$t('serviceDetail')"
v-model="serviceDescription"
/>
</div> </div>
</template> </template>

View file

@ -0,0 +1,88 @@
<script setup lang="ts">
import NoData from 'src/components/NoData.vue';
import WorkManagementComponent from './WorkManagementComponent.vue';
import { ref } from 'vue';
const serviceName = defineModel<string>('serviceName');
const workItems = ref([
{
id: '1',
product: [
{
id: '1',
label: 'ค่าธรรมเนียมใบอนุญาตทำงาน 2 ปี',
code: 'AC101',
price: '1,200.00',
time: '14',
},
],
},
{
id: '2',
product: [
{
id: '1',
label: 'ค่าธรรมเนียมใบอนุญาตทำงาน 2 ปี',
code: 'AC101',
price: '1,200.00',
time: '14',
},
{
id: '1',
label:
'ค่าบริการและค่าดำเนินงานยื่นคำร้องขอใบอนุญาตทำงานแทน คนงานต่างด้าว MOU',
code: 'AC102',
price: '1,200.00',
time: '14',
},
],
},
]);
defineProps<{
dense?: boolean;
outlined?: boolean;
readonly?: boolean;
separator?: boolean;
}>();
defineEmits<{
(e: 'addProduct'): void;
(e: 'deleteWork'): void;
(e: 'deleteProduct'): void;
}>();
</script>
<template>
<div class="column col-12 full-height">
<div class="col-1 app-text-muted row items-start">
{{ $t(`workInformation`) }}
<q-btn
icon="mdi-plus"
dense
flat
round
padding="0"
color="primary"
class="q-ml-sm"
/>
</div>
<!-- <div class="col row rounded bordered surface-2 justify-center items-center">
<NoData />
</div> -->
<div class="col q-gutter-y-md">
<WorkManagementComponent
v-for="(work, index) in workItems"
:key="work.id"
v-model:product-items="work.product"
:workIndex="index"
@addProduct="$emit('addProduct')"
></WorkManagementComponent>
</div>
</div>
</template>
<style scoped lang="scss"></style>

View file

@ -14,6 +14,7 @@ import BasicInfoProduct from 'src/components/04_product-service/ฺBasicInfoProd
import PriceDataComponent from 'src/components/04_product-service/PriceDataComponent.vue'; import PriceDataComponent from 'src/components/04_product-service/PriceDataComponent.vue';
import ProfileUpload from 'src/components/ProfileUpload.vue'; import ProfileUpload from 'src/components/ProfileUpload.vue';
import TotalProductCardComponent from 'components/04_product-service/TotalProductCardComponent.vue'; import TotalProductCardComponent from 'components/04_product-service/TotalProductCardComponent.vue';
import FormServiceWork from 'src/components/04_product-service/FormServiceWork.vue';
import { Status } from 'src/stores/types'; import { Status } from 'src/stores/types';
import NoData from 'components/NoData.vue'; import NoData from 'components/NoData.vue';
@ -73,6 +74,7 @@ const drawerInfo = ref<boolean>(false);
const isEdit = ref<boolean>(false); const isEdit = ref<boolean>(false);
const dialogInputForm = ref<boolean>(false); const dialogInputForm = ref<boolean>(false);
const dialogProduct = ref<boolean>(false); const dialogProduct = ref<boolean>(false);
const dialogService = ref<boolean>(false);
const statusToggle = ref<boolean>(false); const statusToggle = ref<boolean>(false);
const profileSubmit = ref<boolean>(false); const profileSubmit = ref<boolean>(false);
const profileFile = ref<File | undefined>(undefined); const profileFile = ref<File | undefined>(undefined);
@ -109,6 +111,18 @@ const formDataProduct = ref<ProductCreate>({
code: '', code: '',
}); });
const serviceTab = [
{
name: 'serviceInformation',
label: 'serviceInformation',
},
{
name: 'workInformation',
label: 'workInformation',
},
];
const currentServiceTab = ref('serviceInformation');
const currentId = ref<string>(''); const currentId = ref<string>('');
const currentIdType = ref<string>(''); const currentIdType = ref<string>('');
const resultSearchGroup = ref<ProductGroup[]>(); const resultSearchGroup = ref<ProductGroup[]>();
@ -417,7 +431,7 @@ watch(currentStatus, async () => {
></q-fab-action> ></q-fab-action>
<q-fab-action <q-fab-action
v-if="productMode === 'service'" v-if="productMode === 'service'"
label="เพิ่มบริการ" :label="$t('addService')"
external-label external-label
label-position="left" label-position="left"
style="color: white; background-color: hsla(var(--blue-11-hsl))" style="color: white; background-color: hsla(var(--blue-11-hsl))"
@ -426,7 +440,8 @@ watch(currentStatus, async () => {
@click=" @click="
() => { () => {
clearFormGroup(); clearFormGroup();
dialogInputForm = true; currentServiceTab = 'serviceInformation';
dialogService = true;
} }
" "
></q-fab-action> ></q-fab-action>
@ -1047,6 +1062,36 @@ watch(currentStatus, async () => {
/> />
</AppBox> </AppBox>
</FormDialog> </FormDialog>
<FormDialog
no-address
:title="$t('addService')"
v-model:modal="dialogService"
v-model:tabs-list="serviceTab"
v-model:current-tab="currentServiceTab"
>
<template #prepend>
<ProfileUpload
v-model:url-profile="profileUrl"
v-model:status-toggle="statusToggle"
v-model:profile-submit="profileSubmit"
@input-file="inputFile.click()"
/>
</template>
<template #information>
<BasicInformation
v-if="currentServiceTab === 'serviceInformation'"
dense
service
/>
<FormServiceWork
v-if="currentServiceTab === 'workInformation'"
dense
@addProduct="dialogTotalProduct = true"
/>
</template>
</FormDialog>
</template> </template>
<style scoped> <style scoped>