Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2025-01-03 09:19:12 +08:00
commit 907371b693
7 changed files with 357 additions and 105 deletions

View File

@ -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
})

View File

@ -3932,3 +3932,22 @@ export function updateTrialUserRole(data) {
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
})
}

View File

@ -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'))

View File

@ -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>

View File

@ -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>

View File

@ -1,24 +1,10 @@
<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"
>
{{ $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
v-loading="loading"
:data="list"
border
stripe
height="500">
<el-table-column label="" :min-width="50">
<template slot-scope="scope">
{{ scope.$index + 1 }}
@ -50,9 +36,6 @@
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</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>

View File

@ -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