diff --git a/src/components/02_personnel-management/FormPerson.vue b/src/components/02_personnel-management/FormPerson.vue
index 1aee5b95..cb0463af 100644
--- a/src/components/02_personnel-management/FormPerson.vue
+++ b/src/components/02_personnel-management/FormPerson.vue
@@ -293,15 +293,11 @@ watch(
:readonly="readonly"
:label="$t('form.birthDate')"
:disabled-dates="disabledAfterToday"
- :rules="
- employee
- ? []
- : [
- (val: string) =>
- !!val ||
- $t('form.error.selectField', { field: $t('form.birthDate') }),
- ]
- "
+ :rules="[
+ (val: string) =>
+ !!val ||
+ $t('form.error.selectField', { field: $t('form.birthDate') }),
+ ]"
/>
$emit('click', e)"
v-bind="{ ...$props, ...$attrs }"
:icon="icon || 'mdi-content-save-outline'"
- color="207 96% 32%"
+ :color="color || '207 96% 32%'"
:title="iconOnly ? $t('general.save') : undefined"
>
{{ label || $t('general.save') }}
diff --git a/src/pages/04_product-service/MainPage.vue b/src/pages/04_product-service/MainPage.vue
index 442401f1..092566cd 100644
--- a/src/pages/04_product-service/MainPage.vue
+++ b/src/pages/04_product-service/MainPage.vue
@@ -102,6 +102,8 @@ const {
deleteWork,
importProduct,
+
+ productExport,
} = productServiceStore;
const { workNameItems } = storeToRefs(productServiceStore);
@@ -1896,6 +1898,25 @@ async function submitWorkName(
else await editWork(workId, data);
}
+async function triggerExport() {
+ productExport({
+ pageSize: 100_000,
+ productGroupId: currentIdGroup.value,
+ query: !!inputSearchProductAndService.value
+ ? inputSearchProductAndService.value
+ : undefined,
+ status:
+ currentStatus.value === 'INACTIVE'
+ ? 'INACTIVE'
+ : currentStatus.value === 'ACTIVE'
+ ? 'ACTIVE'
+ : undefined,
+
+ startDate: new Date(searchDate.value[0]),
+ endDate: new Date(searchDate.value[1]),
+ });
+}
+
watch(
() => formService.value.attributes.workflowId,
async (a, b) => {
@@ -2229,7 +2250,6 @@ watch(
-
+
+
@@ -3632,7 +3659,7 @@ watch(
:delete-data="() => deleteGroupById()"
:close="
() => {
- (drawerInfo = false), (currentIdGroupType = '');
+ ((drawerInfo = false), (currentIdGroupType = ''));
}
"
hide-action
diff --git a/src/pages/05_quotation/QuotationForm.vue b/src/pages/05_quotation/QuotationForm.vue
index 2f94dca0..1846848a 100644
--- a/src/pages/05_quotation/QuotationForm.vue
+++ b/src/pages/05_quotation/QuotationForm.vue
@@ -161,49 +161,7 @@ const selectedWorker = ref<
}[];
})[]
>([]);
-const selectedWorkerItem = computed(() => {
- return [
- ...selectedWorker.value.map((e) => ({
- foreignRefNo: e.employeePassport
- ? e.employeePassport[0]?.number || '-'
- : '-',
- employeeName:
- locale.value === Lang.English
- ? `${e.firstNameEN} ${e.lastNameEN}`
- : e.firstName
- ? `${e.firstName} ${e.lastName}`
- : `${e.firstNameEN} ${e.lastNameEN}`,
- birthDate: dateFormatJS({ date: e.dateOfBirth }),
- gender: e.gender,
- age: calculateAge(e.dateOfBirth),
- nationality: optionStore.mapOption(e.nationality),
- documentExpireDate:
- e.employeePassport !== undefined &&
- e.employeePassport[0]?.expireDate !== undefined
- ? dateFormatJS({ date: e.employeePassport[0]?.expireDate })
- : '-',
- imgUrl: e.selectedImage
- ? `${API_BASE_URL}/employee/${e.id}/image/${e.selectedImage}`
- : '',
- status: e.status,
- })),
-
- ...newWorkerList.value.map((v: any) => ({
- foreignRefNo: v.passportNo,
- employeeName:
- locale.value === Lang.English
- ? `${v.firstNameEN} ${v.lastNameEN}`
- : `${v.firstName} ${v.lastName}`,
- birthDate: dateFormatJS({ date: v.dateOfBirth }),
- gender: v.gender,
- age: calculateAge(v.dateOfBirth),
- nationality: optionStore.mapOption(v.nationality),
- documentExpireDate: '-',
- imgUrl: '',
- status: 'CREATED',
- })),
- ];
-});
+const selectedWorkerItem = ref([]);
const firstCodePayment = ref('');
const selectedProductGroup = ref('');
const selectedInstallmentNo = ref([]);
@@ -556,7 +514,7 @@ async function convertDataToFormSubmit() {
),
);
- selectedWorker.value.forEach((v, i) => {
+ selectedWorkerItem.value.forEach((v, i) => {
if (v.attachment !== undefined) {
v.attachment.forEach((value) => {
fileItemNewWorker.value.push({
@@ -573,7 +531,7 @@ async function convertDataToFormSubmit() {
quotationFormData.value.worker = JSON.parse(
JSON.stringify([
- ...selectedWorker.value.map((v) => {
+ ...selectedWorkerItem.value.map((v) => {
{
return v.id;
}
@@ -806,7 +764,40 @@ function toggleDeleteProduct(index: number) {
}
async function assignWorkerToSelectedWorker() {
- selectedWorker.value = quotationFormData.value.worker;
+ selectedWorkerItem.value = quotationFormData.value.worker.map((e) => {
+ return {
+ id: e.id,
+ foreignRefNo: e.employeePassport
+ ? e.employeePassport[0]?.number || '-'
+ : '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${e.firstNameEN} ${e.lastNameEN}`
+ : `${e.firstName || e.firstNameEN} ${e.lastName || e.lastNameEN}`,
+ birthDate: dateFormatJS({ date: e.dateOfBirth }),
+ gender: e.gender,
+ age: calculateAge(e.dateOfBirth),
+ nationality: optionStore.mapOption(e.nationality),
+ documentExpireDate:
+ e.employeePassport !== undefined &&
+ e.employeePassport[0]?.expireDate !== undefined
+ ? dateFormatJS({ date: e.employeePassport[0]?.expireDate })
+ : '-',
+ imgUrl: e.selectedImage
+ ? `${API_BASE_URL}/employee/${e.id}/image/${e.selectedImage}`
+ : '',
+ employeePassport: e.employeePassport,
+ status: e.status,
+ workerNew: false,
+ lastNameEN: e.lastNameEN,
+ lastName: e.lastName,
+ middleNameEN: e.middleNameEN,
+ middleName: e.middleName,
+ firstNameEN: e.firstNameEN,
+ firstName: e.firstName,
+ namePrefix: e.namePrefix,
+ };
+ });
}
function convertToTable(nodes: Node[]) {
@@ -865,21 +856,21 @@ function convertToTable(nodes: Node[]) {
function convertEmployeeToTable(selected: Employee[]) {
productServiceList.value.forEach((v) => {
- if (selectedWorker.value.length === 0 && v.amount === 1) v.amount -= 1;
+ if (selectedWorkerItem.value.length === 0 && v.amount === 1) v.amount -= 1;
v.amount = Math.max(
- v.amount + selected.length - selectedWorker.value.length,
+ v.amount + selected.length - selectedWorkerItem.value.length,
1,
);
const oldWorkerId: string[] = [];
const newWorkerIndex: number[] = [];
- selectedWorker.value.forEach((item, i) => {
+ selectedWorkerItem.value.forEach((item, i) => {
if (v.workerIndex.includes(i)) oldWorkerId.push(item.id);
});
selected.forEach((item, i) => {
- if (selectedWorker.value.find((n) => item.id === n.id)) return;
+ if (selectedWorkerItem.value.find((n) => item.id === n.id)) return;
newWorkerIndex.push(i);
});
@@ -892,7 +883,7 @@ function convertEmployeeToTable(selected: Employee[]) {
pageState.employeeModal = false;
quotationFormData.value.workerMax = Math.max(
quotationFormData.value.workerMax || 1,
- selectedWorker.value.length,
+ selectedWorkerItem.value.length,
);
}
@@ -965,6 +956,71 @@ function viewProductFile(data: ProductRelation) {
pageState.imageDialogUrl = base64 ? base64[1] : '';
}
+function combineWorker(newWorker: any, oldWorker: any) {
+ selectedWorkerItem.value = [
+ ...oldWorker.map((e) => ({
+ id: e.id,
+ foreignRefNo: e.employeePassport
+ ? e.employeePassport[0]?.number || '-'
+ : '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${e.firstNameEN} ${e.lastNameEN}`
+ : `${e.firstName || e.firstNameEN} ${e.lastName || e.lastNameEN}`,
+ birthDate: dateFormatJS({ date: e.dateOfBirth }),
+ gender: e.gender,
+ age: calculateAge(e.dateOfBirth),
+ nationality: optionStore.mapOption(e.nationality),
+ documentExpireDate:
+ e.employeePassport !== undefined &&
+ e.employeePassport[0]?.expireDate !== undefined
+ ? dateFormatJS({ date: e.employeePassport[0]?.expireDate })
+ : '-',
+ imgUrl: e.selectedImage
+ ? `${API_BASE_URL}/employee/${e.id}/image/${e.selectedImage}`
+ : '',
+
+ employeePassport: e.employeePassport,
+ status: e.status,
+ workerNew: false,
+ lastNameEN: e.lastNameEN,
+ lastName: e.lastName,
+ middleNameEN: e.middleNameEN,
+ middleName: e.middleName,
+ firstNameEN: e.firstNameEN,
+ firstName: e.firstName,
+ namePrefix: e.namePrefix,
+ })),
+
+ ...newWorker.map((v: any) => ({
+ id: v.id,
+ foreignRefNo: v.passportNo || '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${v.firstNameEN} ${v.lastNameEN}`
+ : `${v.firstName || v.firstNameEN} ${v.lastName || v.lastNameEN}`,
+ birthDate: dateFormatJS({ date: v.dateOfBirth }),
+ gender: v.gender,
+ age: calculateAge(v.dateOfBirth),
+ nationality: optionStore.mapOption(v.nationality),
+ documentExpireDate: '-',
+ imgUrl: '',
+ status: 'CREATED',
+
+ lastNameEN: v.lastNameEN,
+ lastName: v.lastName,
+ middleNameEN: v.middleNameEN,
+ middleName: v.middleName,
+ firstNameEN: v.firstNameEN,
+ firstName: v.firstName,
+ namePrefix: v.namePrefix,
+
+ dateOfBirth: v.dateOfBirth,
+ workerNew: true,
+ })),
+ ];
+}
+
const sessionData = ref>();
onMounted(async () => {
@@ -1036,7 +1092,7 @@ watch(
() => quotationFormData.value.customerBranchId,
async (v) => {
if (!v) return;
- selectedWorker.value = [];
+ selectedWorkerItem.value = [];
},
);
@@ -1116,7 +1172,7 @@ function storeDataLocal() {
workName: quotationFormData.value.workName,
dueDate: quotationFormData.value.dueDate,
},
- selectedWorker: selectedWorker.value,
+ selectedWorker: selectedWorkerItem.value,
createdBy: quotationFormState.value.createdBy('tha'),
agentPrice: agentPrice.value,
},
@@ -1201,10 +1257,10 @@ async function getWorkerFromCriteria(
if (!ret) return false; // error, do not close dialog
const deduplicate = ret.result.filter(
- (a) => !selectedWorker.value.find((b) => a.id === b.id),
+ (a) => !selectedWorkerItem.value.find((b) => a.id === b.id),
);
- convertEmployeeToTable([...deduplicate, ...selectedWorker.value]);
+ convertEmployeeToTable([...deduplicate, ...selectedWorkerItem.value]);
return true;
}
@@ -1594,15 +1650,15 @@ function covertToNode() {
(v) =>
(quotationFormData.workerMax = Math.max(
v,
- selectedWorker.length,
+ selectedWorkerItem.length,
))
"
:employee-amount="
- quotationFormData.workerMax || selectedWorker.length
+ quotationFormData.workerMax || selectedWorkerItem.length
"
:readonly="readonly"
:rows="selectedWorkerItem"
- @delete="(i) => deleteItem(selectedWorker, i)"
+ @delete="(i) => deleteItem(selectedWorkerItem, i)"
/>
@@ -1846,7 +1902,7 @@ function covertToNode() {
installments: quotationFormData.paySplit,
},
'quotation-labor': {
- name: selectedWorker.map(
+ name: selectedWorkerItem.map(
(v, i) =>
`${i + 1}. ` +
`${v.employeePassport.length !== 0 ? v.employeePassport[0].number + '_' : ''}${v.namePrefix}.${v.firstNameEN ? `${v.firstNameEN} ${v.lastNameEN}` : `${v.firstName} ${v.lastName}`} `.toUpperCase(),
@@ -2389,13 +2445,12 @@ function covertToNode() {
{
- selectedWorker = v.worker;
+ combineWorker(v.newWorker, v.worker);
}
"
/>
@@ -2438,7 +2493,7 @@ function covertToNode() {
(),
{},
);
@@ -133,7 +133,7 @@ const optionStore = useOptionStore();
const employeeStore = useEmployeeStore();
const open = defineModel('open', { default: false });
-const newWorkerList = defineModel<
+const newWorkerList = ref<
(EmployeeWorker & {
attachment?: {
name?: string;
@@ -143,7 +143,7 @@ const newWorkerList = defineModel<
_meta?: Record;
}[];
})[]
->('newWorkerList', { default: [] });
+>([]);
const workerSelected = ref([]);
const workerList = ref([]);
const importWorkerCriteria = ref<{
@@ -208,7 +208,13 @@ function getEmployeeImageUrl(item: Employee) {
function init() {
if (props.preselectWorker) {
- workerSelected.value = JSON.parse(JSON.stringify(props.preselectWorker));
+ workerSelected.value = JSON.parse(
+ JSON.stringify(props.preselectWorker.filter((v) => !v.workerNew)),
+ );
+
+ newWorkerList.value = JSON.parse(
+ JSON.stringify(props.preselectWorker.filter((v) => v.workerNew)),
+ );
}
getWorkerList();
}
@@ -608,11 +614,14 @@ watch(
solid
id="btn-success"
@click="
- (emits('success', {
- worker: workerSelected,
- newWorker: newWorkerList,
- }),
- (open = false))
+ () => {
+ $emit('success', {
+ worker: workerSelected,
+ newWorker: newWorkerList,
+ });
+
+ open = false;
+ }
"
>
{{ $t('general.select', { msg: $t('quotation.employeeList') }) }}
@@ -634,9 +643,11 @@ watch(
if (employeeFormState.currentTab === 'personalInfo') {
const currentEmployeeId =
await employeeFormStore.submitPersonal(onCreateImageList);
- quotationForm.injectNewEmployee({
- data: { ...currentFromDataEmployee, id: currentEmployeeId },
- });
+ newWorkerList.push(
+ quotationForm.injectNewEmployee({
+ data: { ...currentFromDataEmployee, id: currentEmployeeId },
+ }),
+ );
employeeFormState.isEmployeeEdit = false;
employeeFormState.dialogType = 'info';
}
diff --git a/src/pages/05_quotation/form.ts b/src/pages/05_quotation/form.ts
index e44fa747..5b16785a 100644
--- a/src/pages/05_quotation/form.ts
+++ b/src/pages/05_quotation/form.ts
@@ -69,6 +69,7 @@ export const useQuotationForm = defineStore('form-quotation', () => {
file?: File;
_meta?: Record;
}[];
+ workerNew: boolean;
})[]
>([]);
@@ -220,7 +221,7 @@ export const useQuotationForm = defineStore('form-quotation', () => {
},
callback?: () => void,
) {
- newWorkerList.value.push({
+ const temp = {
//passportNo: obj.data.passportNo,
//documentExpireDate: obj.data.documentExpireDate,
id: obj.data.id,
@@ -235,9 +236,12 @@ export const useQuotationForm = defineStore('form-quotation', () => {
gender: obj.data.gender,
dateOfBirth: obj.data.dateOfBirth,
attachment: obj.data.attachment,
- });
+ workerNew: true,
+ };
callback?.();
+
+ return temp;
}
function dialogDelete(callback: () => void) {
diff --git a/src/pages/12_debit-note/FormPage.vue b/src/pages/12_debit-note/FormPage.vue
index cf353a96..8b78a267 100644
--- a/src/pages/12_debit-note/FormPage.vue
+++ b/src/pages/12_debit-note/FormPage.vue
@@ -209,47 +209,7 @@ const selectedWorker = ref<
}[];
})[]
>([]);
-const selectedWorkerItem = computed(() => {
- return [
- ...selectedWorker.value.map((e) => ({
- foreignRefNo: e.employeePassport
- ? e.employeePassport[0]?.number || '-'
- : '-',
- employeeName:
- locale.value === Lang.English
- ? `${e.firstNameEN} ${e.lastNameEN}`
- : `${e.firstName || e.firstNameEN} ${e.lastName || e.lastNameEN}`,
- birthDate: dateFormatJS({ date: e.dateOfBirth }),
- gender: e.gender,
- age: calculateAge(e.dateOfBirth),
- nationality: optionStore.mapOption(e.nationality),
- documentExpireDate:
- e.employeePassport !== undefined &&
- e.employeePassport[0]?.expireDate !== undefined
- ? dateFormatJS({ date: e.employeePassport[0]?.expireDate })
- : '-',
- imgUrl: e.selectedImage
- ? `${API_BASE_URL}/employee/${e.id}/image/${e.selectedImage}`
- : '',
- status: e.status,
- })),
-
- ...newWorkerList.value.map((v: any) => ({
- foreignRefNo: v.passportNo || '-',
- employeeName:
- locale.value === Lang.English
- ? `${v.firstNameEN} ${v.lastNameEN}`
- : `${v.firstName || v.firstNameEN} ${v.lastName || v.lastNameEN}`,
- birthDate: dateFormatJS({ date: v.dateOfBirth }),
- gender: v.gender,
- age: calculateAge(v.dateOfBirth),
- nationality: optionStore.mapOption(v.nationality),
- documentExpireDate: '-',
- imgUrl: '',
- status: 'CREATED',
- })),
- ];
-});
+const selectedWorkerItem = ref([]);
const selectedInstallmentNo = ref([]);
const installmentAmount = ref(0);
@@ -374,7 +334,39 @@ function assignProductServiceList() {
function assignSelectedWorker() {
if (debitNoteData.value)
- selectedWorker.value = debitNoteData.value.worker.map((v) => v.employee);
+ selectedWorkerItem.value = debitNoteData.value.worker.map((e) => {
+ return {
+ id: e.employee.id,
+ foreignRefNo: e.employee.employeePassport
+ ? e.employee.employeePassport[0]?.number || '-'
+ : '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${e.employee.firstNameEN} ${e.employee.lastNameEN}`
+ : `${e.employee.firstName || e.employee.firstNameEN} ${e.employee.lastName || e.employee.lastNameEN}`,
+ birthDate: dateFormatJS({ date: e.employee.dateOfBirth }),
+ gender: e.employee.gender,
+ age: calculateAge(e.employee.dateOfBirth),
+ nationality: optionStore.mapOption(e.employee.nationality),
+ documentExpireDate:
+ e.employee.employeePassport !== undefined &&
+ e.employee.employeePassport[0]?.expireDate !== undefined
+ ? dateFormatJS({ date: e.employee.employeePassport[0]?.expireDate })
+ : '-',
+ imgUrl: e.employee.selectedImage
+ ? `${API_BASE_URL}/employee/${e.id}/image/${e.employee.selectedImage}`
+ : '',
+ status: e.employee.status,
+ workerNew: false,
+ lastNameEN: e.employee.lastNameEN,
+ lastName: e.employee.lastName,
+ middleNameEN: e.employee.middleNameEN,
+ middleName: e.employee.middleName,
+ firstNameEN: e.employee.firstNameEN,
+ firstName: e.employee.firstName,
+ namePrefix: e.employee.namePrefix,
+ };
+ });
}
async function assignFormData(id: string) {
@@ -540,8 +532,6 @@ function getPrice(
) {
if (filterHook) list = list.filter(filterHook);
- console.log(list);
-
return list.reduce(
(a, c) => {
if (
@@ -815,15 +805,11 @@ async function submit() {
worker: JSON.parse(
JSON.stringify([
- ...selectedWorker.value.map((v) => {
+ ...selectedWorkerItem.value.map((v) => {
{
return v.id;
}
}),
- ...newWorkerList.value.map((v) => {
- const { attachment, ...payload } = v;
- return pageState.mode === 'edit' ? payload.id : payload;
- }),
]),
),
dueDate: currentFormData.value.dueDate,
@@ -902,7 +888,7 @@ function storeDataLocal() {
dueDate: currentFormData.value.dueDate,
},
productServicelist: productService.value,
- selectedWorker: selectedWorker.value,
+ selectedWorker: selectedWorkerItem.value,
createdBy: getName(),
},
}),
@@ -927,6 +913,69 @@ function closeAble() {
return window.opener !== null;
}
+function combineWorker(newWorker: any, oldWorker: any) {
+ selectedWorkerItem.value = [
+ ...oldWorker.map((e) => ({
+ id: e.id,
+ foreignRefNo: e.employeePassport
+ ? e.employeePassport[0]?.number || '-'
+ : '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${e.firstNameEN} ${e.lastNameEN}`
+ : `${e.firstName || e.firstNameEN} ${e.lastName || e.lastNameEN}`,
+ birthDate: dateFormatJS({ date: e.dateOfBirth }),
+ gender: e.gender,
+ age: calculateAge(e.dateOfBirth),
+ nationality: optionStore.mapOption(e.nationality),
+ documentExpireDate:
+ e.employeePassport !== undefined &&
+ e.employeePassport[0]?.expireDate !== undefined
+ ? dateFormatJS({ date: e.employeePassport[0]?.expireDate })
+ : '-',
+ imgUrl: e.selectedImage
+ ? `${API_BASE_URL}/employee/${e.id}/image/${e.selectedImage}`
+ : '',
+ status: e.status,
+ workerNew: false,
+ lastNameEN: e.lastNameEN,
+ lastName: e.lastName,
+ middleNameEN: e.middleNameEN,
+ middleName: e.middleName,
+ firstNameEN: e.firstNameEN,
+ firstName: e.firstName,
+ namePrefix: e.namePrefix,
+ })),
+
+ ...newWorker.map((v: any) => ({
+ id: v.id,
+ foreignRefNo: v.passportNo || '-',
+ employeeName:
+ locale.value === Lang.English
+ ? `${v.firstNameEN} ${v.lastNameEN}`
+ : `${v.firstName || v.firstNameEN} ${v.lastName || v.lastNameEN}`,
+ birthDate: dateFormatJS({ date: v.dateOfBirth }),
+ gender: v.gender,
+ age: calculateAge(v.dateOfBirth),
+ nationality: optionStore.mapOption(v.nationality),
+ documentExpireDate: '-',
+ imgUrl: '',
+ status: 'CREATED',
+
+ lastNameEN: v.lastNameEN,
+ lastName: v.lastName,
+ middleNameEN: v.middleNameEN,
+ middleName: v.middleName,
+ firstNameEN: v.firstNameEN,
+ firstName: v.firstName,
+ namePrefix: v.namePrefix,
+
+ dateOfBirth: v.dateOfBirth,
+ workerNew: true,
+ })),
+ ];
+}
+
watch(
() => pageState.mode,
() => toggleMode(pageState.mode),
@@ -1111,7 +1160,7 @@ async function submitAccepted() {
"
:row-worker="selectedWorkerItem"
@add-worker="() => (pageState.employeeModal = true)"
- @delete="(i) => deleteItem(selectedWorker, i)"
+ @delete="(i) => deleteItem(selectedWorkerItem, i)"
/>
@@ -1376,13 +1425,12 @@ async function submitAccepted() {
{
- selectedWorker = v.worker;
+ combineWorker(v.newWorker, v.worker);
}
"
/>
diff --git a/src/stores/product-service/index.ts b/src/stores/product-service/index.ts
index 80e32627..db178b43 100644
--- a/src/stores/product-service/index.ts
+++ b/src/stores/product-service/index.ts
@@ -2,6 +2,7 @@ import { defineStore } from 'pinia';
import { api } from 'src/boot/axios';
import { Pagination } from 'stores/types';
+import { getToken } from 'src/services/keycloak';
import {
ProductGroup,
@@ -19,6 +20,7 @@ import {
import { ref } from 'vue';
const useProductServiceStore = defineStore('api-product-service', () => {
+ const baseUrl = import.meta.env.VITE_API_BASE_URL;
const splitPay = ref(0);
const workNameItems = ref<
{
@@ -528,6 +530,53 @@ const useProductServiceStore = defineStore('api-product-service', () => {
if (!res) return false;
}
+ async function productExport(params: {
+ status?: 'CREATED' | 'ACTIVE' | 'INACTIVE';
+ shared?: boolean;
+ productGroupId?: string;
+ query?: string;
+ page?: number;
+ pageSize?: number;
+ orderField?: string;
+ orderBy?: string;
+ activeOnly?: boolean;
+ startDate?: Date;
+ endDate?: Date;
+ }) {
+ let url = baseUrl + '/' + 'product-export';
+
+ const queryParams = new URLSearchParams(
+ Object.keys(params).reduce((acc: Record, key) => {
+ const value = params[key as keyof typeof params];
+ if (value !== undefined && value !== null && value !== '') {
+ const stringValue =
+ typeof value === 'boolean' || typeof value === 'number'
+ ? String(value)
+ : value instanceof Date
+ ? value.toISOString()
+ : String(value);
+ acc[key] = stringValue;
+ }
+ return acc;
+ }, {}),
+ );
+
+ url += '?' + queryParams.toString();
+
+ const res = await fetch(url, {
+ headers: { ['Authorization']: 'Bearer ' + (await getToken()) },
+ });
+ const text = await res.json();
+ const blob = new Blob([text], { type: 'text/csv' });
+ if (res.ok && blob) {
+ const a = document.createElement('a');
+ a.download = 'customer-report' + '.csv';
+ a.href = window.URL.createObjectURL(blob);
+ a.click();
+ a.remove();
+ }
+ }
+
return {
workNameItems,
splitPay,
@@ -568,6 +617,8 @@ const useProductServiceStore = defineStore('api-product-service', () => {
deleteImageByName,
importProduct,
+
+ productExport,
};
});