Filipe mit dem Bildschirmfoto der Zeilen: „ich will das viel perfekter
und geiler. will dass es viel einfacher ist. am besten so wenig wie
moeglich zu tippen. fertige sachen, bereit um ab zu gehen."
GEZAEHLT, WAS EIN EINTRAG VORHER KOSTETE -- das war der Punkt:
Manager Meeting Knopf, Dialog, Speichern 2 Klicks + Fenster
Schulung dazu die Art waehlen 3 Klicks + Fenster
Werbung dazu den Link tippen 2 Klicks + tippen
Creator dazu den Namen tippen 2 Klicks + tippen
Ein Fenster fuer die Aussage „ich war heute im Meeting" sind drei
Handgriffe fuer null Angaben. Vier Aufgaben im Monat, acht Klicks,
acht Fenster.
JETZT
Manager Meeting EIN Klick („Heute eingetragen")
Schulung EIN Klick (zwei fertige Knoepfe)
Werbung Einfuegen + Eintragen, kein Tippen
Creator ein Klick je Lead -- oder mehrere Namen auf
einmal einwerfen
Am echten Bildschirm nachgemessen: 0/2 vorher, EIN Klick, 1/2 nachher,
„Rueckgaengig" bringt 0/2 zurueck. Nicht „der Knopf ist da", sondern
„danach steht eine andere Zahl dort".
DREI ENTSCHEIDUNGEN DAHINTER
1. DER WEG NIMMT EINE LISTE. „Drei Creator auf einmal" ist EIN
Vorgang. Wer drei Namen aus Discord kopiert, hat das Monatsziel in
einem Zug erledigt -- das ist der eigentliche Gewinn, nicht der
gesparte Klick.
JEDER EINTRAG WIRD EINZELN GEPRUEFT UND EINZELN BEANTWORTET. Die
ganze Liste zurueckzuweisen, weil ein Name schon dasteht, waere
die bequeme und die falsche Loesung: Dann weiss niemand, welcher
der drei das Problem war, und tippt alles noch einmal. Geprueft
wird genau dieser Fall -- zwei gehen durch, einer wird im Klartext
abgelehnt, mit Namen.
2. KEINE SICHERHEITSABFRAGE VORHER, SONDERN „RUECKGAENGIG" DANACH.
Eine Nachfrage bei jedem Klick waere der Handgriff, den wir gerade
abgeschafft haben, in neuer Verkleidung. Sie kostet jeden; das
Zuruecknehmen kostet nur den, der sich vertippt hat. Acht Sekunden
statt drei -- lang genug, um es mit einem Daumen zu treffen.
3. DIE ZULETZT GEWAEHLTE ART IST VORGEWAEHLT -- abgeleitet aus dem
letzten Eintrag, nicht in einer Einstellung gespeichert. Eine
Spalte „Lieblingsart" waere ein zweiter Bestand, der veralten
kann; der letzte Eintrag veraltet nie.
WAS MIR DABEI AUFGEFALLEN IST
Ein Ein-Klick-Knopf macht den Doppeltipper zur wahrscheinlichsten
Fehleingabe -- bei „Heute eingetragen" merkt man nichts davon, es gibt
ja keine Angabe. Zwei Meetings an einem Tag zu VERBIETEN waere aber
falsch, sie sind moeglich. Also ein Hinweis statt einer Sperre:
„Fuer diesen Tag stehen jetzt 2. War das Absicht?" -- und das
Zuruecknehmen liegt ohnehin daneben. Mit Gegenprobe, dass beim ERSTEN
keine Warnung kommt; sonst waere sie keine Warnung, sondern ein
Begleittext.
AUSSERDEM
* Die Zeilen bauen sich beim Eintragen nicht mehr neu, sondern
ziehen nur die Zahlen nach. Sonst verschwaende das Feld, in dem
man gerade tippt, unter der Hand.
* „Einfuegen" holt den Link aus der Zwischenablage -- mit drittem
Ausgang: Firefox gibt sie ohne Erweiterung nicht her, und dann
wird das gesagt, statt dass ein Knopf stumm bleibt.
* Im Dialog drei fertige Tage (Heute / Gestern / Vorgestern) statt
eines Kalenders. Was nicht mehr in diesen Monat gehoert, wird gar
nicht erst angeboten -- am 1. und 2. fallen welche weg.
* Der Dialog heisst jetzt „Mehr Angaben" und ist die Ausnahme fuer
Notiz oder altes Datum. Dass er fuer etwas Normales gebraucht
wurde, war sein Fehler.
GEPRUEFT: 194 Pruefungen, 0 Fehler (vorher 168)
Co-Authored-By: Claude Opus 5 <[email protected]>
234 lines
10 KiB
HTML
234 lines
10 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Manager-Ziele · Spicy & Dogi</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#06090f" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610021748" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610021748" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202610021748" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202610021748" />
|
||
<link rel="stylesheet" href="assets/css/manager-ziele.css?v=202610021748" />
|
||
<!-- module.css an VORLETZTER, haus.css an LETZTER Stelle. Die
|
||
Reihenfolge ist keine Geschmacksfrage: haus.css setzt nur
|
||
Variablen, und bei Variablen entscheidet allein, wer zuletzt
|
||
kommt. pruef-css-klassen.mjs misst genau dieses Paar nach. -->
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202610021748" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202610021748" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<div class="schleier" aria-hidden="true"></div>
|
||
|
||
<header class="kopfleiste">
|
||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||
</svg>
|
||
<span class="zurueck-knopf__text">Zurück</span>
|
||
</button>
|
||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator Workspace</a> · Manager-Ziele</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="inhalt inhalt--breit mz-seite">
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Manager-Ziele</p>
|
||
<h1 class="titel" id="seiten-titel">Dein Monat</h1>
|
||
<p class="unterzeile">
|
||
Vier feste Aufgaben pro Monat. Trag ein, was du gemacht hast –
|
||
der Rest rechnet sich von selbst.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ==================================================================
|
||
DER KOPF: Monat, Gesamtfortschritt, Resttage.
|
||
|
||
Der Ring steht VOR dem Text und nicht daneben-rechts: Auf einem
|
||
Handy ist er damit das Erste, was ins Auge fällt, und man weiß
|
||
in einer halben Sekunde, ob noch etwas offen ist.
|
||
================================================================== -->
|
||
<div class="mz-kopf" id="kopf" hidden>
|
||
<div class="mz-ring" id="ring" role="img" aria-label="Fortschritt">
|
||
<span class="mz-ring__text">
|
||
<span class="mz-ring__zahl" id="ring-zahl">–</span>
|
||
<span class="mz-ring__von" id="ring-von"></span>
|
||
</span>
|
||
</div>
|
||
<div class="mz-kopf__text">
|
||
<p class="mz-kopf__monat" id="kopf-monat">…</p>
|
||
<p class="mz-kopf__stand" id="kopf-stand"></p>
|
||
<p class="mz-kopf__rest" id="kopf-rest"></p>
|
||
</div>
|
||
</div>
|
||
|
||
<p class="ladefehler" id="ladefehler" hidden>
|
||
<span class="ladefehler__satz">Die Seite konnte nicht geladen werden.</span>
|
||
<span class="ladefehler__grund" id="ladefehler-grund"></span>
|
||
<button type="button" class="ladefehler__knopf" id="nochmal">Erneut versuchen</button>
|
||
</p>
|
||
|
||
<!-- Die vier Aufgabenzeilen. Werden gebaut, nicht geschrieben:
|
||
Welche Aufgaben es gibt, sagt der Server (AUFGABEN in
|
||
manager-ziele-tabellen.js). Stünden sie hier noch einmal,
|
||
wären es zwei Listen, von denen eine veraltet. -->
|
||
<ul class="mz-liste" id="liste" aria-live="polite"></ul>
|
||
|
||
<!-- ==================================================================
|
||
DER DAUERHAFTE HINWEIS
|
||
|
||
Wörtlich aus der Vorlage. Er steht unter den Aufgaben und nicht
|
||
darüber: Oben wäre er eine Drohung, bevor man überhaupt
|
||
gesehen hat, worum es geht.
|
||
================================================================== -->
|
||
<p class="mz-merksatz">
|
||
Inaktive Manager können nicht mehr berücksichtigt werden, da die
|
||
Anforderungen von TikTok stetig wachsen und wir als Firma diesen
|
||
nachkommen müssen.
|
||
</p>
|
||
|
||
<!-- ---------- VERLAUF: vergangene Monate, nur lesbar -------------- -->
|
||
<section class="mz-block" id="verlauf-block" hidden>
|
||
<h2 class="mz-block__titel">Verlauf</h2>
|
||
<div id="verlauf" aria-live="polite"></div>
|
||
</section>
|
||
|
||
<!-- ---------- TEAM: nur DogFather und Spicy Media ----------------- -->
|
||
<section class="mz-block" id="team-block" hidden>
|
||
<h2 class="mz-block__titel">Team-Übersicht</h2>
|
||
<div class="mz-steuer">
|
||
<label class="mz-feld__schild" for="team-monat">Monat</label>
|
||
<select id="team-monat"></select>
|
||
<label class="mz-feld__schild" for="team-filter">Zeigen</label>
|
||
<select id="team-filter">
|
||
<option value="alle">alle</option>
|
||
<option value="rot">nur Rot</option>
|
||
<option value="orange">Rot und Orange</option>
|
||
<option value="offen">alle mit offenen Zielen</option>
|
||
</select>
|
||
<!-- SORTIEREN AUCH HIER UND NICHT NUR AN DEN SPALTEN.
|
||
|
||
Auf dem Handy wird die Tabelle zu Karten, und die
|
||
Spaltenueberschriften verschwinden dabei (sie wuerden dort
|
||
mehr Platz kosten als der Inhalt). Ohne dieses Feld waere
|
||
das Sortieren auf einem Telefon schlicht nicht erreichbar
|
||
-- eine Funktion, die nur auf dem grossen Bildschirm
|
||
existiert, ist eine halbe Funktion.
|
||
|
||
Die Liste wird von manager-ziele.js gefuellt, damit sie zu
|
||
den Aufgaben passt, die der Server nennt. Eine zweite,
|
||
hier hingeschriebene Liste waere die, die auseinanderlaeuft. -->
|
||
<label class="mz-feld__schild" for="team-sort">Sortieren</label>
|
||
<select id="team-sort"></select>
|
||
<button type="button" class="schritt" id="team-richtung"
|
||
aria-label="Sortierrichtung umdrehen">aufsteigend ▴</button>
|
||
<button type="button" class="schritt" id="team-csv">Als CSV laden</button>
|
||
<button type="button" class="schritt" id="ziele-auf">Zielzahlen</button>
|
||
</div>
|
||
<div id="team" aria-live="polite"></div>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<!-- ==================================================================
|
||
DAS FORMULAR
|
||
|
||
Ein echtes <dialog>: Es bringt Fokusfang, Escape und den
|
||
abdunkelnden Hintergrund mit, ohne dass davon eine Zeile selbst
|
||
geschrieben werden muss. Nachgebaute Fenster vergessen davon
|
||
immer mindestens eines -- meist den Fokus.
|
||
================================================================== -->
|
||
<dialog class="dialog" id="form-dialog">
|
||
<form class="mz-form" id="form" method="dialog">
|
||
<div>
|
||
<h2 class="dialog__titel" id="form-titel">Eintragen</h2>
|
||
<p class="dialog__unter dialog__unter--still" id="form-unter"></p>
|
||
</div>
|
||
|
||
<label class="mz-feld mz-feld--vorschlag" id="feld-name" hidden>
|
||
<span class="mz-feld__schild">TikTok-Name des Creators</span>
|
||
<input type="text" id="e-name" maxlength="120" autocomplete="off"
|
||
placeholder="z. B. @lunatanzt" />
|
||
<ul class="mz-treffer" id="treffer" hidden></ul>
|
||
</label>
|
||
|
||
<label class="mz-feld" id="feld-link" hidden>
|
||
<span class="mz-feld__schild">Link zum Video</span>
|
||
<input type="url" id="e-link" maxlength="500" inputmode="url"
|
||
placeholder="https://www.tiktok.com/@…/video/…" />
|
||
</label>
|
||
|
||
<label class="mz-feld" id="feld-art" hidden>
|
||
<span class="mz-feld__schild" id="art-schild">Art</span>
|
||
<select id="e-art"></select>
|
||
</label>
|
||
|
||
<div class="mz-feld">
|
||
<span class="mz-feld__schild">Datum</span>
|
||
<!-- Die drei fertigen Tage werden von manager-ziele.js gefuellt:
|
||
welche es gibt, haengt davon ab, welcher Tag heute ist (am
|
||
1. des Monats gibt es kein „gestern" in diesem Monat). Eine
|
||
feste Liste hier waere an zwei Tagen im Monat falsch. -->
|
||
<div class="mz-schnelltage" id="datum-schnell"></div>
|
||
<input type="date" id="e-datum" required />
|
||
</div>
|
||
|
||
<label class="mz-feld">
|
||
<span class="mz-feld__schild">Notiz (freiwillig)</span>
|
||
<textarea id="e-notiz" maxlength="1000" rows="2"></textarea>
|
||
</label>
|
||
|
||
<p class="mz-form__fehler" id="form-fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<div class="dialog__knoepfe">
|
||
<button type="button" class="knopf-still" id="form-abbruch">Abbrechen</button>
|
||
<button type="submit" class="knopf" id="form-speichern">Speichern</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<!-- Die Zielzahlen. Eigener Dialog und keine zweite Seite: Es sind
|
||
sechzehn Zahlen, die man einmal im Monat ansieht. -->
|
||
<dialog class="dialog dialog--breit" id="ziele-dialog">
|
||
<form class="mz-form" id="ziele-form" method="dialog">
|
||
<div>
|
||
<h2 class="dialog__titel">Zielzahlen je Rolle</h2>
|
||
<p class="dialog__unter dialog__unter--still" id="ziele-gilt"></p>
|
||
</div>
|
||
<div id="ziele-felder"></div>
|
||
<p class="mz-form__fehler" id="ziele-fehler" role="alert" aria-live="polite"></p>
|
||
<div class="dialog__knoepfe">
|
||
<button type="button" class="knopf-still" id="ziele-abbruch">Abbrechen</button>
|
||
<button type="submit" class="knopf" id="ziele-speichern">Für nächsten Monat speichern</button>
|
||
</div>
|
||
</form>
|
||
</dialog>
|
||
|
||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und
|
||
kopf.js liest daraus die Leitungsrollen. Ohne sie stürzt jede
|
||
Seite ab, und zwar nur in der Browserkonsole -- die Kopfleiste
|
||
kommt trotzdem. -->
|
||
<script src="assets/js/bereiche.js?v=202610021748" defer></script>
|
||
<!-- wahl.js gehört zu kopf.js: Der Sicht-Umschalter baut daraus seine
|
||
Liste. pruef-css-klassen setzt das durch, und zwar auch die
|
||
Reihenfolge -- kopf.js fragt beim Aufbau nach dem fertigen
|
||
Bedienelement. -->
|
||
<script src="assets/js/wahl.js?v=202610021748" defer></script>
|
||
<script src="assets/js/nachfrage.js?v=202610021748" defer></script>
|
||
<script src="assets/js/installieren.js?v=202610021748" defer></script>
|
||
<script src="assets/js/kopf.js?v=202610021748" defer></script>
|
||
<script src="assets/js/glocke.js?v=202610021748" defer></script>
|
||
<script src="assets/js/manager-ziele.js?v=202610021748" defer></script>
|
||
</body>
|
||
</html>
|