Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
907371b693
|
@ -252,17 +252,25 @@ export function uploadOCTLipidAngleTemplate(param) {
|
|||
})
|
||||
}
|
||||
|
||||
export function saveTableQuestionMark(param) {
|
||||
export function saveTableQuestionMark(param, type) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/saveTableQuestionMark`,
|
||||
url: `/saveTableQuestionMark/${type}`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteTableQuestionMark(param) {
|
||||
export function deleteTableQuestionMark(param, type) {
|
||||
return request({
|
||||
url: `/ReadingImageTask/deleteTableQuestionMark`,
|
||||
url: `/deleteTableQuestionMark/${type}`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function submitTaskRowInfo(param, type) {
|
||||
return request({
|
||||
url: `/SubmitTaskRowInfo/${type}`,
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
|
|
|
@ -3931,4 +3931,23 @@ export function updateTrialUserRole(data) {
|
|||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 获取报表配置
|
||||
export function getTrialQuestionExportResult(data) {
|
||||
return request({
|
||||
url: `/ReadingQuestion/getTrialQuestionExportResult`,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
// 修改报表配置
|
||||
export function setTrialQuestionExportResult(data) {
|
||||
return request({
|
||||
url: `/ReadingQuestion/SetTrialQuestionExportResult`,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
|
@ -202,8 +202,8 @@
|
|||
</el-form>
|
||||
</template>
|
||||
<script>
|
||||
import { submitTableQuestion } from '@/api/trials'
|
||||
import { saveTableQuestionMark, deleteTableQuestionMark } from '@/api/reading'
|
||||
// import { submitTableQuestion } from '@/api/trials'
|
||||
import { saveTableQuestionMark, submitTaskRowInfo, deleteTableQuestionMark } from '@/api/reading'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
|
@ -328,6 +328,7 @@ export default {
|
|||
if (!isNaN(parseInt(isMeasurable)) && parseInt(isMeasurable) === 1) {
|
||||
this.isDisabledMeasurableRadio = true
|
||||
}
|
||||
i.MeasureData = JSON.parse(i.MeasureData)
|
||||
}
|
||||
this.markList.push({tableQuestionId: i.TableQuestionId, measureData: i, saveEnum: 1})
|
||||
})
|
||||
|
@ -581,7 +582,7 @@ export default {
|
|||
async saveTableQuestionInfo(params, qs) {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
try {
|
||||
let res = await saveTableQuestionMark(params)
|
||||
let res = await saveTableQuestionMark(params, 11)
|
||||
if (res.IsSuccess) {
|
||||
// 保存后设置保存状态
|
||||
let i = this.markList.findIndex(i=>i.tableQuestionId === qs.Id)
|
||||
|
@ -702,7 +703,7 @@ export default {
|
|||
try {
|
||||
let isResetMarks = this.markList.findIndex(i=>i.measureData && i.measureData.MeasureData) > -1 ? true : false
|
||||
if (parseInt(this.questionForm[this.isMeasurableId]) === 0 && this.isExitsMarks) {
|
||||
await deleteTableQuestionMark({rowId: this.questionForm.RowId})
|
||||
await deleteTableQuestionMark({rowId: this.questionForm.RowId}, 11)
|
||||
this.markList.forEach(i => {
|
||||
if (i.measureData && i.measureData.MeasureData) {
|
||||
i.measureData = ''
|
||||
|
@ -729,7 +730,7 @@ export default {
|
|||
answerList: answers,
|
||||
isDicomReading: true
|
||||
}
|
||||
const res = await submitTableQuestion(params)
|
||||
const res = await submitTaskRowInfo(params, 11)
|
||||
if (res.IsSuccess) {
|
||||
// 保存成功!
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
<template>
|
||||
<div style="text-align: right">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane
|
||||
label="报表导出"
|
||||
name="report"
|
||||
>
|
||||
<el-tabs type="border-card" v-model="reportCriterionId">
|
||||
<el-tab-pane
|
||||
:label="i.TrialReadingCriterionName"
|
||||
:name="i.TrialReadingCriterionId"
|
||||
v-for="i of trialCriterionList"
|
||||
:key="i.TrialReadingCriterionId"
|
||||
>
|
||||
<exportList
|
||||
v-if="reportCriterionId === i.TrialReadingCriterionId && activeName === 'report'"
|
||||
:trialReadingCriterionId="i.TrialReadingCriterionId"
|
||||
:data="data"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane
|
||||
label="CDISC导出"
|
||||
name="CDISC"
|
||||
>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane
|
||||
label="报表导出配置"
|
||||
name="reportConfig"
|
||||
>
|
||||
<el-tabs type="border-card" v-model="reportConfigCriterionId">
|
||||
<el-tab-pane
|
||||
:label="i.TrialReadingCriterionName"
|
||||
:name="i.TrialReadingCriterionId"
|
||||
v-for="i of trialCriterionList"
|
||||
:key="i.TrialReadingCriterionId"
|
||||
>
|
||||
<configList
|
||||
v-if="reportConfigCriterionId === i.TrialReadingCriterionId && activeName === 'reportConfig'"
|
||||
:trialReadingCriterionId="i.TrialReadingCriterionId"
|
||||
:exportType="0"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane
|
||||
label="CDISC导出配置"
|
||||
name="CDISCConfig"
|
||||
>
|
||||
<el-tabs type="border-card" v-model="CDISCCriterionId">
|
||||
<el-tab-pane
|
||||
:label="i.TrialReadingCriterionName"
|
||||
:name="i.TrialReadingCriterionId"
|
||||
v-for="i of trialCriterionList"
|
||||
:key="i.TrialReadingCriterionId"
|
||||
>
|
||||
<configList
|
||||
v-if="CDISCCriterionId === i.TrialReadingCriterionId && activeName === 'CDISCConfig'"
|
||||
:trialReadingCriterionId="i.TrialReadingCriterionId"
|
||||
:exportType="1"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTrialCriterionList } from '@/api/trials/reading'
|
||||
import exportList from './exportList'
|
||||
import configList from './configList'
|
||||
export default {
|
||||
name: 'ReviewResults',
|
||||
components: {
|
||||
exportList,
|
||||
configList
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
trialCriterionList: [],
|
||||
reportCriterionId: null,
|
||||
trialId: null,
|
||||
activeName: 'report',
|
||||
reportConfigCriterionId: '',
|
||||
CDISCCriterionId: ''
|
||||
}
|
||||
},
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.getTrialCriterionList()
|
||||
},
|
||||
methods: {
|
||||
async getTrialCriterionList() {
|
||||
try {
|
||||
let res = await getTrialCriterionList(this.trialId)
|
||||
if (res.IsSuccess) {
|
||||
this.trialCriterionList = res.Result
|
||||
this.reportCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
|
||||
this.reportConfigCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
|
||||
this.CDISCCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
|
||||
}
|
||||
} catch(e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
|
@ -0,0 +1,127 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-button type="primary" size="mini" @click="submit" style="margin-bottom: 5px;">提交</el-button>
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="exportInfo.QuestionList"
|
||||
height="500"
|
||||
row-key="Id"
|
||||
border
|
||||
default-expand-all
|
||||
:tree-props="{ children: 'Children', hasChildren: 'hasChildren' }"
|
||||
>
|
||||
<el-table-column
|
||||
prop="QuestionName"
|
||||
label="问题名称"
|
||||
width="300">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
v-for="item in exportInfo.DicList"
|
||||
:key="item.Code"
|
||||
:label="item.ValueCN" >
|
||||
<template v-slot="scope">
|
||||
<el-checkbox
|
||||
@change="() => changeState(scope, item.Code)"
|
||||
:checked="getCheckState(scope, item.Code)">
|
||||
</el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="exportType === 1"
|
||||
prop="CDISCCode"
|
||||
label="CDISC编码"
|
||||
width="500"
|
||||
>
|
||||
<template v-slot="scope">
|
||||
<el-input v-model="scope.row.CDISCCode" placeholder="CDISC编码"></el-input>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getTrialQuestionExportResult, setTrialQuestionExportResult } from '@/api/trials'
|
||||
export default {
|
||||
name: 'configList',
|
||||
props: {
|
||||
trialReadingCriterionId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
exportType: {
|
||||
type: Number,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
exportInfo: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getConfigInfo()
|
||||
},
|
||||
methods: {
|
||||
async getConfigInfo() {
|
||||
try {
|
||||
this.loading = true
|
||||
let res = await getTrialQuestionExportResult({trialReadingCriterionId: this.trialReadingCriterionId})
|
||||
if (res.IsSuccess) {
|
||||
this.exportInfo = res.Result
|
||||
}
|
||||
this.loading = false
|
||||
} catch(e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
async submit() {
|
||||
this.loading = true
|
||||
try {
|
||||
let params= {
|
||||
exportType: this.exportType,
|
||||
questionList: [],
|
||||
tableQuestionList: []
|
||||
}
|
||||
params.questionList = this.exportInfo.QuestionList.map(i => {
|
||||
return {
|
||||
questionId: i.QuestionId,
|
||||
tableQuestionId: i.TableQuestionId,
|
||||
exportResult: i.ExportResult,
|
||||
CDISCCode: i.CDISCCode
|
||||
}
|
||||
})
|
||||
this.exportInfo.QuestionList.forEach(i => {
|
||||
let childlist = i.Children.map(k => {
|
||||
return {
|
||||
questionId: i.QuestionId,
|
||||
tableQuestionId: k.TableQuestionId,
|
||||
exportResult: k.ExportResult,
|
||||
CDISCCode: k.CDISCCode
|
||||
}
|
||||
})
|
||||
params.tableQuestionList = params.tableQuestionList.concat(childlist)
|
||||
})
|
||||
let res = await setTrialQuestionExportResult(params)
|
||||
if (res.IsSuccess) {
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
}
|
||||
this.loading = false
|
||||
} catch(e) {
|
||||
this.loading = false
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
// 获取状态
|
||||
getCheckState(item, code) {
|
||||
return item.row.ExportResult.indexOf(code) > -1
|
||||
},
|
||||
// 改变状态
|
||||
changeState(item, code) {
|
||||
item.row.ExportResult.indexOf(code) > -1 ? item.row.ExportResult.splice(item.row.ExportResult.indexOf(code), 1) : item.row.ExportResult.push(code);
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,58 +1,41 @@
|
|||
<template>
|
||||
<div style="text-align: right">
|
||||
<!--导出-->
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="!(trialCriterionList.length > 0)"
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport(0)"
|
||||
style="margin-bottom: 10px"
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="list"
|
||||
border
|
||||
stripe
|
||||
height="500">
|
||||
<el-table-column label="" :min-width="50">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 文件名称 -->
|
||||
<el-table-column
|
||||
:label="$t('trials:reviewTrack:title:fileName')"
|
||||
:min-width="50"
|
||||
>
|
||||
{{ $t('common:button:export') }}
|
||||
</el-button>
|
||||
<el-tabs type="border-card" v-model="TrialReadingCriterionId">
|
||||
<el-tab-pane
|
||||
:label="i.TrialReadingCriterionName"
|
||||
:name="i.TrialReadingCriterionId"
|
||||
v-for="i of trialCriterionList"
|
||||
:key="i.TrialReadingCriterionId"
|
||||
>
|
||||
<el-table v-loading="loading" :data="list" border stripe>
|
||||
<el-table-column label="" :min-width="50">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 文件名称 -->
|
||||
<el-table-column
|
||||
:label="$t('trials:reviewTrack:title:fileName')"
|
||||
:min-width="50"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.FileName }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop=""
|
||||
:label="$t('common:action:action')"
|
||||
min-width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 下载 -->
|
||||
<el-button
|
||||
icon="el-icon-download"
|
||||
circle
|
||||
:title="$t('trials:reviewTrack:title:download')"
|
||||
size="mini"
|
||||
@click="handleExport(scope.row.ExportCatogory)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.FileName }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop=""
|
||||
:label="$t('common:action:action')"
|
||||
min-width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 下载 -->
|
||||
<el-button
|
||||
icon="el-icon-download"
|
||||
circle
|
||||
:title="$t('trials:reviewTrack:title:download')"
|
||||
size="mini"
|
||||
@click="handleExport(scope.row.ExportCatogory)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -65,51 +48,49 @@ import {
|
|||
getEvaluationOfTumorEfficacy_Export,
|
||||
getDetailedOfEvaluatedLesion_Export,
|
||||
} from '@/api/export'
|
||||
import { getTrialCriterionList } from '@/api/trials/reading'
|
||||
|
||||
export default {
|
||||
name: 'exportList',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
trialCriterionList: [],
|
||||
TrialReadingCriterionId: null,
|
||||
trialId: null,
|
||||
list: [],
|
||||
}
|
||||
},
|
||||
props: {
|
||||
trialReadingCriterionId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
TrialReadingCriterionId(v) {
|
||||
if (v === '0') return
|
||||
this.loading = true
|
||||
getTrialReadingCriterionCanExportDocumentList({
|
||||
TrialReadingCriterionId: v,
|
||||
})
|
||||
.then((res) => {
|
||||
this.list = res.Result
|
||||
this.loading = false
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = true
|
||||
})
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
trialId: null,
|
||||
list: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.getTrialCriterionList()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
async getList() {
|
||||
this.loading = true
|
||||
try {
|
||||
let res = await getTrialReadingCriterionCanExportDocumentList({
|
||||
TrialReadingCriterionId: this.trialReadingCriterionId,
|
||||
})
|
||||
if (res.IsSuccess) {
|
||||
this.list = res.Result
|
||||
}
|
||||
this.loading = false
|
||||
} catch(e) {
|
||||
console.log(e)
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
handleExport(type) {
|
||||
var searchData = { ...this.data }
|
||||
searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
|
||||
searchData.TrialReadingCriterionId = this.trialReadingCriterionId
|
||||
switch (type) {
|
||||
case 0:
|
||||
getReadingTaskList_Export(searchData)
|
||||
|
@ -183,15 +164,6 @@ export default {
|
|||
break
|
||||
}
|
||||
},
|
||||
getTrialCriterionList() {
|
||||
getTrialCriterionList(this.trialId)
|
||||
.then((res) => {
|
||||
this.trialCriterionList = res.Result
|
||||
this.TrialReadingCriterionId =
|
||||
this.trialCriterionList[0].TrialReadingCriterionId
|
||||
})
|
||||
.catch(() => {})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -833,11 +833,13 @@
|
|||
</el-dialog>
|
||||
<el-dialog
|
||||
v-if="exportVisible"
|
||||
v-dialogDrag
|
||||
:title="$t('trials:reviewTrack:button:export')"
|
||||
:visible.sync="exportVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="60%"
|
||||
append-to-body>
|
||||
<exportList :trial-reading-criterion-id="TrialReadingCriterionId" :data="searchData" />
|
||||
<ReviewResults :data="searchData" />
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
@ -946,7 +948,7 @@ import { changeURLStatic } from '@/utils/history.js'
|
|||
import BaseContainer from '@/components/BaseContainer'
|
||||
import Pagination from '@/components/Pagination'
|
||||
import RefereeRules from './components/RefereeRules.vue'
|
||||
import exportList from './components/exportList.vue'
|
||||
import ReviewResults from './components/ReviewResults'
|
||||
import ClinicalData from "../../subject/reading-period/components/ClinicalData"
|
||||
import RecordList from './components/RecordList.vue'
|
||||
const searchDataDefault = () => {
|
||||
|
@ -978,7 +980,7 @@ const searchDataDefault = () => {
|
|||
}
|
||||
export default {
|
||||
name: 'TrialsNotice',
|
||||
components: { BaseContainer, Pagination, RefereeRules, ClinicalData, exportList, RecordList },
|
||||
components: { BaseContainer, Pagination, RefereeRules, ClinicalData, ReviewResults, RecordList },
|
||||
props: {
|
||||
AllocationReadingCategory: {
|
||||
type: String
|
||||
|
|
Loading…
Reference in New Issue