diff --git a/PACS_DICOM处理/数据处理网页端/README.md b/PACS_DICOM处理/数据处理网页端/README.md index b5056fd..cd0cf3f 100644 --- a/PACS_DICOM处理/数据处理网页端/README.md +++ b/PACS_DICOM处理/数据处理网页端/README.md @@ -42,7 +42,7 @@ uvicorn app:app --host 127.0.0.1 --port 8107 - 影像操作:支持鼠标滚轮缩放、拖拽平移、按钮缩放和复位。 - 图像叠层:可显示/隐藏患者、检查、方向、张数、窗宽窗位和缩放信息。 - DICOM 信息:查看患者、检查、序列、像素间距、切片间距等元数据。 -- 序列列表:默认按拍摄时间升序排序,可切换降序;少于 80 张且未标注部位的序列默认略过。 +- 序列列表:默认按拍摄时间升序排序,可切换时间升降序或张数升降序;略过序列固定在最下方,并在略过分组内继续按当前排序规则排列。 - 序列标注:选择略过、平扫 CT、头颈部、胸部、上腹部、下腹部、盆腔;点击后自动保存;上腹部需继续选择动脉期、门静脉期或无法判别。 - AI 识别:配置 Kimi 后,可把序列张数及轴位原始、矢状位重建、冠状位重建代表图像传入 AI,自动给出部位、期相和备注建议。 - 设置:支持用户创建、角色权限展示、数据库状态和 AI 配置查看。 diff --git a/PACS_DICOM处理/数据处理网页端/static/app.js b/PACS_DICOM处理/数据处理网页端/static/app.js index 9d10d1b..784d17e 100644 --- a/PACS_DICOM处理/数据处理网页端/static/app.js +++ b/PACS_DICOM处理/数据处理网页端/static/app.js @@ -18,7 +18,7 @@ const app = { saveTimer: null, pendingImage: null, drag: null, - seriesSort: "asc", + seriesSort: "timeAsc", showOverlay: true, }; @@ -173,8 +173,12 @@ function sortSeries(list) { const skipA = a.annotation?.skipped ? 1 : 0; const skipB = b.annotation?.skipped ? 1 : 0; if (skipA !== skipB) return skipA - skipB; - const result = timeKey(a).localeCompare(timeKey(b)) || String(a.series_number || "").localeCompare(String(b.series_number || ""), undefined, { numeric: true }); - return app.seriesSort === "asc" ? result : -result; + const timeResult = timeKey(a).localeCompare(timeKey(b)) || String(a.series_number || "").localeCompare(String(b.series_number || ""), undefined, { numeric: true }); + const countResult = Number(a.count || 0) - Number(b.count || 0) || timeResult; + if (app.seriesSort === "timeDesc") return -timeResult; + if (app.seriesSort === "countAsc") return countResult; + if (app.seriesSort === "countDesc") return -countResult; + return timeResult; }); } @@ -762,8 +766,9 @@ function wireImageGestures() { function setSort(direction) { app.seriesSort = direction; - $("sortAsc").classList.toggle("active", direction === "asc"); - $("sortDesc").classList.toggle("active", direction === "desc"); + document.querySelectorAll("[data-sort]").forEach((button) => { + button.classList.toggle("active", button.dataset.sort === direction); + }); app.series = sortSeries(app.series); renderSeries(); if (app.activeSeries) { @@ -783,8 +788,9 @@ function wire() { app.showOverlay = !app.showOverlay; updateOverlay(); }); - $("sortAsc").addEventListener("click", () => setSort("asc")); - $("sortDesc").addEventListener("click", () => setSort("desc")); + document.querySelectorAll("[data-sort]").forEach((button) => { + button.addEventListener("click", () => setSort(button.dataset.sort)); + }); $("studySearch").addEventListener("input", () => { clearTimeout(app.searchTimer); app.searchTimer = setTimeout(loadStudies, 250); diff --git a/PACS_DICOM处理/数据处理网页端/static/index.html b/PACS_DICOM处理/数据处理网页端/static/index.html index f391944..fadcee3 100644 --- a/PACS_DICOM处理/数据处理网页端/static/index.html +++ b/PACS_DICOM处理/数据处理网页端/static/index.html @@ -54,8 +54,10 @@

序列

- - + + + + 0
diff --git a/PACS_DICOM处理/数据处理网页端/static/styles.css b/PACS_DICOM处理/数据处理网页端/static/styles.css index de86b68..3d02d4c 100644 --- a/PACS_DICOM处理/数据处理网页端/static/styles.css +++ b/PACS_DICOM处理/数据处理网页端/static/styles.css @@ -287,17 +287,21 @@ button:disabled { .series-head-tools { display: flex; align-items: center; + justify-content: flex-end; + flex-wrap: wrap; gap: 6px; + max-width: 330px; } .sort-btn { height: 26px; - padding: 0 8px; + min-width: 56px; + padding: 0 7px; border: 1px solid var(--stroke); border-radius: 7px; background: #0b0f16; color: var(--muted); - font-size: 12px; + font-size: 11px; } .sort-btn.active {