IVUS & OCT测量表格添加新开页签预览功能
parent
6ecc0e58e9
commit
06c7a8126b
|
|
@ -480,3 +480,11 @@ export function getNoneDicomMarkList(data) {
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getFilterTableQuestion(data) {
|
||||||
|
return request({
|
||||||
|
url: `/ReadingImageTask/getFilterTableQuestion`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,11 @@ export const constantRoutes = [
|
||||||
hidden: true,
|
hidden: true,
|
||||||
component: () => import('@/views/trials/trials-panel/reading/dicoms/none-dicoms')
|
component: () => import('@/views/trials/trials-panel/reading/dicoms/none-dicoms')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/ecrfList',
|
||||||
|
hidden: true,
|
||||||
|
component: () => import('@/views/trials/trials-panel/reading/dicoms/components/TableList')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/readingPage',
|
path: '/readingPage',
|
||||||
name: 'readingPage',
|
name: 'readingPage',
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
const WHITELIST = ['/', "/curriculumVitae", 'researchDetail_m', '/researchForm', '/ReviewersResearch', '/login', '/link_expired', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/researchLogin_m', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
|
const WHITELIST = ['/', "/curriculumVitae", 'researchDetail_m', '/researchForm', '/ReviewersResearch', '/login', '/link_expired', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/researchLogin_m', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms', '/ecrfList']
|
||||||
export default WHITELIST
|
export default WHITELIST
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ export default {
|
||||||
activeTool: '',
|
activeTool: '',
|
||||||
imageType: ['image/jpeg', 'image/jpg', 'image/bmp', 'image/png'],
|
imageType: ['image/jpeg', 'image/jpg', 'image/bmp', 'image/png'],
|
||||||
loading: false,
|
loading: false,
|
||||||
isFitToWindowMode: false,
|
isFitToWindowMode: true,
|
||||||
trialId: null,
|
trialId: null,
|
||||||
activeName: '1',
|
activeName: '1',
|
||||||
tools: [],
|
tools: [],
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@
|
||||||
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
||||||
<i class="el-icon-plus" />
|
<i class="el-icon-plus" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="add-icon" @click.prevent="handleView(item)">
|
||||||
|
<i class="el-icon-view" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -222,6 +225,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
|
import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials'
|
||||||
import { resetReadingTask, getIVUSTemplate } from '@/api/reading'
|
import { resetReadingTask, getIVUSTemplate } from '@/api/reading'
|
||||||
|
import { getToken } from '@/utils/auth'
|
||||||
import DicomEvent from './../DicomEvent'
|
import DicomEvent from './../DicomEvent'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
|
|
@ -284,7 +288,8 @@ export default {
|
||||||
sRoiEndDistanceId: '',
|
sRoiEndDistanceId: '',
|
||||||
sRoiDistanceId: '',
|
sRoiDistanceId: '',
|
||||||
rowSaveLoadingMap: {},
|
rowSaveLoadingMap: {},
|
||||||
dialogSaveLoading: false
|
dialogSaveLoading: false,
|
||||||
|
openWindow: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -739,6 +744,16 @@ export default {
|
||||||
this.addOrEdit.visible = true
|
this.addOrEdit.visible = true
|
||||||
this.addOrEdit.lesionType = row.LesionType
|
this.addOrEdit.lesionType = row.LesionType
|
||||||
},
|
},
|
||||||
|
handleView(item) {
|
||||||
|
if (this.openWindow) {
|
||||||
|
this.openWindow.close()
|
||||||
|
}
|
||||||
|
localStorage.setItem('taskBlindName', this.taskBlindName)
|
||||||
|
localStorage.setItem('isReadingShowSubjectInfo', this.isReadingShowSubjectInfo)
|
||||||
|
let token = getToken()
|
||||||
|
let routeData = this.$router.resolve({ path: `/ecrfList?trialId=${this.$route.query.trialId}&visitTaskId=${this.visitTaskId}&questionId=${item.Id}&TokenKey=${token}` })
|
||||||
|
this.openWindow = window.open(routeData.href, "_blank")
|
||||||
|
},
|
||||||
async saveFormData() {
|
async saveFormData() {
|
||||||
if (this.dialogSaveLoading) return
|
if (this.dialogSaveLoading) return
|
||||||
this.dialogSaveLoading = true
|
this.dialogSaveLoading = true
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@
|
||||||
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
||||||
<i class="el-icon-plus" />
|
<i class="el-icon-plus" />
|
||||||
</div>
|
</div>
|
||||||
|
<div class="add-icon" @click.prevent="handleView(item)">
|
||||||
|
<i class="el-icon-view" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -224,6 +227,7 @@ import { saveTaskQuestion, submitTableQuestion, deleteReadingRowAnswer } from '@
|
||||||
import { resetReadingTask, getOCTFCTTemplate, getOCTLipidAngleTemplate } from '@/api/reading'
|
import { resetReadingTask, getOCTFCTTemplate, getOCTLipidAngleTemplate } from '@/api/reading'
|
||||||
import DicomEvent from './../DicomEvent'
|
import DicomEvent from './../DicomEvent'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import { getToken } from '@/utils/auth'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import Questions from './../Questions'
|
import Questions from './../Questions'
|
||||||
import QuestionTableFormItem from './QuestionTableFormItem'
|
import QuestionTableFormItem from './QuestionTableFormItem'
|
||||||
|
|
@ -285,7 +289,8 @@ export default {
|
||||||
sRoiEndDistanceId: '',
|
sRoiEndDistanceId: '',
|
||||||
sRoiDistanceId: '',
|
sRoiDistanceId: '',
|
||||||
rowSaveLoadingMap: {},
|
rowSaveLoadingMap: {},
|
||||||
dialogSaveLoading: false
|
dialogSaveLoading: false,
|
||||||
|
openWindow: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -755,6 +760,16 @@ export default {
|
||||||
this.addOrEdit.visible = true
|
this.addOrEdit.visible = true
|
||||||
this.addOrEdit.lesionType = row.LesionType
|
this.addOrEdit.lesionType = row.LesionType
|
||||||
},
|
},
|
||||||
|
handleView(item) {
|
||||||
|
if (this.openWindow) {
|
||||||
|
this.openWindow.close()
|
||||||
|
}
|
||||||
|
localStorage.setItem('taskBlindName', this.taskBlindName)
|
||||||
|
localStorage.setItem('isReadingShowSubjectInfo', this.isReadingShowSubjectInfo)
|
||||||
|
let token = getToken()
|
||||||
|
let routeData = this.$router.resolve({ path: `/ecrfList?trialId=${this.$route.query.trialId}&visitTaskId=${this.visitTaskId}&questionId=${item.Id}&TokenKey=${token}` })
|
||||||
|
this.openWindow = window.open(routeData.href, "_blank")
|
||||||
|
},
|
||||||
async saveFormData() {
|
async saveFormData() {
|
||||||
if (this.dialogSaveLoading) return
|
if (this.dialogSaveLoading) return
|
||||||
this.dialogSaveLoading = true
|
this.dialogSaveLoading = true
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,105 @@
|
||||||
|
<template>
|
||||||
|
<div class="table-list-container">
|
||||||
|
<h3 v-if="isReadingShowSubjectInfo">
|
||||||
|
<span v-if="subjectCode">{{ subjectCode }} </span>
|
||||||
|
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||||
|
</h3>
|
||||||
|
<h3 v-if="tableQuestion && tableQuestion.GroupName">
|
||||||
|
{{ language === 'en' ? tableQuestion.GroupEnName : tableQuestion.GroupName }}
|
||||||
|
</h3>
|
||||||
|
<h4 v-if="tableQuestion && tableQuestion.QuestionName">
|
||||||
|
{{ tableQuestion.QuestionName }}
|
||||||
|
</h4>
|
||||||
|
<el-table
|
||||||
|
v-if="tableQuestion && tableQuestion.Type === 'basicTable' && tableQuestion.TableQuestions"
|
||||||
|
:ref="tableQuestion.Id"
|
||||||
|
:data="tableQuestion.TableQuestions.Answers"
|
||||||
|
v-loading="loading"
|
||||||
|
height="100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
v-for="q of tableQuestion.TableQuestions.Questions"
|
||||||
|
:key="q.Id"
|
||||||
|
:prop="q.Id"
|
||||||
|
:label="q.QuestionName"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="q.Unit > 0 && !isNaN(parseFloat(scope.row[q.Id]))">
|
||||||
|
{{ `${scope.row[q.Id]} ${$fd('ValueUnit', parseInt(q.Unit))}` }}
|
||||||
|
</span>
|
||||||
|
<span v-else-if="q.DictionaryCode">
|
||||||
|
{{`${scope.row[q.Id] instanceof Array ? scope.row[q.Id].map(item => $fd(q.DictionaryCode,
|
||||||
|
parseInt(item))).join(',') : $fd(q.DictionaryCode, parseInt(scope.row[q.Id]))}`}}
|
||||||
|
</span>
|
||||||
|
<span v-else-if="q.OptionTypeEnum === 1">
|
||||||
|
{{ `${scope.row[q.Id] instanceof Array ? scope.row[q.Id].join(',') : scope.row[q.Id]}` }}
|
||||||
|
</span>
|
||||||
|
<span v-else>
|
||||||
|
{{ `${scope.row[q.Id]}` }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getFilterTableQuestion } from '@/api/reading'
|
||||||
|
import store from '@/store'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
import { changeURLStatic } from '@/utils/history.js'
|
||||||
|
export default {
|
||||||
|
name: 'DicomTableList',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isReadingShowSubjectInfo: false,
|
||||||
|
subjectCode: null,
|
||||||
|
taskBlindName: null,
|
||||||
|
questionId: null,
|
||||||
|
tableQuestion: null,
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['language'])
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
if (this.$route.query.TokenKey) {
|
||||||
|
store.dispatch('user/setToken', this.$route.query.TokenKey)
|
||||||
|
changeURLStatic('TokenKey', '')
|
||||||
|
}
|
||||||
|
this.subjectCode = localStorage.getItem('subjectCode')
|
||||||
|
this.taskBlindName = localStorage.getItem('taskBlindName')
|
||||||
|
this.isReadingShowSubjectInfo = localStorage.getItem('isReadingShowSubjectInfo')
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getList() {
|
||||||
|
try {
|
||||||
|
this.loading = true
|
||||||
|
let params = {
|
||||||
|
trialId: this.$route.query.trialId,
|
||||||
|
visitTaskId: this.$route.query.visitTaskId,
|
||||||
|
questionId: this.$route.query.questionId
|
||||||
|
}
|
||||||
|
let res = await getFilterTableQuestion(params)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.tableQuestion = res.Result
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
resetList() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.table-list-container {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Reference in New Issue