病理工作台

This commit is contained in:
旺仔 2024-10-21 15:32:43 +08:00
parent aae33a6ea2
commit bbd151236d
9 changed files with 1365 additions and 916 deletions

View File

@ -1,5 +1,6 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -10,15 +11,21 @@
<script src="./js/cornerstoneMath.min.js"></script> <script src="./js/cornerstoneMath.min.js"></script>
<script src="./js/cornerstoneWADOImageLoader.bundle.min.js"></script> <script src="./js/cornerstoneWADOImageLoader.bundle.min.js"></script>
<script src="./js/cornerstoneWebImageLoader.min.js"></script> <script src="./js/cornerstoneWebImageLoader.min.js"></script>
<script src="./js/cornerstoneTools.js"></script><!-- https://unpkg.com/cornerstone-tools@6.0.7/dist/cornerstoneTools.js --> <script src="./js/cornerstoneTools.js"></script>
<!-- https://unpkg.com/cornerstone-tools@6.0.7/dist/cornerstoneTools.js -->
<script src="./js/dicomParser.min.js"></script> <script src="./js/dicomParser.min.js"></script>
<script src="./js/jquery-1.12.2.min.js"></script> <script src="./js/jquery-1.12.2.min.js"></script>
<script src="./js/html2canvas.min.js"></script>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css"
integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!-- 可选的 Bootstrap 主题文件(一般不用引入) --> <!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap-theme.min.css"
integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous">
<!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"
integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
crossorigin="anonymous"></script>
<script src="./js/dicomViewPc.js"></script> <script src="./js/dicomViewPc.js"></script>
<link rel="stylesheet" href="./css/iconfont/iconfont.css"> <link rel="stylesheet" href="./css/iconfont/iconfont.css">
<style> <style>
@ -61,9 +68,10 @@
display: flex; display: flex;
flex-direction: row;*/ flex-direction: row;*/
border: 0px solid red; border: 0px solid red;
/* overflow-x: hidden; /* overflow-x: hidden;
overflow-y: hidden; */ overflow-y: hidden; */
position: relative; /* 确保下拉菜单相对于这个元素定位 */ position: relative;
/* 确保下拉菜单相对于这个元素定位 */
} }
#body-part { #body-part {
@ -88,7 +96,7 @@
/* overflow: auto; */ /* overflow: auto; */
overflow-y: scroll; overflow-y: scroll;
flex-direction: column; flex-direction: column;
max-height:550px; max-height: 550px;
} }
.btn { .btn {
@ -106,8 +114,8 @@
.series_img { .series_img {
border: 1px solid black; border: 1px solid black;
height:100%; height: 100%;
width:100%; width: 100%;
} }
.series_img_active { .series_img_active {
@ -154,7 +162,8 @@
} }
.cornerstone-tool-active { .cornerstone-tool-active {
stroke: #FF0000 !important; /* 红色 */ stroke: #FF0000 !important;
/* 红色 */
} }
.dicom-img-box { .dicom-img-box {
@ -167,7 +176,7 @@
align-items: center; align-items: center;
background-color: black; background-color: black;
border: 1px solid white; border: 1px solid white;
position:relative; position: relative;
} }
.dicom-img-box-active { .dicom-img-box-active {
@ -196,6 +205,7 @@
height: 100%; height: 100%;
border: 1px solid red; border: 1px solid red;
} }
/*滚动条*/ /*滚动条*/
.slider-container { .slider-container {
height: 100%; height: 100%;
@ -227,7 +237,7 @@
width: 20rem !important; width: 20rem !important;
margin-left: -8.5rem; margin-left: -8.5rem;
/*background: linear-gradient(to right,rgb(200,66,67),rgb(238,222,217));*/ /*background: linear-gradient(to right,rgb(200,66,67),rgb(238,222,217));*/
background: linear-gradient(to right,rgb(200,66,67),rgb(200,66,67)); background: linear-gradient(to right, rgb(200, 66, 67), rgb(200, 66, 67));
} }
/* 滑动块样式 */ /* 滑动块样式 */
@ -238,7 +248,7 @@
width: 2rem; width: 2rem;
border-radius: 0rem; border-radius: 0rem;
background-color: white; background-color: white;
border: 0.15rem solid rgb(245,95,95); border: 0.15rem solid rgb(245, 95, 95);
} }
/*滑块样式-结束*/ /*滑块样式-结束*/
@ -251,9 +261,10 @@
align-items: center; align-items: center;
} }
.icon-xia:hover, .icon-shang:hover { .icon-xia:hover,
color: white; .icon-shang:hover {
} color: white;
}
.icon-xia { .icon-xia {
color: red; color: red;
@ -283,8 +294,8 @@
top: 0px; top: 0px;
right: 0px; right: 0px;
color: white; color: white;
display:flex; display: flex;
flex-direction:row-reverse; flex-direction: row-reverse;
} }
.around-info-left-bottom { .around-info-left-bottom {
@ -300,128 +311,175 @@
bottom: 0px; bottom: 0px;
color: white; color: white;
display: flex; display: flex;
flex-direction:column; flex-direction: column;
} }
.around-info-right-bottom > .tag-item, around-info-right-top > .tag-item {
.around-info-right-bottom>.tag-item,
around-info-right-top>.tag-item {
display: flex; display: flex;
flex-direction: row-reverse; flex-direction: row-reverse;
} }
.process-div { .process-div {
position:absolute; position: absolute;
left:0; left: 0;
top:0; top: 0;
height:100%; height: 100%;
width:100%; width: 100%;
display:flex; display: flex;
flex-direction:column; flex-direction: column;
align-content:space-around; align-content: space-around;
justify-content:center; justify-content: center;
align-items:center; align-items: center;
font-size:30px; font-size: 30px;
color:red; color: red;
} }
.icon-img-box { .icon-img-box {
position:relative; position: relative;
width:100%; width: 100%;
height:151px; height: 151px;
} }
.icon-img-box > canvas {
height:149px !important; .icon-img-box>canvas {
width:149px !important; height: 149px !important;
width: 149px !important;
} }
/* 为图片设置过渡效果 */
.img-checkbox {
transition: transform 0.3s ease;
cursor: pointer;
}
/* 点击时的效果 */ /* 为图片设置过渡效果 */
.img-checkbox:active { .img-checkbox {
transform: scale(0.95); transition: transform 0.3s ease;
opacity: 0.8; cursor: pointer;
} }
.img-checkbox.active { /* 点击时的效果 */
border: 1px solid rgb(73, 121, 243); /* 添加边框 */ .img-checkbox:active {
} transform: scale(0.95);
opacity: 0.8;
}
/* 下拉样式 */ .img-checkbox.active {
border: 1px solid rgb(73, 121, 243);
/* 添加边框 */
}
/* 下拉样式 */
.dropdown { .dropdown {
position: relative; position: relative;
display: inline-block; display: inline-block;
} }
.dropdown-content { .dropdown-content {
list-style-type: none; /* 去掉前面的点 */ list-style-type: none;
display: none; /* 默认隐藏 */ /* 去掉前面的点 */
display: none;
/* 默认隐藏 */
position: absolute; position: absolute;
background-color: #f9f9f9; background-color: #f9f9f9;
min-width: 61px; min-width: 61px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1000; /* 确保在最上层 */ z-index: 1000;
padding:5px; /* 去掉内边距 */ /* 确保在最上层 */
margin: 0; /* 去掉外边距 */ padding: 5px;
/* 去掉内边距 */
margin: 0;
/* 去掉外边距 */
} }
.dropdown-content a { .dropdown-content a {
color: black; color: black;
padding: 5px; padding: 5px;
text-decoration: none; text-decoration: none;
display: block; display: block;
} }
.dropdown-content a:hover { .dropdown-content a:hover {
background-color:rgb(196, 213, 255); background-color: rgb(196, 213, 255);
} }
.dropdown:hover .dropdown-content { .dropdown:hover .dropdown-content {
display: block; /* 悬停显示下拉内容 */ display: block;
/* 悬停显示下拉内容 */
} }
.dropdown:hover .dropbtn { .dropdown:hover .dropbtn {
background-color: #3e8e41; /* 悬停时的按钮颜色 */ background-color: #3e8e41;
/* 悬停时的按钮颜色 */
} }
</style> </style>
</head> </head>
<body> <body>
<div id="container"> <div id="container">
<div id="top-menu" > <div id="top-menu">
<img title="放大镜" style="width: 35px;height: 35px; margin-left: 5px;" id="Magnify" class="img-checkbox" onclick="switchAction('Magnify',1,this)" src="/static/放大镜.jpg"/> <img title="放大镜" style="width: 35px;height: 35px; margin-left: 5px;" id="Magnify" class="img-checkbox"
<img title="平移" style="width: 50px;height: 50px;" id="Pan" class="img-checkbox" onclick="switchAction('Pan',1,this)" src="/static/平移.jpg"/> onclick="switchAction('Magnify',1,this)" src="/static/放大镜.jpg" />
<img title="左键缩放" style="width: 50px;height: 50px;" id="Zoom" class="img-checkbox" onclick="switchAction('Zoom',1,this)" src="/static/缩放.jpg"/> <img title="平移" style="width: 50px;height: 50px;" id="Pan" class="img-checkbox"
<img title="滚轮缩放" style="width: 50px;height: 50px;" id="ZoomMouseWheel" class="img-checkbox" onclick="switchAction('ZoomMouseWheel',1,this)" src="/static/滚轮缩放.jpg" /> onclick="switchAction('Pan',1,this)" src="/static/平移.jpg" />
<img title="对比度" style="width: 50px;height: 50px;" id="Wwwc" class="img-checkbox" onclick="switchAction('Wwwc',1,this)" src="/static/对比度.jpg"/> <img title="左键缩放" style="width: 50px;height: 50px;" id="Zoom" class="img-checkbox"
<img title="选区对比度" style="width: 50px;height: 50px;" id="WwwcRegion" class="img-checkbox" onclick="switchAction('WwwcRegion',1,this)" src="/static/选区对比度.jpg"/> onclick="switchAction('Zoom',1,this)" src="/static/缩放.jpg" />
<img title="比例尺" style="width: 50px;height: 50px;" id="ScaleOverlay" class="img-checkbox" onclick="switchAction('ScaleOverlay',1,this)" src="/static/比例尺.jpg"/> <img title="滚轮缩放" style="width: 50px;height: 50px;" id="ZoomMouseWheel" class="img-checkbox"
<img title="旋转" style="width: 50px;height: 50px;" id="Rotate" class="img-checkbox" onclick="switchAction('Rotate',1,this)" src="/static/旋转.jpg"/> onclick="switchAction('ZoomMouseWheel',1,this)" src="/static/滚轮缩放.jpg" />
<img title="方向标记" style="width: 50px;height: 50px;" id="OrientationMarkers" class="img-checkbox" onclick="switchAction('OrientationMarkers',1,this)" src="/static/方向标记.jpg"/> <img title="对比度" style="width: 50px;height: 50px;" id="Wwwc" class="img-checkbox"
<img title="角度" style="width: 50px;height: 50px;" id="Angle" class="img-checkbox" onclick="switchAction('Angle',1,this)" src="/static/角度.jpg"/> onclick="switchAction('Wwwc',1,this)" src="/static/对比度.jpg" />
<img title="箭头注释" style="width: 50px;height: 50px;" id="ArrowAnnotate" class="img-checkbox" onclick="switchAction('ArrowAnnotate',1,this)" src="/static/箭头注释.jpg"/> <img title="选区对比度" style="width: 50px;height: 50px;" id="WwwcRegion" class="img-checkbox"
<img title="长宽尺" style="width: 50px;height: 50px;" id="Bidirectional" class="img-checkbox" onclick="switchAction('Bidirectional',1,this)" src="/static/长宽尺.jpg"/> onclick="switchAction('WwwcRegion',1,this)" src="/static/选区对比度.jpg" />
<img title="科布角" style="width: 50px;height: 50px;" id="CobbAngle" class="img-checkbox" onclick="switchAction('CobbAngle',1,this)" src="/static/科布角.jpg"/> <img title="比例尺" style="width: 50px;height: 50px;" id="ScaleOverlay" class="img-checkbox"
<img title="椭圆选区" style="width: 50px;height: 50px;" id="EllipticalRoi" class="img-checkbox" onclick="switchAction('EllipticalRoi',1,this)" src="/static/椭圆选区.jpg"/> onclick="switchAction('ScaleOverlay',1,this)" src="/static/比例尺.jpg" />
<img title="自由选区" style="width: 50px;height: 50px;" id="FreehandRoi" class="img-checkbox" onclick="switchAction('FreehandRoi',1,this)" src="/static/自由选区.jpg"/> <img title="旋转" style="width: 50px;height: 50px;" id="Rotate" class="img-checkbox"
<img title="长度尺" style="width: 50px;height: 50px;" id="Length" class="img-checkbox" onclick="switchAction('Length',1,this)" src="/static/长度尺.jpg"/> onclick="switchAction('Rotate',1,this)" src="/static/旋转.jpg" />
<img title="探针" style="width: 50px;height: 50px;" id="Probe" class="img-checkbox" onclick="switchAction('Probe',1,this)" src="/static/探针.jpg"/> <img title="方向标记" style="width: 50px;height: 50px;" id="OrientationMarkers" class="img-checkbox"
<img title="矩形选区" style="width: 50px;height: 50px;" id="RectangleRoi" class="img-checkbox" onclick="switchAction('RectangleRoi',1,this)" src="/static/矩形选区.jpg"/> onclick="switchAction('OrientationMarkers',1,this)" src="/static/方向标记.jpg" />
<img title="文本标记" style="width: 50px;height: 50px;" id="TextMarker" class="img-checkbox" onclick="switchAction('TextMarker',1,this)" src="/static/箭头注释.jpg"/> <img title="角度" style="width: 50px;height: 50px;" id="Angle" class="img-checkbox"
<img title="左键翻页" style="width: 50px;height: 50px;" id="StackScroll" class="img-checkbox" onclick="switchAction('StackScroll',1,this)" src="/static/左键翻页.jpg"/> onclick="switchAction('Angle',1,this)" src="/static/角度.jpg" />
<img title="滚轮翻页" style="width: 50px;height: 50px;" id="StackScrollMouseWheel" class="img-checkbox" onclick="switchAction('StackScrollMouseWheel',1,this)" src="/static/鼠标翻页.jpg"/> <img title="箭头注释" style="width: 50px;height: 50px;" id="ArrowAnnotate" class="img-checkbox"
<img title="反转色" style="width: 50px;height: 50px;" id="invert" class="img-checkbox" onclick="invert(1,this)" src="/static/反转色.jpg"/> onclick="switchAction('ArrowAnnotate',1,this)" src="/static/箭头注释.jpg" />
<img title="色彩对比" style="width: 50px;height: 50px;" id="changeColorx" class="img-checkbox" onclick="changColor(1,this)" src="/static/色彩对比.jpg"/> <img title="长宽尺" style="width: 50px;height: 50px;" id="Bidirectional" class="img-checkbox"
<img title="重置" id="reset" style="width: 50px;height: 50px;" onclick="resetTool()" class="img-checkbox" src="/static/重置.jpg"/> onclick="switchAction('Bidirectional',1,this)" src="/static/长宽尺.jpg" />
<img title="科布角" style="width: 50px;height: 50px;" id="CobbAngle" class="img-checkbox"
onclick="switchAction('CobbAngle',1,this)" src="/static/科布角.jpg" />
<img title="椭圆选区" style="width: 50px;height: 50px;" id="EllipticalRoi" class="img-checkbox"
onclick="switchAction('EllipticalRoi',1,this)" src="/static/椭圆选区.jpg" />
<img title="自由选区" style="width: 50px;height: 50px;" id="FreehandRoi" class="img-checkbox"
onclick="switchAction('FreehandRoi',1,this)" src="/static/自由选区.jpg" />
<img title="长度尺" style="width: 50px;height: 50px;" id="Length" class="img-checkbox"
onclick="switchAction('Length',1,this)" src="/static/长度尺.jpg" />
<img title="探针" style="width: 50px;height: 50px;" id="Probe" class="img-checkbox"
onclick="switchAction('Probe',1,this)" src="/static/探针.jpg" />
<img title="矩形选区" style="width: 50px;height: 50px;" id="RectangleRoi" class="img-checkbox"
onclick="switchAction('RectangleRoi',1,this)" src="/static/矩形选区.jpg" />
<img title="文本标记" style="width: 50px;height: 50px;" id="TextMarker" class="img-checkbox"
onclick="switchAction('TextMarker',1,this)" src="/static/箭头注释.jpg" />
<img title="左键翻页" style="width: 50px;height: 50px;" id="StackScroll" class="img-checkbox"
onclick="switchAction('StackScroll',1,this)" src="/static/左键翻页.jpg" />
<img title="滚轮翻页" style="width: 50px;height: 50px;" id="StackScrollMouseWheel" class="img-checkbox"
onclick="switchAction('StackScrollMouseWheel',1,this)" src="/static/鼠标翻页.jpg" />
<img title="反转色" style="width: 50px;height: 50px;" id="invert" class="img-checkbox" onclick="invert(1,this)"
src="/static/反转色.jpg" />
<img title="色彩对比" style="width: 50px;height: 50px;" id="changeColorx" class="img-checkbox"
onclick="changColor(1,this)" src="/static/色彩对比.jpg" />
<img title="截图" id="screenshot" style="width: 50px;height: 50px;" onclick="screenshotTool()"
class="img-checkbox" src="/static/相机.jpg" />
<img title="重置" id="reset" style="width: 50px;height: 50px;" onclick="resetTool()" class="img-checkbox"
src="/static/重置.jpg" />
<div class="dropdown"> <div class="dropdown">
<img style="width: 36px;height: 36px;" class="dropbtn" src="/static/布局2x.jpg"/> <img style="width: 36px;height: 36px;" class="dropbtn" src="/static/布局2x.jpg" />
<ul class="dropdown-content"> <ul class="dropdown-content">
<li><a data-value="1x1"><img src="/static/1.1.jpg"/>1x1</a></li> <li><a data-value="1x1"><img src="/static/1.1.jpg" />1x1</a></li>
<li><a data-value="1x2"><img src="/static/1.2.jpg"/>1x2</a></li> <li><a data-value="1x2"><img src="/static/1.2.jpg" />1x2</a></li>
<li><a data-value="2x1"><img src="/static/2.1.jpg"/>2x1</a></li> <li><a data-value="2x1"><img src="/static/2.1.jpg" />2x1</a></li>
<li><a data-value="2x2"><img src="/static/2.2.jpg"/>2x2</a></li> <li><a data-value="2x2"><img src="/static/2.2.jpg" />2x2</a></li>
<li><a data-value="2x3"><img src="/static/2.3.jpg"/>2x3</a></li> <li><a data-value="2x3"><img src="/static/2.3.jpg" />2x3</a></li>
<li><a data-value="3x2"><img src="/static/3.2.jpg"/>3x2</a></li> <li><a data-value="3x2"><img src="/static/3.2.jpg" />3x2</a></li>
<li><a data-value="3x3"><img src="/static/3.3.jpg"/>3x3</a></li> <li><a data-value="3x3"><img src="/static/3.3.jpg" />3x3</a></li>
</ul> </ul>
</div> </div>
<input style="display: none;" type="text" id='row-count' placeholder="行数" value='1' /> x <input style="display: none;" type="text" id='column-count' placeholder="列数" value='1' /> <input style="display: none;" type='button' onclick="doCreate()" value="生成" /> <input style="display: none;" type="text" id='row-count' placeholder="行数" value='1' /> x <input
style="display: none;" type="text" id='column-count' placeholder="列数" value='1' /> <input
style="display: none;" type='button' onclick="doCreate()" value="生成" />
</div> </div>
@ -433,56 +491,64 @@
</div> </div>
</div> </div>
<script> <script>
//url参数与请求
// 获取下拉菜单的父元素 var methodStr = GetQueryString("method");
var dropdownMenu = document.querySelector('.dropdown-content'); document.getElementById("screenshot").style.display = "none";
dropdownMenu.addEventListener('click', function(event) { if (methodStr && methodStr == "PathologyView") {
var target = event.target; document.getElementById("screenshot").style.display = "";
while (target != dropdownMenu) {
if (target.tagName === 'A') {
var value = target.getAttribute('data-value');
var parts = value.split('x');
// 更新输入框的值
document.getElementById('row-count').value = parts[0].trim();
document.getElementById('column-count').value = parts[1].trim();
console.log('Clicked item value:', value);
doCreate();
break;
} }
target = target.parentElement;
}
});
// 获取容器元素 //获取下拉菜单的父元素
var container = document.getElementById('top-menu'); var dropdownMenu = document.querySelector('.dropdown-content');
var activeImg = null; // 存储当前激活的图片元素 dropdownMenu.addEventListener('click', function (event) {
var target = event.target;
while (target != dropdownMenu) {
if (target.tagName === 'A') {
var value = target.getAttribute('data-value');
var parts = value.split('x');
container.addEventListener('click', function(event) { // 更新输入框的值
var target = event.target; document.getElementById('row-count').value = parts[0].trim();
var excludeId = 'reset'; // 要排除的图片元素的id document.getElementById('column-count').value = parts[1].trim();
if (target.id === excludeId) { console.log('Clicked item value:', value);
// 如果点击的是排除的图片,直接返回不执行任何操作 doCreate();
return; break;
} }
// 检查点击的是否是图片元素 target = target.parentElement;
if (target.classList.contains('img-checkbox')) { }
if (activeImg === target) { });
// 如果当前点击的图片已经是激活状态,则移除边框
target.classList.remove('active'); // 获取容器元素
activeImg = null; // 重置当前激活的图片引用 var container = document.getElementById('top-menu');
} else { var activeImg = null; // 存储当前激活的图片元素
// 如果当前点击的图片不是激活状态
if (activeImg) { container.addEventListener('click', function (event) {
// 移除之前激活的图片的边框 var target = event.target;
activeImg.classList.remove('active'); //要排除的图片元素的id
} var excludeIds = ['reset', 'screenshot'];
// 给当前点击的图片添加边框,并更新激活图片的引用 if (target.id && excludeIds.includes(target.id)) {
target.classList.add('active'); // 如果点击的是排除的图片,直接返回不执行任何操作
activeImg = target; return;
} }
} // 检查点击的是否是图片元素
}); if (target.classList.contains('img-checkbox')) {
</script> if (activeImg === target) {
// 如果当前点击的图片已经是激活状态,则移除边框
target.classList.remove('active');
activeImg = null; // 重置当前激活的图片引用
} else {
// 如果当前点击的图片不是激活状态
if (activeImg) {
// 移除之前激活的图片的边框
activeImg.classList.remove('active');
}
// 给当前点击的图片添加边框,并更新激活图片的引用
target.classList.add('active');
activeImg = target;
}
}
});
</script>
</body> </body>
</html> </html>

View File

@ -216,6 +216,55 @@ function disableFunctions(currentFun) {
const toolFunction = ["ScaleOverlay", "OrientationMarkers"] const toolFunction = ["ScaleOverlay", "OrientationMarkers"]
const wheelFunction = ["ZoomMouseWheel"] const wheelFunction = ["ZoomMouseWheel"]
//截图按钮
function screenshotTool() {
let dicomCenter = document.getElementById('dicom-img-box_0_0');
if (dicomCenter) {
let canvasCenter = document.querySelector("#dicomImage_0_0 canvas");
let sliderCenter = document.querySelector("#dicom-img-box_0_0 .slider-container");
try {
dicomCenter.style.borderWidth = "0px";
if (canvasCenter)
canvasCenter.crossorign = "anonymous";
if (sliderCenter)
sliderCenter.style.display = "none";
let targetWidth = dicomCenter.offsetWidth + 6;
let targetHeight = dicomCenter.offsetHeight + 4;
html2canvas(
dicomCenter,
{
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
width: targetWidth,
height: targetHeight,
dpi: window.devicePixelRatio * 12, //将分辨率提高到特定的DPI 提高四倍
scale: 12, //按比例增加分辨率
}
).then((canvas) => {
canvas.crossorign = "anonymous";
let imageDataUrl = canvas.toDataURL('image/jpeg', 1);
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'http://127.0.0.1:48080/admin-api/ultrasoniccom/ultrasonic/ftpimage',
data: JSON.stringify({ id: window.localStorage.regid_pathology, imagebase: imageDataUrl, imgType: '3' }),
success: function (data, textStatus, jqXHR) {
alert('添加成功,请刷新报告单中的图片');
}
});
});
} finally {
dicomCenter.style.borderWidth = "";
if (canvasCenter)
canvasCenter.crossorign = "";
if (sliderCenter)
sliderCenter.style.display = "";
}
}
}
//撤销所有改动 //撤销所有改动
function resetTool() { function resetTool() {
//反转色 //反转色
@ -399,7 +448,7 @@ function initConerstoneAndData() {
// load images and set the stack // load images and set the stack
cornerstone.loadImage(imageIds[0]).then((image) => { cornerstone.loadImage(imageIds[0]).then((image) => {
updateProcess(stateData.imgIndex,"initConerstoneAndData") updateProcess(stateData.imgIndex, "initConerstoneAndData")
initSlider(stateData.element); initSlider(stateData.element);
cornerstone.displayImage(stateData.element, image) cornerstone.displayImage(stateData.element, image)
cornerstoneTools.addStackStateManager(stateData.element, ['stack']) cornerstoneTools.addStackStateManager(stateData.element, ['stack'])
@ -444,7 +493,7 @@ function initImgList(data) {
//$("#dicom-list").append('<img id="img_' + i + '" onclick="changeIndex(' + i + ')" class="' + className + '" src="' + data.seriesList[i].thumbUrl + '"/>'); //$("#dicom-list").append('<img id="img_' + i + '" onclick="changeIndex(' + i + ')" class="' + className + '" src="' + data.seriesList[i].thumbUrl + '"/>');
//$("#dicom-list").append('<div class="icon-img-box" onclick="changeIndex(' + i + ')"><img id="img_' + i + '" class="' + className + '" src="' + data.seriesList[i].thumbUrl + '"/><div class="process-div" id="process-' + i + '"></div></div>'); //$("#dicom-list").append('<div class="icon-img-box" onclick="changeIndex(' + i + ')"><img id="img_' + i + '" class="' + className + '" src="' + data.seriesList[i].thumbUrl + '"/><div class="process-div" id="process-' + i + '"></div></div>');
//$("#dicom-list").append('<div class="icon-img-box" id="icon-img-box-'+i+'" onclick="changeIndex(' + i + ')"><img id="img_' + i + '" class="' + className + '"/><div class="process-div" id="process-' + i + '"></div></div>'); //$("#dicom-list").append('<div class="icon-img-box" id="icon-img-box-'+i+'" onclick="changeIndex(' + i + ')"><img id="img_' + i + '" class="' + className + '"/><div class="process-div" id="process-' + i + '"></div></div>');
$("#dicom-list").append('<div style="height: 220px;" class="icon-img-box ' + className + '" id="icon-img-box-' + i + '" onclick="changeIndex(' + i + ')"><div class="process-div" id="process-' + i + '"></div><span style="color: white;word-wrap: break-word;font-size: 16px; id="h_' + i + '" >' + data.seriesList[i].SeriesDesc +'</span></div>'); $("#dicom-list").append('<div style="height: 220px;" class="icon-img-box ' + className + '" id="icon-img-box-' + i + '" onclick="changeIndex(' + i + ')"><div class="process-div" id="process-' + i + '"></div><span style="color: white;word-wrap: break-word;font-size: 16px; id="h_' + i + '" >' + data.seriesList[i].SeriesDesc + '</span></div>');
} }
} }
@ -471,13 +520,13 @@ function changeIndex(i) {
//获取数据 //获取数据
function initData() { function initData() {
// var idx = GetQueryString("idx"); // var idx = GetQueryString("idx");
// var maxSize = GetQueryString("maxSize"); // var maxSize = GetQueryString("maxSize");
var localStorage = window.localStorage; var localStorage = window.localStorage;
var localData = JSON.parse(localStorage.data); var localData = JSON.parse(localStorage.data);
var maxSize = localData.maxSize var maxSize = localData.maxSize
console.log("网页接受到数据maxSize" + maxSize) console.log("网页接受到数据maxSize" + maxSize)
if (maxSize) { if (maxSize) {
cacheProcess.maxSize = maxSize; cacheProcess.maxSize = maxSize;
} }
@ -669,8 +718,8 @@ function cacheImages() {
} }
var cacheProcess = { var cacheProcess = {
taskSize:0,//当前正在进行的任务数量 taskSize: 0,//当前正在进行的任务数量
maxSize:10 //同时最大缓存个数 maxSize: 10 //同时最大缓存个数
} }
var queue = []; var queue = [];
@ -692,7 +741,7 @@ function initQueue() {
console.log("队列push消息", message); console.log("队列push消息", message);
} }
} }
console.log("初始化队列完成",queue); console.log("初始化队列完成", queue);
} }
var cacheInterval = null; var cacheInterval = null;
@ -799,7 +848,7 @@ function setImgListParentHeight() {
const height = $(window).height() - $("#top-menu").height() const height = $(window).height() - $("#top-menu").height()
$("#dicom-list").css("max-height", height + "px") $("#dicom-list").css("max-height", height + "px")
console.log("window的高度",$(window).height()); console.log("window的高度", $(window).height());
console.log("topMenu的高度", $("#top-menu").height()); console.log("topMenu的高度", $("#top-menu").height());
console.log("dicom-list高度", $("#dicom-list").height()); console.log("dicom-list高度", $("#dicom-list").height());
} }

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
public/static/相机.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -6,8 +6,8 @@ export interface updateexamineimageVO {
id: string // 主键 id: string // 主键
isDelete: string // 删除标记 isDelete: string // 删除标记
deletePerson:string//删除人 deletePerson: string//删除人
selected:string//是否选中 selected: string//是否选中
} }
export interface insimagescreenshotVO { export interface insimagescreenshotVO {
@ -19,37 +19,41 @@ export interface insimagescreenshotVO {
// 超声组件 API // 超声组件 API
export const ultrasoniccomApi = { export const ultrasoniccomApi = {
// 查询模版表数据 // 查询模版表数据
getreporttemplatelist: async (orgID: string,type:string,isprivate:string) => { getreporttemplatelist: async (orgID: string, type: string, isprivate: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/reporttemplatetlist?orgID=${orgID}&&type=${type}&&isprivate=${isprivate}` }) return await request.get({ url: `/ultrasoniccom/ultrasonic/reporttemplatetlist?orgID=${orgID}&&type=${type}&&isprivate=${isprivate}` })
}, },
// 查询病理图片表数据
getpathologyimglist: async (orgID: string, regID: string, select: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/getpathologyimglist?orgID=${orgID}&&regID=${regID}&&select=${select}` })
},
// 查询图片表数据 // 查询图片表数据
getimageslist: async (orgID: string,regID:string,select:string) => { getimageslist: async (orgID: string, regID: string, select: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/getimageslist?orgID=${orgID}&&regID=${regID}&&select=${select}` }) return await request.get({ url: `/ultrasoniccom/ultrasonic/getimageslist?orgID=${orgID}&&regID=${regID}&&select=${select}` })
}, },
// 查询图片表数据 // 查询图片表数据
updateexamineimagelist: async (data:updateexamineimageVO[]) => { updateexamineimagelist: async (data: updateexamineimageVO[]) => {
return await request.put({ url: `/ultrasoniccom/ultrasonic/examineimageupdate`, data}) return await request.put({ url: `/ultrasoniccom/ultrasonic/examineimageupdate`, data })
}, },
//更新模版使用时间 //更新模版使用时间
upreporttemplatetime: async (pid:string) => { upreporttemplatetime: async (pid: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/upreporttemplatetime?pid=${pid}`}) return await request.get({ url: `/ultrasoniccom/ultrasonic/upreporttemplatetime?pid=${pid}` })
}, },
//获取dicom数据 //获取dicom数据
getdcmlist: async (studyInsta:string,orgid:string,regId:string) => { getdcmlist: async (studyInsta: string, orgid: string, regId: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/getdcm?orgID=${orgid}&&studyInsta=${studyInsta}&&regId=${regId}`}) return await request.get({ url: `/ultrasoniccom/ultrasonic/getdcm?orgID=${orgid}&&studyInsta=${studyInsta}&&regId=${regId}` })
}, },
//插入截屏图片 //插入截屏图片
insimagescreenshot: async (data:insimagescreenshotVO) => { insimagescreenshot: async (data: insimagescreenshotVO) => {
return await request.post({ url: `/ultrasoniccom/ultrasonic/insimagescreenshot`,data}) return await request.post({ url: `/ultrasoniccom/ultrasonic/insimagescreenshot`, data })
} , },
ftpimage: async (data:insimagescreenshotVO) => { ftpimage: async (data: insimagescreenshotVO) => {
return await request.post({ url: `/ultrasoniccom/ultrasonic/ftpimage`,data}) return await request.post({ url: `/ultrasoniccom/ultrasonic/ftpimage`, data })
} , },
// 查询图片表视频数据 // 查询图片表视频数据
getImageVideo: async (regID:string) => { getImageVideo: async (regID: string) => {
return await request.get({ url: `/ultrasoniccom/ultrasonic/GetImageVideo?regID=${regID}` }) return await request.get({ url: `/ultrasoniccom/ultrasonic/GetImageVideo?regID=${regID}` })
}, },
} }

View File

@ -2,7 +2,22 @@
<div class="ultrasound-report"> <div class="ultrasound-report">
<h2>超声检查报告单</h2> <h2>超声检查报告单</h2>
<hr /> <hr />
<div class="patient-info"> <div style="margin: 4px 6px">
<el-row>
<el-col :span="7">门诊号{{ infoParams.regId }}</el-col>
<el-col :span="7">姓名{{ infoParams.pname }}</el-col>
<el-col :span="5">性别{{ infoParams.gender }}</el-col>
<el-col :span="5">年龄{{ age }}</el-col>
</el-row>
<el-row>
<el-col :span="7">检查号{{ infoParams.examId }}</el-col>
<el-col :span="7">检查项目{{ infoParams.examItemName }}</el-col>
<el-col :span="5">设备{{ infoParams.deviceName }}</el-col>
<el-col :span="5">送检科室{{ infoParams.billDoctorDepartment }}</el-col>
</el-row>
</div>
<div class="patient-info" v-if="false">
<p class="info-item">门诊号{{ infoParams.regId }}</p> <p class="info-item">门诊号{{ infoParams.regId }}</p>
<p class="info-item">姓名{{ infoParams.pname }}</p> <p class="info-item">姓名{{ infoParams.pname }}</p>
<p class="info-item">性别{{ infoParams.gender }}</p> <p class="info-item">性别{{ infoParams.gender }}</p>
@ -17,15 +32,17 @@
<div class="image-gallery"> <div class="image-gallery">
<div v-for="image in reportimages" :key="image.id"> <div v-for="image in reportimages" :key="image.id">
<img alt="" style="width: 140px; height: 140px" :src="image.imgUrl" v-if="false" /> <img alt="" style="width: 140px; height: 140px" :src="image.imgUrl" v-if="false" />
<el-image <div style="flex: 1; height: 100%; margin-left: 6px; margin-right: 6px">
alt="" <el-image
fit="fill" alt=""
loading="eager" fit="fill"
style="width: 99%; height: 99%" loading="eager"
:src="image.imgUrl" style="width: 99%; height: 99%"
:preview-src-list="[image.imgUrl]" :src="image.imgUrl"
v-if="true" :preview-src-list="[image.imgUrl]"
/> v-if="true"
/>
</div>
</div> </div>
</div> </div>
<div class="ultrasound-findings"> <div class="ultrasound-findings">

File diff suppressed because it is too large Load Diff

View File

@ -1,54 +1,54 @@
<template> <template>
<ContentWrap style="height: 145px"> <ContentWrap style="height: 145px">
<!-- 搜索工作栏 影像工作站--> <!-- 搜索工作栏 病理工作站-->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="100px" label-width="70px"
> >
<el-row :gutter="8"> <el-row>
<el-col :span="4"> <el-col :span="6">
<el-form-item label="检查单号" prop="examId"> <el-form-item label="检查单号" prop="examId">
<el-input <el-input
v-model="queryParams.examId" v-model="queryParams.examId"
placeholder="检查单号" placeholder="检查单号"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-160px" class="item-width"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="6">
<el-form-item label="患者姓名" prop="pName"> <el-form-item label="患者姓名" prop="pName">
<el-input <el-input
v-model="queryParams.pname" v-model="queryParams.pname"
placeholder="请输入患者姓名" placeholder="请输入患者姓名"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-160px" class="item-width"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="6">
<el-form-item label="检查项目" prop="examItemName"> <el-form-item label="检查项目" prop="examItemName">
<el-input <el-input
v-model="queryParams.examItemName" v-model="queryParams.examItemName"
placeholder="请输入检查项" placeholder="请输入检查项"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-160px" class="item-width"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="6">
<el-form-item label="报告状态" prop="reportstatus"> <el-form-item label="报告状态" prop="reportstatus">
<el-select <el-select
v-model="queryParams.reportstatus" v-model="queryParams.reportstatus"
placeholder="请选择报告状态" placeholder="请选择报告状态"
clearable clearable
class="!w-160px" class="!w-170px"
> >
<el-option label="已分检" value="已分检" /> <el-option label="已分检" value="已分检" />
<el-option label="已分析" value="已分析" /> <el-option label="已分析" value="已分析" />
@ -59,8 +59,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="检查日期" prop="examDate" size="mini"> <el-form-item label="检查日期" prop="examDate">
<!-- aaaaa -->
<el-radio-group <el-radio-group
ref="examDate_radio" ref="examDate_radio"
v-model="examDate_radio_value" v-model="examDate_radio_value"
@ -71,7 +70,7 @@
<el-radio style="margin-right: 15px" :value="2">昨天</el-radio> <el-radio style="margin-right: 15px" :value="2">昨天</el-radio>
<el-radio style="margin-right: 15px" :value="3">三天内</el-radio> <el-radio style="margin-right: 15px" :value="3">三天内</el-radio>
<el-radio style="margin-right: 15px" :value="4">一周</el-radio> <el-radio style="margin-right: 15px" :value="4">一周</el-radio>
<el-radio style="margin-right: 25px" :value="5"> <el-radio style="margin-right: 15px" :value="5">
<el-date-picker <el-date-picker
ref="examDate_picker" ref="examDate_picker"
:disabled="examDate_radio_value === 5 ? false : true" :disabled="examDate_radio_value === 5 ? false : true"
@ -81,7 +80,8 @@
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px" style="margin-left: 4px"
class="!w-250px"
/> />
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
@ -129,23 +129,23 @@
:loading="exportLoading" :loading="exportLoading"
v-hasPermi="['tblist:patientexamlist:export']" v-hasPermi="['tblist:patientexamlist:export']"
> >
<Icon icon="ep:download" class="mr-5px" /> 导出 <Icon icon="ep:download" class="mr-5px" />
导出
</el-button> </el-button>
<el-button
@click="dicomDataSync"
style="background-color: rgb(28, 176, 117); font-size: 14; color: rgb(255, 255, 255)"
><Icon icon="ep:refresh" class="mr-5px" /> 同步</el-button
>
<el-button <el-button
@click="dicomDataRefresh" @click="dicomDataRefresh"
style="background-color: rgb(28, 176, 117); font-size: 14; color: rgb(255, 255, 255)" style="background-color: rgb(28, 176, 117); font-size: 14; color: rgb(255, 255, 255)"
><Icon icon="ep:refresh" class="mr-5px" /> 刷新</el-button
> >
<Icon icon="ep:refresh" class="mr-5px" />
刷新
</el-button>
<el-button <el-button
@click="selectcollect" @click="selectcollect"
style="background-color: rgb(28, 176, 117); font-size: 14; color: rgb(255, 255, 255)" style="background-color: rgb(28, 176, 117); font-size: 14; color: rgb(255, 255, 255)"
><Icon icon="ep:search" class="mr-5px" /> 查询收藏</el-button
> >
<Icon icon="ep:search" class="mr-5px" />
查询收藏
</el-button>
</el-form-item> </el-form-item>
</ContentWrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
@ -271,17 +271,17 @@
申请 申请
</el-button> </el-button>
<el-button link type="danger" @click.stop="collect(scope.row.id, scope.row.isFavourite)"> <el-button link type="danger" @click.stop="collect(scope.row.id, scope.row.isFavourite)">
<el-icon v-if="scope.row.isFavourite==='1'"><StarFilled /></el-icon> <el-icon v-if="scope.row.isFavourite === '1'"><StarFilled /></el-icon>
<el-icon v-else><Star /></el-icon> <el-icon v-else><Star /></el-icon>
</el-button> </el-button>
<el-button <el-button
link link
@dblclick.stop @dblclick.stop
style="color: rgb(56, 119, 246)" style="color: rgb(56, 119, 246)"
size="small" size="small"
type="primary" type="primary"
@click.stop="openexe(scope.row.id,scope.row.orgId,scope.row.regId,scope.row.examId)" @click.stop="openexe(scope.row.id, scope.row.orgId, scope.row.regId, scope.row.examId)"
> >
调图 调图
</el-button> </el-button>
@ -291,11 +291,10 @@
style="color: rgb(56, 119, 246)" style="color: rgb(56, 119, 246)"
size="small" size="small"
type="primary" type="primary"
@click.stop=" handleEdit(scope.row,'1')" @click.stop="handleEdit(scope.row, '1')"
> >
报告 报告
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -315,20 +314,23 @@
<script setup lang="ts"> <script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist' import { PatientexamlistApi } from '@/api/tblist/patientexamlist'
import PatientexamlistForm from './PatientexamlistForm.vue'
import DicomViewForm from '/src/views/dicomPathologyForm/dicomPathologyViewForm.vue' import DicomViewForm from '/src/views/dicomPathologyForm/dicomPathologyViewForm.vue'
import { ultrasoniccomApi } from '@/api/ultrasoniccom'
/** PACS检查列表 列表 */ /** 病理工作台 **/
defineOptions({ name: 'PatientexamPathology' }) defineOptions({ name: 'PatientexamPathology' })
const message = useMessage() // /** 组件引用 **/
const { t } = useI18n() // const dicomViewRef = ref()
const queryFormRef = ref()
const examDate_picker = ref()
const examDate_radio = ref()
const loading = ref(true) // /** 数据结构 **/
const list = ref<PatientexamlistVO[]>([]) // const message = useMessage()
const total = ref(0) // const { t } = useI18n()
//
const examDate_radio_value = ref(3)
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
@ -336,7 +338,7 @@ const queryParams = reactive({
pname: undefined, pname: undefined,
gender: undefined, gender: undefined,
birthday: undefined, birthday: undefined,
examDate: [], examDate: [] as any[],
deviceType: '', deviceType: '',
seDc: undefined, seDc: undefined,
examItemName: undefined, examItemName: undefined,
@ -357,36 +359,41 @@ const queryParams = reactive({
createTime: [], createTime: [],
isFavourite: '' isFavourite: ''
}) })
const queryFormRef = ref() // //
const exportLoading = ref(false) // const list = ref<any[]>([])
const total = ref(0)
const loading = ref(true)
const exportLoading = ref(false)
/** 影像组件 */ /** 自定义方法 **/
const dicomViewRef = ref() const nowDate = (time) => {
var year = time.getFullYear() //
const opendicomViewFrom = (id: number, orgid: string, regid: string, examId: string,isLoaded:string) => { var month = (time.getMonth() + 1).toString().padStart(2, '0') //
dicomViewRef.value.open(id, orgid, regid, examId,isLoaded) var date = time.getDate().toString().padStart(2, '0') //
var hour = time.getHours().toString().padStart(2, '0') //
var minute = time.getMinutes().toString().padStart(2, '0') //
var second = time.getSeconds().toString().padStart(2, '0') //
return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second
} }
/** 表格行点击 */
const clickNumber = ref(0)
function handleEdit(row,isLoaded:string) {
console.log(111111121212)
if (!row.deviceType.includes('US')) { /** 组件事件 **/
//US const getList = async () => {
opendicomViewFrom(row.id, row.orgId, row.regId, row.examId,isLoaded) loading.value = true
try {
/* clickNumber.value++; queryParams.deviceType = 'CSH1'
if (clickNumber.value == 2) { const data = await PatientexamlistApi.getPatientexamlistPage(queryParams)
list.value = data.list
} total.value = data.total
clickNumber.value = 0; */ } finally {
loading.value = false
} }
} }
/** aaaaa **/ const handleQuery = () => {
const examDate_picker = ref(null) queryParams.pageNo = 1
const examDate_radio = ref(null) queryParams.isFavourite = ''
const examDate_radio_value = ref(3) getList()
}
const examDate_radio_change = () => { const examDate_radio_change = () => {
if ([1, 2, 3, 4].includes(examDate_radio_value.value)) { if ([1, 2, 3, 4].includes(examDate_radio_value.value)) {
@ -405,7 +412,6 @@ const examDate_radio_change = () => {
timesta.setDate(timesta.getDate() - 7) timesta.setDate(timesta.getDate() - 7)
queryParams.examDate = [nowDate(timesta), nowDate(timeend)] queryParams.examDate = [nowDate(timesta), nowDate(timeend)]
} }
handleQuery() handleQuery()
} else if (5 === examDate_radio_value.value) { } else if (5 === examDate_radio_value.value) {
queryParams.examDate = [] queryParams.examDate = []
@ -415,186 +421,130 @@ const examDate_radio_change = () => {
} }
} }
/// const resetQuery = () => {
function nowDate(time) { queryFormRef.value.resetFields()
var year = time.getFullYear() // examDate_radio_value.value = 3
var month = (time.getMonth() + 1).toString().padStart(2, '0') //
var date = time.getDate().toString().padStart(2, '0') //
var hour = time.getHours().toString().padStart(2, '0') //
var minute = time.getMinutes().toString().padStart(2, '0') //
var second = time.getSeconds().toString().padStart(2, '0') //
return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second
}
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
queryParams.deviceType = 'CT'
const data = await PatientexamlistApi.getPatientexamlistPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
//
const collect = async (id: string, isFavourite: string) => {
if (isFavourite == '0') {
await PatientexamlistApi.CollectAndCancellation(id,"1")
message.success('收藏成功')
} else if (isFavourite == '1') {
await PatientexamlistApi.CollectAndCancellation(id,"0")
message.success('取消成功')
}
examDate_radio_change() examDate_radio_change()
if (5 === examDate_radio_value.value) handleQuery()
} }
const dicomDataSync = async () => {
const data = await PatientexamlistApi.dicomDataSync()
if (data.code == 'success') {
if (data.syncItems == '0') {
message.info('暂无可同步数据')
} else {
queryParams.reportstatus = '待分析'
examDate_radio_value.value = 0
examDate_radio_change()
message.success('数据同步成功')
}
} else {
message.error('数据同步失败')
}
}
//
const dicomDataRefresh = async () => { const dicomDataRefresh = async () => {
await PatientexamlistApi.dicomDataRefresh() await PatientexamlistApi.dicomDataRefresh()
examDate_radio_change() examDate_radio_change()
} }
/** 搜索按钮操作 */ const selectcollect = () => {
const handleQuery = () => { queryFormRef.value.resetFields()
queryParams.pageNo = 1 queryParams.pageNo = 1
queryParams.deviceType = 'CT' queryParams.isFavourite = '1'
queryParams.isFavourite=''
getList() getList()
} }
//
const selectcollect=()=>
{
queryFormRef.value.resetFields()
queryParams.pageNo = 1
queryParams.deviceType = 'CT'
queryParams.isFavourite='1'
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
/** aaaaa **/
//
examDate_radio_value.value = 1
examDate_radio_change()
if (5 === examDate_radio_value.value) handleQuery()
//
//handleQuery();
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 申请后更新上级机构字段*/
const getuporghiorgid = async (id: number, orgId: string, reportstatus: string) => {
try {
await message.confirm('是否要进行申请?', '确认提示')
const data = await PatientexamlistApi.getuporghiid(id, orgId)
if (data == '申请成功') {
message.success('申请成功')
//
await getList()
} else {
await message.info(data)
}
} catch {}
}
// exe
const openexe= (id: number, orgid: string, regid: string, examId: string)=>
{
//
try {
const url = `f1://${examId+','+orgid+','+regid}`;
console.log(url)
window.location.href = url
} catch (error) {
console.error('Error fetching data:', error)
}
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await PatientexamlistApi.deletePatientexamlist(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 申请按钮操作 */
const handleSub = async (id: number) => {
try {
//
await message.delConfirm()
//
await PatientexamlistApi.deletePatientexamlist(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => { const handleExport = async () => {
try { try {
//
await message.exportConfirm() await message.exportConfirm()
//
exportLoading.value = true exportLoading.value = true
const data = await PatientexamlistApi.exportPatientexamlist(queryParams) const data = await PatientexamlistApi.exportPatientexamlist(queryParams)
download.excel(data, 'PACS检查列表.xls') download.excel(data, '病理工作台列表.xls')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
} }
} }
/** 初始化 **/ const opendicomViewFrom = (
id: number,
orgid: string,
regid: string,
examId: string,
isLoaded: string
) => {
dicomViewRef.value.open(id, orgid, regid, examId, isLoaded)
}
//const clickNumber = ref(0)
const handleEdit = (row, isLoaded: string) => {
//US
if (!row.deviceType.includes('US')) {
opendicomViewFrom(row.id, row.orgId, row.regId, row.examId, isLoaded)
//clickNumber.value++
//if (clickNumber.value == 2) {
//}
//clickNumber.value = 0
}
}
//
const collect = async (id: string, isFavourite: string) => {
if (isFavourite == '0') {
await PatientexamlistApi.CollectAndCancellation(id, '1')
message.success('收藏成功')
} else if (isFavourite == '1') {
await PatientexamlistApi.CollectAndCancellation(id, '0')
message.success('取消成功')
}
examDate_radio_change()
}
//
const getuporghiorgid = async (id: number, orgId: string, reportstatus: string) => {
try {
await message.confirm('是否要进行申请?', '确认提示')
const data = await PatientexamlistApi.getuporghiid(id, orgId)
if (data == '申请成功') {
message.success('申请成功')
await getList()
} else {
await message.info(data)
}
} catch {}
}
//exe
const openexe = (id: number, orgid: string, regid: string, examId: string) => {
try {
const url = `f1://${examId + ',' + orgid + ',' + regid}`
console.log(url)
window.location.href = url
} catch (error) {
console.error('Error fetching data:', error)
}
}
/** 钩子函数 **/
onMounted(() => { onMounted(() => {
// //
/** aaaaa **/
//
examDate_radio_change() examDate_radio_change()
if (5 === examDate_radio_value.value) handleQuery() if (5 === examDate_radio_value.value) handleQuery()
//
//getList();
}) })
/** 停用方法 **/
//
const handleDelete = async (id: number) => {
try {
await message.delConfirm()
await PatientexamlistApi.deletePatientexamlist(id)
message.success(t('common.delSuccess'))
await getList()
} catch {}
}
//
const handleSub = async (id: number) => {
try {
await message.delConfirm()
await PatientexamlistApi.deletePatientexamlist(id)
message.success(t('common.delSuccess'))
await getList()
} catch {}
}
</script> </script>
<style> <style scoped>
.item-width {
width: 100%;
}
/* 为了防止 el-form-item 的标签文本换行可以添加以下CSS样式 */ /* 为了防止 el-form-item 的标签文本换行可以添加以下CSS样式 */
.el-form-item__label { .el-form-item__label {
white-space: nowrap; white-space: nowrap;