Merge branch 'main' into uat_us
commit
577bbcd182
|
|
@ -1 +1 @@
|
||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1751350116150" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20392" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M870.4 819.2a51.2 51.2 0 1 1 0 102.4 51.2 51.2 0 0 1 0-102.4zM512 179.2a332.8 332.8 0 1 1 0 665.6 332.8 332.8 0 0 1 0-665.6z m0 51.2a281.6 281.6 0 1 0 0 563.2 281.6 281.6 0 0 0 0-563.2zM153.6 102.4a51.2 51.2 0 1 1 0 102.4 51.2 51.2 0 0 1 0-102.4z" fill="#ADAEB8" p-id="20393"></path></svg>
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1597744457882" class="icon" viewBox="0 0 1170 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10125" width="285.64453125" height="250" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M926.216214 404.588947l1.511115-151.84272H1079.570048c18.035893 0 33.098301-15.062408 33.098301-33.0983a33.390775 33.390775 0 0 0-33.098301-33.098301H927.727329V33.195792a33.390775 33.390775 0 0 0-33.049555-33.049555 33.390775 33.390775 0 0 0-33.0983 33.049555c0 3.022231 0 4.533346 1.511115 7.555577v144.287142H711.24787a33.390775 33.390775 0 0 0-33.098301 33.147046c0 18.035893 15.062408 33.049555 33.098301 33.049555H863.090589v139.802542c0 3.022231-1.46237 4.533346-1.46237 7.506831 0 18.035893 15.013662 33.098301 33.049555 33.098301 15.013662 1.46237 28.564955-10.529062 31.53844-27.053839zM1032.969201 790.995763a29.393631 29.393631 0 0 0-22.520493 10.480316 546.000095 546.000095 0 0 1-117.282049 88.717095 29.101157 29.101157 0 0 0-15.062408 25.591469c0 16.524777 13.551292 30.027324 30.07607 30.027324 4.533346 0 10.529062-1.46237 13.551292-2.973485 1.46237 0 1.46237-1.511115 1.46237-1.511115a523.235874 523.235874 0 0 0 127.811111-97.735041c6.044461-5.995716 10.529062-13.551292 10.529061-22.569238a28.028752 28.028752 0 0 0-28.564954-30.027325zM793.920503 935.282906c-2.973485 0-7.506831 0-10.529062 1.511115-46.600847 15.062408-96.223925 24.080354-145.798258 27.053839-15.062408 1.511115-25.59147 15.062408-25.591469 30.07607 0 16.573523 13.551292 30.07607 30.07607 30.07607 55.618794-4.4846 108.215357-13.502547 159.398295-30.07607a28.95492 28.95492 0 0 0 22.520494-28.564954 30.173561 30.173561 0 0 0-30.07607-30.07607zM535.324796 960.874375c-12.040177-1.511115-24.031609-1.511115-36.071785-3.02223a564.962155 564.962155 0 0 1-49.623078-7.506832c-230.030752-45.089732-389.380302-202.976912-389.380302-380.362355 0-139.851288 99.19741-269.124768 260.106822-339.805969 13.502547-5.995716 27.053839-12.040177 40.556386-16.573523 10.529062-4.4846 22.569239-7.506831 33.0983-10.480317 12.040177-4.533346 21.058123-15.062408 21.058124-28.564954a30.173561 30.173561 0 0 0-30.07607-30.07607 25.396487 25.396487 0 0 0-15.062408 4.4846c-10.529062 3.022231-19.498262 6.044461-28.564955 9.017947l-45.089732 18.035893C114.357309 254.257343 0.097491 406.148808 0.097491 568.471843c0 207.510258 180.407674 387.917932 439.00338 440.563241l54.107679 9.017946c12.040177 1.46237 25.59147 3.022231 37.631646 3.022231h1.46237c16.573523 0 30.07607-13.551292 30.07607-30.07607a30.758509 30.758509 0 0 0-27.05384-30.07607zM1169.798258 569.982958a30.173561 30.173561 0 0 0-30.07607-30.07607 30.173561 30.173561 0 0 0-30.07607 30.07607v1.46237c0 46.649593-10.529062 93.25044-33.049555 136.829057-1.511115 3.022231-1.511115 7.506831-1.511115 12.040177 0 16.573523 13.551292 30.07607 30.07607 30.07607 13.502547 0 24.031609-9.017946 28.564954-21.058124a361.985243 361.985243 0 0 0 36.071786-157.88718v-1.46237z" p-id="10126"></path><path d="M1052.516209 297.835959c-5.995716-4.533346-13.502547-9.017946-22.520493-9.017946a30.173561 30.173561 0 0 0-30.07607 30.07607c0 7.506831 2.973485 15.013662 9.017946 21.009378a375.14657 375.14657 0 0 1 79.699148 118.793164c4.4846 10.529062 15.013662 19.547008 27.053839 19.547008 16.524777 0 30.07607-13.551292 30.07607-30.07607 0-4.4846-1.511115-7.506831-3.02223-12.040177a422.039891 422.039891 0 0 0-90.179464-138.291427zM666.158138 182.065026h4.4846c16.573523 0 30.07607-13.551292 30.07607-30.07607 0-15.013662-12.040177-28.564955-27.053839-28.564954v-1.46237a761.602133 761.602133 0 0 0-154.86495-1.559861h-3.022231a30.173561 30.173561 0 0 0-30.07607 30.07607c0 16.573523 13.551292 30.07607 30.07607 30.07607h3.022231v1.462369c46.600847-5.94697 97.735041-4.4846 147.358119 0z" p-id="10127"></path></svg>
|
||||||
|
Before Width: | Height: | Size: 623 B After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1777352764855" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10736" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M587.808 383.392l-102.208 102.208A37.472 37.472 0 0 0 512 549.408a36.288 36.288 0 0 0 26.272-11.104l315.84-315.232a454.976 454.976 0 1 0 43.52 61.888l-54.688 54.752a372.704 372.704 0 1 1-94.816-116.928l-106.56 106.496-53.792 54.144z" p-id="10737"></path></svg>
|
||||||
|
After Width: | Height: | Size: 594 B |
|
|
@ -1 +1 @@
|
||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1597744457882" class="icon" viewBox="0 0 1170 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10125" width="285.64453125" height="250" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M926.216214 404.588947l1.511115-151.84272H1079.570048c18.035893 0 33.098301-15.062408 33.098301-33.0983a33.390775 33.390775 0 0 0-33.098301-33.098301H927.727329V33.195792a33.390775 33.390775 0 0 0-33.049555-33.049555 33.390775 33.390775 0 0 0-33.0983 33.049555c0 3.022231 0 4.533346 1.511115 7.555577v144.287142H711.24787a33.390775 33.390775 0 0 0-33.098301 33.147046c0 18.035893 15.062408 33.049555 33.098301 33.049555H863.090589v139.802542c0 3.022231-1.46237 4.533346-1.46237 7.506831 0 18.035893 15.013662 33.098301 33.049555 33.098301 15.013662 1.46237 28.564955-10.529062 31.53844-27.053839zM1032.969201 790.995763a29.393631 29.393631 0 0 0-22.520493 10.480316 546.000095 546.000095 0 0 1-117.282049 88.717095 29.101157 29.101157 0 0 0-15.062408 25.591469c0 16.524777 13.551292 30.027324 30.07607 30.027324 4.533346 0 10.529062-1.46237 13.551292-2.973485 1.46237 0 1.46237-1.511115 1.46237-1.511115a523.235874 523.235874 0 0 0 127.811111-97.735041c6.044461-5.995716 10.529062-13.551292 10.529061-22.569238a28.028752 28.028752 0 0 0-28.564954-30.027325zM793.920503 935.282906c-2.973485 0-7.506831 0-10.529062 1.511115-46.600847 15.062408-96.223925 24.080354-145.798258 27.053839-15.062408 1.511115-25.59147 15.062408-25.591469 30.07607 0 16.573523 13.551292 30.07607 30.07607 30.07607 55.618794-4.4846 108.215357-13.502547 159.398295-30.07607a28.95492 28.95492 0 0 0 22.520494-28.564954 30.173561 30.173561 0 0 0-30.07607-30.07607zM535.324796 960.874375c-12.040177-1.511115-24.031609-1.511115-36.071785-3.02223a564.962155 564.962155 0 0 1-49.623078-7.506832c-230.030752-45.089732-389.380302-202.976912-389.380302-380.362355 0-139.851288 99.19741-269.124768 260.106822-339.805969 13.502547-5.995716 27.053839-12.040177 40.556386-16.573523 10.529062-4.4846 22.569239-7.506831 33.0983-10.480317 12.040177-4.533346 21.058123-15.062408 21.058124-28.564954a30.173561 30.173561 0 0 0-30.07607-30.07607 25.396487 25.396487 0 0 0-15.062408 4.4846c-10.529062 3.022231-19.498262 6.044461-28.564955 9.017947l-45.089732 18.035893C114.357309 254.257343 0.097491 406.148808 0.097491 568.471843c0 207.510258 180.407674 387.917932 439.00338 440.563241l54.107679 9.017946c12.040177 1.46237 25.59147 3.022231 37.631646 3.022231h1.46237c16.573523 0 30.07607-13.551292 30.07607-30.07607a30.758509 30.758509 0 0 0-27.05384-30.07607zM1169.798258 569.982958a30.173561 30.173561 0 0 0-30.07607-30.07607 30.173561 30.173561 0 0 0-30.07607 30.07607v1.46237c0 46.649593-10.529062 93.25044-33.049555 136.829057-1.511115 3.022231-1.511115 7.506831-1.511115 12.040177 0 16.573523 13.551292 30.07607 30.07607 30.07607 13.502547 0 24.031609-9.017946 28.564954-21.058124a361.985243 361.985243 0 0 0 36.071786-157.88718v-1.46237z" p-id="10126"></path><path d="M1052.516209 297.835959c-5.995716-4.533346-13.502547-9.017946-22.520493-9.017946a30.173561 30.173561 0 0 0-30.07607 30.07607c0 7.506831 2.973485 15.013662 9.017946 21.009378a375.14657 375.14657 0 0 1 79.699148 118.793164c4.4846 10.529062 15.013662 19.547008 27.053839 19.547008 16.524777 0 30.07607-13.551292 30.07607-30.07607 0-4.4846-1.511115-7.506831-3.02223-12.040177a422.039891 422.039891 0 0 0-90.179464-138.291427zM666.158138 182.065026h4.4846c16.573523 0 30.07607-13.551292 30.07607-30.07607 0-15.013662-12.040177-28.564955-27.053839-28.564954v-1.46237a761.602133 761.602133 0 0 0-154.86495-1.559861h-3.022231a30.173561 30.173561 0 0 0-30.07607 30.07607c0 16.573523 13.551292 30.07607 30.07607 30.07607h3.022231v1.462369c46.600847-5.94697 97.735041-4.4846 147.358119 0z" p-id="10127"></path></svg>
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1777352032068" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5387" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M924.8 337.8c-22.6-53.4-54.9-101.3-96-142.4s-89-73.4-142.4-96C631.2 76.1 572.5 64.2 512 64.2S392.9 76.1 337.6 99.4c-53.4 22.6-101.3 54.9-142.4 96s-73.4 89-96 142.4C75.9 393.1 64 451.8 64 512.2c0 60.5 11.8 119.1 35.2 174.4 22.6 53.4 54.9 101.3 96 142.4 41.1 41.1 89 73.4 142.4 96 55.3 23.4 113.9 35.2 174.4 35.2s119.1-11.8 174.4-35.2c53.4-22.6 101.3-54.9 142.4-96 41.1-41.1 73.4-89 96-142.4 23.4-55.3 35.2-113.9 35.2-174.4 0-60.4-11.8-119.1-35.2-174.4zM780.3 780.5C708.6 852.2 613.4 891.6 512 891.6c-101.3 0-196.6-39.5-268.3-111.1S132.6 613.6 132.6 512.2c0-101.3 39.5-196.6 111.1-268.3s167-111.1 268.3-111.1c101.3 0 196.6 39.5 268.3 111.1s111.1 166.9 111.1 268.3S852 708.8 780.3 780.5z" p-id="5388"></path><path d="M512 512.2m-106.2 0a106.2 106.2 0 1 0 212.4 0 106.2 106.2 0 1 0-212.4 0Z" p-id="5389"></path></svg>
|
||||||
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 1.1 KiB |
|
|
@ -16,6 +16,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-if="series" class="right-top-text">
|
<div v-if="series" class="right-top-text">
|
||||||
<div>{{ series.Description }}</div>
|
<div>{{ series.Description }}</div>
|
||||||
|
<div class="colorBar" :style="`background-color:${getColor()}`"></div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="series" class="left-bottom-text">
|
<div v-if="series" class="left-bottom-text">
|
||||||
<div v-show="mousePosition.index.length > 0">
|
<div v-show="mousePosition.index.length > 0">
|
||||||
|
|
@ -269,6 +270,21 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getColor() {
|
||||||
|
let color = '#000'
|
||||||
|
switch (this.series.orientation) {
|
||||||
|
case 'AXIAL':
|
||||||
|
color = '#00f'
|
||||||
|
break;
|
||||||
|
case 'CORONAL':
|
||||||
|
color = '#f00'
|
||||||
|
break;
|
||||||
|
case 'SAGITTAL':
|
||||||
|
color = '#0f0'
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return color
|
||||||
|
},
|
||||||
initViewport() {
|
initViewport() {
|
||||||
this.element = this.$refs['viewport-volume']
|
this.element = this.$refs['viewport-volume']
|
||||||
const resizeObserver = new ResizeObserver(() => {
|
const resizeObserver = new ResizeObserver(() => {
|
||||||
|
|
@ -819,6 +835,13 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.colorBar {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.viewport-wrapper {
|
.viewport-wrapper {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
|
||||||
|
|
@ -238,16 +238,16 @@
|
||||||
<svg-icon icon-class="refresh" class="svg-icon" />
|
<svg-icon icon-class="refresh" class="svg-icon" />
|
||||||
</div>
|
</div>
|
||||||
<!-- 更多 :class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '']" -->
|
<!-- 更多 :class="['tool-item', readingTaskState === 2 ? 'tool-disabled' : '']" -->
|
||||||
<div v-if="criterionType === 0" :title="$t('trials:reading:button:more')" :class="['tool-item']"
|
<div v-if="criterionType === 0" :class="['tool-item']" @click.stop="showPanel($event)"
|
||||||
@click.stop="showPanel($event)" @mouseleave="toolMouseout">
|
@mouseleave="toolMouseout">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<div class="icon" data-tool="more">
|
<div class="icon" data-tool="more" :title="$t('trials:reading:button:more')">
|
||||||
<svg-icon icon-class="more" class="svg-icon" />
|
<svg-icon icon-class="more" class="svg-icon" />
|
||||||
<i class="el-icon-arrow-down" style="color:#fff;" />
|
<i class="el-icon-arrow-down" style="color:#fff;" />
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-content">
|
<div class="dropdown-content">
|
||||||
<!--v-if="readingTaskState < 2"-->
|
<!--v-if="readingTaskState < 2"-->
|
||||||
<ul style="width:100px;">
|
<ul style="width:140px;">
|
||||||
<li v-for="i in customizeStandards" :key="i.toolName" style="text-align:left;">
|
<li v-for="i in customizeStandards" :key="i.toolName" style="text-align:left;">
|
||||||
<span @click.prevent="setMoreToolActive(i.toolName)">
|
<span @click.prevent="setMoreToolActive(i.toolName)">
|
||||||
<svg-icon :icon-class="i.icon" class="svg-icon" style="margin-right: 5px;" />
|
<svg-icon :icon-class="i.icon" class="svg-icon" style="margin-right: 5px;" />
|
||||||
|
|
@ -1712,6 +1712,7 @@ export default {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
lineLengthInPx: this.fusionCrosshairStyle.lineLength,
|
lineLengthInPx: this.fusionCrosshairStyle.lineLength,
|
||||||
},
|
},
|
||||||
|
mipViewportIds: ['viewport-fusion-3'],
|
||||||
})
|
})
|
||||||
|
|
||||||
toolGroup.setToolActive(VolumeRotateTool.toolName, {
|
toolGroup.setToolActive(VolumeRotateTool.toolName, {
|
||||||
|
|
@ -1925,6 +1926,7 @@ export default {
|
||||||
console.log('Completed')
|
console.log('Completed')
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
|
if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return
|
||||||
|
|
@ -1951,6 +1953,7 @@ export default {
|
||||||
console.log('Modified')
|
console.log('Modified')
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
if (!annotation.highlighted) return
|
if (!annotation.highlighted) return
|
||||||
|
|
@ -1967,6 +1970,7 @@ export default {
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
try {
|
try {
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
if (annotation.metadata.toolName === CrosshairsTool.toolName) return
|
if (annotation.metadata.toolName === CrosshairsTool.toolName) return
|
||||||
if (this.readingTaskState === 2 && !annotation.data.label) return false
|
if (this.readingTaskState === 2 && !annotation.data.label) return false
|
||||||
if (this.readingTaskState === 2) {
|
if (this.readingTaskState === 2) {
|
||||||
|
|
@ -1996,6 +2000,7 @@ export default {
|
||||||
async customAnnotationCompletedListener(e) {
|
async customAnnotationCompletedListener(e) {
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName)
|
const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName)
|
||||||
|
|
@ -2084,6 +2089,7 @@ export default {
|
||||||
customAnnotationModifiedListener(e) {
|
customAnnotationModifiedListener(e) {
|
||||||
const { annotation } = e.detail
|
const { annotation } = e.detail
|
||||||
if (!annotation) return
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation)
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
if (!annotation.highlighted) return
|
if (!annotation.highlighted) return
|
||||||
|
|
@ -2113,6 +2119,7 @@ export default {
|
||||||
try {
|
try {
|
||||||
// if ( this.resetAnnotation && this.isFusion ) return false
|
// if ( this.resetAnnotation && this.isFusion ) return false
|
||||||
if (!annotation) return false
|
if (!annotation) return false
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return false
|
||||||
if (annotation.metadata.toolName === CrosshairsTool.toolName) return false
|
if (annotation.metadata.toolName === CrosshairsTool.toolName) return false
|
||||||
if (this.readingTaskState === 2 && !annotation.data.label) return false
|
if (this.readingTaskState === 2 && !annotation.data.label) return false
|
||||||
if (this.readingTaskState === 2) {
|
if (this.readingTaskState === 2) {
|
||||||
|
|
@ -2217,7 +2224,11 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
annotationSelectionChangeListener(e) { },
|
annotationSelectionChangeListener(e) {
|
||||||
|
const { annotation } = e.detail || {}
|
||||||
|
if (!annotation) return
|
||||||
|
if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return
|
||||||
|
},
|
||||||
async getAnnotations(visitTaskId) {
|
async getAnnotations(visitTaskId) {
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
const taskIdx = this.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
|
const taskIdx = this.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
|
||||||
|
|
@ -2307,20 +2318,20 @@ export default {
|
||||||
},
|
},
|
||||||
setCrosshairsToolLineColor(viewportId) {
|
setCrosshairsToolLineColor(viewportId) {
|
||||||
let colors = [
|
let colors = [
|
||||||
'#ffd10a',
|
'#ff0000',
|
||||||
'#b6d634',
|
'#00ff00',
|
||||||
'#fb628b',
|
'#0000ff',
|
||||||
]
|
]
|
||||||
let index = viewportId.split("-").pop()
|
let index = viewportId.split("-").pop()
|
||||||
return colors[colors.length - 1 - Number(index)] || colors[0]
|
return colors[colors.length - 1 - Number(index)] || colors[0]
|
||||||
},
|
},
|
||||||
setFusionCrosshairsToolLineColor(viewportId) {
|
setFusionCrosshairsToolLineColor(viewportId) {
|
||||||
let colors = [
|
let colors = [
|
||||||
'#fb628b',
|
'#0000ff',
|
||||||
'#fb628b',
|
'#0000ff',
|
||||||
'#fb628b',
|
'#0000ff',
|
||||||
'#ffd10a',
|
'#ff0000',
|
||||||
'#b6d634',
|
'#00ff00',
|
||||||
]
|
]
|
||||||
|
|
||||||
if (viewportId === 'viewport-fusion-hidden-sag') {
|
if (viewportId === 'viewport-fusion-hidden-sag') {
|
||||||
|
|
@ -2615,7 +2626,7 @@ export default {
|
||||||
toolGroup.setToolDisabled(FusionJumpToPointTool.toolName)
|
toolGroup.setToolDisabled(FusionJumpToPointTool.toolName)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dispatchFusionCenterPoint() {
|
dispatchFusionCenterPoint(retryCount = 0) {
|
||||||
const renderingEngine = getRenderingEngine(renderingEngineId)
|
const renderingEngine = getRenderingEngine(renderingEngineId)
|
||||||
if (!renderingEngine) return
|
if (!renderingEngine) return
|
||||||
const toolGroup = ToolGroupManager.getToolGroup(this.fusionToolGroupId)
|
const toolGroup = ToolGroupManager.getToolGroup(this.fusionToolGroupId)
|
||||||
|
|
@ -2641,6 +2652,11 @@ export default {
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if (retryCount < 10) {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.dispatchFusionCenterPoint(retryCount + 1)
|
||||||
|
}, 120)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
setFusionMipRotateEnabled(enabled) {
|
setFusionMipRotateEnabled(enabled) {
|
||||||
if (!this.isFusion) return
|
if (!this.isFusion) return
|
||||||
|
|
@ -3002,7 +3018,15 @@ export default {
|
||||||
const voi = metaData.get('voiLutModule', volume._imageIds[Math.ceil((volume._imageIds.length - 1) / 2)])
|
const voi = metaData.get('voiLutModule', volume._imageIds[Math.ceil((volume._imageIds.length - 1) / 2)])
|
||||||
const lower = voi.windowCenter[0] - voi.windowWidth[0] / 2
|
const lower = voi.windowCenter[0] - voi.windowWidth[0] / 2
|
||||||
const upper = voi.windowCenter[0] + voi.windowWidth[0] / 2 - 1
|
const upper = voi.windowCenter[0] + voi.windowWidth[0] / 2 - 1
|
||||||
viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
|
let viewportIds = ['viewport-MPR-0', 'viewport-MPR-1', 'viewport-MPR-2']
|
||||||
|
viewportIds.forEach(viewportId => {
|
||||||
|
let viewport = renderingEngine.getViewport(viewportId)
|
||||||
|
viewport.resetProperties()
|
||||||
|
viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
|
||||||
|
viewport.render()
|
||||||
|
})
|
||||||
|
|
||||||
|
return this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setFullScreen(index)
|
||||||
}
|
}
|
||||||
if (this.readingTool === 3 && this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.Modality === 'PT') {
|
if (this.readingTool === 3 && this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.Modality === 'PT') {
|
||||||
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
|
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
|
||||||
|
|
@ -3109,6 +3133,8 @@ export default {
|
||||||
const renderingEngine = getRenderingEngine(renderingEngineId)
|
const renderingEngine = getRenderingEngine(renderingEngineId)
|
||||||
const viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
|
const viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
const viewport = renderingEngine.getViewport(viewportId)
|
const viewport = renderingEngine.getViewport(viewportId)
|
||||||
|
let index = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.SliceIndex
|
||||||
|
if (this.readingTool === 3 || this.isMPR) this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setFilp(true)
|
||||||
if (v.val === -1) {
|
if (v.val === -1) {
|
||||||
// 默认值
|
// 默认值
|
||||||
viewport.resetProperties()
|
viewport.resetProperties()
|
||||||
|
|
@ -3128,6 +3154,7 @@ export default {
|
||||||
viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
|
viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
|
||||||
viewport.render()
|
viewport.render()
|
||||||
}
|
}
|
||||||
|
if (this.readingTool === 3 || this.isMPR) this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setFullScreen(index)
|
||||||
},
|
},
|
||||||
setWindowLevelActive(e) {
|
setWindowLevelActive(e) {
|
||||||
this.setToolActive('WindowLevel')
|
this.setToolActive('WindowLevel')
|
||||||
|
|
@ -3676,6 +3703,8 @@ export default {
|
||||||
this.activeViewportIndex = 2
|
this.activeViewportIndex = 2
|
||||||
}
|
}
|
||||||
series = {
|
series = {
|
||||||
|
Id: series.Id,
|
||||||
|
Modality: series.Modality,
|
||||||
data: series,
|
data: series,
|
||||||
StudyIndex: series.StudyIndex,
|
StudyIndex: series.StudyIndex,
|
||||||
SeriesIndex: series.SeriesIndex,
|
SeriesIndex: series.SeriesIndex,
|
||||||
|
|
@ -3683,7 +3712,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(series, series.segment || curSeriesId !== series.Id ? false : true)
|
this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(series, series.segment || curSeriesId !== series.Id ? false : true, { isFusion: this.isFusion && (series.Modality === 'PT' || series.Modality === 'NM') })
|
||||||
this.$refs[series.TaskInfo.VisitTaskId][0].setSeriesActive(series.StudyIndex, series.SeriesIndex)
|
this.$refs[series.TaskInfo.VisitTaskId][0].setSeriesActive(series.StudyIndex, series.SeriesIndex)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="Segmentations" v-loading="loading">
|
<div class="Segmentations" v-loading="loading">
|
||||||
<h3 style="color: #fff;margin: 0;padding: 15px 10px;">
|
<h3 style="color: #fff;margin: 0;padding: 15px 10px 5px">
|
||||||
<span>{{ series.TaskInfo.SubjectCode }} </span>
|
<span>{{ series.TaskInfo.SubjectCode }} </span>
|
||||||
<span style="margin-left:5px;">{{ series.TaskInfo.TaskBlindName }}</span>
|
<span style="margin-left:5px;">{{ series.TaskInfo.TaskBlindName }}</span>
|
||||||
</h3>
|
</h3>
|
||||||
|
|
@ -133,7 +133,7 @@
|
||||||
<template v-if="segmentList.length > 0">
|
<template v-if="segmentList.length > 0">
|
||||||
<div class="SegmentGroupBox">
|
<div class="SegmentGroupBox">
|
||||||
<div style="display: flex;align-items: center;">
|
<div style="display: flex;align-items: center;">
|
||||||
<el-popover placement="left" width="40" trigger="click" v-if="readingTaskState < 2"
|
<el-popover placement="left" width="200px" trigger="click" v-if="readingTaskState < 2"
|
||||||
v-model="popoverVisible" :teleported="true">
|
v-model="popoverVisible" :teleported="true">
|
||||||
<div class="SegmentGroupBtnBox">
|
<div class="SegmentGroupBtnBox">
|
||||||
<div class="SegmentGroupBtn" @click.stop="addSegmentGroup">
|
<div class="SegmentGroupBtn" @click.stop="addSegmentGroup">
|
||||||
|
|
@ -678,6 +678,7 @@ export default {
|
||||||
item.view = !item.view
|
item.view = !item.view
|
||||||
item.segments.forEach(i => {
|
item.segments.forEach(i => {
|
||||||
i.view = item.view
|
i.view = item.view
|
||||||
|
i.bidirectionalView = item.view
|
||||||
})
|
})
|
||||||
DicomEvent.$emit('viewSegmentation', item)
|
DicomEvent.$emit('viewSegmentation', item)
|
||||||
// this.viewBidirectional(item.segments, view)
|
// this.viewBidirectional(item.segments, view)
|
||||||
|
|
@ -1932,7 +1933,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.Bidirectionalbox {
|
.Bidirectionalbox {
|
||||||
padding: 5px;
|
padding: 10px;
|
||||||
border-bottom: 1px solid #333;
|
border-bottom: 1px solid #333;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -1962,7 +1963,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.statsBox {
|
.statsBox {
|
||||||
padding: 0 5px;
|
padding: 0 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
|
@ -1982,7 +1983,7 @@ export default {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin: 0 5px 10px;
|
margin: 0 5px 10px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 5px;
|
padding: 5px 10px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.messageBox {
|
.messageBox {
|
||||||
|
|
@ -2060,7 +2061,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.SegmentGroupBox {
|
.SegmentGroupBox {
|
||||||
padding: 8px 5px;
|
padding: 8px 10px;
|
||||||
background-color: #333;
|
background-color: #333;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
|
@ -2092,7 +2093,7 @@ export default {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 0 5px;
|
padding: 0 10px;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgba($color: #409EFF, $alpha: 0.2);
|
background-color: rgba($color: #409EFF, $alpha: 0.2);
|
||||||
|
|
@ -2104,7 +2105,7 @@ export default {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
padding: 0 5px;
|
padding: 0 10px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2135,7 +2136,7 @@ export default {
|
||||||
.EraserConfig,
|
.EraserConfig,
|
||||||
.SegmentConfig {
|
.SegmentConfig {
|
||||||
width: calc(100% - 10px);
|
width: calc(100% - 10px);
|
||||||
padding: 0 5px;
|
padding: 0 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
@ -2166,13 +2167,13 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .el-input-number.is-without-controls .el-input__inner {
|
::v-deep .el-input-number.is-without-controls .el-input__inner {
|
||||||
padding: 0 5px;
|
padding: 0 10px;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.SegmentConfig {
|
.SegmentConfig {
|
||||||
padding: 5px;
|
padding: 5px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.svg-icon {
|
.svg-icon {
|
||||||
|
|
@ -2202,12 +2203,12 @@ export default {
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
// margin-right: 20px;
|
// margin-right: 20px;
|
||||||
padding: 5px;
|
padding: 5px 10px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
border-bottom: 1px solid #404040;
|
border-bottom: 1px solid #404040;
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
padding: 5px;
|
padding: 5px 10px;
|
||||||
border-right: 1px solid #404040;
|
border-right: 1px solid #404040;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
@ -2255,7 +2256,7 @@ export default {
|
||||||
background-color: #000 !important;
|
background-color: #000 !important;
|
||||||
color: #ddd;
|
color: #ddd;
|
||||||
border-bottom-color: #5a5a5a;
|
border-bottom-color: #5a5a5a;
|
||||||
padding-left: 5px;
|
padding-left: 10px;
|
||||||
// height: 50px;
|
// height: 50px;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -313,7 +313,7 @@ const config = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': '定圆工具',
|
'name': '定圆工具',
|
||||||
'icon': 'oval',
|
'icon': 'fixedRadiusCircle',
|
||||||
'toolName': 'FixedRadiusCircleROI',
|
'toolName': 'FixedRadiusCircleROI',
|
||||||
'props': ['radius', 'area', 'mean', 'max', 'stdDev'],
|
'props': ['radius', 'area', 'mean', 'max', 'stdDev'],
|
||||||
'i18nKey': 'trials:reading:button:fixedCircle',
|
'i18nKey': 'trials:reading:button:fixedCircle',
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
lineLengthInPx: 20,
|
lineLengthInPx: 20,
|
||||||
},
|
},
|
||||||
|
mipViewportIds: [],
|
||||||
},
|
},
|
||||||
}) {
|
}) {
|
||||||
super(toolProps, defaultToolProps)
|
super(toolProps, defaultToolProps)
|
||||||
|
|
@ -39,17 +40,25 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const { element, currentPoints } = evt.detail || {}
|
const { element, currentPoints } = evt.detail || {}
|
||||||
const worldPoint = currentPoints?.world
|
if (!element || !currentPoints) return
|
||||||
if (!element || !worldPoint || worldPoint.length < 3) return
|
|
||||||
|
|
||||||
const enabledElement = getEnabledElement(element)
|
const enabledElement = getEnabledElement(element)
|
||||||
const { viewport, renderingEngine } = enabledElement || {}
|
const { viewport, renderingEngine } = enabledElement || {}
|
||||||
if (!viewport || !renderingEngine) return
|
if (!viewport || !renderingEngine) return
|
||||||
|
|
||||||
const selectedPoint = this._resolveSelectedPoint(viewport, worldPoint)
|
const sourceIsMip = this._isMipViewportId(viewport.id)
|
||||||
|
// Non-MIP viewport click should not trigger point relocation.
|
||||||
|
if (!sourceIsMip) return
|
||||||
|
const interactionWorldPoint = this._getInteractionWorldPoint(viewport, currentPoints, !sourceIsMip)
|
||||||
|
if (!interactionWorldPoint || interactionWorldPoint.length < 3) return
|
||||||
|
const selectedPoint = sourceIsMip
|
||||||
|
? this._resolveSelectedPoint(viewport, interactionWorldPoint)
|
||||||
|
: interactionWorldPoint
|
||||||
if (!selectedPoint || selectedPoint.length < 3) return
|
if (!selectedPoint || selectedPoint.length < 3) return
|
||||||
|
|
||||||
this.setPoint(selectedPoint, viewport.id, renderingEngine.id)
|
this.setPoint(selectedPoint, viewport.id, renderingEngine.id, {
|
||||||
|
jumpToTargetViewports: sourceIsMip,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
mouseDownCallback(evt) {
|
mouseDownCallback(evt) {
|
||||||
|
|
@ -69,15 +78,17 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
const { viewport, renderingEngine } = enabledElement || {}
|
const { viewport, renderingEngine } = enabledElement || {}
|
||||||
if (!viewport || !renderingEngine) return
|
if (!viewport || !renderingEngine) return
|
||||||
|
|
||||||
let worldPoint = currentPoints?.world
|
const sourceIsMip = this._isMipViewportId(viewport.id)
|
||||||
if ((!worldPoint || worldPoint.length < 3) && currentPoints?.canvas && viewport.canvasToWorld) {
|
const worldPoint = this._getInteractionWorldPoint(viewport, currentPoints, !sourceIsMip)
|
||||||
worldPoint = viewport.canvasToWorld(currentPoints.canvas)
|
|
||||||
}
|
|
||||||
if (!worldPoint || worldPoint.length < 3) return
|
if (!worldPoint || worldPoint.length < 3) return
|
||||||
|
|
||||||
const annotation = this._getViewportCrosshairAnnotation(viewport)
|
const annotation = this._getViewportCrosshairAnnotation(viewport)
|
||||||
const sourceViewportId = this.dragSourceViewportId || annotation?.data?.sourceViewportId || viewport.id
|
const sourceViewportId = sourceIsMip
|
||||||
this.setPoint(worldPoint, sourceViewportId, renderingEngine.id)
|
? (this.dragSourceViewportId || annotation?.data?.sourceViewportId || viewport.id)
|
||||||
|
: viewport.id
|
||||||
|
this.setPoint(worldPoint, sourceViewportId, renderingEngine.id, {
|
||||||
|
jumpToTargetViewports: sourceIsMip,
|
||||||
|
})
|
||||||
evt.preventDefault?.()
|
evt.preventDefault?.()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,9 +196,7 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
if (!viewport?.element) return false
|
if (!viewport?.element) return false
|
||||||
|
|
||||||
const annotations = getAnnotations(this.getToolName(), viewport.element) || []
|
const annotations = getAnnotations(this.getToolName(), viewport.element) || []
|
||||||
const crosshairAnnotation = annotations.find((item) =>
|
const crosshairAnnotation = this._findViewportCrosshairAnnotationFromList(annotations, viewport.id)
|
||||||
item?.data?.type === 'fusion-jump-crosshair' && item?.data?.viewportId === viewport.id
|
|
||||||
)
|
|
||||||
if (!crosshairAnnotation) return false
|
if (!crosshairAnnotation) return false
|
||||||
|
|
||||||
const worldPoint = crosshairAnnotation.data?.handles?.points?.[0]
|
const worldPoint = crosshairAnnotation.data?.handles?.points?.[0]
|
||||||
|
|
@ -314,9 +323,20 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
_getViewportCrosshairAnnotation(viewport) {
|
_getViewportCrosshairAnnotation(viewport) {
|
||||||
if (!viewport?.element) return null
|
if (!viewport?.element) return null
|
||||||
const annotations = getAnnotations(this.getToolName(), viewport.element) || []
|
const annotations = getAnnotations(this.getToolName(), viewport.element) || []
|
||||||
return annotations.find((item) =>
|
return this._findViewportCrosshairAnnotationFromList(annotations, viewport.id)
|
||||||
item?.data?.type === 'fusion-jump-crosshair' && item?.data?.viewportId === viewport.id
|
}
|
||||||
) || null
|
|
||||||
|
_findViewportCrosshairAnnotationFromList(annotations, viewportId) {
|
||||||
|
if (!Array.isArray(annotations) || !viewportId) return null
|
||||||
|
for (let i = 0; i < annotations.length; i++) {
|
||||||
|
const item = annotations[i]
|
||||||
|
const data = item && item.data
|
||||||
|
if (!data) continue
|
||||||
|
if (data.type === 'fusion-jump-crosshair' && data.viewportId === viewportId) {
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
_tryStartDrag(evt) {
|
_tryStartDrag(evt) {
|
||||||
|
|
@ -341,6 +361,27 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getInteractionWorldPoint(viewport, currentPoints, preferCanvasToWorld = false) {
|
||||||
|
const worldPoint = currentPoints?.world
|
||||||
|
const canvasPoint = currentPoints?.canvas
|
||||||
|
if (preferCanvasToWorld && canvasPoint && viewport?.canvasToWorld) {
|
||||||
|
const worldFromCanvas = viewport.canvasToWorld(canvasPoint)
|
||||||
|
if (worldFromCanvas && worldFromCanvas.length >= 3) {
|
||||||
|
return worldFromCanvas
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (worldPoint && worldPoint.length >= 3) {
|
||||||
|
return worldPoint
|
||||||
|
}
|
||||||
|
if (canvasPoint && viewport?.canvasToWorld) {
|
||||||
|
const worldFromCanvas = viewport.canvasToWorld(canvasPoint)
|
||||||
|
if (worldFromCanvas && worldFromCanvas.length >= 3) {
|
||||||
|
return worldFromCanvas
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
_dispatchPointEvent(worldPoint, sourceViewportId, crosshairAppearance) {
|
_dispatchPointEvent(worldPoint, sourceViewportId, crosshairAppearance) {
|
||||||
const { dispatchEventName } = this.configuration
|
const { dispatchEventName } = this.configuration
|
||||||
if (!dispatchEventName || typeof window === 'undefined') return
|
if (!dispatchEventName || typeof window === 'undefined') return
|
||||||
|
|
@ -491,19 +532,33 @@ class FusionJumpToPointTool extends AnnotationDisplayTool {
|
||||||
|
|
||||||
_getReferenceLineColor(viewportId, fallbackColor) {
|
_getReferenceLineColor(viewportId, fallbackColor) {
|
||||||
if (typeof this.configuration.getReferenceLineColor === 'function') {
|
if (typeof this.configuration.getReferenceLineColor === 'function') {
|
||||||
const color = this.configuration.getReferenceLineColor(viewportId)
|
try {
|
||||||
if (color) return color
|
const safeViewportId = viewportId || ''
|
||||||
|
const color = this.configuration.getReferenceLineColor(safeViewportId)
|
||||||
|
if (color) return color
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fallbackColor || '#6fb9ff'
|
return fallbackColor || '#6fb9ff'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_isMipViewportId(viewportId) {
|
||||||
|
const mipViewportIds = this.configuration?.mipViewportIds
|
||||||
|
return Array.isArray(mipViewportIds) && mipViewportIds.includes(viewportId)
|
||||||
|
}
|
||||||
|
|
||||||
_normalizeAppearance(appearance = {}, sourceViewportId) {
|
_normalizeAppearance(appearance = {}, sourceViewportId) {
|
||||||
const lineWidth = Number.isFinite(appearance.lineWidth) ? appearance.lineWidth : 2
|
const lineWidth = Number.isFinite(appearance.lineWidth) ? appearance.lineWidth : 2
|
||||||
const lineLength = Number.isFinite(appearance.lineLength) ? appearance.lineLength : 9
|
const lineLength = Number.isFinite(appearance.lineLength) ? appearance.lineLength : 9
|
||||||
const centerHoleSize = Number.isFinite(appearance.centerHoleSize) ? appearance.centerHoleSize : 8
|
const centerHoleSize = Number.isFinite(appearance.centerHoleSize) ? appearance.centerHoleSize : 8
|
||||||
let color = appearance.color
|
let color = appearance.color
|
||||||
if (!color && typeof this.configuration.getReferenceLineColor === 'function') {
|
if (!color && typeof this.configuration.getReferenceLineColor === 'function') {
|
||||||
color = this.configuration.getReferenceLineColor(sourceViewportId)
|
try {
|
||||||
|
color = this.configuration.getReferenceLineColor(sourceViewportId || '')
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -521,7 +521,7 @@ export default {
|
||||||
IsImageFilter: false,
|
IsImageFilter: false,
|
||||||
KeyFileListStr: '',
|
KeyFileListStr: '',
|
||||||
KeyFileList: [],
|
KeyFileList: [],
|
||||||
CircleRadius: null
|
CircleRadius: 10
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
IsAutoCreate: [
|
IsAutoCreate: [
|
||||||
|
|
@ -1063,7 +1063,7 @@ export default {
|
||||||
},
|
},
|
||||||
handleReadingToolListChange(v) {
|
handleReadingToolListChange(v) {
|
||||||
if (!v.includes('FixedRadiusCircleROI')) {
|
if (!v.includes('FixedRadiusCircleROI')) {
|
||||||
this.form.CircleRadius = null
|
this.form.CircleRadius = 10
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleNumberInput(value, field) {
|
handleNumberInput(value, field) {
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,15 @@
|
||||||
<template slot="search-container">
|
<template slot="search-container">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-form-item label="文件名称" prop="FileName">
|
<el-form-item :label="$t('trials:data-sync:fileList:fileName')" prop="FileName">
|
||||||
<el-input v-model="searchData.FileName" size="small" clearable style="width: 120px" />
|
<el-input v-model="searchData.FileName" size="small" clearable style="width: 120px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 文件类型 -->
|
<!-- 文件类型 -->
|
||||||
<el-form-item label="文件类型" prop="FileType">
|
<el-form-item :label="$t('trials:data-sync:fileList:fileType')" prop="FileType">
|
||||||
<el-input v-model="searchData.FileType" size="small" clearable style="width: 120px" />
|
<el-input v-model="searchData.FileType" size="small" clearable style="width: 120px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 源区域 -->
|
<!-- 源区域 -->
|
||||||
<el-form-item label="源区域" prop="UploadRegion">
|
<el-form-item :label="$t('trials:data-sync:fileList:uploadRegion')" prop="UploadRegion">
|
||||||
<el-select v-model="searchData.UploadRegion" style="width: 120px">
|
<el-select v-model="searchData.UploadRegion" style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in regionOptions"
|
v-for="item in regionOptions"
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 源可用时间 -->
|
<!-- 源可用时间 -->
|
||||||
<el-form-item label="源可用时间">
|
<el-form-item :label="$t('trials:data-sync:fileList:uploadTimeRange')">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="uploadTimeRange"
|
v-model="uploadTimeRange"
|
||||||
:default-time="['00:00:00', '23:59:59']"
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 目标区域 -->
|
<!-- 目标区域 -->
|
||||||
<el-form-item label="目标区域" prop="TargetRegion">
|
<el-form-item :label="$t('trials:data-sync:fileList:targetRegion')" prop="TargetRegion">
|
||||||
<el-select v-model="searchData.TargetRegion" style="width: 120px">
|
<el-select v-model="searchData.TargetRegion" style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in regionOptions"
|
v-for="item in regionOptions"
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 目标可用时间 -->
|
<!-- 目标可用时间 -->
|
||||||
<el-form-item label="目标可用时间">
|
<el-form-item :label="$t('trials:data-sync:fileList:syncTimeRange')">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="SyncTimeRange"
|
v-model="SyncTimeRange"
|
||||||
:default-time="['00:00:00', '23:59:59']"
|
:default-time="['00:00:00', '23:59:59']"
|
||||||
|
|
@ -55,11 +55,11 @@
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 优先级 -->
|
<!-- 优先级 -->
|
||||||
<el-form-item label="优先级">
|
<el-form-item :label="$t('trials:data-sync:fileList:priority')">
|
||||||
<el-input v-model="searchData.Priority" clearable style="width: 120px"></el-input>
|
<el-input v-model="searchData.Priority" clearable style="width: 120px"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 是否同步完成 -->
|
<!-- 是否同步完成 -->
|
||||||
<el-form-item label="是否同步完成" prop="IsSync">
|
<el-form-item :label="$t('trials:data-sync:fileList:isSync')" prop="IsSync">
|
||||||
<el-select v-model="searchData.IsSync" clearable style="width: 120px">
|
<el-select v-model="searchData.IsSync" clearable style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item of $d.YesOrNo"
|
v-for="item of $d.YesOrNo"
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 批量编辑 -->
|
<!-- 批量编辑 -->
|
||||||
<el-button type="primary" icon="el-icon-edit" :disabled="selectedRows.length === 0" @click="handleBatchEdit">
|
<el-button type="primary" icon="el-icon-edit" :disabled="selectedRows.length === 0" @click="handleBatchEdit">
|
||||||
批量编辑
|
{{ $t('trials:data-sync:fileList:batchEdit') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
@ -89,21 +89,21 @@
|
||||||
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }" @selection-change="handleSelectionChange">
|
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column type="selection" width="50" :selectable="selectableRow"/>
|
<el-table-column type="selection" width="50" :selectable="selectableRow"/>
|
||||||
<el-table-column label="文件名称" prop="FileName" min-width="90" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:fileList:fileName')" prop="FileName" min-width="90" show-overflow-tooltip sortable="custom">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="文件大小" prop="FileSize" min-width="90" show-overflow-tooltip>
|
<el-table-column :label="$t('trials:data-sync:fileList:fileSize')" prop="FileSize" min-width="90" show-overflow-tooltip>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ fileSizeFormatter(scope.row.FileSize) }}
|
{{ fileSizeFormatter(scope.row.FileSize) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="文件类型" prop="FileType" min-width="90" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:fileList:fileType')" prop="FileType" min-width="90" show-overflow-tooltip sortable="custom">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="源区域" prop="UploadRegion" min-width="90" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:uploadRegion')" prop="UploadRegion" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
|
|
||||||
<el-table-column label="源可用时间" prop="CreateTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:createTime')" prop="CreateTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="路径" prop="Path" min-width="90" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:filePath')" prop="Path" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="是否需要同步" prop="IsNeedSync" min-width="120" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:fileList:isNeedSync')" prop="IsNeedSync" min-width="120" show-overflow-tooltip sortable="custom">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsNeedSync" type="success">
|
<el-tag v-if="scope.row.IsNeedSync" type="success">
|
||||||
{{ $fd('YesOrNo', scope.row.IsNeedSync) }}
|
{{ $fd('YesOrNo', scope.row.IsNeedSync) }}
|
||||||
|
|
@ -113,10 +113,10 @@
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="目标区域" prop="TargetRegion" min-width="100" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:targetRegion')" prop="TargetRegion" min-width="100" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="目标可用时间" prop="SyncFinishedTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:syncFinishedTime')" prop="SyncFinishedTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="优先级" prop="Priority" min-width="80" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:priority')" prop="Priority" min-width="80" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="是否同步完成" prop="IsSync" min-width="120" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:fileList:isSync')" prop="IsSync" min-width="120" show-overflow-tooltip sortable="custom">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsSync" type="success">
|
<el-tag v-if="scope.row.IsSync" type="success">
|
||||||
{{ $fd('YesOrNo', scope.row.IsSync) }}
|
{{ $fd('YesOrNo', scope.row.IsSync) }}
|
||||||
|
|
@ -126,17 +126,19 @@
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="更新时间" prop="UpdateTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:fileList:updateTime')" prop="UpdateTime" min-width="120" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="操作" width="240" show-overflow-tooltip fixed="right">
|
<el-table-column :label="$t('common:action:action')" width="240" show-overflow-tooltip fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<!-- 详情 -->
|
||||||
<el-button type="primary" size="mini" @click="handleOpenTaskTable(scope.row)">
|
<el-button type="primary" size="mini" @click="handleOpenTaskTable(scope.row)">
|
||||||
详情
|
{{ $t('trials:data-sync:fileList:detail') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<!-- 重新同步 -->
|
||||||
<el-button type="primary" size="mini" :disabled="!scope.row.IsNeedSync || !scope.row.IsSync" @click="execute(scope.row)">
|
<el-button type="primary" size="mini" :disabled="!scope.row.IsNeedSync || !scope.row.IsSync" @click="execute(scope.row)">
|
||||||
重新同步
|
{{ $t('trials:data-sync:fileList:reExecute') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="primary" size="mini" :disabled="scope.row.IsSync" @click="handleEdit(scope.row)">
|
<el-button type="primary" size="mini" :disabled="scope.row.IsSync" @click="handleEdit(scope.row)">
|
||||||
编辑
|
{{ $t('common:action:edit') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -145,24 +147,24 @@
|
||||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
@pagination="getList" />
|
@pagination="getList" />
|
||||||
</template>
|
</template>
|
||||||
<el-dialog v-if="editDialogVisible" title="编辑" :visible.sync="editDialogVisible" width="600px" :close-on-click-modal="false" append-to-body>
|
<el-dialog v-if="editDialogVisible" :title="$t('trials:data-sync:fileList:edit')" :visible.sync="editDialogVisible" width="600px" :close-on-click-modal="false" append-to-body>
|
||||||
<el-form ref="editFormRef" :model="editForm" :rules="editRules" label-width="110px" v-loading="formLoading">
|
<el-form ref="editFormRef" :model="editForm" :rules="editRules" label-width="110px" v-loading="formLoading">
|
||||||
<el-form-item label="文件名称">
|
<el-form-item :label="$t('trials:data-sync:fileList:fileName')">
|
||||||
<el-input v-model="editForm.FileName" disabled />
|
<el-input v-model="editForm.FileName" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件大小">
|
<el-form-item :label="$t('trials:data-sync:fileList:fileSize')">
|
||||||
<el-input :value="fileSizeFormatter(editForm.FileSize)" disabled />
|
<el-input :value="fileSizeFormatter(editForm.FileSize)" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="文件类型">
|
<el-form-item :label="$t('trials:data-sync:fileList:fileType')">
|
||||||
<el-input v-model="editForm.FileType" disabled />
|
<el-input v-model="editForm.FileType" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="源区域">
|
<el-form-item :label="$t('trials:data-sync:fileList:uploadRegion')">
|
||||||
<el-input v-model="editForm.UploadRegion" disabled />
|
<el-input v-model="editForm.UploadRegion" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="目标区域">
|
<el-form-item :label="$t('trials:data-sync:fileList:targetRegion')">
|
||||||
<el-input v-model="editForm.TargetRegion" disabled />
|
<el-input v-model="editForm.TargetRegion" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否需要同步" prop="IsNeedSync">
|
<el-form-item :label="$t('trials:data-sync:fileList:isNeedSync')" prop="IsNeedSync">
|
||||||
<el-select v-model="editForm.IsNeedSync" style="width: 100%">
|
<el-select v-model="editForm.IsNeedSync" style="width: 100%">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item of $d.YesOrNo"
|
v-for="item of $d.YesOrNo"
|
||||||
|
|
@ -173,16 +175,16 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="更新时间">
|
<el-form-item :label="$t('trials:data-sync:fileList:updateTime')">
|
||||||
<el-input v-model="editForm.UpdateTime" disabled />
|
<el-input v-model="editForm.UpdateTime" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="路径">
|
<el-form-item :label="$t('trials:data-sync:fileList:filePath')">
|
||||||
<el-input v-model="editForm.Path" type="textarea" :rows="2" disabled />
|
<el-input v-model="editForm.Path" type="textarea" :rows="2" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="优先级" prop="Priority">
|
<el-form-item :label="$t('trials:data-sync:fileList:priority')" prop="Priority">
|
||||||
<el-input-number v-model="editForm.Priority" :min="0" :controls="true" style="width: 100%" />
|
<el-input-number v-model="editForm.Priority" :min="0" :controls="true" style="width: 100%" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否同步完成" prop="IsSync">
|
<el-form-item :label="$t('trials:data-sync:fileList:isSync')" prop="IsSync">
|
||||||
<el-select v-model="editForm.IsSync" style="width: 100%" disabled>
|
<el-select v-model="editForm.IsSync" style="width: 100%" disabled>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item of $d.YesOrNo"
|
v-for="item of $d.YesOrNo"
|
||||||
|
|
@ -194,19 +196,19 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="editDialogVisible = false">取消</el-button>
|
<el-button @click="editDialogVisible = false">{{ $t('common:button:cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="handleSaveEdit">保存</el-button>
|
<el-button type="primary" @click="handleSaveEdit">{{ $t('common:button:save') }}</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-if="batchEditDialogVisible" title="批量编辑" :visible.sync="batchEditDialogVisible" width="300px" :close-on-click-modal="false" append-to-body>
|
<el-dialog v-if="batchEditDialogVisible" :title="$t('trials:data-sync:fileList:batchEdit')" :visible.sync="batchEditDialogVisible" width="300px" :close-on-click-modal="false" append-to-body>
|
||||||
<el-form ref="batchEditFormRef" :model="batchEditForm" :rules="batchEditRules" label-width="80px" v-loading="formLoading">
|
<el-form ref="batchEditFormRef" :model="batchEditForm" :rules="batchEditRules" label-width="80px" v-loading="formLoading">
|
||||||
<el-form-item label="优先级" prop="Priority">
|
<el-form-item :label="$t('trials:data-sync:fileList:priority')" prop="Priority">
|
||||||
<el-input-number v-model="batchEditForm.Priority" :min="0" :controls="true" style="width: 100%" />
|
<el-input-number v-model="batchEditForm.Priority" :min="0" :controls="true" style="width: 100%" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="batchEditDialogVisible = false">取消</el-button>
|
<el-button @click="batchEditDialogVisible = false">{{ $t('common:button:cancel') }}</el-button>
|
||||||
<el-button type="primary" @click="handleSaveBatchEdit">保存</el-button>
|
<el-button type="primary" @click="handleSaveBatchEdit">{{ $t('common:button:save') }}</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
|
|
@ -277,8 +279,8 @@ export default {
|
||||||
// IsSync: null,
|
// IsSync: null,
|
||||||
},
|
},
|
||||||
editRules: {
|
editRules: {
|
||||||
Priority: [{ required: true, message: '请输入', trigger: 'change' }],
|
Priority: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'change' }],
|
||||||
IsSync: [{ required: true, message: '请选择', trigger: 'change' }],
|
IsSync: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: 'change' }],
|
||||||
},
|
},
|
||||||
formLoading: false,
|
formLoading: false,
|
||||||
selectedRows: [],
|
selectedRows: [],
|
||||||
|
|
@ -287,7 +289,7 @@ export default {
|
||||||
Priority: null,
|
Priority: null,
|
||||||
},
|
},
|
||||||
batchEditRules: {
|
batchEditRules: {
|
||||||
Priority: [{ required: true, message: '请输入', trigger: 'change' }],
|
Priority: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'change' }],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -350,7 +352,7 @@ export default {
|
||||||
}
|
}
|
||||||
let res = await batchAddSyncFileTask(params)
|
let res = await batchAddSyncFileTask(params)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
this.$message.success('执行成功!')
|
this.$message.success(this.$t('trials:data-sync:msg:executeSuccessfully'))
|
||||||
}
|
}
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.getList()
|
this.getList()
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
<template slot="search-container">
|
<template slot="search-container">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<!-- 受试者编号 -->
|
<!-- 受试者编号 -->
|
||||||
<el-form-item label="受试者编号" prop="SubjectCode">
|
<el-form-item :label="$t('trials:data-sync:studyList:subjectCode')" prop="SubjectCode">
|
||||||
<el-input v-model="searchData.SubjectCode" size="small" clearable style="width: 120px" />
|
<el-input v-model="searchData.SubjectCode" size="small" clearable style="width: 120px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 访视名称 -->
|
<!-- 访视名称 -->
|
||||||
<el-form-item label="访视名称">
|
<el-form-item :label="$t('trials:data-sync:studyList:visitName')">
|
||||||
<el-select v-model="searchData.VisitName" style="width: 140px" clearable>
|
<el-select v-model="searchData.VisitName" style="width: 140px" clearable>
|
||||||
<el-option v-for="(item, index) of visitPlanOptions" :key="index" :label="item.VisitName"
|
<el-option v-for="(item, index) of visitPlanOptions" :key="index" :label="item.VisitName"
|
||||||
:value="item.VisitNum">
|
:value="item.VisitNum">
|
||||||
|
|
@ -17,11 +17,11 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 检查编号 -->
|
<!-- 检查编号 -->
|
||||||
<el-form-item label="检查编号" prop="StudyCode">
|
<el-form-item :label="$t('trials:data-sync:studyList:studyCode')" prop="StudyCode">
|
||||||
<el-input v-model="searchData.StudyCode" size="small" clearable style="width: 120px" />
|
<el-input v-model="searchData.StudyCode" size="small" clearable style="width: 120px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 源区域 -->
|
<!-- 源区域 -->
|
||||||
<el-form-item label="源区域" prop="UploadRegion">
|
<el-form-item :label="$t('trials:data-sync:studyList:uploadRegion')" prop="UploadRegion">
|
||||||
<el-select v-model="searchData.UploadRegion" style="width: 120px">
|
<el-select v-model="searchData.UploadRegion" style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in regionOptions"
|
v-for="item in regionOptions"
|
||||||
|
|
@ -43,7 +43,7 @@
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<!-- 目标区域 -->
|
<!-- 目标区域 -->
|
||||||
<el-form-item label="目标区域" prop="TargetRegion">
|
<el-form-item :label="$t('trials:data-sync:studyList:targetRegion')" prop="TargetRegion">
|
||||||
<el-select v-model="searchData.TargetRegion" style="width: 120px">
|
<el-select v-model="searchData.TargetRegion" style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in regionOptions"
|
v-for="item in regionOptions"
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
<!-- 是否同步完成 -->
|
<!-- 是否同步完成 -->
|
||||||
<el-form-item label="是否同步完成" prop="IsSync">
|
<el-form-item :label="$t('trials:data-sync:studyList:visitName')" prop="IsSync">
|
||||||
<el-select v-model="searchData.IsSync" clearable style="width: 120px">
|
<el-select v-model="searchData.IsSync" clearable style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item of $d.YesOrNo"
|
v-for="item of $d.YesOrNo"
|
||||||
|
|
@ -90,15 +90,15 @@
|
||||||
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 60 }" height="100" :data="list"
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 60 }" height="100" :data="list"
|
||||||
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
|
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column label="受试者编号" prop="SubjectCode" min-width="90" show-overflow-tooltip sortable="custom"/>
|
<el-table-column :label="$t('trials:data-sync:studyList:subjectCode')" prop="SubjectCode" min-width="90" show-overflow-tooltip sortable="custom"/>
|
||||||
<el-table-column label="访视名称" prop="VisitName" min-width="90" show-overflow-tooltip sortable="custom"/>
|
<el-table-column :label="$t('trials:data-sync:studyList:visitName')" prop="VisitName" min-width="90" show-overflow-tooltip sortable="custom"/>
|
||||||
<el-table-column label="检查编号" prop="StudyCode" min-width="90" show-overflow-tooltip sortable="custom"/>
|
<el-table-column :label="$t('trials:data-sync:studyList:studyCode')" prop="StudyCode" min-width="90" show-overflow-tooltip sortable="custom"/>
|
||||||
<el-table-column label="文件数" prop="FileCount" min-width="90" show-overflow-tooltip/>
|
<el-table-column :label="$t('trials:data-sync:studyList:fileCount')" prop="FileCount" min-width="90" show-overflow-tooltip/>
|
||||||
<el-table-column label="源区域" prop="UploadRegion" min-width="60" show-overflow-tooltip />
|
<el-table-column :label="$t('trials:data-sync:studyList:uploadRegion')" prop="UploadRegion" min-width="60" show-overflow-tooltip />
|
||||||
<el-table-column label="源可用时间" prop="CreateTime" min-width="90" show-overflow-tooltip />
|
<el-table-column :label="$t('trials:data-sync:studyList:createTime')" prop="CreateTime" min-width="90" show-overflow-tooltip />
|
||||||
<el-table-column label="目标区域" prop="TargetRegion" min-width="60" show-overflow-tooltip />
|
<el-table-column :label="$t('trials:data-sync:studyList:targetRegion')" prop="TargetRegion" min-width="60" show-overflow-tooltip />
|
||||||
<el-table-column label="目标可用时间" prop="SyncFinishedTime" min-width="90" show-overflow-tooltip/>
|
<el-table-column :label="$t('trials:data-sync:studyList:syncFinishedTime')" prop="SyncFinishedTime" min-width="90" show-overflow-tooltip/>
|
||||||
<el-table-column label="是否同步完成" prop="IsSync" min-width="90" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:studyList:isSync')" prop="IsSync" min-width="90" show-overflow-tooltip sortable="custom">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsSync" type="success">
|
<el-tag v-if="scope.row.IsSync" type="success">
|
||||||
{{ $fd('YesOrNo', scope.row.IsSync) }}
|
{{ $fd('YesOrNo', scope.row.IsSync) }}
|
||||||
|
|
@ -108,10 +108,11 @@
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" min-width="80" show-overflow-tooltip>
|
<el-table-column :label="$t('common:action:action')" min-width="80" show-overflow-tooltip>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<!-- 详情 -->
|
||||||
<el-button type="primary" size="small" @click="openDetailTable(scope.row)">
|
<el-button type="primary" size="small" @click="openDetailTable(scope.row)">
|
||||||
详情
|
{{ $t('trials:data-sync:studyList:detail') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -129,9 +130,11 @@
|
||||||
class="detail-dialog"
|
class="detail-dialog"
|
||||||
>
|
>
|
||||||
<span slot="title">{{ detailDialog.title }}</span>
|
<span slot="title">{{ detailDialog.title }}</span>
|
||||||
<span v-if="detailDialog.currentRow">{{`${detailDialog.currentRow.SubjectCode} / ${detailDialog.currentRow.VisitName} ${detailDialog.currentRow.StudyCode ? ' / ' + detailDialog.currentRow.StudyCode : ''} (源:${detailDialog.currentRow.UploadRegion} -> 目标:${detailDialog.currentRow.TargetRegion})`}}</span>
|
<!-- (源:${detailDialog.currentRow.UploadRegion} -> 目标:${detailDialog.currentRow.TargetRegion}) -->
|
||||||
|
<span v-if="detailDialog.currentRow">{{`${detailDialog.currentRow.SubjectCode} / ${detailDialog.currentRow.VisitName} ${detailDialog.currentRow.StudyCode ? ' / ' + detailDialog.currentRow.StudyCode : ''} ${$t('trials:data-sync:studyList:msg1').replace('xxx', detailDialog.currentRow.UploadRegion).replace('yyy', detailDialog.currentRow.TargetRegion)}`}}</span>
|
||||||
<el-tabs class="detail-tabs" v-model="detailDialog.activeTab" @tab-click="handleDetailTabClick">
|
<el-tabs class="detail-tabs" v-model="detailDialog.activeTab" @tab-click="handleDetailTabClick">
|
||||||
<el-tab-pane label="文件级别" name="file">
|
<!-- 文件级别 -->
|
||||||
|
<el-tab-pane :label="$t('trials:data-sync:label:fileList')" name="file">
|
||||||
<FileList
|
<FileList
|
||||||
v-if="detailDialog.activeTab === 'file'"
|
v-if="detailDialog.activeTab === 'file'"
|
||||||
:dataFileType="1"
|
:dataFileType="1"
|
||||||
|
|
@ -139,7 +142,8 @@
|
||||||
@openTaskTable="openTaskTable"
|
@openTaskTable="openTaskTable"
|
||||||
/>
|
/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="任务级别" name="task">
|
<!-- 任务级别 -->
|
||||||
|
<el-tab-pane :label="$t('trials:data-sync:label:taskList')" name="task">
|
||||||
<TaskList
|
<TaskList
|
||||||
v-if="detailDialog.activeTab === 'task'"
|
v-if="detailDialog.activeTab === 'task'"
|
||||||
:rowInfo="detailDialog.currentRow"
|
:rowInfo="detailDialog.currentRow"
|
||||||
|
|
@ -191,7 +195,7 @@ export default {
|
||||||
visitPlanOptions: [],
|
visitPlanOptions: [],
|
||||||
detailDialog: {
|
detailDialog: {
|
||||||
visible: false,
|
visible: false,
|
||||||
title: '详情',
|
title: this.$t('trials:data-sync:studyList:detail'),
|
||||||
activeTab: 'file',
|
activeTab: 'file',
|
||||||
currentRow: null
|
currentRow: null
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,15 @@
|
||||||
<template slot="search-container">
|
<template slot="search-container">
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<!-- 文件名称 -->
|
<!-- 文件名称 -->
|
||||||
<el-form-item label="文件名称" prop="FileName">
|
<el-form-item :label="$t('trials:data-sync:table:fileName')" prop="FileName">
|
||||||
<el-input v-model="searchData.FileName" size="small" clearable style="width: 120px" />
|
<el-input v-model="searchData.FileName" size="small" clearable style="width: 120px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 文件路径 -->
|
<!-- 文件路径 -->
|
||||||
<el-form-item label="文件路径" prop="Path">
|
<el-form-item :label="$t('trials:data-sync:table:filePath')" prop="Path">
|
||||||
<el-input v-model="searchData.Path" size="small" clearable />
|
<el-input v-model="searchData.Path" size="small" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 任务状态 -->
|
<!-- 任务状态 -->
|
||||||
<el-form-item label="任务状态" prop="JobState">
|
<el-form-item :label="$t('trials:data-sync:table:jobState')" prop="JobState">
|
||||||
<el-select v-model="searchData.JobState" clearable style="width: 120px">
|
<el-select v-model="searchData.JobState" clearable style="width: 120px">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item of $d.JobState"
|
v-for="item of $d.JobState"
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 任务开始日期 -->
|
<!-- 任务开始日期 -->
|
||||||
<el-form-item label="任务开始日期">
|
<el-form-item :label="$t('trials:data-sync:table:startTime')">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="searchData.StartTime"
|
v-model="searchData.StartTime"
|
||||||
type="date"
|
type="date"
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 任务结束日期 -->
|
<!-- 任务结束日期 -->
|
||||||
<el-form-item label="任务结束日期">
|
<el-form-item :label="$t('trials:data-sync:table:endTime')">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="searchData.EndTime"
|
v-model="searchData.EndTime"
|
||||||
type="date"
|
type="date"
|
||||||
|
|
@ -58,11 +58,11 @@
|
||||||
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 70 }" height="100" :data="list"
|
<el-table v-loading="loading" v-adaptive="{ bottomOffset: 70 }" height="100" :data="list"
|
||||||
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
|
class="table" @sort-change="handleSortByColumn" :default-sort="{ prop: 'CreateTime', order: 'descending' }">
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column label="Job编号" prop="Id" min-width="90" show-overflow-tooltip/>
|
<el-table-column :label="$t('trials:data-sync:table:jobCode')" prop="Id" min-width="90" show-overflow-tooltip/>
|
||||||
<el-table-column label="文件名称" prop="FileName" min-width="90" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:table:fileName')" prop="FileName" min-width="90" show-overflow-tooltip sortable="custom">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="路径" prop="Path" min-width="90" show-overflow-tooltip/>
|
<el-table-column :label="$t('trials:data-sync:table:filePath')" prop="Path" min-width="90" show-overflow-tooltip/>
|
||||||
<el-table-column label="任务状态" prop="JobState" min-width="90" show-overflow-tooltip sortable="custom">
|
<el-table-column :label="$t('trials:data-sync:table:jobState')" prop="JobState" min-width="90" show-overflow-tooltip sortable="custom">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.JobState === 1" type="infoinf0">
|
<el-tag v-if="scope.row.JobState === 1" type="infoinf0">
|
||||||
{{ $fd('JobState', scope.row.JobState) }}
|
{{ $fd('JobState', scope.row.JobState) }}
|
||||||
|
|
@ -79,15 +79,16 @@
|
||||||
<el-tag v-else>{{ $fd('JobState', scope.row.JobState) }}</el-tag>
|
<el-tag v-else>{{ $fd('JobState', scope.row.JobState) }}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="任务开始时间" prop="StartTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:table:startTime')" prop="StartTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="任务结束时间" prop="EndTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:table:endTime')" prop="EndTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
<el-table-column label="创建时间" prop="CreateTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
<el-table-column :label="$t('trials:data-sync:table:createTime')" prop="CreateTime" min-width="90" show-overflow-tooltip sortable="custom" />
|
||||||
|
|
||||||
|
|
||||||
<el-table-column label="操作" min-width="80" show-overflow-tooltip>
|
<el-table-column :label="$t('common:action:action')" min-width="80" show-overflow-tooltip>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<!-- 再次执行 -->
|
||||||
<el-button type="primary" size="mini" :disabled="scope.row.JobState !== 3" @click="execute(scope.row)">
|
<el-button type="primary" size="mini" :disabled="scope.row.JobState !== 3" @click="execute(scope.row)">
|
||||||
再次执行
|
{{ $t('trials:data-sync:button:execute') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -201,7 +202,7 @@ export default {
|
||||||
}
|
}
|
||||||
let res = await batchAddSyncFileTask(params)
|
let res = await batchAddSyncFileTask(params)
|
||||||
if (res.IsSuccess) {
|
if (res.IsSuccess) {
|
||||||
this.$message.success('执行成功!')
|
this.$message.success(this.$t('trials:data-sync:msg:executeSuccessfully')) //'执行成功!'
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,22 @@
|
||||||
<template>
|
<template>
|
||||||
<el-tabs class="data-sync-tabs" type="border-card" tab-position="left" v-model="activeTab" >
|
<el-tabs class="data-sync-tabs" type="border-card" tab-position="left" v-model="activeTab" >
|
||||||
<el-tab-pane label="检查列表" name="study">
|
<!-- 检查列表 -->
|
||||||
|
<el-tab-pane :label="$t('trials:data-sync:label:studyList')" name="study">
|
||||||
<StudyList v-if="activeTab === 'study'"/>
|
<StudyList v-if="activeTab === 'study'"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="其他" name="other">
|
<!-- 其他 -->
|
||||||
<!-- <FileList v-if="activeTab === 'other'" :dataFileType="2" @openTaskTable="openTaskTable"/> -->
|
<el-tab-pane :label="$t('trials:data-sync:label:otherList')" name="other">
|
||||||
<el-tabs v-if="activeTab === 'other'" class="detail-tabs" v-model="tabInfo.activeTab" @tab-click="handleDetailTabClick">
|
<el-tabs v-if="activeTab === 'other'" class="detail-tabs" v-model="tabInfo.activeTab" @tab-click="handleDetailTabClick">
|
||||||
<el-tab-pane label="文件级别" name="file">
|
<!-- 文件级别 -->
|
||||||
<!-- v-if="tabInfo.activeTab === 'file'" -->
|
<el-tab-pane :label="$t('trials:data-sync:label:fileList')" name="file">
|
||||||
<FileList
|
<FileList
|
||||||
v-if="tabInfo.activeTab === 'file'"
|
v-if="tabInfo.activeTab === 'file'"
|
||||||
:dataFileType="2"
|
:dataFileType="2"
|
||||||
@openTaskTable="openTaskTable"
|
@openTaskTable="openTaskTable"
|
||||||
/>
|
/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="任务级别" name="task">
|
<!-- 任务级别 -->
|
||||||
|
<el-tab-pane :label="$t('trials:data-sync:label:taskList')" name="task">
|
||||||
<TaskList
|
<TaskList
|
||||||
v-if="tabInfo.activeTab === 'task'"
|
v-if="tabInfo.activeTab === 'task'"
|
||||||
:rowInfo="tabInfo.currentRow"
|
:rowInfo="tabInfo.currentRow"
|
||||||
|
|
@ -24,22 +26,6 @@
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- <el-dialog
|
|
||||||
v-if="detailDialog.visible"
|
|
||||||
:visible.sync="detailDialog.visible"
|
|
||||||
fullscreen
|
|
||||||
append-to-body
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
class="detail-dialog"
|
|
||||||
>
|
|
||||||
<span slot="title">{{ detailDialog.title }}</span>
|
|
||||||
<span v-if="detailDialog.currentRow">{{`${detailDialog.currentRow.SubjectCode} / ${detailDialog.currentRow.VisitName} ${detailDialog.currentRow.StudyCode ? ' / ' + detailDialog.currentRow.StudyCode : ''} (源:${detailDialog.currentRow.UploadRegion} -> 目标:${detailDialog.currentRow.TargetRegion})`}}</span>
|
|
||||||
<TaskList
|
|
||||||
:rowInfo="detailDialog.currentRow"
|
|
||||||
:fileUploadRecordId="detailDialog.currentRow.Id"
|
|
||||||
:path="detailDialog.currentRow.Path"
|
|
||||||
/>
|
|
||||||
</el-dialog> -->
|
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -57,7 +43,6 @@ export default {
|
||||||
return {
|
return {
|
||||||
activeTab: 'study',
|
activeTab: 'study',
|
||||||
tabInfo: {
|
tabInfo: {
|
||||||
title: '详情',
|
|
||||||
activeTab: 'file',
|
activeTab: 'file',
|
||||||
currentRow: null
|
currentRow: null
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue