midokhaled927 commited on
Commit
0a0438c
·
verified ·
1 Parent(s): 89b91f3

Create static/script.js

Browse files
Files changed (1) hide show
  1. static/script.js +157 -0
static/script.js ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // عرض معاينة الصورة
2
+ document.getElementById('enrollImage')?.addEventListener('change', function(e) {
3
+ previewImage(e, 'enrollPreview');
4
+ });
5
+ document.getElementById('searchImage')?.addEventListener('change', function(e) {
6
+ previewImage(e, 'searchPreview');
7
+ });
8
+
9
+ function previewImage(event, previewId) {
10
+ const file = event.target.files[0];
11
+ if (file) {
12
+ const reader = new FileReader();
13
+ reader.onload = function(e) {
14
+ const preview = document.getElementById(previewId);
15
+ preview.innerHTML = `<img src="${e.target.result}" alt="Preview">`;
16
+ };
17
+ reader.readAsDataURL(file);
18
+ }
19
+ }
20
+
21
+ // تسجيل وجه
22
+ async function enrollFace() {
23
+ const imageFile = document.getElementById('enrollImage').files[0];
24
+ const personName = document.getElementById('personName').value;
25
+
26
+ if (!imageFile || !personName) {
27
+ showResult('enrollResult', '❌ الرجاء اختيار صورة وإدخال الاسم', 'error');
28
+ return;
29
+ }
30
+
31
+ const formData = new FormData();
32
+ formData.append('file', imageFile);
33
+
34
+ showLoading('enrollResult', 'جاري تسجيل الوجه...');
35
+
36
+ try {
37
+ const response = await fetch(`/api/enroll?name=${encodeURIComponent(personName)}`, {
38
+ method: 'POST',
39
+ body: formData
40
+ });
41
+
42
+ const result = await response.json();
43
+
44
+ if (result.success) {
45
+ showResult('enrollResult', `✅ ${result.message}\nالرقم: ${result.identity_id}`, 'success');
46
+ document.getElementById('personName').value = '';
47
+ document.getElementById('enrollImage').value = '';
48
+ document.getElementById('enrollPreview').innerHTML = '';
49
+ } else {
50
+ showResult('enrollResult', `❌ ${result.message}`, 'error');
51
+ }
52
+ } catch (error) {
53
+ showResult('enrollResult', '❌ حدث خطأ في الاتصال', 'error');
54
+ }
55
+ }
56
+
57
+ // البحث عن وجه
58
+ async function searchFace() {
59
+ const imageFile = document.getElementById('searchImage').files[0];
60
+
61
+ if (!imageFile) {
62
+ showResult('searchResult', '❌ الرجاء اختيار صورة للبحث', 'error');
63
+ return;
64
+ }
65
+
66
+ const formData = new FormData();
67
+ formData.append('file', imageFile);
68
+
69
+ showLoading('searchResult', 'جاري البحث...');
70
+
71
+ try {
72
+ const response = await fetch('/api/search', {
73
+ method: 'POST',
74
+ body: formData
75
+ });
76
+
77
+ const result = await response.json();
78
+
79
+ if (result.success) {
80
+ const similarityPercent = (result.similarity * 100).toFixed(2);
81
+ showResult('searchResult',
82
+ `✅ تم العثور على تطابق!\n👤 الاسم: ${result.name}\n📊 نسبة التشابه: ${similarityPercent}%\n🆔 الرقم: ${result.identity_id}`,
83
+ 'success');
84
+ } else {
85
+ showResult('searchResult', `❌ ${result.message}`, 'error');
86
+ }
87
+ } catch (error) {
88
+ showResult('searchResult', '❌ حدث خطأ في الاتصال', 'error');
89
+ }
90
+ }
91
+
92
+ // تحميل قاعدة البيانات
93
+ async function loadDatabase() {
94
+ showLoading('databaseList', 'جاري تحميل البيانات...');
95
+
96
+ try {
97
+ const response = await fetch('/api/identities');
98
+ const result = await response.json();
99
+
100
+ if (result.success && result.data.length > 0) {
101
+ let html = '<div class="identities-grid">';
102
+ result.data.forEach(person => {
103
+ html += `
104
+ <div class="identity-card">
105
+ <h3>${person.name}</h3>
106
+ <p>🆔 ${person.id}</p>
107
+ <p>📅 ${new Date(person.created_at).toLocaleDateString('ar-EG')}</p>
108
+ </div>
109
+ `;
110
+ });
111
+ html += '</div>';
112
+ document.getElementById('databaseList').innerHTML = html;
113
+ } else {
114
+ showResult('databaseList', '📭 لا يوجد أشخاص مسجلين', 'info');
115
+ }
116
+ } catch (error) {
117
+ showResult('databaseList', '❌ خطأ في تحميل البيانات', 'error');
118
+ }
119
+ }
120
+
121
+ function showResult(elementId, message, type) {
122
+ const element = document.getElementById(elementId);
123
+ element.innerHTML = `<div class="alert alert-${type}">${message.replace(/\n/g, '<br>')}</div>`;
124
+ setTimeout(() => {
125
+ if (element.innerHTML.includes('alert')) {
126
+ element.innerHTML = '';
127
+ }
128
+ }, 5000);
129
+ }
130
+
131
+ function showLoading(elementId, message) {
132
+ document.getElementById(elementId).innerHTML = `<div class="loading">⏳ ${message}</div>`;
133
+ }
134
+
135
+ function showTab(tabName) {
136
+ // إخفاء كل التبويبات
137
+ document.querySelectorAll('.tab-content').forEach(tab => {
138
+ tab.classList.remove('active');
139
+ });
140
+ document.querySelectorAll('.tab-btn').forEach(btn => {
141
+ btn.classList.remove('active');
142
+ });
143
+
144
+ // إظهار التبويب المختار
145
+ document.getElementById(tabName).classList.add('active');
146
+ event.target.classList.add('active');
147
+
148
+ // تحميل قاعدة البيانات إذا تم اختيارها
149
+ if (tabName === 'database') {
150
+ loadDatabase();
151
+ }
152
+ }
153
+
154
+ // تحميل قاعدة البيانات تلقائياً عند بدء التشغيل
155
+ document.addEventListener('DOMContentLoaded', () => {
156
+ loadDatabase();
157
+ });