Update index.html
This commit is contained in:
+5
-173
@@ -3,13 +3,15 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>جستوجوی اسناد شرکت صادنتل</title>
|
||||
<title>جستوجوی اسناد شرکت سادن تل</title>
|
||||
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
|
||||
body {
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
background: #f3f5f8;
|
||||
@@ -131,178 +133,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
let documents = [];
|
||||
|
||||
const searchInput = document.getElementById("searchInput");
|
||||
const results = document.getElementById("results");
|
||||
const status = document.getElementById("status");
|
||||
|
||||
|
||||
|
||||
|
||||
// خواندن صحیح اطلاعات CSV
|
||||
function parseCSV(text) {
|
||||
const rows = [];
|
||||
let row = [];
|
||||
let field = "";
|
||||
let insideQuotes = false;
|
||||
|
||||
for (let i = 0; i < text.length; i++) {
|
||||
const char = text[i];
|
||||
|
||||
if (char === '"') {
|
||||
if (insideQuotes && text[i + 1] === '"') {
|
||||
field += '"';
|
||||
i++;
|
||||
} else {
|
||||
insideQuotes = !insideQuotes;
|
||||
}
|
||||
}
|
||||
else if (char === "," && !insideQuotes) {
|
||||
row.push(field);
|
||||
field = "";
|
||||
}
|
||||
else if (
|
||||
(char === "\n" || char === "\r") &&
|
||||
!insideQuotes
|
||||
) {
|
||||
if (char === "\r" && text[i + 1] === "\n") {
|
||||
i++;
|
||||
}
|
||||
|
||||
row.push(field);
|
||||
|
||||
if (row.some(value => value.trim() !== "")) {
|
||||
rows.push(row);
|
||||
}
|
||||
|
||||
row = [];
|
||||
field = "";
|
||||
}
|
||||
else {
|
||||
field += char;
|
||||
}
|
||||
}
|
||||
|
||||
row.push(field);
|
||||
|
||||
if (row.some(value => value.trim() !== "")) {
|
||||
rows.push(row);
|
||||
}
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
|
||||
// دریافت فایل CSV
|
||||
async function loadDocuments() {
|
||||
try {
|
||||
const response = await fetch("./SadenTel_Documents.csv");
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("CSV file not found");
|
||||
}
|
||||
|
||||
const text = await response.text();
|
||||
const rows = parseCSV(text);
|
||||
|
||||
documents = rows.slice(1).map(columns => ({
|
||||
row: columns[0]?.trim(),
|
||||
title: columns[1]?.trim(),
|
||||
id: columns[2]?.trim()
|
||||
})).filter(doc => doc.title && doc.id);
|
||||
|
||||
status.textContent =
|
||||
`${documents.length} سند با موفقیت بارگذاری شد.`;
|
||||
|
||||
searchInput.disabled = false;
|
||||
|
||||
} catch (error) {
|
||||
status.textContent =
|
||||
"خطا در خواندن فایل اسناد. مسیر CSV را بررسی کنید.";
|
||||
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// جستوجوی اسناد
|
||||
function searchDocuments() {
|
||||
const query = normalize(searchInput.value);
|
||||
|
||||
results.innerHTML = "";
|
||||
|
||||
if (!query) {
|
||||
status.textContent =
|
||||
`${documents.length} سند ثبت شده است.`;
|
||||
return;
|
||||
}
|
||||
|
||||
const matches = documents.filter(doc => {
|
||||
const title = normalize(doc.title);
|
||||
const id = normalize(doc.id);
|
||||
|
||||
const titleWords = title.match(/[\p{L}\p{N}]+/gu) || [];
|
||||
|
||||
return titleWords.includes(query) || id === query;
|
||||
});
|
||||
|
||||
status.textContent =
|
||||
`${matches.length} نتیجه پیدا شد.`;
|
||||
|
||||
if (matches.length === 0) {
|
||||
results.innerHTML =
|
||||
'<div class="empty">سندی با این مشخصات پیدا نشد.</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
// نمایش نتایج
|
||||
matches.forEach(doc => {
|
||||
const item = document.createElement("div");
|
||||
item.className = "result";
|
||||
|
||||
const title = document.createElement("h3");
|
||||
title.textContent = doc.title;
|
||||
|
||||
const rowInfo = document.createElement("div");
|
||||
rowInfo.className = "info";
|
||||
|
||||
const rowLabel = document.createElement("span");
|
||||
rowLabel.textContent = "ردیف";
|
||||
|
||||
const rowValue = document.createElement("span");
|
||||
rowValue.textContent = doc.row;
|
||||
|
||||
rowInfo.append(rowLabel, rowValue);
|
||||
|
||||
const idInfo = document.createElement("div");
|
||||
idInfo.className = "info";
|
||||
|
||||
const idLabel = document.createElement("span");
|
||||
idLabel.textContent = "شناسه داخلی سند";
|
||||
|
||||
const idValue = document.createElement("span");
|
||||
idValue.textContent = doc.id;
|
||||
|
||||
idInfo.append(idLabel, idValue);
|
||||
|
||||
item.append(title, rowInfo, idInfo);
|
||||
|
||||
results.appendChild(item);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// جستوجوی لحظهای
|
||||
searchInput.addEventListener("input", searchDocuments);
|
||||
|
||||
|
||||
// شروع بارگذاری
|
||||
loadDocuments();
|
||||
|
||||
</script>
|
||||
<script src="./search.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
مرجع در شماره جدید
مسدود کردن کاربر