Dateien nach "frontend/src/tools" hochladen
This commit is contained in:
@@ -3,9 +3,10 @@ import { useState, useMemo, useEffect, useRef } from 'react';
|
|||||||
import { api, S } from '../lib.js';
|
import { api, S } from '../lib.js';
|
||||||
|
|
||||||
const DEFAULTS = {
|
const DEFAULTS = {
|
||||||
materialpreis_pro_gramm: 0.01, stromverbrauch_kw: 0.15,
|
materialpreis_pro_rolle: 10, // €/Rolle (1 kg = 1000 g → 0.01 €/g)
|
||||||
|
stromverbrauch_kw: 0.15,
|
||||||
strompreis_pro_kwh: 0.38, druckerpreis: 550,
|
strompreis_pro_kwh: 0.38, druckerpreis: 550,
|
||||||
gesamtdruckstunden: 5000, verschleiss_pro_stunde: 0.06,
|
gesamtdruckstunden: 5000, verschleiss_pro_stunde: 0.25,
|
||||||
};
|
};
|
||||||
const getFarbFaktor = n => Math.round((1.0 + Math.max(0, n - 1) * 0.1) * 100) / 100;
|
const getFarbFaktor = n => Math.round((1.0 + Math.max(0, n - 1) * 0.1) * 100) / 100;
|
||||||
const STUFEN = [
|
const STUFEN = [
|
||||||
@@ -92,7 +93,7 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile }) {
|
|||||||
const [stunden, setStunden] = useState(editData?.stunden ?? 3);
|
const [stunden, setStunden] = useState(editData?.stunden ?? 3);
|
||||||
const [farben, setFarben] = useState(editData?.farben ?? 1);
|
const [farben, setFarben] = useState(editData?.farben ?? 1);
|
||||||
const [vars, setVars] = useState(editData ? {
|
const [vars, setVars] = useState(editData ? {
|
||||||
materialpreis_pro_gramm: editData.materialpreis_pro_gramm,
|
materialpreis_pro_rolle: editData.materialpreis_pro_gramm != null ? Math.round(editData.materialpreis_pro_gramm * 1000 * 100) / 100 : DEFAULTS.materialpreis_pro_rolle,
|
||||||
stromverbrauch_kw: editData.stromverbrauch_kw,
|
stromverbrauch_kw: editData.stromverbrauch_kw,
|
||||||
strompreis_pro_kwh: editData.strompreis_pro_kwh,
|
strompreis_pro_kwh: editData.strompreis_pro_kwh,
|
||||||
druckerpreis: editData.druckerpreis,
|
druckerpreis: editData.druckerpreis,
|
||||||
@@ -109,8 +110,9 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile }) {
|
|||||||
|
|
||||||
const calc = useMemo(() => {
|
const calc = useMemo(() => {
|
||||||
const f = getFarbFaktor(farben);
|
const f = getFarbFaktor(farben);
|
||||||
const mat = gramm * vars.materialpreis_pro_gramm * f;
|
const matProGramm = vars.materialpreis_pro_rolle / 1000;
|
||||||
const str = stunden * vars.stromverbrauch_kw * vars.strompreis_pro_kwh;
|
const mat = gramm * matProGramm * f;
|
||||||
|
const str = stunden * vars.stromverbrauch_kw * vars.strompreis_pro_kwh;
|
||||||
const ver = stunden * vars.verschleiss_pro_stunde;
|
const ver = stunden * vars.verschleiss_pro_stunde;
|
||||||
return { mat, str, ver, grund: mat + str + ver };
|
return { mat, str, ver, grund: mat + str + ver };
|
||||||
}, [gramm, stunden, farben, vars]);
|
}, [gramm, stunden, farben, vars]);
|
||||||
@@ -129,7 +131,13 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile }) {
|
|||||||
if (!name.trim()) { toast('Bitte einen Namen eingeben', 'error'); return; }
|
if (!name.trim()) { toast('Bitte einen Namen eingeben', 'error'); return; }
|
||||||
setSaving(true);
|
setSaving(true);
|
||||||
try {
|
try {
|
||||||
const payload = { name, gramm, stunden, farben, ...vars,
|
const payload = { name, gramm, stunden, farben,
|
||||||
|
materialpreis_pro_gramm: vars.materialpreis_pro_rolle / 1000,
|
||||||
|
stromverbrauch_kw: vars.stromverbrauch_kw,
|
||||||
|
strompreis_pro_kwh: vars.strompreis_pro_kwh,
|
||||||
|
druckerpreis: vars.druckerpreis,
|
||||||
|
gesamtdruckstunden: vars.gesamtdruckstunden,
|
||||||
|
verschleiss_pro_stunde: vars.verschleiss_pro_stunde,
|
||||||
preis_freundschaft: calc.grund * 1.0,
|
preis_freundschaft: calc.grund * 1.0,
|
||||||
preis_normal: calc.grund * 1.5,
|
preis_normal: calc.grund * 1.5,
|
||||||
preis_auftrag: calc.grund * 2.5,
|
preis_auftrag: calc.grund * 2.5,
|
||||||
@@ -182,7 +190,7 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile }) {
|
|||||||
{showAdv && (
|
{showAdv && (
|
||||||
<div style={{ marginTop:10, background:'rgba(0,0,0,0.2)', border:'1px solid rgba(255,255,255,0.05)', borderRadius:9, padding:12 }}>
|
<div style={{ marginTop:10, background:'rgba(0,0,0,0.2)', border:'1px solid rgba(255,255,255,0.05)', borderRadius:9, padding:12 }}>
|
||||||
<div style={{ display:'grid', gridTemplateColumns:'1fr 1fr', gap:10 }}>
|
<div style={{ display:'grid', gridTemplateColumns:'1fr 1fr', gap:10 }}>
|
||||||
<SmallInput label="Material €/g" value={vars.materialpreis_pro_gramm} onChange={v=>sv('materialpreis_pro_gramm',v)} step={0.001}/>
|
<SmallInput label="Material €/Rolle" value={vars.materialpreis_pro_rolle} onChange={v=>sv('materialpreis_pro_rolle',v)} step={0.5}/>
|
||||||
<SmallInput label="Strom kW" value={vars.stromverbrauch_kw} onChange={v=>sv('stromverbrauch_kw',v)} step={0.01}/>
|
<SmallInput label="Strom kW" value={vars.stromverbrauch_kw} onChange={v=>sv('stromverbrauch_kw',v)} step={0.01}/>
|
||||||
<SmallInput label="Strom €/kWh" value={vars.strompreis_pro_kwh} onChange={v=>sv('strompreis_pro_kwh',v)} step={0.01}/>
|
<SmallInput label="Strom €/kWh" value={vars.strompreis_pro_kwh} onChange={v=>sv('strompreis_pro_kwh',v)} step={0.01}/>
|
||||||
<SmallInput label="Drucker €" value={vars.druckerpreis} onChange={v=>sv('druckerpreis',v)} step={10}/>
|
<SmallInput label="Drucker €" value={vars.druckerpreis} onChange={v=>sv('druckerpreis',v)} step={10}/>
|
||||||
|
|||||||
Reference in New Issue
Block a user