MRI-PDFF标准更改及导表配置更改
continuous-integration/drone/push Build is passing Details

uat_us
caiyiling 2025-01-08 13:19:52 +08:00
parent a13ef6e5d2
commit b22b9d338e
6 changed files with 121 additions and 84 deletions

View File

@ -398,7 +398,7 @@ export default {
} else if (qs.QuestionMark === 1105) { } else if (qs.QuestionMark === 1105) {
if (!v) { if (!v) {
let meanId = this.getQuestionId(1104) let meanId = this.getQuestionId(1104)
this.$set(this.questionForm, meanId, 'NA') this.$set(this.questionForm, meanId, 'NE')
} }
} }
this.setQuestions() this.setQuestions()
@ -428,7 +428,8 @@ export default {
// //
measureData.data.remark = this.getLesionName(this.orderMark, this.activeQuestionMark) measureData.data.remark = this.getLesionName(this.orderMark, this.activeQuestionMark)
} }
this.$set(this.questionForm, measureData.tableQuestionId, measureData.data.cachedStats.mean) let val = measureData.data.cachedStats.mean / 10
this.$set(this.questionForm, measureData.tableQuestionId, val.toFixed(this.digitPlaces))
data = { data = {
Id: '', Id: '',
StudyId: measureData.studyId, StudyId: measureData.studyId,
@ -743,7 +744,7 @@ export default {
let l3Id = this.getQuestionId(1103) let l3Id = this.getQuestionId(1103)
this.$set(this.questionForm, l3Id, '') this.$set(this.questionForm, l3Id, '')
let meanId = this.getQuestionId(1104) let meanId = this.getQuestionId(1104)
this.$set(this.questionForm, meanId, 'NA') this.$set(this.questionForm, meanId, 'NE')
} }
const loading = this.$loading({ fullscreen: true }) const loading = this.$loading({ fullscreen: true })
@ -839,6 +840,9 @@ export default {
/deep/ .el-button--mini, .el-button--mini.is-round { /deep/ .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px; padding: 7px 10px;
} }
/deep/ .el-input-group__append, .el-input-group__prepend {
padding: 0 10px;
}
.el-form-item__content .el-form-item__content
.el-select{ .el-select{
width: 100%; width: 100%;

View File

@ -33,13 +33,13 @@
<div class="title">{{ item.QuestionName }}</div> <div class="title">{{ item.QuestionName }}</div>
</div> </div>
<div style="color: #ddd;text-align: left;padding: 5px 10px;border-bottom: 1px solid #5a5a5a; font-size: 15px;"> <div style="color: #ddd;text-align: left;padding: 5px 10px;border-bottom: 1px solid #5a5a5a; font-size: 15px;">
<el-row :gutter="20"> <el-row >
<!-- 分段 --> <!-- 分段 -->
<el-col :span="7">{{$t('trials:MRIPDFF:label:col1')}}</el-col> <el-col :span="14">{{$t('trials:MRIPDFF:label:col1')}}</el-col>
<!-- 是否可测量 --> <!-- 是否可测量 -->
<el-col :span="8">{{$t('trials:MRIPDFF:label:col2')}}</el-col> <!-- <el-col :span="7">{{$t('trials:MRIPDFF:label:col2')}}</el-col> -->
<!-- 平均值 --> <!-- 平均值 -->
<el-col :span="6">{{$t('trials:MRIPDFF:label:col3')}}</el-col> <el-col :span="7">{{$t('trials:MRIPDFF:label:col3')}}</el-col>
</el-row> </el-row>
</div> </div>
@ -67,14 +67,14 @@
<el-tooltip v-if="readingTaskState<2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) ===1" class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')" placement="bottom"> <el-tooltip v-if="readingTaskState<2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) ===1" class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')" placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" /> <i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip> </el-tooltip>
<div style="position: absolute;left: 90px;top: 2px;"> <div style="position: absolute;right: 0px;top: 2px;">
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; --> <!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 13px;width:220px;height: 30px;"> <div style="font-size: 13px;width:110px;height: 30px;">
<div style="display: inline-block;margin-left:10px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:110px"> <!-- <div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:95px">
{{ $fd('ReadingYesOrNo', parseInt(item.TableQuestions.Answers[i].isMeasurable)) }} {{ $fd('ReadingYesOrNo', parseInt(item.TableQuestions.Answers[i].isMeasurable)) }}
</div> </div> -->
<div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:80px"> <div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:50px">
{{ item.TableQuestions.Answers[i].mean }} {{ isNaN(parseFloat(item.TableQuestions.Answers[i].mean)) ? item.TableQuestions.Answers[i].mean : `${item.TableQuestions.Answers[i].mean}%` }}
</div> </div>
</div> </div>
</div> </div>

View File

@ -20,25 +20,6 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane
label="CDISC导出"
name="CDISC"
>
<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"
>
<exportList
v-if="CDISCCriterionId === i.TrialReadingCriterionId && activeName === 'CDISC'"
:trialReadingCriterionId="i.TrialReadingCriterionId"
:data="data"
/>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
<el-tab-pane <el-tab-pane
label="报表导出配置" label="报表导出配置"
name="reportConfig" name="reportConfig"
@ -53,26 +34,6 @@
<configList <configList
v-if="reportConfigCriterionId === i.TrialReadingCriterionId && activeName === 'reportConfig'" v-if="reportConfigCriterionId === i.TrialReadingCriterionId && activeName === 'reportConfig'"
:trialReadingCriterionId="i.TrialReadingCriterionId" :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-tab-pane>
</el-tabs> </el-tabs>

View File

@ -1,6 +1,9 @@
<template> <template>
<div> <div>
<el-button type="primary" size="mini" @click="submit" style="margin-bottom: 5px;">提交</el-button> <!-- 保存 -->
<el-button type="primary" size="mini" @click="submit" style="margin-bottom: 5px;">
{{ $t('common:button:save') }}
</el-button>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="exportInfo.QuestionList" :data="exportInfo.QuestionList"
@ -10,15 +13,16 @@
default-expand-all default-expand-all
:tree-props="{ children: 'Children', hasChildren: 'hasChildren' }" :tree-props="{ children: 'Children', hasChildren: 'hasChildren' }"
> >
<!-- 问题名称 -->
<el-table-column <el-table-column
prop="QuestionName" prop="QuestionName"
label="问题名称" :label="$t('trials:readingTracking:config:questionName')"
width="300"> width="300">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-for="item in exportInfo.DicList" v-for="item in exportInfo.DicList"
:key="item.Code" :key="item.Code"
:label="item.ValueCN" > :label="$i18n.locale === 'zh' ? item.ValueCN : item.Value">
<template v-slot="scope"> <template v-slot="scope">
<el-checkbox <el-checkbox
@change="() => changeState(scope, item.Code)" @change="() => changeState(scope, item.Code)"
@ -26,16 +30,15 @@
</el-checkbox> </el-checkbox>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <!-- CDISC编码 -->
v-if="exportType === 1" <el-table-column
prop="CDISCCode" prop="CDISCCode"
label="CDISC编码" :label="$t('trials:readingTracking:config:code')"
width="500" width="180"
> >
<template v-slot="scope"> <template v-slot="scope">
<el-input <el-input
v-model="scope.row.CDISCCode" v-model="scope.row.CDISCCode"
placeholder="CDISC编码"
size="mini" size="mini"
> >
</el-input> </el-input>
@ -54,10 +57,6 @@ export default {
type: String, type: String,
required: true required: true
}, },
exportType: {
type: Number,
required: true
}
}, },
data() { data() {
return { return {
@ -74,8 +73,7 @@ export default {
this.loading = true this.loading = true
let res = await getTrialQuestionExportResult( let res = await getTrialQuestionExportResult(
{ {
trialReadingCriterionId: this.trialReadingCriterionId, trialReadingCriterionId: this.trialReadingCriterionId
exportType: this.exportType
} }
) )
if (res.IsSuccess) { if (res.IsSuccess) {
@ -91,7 +89,6 @@ export default {
this.loading = true this.loading = true
try { try {
let params= { let params= {
exportType: this.exportType,
questionList: [], questionList: [],
tableQuestionList: [] tableQuestionList: []
} }

View File

@ -110,6 +110,10 @@
<el-button type="primary" icon="el-icon-download" @click="handleExport"> <el-button type="primary" icon="el-icon-download" @click="handleExport">
{{ $t('common:button:export') }} {{ $t('common:button:export') }}
</el-button> </el-button>
<!-- 阅片结果 -->
<el-button type="primary" @click="handleReviewResults">
{{ $t('trials:readingTracking:button:reviewResults') }}
</el-button>
<el-button type="primary" icon="el-icon-info" @click="handleViewRecord"> <el-button type="primary" icon="el-icon-info" @click="handleViewRecord">
{{ $t('common:button:failureRecord') }} {{ $t('common:button:failureRecord') }}
</el-button> </el-button>
@ -943,6 +947,9 @@
<script> <script>
import { getTrialSiteSelect,setTaskUrgent } from '@/api/trials' import { getTrialSiteSelect,setTaskUrgent } from '@/api/trials'
import { getTrialCriterionList, PMSetTaskBack, getInfluencedTaskList, getReReadingOrBackInfluenceTaskList, getReadingTaskList, configTrialReadingTaskViewRule, getDoctorUserSelectList, applyReReading } from '@/api/trials/reading' import { getTrialCriterionList, PMSetTaskBack, getInfluencedTaskList, getReReadingOrBackInfluenceTaskList, getReadingTaskList, configTrialReadingTaskViewRule, getDoctorUserSelectList, applyReReading } from '@/api/trials/reading'
import {
getReadingTaskList_Export
} from '@/api/export'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import { changeURLStatic } from '@/utils/history.js' import { changeURLStatic } from '@/utils/history.js'
import BaseContainer from '@/components/BaseContainer' import BaseContainer from '@/components/BaseContainer'
@ -1089,7 +1096,16 @@ export default {
} }
}) })
}, },
handleExport() { async handleExport() {
this.loading = true
try {
await getReadingTaskList_Export(this.searchData)
this.loading = false
} catch(e) {
this.loading = false
}
},
handleReviewResults() {
this.exportVisible = true this.exportVisible = true
}, },
handleView(row) { handleView(row) {

View File

@ -19,7 +19,7 @@
> >
<template v-for="item of $d.Criterion_Question_Type"> <template v-for="item of $d.Criterion_Question_Type">
<el-option <el-option
v-if="item.value !== 'calculation' && item.value !== 'increment' && item.value !== 'table' && item.value !== 'basicTable' && item.value !== 'group'" v-if="item.value !== 'increment' && item.value !== 'table' && item.value !== 'basicTable' && item.value !== 'group'"
:key="item.value" :key="item.value"
:value="item.value" :value="item.value"
:label="item.label" :label="item.label"
@ -114,9 +114,9 @@
<el-select v-model="form.ParentTriggerValueList" clearable multiple> <el-select v-model="form.ParentTriggerValueList" clearable multiple>
<el-option <el-option
v-for="item of parentTriggerValOptions" v-for="item of parentTriggerValOptions"
:key="item" :key="item.id"
:label="item" :label="item.label"
:value="item" :value="String(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -148,9 +148,9 @@
<el-select v-model="form.RelevanceValueList" clearable multiple> <el-select v-model="form.RelevanceValueList" clearable multiple>
<el-option <el-option
v-for="item of reParentTriggerValOptions" v-for="item of reParentTriggerValOptions"
:key="item" :key="item.id"
:label="item" :label="item.label"
:value="item" :value="String(item.value)"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -964,6 +964,7 @@ export default {
} }
}, },
mounted() { mounted() {
console.log(this.$d.Criterion_Question_Type)
this.validateTypeVal = (rule, value, callback) => { this.validateTypeVal = (rule, value, callback) => {
if (value === '' && this.form.Type !== 'number') { if (value === '' && this.form.Type !== 'number') {
callback(new Error(this.$t('common:ruleMessage:specify'))) callback(new Error(this.$t('common:ruleMessage:specify')))
@ -1127,7 +1128,22 @@ export default {
return item.QuestionId === this.form.ParentId return item.QuestionId === this.form.ParentId
}) })
if (index !== -1) { if (index !== -1) {
this.parentTriggerValOptions = this.parentOptions[index].TypeValue.split('|') if (this.parentOptions[index].QuestionGenre === 3) {
// this.parentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode]
let dicCode = this.parentOptions[index].DictionaryCode
let res = await getCriterionDictionary({ReadingCriterionId: this.criterionId, DictionaryCode: dicCode})
this.parentTriggerValOptions = res.Result[dicCode].map(i=>{
return {id: i.Id, label: this.$i18n.locale === 'zh' ? i.ValueCN : i.Value, value: i.Code}
})
} else {
const options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => {
options.push({ id: index, label: item, value: item })
})
this.parentTriggerValOptions = options
}
} }
} }
if (this.form.RelevanceId) { if (this.form.RelevanceId) {
@ -1135,7 +1151,21 @@ export default {
return item.QuestionId === this.form.RelevanceId return item.QuestionId === this.form.RelevanceId
}) })
if (i !== -1) { if (i !== -1) {
this.reParentTriggerValOptions = this.parentOptions[i].TypeValue.split('|') // this.reParentTriggerValOptions = this.parentOptions[i].TypeValue.split('|')
if (this.parentOptions[i].QuestionGenre === 3) {
// this.reParentTriggerValOptions = this.$d[this.parentOptions[i].DictionaryCode]
let dicCode = this.parentOptions[i].DictionaryCode
let res = await getCriterionDictionary({ReadingCriterionId: this.criterionId, DictionaryCode: dicCode})
this.reParentTriggerValOptions = res.Result[dicCode].map(i=>{
return {id: i.Id, label: this.$i18n.locale === 'zh' ? i.ValueCN : i.Value, value: i.Code}
})
} else {
const options = []
this.parentOptions[i].TypeValue.split('|').forEach((item, index) => {
options.push({ id: i, label: item, value: item })
})
this.reParentTriggerValOptions = options
}
} }
} }
} }
@ -1231,24 +1261,53 @@ export default {
form.RelevanceValueList = [] form.RelevanceValueList = []
} }
}, },
parentQuestionChange(val, form) { async parentQuestionChange(val, form) {
if (val) { if (val) {
var index = this.parentOptions.findIndex(item => { var index = this.parentOptions.findIndex(item => {
return item.QuestionId === val return item.QuestionId === val
}) })
if (index !== -1) { if (index !== -1) {
this.parentTriggerValOptions = this.parentOptions[index].TypeValue.split('|') if (this.parentOptions[index].QuestionGenre === 3) {
// this.reParentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode]
let dicCode = this.parentOptions[index].DictionaryCode
let res = await getCriterionDictionary({ReadingCriterionId: this.criterionId, DictionaryCode: dicCode})
this.parentTriggerValOptions = res.Result[dicCode].map(i=>{
return {id: i.Id, label: this.$i18n.locale === 'zh' ? i.ValueCN : i.Value, value: i.Code}
})
} else {
const options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => {
options.push({ id: index, label: item, value: item })
})
this.parentTriggerValOptions = options
}
} }
} }
form.ParentTriggerValueList = [] form.ParentTriggerValueList = []
}, },
relevanceQuestionChange(val, form) { async relevanceQuestionChange(val, form) {
if (val) { if (val) {
var index = this.parentOptions.findIndex(item => { var index = this.parentOptions.findIndex(item => {
return item.QuestionId === val return item.QuestionId === val
}) })
if (index !== -1) { if (index !== -1) {
this.reParentTriggerValOptions = this.parentOptions[index].TypeValue.split('|') // this.reParentTriggerValOptions = this.parentOptions[index].TypeValue.split('|')
if (this.parentOptions[index].QuestionGenre === 3) {
// this.reParentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode]
let dicCode = this.parentOptions[index].DictionaryCode
let res = await getCriterionDictionary({ReadingCriterionId: this.criterionId, DictionaryCode: dicCode})
this.reParentTriggerValOptions = res.Result[dicCode].map(i=>{
return {id: i.Id, label: this.$i18n.locale === 'zh' ? i.ValueCN : i.Value, value: i.Code}
})
} else {
const options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => {
options.push({ id: index, label: item, value: item })
})
this.reParentTriggerValOptions = options
}
} }
} }
form.RelevanceValueList = [] form.RelevanceValueList = []