fix: admin ui
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Failing after 13m47s
Frontend CI / build-and-check (push) Failing after 19m42s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Failing after 14m8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Failing after 15m0s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Failing after 14m58s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Failing after 13m47s
Frontend CI / build-and-check (push) Failing after 19m42s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Failing after 14m8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Failing after 15m0s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Failing after 14m58s
This commit is contained in:
@@ -259,38 +259,6 @@ onMounted(() => {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<GlassCard>
|
|
||||||
<div class="prompt-header">
|
|
||||||
<div>
|
|
||||||
<div class="section-title">Промпт LLM-анализа</div>
|
|
||||||
<p class="prompt-subtitle">
|
|
||||||
Шаблон применяется к новым проверкам и ручному повторному анализу отзывов.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<span class="prompt-status">{{ promptStatusLabel }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form class="prompt-form" @submit.prevent="savePrompt">
|
|
||||||
<textarea
|
|
||||||
v-model="promptText"
|
|
||||||
class="glass-input prompt-textarea"
|
|
||||||
rows="9"
|
|
||||||
:disabled="promptLoading || promptSaving"
|
|
||||||
placeholder="Загрузка промпта..."
|
|
||||||
></textarea>
|
|
||||||
<div class="prompt-footer">
|
|
||||||
<div class="prompt-messages">
|
|
||||||
<span class="prompt-hint">Обязательные плейсхолдеры: {lectureContext}, {reviewText}</span>
|
|
||||||
<span v-if="promptError" class="prompt-error">{{ promptError }}</span>
|
|
||||||
<span v-else-if="promptSuccess" class="prompt-success">{{ promptSuccess }}</span>
|
|
||||||
</div>
|
|
||||||
<button class="btn-primary" type="submit" :disabled="!canSavePrompt">
|
|
||||||
{{ promptSaving ? 'Сохраняем...' : 'Сохранить промпт' }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</GlassCard>
|
|
||||||
|
|
||||||
<GlassCard>
|
<GlassCard>
|
||||||
<div class="review-toolbar">
|
<div class="review-toolbar">
|
||||||
<div class="status-filters" aria-label="Фильтр статуса LLM">
|
<div class="status-filters" aria-label="Фильтр статуса LLM">
|
||||||
@@ -334,7 +302,6 @@ onMounted(() => {
|
|||||||
<div class="analysis-cell">
|
<div class="analysis-cell">
|
||||||
<div v-if="!row.analysisReady" class="analysis-head">
|
<div v-if="!row.analysisReady" class="analysis-head">
|
||||||
<StatusBadge :status="row.status" />
|
<StatusBadge :status="row.status" />
|
||||||
<span class="raw-status">{{ row.rawStatus }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-if="row.analysisReady" class="analysis-result">
|
<div v-if="row.analysisReady" class="analysis-result">
|
||||||
<div class="analysis-metrics">
|
<div class="analysis-metrics">
|
||||||
@@ -356,7 +323,6 @@ onMounted(() => {
|
|||||||
</details>
|
</details>
|
||||||
<span v-else class="analysis-note">Текст ответа нейронки не сохранён</span>
|
<span v-else class="analysis-note">Текст ответа нейронки не сохранён</span>
|
||||||
</div>
|
</div>
|
||||||
<span v-else class="analysis-note">{{ row.analysisMessage }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #actions="{ row }">
|
<template #actions="{ row }">
|
||||||
@@ -371,6 +337,38 @@ onMounted(() => {
|
|||||||
</DataTable>
|
</DataTable>
|
||||||
</div>
|
</div>
|
||||||
</GlassCard>
|
</GlassCard>
|
||||||
|
|
||||||
|
<GlassCard>
|
||||||
|
<div class="prompt-header">
|
||||||
|
<div>
|
||||||
|
<div class="section-title">Промпт LLM-анализа</div>
|
||||||
|
<p class="prompt-subtitle">
|
||||||
|
Шаблон применяется к новым проверкам и ручному повторному анализу отзывов.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<span class="prompt-status">{{ promptStatusLabel }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form class="prompt-form" @submit.prevent="savePrompt">
|
||||||
|
<textarea
|
||||||
|
v-model="promptText"
|
||||||
|
class="glass-input prompt-textarea"
|
||||||
|
rows="9"
|
||||||
|
:disabled="promptLoading || promptSaving"
|
||||||
|
placeholder="Загрузка промпта..."
|
||||||
|
></textarea>
|
||||||
|
<div class="prompt-footer">
|
||||||
|
<div class="prompt-messages">
|
||||||
|
<span class="prompt-hint">Обязательные плейсхолдеры: {lectureContext}, {reviewText}</span>
|
||||||
|
<span v-if="promptError" class="prompt-error">{{ promptError }}</span>
|
||||||
|
<span v-else-if="promptSuccess" class="prompt-success">{{ promptSuccess }}</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn-primary" type="submit" :disabled="!canSavePrompt">
|
||||||
|
{{ promptSaving ? 'Сохраняем...' : 'Сохранить промпт' }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</GlassCard>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -457,16 +455,10 @@ onMounted(() => {
|
|||||||
.review-text {
|
.review-text {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
max-width: 320px;
|
max-width: 320px;
|
||||||
overflow: hidden;
|
white-space: pre-wrap;
|
||||||
text-overflow: ellipsis;
|
overflow-wrap: anywhere;
|
||||||
white-space: nowrap;
|
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.raw-status {
|
|
||||||
display: inline-flex;
|
|
||||||
color: var(--color-text-secondary);
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
.table-section {
|
.table-section {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
Reference in New Issue
Block a user