import React, { useEffect, useState } from 'react' import { Navigate } from 'react-router-dom' import { useAuth } from '../context/AuthContext' import api from '../utils/api' import AdminPageNav from '../components/AdminPageNav' function MultiIdSelect({ label, options, valueIds, onChange, hint }) { return (
Reifegradmodelle mit Fokusbereich, Stilrichtung und Zielgruppe. Pro Modell: Stufen definieren, Fähigkeiten zuordnen, Zelltexte pflegen.
{error ? (Reihenfolge muss lückenlos 1…N sein. Stufenanzahl ändern passt die Tabelle an; danach speichern.
| Nr. | Name | Beschreibung | Sort |
|---|---|---|---|
| {row.level_number} | { const next = [...levelsForm] next[idx] = { ...row, name: e.target.value } setLevelsForm(next) }} /> | { const next = [...levelsForm] next[idx] = { ...row, description: e.target.value } setLevelsForm(next) }} /> | { const next = [...levelsForm] next[idx] = { ...row, sort_order: e.target.value } setLevelsForm(next) }} /> |
Leere Zellen werden beim Speichern aus der Datenbank entfernt. Beobachtungskriterien optional in zweiter Zeile (nach Speichern mit Beschreibung).
| Fähigkeit | {(detail.levels || []).map((l) => ({l.level_number}. {l.name} | ))}
|---|---|
|
{ms.skill_name}
{(ms.skill_main_category_name || ms.skill_subcategory_name) ? (
{ms.skill_main_category_name || '—'}
{ms.skill_subcategory_name ? ` › ${ms.skill_subcategory_name}` : ''}
) : null}
|
{(detail.levels || []).map((l) => {
const key = `${ms.skill_id}-${l.level_number}`
const d = cellDraft[key] || { description: '', observable_criteria: '' }
return (
) })} |