// 页面加载完成后执行 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 = `
${data.error}
`; } 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 || '图片'}
${briefInfo.name || '未命名图片'}

ID: ${briefInfo.id || '无ID'}

相似度: ${(item.score * 100).toFixed(2)}%

`; resultList.appendChild(resultItem); }); // 初始化编辑和删除按钮事件 initResultButtons(); } else { resultList.innerHTML = '
没有找到匹配的图片
'; } } }) .catch(error => { resultList.innerHTML = `
搜索失败: ${error.message}
`; }); }); } } // 初始化搜索结果中的按钮事件 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}`); }); }); } }