Compare commits

...

2 Commits

Author SHA1 Message Date
wangxiaoshuang 5bffb48b99 修改配置应用到影像上传以及影像质控
continuous-integration/drone/push Build encountered an error Details
2025-02-27 16:32:58 +08:00
wangxiaoshuang 858a650986 项目配置修改 2025-02-27 15:13:56 +08:00
6 changed files with 566 additions and 8 deletions

View File

@ -11,6 +11,9 @@
<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>
<span v-if="OtherInfo.IsShowStudyName" style="margin-left: 5px">{{
study.StudyName
}}</span>
</div> </div>
<!-- 文件层级 --> <!-- 文件层级 -->
<div <div
@ -45,7 +48,7 @@
</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%" v-if="!showPDF">
<Preview <Preview
v-if="previewImage.imgList.length > 0" v-if="previewImage.imgList.length > 0"
ref="previewImage" ref="previewImage"
@ -55,6 +58,9 @@
@selectedImg="selectedImg" @selectedImg="selectedImg"
/> />
</div> </div>
<div style="width: 100%; height: 100%" v-else>
<PreviewFile :file-path="pdfFile.path" :file-type="pdfFile.type" />
</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;">
@ -68,11 +74,13 @@ import { getNoneDicomStudyList } from '@/api/trials'
import store from '@/store' import store from '@/store'
import { changeURLStatic } from '@/utils/history.js' import { changeURLStatic } from '@/utils/history.js'
import Preview from './components/preview' import Preview from './components/preview'
import PreviewFile from '@/components/PreviewFile'
// import CheckForm from './components/form' // import CheckForm from './components/form'
export default { export default {
name: 'Notice', name: 'Notice',
components: { components: {
Preview, Preview,
PreviewFile,
// CheckForm // CheckForm
}, },
data() { data() {
@ -97,6 +105,12 @@ export default {
sudyId: '', sudyId: '',
loading: false, loading: false,
bp: [], bp: [],
OtherInfo: {},
showPDF: false,
pdfFile: {
path: null,
type: null,
},
} }
}, },
async created() { async created() {
@ -148,6 +162,7 @@ export default {
) )
.then((res) => { .then((res) => {
this.studyList = res.Result this.studyList = res.Result
this.OtherInfo = res.OtherInfo
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
@ -162,10 +177,19 @@ export default {
}) })
}, },
selected(file, studyIndex, fileIndex, isChangeSub = false) { selected(file, studyIndex, fileIndex, isChangeSub = false) {
if (!!~file.FileType.indexOf('pdf')) {
this.pdfFile.path = file.Path || file.FullFilePath
this.pdfFile.type = 'pdf'
this.showPDF = true
return true
} else {
this.showPDF = false
}
this.currentFileId = file.Id this.currentFileId = file.Id
this.currentStudyIndex = studyIndex this.currentStudyIndex = studyIndex
this.previewImage.imgList = this.previewImage.imgList = this.studyList[
this.studyList[studyIndex].NoneDicomStudyFileList studyIndex
].NoneDicomStudyFileList.filter((item) => !~item.FileType.indexOf('pdf'))
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

View File

@ -103,6 +103,7 @@
<el-form-item <el-form-item
:label="$t('trials:logincCfg:form:subjectAge')" :label="$t('trials:logincCfg:form:subjectAge')"
prop="IsHaveSubjectAge" prop="IsHaveSubjectAge"
v-if="showMore"
> >
<el-radio-group <el-radio-group
v-model="form.IsHaveSubjectAge" v-model="form.IsHaveSubjectAge"
@ -121,6 +122,7 @@
<el-form-item <el-form-item
:label="$t('trials:logincCfg:form:subjectGender')" :label="$t('trials:logincCfg:form:subjectGender')"
prop="IsSubjectSexView" prop="IsSubjectSexView"
v-if="showMore"
> >
<el-radio-group <el-radio-group
v-model="form.IsSubjectSexView" v-model="form.IsSubjectSexView"
@ -152,6 +154,7 @@
<el-form-item <el-form-item
:label="$t('trials:logincCfg:form:imageCopy')" :label="$t('trials:logincCfg:form:imageCopy')"
prop="IsImageReplicationAcrossTrial" prop="IsImageReplicationAcrossTrial"
v-if="showMore"
> >
<el-radio-group <el-radio-group
v-model="form.IsImageReplicationAcrossTrial" v-model="form.IsImageReplicationAcrossTrial"
@ -203,6 +206,45 @@
@click="handleSetModality" @click="handleSetModality"
/> />
</el-form-item> </el-form-item>
<!--展示检查名称-->
<el-form-item
:label="$t('trials:logincCfg:form:IsShowStudyName ')"
prop="IsShowStudyName"
v-if="showMore"
>
<el-radio-group
v-model="form.IsShowStudyName"
:disabled="form.IsTrialBasicLogicConfirmed && !isEdit"
@input="IsShowStudyNameChange"
>
<el-radio
:label="item.value"
v-for="item in $d.YesOrNo"
:key="item.id"
>{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 检查名称 -->
<el-form-item
:label="$t('trials:logincCfg:form:StudyNameList')"
prop="StudyNameTypes"
v-if="form.IsShowStudyName && showMore"
>
<el-input
v-model="form.StudyNameTypes"
type="textarea"
:autosize="{ minRows: 2, maxRows: 8 }"
style="width: 80%"
disabled
/>
<el-button
:disabled="form.IsTrialBasicLogicConfirmed && !isEdit"
icon="el-icon-plus"
circle
@click="handleSetStudyName"
/>
</el-form-item>
<!-- 影像质疑超限天数 --> <!-- 影像质疑超限天数 -->
<el-form-item <el-form-item
:label="$t('trials:logincCfg:form:exceededDays')" :label="$t('trials:logincCfg:form:exceededDays')"
@ -215,6 +257,19 @@
:disabled="form.IsTrialBasicLogicConfirmed && !isEdit" :disabled="form.IsTrialBasicLogicConfirmed && !isEdit"
/> />
</el-form-item> </el-form-item>
<el-form-item>
<div
:class="{ showMore: true, isCheck: showMore }"
@click.stop="showMore = !showMore"
>
<i class="el-icon-arrow-down"></i>
<span>{{
showMore
? $t('trials:logincCfg:button:packUp')
: $t('trials:logincCfg:button:more')
}}</span>
</div>
</el-form-item>
<el-form-item> <el-form-item>
<!-- 保存 --> <!-- 保存 -->
<el-button <el-button
@ -279,7 +334,8 @@
v-if=" v-if="
(form.IsTrialBasicLogicConfirmed === false || (form.IsTrialBasicLogicConfirmed === false ||
(form.IsTrialBasicLogicConfirmed === true && isEdit)) && (form.IsTrialBasicLogicConfirmed === true && isEdit)) &&
hasPermi(['trials:trials-panel:setting:trial-config:save']) hasPermi(['trials:trials-panel:setting:trial-config:save']) &&
showMore
" "
> >
{{ $t('common:button:terminology') }} {{ $t('common:button:terminology') }}
@ -748,6 +804,121 @@
:visible.sync="terminologyVisible" :visible.sync="terminologyVisible"
:DATA.sync="form.TrialObjectNameList" :DATA.sync="form.TrialObjectNameList"
/> />
<el-dialog
v-if="studyNameListVisible"
:visible.sync="studyNameListVisible"
:close-on-click-modal="false"
:title="$t('trials:logincCfg:form:studyName')"
custom-class="base-dialog-wrapper"
width="400px"
>
<div class="base-dialog-body" style="position: relative">
<el-button
size="small"
type="primary"
@click="addStudyName_model.visible = true"
style="position: absolute; top: 10px; right: 10px; z-index: 9"
>
{{ $t('common:button:add') }}
</el-button>
<el-table
ref="studyNameTable"
v-loading="listLoading"
:data="trialStudyNameList"
stripe
height="400"
row-key="Name"
@selection-change="handleStudyNameSelectionChange"
>
<el-table-column
type="selection"
align="left"
width="45"
:reserve-selection="true"
/>
<el-table-column
prop="Name"
:label="$t('trials:logincCfg:form:studyName')"
>
<template slot-scope="scope">
<div class="bodyPartName">
<span :title="isEN ? scope.row.EnName : scope.row.Name">{{
isEN ? scope.row.EnName : scope.row.Name
}}</span>
<el-button
circle
icon="el-icon-delete"
:title="$t('trials:logincCfg:form:StudyName:del')"
@click.stop="handleDelStudyName(scope.row)"
/>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div
class="base-dialog-footer"
style="text-align: right; margin-top: 10px"
>
<el-button
size="small"
type="primary"
:disabled="listLoading"
@click="studyNameListVisible = false"
>
{{ $t('common:button:cancel') }}
</el-button>
<el-button
size="small"
type="primary"
:disabled="listLoading"
@click="handleConfirmStudyName"
>
{{ $t('common:button:confirm') }}
</el-button>
</div>
</el-dialog>
<!--新增检查名称-->
<base-model v-if="addStudyName_model.visible" :config="addStudyName_model">
<template slot="dialog-body">
<el-form
ref="addStudyNameForm"
:inline="true"
:model="addStudyNameForm"
class="demo-form-inline"
:rules="addStudyNamerules"
>
<el-form-item
:label="$t('trials:setting:form:studyName')"
prop="Name"
label-width="150px"
>
<el-input
v-model.trim="addStudyNameForm.Name"
clearable
type="textarea"
:rows="2"
></el-input>
</el-form-item>
<el-form-item
:label="$t('trials:setting:form:bodyPart')"
style="display: none"
prop="bodyPartStr"
label-width="150px"
>
<el-input clearable :maxlength="50"></el-input>
</el-form-item>
</el-form>
</template>
<template slot="dialog-footer">
<el-button type="primary" @click="addOrUpdateTrialStudyName">
{{ $t('common:button:confirm') }}
</el-button>
<el-button @click="addStudyName_model.visible = false">
{{ $t('common:button:cancel') }}
</el-button>
</template>
</base-model>
</div> </div>
</template> </template>
<script> <script>
@ -772,6 +943,7 @@ export default {
components: { SignForm, ClinicalDataForm, BaseModel, terminology }, components: { SignForm, ClinicalDataForm, BaseModel, terminology },
data() { data() {
return { return {
showMore: false,
form: { form: {
TrialId: '', TrialId: '',
IsNoticeSubjectCodeRule: false, IsNoticeSubjectCodeRule: false,
@ -785,6 +957,9 @@ export default {
// ClinicalInformationTransmissionEnum: 1, // ClinicalInformationTransmissionEnum: 1,
IsImageReplicationAcrossTrial: false, IsImageReplicationAcrossTrial: false,
BodyPartTypes: '', BodyPartTypes: '',
StudyNameTypes: '',
IsShowStudyName: null,
StudyNameList: [],
BodyPartTypeList: [], BodyPartTypeList: [],
Modalitys: '', Modalitys: '',
ModalityList: [], ModalityList: [],
@ -855,6 +1030,13 @@ export default {
trigger: 'blur', trigger: 'blur',
}, },
], ],
StudyNameTypes: [
{
required: true,
message: this.$t('trials:trialCfg:formRule:bodyPart'),
trigger: 'blur',
},
],
// Modalitys: [ // Modalitys: [
// { required: true, message: this.$t('trials:trialCfg:formRule:modality'), trigger: 'blur' }, // { required: true, message: this.$t('trials:trialCfg:formRule:modality'), trigger: 'blur' },
// { max: 500, message: `${this.$t('common:ruleMessage:maxLength')} 500` } // { max: 500, message: `${this.$t('common:ruleMessage:maxLength')} 500` }
@ -894,19 +1076,32 @@ export default {
listLoading: false, listLoading: false,
modalityListVisible: false, modalityListVisible: false,
bodyPartListVisible: false, bodyPartListVisible: false,
studyNameListVisible: false,
selectedList: [], selectedList: [],
selectedBodyParts: [], selectedBodyParts: [],
trialBodyPartList: [], trialBodyPartList: [],
trialStudyNameList: [],
addBodyPart_model: { addBodyPart_model: {
visible: false, visible: false,
title: this.$t('trials:setting:button:add'), title: this.$t('trials:setting:button:add'),
width: '500px', width: '500px',
appendToBody: true, appendToBody: true,
}, },
addStudyName_model: {
visible: false,
title: this.$t('trials:setting:button:add'),
width: '500px',
appendToBody: true,
},
addBodyPartForm: { addBodyPartForm: {
bodyPartStr: null, bodyPartStr: null,
Id: null, Id: null,
}, },
addStudyNameForm: {
Name: null,
EnName: null,
IeChoose: false,
},
addBodyPartrules: { addBodyPartrules: {
bodyPartStr: [ bodyPartStr: [
{ {
@ -932,6 +1127,31 @@ export default {
}, },
], ],
}, },
addStudyNamerules: {
Name: [
{
required: true,
message: this.$t('trials:setting:format:notStudyName'),
trigger: ['blur', 'change'],
},
{
validator: (rule, value, callback) => {
let flag = this.trialStudyNameList.some(
(item) => item.Name === value
)
if (flag) {
callback(
new Error(this.$t('trials:setting:format:hasStudyName'))
)
} else {
callback()
}
},
message: this.$t('trials:setting:format:hasStudyName'),
trigger: ['blur', 'change'],
},
],
},
errMessage: null, errMessage: null,
renderFunc(h, option) { renderFunc(h, option) {
@ -947,6 +1167,11 @@ export default {
// created() { // created() {
// this.getTrialBodyPartList(); // this.getTrialBodyPartList();
// }, // },
computed: {
isEN() {
return this.$i18n.locale !== 'zh'
},
},
methods: { methods: {
openTerminology() { openTerminology() {
this.terminologyVisible = true this.terminologyVisible = true
@ -1003,6 +1228,30 @@ export default {
handleBodyPartSelectionChange(val) { handleBodyPartSelectionChange(val) {
this.selectedBodyParts = val this.selectedBodyParts = val
}, },
IsShowStudyNameChange(val) {
// if (!val) {
// if (this.form.StudyNameList && this.form.StudyNameList.length > 0) {
// this.form.StudyNameList.forEach((item) => {
// item.IsChoose = false
// })
// } else {
// this.form.StudyNameList = []
// }
// thiss.form.StudyNameTypes = null
// }
},
handleStudyNameSelectionChange(val) {
let data = []
if (val) {
data = val.map((item) => item.Name)
}
this.trialStudyNameList.forEach((item) => {
item.IsChoose = false
if (data.includes(item.Name)) {
item.IsChoose = true
}
})
},
// //
async getTrialBodyPartList(data) { async getTrialBodyPartList(data) {
try { try {
@ -1073,6 +1322,19 @@ export default {
} }
} }
}, },
async addOrUpdateTrialStudyName() {
let validate = await this.$refs.addStudyNameForm.validate()
if (!validate) return
this.addStudyNameForm.EnName = this.addStudyNameForm.Name
let data = { ...this.addStudyNameForm }
this.trialStudyNameList.push(data)
this.addStudyNameForm = {
EnName: null,
Name: null,
IsChoose: false,
}
this.addStudyName_model.visible = false
},
// //
handleEditBodyPart(item) { handleEditBodyPart(item) {
this.addBodyPartForm.bodyPartStr = item.Name this.addBodyPartForm.bodyPartStr = item.Name
@ -1081,6 +1343,12 @@ export default {
this.addBodyPart_model.title = this.$t('trials:setting:button:edit') this.addBodyPart_model.title = this.$t('trials:setting:button:edit')
this.addBodyPart_model.visible = true this.addBodyPart_model.visible = true
}, },
handleDelStudyName(item) {
let index = this.trialStudyNameList.findIndex(
(data) => item.Name === data.Name
)
this.trialStudyNameList.splice(index, 1)
},
handleSetBodyPart() { handleSetBodyPart() {
this.bodyPartListVisible = true this.bodyPartListVisible = true
this.$nextTick(() => { this.$nextTick(() => {
@ -1092,6 +1360,19 @@ export default {
this.toggleBodyPartSelection(a) this.toggleBodyPartSelection(a)
}) })
}, },
handleSetStudyName() {
this.studyNameListVisible = true
this.trialStudyNameList = []
this.form.StudyNameList.forEach((item) => {
this.trialStudyNameList.push({
...item,
})
})
this.$nextTick(() => {
let select = this.trialStudyNameList.filter((item) => item.IsChoose)
this.toggleStudyNameSelection(select)
})
},
toggleBodyPartSelection(rows) { toggleBodyPartSelection(rows) {
if (rows) { if (rows) {
rows.forEach((row) => { rows.forEach((row) => {
@ -1101,6 +1382,15 @@ export default {
this.$refs.bodyPartTable.clearSelection() this.$refs.bodyPartTable.clearSelection()
} }
}, },
toggleStudyNameSelection(rows) {
if (rows) {
rows.forEach((row) => {
this.$refs.studyNameTable.toggleRowSelection(row)
})
} else {
this.$refs.studyNameTable.clearSelection()
}
},
handleConfirmBodyParts() { handleConfirmBodyParts() {
this.form.BodyPartTypeList = Object.assign( this.form.BodyPartTypeList = Object.assign(
[], [],
@ -1112,6 +1402,14 @@ export default {
this.form.BodyPartTypes = bodyPartTypes.join(' | ') this.form.BodyPartTypes = bodyPartTypes.join(' | ')
this.bodyPartListVisible = false this.bodyPartListVisible = false
}, },
handleConfirmStudyName() {
var studyNameTypes = this.trialStudyNameList.filter((i) => i.IsChoose)
this.form.StudyNameTypes = this.isEN
? studyNameTypes.map((item) => item.EnName).join(', ')
: studyNameTypes.map((item) => item.Name).join(', ')
this.form.StudyNameList = this.trialStudyNameList
this.studyNameListVisible = false
},
// //
handleSave() { handleSave() {
this.$refs['logicalConfigForm'].validate((valid) => { this.$refs['logicalConfigForm'].validate((valid) => {
@ -1305,6 +1603,16 @@ export default {
NewVal: this.form.ModalityListStr, NewVal: this.form.ModalityListStr,
OldVal: this.initialForm.ModalityListStr, OldVal: this.initialForm.ModalityListStr,
}, },
{
Name: this.$t('trials:logincCfg:form:IsShowStudyName '),
NewVal: this.$fd('YesOrNo', this.form.IsShowStudyName),
OldVal: this.$fd('YesOrNo', this.initialForm.IsShowStudyName),
},
{
Name: this.$t('trials:logincCfg:form:StudyNameList'),
NewVal: this.form.StudyNameTypes,
OldVal: this.initialForm.StudyNameTypes,
},
{ {
Name: this.$t('trials:logincCfg:form:exceededDays'), Name: this.$t('trials:logincCfg:form:exceededDays'),
NewVal: this.form.ChangeDefalutDays, NewVal: this.form.ChangeDefalutDays,
@ -1355,6 +1663,16 @@ export default {
let BodyPartTypes = res.BodyPartTypes let BodyPartTypes = res.BodyPartTypes
this.form.BodyPartTypes = '' this.form.BodyPartTypes = ''
this.form.BodyPartTypeList = BodyPartTypes.split('|') this.form.BodyPartTypeList = BodyPartTypes.split('|')
let StudyNameTypes = this.form.StudyNameList.filter(
(item) => item.IsChoose
)
this.form.StudyNameTypes = ''
if (StudyNameTypes && StudyNameTypes.length > 0) {
this.form.StudyNameTypes = this.isEN
? StudyNameTypes.map((item) => item.EnName).join(', ')
: StudyNameTypes.map((item) => item.Name).join(', ')
}
let r = await this.getTrialBodyPartList() let r = await this.getTrialBodyPartList()
if (r) { if (r) {
var bodyPartTypes = this.form.BodyPartTypeList.map((i) => { var bodyPartTypes = this.form.BodyPartTypeList.map((i) => {
@ -1596,4 +1914,16 @@ export default {
margin: 0; margin: 0;
} }
} }
.showMore {
cursor: pointer;
color: #409eff;
i {
transition: 0.3s;
}
}
.showMore.isCheck {
i {
transform: rotate(180deg);
}
}
</style> </style>

View File

@ -139,6 +139,25 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<!--图像格式-->
<el-form-item
:label="$t('trials:processCfg:form:ImageFormatList')"
prop="ImageFormatList"
v-if="[0, 2].includes(form.CollectImagesEnum)"
>
<el-checkbox-group
v-model="form.ImageFormatList"
:disabled="form.IsTrialProcessConfirmed && !isEdit"
>
<el-checkbox
v-for="item in $d.ImageFormat"
:label="item.value"
:key="item.id"
>
{{ item.label }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<!-- 修约小数位数 --> <!-- 修约小数位数 -->
<!-- <el-form-item <!-- <el-form-item
:label="$t('trials:processCfg:form:digitPlaces')" :label="$t('trials:processCfg:form:digitPlaces')"
@ -1179,6 +1198,7 @@ export default {
ClinicalDataSetNamesStr: '', ClinicalDataSetNamesStr: '',
QCProcessEnum: null, QCProcessEnum: null,
CollectImagesEnum: null, CollectImagesEnum: null,
ImageFormatList: [],
IsImageConsistencyVerification: null, IsImageConsistencyVerification: null,
ReadingMode: null, ReadingMode: null,
// ImagePlatform: null, // ImagePlatform: null,
@ -1218,6 +1238,14 @@ export default {
trigger: ['blur', 'change'], trigger: ['blur', 'change'],
}, },
], ],
ImageFormatList: [
{
type: 'array',
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
QCProcessEnum: [ QCProcessEnum: [
{ {
required: true, required: true,
@ -1492,6 +1520,11 @@ export default {
this.initialForm.CollectImagesEnum this.initialForm.CollectImagesEnum
), ),
}, },
{
Name: this.$t('trials:processCfg:form:ImageFormatList'), //
NewVal: this.form.ImageFormatList.join(', '),
OldVal: this.initialForm.ImageFormatList.join(', '),
},
// { // {
// Name: this.$t('trials:processCfg:form:criterion'), // // Name: this.$t('trials:processCfg:form:criterion'), //
// NewVal: criterions.length > 0 ? criterions.join(', ') : '', // NewVal: criterions.length > 0 ? criterions.join(', ') : '',

View File

@ -87,6 +87,12 @@
{{ scope.row.StudyCode }} {{ scope.row.StudyCode }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 检查名称 -->
<el-table-column
v-if="relationInfo.IsShowStudyName"
prop="StudyName"
:label="$t('trials:audit:table:StudyName')"
/>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-table-column <el-table-column
prop="ModalityForEdit" prop="ModalityForEdit"
@ -694,6 +700,30 @@
<el-form-item :label="$t('trials:audit:table:studyId')"> <el-form-item :label="$t('trials:audit:table:studyId')">
<el-input v-model="studyForm.StudyCode" disabled /> <el-input v-model="studyForm.StudyCode" disabled />
</el-form-item> </el-form-item>
<!-- 检查名称 -->
<el-form-item
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
prop="StudyName"
:rules="[
{
required: true,
message: $t('common:ruleMessage:specify'),
trigger: 'blur',
},
]"
>
<el-radio-group v-model="studyForm.StudyName">
<template v-for="m in relationInfo.StudyNameList">
<el-radio
v-if="m.IsChoose"
:key="m.Name"
:label="isEN ? m.EnName : m.Name"
style="margin-bottom: 15px"
/>
</template>
</el-radio-group>
</el-form-item>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-form-item <el-form-item
v-if="studyForm.IsDicomData" v-if="studyForm.IsDicomData"
@ -899,6 +929,11 @@ export default {
isClose: false, isClose: false,
} }
}, },
computed: {
isEN() {
return this.$i18n.locale !== 'zh'
},
},
watch: { watch: {
btnLoading() { btnLoading() {
store.dispatch('trials/setUnLock', this.btnLoading) store.dispatch('trials/setUnLock', this.btnLoading)
@ -959,6 +994,7 @@ export default {
type: 1, type: 1,
modality: this.studyForm.Modality, modality: this.studyForm.Modality,
bodyPart: this.studyForm.BodyPart, bodyPart: this.studyForm.BodyPart,
StudyName: this.studyForm.StudyName,
} }
updateModality(this.trialId, params) updateModality(this.trialId, params)
.then((res) => { .then((res) => {

View File

@ -29,6 +29,12 @@
prop="CodeView" prop="CodeView"
:label="$t('trials:uploadNonDicoms:table:studyId')" :label="$t('trials:uploadNonDicoms:table:studyId')"
/> />
<!-- 检查名称 -->
<el-table-column
v-if="relationInfo.IsShowStudyName"
prop="StudyName"
:label="$t('trials:uploadNonDicoms:table:StudyName')"
/>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-table-column <el-table-column
prop="Modality" prop="Modality"
@ -235,6 +241,30 @@
> >
<el-input v-model="form.CodeView" disabled /> <el-input v-model="form.CodeView" disabled />
</el-form-item> </el-form-item>
<!-- 检查名称 -->
<el-form-item
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:uploadNonDicoms:table:StudyName')"
prop="StudyName"
:rules="[
{
required: true,
message: $t('common:ruleMessage:specify'),
trigger: 'blur',
},
]"
>
<el-radio-group v-model="form.StudyName">
<template v-for="m in relationInfo.StudyNameList">
<el-radio
v-if="m.IsChoose"
:key="m.Name"
:label="isEN ? m.EnName : m.Name"
style="line-height: 40px"
/>
</template>
</el-radio-group>
</el-form-item>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-form-item <el-form-item
:label="$t('trials:uploadNonDicoms:table:modality')" :label="$t('trials:uploadNonDicoms:table:modality')"
@ -343,7 +373,10 @@
<!-- 多文件上传 --> <!-- 多文件上传 -->
<form id="inputForm" ref="uploadForm"> <form id="inputForm" ref="uploadForm">
<el-divider content-position="left">{{ <el-divider content-position="left">{{
$t('trials:uploadNonDicoms:label:fileType') $t('trials:uploadNonDicoms:label:fileType').replace(
'xxx',
relationInfo.ImageFormatList.join('/')
)
}}</el-divider> }}</el-divider>
<div class="form-group"> <div class="form-group">
<div class="upload" style="margin-right: 10px"> <div class="upload" style="margin-right: 10px">
@ -602,6 +635,7 @@ export default {
BodyParts: [], BodyParts: [],
Modality: '', Modality: '',
ImageDate: '', ImageDate: '',
StudyName: '',
}, },
pickerOption: { pickerOption: {
disabledDate: (time) => { disabledDate: (time) => {
@ -627,6 +661,7 @@ export default {
moment, moment,
BodyPart: {}, BodyPart: {},
studyMonitorId: null, studyMonitorId: null,
relationInfo: {},
} }
}, },
async mounted() { async mounted() {
@ -666,12 +701,22 @@ export default {
store.dispatch('trials/setUnLock', false) store.dispatch('trials/setUnLock', false)
this.OSSclient.close() this.OSSclient.close()
}, },
computed: {
isEN() {
return this.$i18n.locale !== 'zh'
},
},
methods: { methods: {
// Dicom // Dicom
getNoneDicomList() { getNoneDicomList() {
this.loading = true this.loading = true
getNoneDicomStudyList(this.subjectVisitId) getNoneDicomStudyList(this.subjectVisitId)
.then((res) => { .then((res) => {
this.relationInfo = res.OtherInfo
this.faccept = []
this.relationInfo.ImageFormatList.forEach((item) => {
this.faccept.push(`.${item}`)
})
this.nonDicomStudyList = res.Result.map((v) => { this.nonDicomStudyList = res.Result.map((v) => {
if (v.VideoObjectName) { if (v.VideoObjectName) {
v.FileCount += 1 v.FileCount += 1
@ -691,6 +736,7 @@ export default {
this.form.CodeView = '' this.form.CodeView = ''
this.form.BodyPart = '' this.form.BodyPart = ''
this.form.Modality = '' this.form.Modality = ''
this.form.StudyName = ''
this.form.ImageDate = '' this.form.ImageDate = ''
this.form.BodyParts = [] this.form.BodyParts = []
this.dialogVisible = true this.dialogVisible = true
@ -698,11 +744,14 @@ export default {
// //
handleEdit(row) { handleEdit(row) {
this.title = this.$t('trials:uploadNonDicoms:dialogTitle:edit') this.title = this.$t('trials:uploadNonDicoms:dialogTitle:edit')
const { CodeView, Id, BodyPart, Modality, ImageDate } = { ...row } const { CodeView, Id, BodyPart, Modality, ImageDate, StudyName } = {
...row,
}
this.form.CodeView = CodeView this.form.CodeView = CodeView
this.form.Id = Id this.form.Id = Id
this.form.BodyPart = BodyPart this.form.BodyPart = BodyPart
this.form.Modality = Modality this.form.Modality = Modality
this.form.StudyName = StudyName
this.form.ImageDate = ImageDate this.form.ImageDate = ImageDate
this.form.BodyParts = this.form.BodyPart.split(', ') this.form.BodyParts = this.form.BodyPart.split(', ')
this.dialogVisible = true this.dialogVisible = true
@ -909,6 +958,13 @@ export default {
}) })
}, },
handlePreviewImg(row) { handlePreviewImg(row) {
if (!!~row.FileType.indexOf('pdf')) {
return this.$preview({
path: row.Path || row.fullPath,
type: 'pdf',
title: row.FileName,
})
}
// this.imgUrl = row.FullFilePath // this.imgUrl = row.FullFilePath
// this.previewImgVisible = true // this.previewImgVisible = true
// this.imageLoading = true // this.imageLoading = true

View File

@ -105,6 +105,12 @@
prop="StudyCode" prop="StudyCode"
:label="$t('trials:audit:table:studyId')" :label="$t('trials:audit:table:studyId')"
/> />
<!-- 检查名称 -->
<el-table-column
prop="StudyName"
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
/>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-table-column <el-table-column
prop="ModalityForEdit" prop="ModalityForEdit"
@ -133,7 +139,9 @@
style="color: #f44336; font-size: 16px" style="color: #f44336; font-size: 16px"
/> />
</el-tooltip> </el-tooltip>
<span v-else>{{ getBodyPart(scope.row.BodyPartForEdit) }}</span> <span v-else>{{
getBodyPart(scope.row.BodyPartForEdit)
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- 序列数量 --> <!-- 序列数量 -->
@ -387,6 +395,12 @@
prop="CodeView" prop="CodeView"
:label="$t('trials:audit:table:nonDicomsStudyId')" :label="$t('trials:audit:table:nonDicomsStudyId')"
/> />
<!-- 检查名称 -->
<el-table-column
prop="StudyName"
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
/>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-table-column <el-table-column
prop="Modality" prop="Modality"
@ -886,6 +900,30 @@
<el-form-item :label="$t('trials:audit:table:studyId')"> <el-form-item :label="$t('trials:audit:table:studyId')">
<el-input v-model="studyForm.StudyCode" disabled /> <el-input v-model="studyForm.StudyCode" disabled />
</el-form-item> </el-form-item>
<!-- 检查名称 -->
<el-form-item
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
prop="StudyName"
:rules="[
{
required: true,
message: $t('common:ruleMessage:specify'),
trigger: 'blur',
},
]"
>
<el-radio-group v-model="studyForm.StudyName">
<template v-for="m in relationInfo.StudyNameList">
<el-radio
v-if="m.IsChoose"
:key="m.Name"
:label="isEN ? m.EnName : m.Name"
style="line-height: 40px"
/>
</template>
</el-radio-group>
</el-form-item>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-form-item <el-form-item
v-if="studyForm.IsDicomData" v-if="studyForm.IsDicomData"
@ -1034,6 +1072,30 @@
<el-form-item :label="$t('trials:audit:table:nonDicomsStudyId')"> <el-form-item :label="$t('trials:audit:table:nonDicomsStudyId')">
<el-input v-model="noneDicomForm.CodeView" disabled /> <el-input v-model="noneDicomForm.CodeView" disabled />
</el-form-item> </el-form-item>
<!-- 检查名称 -->
<el-form-item
v-if="relationInfo.IsShowStudyName"
:label="$t('trials:audit:table:StudyName')"
prop="StudyName"
:rules="[
{
required: true,
message: $t('common:ruleMessage:specify'),
trigger: 'blur',
},
]"
>
<el-radio-group v-model="noneDicomForm.StudyName">
<template v-for="m in relationInfo.StudyNameList">
<el-radio
v-if="m.IsChoose"
:key="m.Name"
:label="isEN ? m.EnName : m.Name"
style="line-height: 40px"
/>
</template>
</el-radio-group>
</el-form-item>
<!-- 检查类型 --> <!-- 检查类型 -->
<el-form-item <el-form-item
:label="$t('trials:audit:table:nonDicomsModality')" :label="$t('trials:audit:table:nonDicomsModality')"
@ -1343,6 +1405,11 @@ export default {
default: 1, default: 1,
}, },
}, },
computed: {
isEN() {
return this.$i18n.locale !== 'zh'
},
},
data() { data() {
return { return {
activeName: this.data.DicomStudyCount > 0 ? 'dicom' : 'none-dicom', activeName: this.data.DicomStudyCount > 0 ? 'dicom' : 'none-dicom',
@ -1392,6 +1459,7 @@ export default {
BodyParts: [], BodyParts: [],
Modality: '', Modality: '',
ImageDate: '', ImageDate: '',
StudyName: '',
}, },
subjectClinicalData: {}, subjectClinicalData: {},
moment, moment,
@ -2297,6 +2365,7 @@ export default {
type: 1, type: 1,
modality: this.studyForm.Modality, modality: this.studyForm.Modality,
bodyPart: this.studyForm.BodyPart, bodyPart: this.studyForm.BodyPart,
StudyName: this.studyForm.StudyName,
} }
updateModality(this.data.TrialId, params) updateModality(this.data.TrialId, params)
.then((res) => { .then((res) => {
@ -2328,7 +2397,10 @@ export default {
// Dicom // Dicom
handleEditNoneDicomInfo(row) { handleEditNoneDicomInfo(row) {
const { CodeView, Id, BodyPart, Modality, ImageDate } = { ...row } const { CodeView, Id, BodyPart, Modality, ImageDate, StudyName } = {
...row,
}
this.noneDicomForm.StudyName = StudyName
this.noneDicomForm.CodeView = CodeView this.noneDicomForm.CodeView = CodeView
this.noneDicomForm.Id = Id this.noneDicomForm.Id = Id
this.noneDicomForm.BodyPart = BodyPart this.noneDicomForm.BodyPart = BodyPart
@ -2375,6 +2447,13 @@ export default {
}, },
// //
previewFile(row) { previewFile(row) {
if (!!~row.FileType.indexOf('pdf')) {
return this.$preview({
path: row.Path || row.fullPath,
type: 'pdf',
title: row.FileName,
})
}
// window.open(row.FullFilePath, '_blank') // window.open(row.FullFilePath, '_blank')
// this.imgObj.url = row.FullFilePath // this.imgObj.url = row.FullFilePath
// this.imgObj.loading = true // this.imgObj.loading = true