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) {
if (!v) {
let meanId = this.getQuestionId(1104)
this.$set(this.questionForm, meanId, 'NA')
this.$set(this.questionForm, meanId, 'NE')
}
}
this.setQuestions()
@ -428,7 +428,8 @@ export default {
//
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 = {
Id: '',
StudyId: measureData.studyId,
@ -743,7 +744,7 @@ export default {
let l3Id = this.getQuestionId(1103)
this.$set(this.questionForm, l3Id, '')
let meanId = this.getQuestionId(1104)
this.$set(this.questionForm, meanId, 'NA')
this.$set(this.questionForm, meanId, 'NE')
}
const loading = this.$loading({ fullscreen: true })
@ -839,6 +840,9 @@ export default {
/deep/ .el-button--mini, .el-button--mini.is-round {
padding: 7px 10px;
}
/deep/ .el-input-group__append, .el-input-group__prepend {
padding: 0 10px;
}
.el-form-item__content
.el-select{
width: 100%;

View File

@ -33,13 +33,13 @@
<div class="title">{{ item.QuestionName }}</div>
</div>
<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>
</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">
<i class="el-icon-warning" style="color:#ff9800" />
</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; -->
<div style="font-size: 13px;width:220px;height: 30px;">
<div style="display: inline-block;margin-left:10px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:110px">
<div style="font-size: 13px;width:110px;height: 30px;">
<!-- <div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:95px">
{{ $fd('ReadingYesOrNo', parseInt(item.TableQuestions.Answers[i].isMeasurable)) }}
</div>
<div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:80px">
{{ item.TableQuestions.Answers[i].mean }}
</div> -->
<div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:50px">
{{ isNaN(parseFloat(item.TableQuestions.Answers[i].mean)) ? item.TableQuestions.Answers[i].mean : `${item.TableQuestions.Answers[i].mean}%` }}
</div>
</div>
</div>

View File

@ -20,25 +20,6 @@
</el-tab-pane>
</el-tabs>
</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
label="报表导出配置"
name="reportConfig"
@ -53,26 +34,6 @@
<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>

View File

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

View File

@ -110,6 +110,10 @@
<el-button type="primary" icon="el-icon-download" @click="handleExport">
{{ $t('common:button:export') }}
</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">
{{ $t('common:button:failureRecord') }}
</el-button>
@ -943,6 +947,9 @@
<script>
import { getTrialSiteSelect,setTaskUrgent } from '@/api/trials'
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 { changeURLStatic } from '@/utils/history.js'
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
},
handleView(row) {

View File

@ -19,7 +19,7 @@
>
<template v-for="item of $d.Criterion_Question_Type">
<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"
:value="item.value"
:label="item.label"
@ -114,9 +114,9 @@
<el-select v-model="form.ParentTriggerValueList" clearable multiple>
<el-option
v-for="item of parentTriggerValOptions"
:key="item"
:label="item"
:value="item"
:key="item.id"
:label="item.label"
:value="String(item.value)"
/>
</el-select>
</el-form-item>
@ -148,9 +148,9 @@
<el-select v-model="form.RelevanceValueList" clearable multiple>
<el-option
v-for="item of reParentTriggerValOptions"
:key="item"
:label="item"
:value="item"
:key="item.id"
:label="item.label"
:value="String(item.value)"
/>
</el-select>
</el-form-item>
@ -964,6 +964,7 @@ export default {
}
},
mounted() {
console.log(this.$d.Criterion_Question_Type)
this.validateTypeVal = (rule, value, callback) => {
if (value === '' && this.form.Type !== 'number') {
callback(new Error(this.$t('common:ruleMessage:specify')))
@ -1127,7 +1128,22 @@ export default {
return item.QuestionId === this.form.ParentId
})
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) {
@ -1135,7 +1151,21 @@ export default {
return item.QuestionId === this.form.RelevanceId
})
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 = []
}
},
parentQuestionChange(val, form) {
async parentQuestionChange(val, form) {
if (val) {
var index = this.parentOptions.findIndex(item => {
return item.QuestionId === val
})
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 = []
},
relevanceQuestionChange(val, form) {
async relevanceQuestionChange(val, form) {
if (val) {
var index = this.parentOptions.findIndex(item => {
return item.QuestionId === val
})
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 = []