Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
f58fa6011b
|
@ -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'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -62,10 +62,13 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
title: 'Upload Images:01 > 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)
|
||||||
|
|
|
@ -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')
|
||||||
},
|
},
|
||||||
|
|
|
@ -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')
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
"
|
"
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
|
|
|
@ -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)"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue