Compare commits
9 Commits
b4b5f336b5
...
1888ec4fe5
Author | SHA1 | Date |
---|---|---|
|
1888ec4fe5 | |
|
e132f84c48 | |
|
aedd35a729 | |
|
a98c44ee66 | |
|
5a2b1ca457 | |
|
43f398df19 | |
|
3f85e1bb4b | |
|
4c350071eb | |
|
6ed8c9fac9 |
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "EICS",
|
||||
"version": "1.0.0",
|
||||
"version": "1.3.2",
|
||||
"scripts": {
|
||||
"dev": "vue-cli-service serve --open",
|
||||
"build": "vue-cli-service build",
|
||||
|
|
|
@ -124,7 +124,7 @@
|
|||
IRC Imaging System
|
||||
</p>
|
||||
<p style="margin-bottom: 20px">
|
||||
V1.3.1.001
|
||||
V1.3.2.001
|
||||
</p>
|
||||
<p style="margin-bottom: 20px" v-if="language === 'zh'">
|
||||
Copyright © {{ new Date().getFullYear() }} 上海展影医疗科技有限公司 版权所有
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<!-- 临床数据 -->
|
||||
<div v-if="stack.isExistsClinicalData" class="info-cd" @click.stop="handleViewCD($event)">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:clinicalData')" placement="bottom">
|
||||
<svg-icon icon-class="159" class="svg-icon" />
|
||||
<svg-icon icon-class="documentation" class="svg-icon"/>
|
||||
</el-tooltip>
|
||||
|
||||
</div>
|
||||
|
@ -222,7 +222,8 @@ export default {
|
|||
visitTaskId: '',
|
||||
taskBlindName: '',
|
||||
frame: null,
|
||||
imageRendered: false
|
||||
imageRendered: false,
|
||||
isExistsClinicalData:false
|
||||
// preventCache: true
|
||||
},
|
||||
dicomInfo: {
|
||||
|
@ -1058,6 +1059,7 @@ export default {
|
|||
this.stack.seriesIndex = dicomSeries.seriesIndex
|
||||
this.stack.sliceThickness = dicomSeries.sliceThickness
|
||||
this.stack.instanceCount = dicomSeries.instanceCount
|
||||
this.stack.isExistsClinicalData = dicomSeries.isExistsClinicalData
|
||||
// this.measuredData = dicomSeries.measuredData
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === dicomSeries.visitTaskId)
|
||||
this.stack.visitTaskNum = this.visitTaskList[idx].VisitTaskNum
|
||||
|
|
|
@ -482,7 +482,7 @@ export default {
|
|||
idx > -1 ? seriesInfo = seriesList[idx] : seriesInfo = seriesList[0]
|
||||
}
|
||||
if (seriesInfo) {
|
||||
const index = Math.floor(seriesInfo.imageIds.length * ((baseObj.series.imageIdIndex + 1) / baseObj.series.instanceCount))
|
||||
const index = Math.floor(seriesInfo.imageIds.length * ((baseObj.series.imageIdIndex + 1) / baseObj.series.imageIds.length))
|
||||
seriesInfo.imageIdIndex = index > 0 ? index - 1 : 0
|
||||
obj.studyIndex = seriesInfo.studyIndex
|
||||
obj.seriesIndex = seriesInfo.seriesIndex
|
||||
|
|
|
@ -11,6 +11,13 @@
|
|||
@mouseup="sliderMouseup"
|
||||
@contextmenu.prevent="onContextmenu"
|
||||
>
|
||||
<!-- 临床数据 -->
|
||||
<div v-if="stack.isExistsClinicalData" class="info-cd" @click.stop="handleViewCD($event)">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:clinicalData')" placement="bottom">
|
||||
<svg-icon icon-class="documentation" class="svg-icon"/>
|
||||
</el-tooltip>
|
||||
|
||||
</div>
|
||||
<!-- 切换访视 -->
|
||||
<div
|
||||
v-if="stack.imageRendered && isReadingTaskViewInOrder"
|
||||
|
@ -214,7 +221,8 @@ export default {
|
|||
visitTaskId: '',
|
||||
taskBlindName: '',
|
||||
frame: null,
|
||||
imageRendered: false
|
||||
imageRendered: false,
|
||||
isExistsClinicalData:false
|
||||
// preventCache: true
|
||||
},
|
||||
dicomInfo: {
|
||||
|
@ -1042,6 +1050,7 @@ export default {
|
|||
this.stack.seriesIndex = dicomSeries.seriesIndex
|
||||
this.stack.sliceThickness = dicomSeries.sliceThickness
|
||||
this.stack.instanceCount = dicomSeries.instanceCount
|
||||
this.stack.isExistsClinicalData = dicomSeries.isExistsClinicalData
|
||||
// this.measuredData = dicomSeries.measuredData
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === dicomSeries.visitTaskId)
|
||||
this.stack.visitTaskNum = this.visitTaskList[idx].VisitTaskNum
|
||||
|
@ -1920,6 +1929,12 @@ export default {
|
|||
e.stopImmediatePropagation()
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
},
|
||||
handleViewCD(e) {
|
||||
DicomEvent.$emit('previewCD', this.stack.visitTaskId)
|
||||
e.stopImmediatePropagation()
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2008,7 +2023,15 @@ export default {
|
|||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.info-cd{
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 5px;
|
||||
text-align: left;
|
||||
color: #ddd;
|
||||
font-size: 18px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.info-series {
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
</div>
|
||||
<el-table
|
||||
:data="questionForm[question.Id]">
|
||||
<el-table-column :label="$t('CustomizeQuestionFormItem:label:OrderMark')" width="60px" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
{{question.OrderMark}}{{scope.$index + 1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:prop="item.Id"
|
||||
:label="item.QuestionName"
|
||||
|
@ -288,7 +293,7 @@
|
|||
:visit-task-id="visitTaskId"
|
||||
:criterion-id="criterionId"
|
||||
:type="addOrEdit.type"
|
||||
:CalculationList="CalculationList"
|
||||
:CalculationList="CalculationTabelList"
|
||||
@formItemTableNumberChange="formItemTableNumberChange"
|
||||
@setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
|
@ -368,7 +373,8 @@ export default {
|
|||
loading: false,
|
||||
RowIndex: 0,
|
||||
RowId: null,
|
||||
digitPlaces: 0
|
||||
digitPlaces: 0,
|
||||
CalculationTabelList: []
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
@ -411,7 +417,7 @@ export default {
|
|||
}
|
||||
}
|
||||
if (this.question.Type === 'table') {
|
||||
// this.getQuestionCalculateRelation()
|
||||
this.getQuestionCalculateRelation()
|
||||
if (this.questionForm[this.question.Id]) {
|
||||
this.QuestionsForm = {}
|
||||
this.question.TableQuestions.Questions.forEach(v => {
|
||||
|
@ -511,10 +517,9 @@ export default {
|
|||
},
|
||||
getQuestionCalculateRelation() {
|
||||
getQuestionCalculateRelation({
|
||||
TrialReadingCriterionId: this.criterionId,
|
||||
ReadingQuestionId: this.question.Id
|
||||
}).then(res => {
|
||||
this.CalculationList = res.Result
|
||||
this.CalculationTabelList = res.Result
|
||||
})
|
||||
},
|
||||
save() {
|
||||
|
|
|
@ -211,6 +211,12 @@ export default {
|
|||
type: String,
|
||||
required: true
|
||||
},
|
||||
CalculationList: {
|
||||
type: Array,
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
},
|
||||
readingTaskState: {
|
||||
type: Number,
|
||||
required: true
|
||||
|
@ -248,14 +254,27 @@ export default {
|
|||
digitPlaces: 0
|
||||
}
|
||||
},
|
||||
// watch: {
|
||||
// questionForm: {
|
||||
// deep: true,
|
||||
// immediate: true,
|
||||
// handler(v) {
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
watch: {
|
||||
questionForm: {
|
||||
deep: true,
|
||||
immediate: true,
|
||||
handler(v) {
|
||||
|
||||
handler(v, oldv) {
|
||||
try {
|
||||
if (!v[this.question.Id] || !oldv[this.question.Id]) return
|
||||
} catch (e) {
|
||||
}
|
||||
this.formItemNumberChange(this.question.Id, false)
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.digitPlaces = localStorage.getItem('digitPlaces') ? parseInt(localStorage.getItem('digitPlaces')) : 0
|
||||
|
@ -323,8 +342,95 @@ export default {
|
|||
} else {
|
||||
}
|
||||
},
|
||||
logic(rules, num = 0) {
|
||||
try {
|
||||
if (rules.CalculateQuestionList.length === 0) {
|
||||
return false
|
||||
}
|
||||
var count = 0
|
||||
var maxList = [], minList = []
|
||||
rules.CalculateQuestionList.forEach((o, i) => {
|
||||
if (rules.CustomCalculateMark > 4) {
|
||||
if (i !== 0) {
|
||||
switch (rules.CustomCalculateMark) {
|
||||
case 7:
|
||||
count += parseFloat(this.questionForm[o.TableQuestionId])
|
||||
if (i === rules.CalculateQuestionList.length - 1) {
|
||||
num = count / rules.CalculateQuestionList.length
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
maxList.push(this.questionForm[o.TableQuestionId])
|
||||
if (i === rules.CalculateQuestionList.length - 1) {
|
||||
num = Math.max(...maxList)
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
minList.push(this.questionForm[o.TableQuestionId])
|
||||
if (i === rules.CalculateQuestionList.length - 1) {
|
||||
num = Math.min(...minList)
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
maxList.push(this.questionForm[o.TableQuestionId])
|
||||
minList.push(this.questionForm[o.TableQuestionId])
|
||||
count = parseFloat(this.questionForm[o.TableQuestionId])
|
||||
num = parseFloat(this.questionForm[o.TableQuestionId])
|
||||
}
|
||||
} else {
|
||||
if (i !== 0) {
|
||||
switch (rules.CustomCalculateMark) {
|
||||
case 1:
|
||||
num += parseFloat(this.questionForm[o.TableQuestionId])
|
||||
break;
|
||||
case 2:
|
||||
num -= parseFloat(this.questionForm[o.TableQuestionId])
|
||||
break;
|
||||
case 3:
|
||||
num *= parseFloat(this.questionForm[o.TableQuestionId])
|
||||
break;
|
||||
case 4:
|
||||
if (parseFloat(this.questionForm[o.TableQuestionId]) === 0) {
|
||||
num = 0
|
||||
} else {
|
||||
num /= parseFloat(this.questionForm[o.TableQuestionId])
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
num = parseFloat(this.questionForm[o.TableQuestionId])
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
var digitPlaces = parseInt(localStorage.getItem('digitPlaces'))
|
||||
if (rules.ValueType === 2) {
|
||||
num = num * 100
|
||||
}
|
||||
return num.toFixed(digitPlaces)
|
||||
},
|
||||
formItemNumberChange(v, question) {
|
||||
this.$emit('formItemTableNumberChange', v, question)
|
||||
console.log(this.CalculationList)
|
||||
this.CalculationList.forEach((v, i) => {
|
||||
console.log('v', v)
|
||||
var find = v.CalculateQuestionList.filter(o => {
|
||||
return o.QuestionId === question.Id
|
||||
})
|
||||
console.log('find', find)
|
||||
// find的自动计算值number
|
||||
if (find) {
|
||||
var num = this.logic(v)
|
||||
console.log(num)
|
||||
if (num !== false) {
|
||||
this.$set(this.questionForm, v.QuestionId, num)
|
||||
// this.$emit('setFormItemData', { key: v.QuestionId, val: num })
|
||||
}
|
||||
}
|
||||
})
|
||||
// this.$emit('formItemTableNumberChange', v, question)
|
||||
},
|
||||
resetChild(obj) {
|
||||
obj.forEach(i => {
|
||||
|
|
|
@ -476,7 +476,7 @@ export default {
|
|||
idx > -1 ? seriesInfo = seriesList[idx] : seriesInfo = seriesList[0]
|
||||
}
|
||||
if (seriesInfo) {
|
||||
const index = Math.floor(seriesInfo.imageIds.length * ((baseObj.series.imageIdIndex + 1) / baseObj.series.instanceCount))
|
||||
const index = Math.floor(seriesInfo.imageIds.length * ((baseObj.series.imageIdIndex + 1) / baseObj.series.imageIds.length))
|
||||
seriesInfo.imageIdIndex = index > 0 ? index - 1 : 0
|
||||
obj.studyIndex = seriesInfo.studyIndex
|
||||
obj.seriesIndex = seriesInfo.seriesIndex
|
||||
|
|
|
@ -447,8 +447,8 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="(form.QuestionGenre === 0 || form.QuestionGenre === null) && (form.Type === 'select' || form.Type === 'radio') && isFromSystem"
|
||||
:label="$t('trials:qcCfg:table:typeValue')"
|
||||
v-if="(form.Type === 'select' || form.Type === 'radio') && isFromSystem"
|
||||
:label="$t('trials:readingUnit:qsList:title:defaultValue')"
|
||||
>
|
||||
<el-select v-model="form.DefaultValue" clearable>
|
||||
<el-option
|
||||
|
@ -459,6 +459,15 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="(form.Type === 'number') && !isFromSystem"
|
||||
:label="$t('trials:readingUnit:qsList:title:defaultValue')"
|
||||
>
|
||||
<el-input
|
||||
:disabled="form.DataSource === 1"
|
||||
v-model="form.DefaultValue"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 分组 -->
|
||||
<el-form-item
|
||||
v-if="form.Type !== 'group'"
|
||||
|
|
|
@ -69,6 +69,21 @@
|
|||
v-model="form.IsCopy"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 问题数据来源 -->
|
||||
<el-form-item v-if="form.Type === 'number'" :label="$t('trials:readingUnit:qsList:title:dataSource')"
|
||||
prop="DataSource">
|
||||
<el-radio-group
|
||||
v-model="form.DataSource"
|
||||
>
|
||||
<el-radio
|
||||
v-for="item of $d.DataSource"
|
||||
:key="`DataSource${item.value}`"
|
||||
:label="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.Type === 'number'"
|
||||
:label="$t('trials:readingUnit:qsList:title:valueType')"
|
||||
|
@ -135,14 +150,26 @@
|
|||
style="line-height: 40px;"
|
||||
@change="(v) => CustomCalculateMarkChange(v)"
|
||||
>
|
||||
<el-radio
|
||||
v-for="item of $d.CustomCalculateMark"
|
||||
v-if="item.value <= 4"
|
||||
:key="`CustomCalculateMark${item.value}`"
|
||||
:label="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
<div>
|
||||
<el-radio
|
||||
v-for="item of $d.CustomCalculateMark"
|
||||
v-show="item.value <= 4"
|
||||
:key="`CustomCalculateMark${item.value}`"
|
||||
:label="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
</div>
|
||||
<div>
|
||||
<el-radio
|
||||
v-for="item of $d.CustomCalculateMark"
|
||||
v-show="item.value > 6"
|
||||
:key="`CustomCalculateMark${item.value}`"
|
||||
:label="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
</div>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-table
|
||||
|
@ -174,16 +201,12 @@
|
|||
min-width="180"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-select v-if="!scope.row.IsTable" v-model="scope.row.TableQuestionId" clearable>
|
||||
<el-select v-model="scope.row.TableQuestionId" clearable>
|
||||
<el-option v-for="item of Questions" :key="item.QuestionId" :label="item.QuestionName" :value="item.QuestionId" />
|
||||
</el-select>
|
||||
<el-select v-if="scope.row.IsTable" v-model="scope.row.TableQuestionId" clearable>
|
||||
<el-option v-for="item of !scope.row.QuestionId ? [] : tableQuestions.find(v => v.QuestionId === scope.row.QuestionId).TableQuestions" :key="item.QuestionId" :label="item.QuestionName" :value="item.QuestionId" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="form.CustomCalculateMark <= 4"
|
||||
:label="$t('common:action:action')"
|
||||
prop="TableQuestionId"
|
||||
show-overflow-tooltip
|
||||
|
@ -620,7 +643,20 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for (const k in this.form) {
|
||||
// if (k === 'CalculateQuestions' && this.data[k] !== undefined) {
|
||||
// console.log(this.data[k])
|
||||
// this.form[k] = JSON.parse(this.data[k])
|
||||
// console.log('CalculateQuestions', this.form[k])
|
||||
// } else if (k === 'ClassifyAlgorithms' && this.data[k] !== undefined && this.data[k] !== '') {
|
||||
// this.ClassifyAlgorithmsList = JSON.parse(this.data[k])
|
||||
// console.log(11111, this.form)
|
||||
// } else {
|
||||
// if (this.data.hasOwnProperty(k)) {
|
||||
// this.form[k] = this.data[k]
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if (this.form.ParentId) {
|
||||
var index = this.parentOptions.findIndex(item => {
|
||||
return item.QuestionId === this.form.ParentId
|
||||
|
|
|
@ -491,7 +491,7 @@
|
|||
</el-tab-pane>
|
||||
<!-- 临床数据采集 -->
|
||||
<el-tab-pane
|
||||
v-if="rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && otherInfo.IsHaveSubjectClinicalData"
|
||||
v-if="rowData.IsBaseLine && (otherInfo.IsHaveSubjectClinicalData || otherInfo.IsHaveVisitClinicalData)"
|
||||
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
|
||||
name="clinical-data"
|
||||
>
|
||||
|
@ -499,7 +499,7 @@
|
|||
</el-tab-pane>
|
||||
<!-- 临床数据采集2 -->
|
||||
<el-tab-pane
|
||||
v-if="!rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && otherInfo.IsHaveVisitClinicalData"
|
||||
v-if="!rowData.IsBaseLine && otherInfo.IsHaveVisitClinicalData"
|
||||
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
|
||||
name="clinical-data"
|
||||
>
|
||||
|
@ -572,10 +572,11 @@
|
|||
<UploadNonDicomFiles v-if="rowData.Id" :data="rowData" :subject-visit-id="rowData.Id" :body-parts="otherInfo.BodyPartTypes" :modalities="otherInfo.Modalitys" :allow-add-or-edit="false" @getList="getList"/>
|
||||
</el-card>
|
||||
<!-- 临床数据 -->
|
||||
<h4 v-if="rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && otherInfo.IsHaveSubjectClinicalData" class="box-title" style="margin-top:10px;">
|
||||
<!-- 基线显示受试者级别和方式级别的临床数据 -->
|
||||
<h4 v-if="rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && (otherInfo.IsHaveSubjectClinicalData || otherInfo.IsHaveVisitClinicalData)" class="box-title" style="margin-top:10px;">
|
||||
{{ $t('trials:crcUpload:label:clinicalData') }}
|
||||
</h4>
|
||||
<el-card v-if="rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && otherInfo.IsHaveSubjectClinicalData" class="box-card">
|
||||
<el-card v-if="rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && (otherInfo.IsHaveSubjectClinicalData || otherInfo.IsHaveVisitClinicalData)" class="box-card">
|
||||
<UploadClinicalData v-if="rowData.Id && rowData.IsBaseLine" :enum-type="otherInfo.ClinicalInformationTransmissionEnum" :allow-add-or-edit="false" :data="rowData" :subject-visit-id="rowData.Id" @getList="getList" />
|
||||
</el-card>
|
||||
<h4 v-if="!rowData.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0 && otherInfo.IsHaveVisitClinicalData" class="box-title" style="margin-top:10px;">
|
||||
|
|
|
@ -63,7 +63,8 @@ module.exports = {
|
|||
// target: 'http://123.56.181.144:8000/api', // 国内测试环境
|
||||
// target: 'http://123.56.94.154:8079', // 国内测试环境2
|
||||
// target: 'http://123.56.94.154:7000', // 国内测试环境2
|
||||
target: 'http://123.56.94.154:30668',
|
||||
target: 'http://123.56.94.154:30000',
|
||||
// target: 'http://47.117.164.182:7060/',
|
||||
// target: 'http://123.56.181.144:7000',
|
||||
changeOrigin: true,
|
||||
secure: false,
|
||||
|
|
Loading…
Reference in New Issue