Merge branch 'main' of https://g.wace.me/jskim/vexplor_dev
Some checks failed
Build and Push Images / build-and-push (push) Failing after 1m35s
Some checks failed
Build and Push Images / build-and-push (push) Failing after 1m35s
This commit is contained in:
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,10 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +417,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,10 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +417,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -176,8 +176,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -313,8 +312,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = useCallback(async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
dataFilter: { enabled: true, filters },
|
||||
|
||||
@@ -311,8 +311,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,10 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +417,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,10 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +417,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,11 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
// item_info의 division 카테고리도 로드 (품목 검색 시 외주관리 코드 조회용)
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +418,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true; // 카테고리 미로드 시 전체 표시
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,11 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
// item_info의 division 카테고리도 로드 (품목 검색 시 외주관리 코드 조회용)
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +418,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -142,7 +142,7 @@ export default function SubcontractorItemPage() {
|
||||
try {
|
||||
const filters: any[] = [];
|
||||
if (outsourcingDivisionCode) {
|
||||
filters.push({ columnName: "division", operator: "equals", value: outsourcingDivisionCode });
|
||||
filters.push({ columnName: "division", operator: "contains", value: outsourcingDivisionCode });
|
||||
}
|
||||
if (searchKeyword) {
|
||||
filters.push({ columnName: "item_name", operator: "contains", value: searchKeyword });
|
||||
|
||||
@@ -141,6 +141,10 @@ export default function SubcontractorManagementPage() {
|
||||
if (res.data?.success) optMap[col] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
try {
|
||||
const res = await apiClient.get(`/table-categories/item_info/division/values`);
|
||||
if (res.data?.success) optMap["item_division"] = flatten(res.data.data || []);
|
||||
} catch { /* skip */ }
|
||||
setCategoryOptions(optMap);
|
||||
|
||||
const priceOpts: Record<string, { code: string; label: string }[]> = {};
|
||||
@@ -413,11 +417,12 @@ export default function SubcontractorManagementPage() {
|
||||
});
|
||||
const allItems = res.data?.data?.data || res.data?.data?.rows || [];
|
||||
const existingItemIds = new Set(priceItems.map((p: any) => p.item_id || p.item_number));
|
||||
const OUTSOURCING_CODE = "CAT_MMDJB7R4_TO3T";
|
||||
const outsourcingCode = categoryOptions["item_division"]?.find((o) => o.label === "외주관리")?.code;
|
||||
setItemSearchResults(allItems.filter((item: any) => {
|
||||
if (existingItemIds.has(item.item_number) || existingItemIds.has(item.id)) return false;
|
||||
if (!outsourcingCode) return true;
|
||||
const div = item.division || "";
|
||||
return div.includes(OUTSOURCING_CODE) || div.includes("외주");
|
||||
return div.includes(outsourcingCode);
|
||||
}));
|
||||
} catch { /* skip */ } finally { setItemSearchLoading(false); }
|
||||
};
|
||||
|
||||
@@ -48,8 +48,7 @@ const ITEM_GRID_COLUMNS = [
|
||||
{ key: "item_name", label: "품명" },
|
||||
{ key: "size", label: "규격" },
|
||||
{ key: "unit", label: "단위" },
|
||||
{ key: "standard_price", label: "기준단가" },
|
||||
{ key: "standard_price", label: "구매단가" },
|
||||
{ key: "standard_price", label: "기준단가/구매단가" },
|
||||
{ key: "currency_code", label: "통화" },
|
||||
{ key: "status", label: "상태" },
|
||||
];
|
||||
@@ -150,8 +149,11 @@ export default function PurchaseItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 구매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "s" });
|
||||
// 구매관리 division 필터: 카테고리에서 "구매관리" 라벨의 코드를 찾아서 필터링
|
||||
const purchaseCode = categoryOptions["division"]?.find((o) => o.label === "구매관리")?.code;
|
||||
if (purchaseCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: purchaseCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
@@ -811,9 +811,10 @@ export default function CustomerManagementPage() {
|
||||
const searchItems = async () => {
|
||||
setItemSearchLoading(true);
|
||||
try {
|
||||
const filters: any[] = [
|
||||
{ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" },
|
||||
];
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
const filters: any[] = salesCode
|
||||
? [{ columnName: "division", operator: "contains", value: salesCode }]
|
||||
: [];
|
||||
if (itemSearchKeyword) filters.push({ columnName: "item_name", operator: "contains", value: itemSearchKeyword });
|
||||
const res = await apiClient.post(`/table-management/tables/item_info/data`, {
|
||||
page: 1, size: 500,
|
||||
|
||||
@@ -150,8 +150,11 @@ export default function SalesItemPage() {
|
||||
try {
|
||||
const filters: { columnName: string; operator: string; value: any }[] = [];
|
||||
|
||||
// 판매품목/영업관리 division 필터 (다중값 컬럼이므로 contains로 매칭)
|
||||
filters.push({ columnName: "division", operator: "contains", value: "CAT_ML8ZFVEL_1TOR" });
|
||||
// 영업관리 division 필터: 카테고리에서 "영업관리" 라벨의 코드를 찾아서 필터링
|
||||
const salesCode = categoryOptions["division"]?.find((o) => o.label === "영업관리")?.code;
|
||||
if (salesCode) {
|
||||
filters.push({ columnName: "division", operator: "contains", value: salesCode });
|
||||
}
|
||||
|
||||
// DynamicSearchFilter에서 전달된 필터 추가
|
||||
for (const f of searchFilters) {
|
||||
|
||||
Reference in New Issue
Block a user