diff --git a/src/components/04_flow-management/FormFlow.vue b/src/components/04_flow-management/FormFlow.vue
index 3e4b264e..95dd1c6f 100644
--- a/src/components/04_flow-management/FormFlow.vue
+++ b/src/components/04_flow-management/FormFlow.vue
@@ -455,7 +455,12 @@ onMounted(async () => {
:key="i"
class="surface-2 bordered rounded q-px-xs"
>
- {{ optionStore.mapOption(att.fieldName ?? '') }}
+ {{
+ optionStore.mapOption(
+ att.fieldName ?? '',
+ 'propertiesField',
+ )
+ }}
diff --git a/src/components/04_product-service/WorkManagementComponent.vue b/src/components/04_product-service/WorkManagementComponent.vue
index 2bf5db83..e79872d9 100644
--- a/src/components/04_product-service/WorkManagementComponent.vue
+++ b/src/components/04_product-service/WorkManagementComponent.vue
@@ -584,7 +584,12 @@ watch(
:key="i"
class="surface-2 bordered rounded q-px-xs"
>
- {{ optionStore.mapOption(att.fieldName ?? '') }}
+ {{
+ optionStore.mapOption(
+ att.fieldName ?? '',
+ 'propertiesField',
+ )
+ }}
diff --git a/src/components/04_property-management/FormProperty.vue b/src/components/04_property-management/FormProperty.vue
new file mode 100644
index 00000000..34067e8e
--- /dev/null
+++ b/src/components/04_property-management/FormProperty.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+ {{ $t('general.information', { msg: $t('property.title') }) }}
+
+ {
+ onDrawer
+ ? $emit('changeStatus')
+ : status !== 'INACTIVE'
+ ? (status = 'INACTIVE')
+ : (status = 'CREATED');
+ }
+ "
+ />
+ {{ $t('status.title') }}
+
+
+
+
+
+
(name = v?.toString() || '')"
+ :rules="[(val: string) => !!val || $t('form.error.required')]"
+ />
+
+ (nameEN = v?.toString() || '')"
+ :rules="[(val: string) => !!val || $t('form.error.required')]"
+ />
+
+
+
+
+
+
+
+ {{ scope.opt.label }}
+
+
+
+
+
+
+
+
+ {{ scope.opt.label }}
+
+
+
+
+
+
+
+
diff --git a/src/components/dialog/DialogProperties.vue b/src/components/dialog/DialogProperties.vue
index 0d05baab..4dffdb4e 100644
--- a/src/components/dialog/DialogProperties.vue
+++ b/src/components/dialog/DialogProperties.vue
@@ -1,10 +1,17 @@
+
+
+
+
+
+
+ {{ $t('general.dataSum') }}
+
+ {{ pageState.total }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ if ($q.screen.gt.xs || propertyPage === propertyPageMax) return;
+ propertyPage = propertyPage + 1;
+ fetchPropertyList().then(() =>
+ done(propertyPage >= propertyPageMax),
+ );
+ }
+ "
+ >
+
+
+
+
+ {{ $t(v.label) }}
+
+
+
+
+
+
+
+
+ {{
+ $q.screen.xs
+ ? props.rowIndex + 1
+ : (propertyPage - 1) * propertyPageSize +
+ props.rowIndex +
+ 1
+ }}
+
+
+
+
+
+
+
+
+ {{
+ $i18n.locale === 'eng'
+ ? props.row.nameEN
+ : props.row.name
+ }}
+
+
+
+
+
+
+
+ {{
+ typeOption[props.row.type.type as keyof typeof typeOption]
+ .label
+ }}
+
+
+ {
+ assignFormData(props.row);
+ triggerDialog('view');
+ }
+ "
+ />
+ {
+ assignFormData(props.row);
+ triggerDialog('view');
+ }
+ "
+ @edit="
+ () => {
+ assignFormData(props.row);
+ triggerDialog('edit');
+ }
+ "
+ @delete="
+ () => {
+ deleteProperty(props.row.id);
+ }
+ "
+ @change-status="
+ () => {
+ triggerChangeStatus(props.row);
+ }
+ "
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ $i18n.locale === 'eng'
+ ? props.row.nameEN
+ : props.row.name
+ }}
+
+ {{
+ $i18n.locale === 'eng'
+ ? props.row.nameEN
+ : props.row.name
+ }}
+
+
+
+
+
+
+ {{
+ typeOption[
+ props.row.type.type as keyof typeof typeOption
+ ].label
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ deleteProperty()"
+ @drawer-edit="pageState.isDrawerEdit = true"
+ @drawer-undo="() => undo()"
+ @close="() => resetForm()"
+ @submit="() => submit()"
+ :readonly="!pageState.isDrawerEdit"
+ :isEdit="pageState.isDrawerEdit"
+ v-model="pageState.addModal"
+ v-model:property-data="formProperty"
+ v-model:drawer-model="pageState.viewDrawer"
+ />
+
+
+
diff --git a/src/pages/04_property-managment/PropertyDialog.vue b/src/pages/04_property-managment/PropertyDialog.vue
new file mode 100644
index 00000000..333f0ec7
--- /dev/null
+++ b/src/pages/04_property-managment/PropertyDialog.vue
@@ -0,0 +1,252 @@
+
+
+ $emit('submit')"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/05_quotation/QuotationFormProductSelect.vue b/src/pages/05_quotation/QuotationFormProductSelect.vue
index 0a22545b..eb6ffef8 100644
--- a/src/pages/05_quotation/QuotationFormProductSelect.vue
+++ b/src/pages/05_quotation/QuotationFormProductSelect.vue
@@ -773,7 +773,12 @@ watch(
:key="att"
class="bordered q-py-xs q-px-sm rounded"
>
- {{ optionStore.mapOption(att.fieldName) }}
+ {{
+ optionStore.mapOption(
+ att.fieldName,
+ 'propertiesField',
+ )
+ }}
diff --git a/src/pages/08_request-list/PropertiesExpansion.vue b/src/pages/08_request-list/PropertiesExpansion.vue
index b7ac0250..b2b9baad 100644
--- a/src/pages/08_request-list/PropertiesExpansion.vue
+++ b/src/pages/08_request-list/PropertiesExpansion.vue
@@ -164,12 +164,15 @@ defineEmits<{
class="row items-center q-pb-sm"
>