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

uat_us
caiyiling 2024-09-06 15:37:11 +08:00
commit f58fa6011b
18 changed files with 724 additions and 453 deletions

View File

@ -1364,9 +1364,9 @@ export function getForwardList(param) {
}) })
} }
export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false) { export function getNoneDicomStudyList(subjectVisitId, sudyId = '', isFilterZip = false, visitTaskId = '') {
return request({ return request({
url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}`, url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}&isFilterZip=${isFilterZip}&visitTaskId=${visitTaskId}`,
method: 'get' method: 'get'
}) })
} }

View File

@ -148,6 +148,7 @@ import {
import studyView from '@/components/uploadDicomAndNonedicom/study-view.vue' import studyView from '@/components/uploadDicomAndNonedicom/study-view.vue'
import store from '@/store' import store from '@/store'
import { downLoadFile } from '@/utils/stream.js' import { downLoadFile } from '@/utils/stream.js'
import { getToken } from '@/utils/auth'
let defaultSearchData = () => { let defaultSearchData = () => {
return { return {
SubjectId: null, SubjectId: null,
@ -202,6 +203,7 @@ export default {
}, },
modelList: [], modelList: [],
IsDicom: true, IsDicom: true,
open: null,
} }
}, },
mounted() { mounted() {
@ -364,6 +366,9 @@ export default {
this.modelList = item.DicomStudyList this.modelList = item.DicomStudyList
} else { } else {
this.modelList = item.NoneDicomStudyList this.modelList = item.NoneDicomStudyList
this.modelList.forEach((data) => {
data.SourceSubjectVisitId = item.SourceSubjectVisitId
})
} }
this.IsDicom = item.IsDicom this.IsDicom = item.IsDicom
this.model_cfg.visible = true this.model_cfg.visible = true
@ -379,6 +384,37 @@ export default {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1
this.getList() this.getList()
}, },
preview(row) {
if (!row.IsDicom) {
this.handlePreviewNoneDicomFiles(row)
} else {
this.handleViewReadingImages(row)
}
},
// Dicom
handlePreviewNoneDicomFiles(row) {
if (this.open) {
this.open.close()
}
let trialId = this.$route.query.trialId
var token = getToken()
const routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&visitTaskId=${row.VisitTaskId}&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
//
handleViewReadingImages(row) {
if (this.open) {
this.open.close()
}
var token = getToken()
let trialId = this.$route.query.trialId
const routeData = this.$router.resolve({
path: `/showvisitdicoms?trialId=${trialId}&visitInfo=${row.VisitName}(${row.VisitNum})&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
}, },
} }
</script> </script>

View File

@ -115,6 +115,11 @@
<el-button <el-button
circle circle
icon="el-icon-view" icon="el-icon-view"
:disabled="
!scope.row.UploadStudyList ||
scope.row.UploadStudyList.length <= 0
"
@click.stop="handleViewReadingImages(scope.row)"
:title="$t('upload:dicom:button:preview')" :title="$t('upload:dicom:button:preview')"
/> />
<!--删除---> <!--删除--->
@ -453,6 +458,7 @@ import { convertBytes } from '@/utils/dicom-character-set'
import { parseDicom } from '@/utils/parseDicom.js' import { parseDicom } from '@/utils/parseDicom.js'
import { dcmUpload } from '@/utils/dcmUpload/dcmUpload' import { dcmUpload } from '@/utils/dcmUpload/dcmUpload'
import store from '@/store' import store from '@/store'
import { getToken } from '@/utils/auth'
export default { export default {
name: 'dicomFile', name: 'dicomFile',
props: { props: {
@ -505,6 +511,7 @@ export default {
trialId: null, trialId: null,
subjectVisitId: null, subjectVisitId: null,
errStudyUidList: [], errStudyUidList: [],
open: null,
} }
}, },
created() { created() {
@ -1444,6 +1451,18 @@ export default {
let blob = new Blob(['\ufeff', text], { type: 'text/plain' }) let blob = new Blob(['\ufeff', text], { type: 'text/plain' })
return blob return blob
}, },
//
handleViewReadingImages(row) {
if (this.open) {
this.open.close()
}
var token = getToken()
let trialId = this.$route.query.trialId
const routeData = this.$router.resolve({
path: `/showvisitdicoms?trialId=${trialId}&visitInfo=${row.VisitName}(${row.VisitNum})&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
})
this.open = window.open(routeData.href, '_blank')
},
}, },
} }
</script> </script>

View File

@ -62,10 +62,13 @@ export default {
}, },
data() { data() {
return { return {
title: 'Upload Images01 > 01001 >Timepoint', title: '',
activeName: 'dicom', activeName: 'dicom',
} }
}, },
mounted() {
this.title = `Upload Images${this.SubjectCode}${this.Criterion.TrialReadingCriterionName}`
},
methods: { methods: {
beforeClose() { beforeClose() {
this.$emit('update:visible', false) this.$emit('update:visible', false)

View File

@ -411,6 +411,9 @@ export default {
created() { created() {
this.getList() this.getList()
}, },
beforeDestroy() {
store.dispatch('trials/setUnLock', false)
},
methods: { methods: {
async getList() { async getList() {
try { try {
@ -550,7 +553,7 @@ export default {
let trialId = this.$route.query.trialId let trialId = this.$route.query.trialId
var token = getToken() var token = getToken()
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&TokenKey=${token}`, path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&visitTaskId=${row.VisitTaskId}&TokenKey=${token}`,
}) })
this.open = window.open(routeData.href, '_blank') this.open = window.open(routeData.href, '_blank')
}, },

View File

@ -118,10 +118,19 @@ export default {
methods: { methods: {
// //
preview(row) { preview(row) {
let routeData = null
if (this.IsDicom) {
var token = getToken() var token = getToken()
const routeData = this.$router.resolve({ routeData = this.$router.resolve({
path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study`, path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study`,
}) })
} else {
let trialId = this.$route.query.trialId
var token = getToken()
routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&TokenKey=${token}`,
})
}
window.open(routeData.href, '_blank') window.open(routeData.href, '_blank')
}, },
}, },

View File

@ -9,7 +9,7 @@ const getDefaultState = () => {
studyListQuery: null, studyListQuery: null,
unlock: false, unlock: false,
config: {}, config: {},
uploadTip: '0.00kb/s', uploadTip: '0.00KB/s',
timer: null, timer: null,
whiteList: [], whiteList: [],
checkTaskId: null checkTaskId: null

View File

@ -14,7 +14,7 @@ export function AWSclose() {
if (timer) { if (timer) {
clearInterval(timer); clearInterval(timer);
timer = null; timer = null;
store.state.trials.uploadTip = '0kb/s' store.state.trials.uploadTip = '0KB/s'
} }
bytesReceivedPerSecond = {}; bytesReceivedPerSecond = {};
} }
@ -440,10 +440,10 @@ function setTimer() {
let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b); let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b);
if (timeList.length > 0) { if (timeList.length > 0) {
let totalBytes = timeList.reduce((sum, bytes) => sum + bytesReceivedPerSecond[bytes], 0) / (5 * 1024); let totalBytes = timeList.reduce((sum, bytes) => sum + bytesReceivedPerSecond[bytes], 0) / (5 * 1024);
let unit = 'kb/s'; let unit = 'KB/s';
if (totalBytes > 1024) { if (totalBytes > 1024) {
totalBytes = totalBytes / 1024; totalBytes = totalBytes / 1024;
unit = "mb/s"; unit = "MB/s";
} }
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit; store.state.trials.uploadTip = totalBytes.toFixed(2) + unit;
} }

View File

@ -8,7 +8,7 @@ export function OSSclose() {
if (timer) { if (timer) {
clearInterval(timer); clearInterval(timer);
timer = null; timer = null;
store.state.trials.uploadTip = '0kb/s' store.state.trials.uploadTip = '0KB/s'
} }
bytesReceivedPerSecond = {}; bytesReceivedPerSecond = {};
savaData = {}; savaData = {};
@ -140,10 +140,10 @@ function setTimer() {
let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b); let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b);
if (timeList.length > 0) { if (timeList.length > 0) {
let totalBytes = timeList.reduce((sum, bytes) => sum + bytesReceivedPerSecond[bytes], 0) / (5 * 1024); let totalBytes = timeList.reduce((sum, bytes) => sum + bytesReceivedPerSecond[bytes], 0) / (5 * 1024);
let unit = 'kb/s'; let unit = 'KB/s';
if (totalBytes > 1024) { if (totalBytes > 1024) {
totalBytes = totalBytes / 1024; totalBytes = totalBytes / 1024;
unit = "mb/s"; unit = "MB/s";
} }
store.state.trials.uploadTip = totalBytes.toFixed(2) + unit; store.state.trials.uploadTip = totalBytes.toFixed(2) + unit;
} }

View File

@ -10,7 +10,15 @@
> >
<div class="base-dialog-body"> <div class="base-dialog-body">
<el-form-item label="类型" prop="Type"> <el-form-item label="类型" prop="Type">
<el-select v-model="form.Type" clearable @change="((val)=>{typeChange(val, form)})"> <el-select
v-model="form.Type"
clearable
@change="
(val) => {
typeChange(val, form)
}
"
>
<el-option <el-option
v-for="item of $d.Criterion_Question_Type" v-for="item of $d.Criterion_Question_Type"
:key="item.value" :key="item.value"
@ -31,10 +39,7 @@
v-if="form.Type === 'group'" v-if="form.Type === 'group'"
prop="GroupClassify" prop="GroupClassify"
> >
<el-select <el-select v-model="form.GroupClassify" clearable>
v-model="form.GroupClassify"
clearable
>
<el-option <el-option
v-for="item of groupClassifyList" v-for="item of groupClassifyList"
:key="item.Id" :key="item.Id"
@ -70,13 +75,9 @@
v-if="form.Type === 'number' || form.Type === 'calculation'" v-if="form.Type === 'number' || form.Type === 'calculation'"
label="数值类型" label="数值类型"
prop="ValueType" prop="ValueType"
:rules="[ :rules="[{ required: true, message: '请选择' }]"
{ required: true, message: '请选择'}
]"
>
<el-radio-group
v-model="form.ValueType"
> >
<el-radio-group v-model="form.ValueType">
<el-radio <el-radio
v-for="item of $d.ValueType" v-for="item of $d.ValueType"
:key="item.id" :key="item.id"
@ -92,9 +93,7 @@
v-if="form.Type === 'number' || form.Type === 'calculation'" v-if="form.Type === 'number' || form.Type === 'calculation'"
label="单位" label="单位"
> >
<el-radio-group <el-radio-group v-model="form.Unit">
v-model="form.Unit"
>
<el-radio <el-radio
v-for="item of $d.ValueUnit" v-for="item of $d.ValueUnit"
:key="item.id" :key="item.id"
@ -109,15 +108,12 @@
label="表格类型标识" label="表格类型标识"
prop="LesionType" prop="LesionType"
> >
<el-select <el-select v-model="form.LesionType" clearable>
v-model="form.LesionType"
clearable
>
<el-option <el-option
v-for="item of lesionTypes" v-for="item of lesionTypes"
:key="item.Code" :key="item.Code"
:value="parseInt(item.Code)" :value="parseInt(item.Code)"
:label="$fd('LesionType',parseInt(item.Code))" :label="$fd('LesionType', parseInt(item.Code))"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -133,25 +129,27 @@
</el-form-item> --> </el-form-item> -->
<!-- 选项类型 --> <!-- 选项类型 -->
<el-form-item <el-form-item
v-if="form.Type === 'select' || form.Type === 'radio' || form.Type === 'calculation'" v-if="
form.Type === 'select' ||
form.Type === 'radio' ||
form.Type === 'calculation'
"
label="选项类型" label="选项类型"
prop="QuestionGenre" prop="QuestionGenre"
:rules="[ :rules="[{ required: form.Type !== 'calculation', message: '请选择' }]"
{ required: form.Type !== 'calculation', message: '请选择'}
]"
> >
<el-radio-group <el-radio-group
v-model="form.QuestionGenre" v-model="form.QuestionGenre"
@change="((val)=>{questionGenreChange(val, form)})" @change="
(val) => {
questionGenreChange(val, form)
}
"
> >
<el-radio <el-radio :label="-1"> </el-radio>
:label="-1"
>
</el-radio>
<el-radio <el-radio
v-for="item of $d.TableQuestionType" v-for="item of $d.TableQuestionType"
v-show="item.value===0 || item.value===3" v-show="item.value === 0 || item.value === 3"
:key="item.id" :key="item.id"
:label="item.value" :label="item.value"
> >
@ -183,13 +181,8 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="转化显示类型" prop="ConvertShowType">
label="转化显示类型" <el-radio-group v-model="form.ConvertShowType">
prop="ConvertShowType"
>
<el-radio-group
v-model="form.ConvertShowType"
>
<el-radio <el-radio
v-for="item of $d.ConvertShowType" v-for="item of $d.ConvertShowType"
:key="item.id" :key="item.id"
@ -200,11 +193,19 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="form.QuestionGenre === 3 " v-if="form.QuestionGenre === 3"
label="关联字典" label="关联字典"
prop="DictionaryCode" prop="DictionaryCode"
> >
<el-select v-model="form.DictionaryCode" clearable @change="() => {form.DefaultValue = null}"> <el-select
v-model="form.DictionaryCode"
clearable
@change="
() => {
form.DefaultValue = null
}
"
>
<el-option <el-option
v-for="item of dicList" v-for="item of dicList"
:key="item.Id" :key="item.Id"
@ -213,10 +214,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="form.QuestionGenre === 3" label="默认值">
v-if="form.QuestionGenre === 3 "
label="默认值"
>
<el-select v-model="form.DefaultValue" clearable> <el-select v-model="form.DefaultValue" clearable>
<el-option <el-option
v-for="item of form.DictionaryCode ? $d[form.DictionaryCode] : []" v-for="item of form.DictionaryCode ? $d[form.DictionaryCode] : []"
@ -226,10 +224,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item v-if="form.QuestionGenre === 0" label="默认值">
v-if="form.QuestionGenre === 0 "
label="默认值"
>
<el-select v-model="form.DefaultValue" clearable> <el-select v-model="form.DefaultValue" clearable>
<el-option <el-option
v-for="item of form.TypeValue ? form.TypeValue.split('|') : []" v-for="item of form.TypeValue ? form.TypeValue.split('|') : []"
@ -240,10 +235,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="form.Type !== 'group'" label="是否显示" prop="ShowQuestion"> <el-form-item
v-if="form.Type !== 'group'"
label="是否显示"
prop="ShowQuestion"
>
<el-radio-group <el-radio-group
v-model="form.ShowQuestion" v-model="form.ShowQuestion"
@change="((val)=>{isShowQuestionChange(val, form)})" @change="
(val) => {
isShowQuestionChange(val, form)
}
"
> >
<el-radio <el-radio
v-for="item of $d.ShowQuestion" v-for="item of $d.ShowQuestion"
@ -257,14 +260,18 @@
<!-- 显示时依赖父问题 --> <!-- 显示时依赖父问题 -->
<el-form-item <el-form-item
v-if="form.Type !== 'group' && form.ShowQuestion===1" v-if="form.Type !== 'group' && form.ShowQuestion === 1"
label="显示依赖父问题" label="显示依赖父问题"
prop="ParentId" prop="ParentId"
> >
<el-select <el-select
v-model="form.ParentId" v-model="form.ParentId"
clearable clearable
@change="((val)=>{parentQuestionChange(val, form)})" @change="
(val) => {
parentQuestionChange(val, form)
}
"
> >
<el-option <el-option
v-for="item of parentOptions" v-for="item of parentOptions"
@ -275,15 +282,19 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 显示时依赖父问题触发值 --> <!-- 显示时依赖父问题触发值 -->
<el-form-item v-if="form.ParentId && form.ShowQuestion===1" label="显示触发值" prop="ParentTriggerValueList"> <el-form-item
<!-- <el-select v-model="form.ParentTriggerValue" clearable>--> v-if="form.ParentId && form.ShowQuestion === 1"
<!-- <el-option--> label="显示触发值"
<!-- v-for="item of parentTriggerValOptions"--> prop="ParentTriggerValueList"
<!-- :key="item.id"--> >
<!-- :label="item.label"--> <!-- <el-select v-model="form.ParentTriggerValue" clearable>-->
<!-- :value="item.value.toString()"--> <!-- <el-option-->
<!-- />--> <!-- v-for="item of parentTriggerValOptions"-->
<!-- </el-select>--> <!-- :key="item.id"-->
<!-- :label="item.label"-->
<!-- :value="item.value.toString()"-->
<!-- />-->
<!-- </el-select>-->
<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"
@ -293,16 +304,44 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="form.Type === 'select' || form.Type === 'radio' || form.Type === 'calculation'" label="是否裁判问题"> <el-form-item
<el-radio-group v-model="form.IsJudgeQuestion" @change="((val)=>{isJudgeQuestionChange(val, form)})"> v-if="
<el-radio v-for="item of $d.YesOrNo" :key="`YesOrNo${item.value}`" :label="item.value">{{ item.label }}</el-radio> form.Type === 'select' ||
form.Type === 'radio' ||
form.Type === 'calculation' ||
form.Type === 'number'
"
label="是否裁判问题"
>
<el-radio-group
v-model="form.IsJudgeQuestion"
@change="
(val) => {
isJudgeQuestionChange(val, form)
}
"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`YesOrNo${item.value}`"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-if="form.Type !== 'group' && form.Type !== 'table'" label="是否必填" prop="IsRequired"> <el-form-item
v-if="form.Type !== 'group' && form.Type !== 'table'"
label="是否必填"
prop="IsRequired"
>
<el-radio-group <el-radio-group
v-model="form.IsRequired" v-model="form.IsRequired"
:disabled="form.IsJudgeQuestion===true || form.ShowQuestion===2" :disabled="form.IsJudgeQuestion === true || form.ShowQuestion === 2"
@change="((val)=>{isRequiredChange(val, form)})" @change="
(val) => {
isRequiredChange(val, form)
}
"
> >
<el-radio <el-radio
v-for="item of $d.QuestionRequired" v-for="item of $d.QuestionRequired"
@ -323,7 +362,11 @@
<el-select <el-select
v-model="form.RelevanceId" v-model="form.RelevanceId"
clearable clearable
@change="((val)=>{relevanceQuestionChange(val, form)})" @change="
(val) => {
relevanceQuestionChange(val, form)
}
"
> >
<el-option <el-option
v-for="item of parentOptions" v-for="item of parentOptions"
@ -339,14 +382,14 @@
label="必填触发值" label="必填触发值"
prop="RelevanceValueList" prop="RelevanceValueList"
> >
<!-- <el-select v-model="form.RelevanceValue" clearable>--> <!-- <el-select v-model="form.RelevanceValue" clearable>-->
<!-- <el-option--> <!-- <el-option-->
<!-- v-for="item of reParentTriggerValOptions"--> <!-- v-for="item of reParentTriggerValOptions"-->
<!-- :key="item.id"--> <!-- :key="item.id"-->
<!-- :label="item.label"--> <!-- :label="item.label"-->
<!-- :value="item.value.toString()"--> <!-- :value="item.value.toString()"-->
<!-- />--> <!-- />-->
<!-- </el-select>--> <!-- </el-select>-->
<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"
@ -385,7 +428,11 @@
</el-form-item> --> </el-form-item> -->
<el-form-item v-if="form.Type !== 'group'" label="问题分组"> <el-form-item v-if="form.Type !== 'group'" label="问题分组">
<el-select v-model="form.GroupId" clearable :disabled="isParentExistGroup"> <el-select
v-model="form.GroupId"
clearable
:disabled="isParentExistGroup"
>
<el-option <el-option
v-for="group of groupOptions" v-for="group of groupOptions"
:key="group.GroupId" :key="group.GroupId"
@ -396,12 +443,22 @@
</el-form-item> </el-form-item>
<el-form-item label="限制编辑"> <el-form-item label="限制编辑">
<el-radio-group v-model="form.LimitEdit"> <el-radio-group v-model="form.LimitEdit">
<el-radio v-for="item of $d.LimitEdit" :key="`LimitEdit${item.value}`" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item of $d.LimitEdit"
:key="`LimitEdit${item.value}`"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="全局阅片是否显示"> <el-form-item label="全局阅片是否显示">
<el-radio-group v-model="form.GlobalReadingShowType"> <el-radio-group v-model="form.GlobalReadingShowType">
<el-radio v-for="item of $d.GlobalReadingShowType" :key="item.id" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item of $d.GlobalReadingShowType"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -409,10 +466,7 @@
v-if="form.Type !== 'group'" v-if="form.Type !== 'group'"
prop="QuestionType" prop="QuestionType"
> >
<el-select <el-select v-model="form.QuestionType" clearable>
v-model="form.QuestionType"
clearable
>
<el-option <el-option
v-for="item of CriterionDictionaryList.QuestionType" v-for="item of CriterionDictionaryList.QuestionType"
:key="item.Id" :key="item.Id"
@ -428,9 +482,18 @@
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item> -->
<el-form-item v-if="form.Type === 'upload'" label="最大上传个数"> <el-form-item v-if="form.Type === 'upload'" label="最大上传个数">
<el-input-number v-model="form.ImageCount" controls-position="right" :min="1" :max="10" /> <el-input-number
v-model="form.ImageCount"
controls-position="right"
:min="1"
:max="10"
/>
</el-form-item> </el-form-item>
<el-form-item v-if="form.Type === 'select' || form.Type === 'radio'" label="高亮标记值" prop="HighlightAnswerList"> <el-form-item
v-if="form.Type === 'select' || form.Type === 'radio'"
label="高亮标记值"
prop="HighlightAnswerList"
>
<el-select v-model="form.HighlightAnswerList" clearable multiple> <el-select v-model="form.HighlightAnswerList" clearable multiple>
<template v-if="form.TypeValue"> <template v-if="form.TypeValue">
<el-option <el-option
@ -471,20 +534,23 @@
<el-form-item label="是否在阅片页面显示"> <el-form-item label="是否在阅片页面显示">
<el-radio-group v-model="form.IsShowInDicom"> <el-radio-group v-model="form.IsShowInDicom">
<el-radio v-for="item of $d.YesOrNo" :key="`YesOrNo${item.value}`" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item of $d.YesOrNo"
:key="`YesOrNo${item.value}`"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
:label="$t('trials:readingUnit:qsList:title:Remark')" :label="$t('trials:readingUnit:qsList:title:Remark')"
prop="Remark" prop="Remark"
> >
<el-input <el-input v-model="form.Remark" />
v-model="form.Remark"
/>
</el-form-item> </el-form-item>
</div> </div>
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;"> <div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item> <el-form-item>
<!-- 取消 --> <!-- 取消 -->
<el-button <el-button
@ -496,7 +562,12 @@
{{ $t('common:button:cancel') }} {{ $t('common:button:cancel') }}
</el-button> </el-button>
<!-- 保存 --> <!-- 保存 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="save"> <el-button
size="small"
type="primary"
:loading="btnLoading"
@click="save"
>
{{ $t('common:button:save') }} {{ $t('common:button:save') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
@ -504,19 +575,30 @@
</el-form> </el-form>
</template> </template>
<script> <script>
import { getBasicConfigSelect, addOrUpdateReadingQuestionSystem, getSystemCriterionOtherQuestion, getSystemGroupNameList, getCriterionDictionary, getCriterionDictionaryList } from '@/api/dictionary' import {
getBasicConfigSelect,
addOrUpdateReadingQuestionSystem,
getSystemCriterionOtherQuestion,
getSystemGroupNameList,
getCriterionDictionary,
getCriterionDictionaryList,
} from '@/api/dictionary'
import { getCriterionLesionType } from '@/api/trials' import { getCriterionLesionType } from '@/api/trials'
export default { export default {
name: 'AddOrUpdateClinicalData', name: 'AddOrUpdateClinicalData',
props: { props: {
data: { data: {
type: Object, type: Object,
default() { return {} } default() {
return {}
},
}, },
type: { type: {
type: String, type: String,
default() { return '' } default() {
} return ''
},
},
}, },
data() { data() {
var validateTypeVal = (rule, value, callback) => { var validateTypeVal = (rule, value, callback) => {
@ -553,7 +635,7 @@ export default {
IsJudgeQuestion: false, IsJudgeQuestion: false,
GroupName: '', GroupName: '',
GroupEnName: '', GroupEnName: '',
GroupClassify:null, GroupClassify: null,
Remark: '', Remark: '',
ImageCount: 1, ImageCount: 1,
RelevanceId: '', RelevanceId: '',
@ -570,32 +652,38 @@ export default {
GroupId: null, GroupId: null,
ConvertShowType: 0, ConvertShowType: 0,
QuestionClassify: null, QuestionClassify: null,
HighlightAnswerList: [] HighlightAnswerList: [],
}, },
rules: { rules: {
Type: [ Type: [{ required: true, message: '请选择', trigger: 'blur' }],
{ required: true, message: '请选择', trigger: 'blur' } LesionType: [{ required: true, message: '请选择', trigger: 'blur' }],
QuestionName: [
{ required: true, message: '请注明', trigger: 'blur' },
{ max: 300, message: '最大长度为 300' },
], ],
LesionType: [
{ required: true, message: '请选择', trigger: 'blur' }
],
QuestionName: [{ required: true, message: '请注明', trigger: 'blur' },
{ max: 300, message: '最大长度为 300' }],
QuestionGenre: [{ required: true, message: '请选择', trigger: 'blur' }], QuestionGenre: [{ required: true, message: '请选择', trigger: 'blur' }],
TypeValue: [{ required: true, message: '请注明', trigger: 'blur' }, TypeValue: [
{ required: true, message: '请注明', trigger: 'blur' },
{ validator: validateTypeVal, trigger: 'blur' }, { validator: validateTypeVal, trigger: 'blur' },
{ max: 500, message: '最大长度为 500' }], { max: 500, message: '最大长度为 500' },
DictionaryCode: [{ required: true, message: '请选择', trigger: 'blur' }], ],
DictionaryCode: [
{ required: true, message: '请选择', trigger: 'blur' },
],
ShowQuestion: [{ required: true, message: '请选择', trigger: 'blur' }], ShowQuestion: [{ required: true, message: '请选择', trigger: 'blur' }],
IsRequired: [{ required: true, message: '请选择', trigger: 'blur' }], IsRequired: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentId: [{ required: true, message: '请选择', trigger: 'blur' }], ParentId: [{ required: true, message: '请选择', trigger: 'blur' }],
ParentTriggerValueList: [ ParentTriggerValueList: [
{ required: true, message: '请选择', trigger: 'blur' } { required: true, message: '请选择', trigger: 'blur' },
], ],
RelevanceId: [{ required: true, message: '请选择', trigger: 'blur' }], RelevanceId: [{ required: true, message: '请选择', trigger: 'blur' }],
RelevanceValueList: [{ required: true, message: '请选择', trigger: 'blur' }], RelevanceValueList: [
GroupName: [{ required: true, message: '请注明', trigger: 'blur' }, { required: true, message: '请选择', trigger: 'blur' },
{ max: 50, message: '最大长度为 50' }] ],
GroupName: [
{ required: true, message: '请注明', trigger: 'blur' },
{ max: 50, message: '最大长度为 50' },
],
}, },
loading: false, loading: false,
btnLoading: false, btnLoading: false,
@ -606,8 +694,8 @@ export default {
lesionTypes: [], lesionTypes: [],
dicList: [], dicList: [],
CriterionDictionaryList: [], CriterionDictionaryList: [],
groupClassifyList:[], groupClassifyList: [],
highlightAnswers: [] highlightAnswers: [],
} }
}, },
watch: { watch: {
@ -622,14 +710,14 @@ export default {
} }
let res = await getCriterionDictionary({ let res = await getCriterionDictionary({
ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId, ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId,
DictionaryCode: this.form.DictionaryCode DictionaryCode: this.form.DictionaryCode,
}) })
this.highlightAnswers = res.Result[this.form.DictionaryCode] this.highlightAnswers = res.Result[this.form.DictionaryCode]
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
} },
} },
}, },
mounted() { mounted() {
this.initForm() this.initForm()
@ -638,16 +726,16 @@ export default {
getCriterionDictionary() { getCriterionDictionary() {
getCriterionDictionary({ getCriterionDictionary({
ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId, ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId,
DictionaryCode: 'QuestionType' DictionaryCode: 'QuestionType',
}).then(res => { }).then((res) => {
this.CriterionDictionaryList = res.Result this.CriterionDictionaryList = res.Result
}) })
}, },
getGroupClassifyDictionary() { getGroupClassifyDictionary() {
getCriterionDictionary({ getCriterionDictionary({
ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId, ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId,
DictionaryCode: 'GroupClassify' DictionaryCode: 'GroupClassify',
}).then(res => { }).then((res) => {
this.groupClassifyList = res.Result.GroupClassify this.groupClassifyList = res.Result.GroupClassify
}) })
}, },
@ -661,37 +749,47 @@ export default {
this.form[k] = this.data[k] this.form[k] = this.data[k]
} }
} }
if (this.form.ParentId !== '' && this.form.ParentId !== null && this.form.GroupName !== '') { if (
this.form.ParentId !== '' &&
this.form.ParentId !== null &&
this.form.GroupName !== ''
) {
this.isParentExistGroup = true this.isParentExistGroup = true
} }
if (this.form.ParentId) { if (this.form.ParentId) {
var index = this.parentOptions.findIndex(item => { var index = this.parentOptions.findIndex((item) => {
return item.QuestionId === this.form.ParentId return item.QuestionId === this.form.ParentId
}) })
if (index !== -1) { if (index !== -1) {
if (this.parentOptions[index].QuestionGenre === 3) { if (this.parentOptions[index].QuestionGenre === 3) {
this.parentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode] this.parentTriggerValOptions =
this.$d[this.parentOptions[index].DictionaryCode]
} else { } else {
const options = [] const options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => { this.parentOptions[index].TypeValue.split('|').forEach(
(item, index) => {
options.push({ id: index, label: item, value: item }) options.push({ id: index, label: item, value: item })
}) }
)
this.parentTriggerValOptions = options this.parentTriggerValOptions = options
} }
} }
} }
if (this.form.RelevanceId) { if (this.form.RelevanceId) {
var index = this.parentOptions.findIndex(item => { var index = this.parentOptions.findIndex((item) => {
return item.QuestionId === this.form.RelevanceId return item.QuestionId === this.form.RelevanceId
}) })
if (index !== -1) { if (index !== -1) {
if (this.parentOptions[index].QuestionGenre === 3) { if (this.parentOptions[index].QuestionGenre === 3) {
this.reParentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode] this.reParentTriggerValOptions =
this.$d[this.parentOptions[index].DictionaryCode]
} else { } else {
const options = [] const options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => { this.parentOptions[index].TypeValue.split('|').forEach(
(item, index) => {
options.push({ id: index, label: item, value: item }) options.push({ id: index, label: item, value: item })
}) }
)
this.reParentTriggerValOptions = options this.reParentTriggerValOptions = options
} }
} }
@ -701,13 +799,14 @@ export default {
this.getGroupClassifyDictionary() this.getGroupClassifyDictionary()
}, },
save() { save() {
this.$refs.clinicalDataForm.validate(valid => { this.$refs.clinicalDataForm.validate((valid) => {
if (!valid) return if (!valid) return
this.btnLoading = true this.btnLoading = true
if (this.form.Type !== 'upload') { if (this.form.Type !== 'upload') {
this.form.ImageCount = 0 this.form.ImageCount = 0
} }
addOrUpdateReadingQuestionSystem(this.form).then(res => { addOrUpdateReadingQuestionSystem(this.form)
.then((res) => {
this.btnLoading = false this.btnLoading = false
this.$emit('getList') this.$emit('getList')
this.$emit('close') this.$emit('close')
@ -722,13 +821,15 @@ export default {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.loading = true this.loading = true
var param = { var param = {
criterionId: this.data.ReadingQuestionCriterionSystemId criterionId: this.data.ReadingQuestionCriterionSystemId,
} }
getSystemGroupNameList(param).then(res => { getSystemGroupNameList(param)
.then((res) => {
this.groupOptions = res.Result this.groupOptions = res.Result
this.loading = false this.loading = false
resolve() resolve()
}).catch(() => { })
.catch(() => {
this.loading = false this.loading = false
reject() reject()
}) })
@ -738,14 +839,17 @@ export default {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.loading = true this.loading = true
var param = { var param = {
readingQuestionCriterionSystemId: this.data.ReadingQuestionCriterionSystemId, readingQuestionCriterionSystemId:
id: this.data.Id this.data.ReadingQuestionCriterionSystemId,
id: this.data.Id,
} }
getSystemCriterionOtherQuestion(param).then(res => { getSystemCriterionOtherQuestion(param)
.then((res) => {
this.parentOptions = res.Result this.parentOptions = res.Result
this.loading = false this.loading = false
resolve() resolve()
}).catch(() => { })
.catch(() => {
this.loading = false this.loading = false
reject() reject()
}) })
@ -819,17 +923,20 @@ export default {
parentQuestionChange(val, form) { parentQuestionChange(val, form) {
this.isParentExistGroup = false this.isParentExistGroup = false
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) {
if (this.parentOptions[index].QuestionGenre === 3) { if (this.parentOptions[index].QuestionGenre === 3) {
this.parentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode] this.parentTriggerValOptions =
this.$d[this.parentOptions[index].DictionaryCode]
} else { } else {
var options = [] var options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => { this.parentOptions[index].TypeValue.split('|').forEach(
(item, index) => {
options.push({ id: index, label: item, value: item }) options.push({ id: index, label: item, value: item })
}) }
)
this.parentTriggerValOptions = options this.parentTriggerValOptions = options
} }
if (this.parentOptions[index].GroupName) { if (this.parentOptions[index].GroupName) {
@ -845,17 +952,20 @@ export default {
}, },
relevanceQuestionChange(val, form) { 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) {
if (this.parentOptions[index].QuestionGenre === 3) { if (this.parentOptions[index].QuestionGenre === 3) {
this.reParentTriggerValOptions = this.$d[this.parentOptions[index].DictionaryCode] this.reParentTriggerValOptions =
this.$d[this.parentOptions[index].DictionaryCode]
} else { } else {
var options = [] var options = []
this.parentOptions[index].TypeValue.split('|').forEach((item, index) => { this.parentOptions[index].TypeValue.split('|').forEach(
(item, index) => {
options.push({ id: index, label: item, value: item }) options.push({ id: index, label: item, value: item })
}) }
)
this.reParentTriggerValOptions = options this.reParentTriggerValOptions = options
} }
} }
@ -871,13 +981,15 @@ export default {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.loading = true this.loading = true
var param = { var param = {
SystemCriterionId: this.data.ReadingQuestionCriterionSystemId SystemCriterionId: this.data.ReadingQuestionCriterionSystemId,
} }
getCriterionLesionType(param).then(res => { getCriterionLesionType(param)
.then((res) => {
this.lesionTypes = res.Result this.lesionTypes = res.Result
this.loading = false this.loading = false
resolve() resolve()
}).catch(() => { })
.catch(() => {
this.loading = false this.loading = false
reject() reject()
}) })
@ -885,9 +997,8 @@ export default {
}, },
close() { close() {
this.$emit('close') this.$emit('close')
} },
},
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -6,54 +6,61 @@
</div> </div>
<div class="left-content"> <div class="left-content">
<!-- 检查层级 --> <!-- 检查层级 -->
<div v-for="(study,i) in studyList" :key="study.CodeView"> <div v-for="(study, i) in studyList" :key="study.CodeView">
<div class="study-desc"> <div class="study-desc">
<span>{{ study.CodeView }}</span> <span>{{ study.CodeView }}</span>
<span style="margin:0 5px">{{ study.Modality }}</span> <span style="margin: 0 5px">{{ study.Modality }}</span>
<span>{{ getBodyPart(study.BodyPart) }}</span> <span>{{ getBodyPart(study.BodyPart) }}</span>
</div> </div>
<!-- 文件层级 --> <!-- 文件层级 -->
<div v-if="study.NoneDicomStudyFileList.length === 0" class="empty-text"> <div
v-if="study.NoneDicomStudyFileList.length === 0"
class="empty-text"
>
<slot name="empty">{{ $t('trials:audit:message:noData') }}</slot> <slot name="empty">{{ $t('trials:audit:message:noData') }}</slot>
</div> </div>
<div v-else id="imgList" style="height:100%;overflow: hidden"> <div v-else id="imgList" style="height: 100%; overflow: hidden">
<div <div
v-for="(item,j) in study.NoneDicomStudyFileList" v-for="(item, j) in study.NoneDicomStudyFileList"
:id="`img${item.Id}`" :id="`img${item.Id}`"
:key="item.Id" :key="item.Id"
:class="{ :class="{
'is-boxActive': item.Id === currentFileId 'is-boxActive': item.Id === currentFileId,
}" }"
class="img-box" class="img-box"
@click="selected(item,i,j,true)" @click="selected(item, i, j, true)"
> >
<div v-if="item.FileName.length < 15" class="img-text"> <div v-if="item.FileName.length < 15" class="img-text">
{{ `${j+1}. ${item.FileName}` }} {{ `${j + 1}. ${item.FileName}` }}
</div> </div>
<el-tooltip v-else :content="item.FileName" placement="bottom"> <el-tooltip v-else :content="item.FileName" placement="bottom">
<div class="img-text"> <div class="img-text">
{{ `${j+1}. ${item.FileName}` }} {{ `${j + 1}. ${item.FileName}` }}
</div> </div>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</el-card> </el-card>
<!-- 预览图像 --> <!-- 预览图像 -->
<el-card class="box-card right"> <el-card class="box-card right">
<div style="width:100%;height: 100%;"> <div style="width: 100%; height: 100%">
<Preview v-if="previewImage.imgList.length > 0" ref="previewImage" style="width:100%;" :preview-image="previewImage" :value="currentStudyFileIndex" @selectedImg="selectedImg" /> <Preview
v-if="previewImage.imgList.length > 0"
ref="previewImage"
style="width: 100%"
:preview-image="previewImage"
:value="currentStudyFileIndex"
@selectedImg="selectedImg"
/>
</div> </div>
</el-card> </el-card>
<!-- <el-card class="box-card" style="width:300px;height:100%;padding: 10px;margin-left:10px;"> <!-- <el-card class="box-card" style="width:300px;height:100%;padding: 10px;margin-left:10px;">
<CheckForm /> <CheckForm />
</el-card> --> </el-card> -->
</div> </div>
</template> </template>
<script> <script>
@ -65,7 +72,7 @@ import Preview from './components/preview'
export default { export default {
name: 'Notice', name: 'Notice',
components: { components: {
Preview Preview,
// CheckForm // CheckForm
}, },
data() { data() {
@ -82,14 +89,14 @@ export default {
popup: true, // popup: true, //
studyCode: '', studyCode: '',
modality: '', modality: '',
bodyPart: '' bodyPart: '',
}, },
previewVisible: false, previewVisible: false,
studyList: [], studyList: [],
subjectVisitId: '', subjectVisitId: '',
sudyId: '', sudyId: '',
loading: false, loading: false,
bp: [] bp: [],
} }
}, },
async created() { async created() {
@ -118,8 +125,14 @@ export default {
separator = '' separator = ''
} }
var arr = bodyPart.split(separator) var arr = bodyPart.split(separator)
var newArr = arr.map(i => { var newArr = arr.map((i) => {
return this.$fd('Bodypart', i.trim(), 'Code', { Bodypart: this.bp }, 'Name') return this.$fd(
'Bodypart',
i.trim(),
'Code',
{ Bodypart: this.bp },
'Name'
)
}) })
console.log(newArr, this.bp) console.log(newArr, this.bp)
return newArr.join(' | ') return newArr.join(' | ')
@ -127,22 +140,32 @@ export default {
// Dicom // Dicom
getNoneDicomList() { getNoneDicomList() {
this.loading = true this.loading = true
getNoneDicomStudyList(this.subjectVisitId, this.studyId).then(res => { getNoneDicomStudyList(
this.subjectVisitId,
this.studyId,
false,
this.$route.query.visitTaskId
)
.then((res) => {
this.studyList = res.Result this.studyList = res.Result
this.loading = false this.loading = false
const studyIndex = this.studyList.findIndex(item => { const studyIndex = this.studyList.findIndex((item) => {
return item.NoneDicomStudyFileList.length > 0 return item.NoneDicomStudyFileList.length > 0
}) })
if (studyIndex > -1) { if (studyIndex > -1) {
var fileObj = this.studyList[studyIndex]['NoneDicomStudyFileList'] var fileObj = this.studyList[studyIndex]['NoneDicomStudyFileList']
this.selected(fileObj[0], studyIndex, 0, true) this.selected(fileObj[0], studyIndex, 0, true)
} }
}).catch(() => { this.loading = false }) })
.catch(() => {
this.loading = false
})
}, },
selected(file, studyIndex, fileIndex, isChangeSub = false) { selected(file, studyIndex, fileIndex, isChangeSub = false) {
this.currentFileId = file.Id this.currentFileId = file.Id
this.currentStudyIndex = studyIndex this.currentStudyIndex = studyIndex
this.previewImage.imgList = this.studyList[studyIndex].NoneDicomStudyFileList this.previewImage.imgList =
this.studyList[studyIndex].NoneDicomStudyFileList
this.currentStudyFileIndex = fileIndex this.currentStudyFileIndex = fileIndex
this.previewImage.index = fileIndex this.previewImage.index = fileIndex
this.previewImage.studyCode = this.studyList[studyIndex].CodeView this.previewImage.studyCode = this.studyList[studyIndex].CodeView
@ -157,11 +180,17 @@ export default {
selectedImg(fileIndex) { selectedImg(fileIndex) {
if (this.studyList.length > 0) { if (this.studyList.length > 0) {
this.currentStudyFileIndex = fileIndex this.currentStudyFileIndex = fileIndex
this.currentFileId = this.studyList[this.currentStudyIndex].NoneDicomStudyFileList[fileIndex].Id this.currentFileId =
this.studyList[this.currentStudyIndex].NoneDicomStudyFileList[
fileIndex
].Id
this.previewImage.index = fileIndex this.previewImage.index = fileIndex
this.previewImage.studyCode = this.studyList[this.currentStudyIndex].CodeView this.previewImage.studyCode =
this.previewImage.bodyPart = this.studyList[this.currentStudyIndex].BodyPart this.studyList[this.currentStudyIndex].CodeView
this.previewImage.modality = this.studyList[this.currentStudyIndex].Modality this.previewImage.bodyPart =
this.studyList[this.currentStudyIndex].BodyPart
this.previewImage.modality =
this.studyList[this.currentStudyIndex].Modality
this.$nextTick(() => { this.$nextTick(() => {
const target = document.getElementById(`img${this.currentFileId}`) const target = document.getElementById(`img${this.currentFileId}`)
const parent = document.getElementsByClassName('left-content')[0] const parent = document.getElementsByClassName('left-content')[0]
@ -171,14 +200,13 @@ export default {
}, },
preview() { preview() {
this.previewVisible = true this.previewVisible = true
} },
},
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.img-container{ .img-container {
position: relative; position: relative;
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -192,27 +220,27 @@ export default {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;
} }
/deep/ .el-card__body{ /deep/ .el-card__body {
padding: 0px; padding: 0px;
} }
} }
.study-desc{ .study-desc {
padding: 15px 5px; padding: 15px 5px;
line-height: 20px; line-height: 20px;
background-color: #d5d5d5; background-color: #d5d5d5;
font-weight: 500; font-weight: 500;
} }
.left{ .left {
width:220px; width: 220px;
height: 100%; height: 100%;
/deep/ .el-card__body{ /deep/ .el-card__body {
height: 100%; height: 100%;
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.title{ .title {
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
border: 1ppx solid; border: 1ppx solid;
@ -221,7 +249,7 @@ export default {
background-color: #4e4e4e; background-color: #4e4e4e;
color: #ffffff; color: #ffffff;
} }
.left-content{ .left-content {
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
} }
@ -237,7 +265,7 @@ export default {
// overflow-y: auto; // overflow-y: auto;
// padding: 0; // padding: 0;
// } // }
.img-box{ .img-box {
// position: relative; // position: relative;
display: inline-block; display: inline-block;
box-sizing: border-box; box-sizing: border-box;
@ -246,9 +274,8 @@ export default {
cursor: pointer; cursor: pointer;
// margin-bottom: 5px; // margin-bottom: 5px;
padding-left: 5px; padding-left: 5px;
} }
.img-text{ .img-text {
display: inline-block; display: inline-block;
width: 200px; width: 200px;
height: 50px; height: 50px;
@ -257,7 +284,7 @@ export default {
text-overflow: ellipsis; /* 用省略号表示溢出的文本 */ text-overflow: ellipsis; /* 用省略号表示溢出的文本 */
white-space: nowrap; white-space: nowrap;
} }
.img-box:nth-last-child(1){ .img-box:nth-last-child(1) {
margin-bottom: 0px; margin-bottom: 0px;
} }
.is-boxActive { .is-boxActive {
@ -268,14 +295,13 @@ export default {
opacity: 0; opacity: 0;
} }
} }
.right{ .right {
flex: 1; flex: 1;
height: 100%; height: 100%;
margin-left: 10px; margin-left: 10px;
/deep/ .el-card__body{ /deep/ .el-card__body {
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
} }
</style> </style>

View File

@ -1,76 +1,130 @@
<template> <template>
<div style="display: flex;justify-content: center"> <div style="display: flex; justify-content: center">
<div style="width: 600px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;"> <div
<div class="trial-myinfo-head" style="font-size: 30px;line-height: 120px;"> style="
width: 600px;
text-align: center;
border: 1px solid #e6e6e6;
margin-top: 40px;
padding: 10px;
"
>
<div
class="trial-myinfo-head"
style="font-size: 30px; line-height: 120px"
>
<!-- 首次登录修改密码 --> <!-- 首次登录修改密码 -->
{{ $t('recompose:title:init') }} {{ $t('recompose:title:init') }}
</div> </div>
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="120px"> <el-form
ref="passwordForm"
v-loading="loading"
label-position="right"
:model="password"
:rules="passwordFormRules"
:label-width="$i18n.locale === 'en' ? '180px' : '120px'"
>
<!-- 用户名 --> <!-- 用户名 -->
<el-form-item :label="$t('recompose:form:userName')" prop="NewUserName"> <el-form-item :label="$t('recompose:form:userName')" prop="NewUserName">
<el-input v-model="password.NewUserName" /> <el-input v-model="password.NewUserName" />
</el-form-item> </el-form-item>
<!-- 旧密码 --> <!-- 旧密码 -->
<el-form-item :label="$t('recompose:form:oldPassword')" prop="OldPassWord"> <el-form-item
<el-input v-model="password.OldPassWord" type="password" show-password auto-complete="new-password" /> :label="$t('recompose:form:oldPassword')"
prop="OldPassWord"
>
<el-input
v-model="password.OldPassWord"
type="password"
show-password
auto-complete="new-password"
/>
</el-form-item> </el-form-item>
<!-- 新密码 --> <!-- 新密码 -->
<el-form-item :label="$t('recompose:form:newPassword')" prop="NewPassWord"> <el-form-item
<el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" /> :label="$t('recompose:form:newPassword')"
prop="NewPassWord"
>
<el-input
v-model="password.NewPassWord"
type="password"
show-password
auto-complete="new-password"
/>
</el-form-item> </el-form-item>
<!-- 确认密码 --> <!-- 确认密码 -->
<el-form-item :label="$t('recompose:form:confirmPassword')" prop="ConfirmPassWord"> <el-form-item
<el-input v-model="password.ConfirmPassWord" type="password" show-password auto-complete="new-password" /> :label="$t('recompose:form:confirmPassword')"
</el-form-item> prop="ConfirmPassWord"
<el-form-item style="text-align:right">
<!-- 取消 -->
<el-button
size="small"
@click="cancel"
> >
<el-input
v-model="password.ConfirmPassWord"
type="password"
show-password
auto-complete="new-password"
/>
</el-form-item>
<el-form-item style="text-align: right">
<!-- 取消 -->
<el-button size="small" @click="cancel">
{{ $t('recompose:button:cancel') }} {{ $t('recompose:button:cancel') }}
</el-button> </el-button>
<!-- 保存 --> <!-- 保存 -->
<el-button <el-button type="primary" size="small" @click="save">
type="primary"
size="small"
@click="save"
>
{{ $t('recompose:button:save') }} {{ $t('recompose:button:save') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { modifyPassword } from '@/api/admin.js' import { modifyPassword } from '@/api/admin.js'
import md5 from 'js-md5' import md5 from 'js-md5'
import {mapMutations} from "vuex"; import { mapMutations } from 'vuex'
export default { export default {
data() { data() {
return { return {
password: { password: {
NewUserName: null NewUserName: null,
}, },
passwordFormRules: { passwordFormRules: {
NewUserName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }], NewUserName: [
OldPassWord: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }], {
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
],
OldPassWord: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
],
NewPassWord: [ NewPassWord: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
{ {
required: true, required: true,
trigger: 'blur', trigger: 'blur',
validator: this.$validatePassword validator: this.$validatePassword,
}, },
], ],
ConfirmPassWord: [ ConfirmPassWord: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
] required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
],
}, },
userId: null, userId: null,
loading: false loading: false,
} }
}, },
mounted() { mounted() {
@ -78,7 +132,6 @@ export default {
if (!this.password.NewUserName) { if (!this.password.NewUserName) {
// 使 // 使
this.$alert(this.$t('recompose:message:warning')) this.$alert(this.$t('recompose:message:warning'))
} }
}, },
methods: { methods: {
@ -96,7 +149,7 @@ export default {
this.$updateDictionary() this.$updateDictionary()
}, },
save() { save() {
this.$refs.passwordForm.validate(valid => { this.$refs.passwordForm.validate((valid) => {
if (valid) { if (valid) {
if (this.password.NewPassWord !== this.password.ConfirmPassWord) { if (this.password.NewPassWord !== this.password.ConfirmPassWord) {
// //
@ -106,58 +159,64 @@ export default {
const param = { const param = {
NewUserName: this.password.NewUserName, NewUserName: this.password.NewUserName,
NewPassWord: md5(this.password.NewPassWord), NewPassWord: md5(this.password.NewPassWord),
OldPassWord: md5(this.password.OldPassWord) OldPassWord: md5(this.password.OldPassWord),
} }
this.loading = true this.loading = true
modifyPassword(param).then(res => { modifyPassword(param)
.then((res) => {
this.loading = false this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
// , // ,
this.$message.success(this.$t('recompose:message:updatedSuccessfully')) this.$message.success(
this.$t('recompose:message:updatedSuccessfully')
)
setTimeout(() => { setTimeout(() => {
this.logout() this.logout()
}, 500) }, 500)
} }
}).catch(() => { this.loading = false }) })
.catch(() => {
this.loading = false
})
} }
}) })
}, },
cancel() { cancel() {
this.$refs['passwordForm'].resetFields() this.$refs['passwordForm'].resetFields()
} },
} },
} }
</script> </script>
<style> <style>
.reset-wrapper { .reset-wrapper {
padding: 20px; padding: 20px;
} }
.reset-wrapper .el-page-header { .reset-wrapper .el-page-header {
line-height: 50px; line-height: 50px;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
border-radius: 4px; border-radius: 4px;
background-color: #fff; background-color: #fff;
} }
.reset-wrapper .box-wrapper { .reset-wrapper .box-wrapper {
width: 60%; width: 60%;
margin: 20px auto; margin: 20px auto;
padding: 10px; padding: 10px;
color: #303133; color: #303133;
} }
</style> </style>
<style scoped> <style scoped>
::v-deep .is-error{ ::v-deep .is-error {
margin-bottom: 40px; margin-bottom: 40px;
} }
input:-webkit-autofill { input:-webkit-autofill {
-webkit-text-fill-color: #ededed !important; -webkit-text-fill-color: #ededed !important;
box-shadow: 0 0 0px 1000px transparent inset !important; box-shadow: 0 0 0px 1000px transparent inset !important;
background-color:transparent; background-color: transparent;
background-image: none; background-image: none;
transition: background-color 50000s ease-in-out 0s; transition: background-color 50000s ease-in-out 0s;
} }
input { input {
background-color:transparent; background-color: transparent;
caret-color: #fff; caret-color: #fff;
} }
</style> </style>

View File

@ -473,7 +473,7 @@
</div> </div>
</el-tooltip> </el-tooltip>
<el-tooltip <el-tooltip
v-if="trialCriterion.ImageUploadEnum > 0" v-if="trialCriterion.ImageUploadEnum > 0 && !trialCriterion.IsSign"
v-hasPermi="['role:ir']" v-hasPermi="['role:ir']"
class="item" class="item"
effect="dark" effect="dark"

View File

@ -158,7 +158,6 @@
<!-- 上传 --> <!-- 上传 -->
<el-button <el-button
v-if=" v-if="
item.CriterionType === 0 &&
item.ImageUploadEnum > 0 && item.ImageUploadEnum > 0 &&
item.IsReadingTaskViewInOrder > 0 item.IsReadingTaskViewInOrder > 0
" "
@ -171,7 +170,6 @@
<!-- 下载 --> <!-- 下载 -->
<el-button <el-button
v-if=" v-if="
item.CriterionType === 0 &&
item.ImageDownloadEnum === 1 && item.ImageDownloadEnum === 1 &&
item.IsReadingTaskViewInOrder > 0 item.IsReadingTaskViewInOrder > 0
" "

View File

@ -103,7 +103,7 @@
@click.stop="handleCheckAllChange" @click.stop="handleCheckAllChange"
type="success" type="success"
>{{ >{{
$t("trials:readingUnit:readingRules:title:CriterionModalitysAll") $t('trials:readingUnit:readingRules:title:CriterionModalitysAll')
}}</el-button }}</el-button
> >
</el-form-item> </el-form-item>
@ -183,7 +183,7 @@
" "
@change=" @change="
() => { () => {
form.IsArbitrationReading = false; form.IsArbitrationReading = false
} }
" "
> >
@ -233,8 +233,8 @@
@change=" @change="
(v) => { (v) => {
if (!v) { if (!v) {
form.IsGlobalReading = v; form.IsGlobalReading = v
form.IsOncologyReading = v; form.IsOncologyReading = v
} }
} }
" "
@ -307,15 +307,15 @@
" "
@change=" @change="
(v) => { (v) => {
form.ImageDownloadEnum = 0; form.ImageDownloadEnum = 0
form.ImageUploadEnum = 0; form.ImageUploadEnum = 0
if (v) { if (v) {
form.IsReadingShowSubjectInfo = true; form.IsReadingShowSubjectInfo = true
form.IsReadingShowPreviousResults = true; form.IsReadingShowPreviousResults = true
form.ReadingTaskViewEnum = 0; form.ReadingTaskViewEnum = 0
form.IseCRFShowInDicomReading = false; form.IseCRFShowInDicomReading = false
} else { } else {
form.ReadingTaskViewEnum = 2; form.ReadingTaskViewEnum = 2
} }
} }
" "
@ -352,11 +352,10 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<!--支持影像下载--> <!--支持影像下载v-if="CriterionType === 0"-->
<el-form-item <el-form-item
:label="$t('trials:processCfg:form:ImageDownloadEnum')" :label="$t('trials:processCfg:form:ImageDownloadEnum')"
prop="ImageDownloadEnum" prop="ImageDownloadEnum"
v-if="CriterionType === 0"
> >
<el-radio-group <el-radio-group
v-model="form.ImageDownloadEnum" v-model="form.ImageDownloadEnum"
@ -380,7 +379,6 @@
<el-form-item <el-form-item
:label="$t('trials:processCfg:form:ImageUploadEnum')" :label="$t('trials:processCfg:form:ImageUploadEnum')"
prop="ImageUploadEnum" prop="ImageUploadEnum"
v-if="CriterionType === 0"
> >
<el-radio-group <el-radio-group
v-model="form.ImageUploadEnum" v-model="form.ImageUploadEnum"
@ -443,7 +441,7 @@
@change=" @change="
(v) => { (v) => {
if (!v) { if (!v) {
form.IseCRFShowInDicomReading = true; form.IseCRFShowInDicomReading = true
} }
} }
" "
@ -542,7 +540,7 @@
" "
@change=" @change="
(v) => { (v) => {
$set(form, 'AdditionalAssessmentType' + item.Id, v); $set(form, 'AdditionalAssessmentType' + item.Id, v)
} }
" "
> >
@ -564,21 +562,21 @@
> >
<!-- 保存 --> <!-- 保存 -->
<el-button type="primary" @click="handleSave(true)"> <el-button type="primary" @click="handleSave(true)">
{{ $t("common:button:save") }} {{ $t('common:button:save') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</template> </template>
<script> <script>
import { getCriterionReadingInfo, setCriterionReadingInfo } from "@/api/trials"; import { getCriterionReadingInfo, setCriterionReadingInfo } from '@/api/trials'
export default { export default {
name: "ReadingRules", name: 'ReadingRules',
props: { props: {
trialReadingCriterionId: { trialReadingCriterionId: {
type: String, type: String,
default() { default() {
return ""; return ''
}, },
}, },
CriterionType: { CriterionType: {
@ -590,7 +588,7 @@ export default {
return { return {
additionalAssessmentOptionList: [], additionalAssessmentOptionList: [],
form: { form: {
TrialId: "", TrialId: '',
ImagePlatform: null, ImagePlatform: null,
ReadingTool: 0, ReadingTool: 0,
ReadingTaskViewEnum: null, ReadingTaskViewEnum: null,
@ -625,151 +623,151 @@ export default {
IsAutoCreate: [ IsAutoCreate: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsAdditionalAssessment: [ IsAdditionalAssessment: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ImagePlatform: [ ImagePlatform: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ReadingTool: [ ReadingTool: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ImageDownloadEnum: [ ImageDownloadEnum: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ImageUploadEnum: [ ImageUploadEnum: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsImageFilter: [ IsImageFilter: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ReadingTaskViewEnum: [ ReadingTaskViewEnum: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsImageLabeled: [ IsImageLabeled: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsReadingShowSubjectInfo: [ IsReadingShowSubjectInfo: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsReadingShowPreviousResults: [ IsReadingShowPreviousResults: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
ReadingType: [ ReadingType: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsReadingTaskViewInOrder: [ IsReadingTaskViewInOrder: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsGlobalReading: [ IsGlobalReading: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsArbitrationReading: [ IsArbitrationReading: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsOncologyReading: [ IsOncologyReading: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
DigitPlaces: [ DigitPlaces: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IseCRFShowInDicomReading: [ IseCRFShowInDicomReading: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
IsReadingPeriod: [ IsReadingPeriod: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
CriterionModalitys: [ CriterionModalitys: [
{ {
required: true, required: true,
message: this.$t("common:ruleMessage:select"), message: this.$t('common:ruleMessage:select'),
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (value && Array.isArray(value) && value.length < 0) { if (value && Array.isArray(value) && value.length < 0) {
callback(new Error(this.$t("common:ruleMessage:select"))); callback(new Error(this.$t('common:ruleMessage:select')))
} else { } else {
callback(); callback()
} }
}, },
trigger: ["blur", "change"], trigger: ['blur', 'change'],
}, },
], ],
// IsReadingTaskViewInOrder: [ // IsReadingTaskViewInOrder: [
@ -786,15 +784,15 @@ export default {
modalityList: [], modalityList: [],
CriterionModalitys: [], CriterionModalitys: [],
modalityIsCheck: false, // modalityIsCheck: false, //
}; }
}, },
mounted() { mounted() {
this.initPage(); this.initPage()
}, },
watch: { watch: {
CriterionModalitys: { CriterionModalitys: {
handler() { handler() {
this.form.CriterionModalitys = this.CriterionModalitys.join("|"); this.form.CriterionModalitys = this.CriterionModalitys.join('|')
}, },
deep: true, deep: true,
}, },
@ -803,19 +801,19 @@ export default {
// //
IsImageFilterChange(data) { IsImageFilterChange(data) {
if (data) { if (data) {
this.CriterionModalitys = this.modalityList; this.CriterionModalitys = this.modalityList
} else { } else {
this.CriterionModalitys = []; this.CriterionModalitys = []
} }
}, },
// //
handleCheckAllChange() { handleCheckAllChange() {
this.CriterionModalitys = this.CriterionModalitys =
this.CriterionModalitys.length <= 0 ? this.modalityList : []; this.CriterionModalitys.length <= 0 ? this.modalityList : []
}, },
initPage() { initPage() {
this.loading = true; this.loading = true
const trialId = this.$route.query.trialId; const trialId = this.$route.query.trialId
// getTrialCriterionAdditionalAssessmentOptionList(this.trialReadingCriterionId).then(res => { // getTrialCriterionAdditionalAssessmentOptionList(this.trialReadingCriterionId).then(res => {
// this.additionalAssessmentOptionList = res.Result // this.additionalAssessmentOptionList = res.Result
// if (this.additionalAssessmentOptionList.length > 0) { // if (this.additionalAssessmentOptionList.length > 0) {
@ -828,46 +826,46 @@ export default {
TrialReadingCriterionId: this.trialReadingCriterionId, TrialReadingCriterionId: this.trialReadingCriterionId,
}) })
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
this.modalityList = res.Result.TrialModalitys.split("|").filter( this.modalityList = res.Result.TrialModalitys.split('|').filter(
(item) => item && item.trim() (item) => item && item.trim()
); )
for (const k in this.form) { for (const k in this.form) {
if (res.Result.hasOwnProperty(k)) { if (res.Result.hasOwnProperty(k)) {
this.form[k] = res.Result[k]; this.form[k] = res.Result[k]
} }
} }
this.CriterionModalitys = this.form.CriterionModalitys this.CriterionModalitys = this.form.CriterionModalitys
? this.form.CriterionModalitys.split("|") ? this.form.CriterionModalitys.split('|')
: []; : []
this.form.TrialCriterionAdditionalAssessmentTypeList.forEach((v) => { this.form.TrialCriterionAdditionalAssessmentTypeList.forEach((v) => {
this.$set(v, "IsSelected", v.IsSelected || false); this.$set(v, 'IsSelected', v.IsSelected || false)
this.$set( this.$set(
this.form, this.form,
"AdditionalAssessmentType" + v.Id, 'AdditionalAssessmentType' + v.Id,
v.IsSelected v.IsSelected
); )
}); })
this.isReadingTaskViewInOrder = res.Result.IsReadingTaskViewInOrder; this.isReadingTaskViewInOrder = res.Result.IsReadingTaskViewInOrder
this.isConfirm = res.Result.IsSign; this.isConfirm = res.Result.IsSign
this.IsMustGlobalReading = res.Result.IsMustGlobalReading; this.IsMustGlobalReading = res.Result.IsMustGlobalReading
this.$emit("setConfirm", res.Result.IsSign); this.$emit('setConfirm', res.Result.IsSign)
this.$emit("setArbitrationReading", res.Result.IsArbitrationReading); this.$emit('setArbitrationReading', res.Result.IsArbitrationReading)
this.$emit( this.$emit(
"setAdditionalAssessment", 'setAdditionalAssessment',
this.form.IsAdditionalAssessment this.form.IsAdditionalAssessment
); )
this.$emit("setIsClinicalReading", res.Result.IsClinicalReading); this.$emit('setIsClinicalReading', res.Result.IsClinicalReading)
this.$emit("setGlobalReading", res.Result.IsGlobalReading); this.$emit('setGlobalReading', res.Result.IsGlobalReading)
this.$emit("setOncologyReading", res.Result.IsOncologyReading); this.$emit('setOncologyReading', res.Result.IsOncologyReading)
this.$emit("setDigitPlaces", res.Result.DigitPlaces); this.$emit('setDigitPlaces', res.Result.DigitPlaces)
if (res.Result.ReadingType === 1) { if (res.Result.ReadingType === 1) {
this.$emit("setArbitrationReading", false); this.$emit('setArbitrationReading', false)
} }
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false
}); })
// }).catch(() => { // }).catch(() => {
// this.loading = false // this.loading = false
// }) // })
@ -875,52 +873,52 @@ export default {
// //
handleSave(isPrompt = true) { handleSave(isPrompt = true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.$refs["readingRulesForm"].validate((valid) => { this.$refs['readingRulesForm'].validate((valid) => {
if (!valid) { if (!valid) {
resolve(false); resolve(false)
} else { } else {
this.loading = true; this.loading = true
if (this.form.ReadingType === 1) { if (this.form.ReadingType === 1) {
this.form.IsArbitrationReading = false; this.form.IsArbitrationReading = false
} }
// //
this.form.TrialReadingCriterionId = this.trialReadingCriterionId; this.form.TrialReadingCriterionId = this.trialReadingCriterionId
setCriterionReadingInfo(this.form) setCriterionReadingInfo(this.form)
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
this.$emit("reloadArbitrationRules"); this.$emit('reloadArbitrationRules')
this.$emit( this.$emit(
"setArbitrationReading", 'setArbitrationReading',
this.form.IsArbitrationReading this.form.IsArbitrationReading
); )
this.$emit( this.$emit(
"setAdditionalAssessment", 'setAdditionalAssessment',
this.form.IsAdditionalAssessment this.form.IsAdditionalAssessment
); )
this.$emit("setIsClinicalReading", this.form.IsClinicalReading); this.$emit('setIsClinicalReading', this.form.IsClinicalReading)
this.$emit("setGlobalReading", this.form.IsGlobalReading); this.$emit('setGlobalReading', this.form.IsGlobalReading)
this.$emit("setOncologyReading", this.form.IsOncologyReading); this.$emit('setOncologyReading', this.form.IsOncologyReading)
this.$emit("setDigitPlaces", this.form.DigitPlaces); this.$emit('setDigitPlaces', this.form.DigitPlaces)
if (this.form.ReadingType === 1) { if (this.form.ReadingType === 1) {
this.$emit("setArbitrationReading", false); this.$emit('setArbitrationReading', false)
} }
if (res.IsSuccess && isPrompt) { if (res.IsSuccess && isPrompt) {
this.$message.success( this.$message.success(
this.$t("common:message:savedSuccessfully") this.$t('common:message:savedSuccessfully')
); )
} }
resolve(true); resolve(true)
}) })
.catch((_) => { .catch((_) => {
this.loading = false; this.loading = false
resolve(false); resolve(false)
}); })
} }
}); })
}); })
}, },
}, },
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.reading-rule-config-form { .reading-rule-config-form {

View File

@ -252,7 +252,7 @@
</div> </div>
<!-- PDF录入 --> <!-- PDF录入 -->
<div v-if="cd.ClinicalUploadType === 1"> <div v-if="cd.ClinicalUploadType === 1">
<div v-if="allowAddOrEdit" style="text-align: right"> <div v-if="allowAddOrEdit" style="display:flex;align-items:center;justify-content: flex-end;">
<!-- 下载模板 --> <!-- 下载模板 -->
<el-button <el-button
v-if="cd.Path" v-if="cd.Path"
@ -271,6 +271,7 @@
position: relative; position: relative;
overflow: hidden; overflow: hidden;
display: inline-block; display: inline-block;
margin-left:10px
" "
> >
<!-- 新增 --> <!-- 新增 -->

View File

@ -1,9 +1,12 @@
<template> <template>
<div class="upload-dicom-files-wrapper"> <div class="upload-dicom-files-wrapper">
<!-- 已上传的dicom影像记录 --> <!-- 已上传的dicom影像记录 -->
<el-divider content-position="left">{{ <!-- <el-divider content-position="left">{{
$t('trials:uploadedDicoms:title:dicomUploaded') $t('trials:uploadedDicoms:title:dicomUploaded')
}}</el-divider> }}</el-divider> -->
<div style="margin: 10px 0">
{{ $t('trials:uploadedDicoms:title:dicomUploaded') }}
</div>
<div class="functions" style="text-align: right"> <div class="functions" style="text-align: right">
<!-- // --> <!-- // -->
<el-button <el-button
@ -193,9 +196,12 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 多文件上传 --> <!-- 多文件上传 -->
<el-divider content-position="left">{{ <!-- <el-divider content-position="left">{{
$t('trials:uploadedDicoms:title:dicomFilesOnly') $t('trials:uploadedDicoms:title:dicomFilesOnly')
}}</el-divider> }}</el-divider> -->
<div style="margin: 30px 0 10px 0">
{{ $t('trials:uploadedDicoms:title:dicomFilesOnly') }}
</div>
<el-tabs v-model="uploadActiveName"> <el-tabs v-model="uploadActiveName">
<!-- 本地上传 --> <!-- 本地上传 -->
<el-tab-pane <el-tab-pane
@ -539,10 +545,11 @@
icon="el-icon-view" icon="el-icon-view"
circle circle
:disabled=" :disabled="
scope.row.uploadState.stateCode !== '' && (scope.row.uploadState.stateCode !== '' &&
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && scope.row.dicomInfo.fileCount &&
!scope.row.uploadState.record !scope.row.uploadState.record) ||
btnLoading
" "
:title="$t('trials:uploadedDicoms:action:preview')" :title="$t('trials:uploadedDicoms:action:preview')"
size="small" size="small"
@ -555,10 +562,11 @@
:title="$t('trials:uploadedDicoms:action:delete')" :title="$t('trials:uploadedDicoms:action:delete')"
size="small" size="small"
:disabled=" :disabled="
scope.row.uploadState.stateCode !== '' && (scope.row.uploadState.stateCode !== '' &&
scope.row.dicomInfo.failedFileCount < scope.row.dicomInfo.failedFileCount <
scope.row.dicomInfo.fileCount && scope.row.dicomInfo.fileCount &&
!scope.row.uploadState.record !scope.row.uploadState.record) ||
btnLoading
" "
@click="handleDelete(scope.$index, scope.row)" @click="handleDelete(scope.$index, scope.row)"
/> />

View File

@ -24,10 +24,10 @@ module.exports = {
productionSourceMap: false, productionSourceMap: false,
devServer: { devServer: {
port: '8080', port: '8080',
headers: { // headers: {
'Cross-Origin-Opener-Policy': 'same-origin', // 'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp' // 'Cross-Origin-Embedder-Policy': 'require-corp'
}, // },
// open: true, // open: true,
overlay: { overlay: {
warnings: false, warnings: false,