// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
// 初始化图片预览功能
initImagePreview('uploadFile', 'uploadPreview');
initImagePreview('searchFile', 'searchPreview');
// 初始化表单提交事件
initUploadForm();
initSearchForm();
initUpdateForm();
initDeleteForm();
});
// 初始化图片预览功能
function initImagePreview(inputId, previewId) {
const input = document.getElementById(inputId);
const preview = document.getElementById(previewId);
if (input && preview) {
input.addEventListener('change', function() {
if (this.files && this.files[0]) {
const reader = new FileReader();
reader.onload = function(e) {
preview.src = e.target.result;
preview.classList.remove('d-none');
};
reader.readAsDataURL(this.files[0]);
}
});
}
}
// 初始化上传表单
function initUploadForm() {
const form = document.getElementById('uploadForm');
if (form) {
form.addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
const resultDiv = document.getElementById('uploadResult');
resultDiv.innerHTML = '
';
fetch('/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.error) {
resultDiv.innerHTML = `${data.error}
`;
} else {
resultDiv.innerHTML = `
上传成功!
图片签名: ${data.cont_sign}
日志ID: ${data.log_id}
`;
// 重置表单
form.reset();
document.getElementById('uploadPreview').classList.add('d-none');
}
})
.catch(error => {
resultDiv.innerHTML = `上传失败: ${error.message}
`;
});
});
}
}
// 初始化搜索表单
function initSearchForm() {
const form = document.getElementById('searchForm');
if (form) {
form.addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
const resultDiv = document.getElementById('searchResult');
const resultList = document.getElementById('searchResultList');
const resultStats = document.getElementById('searchStats');
const resultCount = document.getElementById('resultCount');
resultList.innerHTML = '';
resultStats.classList.add('d-none');
fetch('/search', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.error) {
resultList.innerHTML = ``;
} else {
// 显示搜索结果统计
resultCount.textContent = data.result_num || 0;
resultStats.classList.remove('d-none');
// 清空结果列表
resultList.innerHTML = '';
if (data.result && data.result.length > 0) {
// 显示搜索结果
data.result.forEach(item => {
// 解析brief信息
let briefInfo = {};
try {
briefInfo = JSON.parse(item.brief);
} catch (e) {
briefInfo = { name: '未知', id: '未知' };
}
const resultItem = document.createElement('div');
resultItem.className = 'col-md-4 col-sm-6 result-item';
resultItem.innerHTML = `
${briefInfo.name || '未命名图片'}
ID: ${briefInfo.id || '无ID'}
相似度: ${(item.score * 100).toFixed(2)}%
`;
resultList.appendChild(resultItem);
});
// 初始化编辑和删除按钮事件
initResultButtons();
} else {
resultList.innerHTML = '';
}
}
})
.catch(error => {
resultList.innerHTML = ``;
});
});
}
}
// 初始化搜索结果中的按钮事件
function initResultButtons() {
// 更新按钮点击事件
document.querySelectorAll('.update-btn').forEach(button => {
button.addEventListener('click', function() {
const contSign = this.getAttribute('data-cont-sign');
const name = this.getAttribute('data-name');
const id = this.getAttribute('data-id');
document.getElementById('updateContSign').value = contSign;
document.getElementById('updateName').value = name;
document.getElementById('updateId').value = id;
});
});
// 删除按钮点击事件
document.querySelectorAll('.delete-btn').forEach(button => {
button.addEventListener('click', function() {
const contSign = this.getAttribute('data-cont-sign');
document.getElementById('deleteContSign').value = contSign;
});
});
}
// 初始化更新表单
function initUpdateForm() {
const updateButton = document.getElementById('updateSubmit');
if (updateButton) {
updateButton.addEventListener('click', function() {
const contSign = document.getElementById('updateContSign').value;
const name = document.getElementById('updateName').value;
const id = document.getElementById('updateId').value;
const tags = document.getElementById('updateTags').value;
// 创建brief信息
const brief = {
name: name,
id: id
};
// 发送更新请求
fetch('/update', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
cont_sign: contSign,
brief: brief,
tags: tags
})
})
.then(response => response.json())
.then(data => {
// 关闭模态框
const modal = bootstrap.Modal.getInstance(document.getElementById('updateModal'));
modal.hide();
if (data.error) {
alert(`更新失败: ${data.error}`);
} else {
alert('更新成功!');
// 如果当前在搜索标签页,刷新搜索结果
if (document.getElementById('search-tab').classList.contains('active')) {
document.getElementById('searchForm').dispatchEvent(new Event('submit'));
}
}
})
.catch(error => {
alert(`更新失败: ${error.message}`);
});
});
}
}
// 初始化删除表单
function initDeleteForm() {
const deleteButton = document.getElementById('deleteSubmit');
if (deleteButton) {
deleteButton.addEventListener('click', function() {
const contSign = document.getElementById('deleteContSign').value;
// 发送删除请求
fetch('/delete', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
cont_sign: contSign
})
})
.then(response => response.json())
.then(data => {
// 关闭模态框
const modal = bootstrap.Modal.getInstance(document.getElementById('deleteModal'));
modal.hide();
if (data.error) {
alert(`删除失败: ${data.error}`);
} else {
alert('删除成功!');
// 如果当前在搜索标签页,刷新搜索结果
if (document.getElementById('search-tab').classList.contains('active')) {
document.getElementById('searchForm').dispatchEvent(new Event('submit'));
}
}
})
.catch(error => {
alert(`删除失败: ${error.message}`);
});
});
}
}