Improve basis workspace UX with clearly separated form and table sections

This commit is contained in:
dwindown
2026-04-28 19:22:09 +07:00
parent 3151b27c27
commit ed667e2887

View File

@@ -682,22 +682,48 @@ def _basis_item_workspace_body(
)
return f"""
<p class="muted">
{success_html}
{error_html}
<section style="border:1px solid #e2e8f0;border-radius:12px;padding:16px;background:#f8fafc;">
<h3 style="margin:0 0 10px;">Parent Summary</h3>
<p class="muted" style="margin:0 0 8px;">
Parent Item: <strong>#{basis_item.id}</strong> |
Tryout: <strong>{escape(basis_item.tryout_id)}</strong> |
Slot: <strong>{basis_item.slot}</strong> |
Website: <strong>{basis_item.website_id}</strong> |
Source Snapshot QID: <strong>{basis_item.source_snapshot_question_id or '-'}</strong>
</p>
<p class="muted">
<p class="muted" style="margin:0 0 8px;">
Family Usage: impressions=<strong>{int(family_stats.get("impressions", 0.0))}</strong>,
unique users=<strong>{int(family_stats.get("unique_users", 0.0))}</strong>,
frequency=<strong>{family_stats.get("frequency", 0.0):.2f}</strong>
</p>
<p class="muted"><strong>Stem:</strong> {escape(_truncate(basis_item.stem, 260))}</p>
{success_html}
{error_html}
<h3 style="margin-top:18px">Variant Filters</h3>
<p class="muted" style="margin:0;"><strong>Stem:</strong> {escape(_truncate(basis_item.stem, 260))}</p>
</section>
<section style="margin-top:16px;border:1px solid #e2e8f0;border-radius:12px;padding:16px;background:#fff;">
<h3 style="margin:0 0 8px;">Generate Variants</h3>
<p class="muted" style="margin:0 0 12px;">Create new AI child variants for this parent.</p>
<form method="post" action="/admin/basis-items/{basis_item.id}/generate" autocomplete="off">
<label for="target_level">Target Level</label>
<select id="target_level" name="target_level">
<option value="mudah" {"selected" if target_level == "mudah" else ""}>mudah</option>
<option value="sulit" {"selected" if target_level == "sulit" else ""}>sulit</option>
</select>
<label for="ai_model">Model</label>
<select id="ai_model" name="ai_model">{model_options}</select>
<label for="generation_count">Generate Count</label>
<input id="generation_count" name="generation_count" type="number" min="1" max="50" value="{escape(generation_count)}">
<p class="muted">Recommended: 1-3 per run. Larger runs increase overlap and review burden.</p>
<label for="operator_notes">Operator Notes (optional)</label>
<textarea id="operator_notes" name="operator_notes" rows="3">{escape(operator_notes)}</textarea>
<button type="submit">Generate Variants</button>
</form>
</section>
<section style="margin-top:16px;border:1px solid #e2e8f0;border-radius:12px;padding:16px;background:#fff;">
<h3 style="margin:0 0 8px;">Filter Variants</h3>
<p class="muted" style="margin:0 0 12px;">Filter child variants shown in the review table below.</p>
<form method="get" action="/admin/basis-items/{basis_item.id}" autocomplete="off">
<label for="status">Status</label>
<select id="status" name="status">
@@ -724,26 +750,18 @@ def _basis_item_workspace_body(
<a href="/admin/basis-items/{basis_item.id}" style="display:inline-block;padding:12px 14px;border-radius:10px;background:#e2e8f0;color:#0f172a;text-decoration:none;font-size:15px;font-weight:600;">Reset</a>
</div>
</form>
<form method="post" action="/admin/basis-items/{basis_item.id}/generate" autocomplete="off">
<label for="target_level">Target Level</label>
<select id="target_level" name="target_level">
<option value="mudah" {"selected" if target_level == "mudah" else ""}>mudah</option>
<option value="sulit" {"selected" if target_level == "sulit" else ""}>sulit</option>
</select>
<label for="ai_model">Model</label>
<select id="ai_model" name="ai_model">{model_options}</select>
<label for="generation_count">Generate Count</label>
<input id="generation_count" name="generation_count" type="number" min="1" max="50" value="{escape(generation_count)}">
<p class="muted">Recommended: 1-3 per run. Larger runs increase overlap and review burden.</p>
<label for="operator_notes">Operator Notes (optional)</label>
<textarea id="operator_notes" name="operator_notes" rows="3">{escape(operator_notes)}</textarea>
<button type="submit">Generate Variants</button>
</form>
<h3 style="margin-top:24px">Generation Runs for This Parent</h3>
</section>
<section style="margin-top:16px;border:1px solid #e2e8f0;border-radius:12px;padding:16px;background:#fff;">
<h3 style="margin:0 0 12px;">Generation Runs for This Parent</h3>
{runs_table}
<h3 style="margin-top:24px">Child Variants for This Parent</h3>
</section>
<section style="margin-top:16px;border:1px solid #e2e8f0;border-radius:12px;padding:16px;background:#fff;">
<h3 style="margin:0 0 8px;">Child Variants for This Parent</h3>
<p class="muted">Filtered variants shown: <strong>{len(variants)}</strong></p>
{variants_table}
</section>
<p style="margin-top:20px"><a href="/admin/basis-items">Back to Basis Items</a></p>
"""