엔티티 타입 에러수정 및 배지 색상없음 오류 수정

This commit is contained in:
kjs 2025-12-17 16:38:12 +09:00
parent 857e46eab6
commit ae38e0f249
5 changed files with 36 additions and 16 deletions

View File

@ -767,11 +767,12 @@ export async function getTableData(
const tableManagementService = new TableManagementService(); const tableManagementService = new TableManagementService();
// 🆕 현재 사용자 필터 적용 // 🆕 현재 사용자 필터 적용 (autoFilter가 없거나 enabled가 명시적으로 false가 아니면 기본 적용)
let enhancedSearch = { ...search }; let enhancedSearch = { ...search };
if (autoFilter?.enabled && req.user) { const shouldApplyAutoFilter = autoFilter?.enabled !== false; // 기본값: true
const filterColumn = autoFilter.filterColumn || "company_code"; if (shouldApplyAutoFilter && req.user) {
const userField = autoFilter.userField || "companyCode"; const filterColumn = autoFilter?.filterColumn || "company_code";
const userField = autoFilter?.userField || "companyCode";
const userValue = (req.user as any)[userField]; const userValue = (req.user as any)[userField];
if (userValue) { if (userValue) {

View File

@ -2201,12 +2201,12 @@ export const InteractiveDataTable: React.FC<InteractiveDataTableProps> = ({
const mapping = categoryMappings[column.columnName]; const mapping = categoryMappings[column.columnName];
const categoryData = mapping?.[String(value)]; const categoryData = mapping?.[String(value)];
// 매핑 데이터가 있으면 라벨과 색상 사용, 없으면 코드값과 기본색상 // 매핑 데이터가 있으면 라벨과 색상 사용, 없으면 코드값만 텍스트로 표시
const displayLabel = categoryData?.label || String(value); const displayLabel = categoryData?.label || String(value);
const displayColor = categoryData?.color || "#64748b"; // 기본 slate 색상 const displayColor = categoryData?.color;
// 배지 없음 옵션: color가 "none"이면 텍스트만 표시 // 배지 없음 옵션: color가 없거나, "none"이거나, 매핑 데이터가 없으면 텍스트만 표시
if (displayColor === "none") { if (!displayColor || displayColor === "none" || !categoryData) {
return <span className="text-sm">{displayLabel}</span>; return <span className="text-sm">{displayLabel}</span>;
} }

View File

@ -418,7 +418,7 @@ export const RepeaterInput: React.FC<RepeaterInputProps> = ({
const valueStr = String(value); // 값을 문자열로 변환 const valueStr = String(value); // 값을 문자열로 변환
const categoryData = mapping?.[valueStr]; const categoryData = mapping?.[valueStr];
const displayLabel = categoryData?.label || valueStr; const displayLabel = categoryData?.label || valueStr;
const displayColor = categoryData?.color || "#64748b"; // 기본 색상 (slate) const displayColor = categoryData?.color;
console.log(`🏷️ [RepeaterInput] 카테고리 배지 렌더링:`, { console.log(`🏷️ [RepeaterInput] 카테고리 배지 렌더링:`, {
fieldName: field.name, fieldName: field.name,
@ -429,8 +429,8 @@ export const RepeaterInput: React.FC<RepeaterInputProps> = ({
displayColor, displayColor,
}); });
// 색상이 "none"이면 일반 텍스트로 표시 // 배지 없음 옵션: color가 없거나, "none"이거나, 매핑 데이터가 없으면 텍스트만 표시
if (displayColor === "none") { if (!displayColor || displayColor === "none" || !categoryData) {
return <span className="text-sm">{displayLabel}</span>; return <span className="text-sm">{displayLabel}</span>;
} }

View File

@ -426,12 +426,29 @@ export class DynamicFormApi {
sortBy?: string; sortBy?: string;
sortOrder?: "asc" | "desc"; sortOrder?: "asc" | "desc";
filters?: Record<string, any>; filters?: Record<string, any>;
autoFilter?: {
enabled: boolean;
filterColumn?: string;
userField?: string;
};
}, },
): Promise<ApiResponse<any[]>> { ): Promise<ApiResponse<any[]>> {
try { try {
console.log("📊 테이블 데이터 조회 요청:", { tableName, params }); console.log("📊 테이블 데이터 조회 요청:", { tableName, params });
const response = await apiClient.post(`/table-management/tables/${tableName}/data`, params || {}); // autoFilter가 없으면 기본값으로 멀티테넌시 필터 적용
// pageSize를 size로 변환 (백엔드 파라미터명 호환)
const requestParams = {
...params,
size: params?.pageSize || params?.size || 100, // 기본값 100
autoFilter: params?.autoFilter ?? {
enabled: true,
filterColumn: "company_code",
userField: "companyCode",
},
};
const response = await apiClient.post(`/table-management/tables/${tableName}/data`, requestParams);
console.log("✅ 테이블 데이터 조회 성공 (원본):", response.data); console.log("✅ 테이블 데이터 조회 성공 (원본):", response.data);
console.log("🔍 response.data 상세:", { console.log("🔍 response.data 상세:", {

View File

@ -4233,9 +4233,10 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
if (values.length === 1) { if (values.length === 1) {
const categoryData = mapping?.[values[0]]; const categoryData = mapping?.[values[0]];
const displayLabel = categoryData?.label || values[0]; const displayLabel = categoryData?.label || values[0];
const displayColor = categoryData?.color || "#64748b"; const displayColor = categoryData?.color;
if (displayColor === "none") { // 배지 없음 옵션: color가 없거나, "none"이거나, 매핑 데이터가 없으면 텍스트만 표시
if (!displayColor || displayColor === "none" || !categoryData) {
return <span className="text-sm">{displayLabel}</span>; return <span className="text-sm">{displayLabel}</span>;
} }
@ -4258,9 +4259,10 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
{values.map((val, idx) => { {values.map((val, idx) => {
const categoryData = mapping?.[val]; const categoryData = mapping?.[val];
const displayLabel = categoryData?.label || val; const displayLabel = categoryData?.label || val;
const displayColor = categoryData?.color || "#64748b"; const displayColor = categoryData?.color;
if (displayColor === "none") { // 배지 없음 옵션: color가 없거나, "none"이거나, 매핑 데이터가 없으면 텍스트만 표시
if (!displayColor || displayColor === "none" || !categoryData) {
return ( return (
<span key={idx} className="text-sm"> <span key={idx} className="text-sm">
{displayLabel} {displayLabel}