增加影像报告功能
This commit is contained in:
parent
5da0aef036
commit
0b18e1d38a
2018
public/dicom/css/bootstrap-icons.css
vendored
Normal file
2018
public/dicom/css/bootstrap-icons.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
public/dicom/css/bootstrap.min.css
vendored
Normal file
6
public/dicom/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
public/dicom/css/fonts/bootstrap-icons.woff
Normal file
BIN
public/dicom/css/fonts/bootstrap-icons.woff
Normal file
Binary file not shown.
BIN
public/dicom/css/fonts/bootstrap-icons.woff2
Normal file
BIN
public/dicom/css/fonts/bootstrap-icons.woff2
Normal file
Binary file not shown.
539
public/dicom/css/iconfont/demo.css
Normal file
539
public/dicom/css/iconfont/demo.css
Normal file
@ -0,0 +1,539 @@
|
||||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
1453
public/dicom/css/iconfont/demo_index.html
Normal file
1453
public/dicom/css/iconfont/demo_index.html
Normal file
File diff suppressed because it is too large
Load Diff
235
public/dicom/css/iconfont/iconfont.css
Normal file
235
public/dicom/css/iconfont/iconfont.css
Normal file
@ -0,0 +1,235 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2966544 */
|
||||
src: url('iconfont.woff2?t=1722174546445') format('woff2'),
|
||||
url('iconfont.woff?t=1722174546445') format('woff'),
|
||||
url('iconfont.ttf?t=1722174546445') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-fangxiangjiantou-shang:before {
|
||||
content: "\e60d";
|
||||
}
|
||||
|
||||
.icon-fangxiangjiantou-xia:before {
|
||||
content: "\e610";
|
||||
}
|
||||
|
||||
.icon-iconback:before {
|
||||
content: "\e60c";
|
||||
}
|
||||
|
||||
.icon-xiaoliansmiley40:before {
|
||||
content: "\e772";
|
||||
}
|
||||
|
||||
.icon-wujiaoxing_full:before {
|
||||
content: "\e60b";
|
||||
}
|
||||
|
||||
.icon-zhongcao:before {
|
||||
content: "\e64e";
|
||||
}
|
||||
|
||||
.icon-fenxiang2:before {
|
||||
content: "\e625";
|
||||
}
|
||||
|
||||
.icon-sanjiaoxing:before {
|
||||
content: "\e6bd";
|
||||
}
|
||||
|
||||
.icon-weixin:before {
|
||||
content: "\e60a";
|
||||
}
|
||||
|
||||
.icon-xiazai:before {
|
||||
content: "\e63b";
|
||||
}
|
||||
|
||||
.icon-iconset0174:before {
|
||||
content: "\e649";
|
||||
}
|
||||
|
||||
.icon-fenxiang1:before {
|
||||
content: "\e609";
|
||||
}
|
||||
|
||||
.icon-laba:before {
|
||||
content: "\e607";
|
||||
}
|
||||
|
||||
.icon-jingyin:before {
|
||||
content: "\e630";
|
||||
}
|
||||
|
||||
.icon-duihao:before {
|
||||
content: "\eaf1";
|
||||
}
|
||||
|
||||
.icon-yinle:before {
|
||||
content: "\e606";
|
||||
}
|
||||
|
||||
.icon-aixin_shixin:before {
|
||||
content: "\eca2";
|
||||
}
|
||||
|
||||
.icon-naozhong:before {
|
||||
content: "\e890";
|
||||
}
|
||||
|
||||
.icon-shijian_o:before {
|
||||
content: "\ebb1";
|
||||
}
|
||||
|
||||
.icon-shijian:before {
|
||||
content: "\e64d";
|
||||
}
|
||||
|
||||
.icon-bianji:before {
|
||||
content: "\e604";
|
||||
}
|
||||
|
||||
.icon-shanchu:before {
|
||||
content: "\e605";
|
||||
}
|
||||
|
||||
.icon-xiajiantou:before {
|
||||
content: "\e6cc";
|
||||
}
|
||||
|
||||
.icon-zhongbiao:before {
|
||||
content: "\e60e";
|
||||
}
|
||||
|
||||
.icon-bofang:before {
|
||||
content: "\e624";
|
||||
}
|
||||
|
||||
.icon-zanting1:before {
|
||||
content: "\e67a";
|
||||
}
|
||||
|
||||
.icon-xiangshangjiantou:before {
|
||||
content: "\e65d";
|
||||
}
|
||||
|
||||
.icon-tuichu1:before {
|
||||
content: "\e65e";
|
||||
}
|
||||
|
||||
.icon-tuichu:before {
|
||||
content: "\e639";
|
||||
}
|
||||
|
||||
.icon-wj-wjxg:before {
|
||||
content: "\e770";
|
||||
}
|
||||
|
||||
.icon-aixin:before {
|
||||
content: "\eca1";
|
||||
}
|
||||
|
||||
.icon-gouwuchexuanzhong:before {
|
||||
content: "\e603";
|
||||
}
|
||||
|
||||
.icon-iconfontscan:before {
|
||||
content: "\e601";
|
||||
}
|
||||
|
||||
.icon-kaiguan-kai:before {
|
||||
content: "\e608";
|
||||
}
|
||||
|
||||
.icon-kaiguan-guan:before {
|
||||
content: "\e60f";
|
||||
}
|
||||
|
||||
.icon-xiaoyuhao:before {
|
||||
content: "\e628";
|
||||
}
|
||||
|
||||
.icon-gonggaoxiaolaba:before {
|
||||
content: "\e6db";
|
||||
}
|
||||
|
||||
.icon-guanbi:before {
|
||||
content: "\eaf2";
|
||||
}
|
||||
|
||||
.icon-24gf-pause2:before {
|
||||
content: "\ea81";
|
||||
}
|
||||
|
||||
.icon-yunhang:before {
|
||||
content: "\ec61";
|
||||
}
|
||||
|
||||
.icon-zanting:before {
|
||||
content: "\e668";
|
||||
}
|
||||
|
||||
.icon-shangyishou:before {
|
||||
content: "\e63c";
|
||||
}
|
||||
|
||||
.icon-xiayishou:before {
|
||||
content: "\e63e";
|
||||
}
|
||||
|
||||
.icon-31shoucang:before {
|
||||
content: "\e600";
|
||||
}
|
||||
|
||||
.icon-shoucang:before {
|
||||
content: "\e8c2";
|
||||
}
|
||||
|
||||
.icon-shengyin:before {
|
||||
content: "\e62a";
|
||||
}
|
||||
|
||||
.icon-fenxiang:before {
|
||||
content: "\eb24";
|
||||
}
|
||||
|
||||
.icon-shipinbofangshibofang:before {
|
||||
content: "\e62b";
|
||||
}
|
||||
|
||||
.icon-bofangsanjiaoxing:before {
|
||||
content: "\e769";
|
||||
}
|
||||
|
||||
.icon-xiangzuosanjiaoxing:before {
|
||||
content: "\e710";
|
||||
}
|
||||
|
||||
.icon-yousanjiaoxing:before {
|
||||
content: "\e644";
|
||||
}
|
||||
|
||||
.icon-zuosanjiaoxing:before {
|
||||
content: "\e645";
|
||||
}
|
||||
|
||||
.icon-arrow-right:before {
|
||||
content: "\e665";
|
||||
}
|
||||
|
||||
.icon-all:before {
|
||||
content: "\e6ef";
|
||||
}
|
||||
|
||||
.icon-aichegujiabeifen7:before {
|
||||
content: "\e602";
|
||||
}
|
||||
|
1
public/dicom/css/iconfont/iconfont.js
Normal file
1
public/dicom/css/iconfont/iconfont.js
Normal file
File diff suppressed because one or more lines are too long
394
public/dicom/css/iconfont/iconfont.json
Normal file
394
public/dicom/css/iconfont/iconfont.json
Normal file
@ -0,0 +1,394 @@
|
||||
{
|
||||
"id": "2966544",
|
||||
"name": "music",
|
||||
"font_family": "iconfont",
|
||||
"css_prefix_text": "icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "35441702",
|
||||
"name": "方向箭头-上",
|
||||
"font_class": "fangxiangjiantou-shang",
|
||||
"unicode": "e60d",
|
||||
"unicode_decimal": 58893
|
||||
},
|
||||
{
|
||||
"icon_id": "35441706",
|
||||
"name": "方向箭头-下",
|
||||
"font_class": "fangxiangjiantou-xia",
|
||||
"unicode": "e610",
|
||||
"unicode_decimal": 58896
|
||||
},
|
||||
{
|
||||
"icon_id": "521601",
|
||||
"name": "icon_back",
|
||||
"font_class": "iconback",
|
||||
"unicode": "e60c",
|
||||
"unicode_decimal": 58892
|
||||
},
|
||||
{
|
||||
"icon_id": "609892",
|
||||
"name": "笑脸",
|
||||
"font_class": "xiaoliansmiley40",
|
||||
"unicode": "e772",
|
||||
"unicode_decimal": 59250
|
||||
},
|
||||
{
|
||||
"icon_id": "18968961",
|
||||
"name": "五角星_full",
|
||||
"font_class": "wujiaoxing_full",
|
||||
"unicode": "e60b",
|
||||
"unicode_decimal": 58891
|
||||
},
|
||||
{
|
||||
"icon_id": "13547754",
|
||||
"name": "种草",
|
||||
"font_class": "zhongcao",
|
||||
"unicode": "e64e",
|
||||
"unicode_decimal": 58958
|
||||
},
|
||||
{
|
||||
"icon_id": "2674471",
|
||||
"name": "分享",
|
||||
"font_class": "fenxiang2",
|
||||
"unicode": "e625",
|
||||
"unicode_decimal": 58917
|
||||
},
|
||||
{
|
||||
"icon_id": "6270980",
|
||||
"name": "三角形",
|
||||
"font_class": "sanjiaoxing",
|
||||
"unicode": "e6bd",
|
||||
"unicode_decimal": 59069
|
||||
},
|
||||
{
|
||||
"icon_id": "77156",
|
||||
"name": "微信",
|
||||
"font_class": "weixin",
|
||||
"unicode": "e60a",
|
||||
"unicode_decimal": 58890
|
||||
},
|
||||
{
|
||||
"icon_id": "573733",
|
||||
"name": "下载",
|
||||
"font_class": "xiazai",
|
||||
"unicode": "e63b",
|
||||
"unicode_decimal": 58939
|
||||
},
|
||||
{
|
||||
"icon_id": "554132",
|
||||
"name": "调节器",
|
||||
"font_class": "iconset0174",
|
||||
"unicode": "e649",
|
||||
"unicode_decimal": 58953
|
||||
},
|
||||
{
|
||||
"icon_id": "68268",
|
||||
"name": "分享",
|
||||
"font_class": "fenxiang1",
|
||||
"unicode": "e609",
|
||||
"unicode_decimal": 58889
|
||||
},
|
||||
{
|
||||
"icon_id": "201560",
|
||||
"name": "喇叭",
|
||||
"font_class": "laba",
|
||||
"unicode": "e607",
|
||||
"unicode_decimal": 58887
|
||||
},
|
||||
{
|
||||
"icon_id": "6582332",
|
||||
"name": "静音",
|
||||
"font_class": "jingyin",
|
||||
"unicode": "e630",
|
||||
"unicode_decimal": 58928
|
||||
},
|
||||
{
|
||||
"icon_id": "5387519",
|
||||
"name": "对号",
|
||||
"font_class": "duihao",
|
||||
"unicode": "eaf1",
|
||||
"unicode_decimal": 60145
|
||||
},
|
||||
{
|
||||
"icon_id": "7417094",
|
||||
"name": "音乐",
|
||||
"font_class": "yinle",
|
||||
"unicode": "e606",
|
||||
"unicode_decimal": 58886
|
||||
},
|
||||
{
|
||||
"icon_id": "6775641",
|
||||
"name": "爱心 _实心",
|
||||
"font_class": "aixin_shixin",
|
||||
"unicode": "eca2",
|
||||
"unicode_decimal": 60578
|
||||
},
|
||||
{
|
||||
"icon_id": "2076264",
|
||||
"name": "闹钟",
|
||||
"font_class": "naozhong",
|
||||
"unicode": "e890",
|
||||
"unicode_decimal": 59536
|
||||
},
|
||||
{
|
||||
"icon_id": "5388001",
|
||||
"name": "时间_o",
|
||||
"font_class": "shijian_o",
|
||||
"unicode": "ebb1",
|
||||
"unicode_decimal": 60337
|
||||
},
|
||||
{
|
||||
"icon_id": "629339",
|
||||
"name": "时间",
|
||||
"font_class": "shijian",
|
||||
"unicode": "e64d",
|
||||
"unicode_decimal": 58957
|
||||
},
|
||||
{
|
||||
"icon_id": "1264",
|
||||
"name": "编辑",
|
||||
"font_class": "bianji",
|
||||
"unicode": "e604",
|
||||
"unicode_decimal": 58884
|
||||
},
|
||||
{
|
||||
"icon_id": "17830623",
|
||||
"name": "删除",
|
||||
"font_class": "shanchu",
|
||||
"unicode": "e605",
|
||||
"unicode_decimal": 58885
|
||||
},
|
||||
{
|
||||
"icon_id": "278744",
|
||||
"name": "下箭头",
|
||||
"font_class": "xiajiantou",
|
||||
"unicode": "e6cc",
|
||||
"unicode_decimal": 59084
|
||||
},
|
||||
{
|
||||
"icon_id": "15775480",
|
||||
"name": "钟表",
|
||||
"font_class": "zhongbiao",
|
||||
"unicode": "e60e",
|
||||
"unicode_decimal": 58894
|
||||
},
|
||||
{
|
||||
"icon_id": "2674474",
|
||||
"name": "播放",
|
||||
"font_class": "bofang",
|
||||
"unicode": "e624",
|
||||
"unicode_decimal": 58916
|
||||
},
|
||||
{
|
||||
"icon_id": "8236094",
|
||||
"name": "暂停",
|
||||
"font_class": "zanting1",
|
||||
"unicode": "e67a",
|
||||
"unicode_decimal": 59002
|
||||
},
|
||||
{
|
||||
"icon_id": "630085",
|
||||
"name": "向上箭头",
|
||||
"font_class": "xiangshangjiantou",
|
||||
"unicode": "e65d",
|
||||
"unicode_decimal": 58973
|
||||
},
|
||||
{
|
||||
"icon_id": "1346232",
|
||||
"name": "退出",
|
||||
"font_class": "tuichu1",
|
||||
"unicode": "e65e",
|
||||
"unicode_decimal": 58974
|
||||
},
|
||||
{
|
||||
"icon_id": "774409",
|
||||
"name": "退出",
|
||||
"font_class": "tuichu",
|
||||
"unicode": "e639",
|
||||
"unicode_decimal": 58937
|
||||
},
|
||||
{
|
||||
"icon_id": "6834860",
|
||||
"name": "文件-文件修改",
|
||||
"font_class": "wj-wjxg",
|
||||
"unicode": "e770",
|
||||
"unicode_decimal": 59248
|
||||
},
|
||||
{
|
||||
"icon_id": "6775644",
|
||||
"name": "爱心",
|
||||
"font_class": "aixin",
|
||||
"unicode": "eca1",
|
||||
"unicode_decimal": 60577
|
||||
},
|
||||
{
|
||||
"icon_id": "88228",
|
||||
"name": "购物车-选中",
|
||||
"font_class": "gouwuchexuanzhong",
|
||||
"unicode": "e603",
|
||||
"unicode_decimal": 58883
|
||||
},
|
||||
{
|
||||
"icon_id": "162869",
|
||||
"name": "扫码",
|
||||
"font_class": "iconfontscan",
|
||||
"unicode": "e601",
|
||||
"unicode_decimal": 58881
|
||||
},
|
||||
{
|
||||
"icon_id": "4925462",
|
||||
"name": "开关-开",
|
||||
"font_class": "kaiguan-kai",
|
||||
"unicode": "e608",
|
||||
"unicode_decimal": 58888
|
||||
},
|
||||
{
|
||||
"icon_id": "4925963",
|
||||
"name": "开关-关",
|
||||
"font_class": "kaiguan-guan",
|
||||
"unicode": "e60f",
|
||||
"unicode_decimal": 58895
|
||||
},
|
||||
{
|
||||
"icon_id": "4598262",
|
||||
"name": "小于号",
|
||||
"font_class": "xiaoyuhao",
|
||||
"unicode": "e628",
|
||||
"unicode_decimal": 58920
|
||||
},
|
||||
{
|
||||
"icon_id": "140164",
|
||||
"name": "公告小喇叭",
|
||||
"font_class": "gonggaoxiaolaba",
|
||||
"unicode": "e6db",
|
||||
"unicode_decimal": 59099
|
||||
},
|
||||
{
|
||||
"icon_id": "5387522",
|
||||
"name": "关闭",
|
||||
"font_class": "guanbi",
|
||||
"unicode": "eaf2",
|
||||
"unicode_decimal": 60146
|
||||
},
|
||||
{
|
||||
"icon_id": "7594152",
|
||||
"name": "24gf-pause2",
|
||||
"font_class": "24gf-pause2",
|
||||
"unicode": "ea81",
|
||||
"unicode_decimal": 60033
|
||||
},
|
||||
{
|
||||
"icon_id": "5961323",
|
||||
"name": "运行",
|
||||
"font_class": "yunhang",
|
||||
"unicode": "ec61",
|
||||
"unicode_decimal": 60513
|
||||
},
|
||||
{
|
||||
"icon_id": "7450658",
|
||||
"name": "暂停",
|
||||
"font_class": "zanting",
|
||||
"unicode": "e668",
|
||||
"unicode_decimal": 58984
|
||||
},
|
||||
{
|
||||
"icon_id": "8341784",
|
||||
"name": "上一首",
|
||||
"font_class": "shangyishou",
|
||||
"unicode": "e63c",
|
||||
"unicode_decimal": 58940
|
||||
},
|
||||
{
|
||||
"icon_id": "8341786",
|
||||
"name": "下一首",
|
||||
"font_class": "xiayishou",
|
||||
"unicode": "e63e",
|
||||
"unicode_decimal": 58942
|
||||
},
|
||||
{
|
||||
"icon_id": "200845",
|
||||
"name": "3.1收藏",
|
||||
"font_class": "31shoucang",
|
||||
"unicode": "e600",
|
||||
"unicode_decimal": 58880
|
||||
},
|
||||
{
|
||||
"icon_id": "1727441",
|
||||
"name": "213收藏",
|
||||
"font_class": "shoucang",
|
||||
"unicode": "e8c2",
|
||||
"unicode_decimal": 59586
|
||||
},
|
||||
{
|
||||
"icon_id": "14480279",
|
||||
"name": "声音",
|
||||
"font_class": "shengyin",
|
||||
"unicode": "e62a",
|
||||
"unicode_decimal": 58922
|
||||
},
|
||||
{
|
||||
"icon_id": "5387651",
|
||||
"name": "分享",
|
||||
"font_class": "fenxiang",
|
||||
"unicode": "eb24",
|
||||
"unicode_decimal": 60196
|
||||
},
|
||||
{
|
||||
"icon_id": "7060117",
|
||||
"name": "视频播放时播放",
|
||||
"font_class": "shipinbofangshibofang",
|
||||
"unicode": "e62b",
|
||||
"unicode_decimal": 58923
|
||||
},
|
||||
{
|
||||
"icon_id": "688059",
|
||||
"name": "播放 三角形",
|
||||
"font_class": "bofangsanjiaoxing",
|
||||
"unicode": "e769",
|
||||
"unicode_decimal": 59241
|
||||
},
|
||||
{
|
||||
"icon_id": "6874517",
|
||||
"name": "向左三角形",
|
||||
"font_class": "xiangzuosanjiaoxing",
|
||||
"unicode": "e710",
|
||||
"unicode_decimal": 59152
|
||||
},
|
||||
{
|
||||
"icon_id": "15369",
|
||||
"name": "右三角形",
|
||||
"font_class": "yousanjiaoxing",
|
||||
"unicode": "e644",
|
||||
"unicode_decimal": 58948
|
||||
},
|
||||
{
|
||||
"icon_id": "15370",
|
||||
"name": "左三角形",
|
||||
"font_class": "zuosanjiaoxing",
|
||||
"unicode": "e645",
|
||||
"unicode_decimal": 58949
|
||||
},
|
||||
{
|
||||
"icon_id": "15838431",
|
||||
"name": "arrow-right",
|
||||
"font_class": "arrow-right",
|
||||
"unicode": "e665",
|
||||
"unicode_decimal": 58981
|
||||
},
|
||||
{
|
||||
"icon_id": "11474219",
|
||||
"name": "all",
|
||||
"font_class": "all",
|
||||
"unicode": "e6ef",
|
||||
"unicode_decimal": 59119
|
||||
},
|
||||
{
|
||||
"icon_id": "21497123",
|
||||
"name": "全部",
|
||||
"font_class": "aichegujiabeifen7",
|
||||
"unicode": "e602",
|
||||
"unicode_decimal": 58882
|
||||
}
|
||||
]
|
||||
}
|
BIN
public/dicom/css/iconfont/iconfont.ttf
Normal file
BIN
public/dicom/css/iconfont/iconfont.ttf
Normal file
Binary file not shown.
BIN
public/dicom/css/iconfont/iconfont.woff
Normal file
BIN
public/dicom/css/iconfont/iconfont.woff
Normal file
Binary file not shown.
BIN
public/dicom/css/iconfont/iconfont.woff2
Normal file
BIN
public/dicom/css/iconfont/iconfont.woff2
Normal file
Binary file not shown.
315
public/dicom/css/index.css
Normal file
315
public/dicom/css/index.css
Normal file
@ -0,0 +1,315 @@
|
||||
body {
|
||||
background: #e8ebf3;
|
||||
font-family: Helvetica Neue,Tahoma,Arial,PingFangSC-Regular,Hiragino Sans GB,Microsoft Yahei,sans-serif;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.errormsg {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
color: #00998c;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.ic_scan {
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjA2NDU4MDIwMTcyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwNDYgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwODU2IiBkYXRhLXNwbS1hbmNob3ItaWQ9ImEzMTN4Ljc3ODEwNjkuMC5pMyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI2NS4zNzUiIGhlaWdodD0iNjQiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIyLjc1NTU1NiAzODYuODQ0NDQ0Yy0xMS4zNzc3NzggMC4xODIwNDQtMjIuNzU1NTU2LTguNjY5ODY3LTIyLjc1NTU1Ni0xOS4xNjAxNzdWMTIwLjAzNTU1NkMwIDUzLjcwMzExMSA1NC4yMjY0ODkgMCAxMjAuOTkxMjg5IDBIMzU1LjY2OTMzM2MxMC40Njc1NTYgMCAxOS43OTczMzMgMTEuMzc3Nzc4IDE5Ljc5NzMzNCAyMi43NTU1NTZzLTkuMzI5Nzc4IDIyLjc1NTU1Ni0xOS43OTczMzQgMjIuNzU1NTU1SDEyMC45OTEyODlDNzUuMDkzMzMzIDQ1LjUxMTExMSA0NS41MTExMTEgNzQuNzA2NDg5IDQ1LjUxMTExMSAxMjAuMDM1NTU2djI0Ny42NDg3MTFjMCAxMC40Njc1NTYtMTEuMzc3Nzc4IDE4Ljk3ODEzMy0yMi43NTU1NTUgMTkuMTYwMTc3ek0xMDEyLjYyMjIyMiAzODYuODQ0NDQ0YzExLjM3Nzc3OCAwLjE4MjA0NCAyMi43NTU1NTYtOC42Njk4NjcgMjIuNzU1NTU2LTE5LjE2MDE3N1YxMjAuMDM1NTU2QzEwMzUuMzc3Nzc4IDUzLjcwMzExMSA5ODEuMTUxMjg5IDAgOTE0LjM4NjQ4OSAwSDY3OS43MDg0NDRjLTEwLjQ2NzU1NiAwLTE5Ljc5NzMzMyAxMS4zNzc3NzgtMTkuNzk3MzMzIDIyLjc1NTU1NnM5LjMyOTc3OCAyMi43NTU1NTYgMTkuNzk3MzMzIDIyLjc1NTU1NWgyMzQuNjc4MDQ1Qzk2MC4yODQ0NDQgNDUuNTExMTExIDk4OS44NjY2NjcgNzQuNzA2NDg5IDk4OS44NjY2NjcgMTIwLjAzNTU1NnYyNDcuNjQ4NzExYzAgMTAuNDY3NTU2IDExLjM3Nzc3OCAxOC45NzgxMzMgMjIuNzU1NTU1IDE5LjE2MDE3N3pNMTAxMi42MjIyMjIgNjM3LjE1NTU1NmMxMS4zNzc3NzgtMC4xODIwNDQgMjIuNzU1NTU2IDguNjkyNjIyIDIyLjc1NTU1NiAxOS4xNjAxNzd2MjQ3LjY0ODcxMUMxMDM1LjM3Nzc3OCA5NzAuMjk2ODg5IDk4MS4xNTEyODkgMTAyNCA5MTQuMzg2NDg5IDEwMjRINjc5LjcwODQ0NGMtMTAuNDY3NTU2IDAtMTkuNzk3MzMzLTExLjM3Nzc3OC0xOS43OTczMzMtMjIuNzU1NTU2czkuMzI5Nzc4LTIyLjc1NTU1NiAxOS43OTczMzMtMjIuNzU1NTU1aDIzNC42NzgwNDVjNDUuODk3OTU2IDAgNzUuNDgwMTc4LTI5LjE5NTM3OCA3NS40ODAxNzgtNzQuNTI0NDQ1VjY1Ni4zMTU3MzNjMC0xMC40Njc1NTYgMTEuMzc3Nzc4LTE4Ljk3ODEzMyAyMi43NTU1NTUtMTkuMTYwMTc3ek0yMi43NTU1NTYgNjM3LjE1NTU1NmMtMTEuMzc3Nzc4LTAuMTgyMDQ0LTIyLjc1NTU1NiA4LjY5MjYyMi0yMi43NTU1NTYgMTkuMTYwMTc3djI0Ny42NDg3MTFDMCA5NzAuMjk2ODg5IDU0LjIyNjQ4OSAxMDI0IDEyMC45OTEyODkgMTAyNEgzNTUuNjY5MzMzYzEwLjQ2NzU1NiAwIDE5Ljc5NzMzMy0xMS4zNzc3NzggMTkuNzk3MzM0LTIyLjc1NTU1NnMtOS4zMjk3NzgtMjIuNzU1NTU2LTE5Ljc5NzMzNC0yMi43NTU1NTVIMTIwLjk5MTI4OUM3NS4wOTMzMzMgOTc4LjQ4ODg4OSA0NS41MTExMTEgOTQ5LjI5MzUxMSA0NS41MTExMTEgOTAzLjk2NDQ0NFY2NTYuMzE1NzMzYzAtMTAuNDY3NTU2LTExLjM3Nzc3OC0xOC45NzgxMzMtMjIuNzU1NTU1LTE5LjE2MDE3N3oiIGZpbGw9IiMwMDk5OGMiIHAtaWQ9IjEwODU3Ij48L3BhdGg+PHBhdGggZD0iTTQ2Ny4xNzE1NTYgMTgyLjA0NDQ0NGMxNS43Njk2IDAgMjguNTM1NDY3IDEyLjc2NTg2NyAyOC41MzU0NjYgMjguNTEyNzEydjI1Ni42MzcxNTVjMCAxNS43NDY4NDQtMTIuNzY1ODY3IDI4LjUxMjcxMS0yOC41MTI3MTEgMjguNTEyNzExSDIxMC41NTcxNTZBMjguNTEyNzExIDI4LjUxMjcxMSAwIDAgMSAxODIuMDQ0NDQ0IDQ2Ny4xNzE1NTZWMjEwLjU1NzE1NkMxODIuMDQ0NDQ0IDE5NC44MTAzMTEgMTk0LjgxMDMxMSAxODIuMDQ0NDQ0IDIxMC41NTcxNTYgMTgyLjA0NDQ0NGgyNTYuNjM3MTU1eiBtMC42NTk5MTEgMjg1Ljc4NzAyM1YyMDkuOTJIMjA5LjkyVjQ2Ny44NTQyMjJINDY3Ljg1NDIyMnpNNDY3LjE3MTU1NiA1NTEuMDQ4NTMzYzE1Ljc2OTYgMCAyOC41MzU0NjcgMTIuNzY1ODY3IDI4LjUzNTQ2NiAyOC41MTI3MTF2MjU2LjYzNzE1NmMwIDE1Ljc0Njg0NC0xMi43NjU4NjcgMjguNTEyNzExLTI4LjUxMjcxMSAyOC41MTI3MTFIMjEwLjU1NzE1NkEyOC41MTI3MTEgMjguNTEyNzExIDAgMCAxIDE4Mi4wNDQ0NDQgODM2LjE5ODRWNTc5LjU2MTI0NGMwLTE1Ljc0Njg0NCAxMi43NjU4NjctMjguNTEyNzExIDI4LjUxMjcxMi0yOC41MTI3MTFoMjU2LjYzNzE1NXogbTAuNjU5OTExIDI4NS43ODcwMjNWNTc4LjkwMTMzM0gyMDkuOTJ2MjU3LjkxMTQ2N0g0NjcuODU0MjIyek04MzYuMTk4NCAxODIuMDQ0NDQ0Qzg1MS45NDUyNDQgMTgyLjA0NDQ0NCA4NjQuNzExMTExIDE5NC44MTAzMTEgODY0LjcxMTExMSAyMTAuNTU3MTU2djI1Ni42MzcxNTVjMCAxNS43NDY4NDQtMTIuNzY1ODY3IDI4LjUxMjcxMS0yOC41MTI3MTEgMjguNTEyNzExSDU3OS41NjEyNDRhMjguNTEyNzExIDI4LjUxMjcxMSAwIDAgMS0yOC41MTI3MTEtMjguNTEyNzExVjIxMC41NTcxNTZjMC0xNS43NDY4NDQgMTIuNzY1ODY3LTI4LjUxMjcxMSAyOC41MTI3MTEtMjguNTEyNzEyaDI1Ni42MzcxNTZ6IG0wLjYzNzE1NiAyODUuNzg3MDIzVjIwOS45Mkg1NzguOTAxMzMzVjQ2Ny44NTQyMjJoMjU3LjkxMTQ2N3oiIGZpbGw9IiMwMDk5OGMiIHAtaWQ9IjEwODU4Ij48L3BhdGg+PHBhdGggZD0iTTI5Mi43NTAyMjIgMjkyLjc1MDIyMmg5Mi4yNTEwMjJ2OTIuMjUxMDIyaC05Mi4yNTEwMjJ6TTI5Mi43NTAyMjIgNjYxLjc1NDMxMWg5Mi4yNTEwMjJ2OTIuMjUxMDIyaC05Mi4yNTEwMjJ6TTY2MS43NTQzMTEgMjkyLjc1MDIyMmg5Mi4yNTEwMjJ2OTIuMjUxMDIyaC05Mi4yNTEwMjJ6TTc3Mi40NjAwODkgNTUxLjA0ODUzM2g3My43OTYyNjd2NzMuNzk2MjY3aC03My43OTYyNjd6TTc2OC43NzM2ODkgNzY4Ljc3MzY4OWgtNTEuNjU1MTExdjc3LjQ4MjY2N2gxMjkuMTM3Nzc4di0xMjkuMTM3Nzc4aC03Ny40ODI2Njd6TTU1MS4wNDg1MzMgNzcyLjQ2MDA4OWg3My43OTYyNjd2NzMuNzk2MjY3aC03My43OTYyNjd6TTU1MS4wNDg1MzMgNTUxLjA0ODUzM2g3My43OTYyNjd2NzMuNzk2MjY3aC03My43OTYyNjd6IiBmaWxsPSIjMDA5OThjIiBwLWlkPSIxMDg1OSI+PC9wYXRoPjxwYXRoIGQ9Ik02MjQuODY3NTU2IDYyNC44Njc1NTZoOTIuMjUxMDIydjE0Ny41OTI1MzNoLTkyLjI3Mzc3OHoiIGZpbGw9IiMwMDk5OGMiIHAtaWQ9IjEwODYwIj48L3BhdGg+PC9zdmc+') no-repeat center center;
|
||||
background-size: 96px;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.top {
|
||||
padding-top: 1.5em;
|
||||
padding-bottom: 2.5em;
|
||||
background: #ea7e1d;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 1.3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.hospital_name, .copyright {
|
||||
white-space: nowrap;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
width: 85%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.title1 {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
.main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
background: #e8ebf3;
|
||||
border-top-left-radius: 1.2em;
|
||||
border-top-right-radius: 1.2em;
|
||||
position: relative;
|
||||
top: -1em;
|
||||
}
|
||||
|
||||
.top_description {
|
||||
position: absolute;
|
||||
top: 2em;
|
||||
font-size: 0.8em;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
color: #d15f27;
|
||||
}
|
||||
|
||||
.top_description .row {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
.ic_alert {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjA1NTk3NzYyMjQzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI4NDUiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTk2MS4wMDg2NCA3MTIuNDI3NTJhNTMzNzguOTM4ODggNTMzNzguOTM4ODggMCAwIDEtMzAwLjMzOTItNTMwLjM1MDA4QzU2MS41NzE4NCA0LjcxNTUyIDQ2Mi40NDg2NCA0LjcxNTUyIDM2My4zNDU5MiAxODIuMDc3NDRhNTQyNDUuMDI3ODQgNTQyNDUuMDI3ODQgMCAwIDEtMzAwLjM1NDU2IDUzMC4zNTAwOGMtMTAxLjEyIDE3Ni4xOTQ1Ni01MS41ODQgMjYzLjY2NDY0IDE0OC42NzQ1NiAyNjIuNDgxOTIgMjAwLjIyMjcyLTEuMTY3MzYgNDAwLjQ2NTkyLTEuMTY3MzYgNjAwLjY2ODE2IDAgMjAwLjIyNzg0IDEuMTk4MDggMjQ5LjgwOTkyLTg2LjI4MjI0IDE0OC42NzQ1Ni0yNjIuNDgxOTJ6IG0tNDAyLjcxODcyLTM5MC41MjI4OGwtMTMuNzAxMTIgMzY1LjMyNzM2SDQ4MS41MDUyOGwtMTMuNzQ3Mi0zNjUuMzI3MzZoOTAuNTMxODR6IG0tNDYuNjQzMiA1MzUuMjQ0OGMtMzEuNTM0MDggMC01NC4xOTAwOC0yNi4xMjczNi01NC4xOTAwOC01Ni40MDE5MiAwLTMwLjk3NiAyNC4wMzMyOC01NS43MTA3MiA1NC4xOTAwOC01NS43MTA3MiAzMC4xNzcyOCAwIDU0Ljg2MDggMjQuNzUwMDggNTQuODYwOCA1NS43MTA3MiAwIDMxLjY1MTg0LTI0LjY4MzUyIDU2LjQwMTkyLTU0Ljg2MDggNTYuNDAxOTJ6IiBmaWxsPSIjZTA1NzA0IiBwLWlkPSIyODQ2Ij48L3BhdGg+PC9zdmc+') no-repeat center center;
|
||||
background-size: 24px;
|
||||
}
|
||||
|
||||
.ic_ok {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjA2ODg4NTQ4NjU5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjMxNjAiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUxMiA1MTJtLTQ0OCAwYTQ0OCA0NDggMCAxIDAgODk2IDAgNDQ4IDQ0OCAwIDEgMC04OTYgMFoiIGZpbGw9IiM0Q0FGNTAiIHAtaWQ9IjMxNjEiPjwvcGF0aD48cGF0aCBkPSJNNzM4LjEzMzMzMyAzMTEuNDY2NjY3TDQ0OCA2MDEuNmwtMTE5LjQ2NjY2Ny0xMTkuNDY2NjY3LTU5LjczMzMzMyA1OS43MzMzMzQgMTc5LjIgMTc5LjIgMzQ5Ljg2NjY2Ny0zNDkuODY2NjY3eiIgZmlsbD0iI0NDRkY5MCIgcC1pZD0iMzE2MiI+PC9wYXRoPjwvc3ZnPg==') no-repeat center center;
|
||||
background-size: 24px;
|
||||
}
|
||||
|
||||
.top_description .row span {
|
||||
margin-bottom: 4px;
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
.top_description.ok {
|
||||
color: #02934e;
|
||||
}
|
||||
|
||||
.bodypart-list {
|
||||
text-align: center;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
color: #00998c;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
.btn1, .btn2, .btn3, .btn4 {
|
||||
padding: 0.6em 0;
|
||||
font-size: 1.1em;
|
||||
width: 80%;
|
||||
margin: 0 10%;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border-radius: 0.5em;
|
||||
color: #fff;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
background-color: #02934e;
|
||||
margin-top: 4em;
|
||||
}
|
||||
|
||||
.btn1:active {
|
||||
background-color: #02532c;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
background-color: #00a99b;
|
||||
}
|
||||
|
||||
.btn2:active {
|
||||
background-color: #006e65;
|
||||
}
|
||||
|
||||
.btn3 {
|
||||
background-color: #0067a9;
|
||||
}
|
||||
|
||||
.btn3:active {
|
||||
background-color: #004d7e;
|
||||
}
|
||||
|
||||
.btn4 {
|
||||
background-color: #d15f27;
|
||||
}
|
||||
|
||||
.btn4:active {
|
||||
background-color: #853a15;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
background-color: #bebebe;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
bottom: 0;
|
||||
text-align: center;
|
||||
font-size: 0.7em;
|
||||
margin-bottom: 2em;
|
||||
color: #696969;
|
||||
}
|
||||
|
||||
.container_dialog {
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.container_dialog.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.container_dialog.show {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.dialog_overlay {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000000;
|
||||
opacity: .5;
|
||||
position: absolute;
|
||||
transition-delay: .15s;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
z-index: 1;
|
||||
width: 65%;
|
||||
background: #e8ebf3;
|
||||
border-radius: 1em;
|
||||
transition-timing-function: cubic-bezier(.54,1.12,.38,1.11);
|
||||
transition-duration: .3s;
|
||||
transition-delay: 0;
|
||||
transition-property: opacity,transform;
|
||||
}
|
||||
|
||||
.dialog.show {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.dialog.hide {
|
||||
transform: scale(.5);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.dialog_content {
|
||||
padding: 1.3em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
color: #313131;
|
||||
}
|
||||
|
||||
.dialog_button {
|
||||
border-top: 1px solid #ccc;
|
||||
padding: 0.8em 0;
|
||||
font-size: 1em;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
color: #00998c;
|
||||
}
|
||||
|
||||
.dialog_button:active {
|
||||
background-color: #e7e7e7;
|
||||
border-radius: 0 0 1em 1em;
|
||||
}
|
||||
|
||||
.phone-button {
|
||||
}
|
||||
|
||||
.input-phone {
|
||||
flex-grow: 1;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.phone-div {
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.close-div {
|
||||
display: flex;
|
||||
flex-direction: row-reverse
|
||||
}
|
||||
|
||||
.modal {
|
||||
display: none; /* Òþ²Øµ¯³ö¿ò */
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,0.5); /* °ë͸Ã÷±³¾° */
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: #fff;
|
||||
margin: 15% auto;
|
||||
padding: 15px;
|
||||
border: 1px solid #888;
|
||||
width: 80%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.close {
|
||||
color: #aaa;
|
||||
float: right;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.close:hover,
|
||||
.close:focus {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#zhuanjia-div {
|
||||
display: none;
|
||||
}
|
342
public/dicom/dicomViewPc1.html
Normal file
342
public/dicom/dicomViewPc1.html
Normal file
@ -0,0 +1,342 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>胶片预览</title>
|
||||
<script src="https://unpkg.com/hammerjs@2.0.8/hammer.js"></script>
|
||||
<script src="https://unpkg.com/cornerstone-core@2.6.1/dist/cornerstone.js"></script>
|
||||
<script src="https://unpkg.com/cornerstone-math@0.1.10/dist/cornerstoneMath.min.js"></script>
|
||||
<script src="https://unpkg.com/cornerstone-wado-image-loader@4.1.3/dist/cornerstoneWADOImageLoader.bundle.min.js"></script>
|
||||
<script src="https://unpkg.com/cornerstone-web-image-loader@2.1.1/dist/cornerstoneWebImageLoader.min.js"></script>
|
||||
<script src="https://unpkg.com/cornerstone-tools@6.0.7/dist/cornerstoneTools.js"></script>
|
||||
<script src="https://unpkg.com/dicom-parser@1.8.13/dist/dicomParser.min.js"></script>
|
||||
<script src="http://code.jquery.com/jquery-1.12.2.min.js"></script>
|
||||
<!-- 最新版本的 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">
|
||||
<!-- 可选的 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">
|
||||
<!-- 最新的 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="./js/dicomViewPc.js"></script>
|
||||
<link rel="stylesheet" href="./css/iconfont/iconfont.css">
|
||||
<style>
|
||||
.info {
|
||||
position: relative;
|
||||
left: 0;
|
||||
top: 0;
|
||||
font-size: 20px;
|
||||
display: none;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
border: 1px solid red;
|
||||
z-index: 100;
|
||||
color: white;
|
||||
margin-top: -100px;
|
||||
}
|
||||
|
||||
/***/
|
||||
body {
|
||||
margin: 0;
|
||||
height: 100vh;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#top-menu {
|
||||
background-color: black;
|
||||
/*height: 180px;
|
||||
display: flex;
|
||||
flex-direction: row;*/
|
||||
border: 0px solid red;
|
||||
overflow-x: hidden;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
#body-part {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
#dicom-continer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
#dicom-list {
|
||||
background-color: black;
|
||||
width: 150px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.btn {
|
||||
margin: 5px 5px 5px 0;
|
||||
}
|
||||
|
||||
/* #dicomImage {
|
||||
flex-grow:1;
|
||||
height: 100%;
|
||||
}
|
||||
#dicomImage1 {
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
}*/
|
||||
|
||||
.series_img {
|
||||
border: 0px solid green;
|
||||
}
|
||||
|
||||
.series_img_active {
|
||||
border: 1px solid green;
|
||||
}
|
||||
|
||||
.border-red {
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
.left-top {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
text-align: right;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.left-bottom {
|
||||
position: relative;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.right-top {
|
||||
position: relative;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.right-bottom {
|
||||
position: relative;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.cornerstone-tool-active {
|
||||
stroke: #FF0000 !important; /* 红色 */
|
||||
}
|
||||
|
||||
.dicom-img-box {
|
||||
flex-grow: 1;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
margin: 0 1px 0 1px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
background-color: black;
|
||||
border: 1px solid white;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.dicom-img-box-active {
|
||||
flex-grow: 1;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
margin: 0 1px 0 1px;
|
||||
border: 1px solid red;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
background-color: black;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dicom-img {
|
||||
flex-grow: 1;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
margin: 0 1px 0 1px;
|
||||
}
|
||||
|
||||
.dicom-img-active {
|
||||
flex-grow: 1;
|
||||
width: 0;
|
||||
height: 100%;
|
||||
border: 1px solid red;
|
||||
}
|
||||
/*滚动条*/
|
||||
.slider-container {
|
||||
height: 100%;
|
||||
width: 3rem;
|
||||
background-color: black;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/*滑块样式-开始*/
|
||||
/* range主体样式 */
|
||||
.lcmf-range {
|
||||
-webkit-appearance: none;
|
||||
position: relative;
|
||||
appearance: none;
|
||||
height: 0.5rem;
|
||||
/* outline设置为零防止点到空白区域时会出现边框影响美观性问题 */
|
||||
outline: 0;
|
||||
border: 0;
|
||||
/* 背景色设置为渐变色,有兼容性问题谨慎使用 */
|
||||
/*background: linear-gradient(to right,rgb(238,222,217),rgb(200,66,67));*/
|
||||
border-radius: 0 0.5rem 0.5rem 0;
|
||||
}
|
||||
|
||||
.lcmf-range-date {
|
||||
/* 顺时针旋转90度作为y轴 */
|
||||
transform: rotate(90deg);
|
||||
width: 20rem !important;
|
||||
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(200,66,67));
|
||||
}
|
||||
|
||||
/* 滑动块样式 */
|
||||
.lcmf-range::-webkit-slider-thumb {
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
height: 2rem;
|
||||
width: 2rem;
|
||||
border-radius: 0rem;
|
||||
background-color: white;
|
||||
border: 0.15rem solid rgb(245,95,95);
|
||||
}
|
||||
|
||||
/*滑块样式-结束*/
|
||||
|
||||
.icon-shang {
|
||||
color: red;
|
||||
height: 12rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.icon-xia:hover, .icon-shang:hover {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.icon-xia {
|
||||
color: red;
|
||||
height: 12rem;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
flex-grow: 1;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.around-info-left-top {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.around-info-right-top {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
color: white;
|
||||
display:flex;
|
||||
flex-direction:row-reverse;
|
||||
}
|
||||
|
||||
.around-info-left-bottom {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.around-info-right-bottom {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
color: white;
|
||||
display: flex;
|
||||
flex-direction:column;
|
||||
}
|
||||
.around-info-right-bottom > .tag-item, around-info-right-top > .tag-item {
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="top-menu" class="btn-group">
|
||||
<button type="button" id="Magnify" class="btn btn-default" onclick="switchAction('Magnify',1,this)">Magnify</button>
|
||||
<button type="button" id="Pan" class="btn btn-default" onclick="switchAction('Pan',1,this)">Pan</button>
|
||||
<button type="button" id="Zoom" class="btn btn-default" onclick="switchAction('Zoom',1,this)">Zoom</button>
|
||||
<button type="button" id="ZoomMouseWheel" class="btn btn-default" onclick="switchAction('ZoomMouseWheel',1,this)">ZoomMouseWheel</button>
|
||||
<button type="button" id="Wwwc" class="btn btn-default" onclick="switchAction('Wwwc',1,this)">Wwwc</button>
|
||||
<button type="button" id="WwwcRegion" class="btn btn-default" onclick="switchAction('WwwcRegion',1,this)">WwwcRegion</button>
|
||||
<button type="button" id="ScaleOverlay" class="btn btn-default" onclick="switchAction('ScaleOverlay',1,this)">ScaleOverlay</button>
|
||||
<button type="button" id="Rotate" class="btn btn-default" onclick="switchAction('Rotate',1,this)">Rotate</button>
|
||||
<button type="button" id="OrientationMarkers" class="btn btn-default" onclick="switchAction('OrientationMarkers',1,this)">OrientationMarkers</button>
|
||||
<button type="button" id="Angle" class="btn btn-default" onclick="switchAction('Angle',1,this)">Angle</button>
|
||||
<button type="button" id="ArrowAnnotate" class="btn btn-default" onclick="switchAction('ArrowAnnotate',1,this)">ArrowAnnotate</button>
|
||||
<button type="button" id="Bidirectional" class="btn btn-default" onclick="switchAction('Bidirectional',1,this)">Bidirectional</button>
|
||||
<button type="button" id="CobbAngle" class="btn btn-default" onclick="switchAction('CobbAngle',1,this)">CobbAngle</button>
|
||||
<button type="button" id="EllipticalRoi" class="btn btn-default" onclick="switchAction('EllipticalRoi',1,this)">EllipticalRoi</button>
|
||||
<button type="button" id="FreehandRoi" class="btn btn-default" onclick="switchAction('FreehandRoi',1,this)">FreehandRoi</button>
|
||||
<button type="button" id="Length" class="btn btn-default" onclick="switchAction('Length',1,this)">Length</button>
|
||||
<button type="button" id="Probe" class="btn btn-default" onclick="switchAction('Probe',1,this)">Probe</button>
|
||||
<button type="button" id="RectangleRoi" class="btn btn-default" onclick="switchAction('RectangleRoi',1,this)">RectangleRoi</button>
|
||||
<button type="button" id="TextMarker" class="btn btn-default" onclick="switchAction('TextMarker',1,this)">TextMarker</button>
|
||||
<button type="button" id="StackScroll" class="btn btn-default" onclick="switchAction('StackScroll',1,this)">StackScroll</button>
|
||||
<button type="button" id="StackScrollMouseWheel" class="btn btn-default" onclick="switchAction('StackScrollMouseWheel',1,this)">StackScrollMouseWheel</button>
|
||||
<button type="button" id="invert" class="btn btn-default" onclick="invert(1,this)">反转色</button>
|
||||
<button type="button" id="changeColorx" class="btn btn-default" onclick="changColor(1,this)">改变颜色</button>
|
||||
<button type="button" class="btn btn-default" onclick="resetTool()">重置</button>
|
||||
<input type="text" id='row-count' placeholder="行数" value='1' /> x <input type="text" id='column-count' placeholder="列数" value='1' /> <input type='button' onclick="doCreate()" value="生成" />
|
||||
</div>
|
||||
|
||||
<div id="body-part">
|
||||
<div id="dicom-continer">
|
||||
</div>
|
||||
<div id="dicom-list">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
644
public/dicom/js/dicomViewPc.js
Normal file
644
public/dicom/js/dicomViewPc.js
Normal file
@ -0,0 +1,644 @@
|
||||
//功能名称
|
||||
const functionNames = [
|
||||
"Magnify", "Pan", "Zoom", "ZoomMouseWheel", "Wwwc",
|
||||
"ScaleOverlay", "OrientationMarkers", "WwwcRegion", "Rotate", "Angle", "ArrowAnnotate", "Bidirectional", "CobbAngle", "EllipticalRoi", "FreehandRoi", "Length", "Probe", "RectangleRoi", "TextMarker",
|
||||
"StackScroll", "StackScrollMouseWheel"
|
||||
]
|
||||
|
||||
//标尺和方向显示可与其他状态同时启用
|
||||
const displayFunctions = ["ScaleOverlay", "OrientationMarkers"]
|
||||
|
||||
//不能同时启用的功能
|
||||
const notNeedDisableFunctions = ["WwwcRegion", "Rotate", "Angle", "ArrowAnnotate", "Bidirectional", "CobbAngle", "EllipticalRoi", "FreehandRoi", "Length", "Probe", "RectangleRoi", "TextMarker"]
|
||||
|
||||
//状态数据
|
||||
var stateData = {
|
||||
rowCount: 1,
|
||||
columnCount: 1,
|
||||
imgIndex: 0,
|
||||
element: {},
|
||||
dicomInfo: {},
|
||||
showMapping: new Map()
|
||||
}
|
||||
|
||||
/*切换工具*/
|
||||
function switchAction(tagName, flag, btn) {
|
||||
//btn btn-primary
|
||||
var isSelected = $(btn).hasClass('selected');
|
||||
if (isSelected) {
|
||||
$(btn).removeClass("btn-primary")
|
||||
$(btn).removeClass("selected")
|
||||
$(btn).addClass("btn-default")
|
||||
disableFunctions(tagName);
|
||||
}
|
||||
else {
|
||||
disableFunctions(tagName);
|
||||
$(btn).removeClass("btn-default")
|
||||
$(btn).addClass("btn-primary")
|
||||
$(btn).addClass("selected")
|
||||
}
|
||||
if (!isSelected) {
|
||||
cornerstoneTools.setToolActive(tagName, { mouseButtonMask: 1 })
|
||||
}
|
||||
}
|
||||
|
||||
function reload() {
|
||||
var data = cornerstoneTools.getToolState(stateData.element, "stack").data[0];
|
||||
var index = data.currentImageIdIndex;
|
||||
var imgId = data.imageIds[index];
|
||||
data.currentImageIdIndex = index;
|
||||
cornerstone.loadAndCacheImage(imgId).then(function (image) {
|
||||
cornerstone.enable(stateData.element);
|
||||
cornerstone.displayImage(stateData.element, image);
|
||||
});
|
||||
}
|
||||
|
||||
//下一张
|
||||
function next(imgId) {
|
||||
if (imgId && stateData.element != imgId) {
|
||||
return;
|
||||
}
|
||||
var data = cornerstoneTools.getToolState(stateData.element, "stack").data[0];
|
||||
var index = data.currentImageIdIndex;
|
||||
if (index == data.imageIds.length - 1) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
index += 1;
|
||||
}
|
||||
var imgId = data.imageIds[index];
|
||||
data.currentImageIdIndex = index;
|
||||
cornerstone.loadAndCacheImage(imgId).then(function (image) {
|
||||
cornerstone.enable(stateData.element);
|
||||
cornerstone.displayImage(stateData.element, image);
|
||||
renderTagText(stateData.element,image)
|
||||
});
|
||||
for (var i = 0; i < 10; i++) {
|
||||
if (index + i == data.imageIds.length - 1) {
|
||||
break;
|
||||
}
|
||||
cornerstone.loadImage(data.imageIds[index + i]).then((image) => {
|
||||
console.log("loaded ok " + data.imageIds[index + i]);
|
||||
})
|
||||
}
|
||||
setSliderValue(stateData.element.id)
|
||||
}
|
||||
|
||||
//读取文件中的标签信息
|
||||
function getDicomInfo(image) {
|
||||
var imageInfo = {};
|
||||
imageInfo.seriesNumber = image.data.string('x00200011');//图像序列号
|
||||
imageInfo.imageNum = image.data.string('x00200013');//图像位置
|
||||
imageInfo.imageDate = image.data.string("x00080021");//拍摄日期
|
||||
imageInfo.sliceThickness = image.data.string('x00180050');//层厚
|
||||
imageInfo.patientId = image.data.string('x00100020');//病理号
|
||||
// 判断窗宽窗位是否合法
|
||||
imageInfo.pixelR = image.data.uint16('x00280103');
|
||||
imageInfo.heightBit = image.data.uint16('x00280102') || '';
|
||||
// 病人基本信息
|
||||
imageInfo.patientName = image.data.string('x00100010');
|
||||
imageInfo.patientBirthDate = image.data.string('x00100030');
|
||||
imageInfo.patientGender = image.data.string('x00100040');
|
||||
imageInfo.sID = image.data.string('x00200011');
|
||||
// 像素间距
|
||||
imageInfo.pixelSpacing = image.data.string('x00280030');
|
||||
imageInfo.height = image.data.uint16('x00280010');
|
||||
imageInfo.width = image.data.uint16('x00280011');
|
||||
imageInfo.height = image.data.uint16('x00280010');
|
||||
imageInfo.windowCenter = image.data.string('x00281050');
|
||||
imageInfo.windowWidth = image.data.string('x00281051');
|
||||
imageInfo.imagePixelSpacing = image.data.string('x00181164') || '';
|
||||
imageInfo.rowPixelSpacing = image.rowPixelSpacing;
|
||||
// 放射放大系数
|
||||
imageInfo.magnification = Number(image.data.string('x00181114'));
|
||||
// 放射源到面板的距离
|
||||
imageInfo.sourceTOdetector = image.data.string('x00181110');
|
||||
// 放射源到病人的距离
|
||||
imageInfo.sourceTOpatient = image.data.string('x00181111');
|
||||
//this.modalityLUT = cornerstone.metaData.get('modalityLutModule', image.imageId).modalityLUTSequence;
|
||||
imageInfo.voiContent = cornerstone.metaData.get('voiLutModule', image.imageId);
|
||||
// 斜率截距
|
||||
imageInfo.rescaleIntercept = Number(image.data.string('x00281052'));
|
||||
imageInfo.rescaleSlope = Number(image.data.string('x00281053'));
|
||||
return imageInfo;
|
||||
}
|
||||
|
||||
//上一张
|
||||
function last(imgId) {
|
||||
if (imgId && stateData.element != imgId) {
|
||||
return;
|
||||
}
|
||||
var data = cornerstoneTools.getToolState(stateData.element, "stack").data[0];
|
||||
var index = data.currentImageIdIndex;
|
||||
if (index == 0) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
index -= 1;
|
||||
}
|
||||
var imgId = data.imageIds[index];
|
||||
data.currentImageIdIndex = index;
|
||||
cornerstone.loadAndCacheImage(imgId).then(function (image) {
|
||||
cornerstone.enable(stateData.element);
|
||||
cornerstone.displayImage(stateData.element, image);
|
||||
renderTagText(stateData.element, image)
|
||||
});
|
||||
setSliderValue(stateData.element.id)
|
||||
}
|
||||
|
||||
//进度条更新
|
||||
function setAllSliderValue() {
|
||||
//获取所有已经加载的图片区映射关系
|
||||
if (stateData.showMapping) {
|
||||
stateData.showMapping.forEach((value, key) => {
|
||||
setSliderValue(key);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//标签文本更新
|
||||
function setAllTagsValue() {
|
||||
if (stateData.showMapping) {
|
||||
stateData.showMapping.forEach((value, key) => {
|
||||
var element = document.getElementById(key)
|
||||
var image = cornerstone.getImage(element);
|
||||
//TODO 缺少获取图片对象信息
|
||||
renderTagText(element, image)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//重置画布
|
||||
function resetRenderCanvase() {
|
||||
var element = stateData.element;
|
||||
const enabledElement = cornerstone.getEnabledElement(element);
|
||||
|
||||
enabledElement.renderingTools.colormapId = undefined;
|
||||
enabledElement.renderingTools.colorLut = undefined;
|
||||
|
||||
const renderCanvas = enabledElement.renderingTools.renderCanvas;
|
||||
const canvasContext = renderCanvas.getContext('2d');
|
||||
|
||||
// NOTE - we need to fill the render canvas with white pixels since we
|
||||
// control the luminance using the alpha channel to improve rendering performance.
|
||||
canvasContext.fillStyle = 'white';
|
||||
canvasContext.fillRect(0, 0, renderCanvas.width, renderCanvas.height);
|
||||
const renderCanvasData = canvasContext.getImageData(0, 0, renderCanvas.width, renderCanvas.height);
|
||||
|
||||
enabledElement.renderingTools.renderCanvasContext = canvasContext;
|
||||
enabledElement.renderingTools.renderCanvasData = renderCanvasData;
|
||||
cornerstone.updateImage(stateData.element);
|
||||
}
|
||||
|
||||
//重置按钮状态
|
||||
function resetBtnState(id) {
|
||||
if ($("#" + id).hasClass("selected")) {
|
||||
$("#" + id).removeClass("btn-primary")
|
||||
$("#" + id).removeClass("selected")
|
||||
$("#" + id).addClass("btn-default")
|
||||
}
|
||||
}
|
||||
|
||||
function disableFunctions(currentFun) {
|
||||
functionNames.forEach(function (fname) {
|
||||
resetBtnState(fname)
|
||||
if (currentFun != fname && (notNeedDisableFunctions.includes(fname) || displayFunctions.includes(fname))) {
|
||||
return;
|
||||
}
|
||||
cornerstoneTools.setToolDisabled(fname, { mouseButtonMask: 1 })
|
||||
})
|
||||
}
|
||||
|
||||
//辅助工具
|
||||
const toolFunction = ["ScaleOverlay", "OrientationMarkers"]
|
||||
const wheelFunction = ["ZoomMouseWheel"]
|
||||
|
||||
//撤销所有改动
|
||||
function resetTool() {
|
||||
//反转色
|
||||
//invert(null, $("#invert"), true)
|
||||
//changColor(0, $("#changeColor"), true)
|
||||
functionNames.forEach(function (fname) {
|
||||
if (notNeedDisableFunctions.includes(fname)) {
|
||||
cornerstoneTools.clearToolState(stateData.element, fname);
|
||||
}
|
||||
})
|
||||
cornerstone.reset(stateData.element);
|
||||
cornerstone.updateImage(stateData.element);
|
||||
}
|
||||
//反转颜色
|
||||
function invert(flag, btn, reset) {
|
||||
//btn btn-primary
|
||||
var isSelected = $(btn).hasClass('selected');
|
||||
if (isSelected || reset) {
|
||||
$(btn).removeClass("btn-primary")
|
||||
$(btn).removeClass("selected")
|
||||
$(btn).addClass("btn-default")
|
||||
}
|
||||
else {
|
||||
$(btn).removeClass("btn-default")
|
||||
$(btn).addClass("btn-primary")
|
||||
$(btn).addClass("selected")
|
||||
}
|
||||
//反转颜色
|
||||
var viewport = {
|
||||
invert: !isSelected ? true : false
|
||||
}
|
||||
cornerstone.setViewport(stateData.element, viewport);
|
||||
}
|
||||
|
||||
//彩色
|
||||
function changColor(flag, btn, reset) {
|
||||
var element = stateData.element;
|
||||
//btn btn-primary
|
||||
var isSelected = $(btn).hasClass('selected');
|
||||
if (isSelected || reset) {
|
||||
$(btn).removeClass("btn-primary")
|
||||
$(btn).removeClass("selected")
|
||||
$(btn).addClass("btn-default")
|
||||
}
|
||||
else {
|
||||
$(btn).removeClass("btn-default")
|
||||
$(btn).addClass("btn-primary")
|
||||
$(btn).addClass("selected")
|
||||
}
|
||||
resetRenderCanvase();
|
||||
const b = cornerstone.getEnabledElement(element)
|
||||
const v = cornerstone.getDefaultViewport(b.canvas, b.image)
|
||||
var vp = cornerstone.getViewport(element);
|
||||
vp.colormap = !isSelected ? "hsv" : undefined;
|
||||
if (!flag) {
|
||||
cornerstone.setViewport(element, v)
|
||||
}
|
||||
else {
|
||||
cornerstone.setViewport(element, vp)
|
||||
}
|
||||
}
|
||||
|
||||
//重置cornerstone
|
||||
function reset() {
|
||||
cornerstone.reset(stateData.element);
|
||||
}
|
||||
|
||||
function initConerstone(element) {
|
||||
// 注册并挂载cornerstone及其cornerstoneTools,固定操作
|
||||
cornerstoneTools.external.cornerstone = cornerstone;
|
||||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
|
||||
cornerstoneTools.external.Hammer = Hammer;
|
||||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
|
||||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
|
||||
// imageId就是cornerstone要求的.dcm图片地址,例如:var imageId = "wadouri:http://127.0.0.1:6699/ctdcm1.dcm";
|
||||
//var imageId = "wadouri:./1.dcm";
|
||||
// 初始化cornerstoneTools工具
|
||||
cornerstoneTools.init();
|
||||
//// 获取要用于加载图片的div区域
|
||||
//element = document.getElementById('dicomImage');
|
||||
////激活获取到的用于图片加载的区域
|
||||
cornerstone.enable(element);
|
||||
// 从cornerstoneTools库中获取窗宽,窗高工具
|
||||
const WwwcTool = cornerstoneTools.WwwcTool;
|
||||
//添加获取到的窗宽,窗高工具
|
||||
cornerstoneTools.addTool(WwwcTool);
|
||||
|
||||
//放大
|
||||
const MagnifyTool = cornerstoneTools.MagnifyTool;
|
||||
cornerstoneTools.addTool(MagnifyTool)
|
||||
|
||||
//平移
|
||||
const PanTool = cornerstoneTools.PanTool;
|
||||
cornerstoneTools.addTool(PanTool)
|
||||
|
||||
const ZoomTool = cornerstoneTools.ZoomTool;
|
||||
cornerstoneTools.addTool(ZoomTool, {
|
||||
// Optional configuration
|
||||
configuration: {
|
||||
invert: false,
|
||||
preventZoomOutsideImage: false,
|
||||
minScale: .1,
|
||||
maxScale: 20.0,
|
||||
}
|
||||
});
|
||||
|
||||
const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool;
|
||||
cornerstoneTools.addTool(ZoomMouseWheelTool)
|
||||
|
||||
const WwwcRegionTool = cornerstoneTools.WwwcRegionTool;
|
||||
cornerstoneTools.addTool(WwwcRegionTool)
|
||||
|
||||
const ScaleOverlayTool = cornerstoneTools.ScaleOverlayTool;
|
||||
cornerstoneTools.addTool(ScaleOverlayTool)
|
||||
|
||||
//旋转
|
||||
const RotateTool = cornerstoneTools.RotateTool;
|
||||
cornerstoneTools.addTool(RotateTool)
|
||||
|
||||
const OrientationMarkersTool = cornerstoneTools.OrientationMarkersTool;
|
||||
cornerstoneTools.addTool(OrientationMarkersTool)
|
||||
|
||||
const AngleTool = cornerstoneTools.AngleTool;
|
||||
cornerstoneTools.addTool(AngleTool)
|
||||
|
||||
const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool;
|
||||
cornerstoneTools.addTool(ArrowAnnotateTool)
|
||||
|
||||
const BidirectionalTool = cornerstoneTools.BidirectionalTool;
|
||||
cornerstoneTools.addTool(BidirectionalTool)
|
||||
|
||||
const CobbAngleTool = cornerstoneTools.CobbAngleTool;
|
||||
cornerstoneTools.addTool(CobbAngleTool)
|
||||
|
||||
const EllipticalRoiTool = cornerstoneTools.EllipticalRoiTool;
|
||||
cornerstoneTools.addTool(EllipticalRoiTool)
|
||||
|
||||
const FreehandRoiTool = cornerstoneTools.FreehandRoiTool;
|
||||
cornerstoneTools.addTool(FreehandRoiTool)
|
||||
|
||||
const LengthTool = cornerstoneTools.LengthTool;
|
||||
cornerstoneTools.addTool(LengthTool)
|
||||
|
||||
const ProbeTool = cornerstoneTools.ProbeTool;
|
||||
cornerstoneTools.addTool(ProbeTool)
|
||||
|
||||
const RectangleRoiTool = cornerstoneTools.RectangleRoiTool;
|
||||
cornerstoneTools.addTool(RectangleRoiTool)
|
||||
|
||||
const TextMarkerTool = cornerstoneTools.TextMarkerTool
|
||||
// set up the markers configuration
|
||||
const configuration = {
|
||||
markers: ['F5', 'F4', 'F3', 'F2', 'F1'],
|
||||
current: 'F5',
|
||||
ascending: true,
|
||||
loop: true,
|
||||
}
|
||||
cornerstoneTools.addTool(TextMarkerTool, { configuration })
|
||||
|
||||
const StackScrollTool = cornerstoneTools.StackScrollTool
|
||||
cornerstoneTools.addTool(StackScrollTool)
|
||||
|
||||
const StackScrollMouseWheelTool = cornerstoneTools.StackScrollMouseWheelTool
|
||||
cornerstoneTools.addTool(StackScrollMouseWheelTool)
|
||||
cornerstoneTools.setToolActive('StackScrollMouseWheel', {})
|
||||
|
||||
}
|
||||
|
||||
function initConerstoneAndData() {
|
||||
var series = stateData.dicomInfo.seriesList[stateData.imgIndex].instanceList
|
||||
const scheme = 'wadouri'
|
||||
const baseUrl = ''
|
||||
const imageIds = series.map(seriesImage => `${scheme}:${baseUrl}${seriesImage.imageid}`)
|
||||
|
||||
//define the stack
|
||||
const stack = {
|
||||
currentImageIdIndex: 0,
|
||||
imageIds: imageIds
|
||||
}
|
||||
|
||||
cornerstone.enable(stateData.element);
|
||||
|
||||
// load images and set the stack
|
||||
cornerstone.loadImage(imageIds[0]).then((image) => {
|
||||
initSlider(stateData.element);
|
||||
cornerstone.displayImage(stateData.element, image)
|
||||
cornerstoneTools.addStackStateManager(stateData.element, ['stack'])
|
||||
cornerstoneTools.addToolState(stateData.element, 'stack', stack)
|
||||
renderTagText(stateData.element, image)
|
||||
})
|
||||
}
|
||||
|
||||
//页面加载完成,执行初始化
|
||||
$(document).ready(function () {
|
||||
createElements(1, 1,true);
|
||||
//激活获取到的用于图片加载的区域
|
||||
stateData.element = document.getElementById('dicomImage_0_0');
|
||||
stateData.showMapping.set('dicomImage_0_0',0);
|
||||
//cornerstone.enable(stateData.element);
|
||||
initConerstone(stateData.element);
|
||||
//初始化数据
|
||||
initData();
|
||||
//鼠标滚轮事件
|
||||
document.addEventListener('mousewheel', function (event) {
|
||||
// 处理事件
|
||||
setAllSliderValue();
|
||||
setAllTagsValue();
|
||||
});
|
||||
//鼠标移动事件
|
||||
document.addEventListener('mousemove', function (event) {
|
||||
// 处理事件
|
||||
setAllSliderValue();
|
||||
setAllTagsValue();
|
||||
});
|
||||
})
|
||||
|
||||
//初始化右侧图片列表
|
||||
function initImgList(data) {
|
||||
$("#dicom-list").empty();
|
||||
for (var i = 0; i < data.seriesList.length; i++) {
|
||||
var className = "series_img";
|
||||
if (stateData.imgIndex == i) {
|
||||
className += "_active";
|
||||
}
|
||||
$("#dicom-list").append('<img id="img_' + i + '" onclick="changeIndex(' + i + ')" class="' + className + '" src="' + data.seriesList[i].thumbUrl + '"/>');
|
||||
}
|
||||
}
|
||||
|
||||
//修改序列
|
||||
function changeIndex(i) {
|
||||
if (stateData.imgIndex == i && stateData.showMapping.get(stateData.element.id) == i) {
|
||||
return;
|
||||
}
|
||||
$("#img_" + stateData.imgIndex).removeClass("series_img_active");
|
||||
$("#img_" + stateData.imgIndex).addClass("series_img")
|
||||
$("#img_" + i).removeClass("series_img")
|
||||
$("#img_" + i).addClass("series_img_active")
|
||||
stateData.imgIndex = i
|
||||
initConerstone(stateData.element)
|
||||
initConerstoneAndData();
|
||||
stateData.showMapping.set(stateData.element.id, i);
|
||||
}
|
||||
|
||||
//获取数据 Handler/Service.ashx idx: idx, no: localData.no, orgId: localData.orgId, method: "getSeries"
|
||||
function initData() {
|
||||
var idx = GetQueryString("idx");
|
||||
var localStorage = window.localStorage;
|
||||
var localData = JSON.parse(localStorage.data);
|
||||
/* alert(localData.regid) */
|
||||
$.getJSON("http://127.0.0.1:5000/get-data", {
|
||||
|
||||
},
|
||||
function (data) {
|
||||
if ("failed" == data.status) {
|
||||
alert("获取数据失败")
|
||||
}
|
||||
else {
|
||||
stateData.dicomInfo = data;
|
||||
initImgList(stateData.dicomInfo);
|
||||
initConerstoneAndData();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//初始化滚动条
|
||||
function initSlider(element) {
|
||||
var idx = stateData.showMapping.get(element.id);
|
||||
var size = stateData.dicomInfo.seriesList[idx].instanceList.length;
|
||||
//当前索引
|
||||
var index = 0;
|
||||
try {
|
||||
var data = cornerstoneTools.getToolState(element, "stack").data[0];
|
||||
index = data.currentImageIdIndex;
|
||||
}
|
||||
catch (err) {
|
||||
console.log('err',err)
|
||||
}
|
||||
$("#" + element.id + "-slider").attr("min", 1)
|
||||
$("#" + element.id + "-slider").attr("max", size)
|
||||
$("#" + element.id + "-slider").val(index + 1)
|
||||
}
|
||||
|
||||
//选中元素
|
||||
function changeElement(b) {
|
||||
//滚动条和上下翻页禁用
|
||||
$(".operator").attr("disabled", "true");
|
||||
$("#" + b.id + "-btn-next").removeAttr("disabled");
|
||||
$("#" + b.id + "-btn-last").removeAttr("disabled");
|
||||
$("#" + b.id + "-slider").removeAttr("disabled");
|
||||
if (stateData.element == b) {
|
||||
$(b).parent().removeClass("dicom-img-box");
|
||||
$(b).parent().addClass("dicom-img-box-active");
|
||||
return;
|
||||
}
|
||||
$(b).parent().removeClass("dicom-img-box");
|
||||
$(b).parent().addClass("dicom-img-box-active");
|
||||
$(stateData.element).parent().removeClass("dicom-img-box-active");
|
||||
$(stateData.element).parent().addClass("dicom-img-box");
|
||||
stateData.element = b;
|
||||
}
|
||||
|
||||
//获取URL参数
|
||||
function GetQueryString(name) {
|
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
var r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]); return null;
|
||||
}
|
||||
|
||||
//设置滑动条值
|
||||
function setSliderValue(imgId) {
|
||||
//获取被选中胶片区域元素
|
||||
var element = document.getElementById(imgId)
|
||||
var data = cornerstoneTools.getToolState(element, "stack").data[0];
|
||||
var index = data.currentImageIdIndex;
|
||||
$("#" + imgId + "-slider").val(index+1);
|
||||
}
|
||||
|
||||
function changeSlider(imgId, slider) {
|
||||
var sliderValue = $(slider).val();
|
||||
var data = cornerstoneTools.getToolState(stateData.element, "stack").data[0];
|
||||
index = sliderValue - 1;
|
||||
var imgId = data.imageIds[index];
|
||||
data.currentImageIdIndex = index;
|
||||
cornerstone.loadAndCacheImage(imgId).then(function (image) {
|
||||
cornerstone.enable(stateData.element);
|
||||
cornerstone.displayImage(stateData.element, image);
|
||||
renderTagText(stateData.element,image)
|
||||
});
|
||||
for (var i = 0; i < 10; i++) {
|
||||
if (index + i == data.imageIds.length - 1) {
|
||||
break;
|
||||
}
|
||||
cornerstone.loadImage(data.imageIds[index + i]).then((image) => {
|
||||
console.log("loaded ok " + data.imageIds[index + i]);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
//渲染标签文本
|
||||
function renderTagText(e, i) {
|
||||
var tagsInfo = getDicomInfo(i);
|
||||
var element = $(e).parent()[0];
|
||||
var boxId = element.id;
|
||||
//判断文本是否已经显示
|
||||
if (!$("#" + boxId + "_left-top").length) {
|
||||
var infoElement =
|
||||
' <div id="' + boxId + '_left-top" class="around-info-left-top"></div>' +
|
||||
' <div id="' + boxId + '_right-top" class="around-info-right-top"></div>' +
|
||||
' <div id="' + boxId + '_left-bottom" class="around-info-left-bottom"></div>' +
|
||||
' <div id="' + boxId + '_right-bottom" class="around-info-right-bottom"></div>';
|
||||
$(element).children().first().before(infoElement);
|
||||
}
|
||||
//左上角
|
||||
var leftTop = $("#" + boxId + "_left-top");
|
||||
leftTop.empty();
|
||||
leftTop.append("<div class='tag-item'>" + tagsInfo.patientId + "</div>");//体检编号
|
||||
leftTop.append("<div class='tag-item'>姓名:" + stateData.dicomInfo.patientname + "</div>");//患者姓名
|
||||
leftTop.append("<div class='tag-item'>" + tagsInfo.patientBirthDate + " " + (tagsInfo.patientGender == 'F' ? "男":"女") + "</div>");
|
||||
leftTop.append("<div class='tag-item'>" + tagsInfo.imageDate + "</div>");
|
||||
|
||||
//左下角
|
||||
var leftBottom = $("#" + boxId + "_left-bottom");
|
||||
leftBottom.empty();
|
||||
leftBottom.append("<div class='tag-item'>" + stateData.dicomInfo.hospital +"</div>");
|
||||
//右上角
|
||||
var rightTop = $("#" + boxId + "_right-top");
|
||||
rightTop.empty();
|
||||
rightTop.append("<div class='tag-item'>序列:" + tagsInfo.seriesNumber + " 图像:" + tagsInfo.imageNum + "</div>");
|
||||
//右下角
|
||||
var vp = cornerstone.getViewport(e);
|
||||
var rightBottom = $("#" + boxId + "_right-bottom");
|
||||
rightBottom.empty();
|
||||
rightBottom.append("<div class='tag-item'>缩放:" + vp.scale.toFixed(2) + "</div>");
|
||||
rightBottom.append("<div class='tag-item'>" + tagsInfo.width + "x" + tagsInfo.height + "</div>");
|
||||
rightBottom.append("<div class='tag-item'>窗宽:" + tagsInfo.windowWidth + " 窗位:" + tagsInfo.windowCenter + "</div>");
|
||||
}
|
||||
|
||||
//创建视图元素
|
||||
function createElements(rowCount, columnCount,isInit) {
|
||||
var container = document.getElementById('dicom-continer');
|
||||
if (!isInit) {
|
||||
clearChildren(container);
|
||||
}
|
||||
for (var i = 0; i < rowCount; i++) {
|
||||
//生成行
|
||||
var rowDom = document.createElement('div')
|
||||
rowDom.setAttribute("class", "flex-row");
|
||||
for (var j = 0; j < columnCount; j++) {
|
||||
var columnDom = document.createElement('div');
|
||||
columnDom.setAttribute("class", "dicom-img-box");
|
||||
columnDom.setAttribute("id", 'dicom-img-box_' + i + '_' + j)
|
||||
var imgId = 'dicomImage_' + i + '_' + j;
|
||||
$(columnDom).append('<div class="dicom-img" id="' + imgId + '" onclick="changeElement(this)"></div>'
|
||||
+'<div class="slider-container">'
|
||||
+ '<i class="iconfont icon-fangxiangjiantou-shang icon-shang operator" id="' + imgId +'-last_btn" onclick="last(' + imgId +')"></i>'
|
||||
+ '<input type="range" class="lcmf-range lcmf-range-date operator" value="0" id="' + imgId +'-slider" onchange="changeSlider(\'' + imgId + '\',this)" />'
|
||||
+ '<i class="iconfont icon-fangxiangjiantou-xia icon-xia operator" id="' + imgId +'-next_btn" onclick="next(' + imgId +')"></i>'
|
||||
+ '</div>');
|
||||
rowDom.appendChild(columnDom);
|
||||
}
|
||||
container.appendChild(rowDom);
|
||||
}
|
||||
}
|
||||
|
||||
//清理元素
|
||||
function clearChildren(element) {
|
||||
if (element && element.children.length > 0) {
|
||||
for (var i = 0; i < element.children.length; i++) {
|
||||
element.removeChild(element.children[i]);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//创建视图入口
|
||||
function doCreate() {
|
||||
let rowCount = parseInt(document.getElementById('row-count').value);
|
||||
let columnCount = parseInt(document.getElementById('column-count').value);
|
||||
if (stateData.rowCount == rowCount && stateData.columnCount == columnCount) {
|
||||
return;
|
||||
}
|
||||
createElements(rowCount, columnCount, false);
|
||||
|
||||
stateData.rowCount = rowCount;
|
||||
stateData.columnCount = columnCount;
|
||||
stateData.imgIndex = 0;
|
||||
stateData.element = null;
|
||||
stateData.showMapping = new Map()
|
||||
}
|
@ -146,11 +146,11 @@ const getProject = async () => {
|
||||
message: '/reservation/applyform'
|
||||
},
|
||||
{
|
||||
name: '超声报告',
|
||||
name: '超声工作台',
|
||||
message: '/diagnosis/patientexamlistultrasonic'
|
||||
},
|
||||
{
|
||||
name: '影像报告',
|
||||
name: '影像工作台',
|
||||
message: '/diagnosis/patientexamlist'
|
||||
}
|
||||
]
|
||||
|
622
src/views/dicomForm/dicomViewForm.vue
Normal file
622
src/views/dicomForm/dicomViewForm.vue
Normal file
@ -0,0 +1,622 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
class="my-custom-close-icon"
|
||||
:fullscreen="true"
|
||||
>
|
||||
<el-tabs v-model="activeName" type="card" class="demo-tabs">
|
||||
<el-tab-pane label="影像" name="first">
|
||||
<iframe
|
||||
frameborder="0"
|
||||
scrolling="no"
|
||||
:src="newSrc"
|
||||
style="width: 100%; height: 87vh"
|
||||
></iframe>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="报告单" name="second">
|
||||
<!-- 外层 Flex 容器 -->
|
||||
<div style="display: flex; height: 100%">
|
||||
<!-- 模版区域 -->
|
||||
<div style="flex: 1; min-width: 0" class="template-area">
|
||||
<el-select
|
||||
v-model="fordevicemValue"
|
||||
placeholder="请选择模版类别"
|
||||
clearable
|
||||
@change="handleselectchange"
|
||||
@clear="selectclear"
|
||||
>
|
||||
<el-option label="门诊" value="门诊模版" />
|
||||
<el-option label="住院" value="住院模版" />
|
||||
<el-option label="体检" value="体检模版" />
|
||||
</el-select>
|
||||
|
||||
<el-tabs type="border-card" style="height: 83vh">
|
||||
<el-tab-pane label="通用模版">
|
||||
<!-- 树 -->
|
||||
<el-tree
|
||||
style="min-width: 195px"
|
||||
v-loading="formLoading"
|
||||
class="treeStyle"
|
||||
:check-on-click-node="true"
|
||||
:highlight-current="true"
|
||||
:default-expand-all="true"
|
||||
:data="treeData"
|
||||
:props="treeDefaultProps"
|
||||
node-key="id"
|
||||
:show-checkbox="false"
|
||||
:check-strictly="true"
|
||||
@check="handleTreeNodeClick"
|
||||
ref="selectTree"
|
||||
:expand-on-click-node="false"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="私有模版">
|
||||
<!-- 树 -->
|
||||
<el-tree
|
||||
style="min-width: 195px"
|
||||
v-loading="formLoading"
|
||||
class="treeStyle"
|
||||
:check-on-click-node="true"
|
||||
:highlight-current="true"
|
||||
:default-expand-all="true"
|
||||
:data="privateData"
|
||||
:props="treeDefaultProps"
|
||||
node-key="id"
|
||||
:show-checkbox="false"
|
||||
:check-strictly="true"
|
||||
@node-click="handleTreeNodeClick"
|
||||
ref="priselectTree"
|
||||
:expand-on-click-node="false"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
<!-- 用户信息区域 -->
|
||||
<div style="flex: 3; min-width: 0" class="user-info-area">
|
||||
<label style="font-size: 18px; font-weight: bold; margin-left: 50px">患者信息</label>
|
||||
<el-divider />
|
||||
<el-form
|
||||
:model="applyFormVO"
|
||||
label-width="auto"
|
||||
style="max-width: 1000px; margin: auto"
|
||||
:inline="true"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="7">
|
||||
<el-form-item label="检查号" style="font-weight: bold" label-width="110px">
|
||||
<el-input v-model="applyFormVO.examId" style="width: 220px" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="姓名" style="font-weight: bold" label-width="130px">
|
||||
<el-input v-model="applyFormVO.pname" style="width: 220px" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<el-form-item label="性别" style="font-weight: bold" label-width="160px">
|
||||
<el-input v-model="applyFormVO.gender" style="width: 220px" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
<el-form-item label="出生日期" style="font-weight: bold" label-width="110px">
|
||||
<el-date-picker
|
||||
v-model="applyFormVO.birthday"
|
||||
type="date"
|
||||
placeholder="出生日期"
|
||||
size="default"
|
||||
style="width: 220px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查时间" style="font-weight: bold" label-width="130px">
|
||||
<el-date-picker
|
||||
v-model="applyFormVO.examDate"
|
||||
type="datetime"
|
||||
placeholder="检查时间"
|
||||
size="default"
|
||||
style="width: 220px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查项目名称" label-width="160px" style="font-weight: bold">
|
||||
<el-input
|
||||
v-model="applyFormVO.examItemName"
|
||||
style="width: 220px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="7">
|
||||
<el-form-item label="申请时间" style="font-weight: bold" label-width="110px">
|
||||
<el-date-picker
|
||||
v-model="applyFormVO.applicationDate"
|
||||
type="datetime"
|
||||
placeholder="检查时间"
|
||||
size="default"
|
||||
style="width: 220px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="申请单号" style="font-weight: bold" label-width="130px">
|
||||
<el-input v-model="applyFormVO.regId" style="width: 220px" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="送检科室" style="font-weight: bold" label-width="160px">
|
||||
<el-input
|
||||
v-model="applyFormVO.billDoctorDepartment"
|
||||
style="width: 220px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<label style="font-size: 18px; font-weight: bold; margin-left: 50px">影像所见</label>
|
||||
<el-divider />
|
||||
<el-input
|
||||
v-model="sj"
|
||||
style="width: 95%; font-size: 20px; margin-left: 40px; margin-bottom: 3px"
|
||||
:rows="7"
|
||||
type="textarea"
|
||||
placeholder="影像所见"
|
||||
/>
|
||||
<label style="font-size: 18px; font-weight: bold; margin-left: 50px">影像结论</label>
|
||||
<el-divider />
|
||||
<el-input
|
||||
v-model="zdjl"
|
||||
style="width: 95%; font-size: 20px; margin-left: 40px; margin-bottom: 3px"
|
||||
:rows="7"
|
||||
type="textarea"
|
||||
placeholder="影像结论"
|
||||
/>
|
||||
<label style="font-size: 18px; font-weight: bold; margin-left: 50px">报告备注</label>
|
||||
<el-divider />
|
||||
<el-input
|
||||
v-model="notes"
|
||||
style="
|
||||
width: 95%;
|
||||
font-size: 19px;
|
||||
margin-left: 40px;
|
||||
margin-top: 6px;
|
||||
margin-bottom: 6px;
|
||||
"
|
||||
placeholder=""
|
||||
/>
|
||||
<el-divider />
|
||||
|
||||
<el-radio-group
|
||||
v-model="radio1"
|
||||
size="small"
|
||||
class="radio-group-wrapper"
|
||||
@dblclick="cancelSelection"
|
||||
>
|
||||
<el-radio-button label="阴性" value="0" />
|
||||
<el-radio-button label="阳性" value="1" />
|
||||
</el-radio-group>
|
||||
<el-divider />
|
||||
<div class="form-row">
|
||||
<el-form-item label="诊断医生" class="form-item">
|
||||
<el-input v-model="applyFormVO.diagDoctor" style="width: 180px" :disabled="true" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核医生" class="form-item">
|
||||
<el-input
|
||||
v-model="applyFormVO.reviewDoctor"
|
||||
style="width: 180px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="报告状态" class="form-item">
|
||||
<el-input
|
||||
v-model="applyFormVO.reportstatus"
|
||||
style="width: 180px"
|
||||
:disabled="true"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div style="position: absolute; bottom: 0; right: 0">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
style="width: 80px; float: right; margin-right: 15px; margin-top: 13px"
|
||||
@click="save"
|
||||
:disabled="savedisabled"
|
||||
>保存</el-button
|
||||
>
|
||||
<!-- v-show="examinedisabled" -->
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
v-show="examinedisabled"
|
||||
style="width: 80px; float: right; margin-right: 15px; margin-top: 13px"
|
||||
@click="examine"
|
||||
>审核</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-dialog>
|
||||
<!-- </Dialog> -->
|
||||
<!-- 弹窗-->
|
||||
<el-dialog v-model="dialogTableVisible" title="选择结论添加方式" width="320" align-center>
|
||||
<div>
|
||||
<el-button @click="handleButtonClick('覆盖')" type="primary" style="font-size: 20px"
|
||||
>覆盖</el-button
|
||||
>
|
||||
<el-button @click="handleButtonClick('追加')" type="success" style="font-size: 20px"
|
||||
>追加</el-button
|
||||
>
|
||||
<el-button @click="dialogTableVisible = false" type="info" style="font-size: 20px"
|
||||
>关闭</el-button
|
||||
>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ApplyformApi, ApplyformVO, UPFJApplyformVO } from '@/api/applyregistration/applyform'
|
||||
import { ultrasoniccomApi, updateexamineimageVO } from '@/api/ultrasoniccom'
|
||||
|
||||
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist'
|
||||
import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
||||
|
||||
/** dicom */
|
||||
defineOptions({ name: 'DicomViewForm' })
|
||||
|
||||
const Profilevo = ref<ProfileVO>({} as ProfileVO) //当前登录人信息
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
const upFJApplyformVO = ref<UPFJApplyformVO[]>([])
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const examineFormVO = ref<PatientexamlistVO>({} as PatientexamlistVO)
|
||||
const savedisabled = ref(true) //保存按钮是否可用
|
||||
const examinedisabled = ref(false) //审核按钮是否可见
|
||||
const isImageLoaded = ref(false) //是否展示图片清除按钮
|
||||
const isImageLoaded2 = ref(false) //是否展示图片清除按钮
|
||||
const isImageLoaded3 = ref(false) //是否展示图片清除按钮
|
||||
|
||||
//点击节点更新使用时间
|
||||
const clickuptime = async (pid: string) => {
|
||||
await ultrasoniccomApi.upreporttemplatetime(pid)
|
||||
}
|
||||
|
||||
// 是否弹窗
|
||||
const dialogTableVisible = ref(false)
|
||||
//表示自定义弹窗点击的按钮名称
|
||||
const btncleckname = ref()
|
||||
//自定义弹窗点击方法 获取按钮名称
|
||||
const handleButtonClick = (buttonName) => {
|
||||
if (buttonName == '覆盖') {
|
||||
zdjl.value = strzdjl
|
||||
sj.value = strsj
|
||||
} else if (buttonName == '追加') {
|
||||
let lszdjl: string = zdjl.value
|
||||
let lssj: string = sj.value
|
||||
zdjl.value = lszdjl + strzdjl
|
||||
sj.value = lssj + strsj
|
||||
}
|
||||
dialogTableVisible.value = false
|
||||
console.log('获取到父节点' + pid)
|
||||
clickuptime(pid)
|
||||
}
|
||||
|
||||
//调用删除or更新标识实体集合
|
||||
const updateexamineimage = ref<updateexamineimageVO[]>([])
|
||||
|
||||
//备注
|
||||
const notes = ref()
|
||||
//保存
|
||||
const save = async () => {
|
||||
try {
|
||||
// 二次确认
|
||||
await message.delConfirm('是否进行保存', '确认')
|
||||
let timesta = new Date()
|
||||
var localDateTime = new Date(timesta.getTime()).toISOString() // 转换为ISO格式的字符串
|
||||
localDateTime = localDateTime.slice(0, localDateTime.length - 1)
|
||||
console.log('当前时间' + localDateTime)
|
||||
examineFormVO.value.id = ID.toString()
|
||||
examineFormVO.value.examDescription = sj.value
|
||||
examineFormVO.value.diagResults = zdjl.value
|
||||
examineFormVO.value.notes = notes.value
|
||||
examineFormVO.value.diagFlag = radio1.value
|
||||
examineFormVO.value.diagDoctor = Profilevo.value.username
|
||||
// examineFormVO.value.reviewDoctor = Profilevo.value.username
|
||||
examineFormVO.value.reportstatus = '已分析'
|
||||
// examineFormVO.value.diagDate=localDateTime
|
||||
// examineFormVO.value.reviewDate=dateTime
|
||||
|
||||
const response = await PatientexamlistApi.examineupdatelist(examineFormVO.value)
|
||||
// 根据code判断接口调用是否成功
|
||||
if (response) {
|
||||
message.alertSuccess('保存成功')
|
||||
// 接口调用成功,可以根据需要处理返回的data数据
|
||||
console.log('接口调用成功')
|
||||
console.log('data:', response.data)
|
||||
//查询患者信息 根据ID
|
||||
getPatientexamlist(ID)
|
||||
//处理选择的图片
|
||||
isImageLoaded.value = false
|
||||
isImageLoaded2.value = false
|
||||
isImageLoaded3.value = false
|
||||
emit('success')
|
||||
} else {
|
||||
// 接口调用失败,根据具体情况处理错误
|
||||
console.error('接口调用失败:', response.msg)
|
||||
}
|
||||
} catch (error) {
|
||||
// 处理异常情况,例如接口调用失败或其他错误
|
||||
console.error('接口调用失败:', error)
|
||||
}
|
||||
}
|
||||
// 审核
|
||||
const examine = async () => {
|
||||
if (applyFormVO.value.reportstatus === '已分析') {
|
||||
const response = await PatientexamlistApi.examine(ID.toString())
|
||||
if (response) {
|
||||
message.alertSuccess('审核成功')
|
||||
|
||||
//查询患者信息 根据ID
|
||||
getPatientexamlist(ID)
|
||||
emit('success')
|
||||
}
|
||||
} else if (applyFormVO.value.reportstatus === '已审核') {
|
||||
message.warning('已经审核,无需再次审核')
|
||||
return
|
||||
} else {
|
||||
message.warning('请先进行保存')
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 计算年龄
|
||||
const age = ref()
|
||||
const calculateAge = (birthdate) => {
|
||||
if (!birthdate) {
|
||||
age.value = null
|
||||
return
|
||||
}
|
||||
|
||||
const today = new Date()
|
||||
const birth = new Date(birthdate)
|
||||
|
||||
let yearsDiff = today.getFullYear() - birth.getFullYear()
|
||||
|
||||
// Check if the birthday hasn't occurred yet this year
|
||||
const hasBirthdayPassed =
|
||||
today.getMonth() > birth.getMonth() ||
|
||||
(today.getMonth() === birth.getMonth() && today.getDate() >= birth.getDate())
|
||||
|
||||
if (!hasBirthdayPassed) {
|
||||
yearsDiff--
|
||||
}
|
||||
|
||||
age.value = yearsDiff
|
||||
}
|
||||
|
||||
//基本信息
|
||||
const applyFormVO = ref<PatientexamlistVO>({} as PatientexamlistVO)
|
||||
//下拉模版类别
|
||||
const fordevicemValue = ref('')
|
||||
//下拉清除
|
||||
const selectclear = async () => {
|
||||
//选择模版后 刷新接口
|
||||
//通用
|
||||
const dd = await ultrasoniccomApi.getreporttemplatelist('', '', '')
|
||||
treeData.value = dd
|
||||
|
||||
const pridate = await ultrasoniccomApi.getreporttemplatelist('', '', '1')
|
||||
privateData.value = pridate
|
||||
}
|
||||
const fordevicemData = ref<any[]>([])
|
||||
|
||||
const formRules = reactive({})
|
||||
const formRef = ref() // 表单 Ref
|
||||
//用户信息的table页
|
||||
const activeName = ref('first')
|
||||
|
||||
//阴性阳性
|
||||
const radio1 = ref('')
|
||||
const cancelSelection = () => {
|
||||
radio1.value = ''
|
||||
}
|
||||
//诊断结论
|
||||
const zdjl = ref('')
|
||||
//所见
|
||||
const sj = ref('')
|
||||
|
||||
//树相关
|
||||
const selectTree = ref()
|
||||
// 通用树数据
|
||||
const treeData = ref([])
|
||||
// 私有树数据
|
||||
const privateData = ref([])
|
||||
// 树配置项
|
||||
const treeDefaultProps = {
|
||||
children: 'children',
|
||||
label: 'tempname'
|
||||
}
|
||||
//当前选中节点的值
|
||||
let strzdjl: string = ''
|
||||
let strsj: string = ''
|
||||
let pid: string = '' //当前节点的父id
|
||||
// 树节点选中事件
|
||||
const handleTreeNodeClick = async (data) => {
|
||||
strzdjl = data.diagResults
|
||||
strsj = data.examDescription
|
||||
pid = data.pid
|
||||
console.log('父节点' + data.pid)
|
||||
dialogTableVisible.value = true
|
||||
}
|
||||
//下拉选择事件
|
||||
const handleselectchange = async () => {
|
||||
console.log(fordevicemValue.value)
|
||||
|
||||
if (fordevicemValue.value) {
|
||||
//选择模版后 刷新接口
|
||||
//通用
|
||||
const dd = await ultrasoniccomApi.getreporttemplatelist('', String(fordevicemValue.value), '')
|
||||
treeData.value = dd
|
||||
|
||||
const pridate = await ultrasoniccomApi.getreporttemplatelist(
|
||||
'',
|
||||
String(fordevicemValue.value),
|
||||
'1'
|
||||
)
|
||||
privateData.value = pridate
|
||||
}
|
||||
}
|
||||
//患者主键
|
||||
let ID: number
|
||||
//orgid
|
||||
const orgId = ref('')
|
||||
|
||||
//regid
|
||||
const regId = ref('')
|
||||
//内嵌网页加载增加时间戳 防止缓存
|
||||
const newSrc=ref('');
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number, orgid: string, regid: string) => {
|
||||
resetForm()
|
||||
const Src = `/public/dicom/dicomViewPc1.html?t=${new Date().getTime()}`;
|
||||
newSrc.value=Src
|
||||
|
||||
console.log('orgid' + orgid)
|
||||
console.log('regid' + regid)
|
||||
console.log('id' + id)
|
||||
orgId.value = orgid
|
||||
regId.value = regid
|
||||
ID = id
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = '书写报告(影像)'
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
//通用
|
||||
const dd = await ultrasoniccomApi.getreporttemplatelist('', String(fordevicemValue.value), '')
|
||||
treeData.value = dd
|
||||
console.log('返回值1' + dd)
|
||||
console.log('返回值2' + treeData.value)
|
||||
//私有
|
||||
const pridate = await ultrasoniccomApi.getreporttemplatelist(
|
||||
'',
|
||||
String(fordevicemValue.value),
|
||||
'1'
|
||||
)
|
||||
privateData.value = pridate
|
||||
//查询患者信息 根据ID
|
||||
getPatientexamlist(id)
|
||||
//给打开的内嵌html 传递参数
|
||||
var localData = {
|
||||
regid: regid, // 这里的 'someNumber' 应该替换为实际的数值
|
||||
orgId: orgid // 这里的 'someOrgId' 应该替换为实际的组织ID
|
||||
}
|
||||
// 将对象转换为JSON字符串
|
||||
var localStorageData = JSON.stringify(localData);
|
||||
localStorage.setItem('data', localStorageData)
|
||||
//获取登录人信息
|
||||
getlogininfo()
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
//查询患者信息 根据ID
|
||||
const getPatientexamlist = async (id: number) => {
|
||||
const data = await PatientexamlistApi.getPatientexamlist(id)
|
||||
applyFormVO.value = data
|
||||
//阳性阴性 赋值
|
||||
radio1.value = applyFormVO.value.diagFlag
|
||||
zdjl.value = applyFormVO.value.diagResults
|
||||
sj.value = applyFormVO.value.examDescription
|
||||
notes.value = applyFormVO.value.notes
|
||||
calculateAge(applyFormVO.value.birthday)
|
||||
|
||||
if (applyFormVO.value.reportstatus == '已分检' || applyFormVO.value.reportstatus == '待分析') {
|
||||
savedisabled.value = false
|
||||
} else {
|
||||
savedisabled.value = true
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
//打印方法 暂时不需要 使用v-print
|
||||
const PrintForm = () => {
|
||||
// window.print()
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
}
|
||||
//获取当前登录人信息
|
||||
const getlogininfo = async () => {
|
||||
Profilevo.value = await getUserProfile()
|
||||
console.log('审核是否可见' + Profilevo.value.isexamine)
|
||||
if (Profilevo.value.isexamine === '1') {
|
||||
examinedisabled.value = true
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
applyFormVO.value = {} as PatientexamlistVO
|
||||
pid = ''
|
||||
strzdjl = ''
|
||||
strsj = ''
|
||||
activeName.value = 'first'
|
||||
updateexamineimage.value = []
|
||||
|
||||
selectTree.value = ''
|
||||
treeData.value = []
|
||||
privateData.value = []
|
||||
fordevicemData.value = []
|
||||
fordevicemValue.value = ''
|
||||
upFJApplyformVO.value = []
|
||||
formRef.value?.resetFields()
|
||||
orgId.value = ''
|
||||
regId.value = ''
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.my-container {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
/* 报告区域 左侧模版选择字体大小 */
|
||||
.treeStyle {
|
||||
font-size: 20px;
|
||||
}
|
||||
/* 分割线内部的间距 */
|
||||
.el-divider--horizontal {
|
||||
margin: 6px;
|
||||
}
|
||||
/* 阴性 阳性 */
|
||||
.radio-group-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-top: 10px; /* 调整上方外边距 */
|
||||
margin-right: 33px;
|
||||
}
|
||||
|
||||
/* 诊断医生等样式 */
|
||||
.form-row {
|
||||
display: flex;
|
||||
justify-content: space-around; /* 将元素左右对齐 */
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
@ -395,10 +395,8 @@
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<PatientexamlistForm ref="formRef" @success="getList" />
|
||||
<!-- 表单弹窗:超声组件 -->
|
||||
<Ultrasonic ref="ultrasonic" @success="getList" />
|
||||
<!-- 表单弹窗:影像组件 -->
|
||||
<DicomViewForm ref="dicomViewRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@ -406,7 +404,7 @@ import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { PatientexamlistApi, PatientexamlistVO } from '@/api/tblist/patientexamlist'
|
||||
import PatientexamlistForm from './PatientexamlistForm.vue'
|
||||
import Ultrasonic from '/src/views/ultrasoniccom/ultrasonicForm.vue'
|
||||
import DicomViewForm from '/src/views/dicomForm/dicomViewForm.vue'
|
||||
|
||||
/** PACS检查列表 列表 */
|
||||
defineOptions({ name: 'Patientexamlist' })
|
||||
@ -447,19 +445,18 @@ const queryParams = reactive({
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 超声组件 */
|
||||
const ultrasonic = ref()
|
||||
const openultrForm = (id: number, orgid: string, regid: string) => {
|
||||
ultrasonic.value.open(id, orgid, regid)
|
||||
/** 影像组件 */
|
||||
const dicomViewRef = ref()
|
||||
const opendicomViewFrom= (id: number, orgid: string, regid: string) => {
|
||||
dicomViewRef.value.open(id, orgid, regid)
|
||||
}
|
||||
/** 表格行点击 */
|
||||
const clickNumber = ref(0)
|
||||
function handleEdit(row) {
|
||||
console.log(111111121212)
|
||||
openultrForm(row.id, row.orgId, row.regId)
|
||||
if(row.deviceType!="US")//US是超声类
|
||||
{
|
||||
openultrForm(row.id,row.orgId,row.regId)
|
||||
opendicomViewFrom(row.id,row.orgId,row.regId)
|
||||
}
|
||||
|
||||
|
||||
|
@ -27,11 +27,11 @@
|
||||
<el-option label="体检" value="体检模版" />
|
||||
</el-select>
|
||||
|
||||
<el-tabs type="border-card" style="height: calc(100% - 32px)">
|
||||
<el-tabs type="border-card" style="height: calc(100% - 32px); ">
|
||||
<el-tab-pane label="通用模版">
|
||||
<!-- 树 -->
|
||||
<el-tree
|
||||
style="min-width: 195px"
|
||||
style="min-width: 195px;"
|
||||
v-loading="formLoading"
|
||||
class="treeStyle"
|
||||
:check-on-click-node="true"
|
||||
@ -75,20 +75,20 @@
|
||||
v-model="activeName"
|
||||
class="demo-tabs"
|
||||
type="border-card"
|
||||
style="height: 100%"
|
||||
style="height: 1020px"
|
||||
@tab-change="handleTabChange"
|
||||
>
|
||||
<el-tab-pane label="用户信息" name="first">
|
||||
<div class="my-app-container">
|
||||
<el-tab-pane label="用户信息" name="first" >
|
||||
<div class="my-app-container" >
|
||||
<el-form
|
||||
:model="applyFormVO"
|
||||
label-width="auto"
|
||||
style="max-width: 900px"
|
||||
style="max-width: 900px;"
|
||||
:inline="true"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="7">
|
||||
<el-form-item label="检查号" style="font-weight: bold">
|
||||
<el-form-item label="检查号" style="font-weight: bold;">
|
||||
<el-input
|
||||
v-model="applyFormVO.examId"
|
||||
style="width: 190px"
|
||||
@ -97,12 +97,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="姓名" style="font-weight: bold">
|
||||
<el-form-item label="姓名" style="font-weight: bold;">
|
||||
<el-input v-model="applyFormVO.pname" style="width: 190px" :disabled="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<el-form-item label="性别" style="font-weight: bold">
|
||||
<el-form-item label="性别" style="font-weight: bold;">
|
||||
<el-input
|
||||
v-model="applyFormVO.gender"
|
||||
style="width: 190px"
|
||||
@ -177,39 +177,86 @@
|
||||
<el-divider />
|
||||
<!--图片显示区域-->
|
||||
<div class="demo-image">
|
||||
<el-button
|
||||
type="danger"
|
||||
circle
|
||||
style="width: 21px; height: 21px"
|
||||
@click="deleteimage('1')"
|
||||
:icon="Delete"
|
||||
v-if="isImageLoaded"
|
||||
/>
|
||||
<el-card style="max-width: 180px">
|
||||
<el-image
|
||||
style="width: 100px; height: 100px"
|
||||
:src="selecteimagedone"
|
||||
fit="fill"
|
||||
fit="cover"
|
||||
:preview-src-list="[selecteimagedone]"
|
||||
@load="handleLoad('1')"
|
||||
@error="handleError('1')"
|
||||
@dblclick="deleteimage('1')"
|
||||
/>
|
||||
>
|
||||
<template #error>
|
||||
<div class="image-error">
|
||||
<!-- <span>自定义加载失败提示</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</el-card>
|
||||
|
||||
<el-button
|
||||
type="danger"
|
||||
circle
|
||||
style="width: 21px; height: 21px"
|
||||
@click="deleteimage('2')"
|
||||
:icon="Delete"
|
||||
v-if="isImageLoaded2"
|
||||
/>
|
||||
<el-card style="max-width: 180px">
|
||||
<el-image
|
||||
style="width: 100px; height: 100px"
|
||||
:src="selecteimagedtwo"
|
||||
:preview-src-list="[selecteimagedtwo]"
|
||||
fit="fill"
|
||||
@dblclick="deleteimage('2')"
|
||||
/>
|
||||
@load="handleLoad('2')"
|
||||
@error="handleError('2')"
|
||||
>
|
||||
<template #error>
|
||||
<div class="image-error">
|
||||
<!-- <span>自定义加载失败提示</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</el-card>
|
||||
|
||||
<el-button
|
||||
type="danger"
|
||||
circle
|
||||
style="width: 21px; height: 21px"
|
||||
@click="deleteimage('3')"
|
||||
:icon="Delete"
|
||||
v-if="isImageLoaded3"
|
||||
/>
|
||||
<el-card style="max-width: 180px">
|
||||
<el-image
|
||||
style="width: 100px; height: 100px"
|
||||
:src="selecteimagedthree"
|
||||
:preview-src-list="[selecteimagedthree]"
|
||||
fit="fill"
|
||||
@dblclick="deleteimage('3')"
|
||||
/>
|
||||
@load="handleLoad('3')"
|
||||
@error="handleError('3')"
|
||||
>
|
||||
<template #error>
|
||||
<div class="image-error">
|
||||
<!-- <span>自定义加载失败提示</span> -->
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</el-card>
|
||||
</div>
|
||||
<el-divider />
|
||||
<label style="text-align: center; font-size: 17px; font-weight: bold">检查所见</label>
|
||||
<el-input
|
||||
v-model="sj"
|
||||
style="width: 100%"
|
||||
:rows="8"
|
||||
style="width: 100%;font-size:19px;"
|
||||
:rows="5"
|
||||
type="textarea"
|
||||
placeholder="检查所见"
|
||||
/>
|
||||
@ -217,14 +264,14 @@
|
||||
<label style="font-size: 17px; font-weight: bold">诊断结论</label>
|
||||
<el-input
|
||||
v-model="zdjl"
|
||||
style="width: 100%"
|
||||
:rows="8"
|
||||
style="width: 100%;font-size:19px;"
|
||||
:rows="5"
|
||||
type="textarea"
|
||||
placeholder="诊断结论"
|
||||
/>
|
||||
<el-divider />
|
||||
<label style="font-size: 17px; font-weight: bold">报告备注</label>
|
||||
<el-input v-model="notes" style="width: 100%" placeholder="" />
|
||||
<el-input v-model="notes" style="width: 100%;font-size:19px;" placeholder="" />
|
||||
<el-radio-group
|
||||
v-model="radio1"
|
||||
size="small"
|
||||
@ -272,9 +319,9 @@
|
||||
>审核</el-button
|
||||
>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="报告" name="report">
|
||||
<el-tab-pane label="报告" name="report" >
|
||||
<!--报告区域-->
|
||||
<div class="flex-center" id="printMe" style="height: 100%">
|
||||
<div class="flex-center" id="printMe" style="height: calc(100% - 15px)">
|
||||
<div class="ultrasound-report" id="PDF">
|
||||
<h2>超声检查报告单</h2>
|
||||
<hr />
|
||||
@ -334,7 +381,7 @@
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div class="my-right" style="border: 1px solid #dcdfe6; height: 100%">
|
||||
<div class="my-right" style="border: 1px solid #dcdfe6; height: 1020px">
|
||||
<!--图片区域-->
|
||||
<div style="width: 100%">
|
||||
<el-button
|
||||
@ -351,7 +398,7 @@
|
||||
type="primary"
|
||||
plain
|
||||
style="width: 100%"
|
||||
@click="getimages"
|
||||
@click="getimages('')"
|
||||
:disabled="savedisabled"
|
||||
>图像刷新</el-button
|
||||
>
|
||||
@ -396,7 +443,7 @@ import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
|
||||
import { getNowDateTimeS } from '@/utils/formatTime'
|
||||
import print from 'vue3-print-nb'
|
||||
import htmlToPdf from '@/utils/htmlPdf'
|
||||
|
||||
import { Check, Delete, Edit, Message, Search, Star } from '@element-plus/icons-vue'
|
||||
/** 超声组件 */
|
||||
defineOptions({ name: 'Ultrasonic' })
|
||||
|
||||
@ -410,6 +457,48 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
||||
const examineFormVO = ref<PatientexamlistVO>({} as PatientexamlistVO)
|
||||
const savedisabled = ref(true) //保存按钮是否可用
|
||||
const examinedisabled = ref(false) //审核按钮是否可见
|
||||
const isImageLoaded = ref(false) //是否展示图片清除按钮
|
||||
const isImageLoaded2 = ref(false) //是否展示图片清除按钮
|
||||
const isImageLoaded3 = ref(false) //是否展示图片清除按钮
|
||||
|
||||
// 中间的选择图加载和失败事件
|
||||
const handleLoad = (id: string) => {
|
||||
if (applyFormVO.value.reportstatus == '已分析' || applyFormVO.value.reportstatus == '已审核') {
|
||||
|
||||
isImageLoaded.value = false
|
||||
isImageLoaded2.value = false
|
||||
isImageLoaded3.value = false
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (id) {
|
||||
case '1':
|
||||
isImageLoaded.value = true
|
||||
break
|
||||
case '2':
|
||||
isImageLoaded2.value = true
|
||||
break
|
||||
case '3':
|
||||
isImageLoaded3.value = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
const handleError = (id: string) => {
|
||||
switch (id) {
|
||||
case '1':
|
||||
isImageLoaded.value = false
|
||||
break
|
||||
case '2':
|
||||
isImageLoaded2.value = false
|
||||
break
|
||||
case '3':
|
||||
isImageLoaded3.value = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
//点击节点更新使用时间
|
||||
const clickuptime = async (pid: string) => {
|
||||
await ultrasoniccomApi.upreporttemplatetime(pid)
|
||||
@ -476,6 +565,10 @@ const save = async () => {
|
||||
console.log('data:', response.data)
|
||||
//查询患者信息 根据ID
|
||||
getPatientexamlist(ID)
|
||||
//处理选择的图片
|
||||
isImageLoaded.value = false
|
||||
isImageLoaded2.value = false
|
||||
isImageLoaded3.value = false
|
||||
emit('success')
|
||||
} else {
|
||||
// 接口调用失败,根据具体情况处理错误
|
||||
@ -533,11 +626,35 @@ const images = ref<any[]>([])
|
||||
//报告的查询
|
||||
const reportimages = ref<any[]>([])
|
||||
//查询图片
|
||||
const getimages = async () => {
|
||||
const imageslist = await ultrasoniccomApi.getimageslist(orgId.value, regId.value, '')
|
||||
const getimages = async (type:string) => {
|
||||
const imageslist = await ultrasoniccomApi.getimageslist(orgId.value, regId.value, type)
|
||||
console.log(imageslist)
|
||||
images.value = imageslist
|
||||
}
|
||||
// 在打开窗体的时候如果他是已经审核的状态或者已经分析的状态 加载选择的三个图片
|
||||
const loadimage =async () => {
|
||||
if (applyFormVO.value.reportstatus == '已分析' || applyFormVO.value.reportstatus == '已审核') {
|
||||
|
||||
const imageslist = await ultrasoniccomApi.getimageslist(orgId.value, regId.value, '1')
|
||||
if (imageslist.length > 0) {
|
||||
imageslist.forEach((image, index) => {
|
||||
switch (index) {
|
||||
case 0:
|
||||
selecteimagedone.value = image.imgUrl
|
||||
break
|
||||
case 1:
|
||||
selecteimagedtwo.value = image.imgUrl
|
||||
break
|
||||
case 2:
|
||||
selecteimagedthree.value = image.imgUrl
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 选择图片
|
||||
const selectImage = (imageUrl: string, id: number) => {
|
||||
console.log(imageUrl)
|
||||
console.log(id)
|
||||
@ -750,6 +867,7 @@ const orgId = ref('')
|
||||
|
||||
//regid
|
||||
const regId = ref('')
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (id: number, orgid: string, regid: string) => {
|
||||
resetForm()
|
||||
@ -782,6 +900,7 @@ const open = async (id: number, orgid: string, regid: string) => {
|
||||
|
||||
//获取登录人信息
|
||||
getlogininfo()
|
||||
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
@ -800,6 +919,8 @@ const getPatientexamlist = async (id: number) => {
|
||||
if (applyFormVO.value.reportstatus == '已分检' || applyFormVO.value.reportstatus == '待分析') {
|
||||
savedisabled.value = false
|
||||
} else {
|
||||
//获取选中图
|
||||
loadimage()
|
||||
savedisabled.value = true
|
||||
}
|
||||
}
|
||||
@ -817,7 +938,7 @@ const PrintForm = () => {
|
||||
//获取当前登录人信息
|
||||
const getlogininfo = async () => {
|
||||
Profilevo.value = await getUserProfile()
|
||||
console.log("审核是否可见"+Profilevo.value.isexamine)
|
||||
console.log('审核是否可见' + Profilevo.value.isexamine)
|
||||
if (Profilevo.value.isexamine === '1') {
|
||||
examinedisabled.value = true
|
||||
}
|
||||
@ -873,22 +994,29 @@ const chooseImage = (event, id: number) => {
|
||||
<style>
|
||||
.my-container {
|
||||
display: flex;
|
||||
height: 1200px;
|
||||
height: calc(100% - 40px);
|
||||
}
|
||||
|
||||
.my-container * {
|
||||
font-size: 15px;
|
||||
/* .my-container * {
|
||||
font-size: 16px;
|
||||
} */
|
||||
|
||||
/* 给 my-left 内的元素一个特定的类名 */
|
||||
.my-container .my-left .treeStyle {
|
||||
font-size: 19px; /* 或者你想要的字体大小 */
|
||||
}
|
||||
|
||||
.my-left {
|
||||
width: 20%;
|
||||
background: lightblue;
|
||||
height: 1020px;
|
||||
}
|
||||
|
||||
.my-middle {
|
||||
width: 60%;
|
||||
margin-left: 2px;
|
||||
background: rgb(238, 240, 238);
|
||||
height: calc(100% - 60px);
|
||||
}
|
||||
|
||||
.my-right {
|
||||
@ -897,20 +1025,15 @@ const chooseImage = (event, id: number) => {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
height: 1016px;
|
||||
}
|
||||
.custom-dialog {
|
||||
width: 1500px; /* 设置宽度 */
|
||||
height: 1100px; /* 设置高度 */
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
.my-app-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
|
||||
.demo-image {
|
||||
@ -928,6 +1051,7 @@ const chooseImage = (event, id: number) => {
|
||||
}
|
||||
/* 右侧图片列表样式 */
|
||||
.image-container {
|
||||
overflow-y: auto;
|
||||
/* 添加一些外边距来控制图像容器与周围元素之间的间距 */
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
@ -948,7 +1072,7 @@ const chooseImage = (event, id: number) => {
|
||||
.image-item {
|
||||
/* 可选:设置图像的宽度和高度 */
|
||||
width: 80%;
|
||||
height: 80%;
|
||||
height: auto;
|
||||
cursor: pointer;
|
||||
transition: transform 0.3s ease; /* 添加过渡效果 */
|
||||
}
|
||||
@ -988,7 +1112,7 @@ const chooseImage = (event, id: number) => {
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 8px;
|
||||
position: relative;
|
||||
height: 900px;
|
||||
height: 800px;
|
||||
}
|
||||
|
||||
.ultrasound-report h1,
|
||||
@ -1041,4 +1165,15 @@ const chooseImage = (event, id: number) => {
|
||||
font-size: 40px; /* 自定义图标大小 */
|
||||
color: red; /* 自定义图标颜色 */
|
||||
}
|
||||
/* 用户、报告 */
|
||||
.el-tabs__content
|
||||
{
|
||||
height: 970px;
|
||||
}
|
||||
.el-divider--horizontal
|
||||
{
|
||||
margin: 16px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user