우측 패널 항목 삭제 기능 구현
This commit is contained in:
@@ -1258,6 +1258,103 @@ export const SplitPanelLayoutConfigPanel: React.FC<SplitPanelLayoutConfigPanelPr
|
||||
})
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* 중계 테이블 설정 */}
|
||||
<div className="space-y-3 rounded-lg border border-orange-200 bg-orange-50 p-3 mt-3">
|
||||
<Label className="text-sm font-semibold">중계 테이블 설정 (N:M 관계)</Label>
|
||||
<p className="text-xs text-gray-600">
|
||||
중계 테이블을 사용하여 다대다 관계를 구현합니다
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<Label className="text-xs text-gray-700">실제 저장할 테이블</Label>
|
||||
<Input
|
||||
value={config.rightPanel?.addConfig?.targetTable || ""}
|
||||
onChange={(e) => {
|
||||
const addConfig = config.rightPanel?.addConfig || {};
|
||||
updateRightPanel({
|
||||
addConfig: {
|
||||
...addConfig,
|
||||
targetTable: e.target.value,
|
||||
},
|
||||
});
|
||||
}}
|
||||
placeholder="예: user_dept"
|
||||
className="mt-1 h-8 text-xs"
|
||||
/>
|
||||
<p className="mt-1 text-[10px] text-gray-500">
|
||||
데이터가 실제로 저장될 중계 테이블명
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label className="text-xs text-gray-700">좌측 패널 컬럼</Label>
|
||||
<Input
|
||||
value={config.rightPanel?.addConfig?.leftPanelColumn || ""}
|
||||
onChange={(e) => {
|
||||
const addConfig = config.rightPanel?.addConfig || {};
|
||||
updateRightPanel({
|
||||
addConfig: {
|
||||
...addConfig,
|
||||
leftPanelColumn: e.target.value,
|
||||
},
|
||||
});
|
||||
}}
|
||||
placeholder="예: dept_code"
|
||||
className="mt-1 h-8 text-xs"
|
||||
/>
|
||||
<p className="mt-1 text-[10px] text-gray-500">
|
||||
좌측 패널에서 선택한 항목의 어떤 컬럼값을 가져올지
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label className="text-xs text-gray-700">중계 테이블 대상 컬럼</Label>
|
||||
<Input
|
||||
value={config.rightPanel?.addConfig?.targetColumn || ""}
|
||||
onChange={(e) => {
|
||||
const addConfig = config.rightPanel?.addConfig || {};
|
||||
updateRightPanel({
|
||||
addConfig: {
|
||||
...addConfig,
|
||||
targetColumn: e.target.value,
|
||||
},
|
||||
});
|
||||
}}
|
||||
placeholder="예: dept_code"
|
||||
className="mt-1 h-8 text-xs"
|
||||
/>
|
||||
<p className="mt-1 text-[10px] text-gray-500">
|
||||
중계 테이블의 어떤 컬럼에 좌측값을 저장할지
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label className="text-xs text-gray-700">자동 채움 컬럼 (JSON)</Label>
|
||||
<textarea
|
||||
value={JSON.stringify(config.rightPanel?.addConfig?.autoFillColumns || {}, null, 2)}
|
||||
onChange={(e) => {
|
||||
try {
|
||||
const parsed = JSON.parse(e.target.value);
|
||||
const addConfig = config.rightPanel?.addConfig || {};
|
||||
updateRightPanel({
|
||||
addConfig: {
|
||||
...addConfig,
|
||||
autoFillColumns: parsed,
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
// JSON 파싱 오류는 무시 (입력 중)
|
||||
}
|
||||
}}
|
||||
placeholder='{ "is_primary": false }'
|
||||
className="mt-1 h-20 w-full rounded-md border border-input bg-white px-3 py-2 text-xs font-mono"
|
||||
/>
|
||||
<p className="mt-1 text-[10px] text-gray-500">
|
||||
자동으로 채워질 컬럼과 기본값 (예: is_primary: false)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user