Enhance Item Search Functionality in Sales Order Page
- Updated the item search logic to include additional filters for both item name and item number, improving search accuracy. - Implemented an API call to fetch item information based on the search keyword, allowing for dynamic filtering of results. - Adjusted the state management to handle cases where no items are found, ensuring a smooth user experience. (TASK: ERP-031)
This commit is contained in:
@@ -784,7 +784,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -784,7 +784,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -784,7 +784,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -784,7 +784,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -785,7 +785,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -784,7 +784,28 @@ export default function SalesOrderPage() {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
|
||||
// 관리품목 필터: 다중값(콤마 구분) 저장된 경우도 매칭되도록 contains 사용
|
||||
if (itemSearchDivision !== "all") {
|
||||
|
||||
@@ -599,7 +599,28 @@ export default function JeilGlassOrderPage() {
|
||||
const filters: any[] = [];
|
||||
if (salesCode) filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
if (productCode) filters.push({ columnName: "type", operator: "equals", value: productCode });
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
if (itemSearchKeyword) {
|
||||
const kwRes = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 0,
|
||||
dataFilter: {
|
||||
enabled: true,
|
||||
matchType: "any",
|
||||
filters: [
|
||||
{ columnName: "item_name", operator: "contains", value: itemSearchKeyword },
|
||||
{ columnName: "item_number", operator: "contains", value: itemSearchKeyword },
|
||||
],
|
||||
},
|
||||
autoFilter: true,
|
||||
});
|
||||
const kwRows = kwRes.data?.data?.data || kwRes.data?.data?.rows || [];
|
||||
const kwIds = kwRows.map((r: any) => r.id).filter(Boolean);
|
||||
if (kwIds.length === 0) {
|
||||
setItemSearchResults([]); setItemTotal(0); setItemTotalPages(1);
|
||||
setItemSearchLoading(false);
|
||||
return;
|
||||
}
|
||||
filters.push({ columnName: "id", operator: "in", value: kwIds });
|
||||
}
|
||||
if (itemSearchWidth) filters.push({ columnName: "width", operator: "equals", value: itemSearchWidth });
|
||||
if (itemSearchHeight) filters.push({ columnName: "height", operator: "equals", value: itemSearchHeight });
|
||||
if (itemSearchThickness) filters.push({ columnName: "thickness", operator: "equals", value: itemSearchThickness });
|
||||
|
||||
Reference in New Issue
Block a user