| HTML |
|---|
<!-- فونت وزیر --> <link href="https://cdn.jsdelivr.net/gh/rastikerdar/vazir-font@v30.1.0/dist/font-face.css" rel="stylesheet" type="text/css" /> <h1 style="text-align:center; font-family:Vazir, Tahoma; color:#333;font-weight:600;">مستندات اعتبار بخشی</h1> <!-- ردیف جستجو و فیلترها --> <div id="search-filters" style="display:flex; justify-content:center; flex-wrap:wrap; gap:10px; margin:30px 0;"> <input type="text" id="search" placeholder="جستجو بر اساس عنوان" style="flex:1 1 300px; max-width:400px; padding:10px 15px; border:none; background:#f3f3f3; border-radius:30px; font-size:14px; outline:none; text-align:right; font-family:Vazir, Tahoma; min-width:150px;"> <select id="filter-mahvar" style="flex:0 1 150px; padding:10px 15px; border-radius:25px; border:1px solid #ccc; font-family:Vazir, Tahoma; font-size:14px; background:#fff; cursor:pointer;"> <option value="">انتخاب محور</option> </select> <select id="filter-zirmohvar" style="flex:0 1 150px; padding:10px 15px; border-radius:25px; border:1px solid #ccc; font-family:Vazir, Tahoma; font-size:14px; background:#fff; cursor:pointer;"> <option value="">انتخاب زیرمحور</option> </select> </div> <!-- کانتینر سه بخش --> <div id="sections-container" style="padding:0 40px 60px; direction:rtl;"></div> <!-- پیام وقتی چیزی پیدا نشد --> <div id="no-result" style="display:none; text-align:center; color:#b40074; font-weight:600; font-size:16px; margin-top:20px;"> هیچ سندی پیدا نشد. </div> <style> .card { background:#fff; border-radius:18px; box-shadow:0 4px 10px rgba(0,0,0,0.1); padding:20px; display:flex; align-items:center; justify-content:space-between; flex-direction:row-reverse; font-family:Vazir, Tahoma; transition:all 0.3s ease; } .card-content { flex:1; text-align:right; padding-right:15px; } .card-content h3 { margin:0 0 8px; font-weight:600; font-size:14px; color:#333; } .card-content ul { margin:0; padding-right:15px; list-style:disc; font-size:13px; color:#555; } .open-btn { display:inline-block; background:#00A9C3; color:#fff; border:none; border-radius:25px; padding:4px 18px; font-size:13px; text-decoration:none; margin-top:12px; cursor:pointer; } .open-btn:hover { background:#0090a8; } .card-icon { background:#f7f7f7; border-radius:16px; padding:12px; display:flex; align-items:center; justify-content:center; } .card-icon img { width:2cm; height:2cm; } .card:hover { transform:scale(1.03); background:#fdfdfd; } @media(max-width:900px){ .section-grid{grid-template-columns:1fr;} #search-filters { flex-direction:column; align-items:center; } #search-filters input, #search-filters select { flex:1 1 auto; max-width:300px; } } </style> <script> const pageId = "92538739"; const fileName = "form-data.json"; let docs = []; const sections = [ { title: "رهبری و مدیریت", value: "رهبری و مدیریت" }, { title: "مراقبت و درمان", value: "مراقبت و درمان" }, { title: "حمایت از گیرنده خدمت", value: "حمایت از گیرنده خدمت" } ]; // زیرمحورها const zirmohvarOptions = { "رهبری و مدیریت": [ "رهبری و مدیریت کیفیت", "مدیریت خطر، حوادث و بلایا", "مدیریت منابع انسانی و سلامت حرفهای", "مدیریت خدمات پرستاری", "فناوری و مدیریت اطلاعات سلامت", "بهداشت محیط", "مدیریت تجهیزات پزشکی" ], "مراقبت و درمان": [ "مراقبتهای عمومی بالینی", "مراقبتهای حاد و اورژانس", "مراقبتهای جراحی و بیهوشی", "مراقبتهای مادر و نوزاد", "پیشگیری و کنترل عفونت", "مدیریت دارویی", "خدمات تصویربرداری", "خدمات آزمایشگاه", "طب انتقال خون", "خدمات سرپایی" ], "حمایت از گیرنده خدمت": [ "تأمین تسهیلات برای گیرنده خدمت", "احترام به حقوق گیرنده خدمت" ] }; // آیکنها const sanadIcons = { "آیین نامه<script> const pageId = "92538739"; const fileName = "form-data.json"; let docs = []; let attachmentsMap = {}; /* ========================= تعریف محورها ========================= */ const sections = [ { title: "رهبری و مدیریت", value: "رهبری و مدیریت" }, { title: "مراقبت و درمان", value: "مراقبت و درمان" }, { title: "حمایت از گیرنده خدمت", value: "حمایت از گیرنده خدمت" } ]; /* ========================= زیرمحورها ========================= */ const zirmohvarOptions = { "رهبری و مدیریت": [ "رهبری و مدیریت کیفیت", "مدیریت خطر، حوادث و بلایا", "مدیریت منابع انسانی و سلامت حرفهای", "مدیریت خدمات پرستاری", "فناوری و مدیریت اطلاعات سلامت", "بهداشت محیط", "مدیریت تجهیزات پزشکی" ], "مراقبت و درمان": [ "مراقبتهای عمومی بالینی", "مراقبتهای حاد و اورژانس", "مراقبتهای جراحی و بیهوشی", "مراقبتهای مادر و نوزاد", "پیشگیری و کنترل عفونت", "مدیریت دارویی", "خدمات تصویربرداری", "خدمات آزمایشگاه", "طب انتقال خون", "خدمات سرپایی" ], "حمایت از گیرنده خدمت": [ "تأمین تسهیلات برای گیرنده خدمت", "احترام به حقوق گیرنده خدمت" ] }; /* ========================= آیکنها ========================= */ const sanadIcons = { "آیین نامه": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%A7%DB%8C%DB%8C%D9%86%20%D9%86%D8%A7%D9%85%D9%87.png", "پروتکل": "https://kb.h-soft.ir/download/thumbnails/85045112/%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84.png", "خطمشی و روش": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%AE%D8%B7%20%D9%85%D8%B4%DB%8C.png", "دستورالعمل": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D9%84%D8%B9%D9%85%D9%84.png", "راهنما": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7.png", "روش اجرایی": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%B1%D9%88%D8%B4%20%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C%DB%8C.png", "فلوچارت": "https://kb.h-soft.ir/download/thumbnails/85045112/%D9%81%D9%84%D9%88%DA%86%D8%A7%D8%B1%D8%AA.png", "کتابچه": "https://kb.h-soft.ir/download/thumbnails/85045112/%DA%A9%D8%AA%D8%A7%D8%A8%DA%86%D9%87.png", "سند": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%A7%DB%8C%DB%8C%D9%86%20%D9%86%D8%A7%D9%85%D9%87.png?api=v2&nonce=1765664452835", "پروتکل": "https://kb.h-soft.ir/download/thumbnails/85045112/%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84.png?api=v2&nonce=1765664452833", "خطمشی و روش": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%AE%D8%B7%20%D9%85%D8%B4%DB%8C.png?api=v2&nonce=1765664452830", "دستورالعمل": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D9%84%D8%B9%D9%85%D9%84.png?api=v2&nonce=1765664452829", "راهنما": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7.png?api=v2&nonce=1765664452826", "روش اجرایی": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%B1%D9%88%D8%B4%20%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C%DB%8C.png?api=v2&nonce=1765664452825", "سند": "https://kb.h-soft.ir/download/thumbnails/85045112/%D8%B3%D9%86%D8%AF.png?api=v2&nonce=1765664452823", "فلوچارت": "https://kb.h-soft.ir/download/thumbnails/85045112/%D9%81%D9%84%D9%88%DA%86%D8%A7%D8%B1%D8%AA.png?api=v2&nonce=1765664452822", "کتابچه": "https://kb.h-soft.ir/download/thumbnails/85045112/%DA%A9%D8%AA%D8%A7%D8%A8%DA%86%D9%87.png?api=v2&nonce=1765664452819" }; // نرمالسازی نوع سند function normalizeSanadType(type){ if (!type) return ""; return type .trim() .replace(/\u200c/g, " ") // حذف نیمفاصله .replace(/\s+/g, " ") // یکسانسازی فاصلهها .toLowerCase(); } // تشخیص هوشمند آیکن function detectSanadIcon(type){ const t = normalizeSanadType(type); if (t.includes("آیین")) return sanadIcons["آیین نامه"]; if (t.includes("پروتکل")) return sanadIcons["پروتکل"]; if (t.includes("خط مشی")) return sanadIcons["خطمشی و روش"]; if (t.includes("دستورالعمل")) return sanadIcons["دستورالعمل"]; if (t.includes("راهنما")) return sanadIcons["راهنما"]; if (t.includes("روش اجرایی")) return sanadIcons["روش اجرایی"]; if (t.includes("فلوچارت")) return sanadIcons["فلوچارت"]; if (t.includes("کتابچه")) return sanadIcons["کتابچه"]; return sanadIcons["سند"]; } // دریافت JSON %D8%B3%D9%86%D8%AF.png" }; /* ========================= نرمالسازی نوع سند ========================= */ function normalizeSanadType(type){ if (!type) return ""; return type .trim() .replace(/\u200c/g, " ") .replace(/\s+/g, " ") .toLowerCase(); } function detectSanadIcon(type){ const t = normalizeSanadType(type); if (t.includes("آیین")) return sanadIcons["آیین نامه"]; if (t.includes("پروتکل")) return sanadIcons["پروتکل"]; if (t.includes("خط مشی")) return sanadIcons["خطمشی و روش"]; if (t.includes("دستورالعمل")) return sanadIcons["دستورالعمل"]; if (t.includes("راهنما")) return sanadIcons["راهنما"]; if (t.includes("روش اجرایی")) return sanadIcons["روش اجرایی"]; if (t.includes("فلوچارت")) return sanadIcons["فلوچارت"]; if (t.includes("کتابچه")) return sanadIcons["کتابچه"]; return sanadIcons["سند"]; } /* ========================= دریافت همه Attachment ها ========================= */ async function loadAttachments(){ const res = await fetch( `/rest/api/content/${pageId}/child/attachment?limit=500`, { credentials: "include" } ); const data = await res.json(); data.results.forEach(a => { attachmentsMap[a.title] = a._links.download; }); } /* ========================= دریافت JSON ========================= */ async function loadJSON(){ await loadAttachments(); const attRes = await fetch(( `/rest/api/content/${pageId}/child/attachment`, { credentials: "include" } ); const attData = await attRes.json(); const file = attData.results.find(a => a.title === fileName); if (!file) return; const downloadUrl = new URL(file._links.download, window.location.origin).href; const jsonText = await fetch(downloadUrl, { credentials:"include" }).then(r => r.text()); docs = JSON.parse(jsonText); populateMahvarFilter(); renderSections(); } // فیلتر محور = JSON.parse(jsonText); populateMahvarFilter(); renderSections(); } /* ========================= فیلترها ========================= */ function populateMahvarFilter(){ const sel = document.getElementById("filter-mahvar"); sections.forEach(s => { const o = document.createElement("option"); o.value = s.value; o.textContent = s.title; sel.appendChild(o); }); } // فیلتر زیرمحور } function updateZirmohvarFilter(){ const mahvar = document.getElementById("filter-mahvar").value; const sel = document.getElementById("filter-zirmohvar"); sel.innerHTML = '<option value="">انتخاب زیرمحور</option>'; (zirmohvarOptions[mahvar] || []).forEach(z => { const o = document.createElement("option"); o.value = z; o.textContent = z; sel.appendChild(o); }); } // کارت // تابع دریافت لینک فایل از Confluence* ========================= لینک واقعی فایل ========================= */ function getAttachmentUrl(fileName) { if (!fileName) return null; return attachmentsMap[fileName] || null; } /* ========================= return `/download/attachments/${pageId}/${encodeURIComponent(fileName)}?api=v2`; } // کارت کارت ========================= */ function createCard(doc){ const card = document.createElement("div"); card.className = "card"; const fileUrl = getAttachmentUrl(doc.document_file_name); // لینک واقعی فایل const iconUrl = detectSanadIcon(doc.noe_sanad); card.innerHTML = ` <div class="card-content"> <h3><b>${doc.document_name || doc.title || ""}</b></h3> <ul> <li>زیرمحور: ${doc.zirmohvar || "-"}</li> <li>نوع سند: ${doc.noe_sanad || "-"}</li> <li>شماره استاندارد: ${doc.standard_no || "-"}</li> <li>تاریخ آخرین بازنگری: ${doc.date || "-"}</li> </ul> ${ fileUrl ? `<a href="${fileUrl}" target="_blank" class="open-btn">مشاهده</a>` : `<span class="open-btn" style="background:#ccc;cursor:not-allowed">فایل ندارد</span>` } </div> <div class="card-icon"> <img src="${iconUrl}" alt="سند"> </div> `; return card; } // رندر کل بخشها بدون تغییر* ========================= رندر ========================= */ function renderSections(){ const searchText = document.getElementById("search").value.toLowerCase(); const m = document.getElementById("filter-mahvar").value; const z = document.getElementById("filter-zirmohvar").value; const container = document.getElementById("sections-container"); container.innerHTML = ""; let found = false; sections.forEach(sec => { const list = docs.filter(d => d.mahvar === sec.value && (!searchText || ((d.document_name || d.title || "").toLowerCase().includes(searchText))) && (!m || d.mahvar === m) && && (!z || d.zirmohvar === z) ); if if(!list.length) return; found = true; const grid = document.createElement("div"); grid.className = "section-grid"; grid.style.display = "grid"; grid.style.gridTemplateColumns = "repeat(2,1fr)"; grid.style.gap = "20px"; [...list].reverse().forEach(d => grid.appendChild(createCard(d))); const h2 = document.createElement("h2"); h2.style.textAlign = "center"; h2.textContent = sec.title; const hr = document.createElement("hr"); hrhr.style.border = "3px solid #b40074"; hr.style.width = "80px"; hr.style.margin = "0 auto 20px"; container.append(h2, hr, grid); }); document.getElementById("no-result").style.display = found ? "none" : "block"; } // رویدادها.display = found ? "none" : "block"; } /* ========================= رویدادها ========================= */ document.getElementById("search").addEventListener("input", renderSections); document.getElementById("filter-mahvar").addEventListener("change", () => { updateZirmohvarFilter(); renderSections(); }); document.getElementById("filter-zirmohvar").addEventListener("change", renderSections); loadJSON(); </script> |
Page History
Overview
Content Tools
Apps
Tasks