95c48c77d9
Two unrelated UX issues in the Knowledge Base manage tab:
1. Double-commit 400 error. The polling tick at index.js:1217 was
blindly overwriting a locally-set 'committing' status with whatever
the server reported. If the GET /batch poll raced ahead of the POST
commitJob reaching the DB, the card flipped back to 'awaiting_review',
the "אשר הכל" button re-enabled, and a second click triggered a duplicate
commit which the backend rejected with HTTP 400 ("job N is in status
'done', expected 'awaiting_review'"). Fix: never downgrade
'committing' → 'awaiting_review' from the polling response.
2. Admin tab scrolling. The "מקורות בנושא", "תוויות תת-נושא" and
"משימות אחרונות" panels were always expanded on tab entry, pushing
the actual upload form far down the page. Wrapped each in a
collapsible body with a chevron toggle, default collapsed. Data
lazy-loads on first expand.
Refs Task Master #21
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
202 lines
12 KiB
Smarty
202 lines
12 KiB
Smarty
<div class="kb-page" dir="rtl">
|
|
<div class="page-header" style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;">
|
|
<h3 style="margin:0;">בסיס ידע<span class="kb-topic-name-suffix"></span></h3>
|
|
<div class="kb-topic-picker" style="display:flex;align-items:center;gap:8px;">
|
|
<label for="kb-topic-select" class="text-muted" style="margin:0;font-weight:normal;">נושא:</label>
|
|
<select id="kb-topic-select" class="form-control kb-topic-select" data-name="topic"
|
|
style="min-width:180px;">
|
|
<option value="">טוען…</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<ul class="nav nav-tabs" style="margin-bottom:12px;">
|
|
<li class="{{#ifEqual mode 'search'}}active{{/ifEqual}}">
|
|
<a href="#" role="button" data-action="switchMode" data-mode="search">חיפוש</a>
|
|
</li>
|
|
<li class="{{#ifEqual mode 'ask'}}active{{/ifEqual}}">
|
|
<a href="#" role="button" data-action="switchMode" data-mode="ask">שאל את שירה</a>
|
|
</li>
|
|
<li class="{{#ifEqual mode 'browse'}}active{{/ifEqual}}">
|
|
<a href="#" role="button" data-action="switchMode" data-mode="browse">עיון</a>
|
|
</li>
|
|
<li class="{{#ifEqual mode 'manage'}}active{{/ifEqual}}">
|
|
<a href="#" role="button" data-action="switchMode" data-mode="manage">ניהול</a>
|
|
</li>
|
|
</ul>
|
|
|
|
{{#ifEqual mode 'search'}}
|
|
<div class="kb-search-box" style="margin-bottom:12px;">
|
|
<div class="form-inline" style="display:flex;gap:8px;flex-wrap:wrap;">
|
|
<input type="text" class="form-control" data-name="query"
|
|
placeholder="מונחי חיפוש…"
|
|
style="flex:1 1 320px;min-width:280px;" />
|
|
<select class="form-control" data-name="kind" style="flex:0 0 auto;">
|
|
<option value="any">כל הסוגים</option>
|
|
<option value="law">חוק</option>
|
|
<option value="regulation">תקנות</option>
|
|
<option value="circular">חוזרים</option>
|
|
<option value="caselaw">פסיקה</option>
|
|
<option value="tool">כלי הערכה</option>
|
|
</select>
|
|
<button type="button" class="btn btn-primary" data-action="submit">חפש</button>
|
|
<button type="button" class="btn btn-default" data-action="clearResults"
|
|
title="התחל חיפוש חדש (מנקה את התוצאות הקודמות)">חיפוש חדש</button>
|
|
</div>
|
|
<div class="small text-muted" style="margin-top:6px;">
|
|
חיפוש Hybrid: וקטורי + מילולי + rerank. מחזיר עד 8 קטעים רלוונטיים.
|
|
</div>
|
|
</div>
|
|
{{/ifEqual}}
|
|
|
|
{{#ifEqual mode 'ask'}}
|
|
<div class="kb-search-box" style="margin-bottom:12px;">
|
|
<div class="form-inline" style="display:flex;gap:8px;flex-wrap:wrap;">
|
|
<input type="text" class="form-control" data-name="query"
|
|
placeholder="שאלה בשפה חופשית…"
|
|
style="flex:1 1 320px;min-width:280px;" />
|
|
<button type="button" class="btn btn-primary" data-action="submit">שאל את שירה</button>
|
|
<button type="button" class="btn btn-default" data-action="clearResults"
|
|
title="התחל שאלה חדשה (מנקה את התשובה הקודמת)">שאלה חדשה</button>
|
|
</div>
|
|
<div class="small text-muted" style="margin-top:6px;">
|
|
שירה תחפש בבסיס הידע ותחזיר תשובה מסוכמת עם ציטוטים.
|
|
</div>
|
|
</div>
|
|
{{/ifEqual}}
|
|
|
|
{{#ifEqual mode 'browse'}}
|
|
<div class="kb-sources panel panel-default" style="padding:12px;">
|
|
<div class="text-muted">טוען מקורות…</div>
|
|
</div>
|
|
{{/ifEqual}}
|
|
|
|
{{#ifEqual mode 'manage'}}
|
|
<div class="kb-manage" style="display:flex;flex-direction:column;gap:16px;">
|
|
<div class="panel panel-default kb-topics-panel" style="padding:12px;">
|
|
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;">
|
|
<h4 style="margin:0;">נושאים (תחומי משפט)</h4>
|
|
<div style="display:flex;gap:8px;">
|
|
<button type="button" class="btn btn-default btn-sm" data-action="refreshTopics" title="רענן">
|
|
<span class="glyphicon glyphicon-refresh"></span>
|
|
</button>
|
|
<button type="button" class="btn btn-primary btn-sm" data-action="newTopic">
|
|
<span class="glyphicon glyphicon-plus"></span> נושא חדש
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="kb-topics-table">
|
|
<div class="text-muted">טוען נושאים…</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default kb-sources-panel kb-collapsible kb-collapsed" style="padding:12px;">
|
|
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;">
|
|
<h4 style="margin:0;cursor:pointer;user-select:none;" data-action="toggleSection" title="הרחב/כווץ">
|
|
<span class="kb-collapse-chevron glyphicon glyphicon-chevron-left" style="font-size:12px;margin-left:6px;"></span>
|
|
מקורות בנושא<span class="kb-topic-name-suffix"></span>
|
|
</h4>
|
|
<div style="display:flex;gap:8px;align-items:center;">
|
|
<select class="form-control kb-sources-kind-filter" style="width:auto;">
|
|
<option value="">כל הסוגים</option>
|
|
<option value="law">חוק</option>
|
|
<option value="regulation">תקנות</option>
|
|
<option value="circular">חוזרים</option>
|
|
<option value="caselaw">פסיקה</option>
|
|
<option value="tool">כלי הערכה</option>
|
|
</select>
|
|
<button type="button" class="btn btn-default btn-sm" data-action="refreshSources" title="רענן">
|
|
<span class="glyphicon glyphicon-refresh"></span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="kb-collapsible-body" style="display:none;">
|
|
<div class="kb-sources-table">
|
|
<div class="text-muted">טוען מקורות…</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel panel-default kb-labels-panel kb-collapsible kb-collapsed" style="padding:12px;">
|
|
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;">
|
|
<h4 style="margin:0;cursor:pointer;user-select:none;" data-action="toggleSection" title="הרחב/כווץ">
|
|
<span class="kb-collapse-chevron glyphicon glyphicon-chevron-left" style="font-size:12px;margin-left:6px;"></span>
|
|
תוויות תת-נושא
|
|
</h4>
|
|
<button type="button" class="btn btn-default btn-sm" data-action="refreshLabels" title="רענן">
|
|
<span class="glyphicon glyphicon-refresh"></span>
|
|
</button>
|
|
</div>
|
|
<div class="kb-collapsible-body" style="display:none;">
|
|
<div class="kb-labels-table">
|
|
<div class="text-muted">טוען תוויות…</div>
|
|
</div>
|
|
<div class="text-muted small" style="margin-top:6px;">
|
|
תוויות נוצרות אוטומטית כשמעלים מסמך חדש ושירה מציעה תת-נושא. כאן ניתן למחוק תוויות שאינן בשימוש.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default kb-pending-panel" style="padding:12px;">
|
|
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;">
|
|
<h4 style="margin:0;">ממתינים לאישור<span class="kb-pending-count text-muted" style="font-weight:normal;margin-right:6px;"></span></h4>
|
|
<button type="button" class="btn btn-default btn-sm" data-action="refreshPending" title="רענן">
|
|
<span class="glyphicon glyphicon-refresh"></span>
|
|
</button>
|
|
</div>
|
|
<div class="kb-pending-list">
|
|
<div class="text-muted">טוען…</div>
|
|
</div>
|
|
<div class="text-muted small" style="margin-top:6px;">
|
|
באצ׳ים שעלו וממתינים לעריכה ואישור. לחץ "פתח" כדי לחזור למסך הסקירה.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default kb-batch-panel" style="padding:12px;">
|
|
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:8px;">
|
|
<h4 style="margin:0;">העלאת מסמכים</h4>
|
|
<div style="display:flex;gap:8px;align-items:center;">
|
|
<select id="kb-batch-kind" class="form-control" style="width:auto;">
|
|
<option value="circular" selected>חוזר</option>
|
|
<option value="law">חוק</option>
|
|
<option value="regulation">תקנות</option>
|
|
<option value="caselaw">פסיקה</option>
|
|
<option value="tool">כלי הערכה</option>
|
|
</select>
|
|
<input type="file" id="kb-batch-files" multiple
|
|
accept=".pdf,.docx,.txt" style="display:none;" />
|
|
<button type="button" class="btn btn-primary btn-sm" data-action="pickBatchFiles">
|
|
<span class="glyphicon glyphicon-cloud-upload"></span> בחר קבצים…
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="kb-batch-hint text-muted small" style="margin-bottom:8px;">
|
|
ניתן לבחור מספר קבצים בו-זמנית. שירה תנתח כל קובץ ותציע מטא-דאטה (סוג / כותרת / תוויות / סיכום) — תוכל לערוך לפני אישור הטמעה.
|
|
מקסימום 50MB לקובץ, עד 50 קבצים בקבוצה.
|
|
</div>
|
|
<div class="kb-batch-cards" style="display:flex;flex-direction:column;gap:10px;"></div>
|
|
<div class="kb-batch-actions" style="display:none;justify-content:space-between;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid #eee;">
|
|
<button type="button" class="btn btn-default btn-sm" data-action="discardAllBatch">בטל הכל</button>
|
|
<button type="button" class="btn btn-primary" data-action="commitAllBatch">
|
|
אישור והטמעה
|
|
<span class="kb-batch-commit-count"></span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default kb-jobs-panel kb-collapsible kb-collapsed" style="padding:12px;">
|
|
<h4 style="margin-top:0;cursor:pointer;user-select:none;" data-action="toggleSection" title="הרחב/כווץ">
|
|
<span class="kb-collapse-chevron glyphicon glyphicon-chevron-left" style="font-size:12px;margin-left:6px;"></span>
|
|
משימות אחרונות
|
|
</h4>
|
|
<div class="kb-collapsible-body" style="display:none;">
|
|
<div class="kb-jobs-list">
|
|
<div class="text-muted">טוען…</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/ifEqual}}
|
|
|
|
<div class="kb-results" style="margin-top:12px;"></div>
|
|
</div>
|