diff --git a/frontend/src/pages/AdminTemplates.jsx b/frontend/src/pages/AdminTemplates.jsx index 22871a6..3cf8cf7 100644 --- a/frontend/src/pages/AdminTemplates.jsx +++ b/frontend/src/pages/AdminTemplates.jsx @@ -20,11 +20,14 @@ export default function AdminTemplates() { const [busy, setBusy] = useState(false); const [importing, setImporting] = useState(null); + const vmTemplates = proxmoxTemplates?.vm_templates || []; + const lxcTemplates = proxmoxTemplates?.lxc_templates || []; + async function refresh() { setTemplates(await api.listTemplates()); } - async function fetchProxmox() { + async function findTemplates() { setError(""); setBusy(true); try { @@ -38,8 +41,8 @@ export default function AdminTemplates() { async function importVm(vm) { const key = `vm-${vm.vmid}`; - setError(""); setImporting(key); + setError(""); try { await api.createTemplate({ name: vm.name || `VM-${vm.vmid}`, @@ -60,8 +63,8 @@ export default function AdminTemplates() { async function importLxc(archive) { const key = `lxc-${archive.volid}`; - setError(""); setImporting(key); + setError(""); try { await api.createTemplate({ name: archive.name, @@ -120,9 +123,6 @@ export default function AdminTemplates() { } } - const vmTemplates = proxmoxTemplates?.vm_templates || []; - const lxcTemplates = proxmoxTemplates?.lxc_templates || []; - return (

Шаблоны VPS

@@ -130,7 +130,7 @@ export default function AdminTemplates() {

🔍 Найти шаблоны на Proxmox

- @@ -138,7 +138,7 @@ export default function AdminTemplates() {

🖥 VM-шаблоны

- {vmTemplates.length > 0 ? ( + {vmTemplates.length ? ( {vmTemplates.map((vm) => { @@ -156,16 +156,14 @@ export default function AdminTemplates() {

📦 Архивные LXC-шаблоны

- {lxcTemplates.length > 0 ? ( + {lxcTemplates.length ? (
VMIDИмяvCPURAM
{lxcTemplates.map((archive) => { const key = `lxc-${archive.volid}`; return ( - - - + ); @@ -182,11 +180,25 @@ export default function AdminTemplates() {
set("name", e.target.value)} required />
+ {form.guest_type === "vm" ? (
set("source_vmid", e.target.value)} placeholder="999" required />
) : ( -
set("source_template", e.target.value)} placeholder="local:vztmpl/..." required />
+
+ + +
)} +
set("description", e.target.value)} />
set("cores", e.target.value)} />
set("memory_mb", e.target.value)} />
ИмяХранилищеРазмер
{archive.name}{archive.storage || "—"}{archive.size_mb || 0} МБ{archive.name}{archive.storage || "—"}{archive.size_mb || 0} МБ