From b1d82a23843acf669bf9ab9a38d1c135952ca13a Mon Sep 17 00:00:00 2001 From: kjs Date: Mon, 30 Mar 2026 18:10:58 +0900 Subject: [PATCH 1/2] Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into jskim-node From a9e496ce0b919578153d50d1a40dea24f7b581a1 Mon Sep 17 00:00:00 2001 From: kjs Date: Mon, 30 Mar 2026 18:25:46 +0900 Subject: [PATCH 2/2] Enhance division filtering in sales pages for better data retrieval - Updated the division filter logic in CustomerManagementPage, SalesOrderPage, and SalesItemPage to use 'contains' operator for multi-value matching. - This change allows for more flexible filtering of sales items based on the division, improving the accuracy of displayed data. - The division filter now consistently uses the same value across different components, ensuring uniformity in data handling. This commit enhances the functionality of the sales management pages by refining the filtering process, leading to a better user experience in managing sales data. --- .../app/(main)/COMPANY_29/sales/customer/page.tsx | 2 ++ frontend/app/(main)/COMPANY_29/sales/order/page.tsx | 11 ++--------- .../app/(main)/COMPANY_29/sales/sales-item/page.tsx | 4 ++-- frontend/app/(main)/COMPANY_7/sales/customer/page.tsx | 2 ++ frontend/app/(main)/COMPANY_7/sales/order/page.tsx | 11 ++--------- .../app/(main)/COMPANY_7/sales/sales-item/page.tsx | 4 ++-- 6 files changed, 12 insertions(+), 22 deletions(-) diff --git a/frontend/app/(main)/COMPANY_29/sales/customer/page.tsx b/frontend/app/(main)/COMPANY_29/sales/customer/page.tsx index 045679e5..80995df0 100644 --- a/frontend/app/(main)/COMPANY_29/sales/customer/page.tsx +++ b/frontend/app/(main)/COMPANY_29/sales/customer/page.tsx @@ -457,6 +457,8 @@ export default function CustomerManagementPage() { try { const filters: any[] = []; if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword }); + // 영업관리/판매품 division 필터 (다중값 contains 매칭) + filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" }); const res = await apiClient.post(`/table-management/tables/item_info/data`, { page: 1, size: 50, dataFilter: filters.length > 0 ? { enabled: true, filters } : undefined, diff --git a/frontend/app/(main)/COMPANY_29/sales/order/page.tsx b/frontend/app/(main)/COMPANY_29/sales/order/page.tsx index 7f23909c..7d231bcf 100644 --- a/frontend/app/(main)/COMPANY_29/sales/order/page.tsx +++ b/frontend/app/(main)/COMPANY_29/sales/order/page.tsx @@ -474,16 +474,9 @@ export default function SalesOrderPage() { if (itemSearchKeyword) { filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword }); } + // division 필터는 다중값(쉼표 구분)이므로 contains로 부분 매칭 if (itemSearchDivision !== "all") { - filters.push({ columnName: "division", operator: "equals", value: itemSearchDivision }); - } else { - // 기본: 영업관련 division만 (판매품, 제품, 영업관리 등) - const salesDivCodes = (categoryOptions["item_division"] || []) - .filter((o) => ["판매품", "제품", "영업관리"].some((label) => o.label.includes(label))) - .map((o) => o.code); - if (salesDivCodes.length > 0) { - filters.push({ columnName: "division", operator: "in", value: salesDivCodes }); - } + filters.push({ columnName: "division", operator: "contains", value: itemSearchDivision }); } const res = await apiClient.post(`/table-management/tables/item_info/data`, { page: p, size: s, diff --git a/frontend/app/(main)/COMPANY_29/sales/sales-item/page.tsx b/frontend/app/(main)/COMPANY_29/sales/sales-item/page.tsx index 5da2b3b5..a2fcd9a9 100644 --- a/frontend/app/(main)/COMPANY_29/sales/sales-item/page.tsx +++ b/frontend/app/(main)/COMPANY_29/sales/sales-item/page.tsx @@ -166,8 +166,8 @@ export default function SalesItemPage() { try { const filters: { columnName: string; operator: string; value: any }[] = searchFilters.map((f) => ({ columnName: f.columnName, operator: f.operator, value: f.value })); - // 판매품목 division 필터 (다중값 컬럼이므로 contains로 매칭) - filters.push({ columnName: "division", operator: "contains", value: "CAT_DIV_SALES" }); + // 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭) + filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" }); const res = await apiClient.post(`/table-management/tables/${ITEM_TABLE}/data`, { page: 1, size: 500, diff --git a/frontend/app/(main)/COMPANY_7/sales/customer/page.tsx b/frontend/app/(main)/COMPANY_7/sales/customer/page.tsx index 045679e5..80995df0 100644 --- a/frontend/app/(main)/COMPANY_7/sales/customer/page.tsx +++ b/frontend/app/(main)/COMPANY_7/sales/customer/page.tsx @@ -457,6 +457,8 @@ export default function CustomerManagementPage() { try { const filters: any[] = []; if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword }); + // 영업관리/판매품 division 필터 (다중값 contains 매칭) + filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" }); const res = await apiClient.post(`/table-management/tables/item_info/data`, { page: 1, size: 50, dataFilter: filters.length > 0 ? { enabled: true, filters } : undefined, diff --git a/frontend/app/(main)/COMPANY_7/sales/order/page.tsx b/frontend/app/(main)/COMPANY_7/sales/order/page.tsx index 7f23909c..7d231bcf 100644 --- a/frontend/app/(main)/COMPANY_7/sales/order/page.tsx +++ b/frontend/app/(main)/COMPANY_7/sales/order/page.tsx @@ -474,16 +474,9 @@ export default function SalesOrderPage() { if (itemSearchKeyword) { filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword }); } + // division 필터는 다중값(쉼표 구분)이므로 contains로 부분 매칭 if (itemSearchDivision !== "all") { - filters.push({ columnName: "division", operator: "equals", value: itemSearchDivision }); - } else { - // 기본: 영업관련 division만 (판매품, 제품, 영업관리 등) - const salesDivCodes = (categoryOptions["item_division"] || []) - .filter((o) => ["판매품", "제품", "영업관리"].some((label) => o.label.includes(label))) - .map((o) => o.code); - if (salesDivCodes.length > 0) { - filters.push({ columnName: "division", operator: "in", value: salesDivCodes }); - } + filters.push({ columnName: "division", operator: "contains", value: itemSearchDivision }); } const res = await apiClient.post(`/table-management/tables/item_info/data`, { page: p, size: s, diff --git a/frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx b/frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx index 5da2b3b5..a2fcd9a9 100644 --- a/frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx +++ b/frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx @@ -166,8 +166,8 @@ export default function SalesItemPage() { try { const filters: { columnName: string; operator: string; value: any }[] = searchFilters.map((f) => ({ columnName: f.columnName, operator: f.operator, value: f.value })); - // 판매품목 division 필터 (다중값 컬럼이므로 contains로 매칭) - filters.push({ columnName: "division", operator: "contains", value: "CAT_DIV_SALES" }); + // 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭) + filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" }); const res = await apiClient.post(`/table-management/tables/${ITEM_TABLE}/data`, { page: 1, size: 500,