You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
aisentinel/src/components/HistoryComponent.vue

91 lines
3.2 KiB

<template>
<div class="bg-white rounded-lg shadow-lg p-6">
<div class="flex justify-between items-center mb-6">
<h2 class="text-2xl font-bold text-gray-800">📋 История анализов</h2>
<button
@click="$emit('clear-history')"
class="bg-red-500 hover:bg-red-600 text-white px-4 py-2 rounded-lg transition-colors"
:disabled="history.length === 0"
>
Очистить историю
</button>
</div>
<div v-if="history.length === 0" class="text-center py-12">
<div class="text-6xl mb-4">📊</div>
<h3 class="text-xl font-semibold text-gray-600 mb-2">История пуста</h3>
<p class="text-gray-500">Выполните анализ поля, чтобы сохранить его в историю</p>
</div>
<div v-else class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div
v-for="item in history"
:key="item.id"
class="border border-gray-200 rounded-lg p-4 hover:shadow-md transition-shadow bg-white"
>
<div class="flex justify-between items-start mb-3">
<h3 class="font-semibold text-lg text-gray-800 truncate">{{ item.fieldName }}</h3>
<button
@click="$emit('delete-history', item.id)"
class="text-red-500 hover:text-red-700 transition-colors"
title="Удалить"
>
🗑
</button>
</div>
<div class="space-y-2 text-sm text-gray-600 mb-4">
<div class="flex justify-between">
<span>Дата анализа:</span>
<span class="font-medium">{{ new Date(item.date).toLocaleDateString() }}</span>
</div>
<div class="flex justify-between">
<span>Площадь:</span>
<span class="font-medium">{{ item.area }} га</span>
</div>
<div class="flex justify-between">
<span>Средний NDVI:</span>
<span :class="getNDVIClass(item.result.stats.mean)" class="font-medium">
{{ item.result.stats.mean }}
</span>
</div>
</div>
<div class="space-y-2 mb-4">
<div class="flex justify-between text-xs">
<span class="text-green-600">Здоровая: {{ item.result.stats.healthy }}%</span>
<span class="text-yellow-600">Умеренная: {{ item.result.stats.moderate }}%</span>
<span class="text-red-600">Слабая: {{ item.result.stats.poor }}%</span>
</div>
</div>
<button
@click="$emit('load-analysis', item)"
class="w-full bg-blue-500 hover:bg-blue-600 text-white py-2 px-4 rounded-lg transition-colors flex items-center justify-center"
>
<span>Загрузить анализ</span>
</button>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'HistoryComponent',
props: {
history: {
type: Array,
default: () => []
}
},
emits: ['load-analysis', 'delete-history', 'clear-history'],
methods: {
getNDVIClass(ndvi) {
if (ndvi > 0.6) return 'text-green-600';
if (ndvi > 0.3) return 'text-yellow-600';
return 'text-red-600';
}
}
};
</script>