补传影像
continuous-integration/drone/push Build encountered an error Details

uat
wangxiaoshuang 2025-11-14 10:08:27 +08:00
parent 88a7634ed3
commit 64cec20d7d
3 changed files with 101 additions and 179 deletions

View File

@ -4,41 +4,20 @@
<el-tab-pane v-for="(item, index) in list" :key="item.Id">
<span slot="label">
{{ item.ChallengeCode }}
<i
v-show="!item.IsClosed"
class="el-icon-message-solid"
style="color: red"
/>
<i v-show="!item.IsClosed" class="el-icon-message-solid" style="color: red" />
</span>
<div class="chat-wrapper">
<div class="chat-content">
<div v-for="record in item.DialogList" :key="record.Id">
<div v-if="!record.IsCurrentUser" class="word">
<!-- <img :src="record.headUrl"> -->
<img
v-if="record.UserTypeEnum * 1 === 8"
:src="adminAvatar"
alt="Admin"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 1"
:src="pmAvatar"
alt="PM"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 2"
:src="crcAvatar"
alt="CRC"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 3"
:src="qcAvatar"
alt="QC"
/>
<img v-if="record.UserTypeEnum * 1 === 8" :src="adminAvatar" alt="Admin" />
<img v-else-if="record.UserTypeEnum * 1 === 1" :src="pmAvatar" alt="PM" />
<img v-else-if="record.UserTypeEnum * 1 === 2" :src="crcAvatar" alt="CRC" />
<img v-else-if="record.UserTypeEnum * 1 === 3" :src="qcAvatar" alt="QC" />
<div class="info">
<p class="user-info">
<span style="font-weight: 700"
>{{ record.CreateUserFullName || record.CreateUserName }}
<span style="font-weight: 700">{{ record.CreateUserFullName || record.CreateUserName }}
</span>
<span>({{ record.CreateTime }}) </span>
</p>
@ -49,88 +28,48 @@
<div v-else class="word-my">
<div class="info">
<p class="user-info">
<span style="font-weight: 700"
>{{ record.CreateUserFullName || record.CreateUserName }}
<span style="font-weight: 700">{{ record.CreateUserFullName || record.CreateUserName }}
</span>
<span>({{ record.CreateTime }}) </span>
</p>
<div class="info-content" v-html="record.TalkContent" />
</div>
<!-- <img :src="record.headUrl"> -->
<img
v-if="record.UserTypeEnum * 1 === 8"
:src="adminAvatar"
alt="Admin"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 1"
:src="pmAvatar"
alt="PM"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 2"
:src="crcAvatar"
alt="CRC"
/>
<img
v-else-if="record.UserTypeEnum * 1 === 3"
:src="qcAvatar"
alt="QC"
/>
<img v-if="record.UserTypeEnum * 1 === 8" :src="adminAvatar" alt="Admin" />
<img v-else-if="record.UserTypeEnum * 1 === 1" :src="pmAvatar" alt="PM" />
<img v-else-if="record.UserTypeEnum * 1 === 2" :src="crcAvatar" alt="CRC" />
<img v-else-if="record.UserTypeEnum * 1 === 3" :src="qcAvatar" alt="QC" />
</div>
</div>
</div>
<div v-if="!item.IsClosed" class="chat-message">
<div
class="message"
v-if="hasPermi(['trials:trials-panel:visit:crc-upload:send'])"
>
<div class="message" v-if="hasPermi(['trials:trials-panel:visit:crc-upload:send'])">
<el-input v-model="newMessage" type="textarea" :rows="2" />
</div>
<div class="function">
<!-- 申请重传 -->
<el-button
v-show="(item.ReuploadEnum === 0 || item.ReuploadEnum === 3) && item.SecondReviewState !== 1"
<el-button v-show="(item.ReuploadEnum === 0 || item.ReuploadEnum === 3) && item.SecondReviewState !== 1"
v-hasPermi="[
'trials:trials-panel:visit:crc-upload:apply-reupload',
]"
type="primary"
:loading="applyBtnLoading"
@click="handleCRCApplyReupload(item)"
>
]" type="primary" :loading="applyBtnLoading" @click="handleCRCApplyReupload(item)">
{{ $t('trials:reuploadDicoms:button:applyReupload') }}
</el-button>
<!-- 重传 -->
<el-button
v-show="item.ReuploadEnum === 2 && item.SecondReviewState !== 1"
v-hasPermi="['trials:trials-panel:visit:crc-upload:reupload']"
type="primary"
:loading="uploadBtnLoading"
@click="openUploadDialog(index)"
>
<el-button v-show="item.ReuploadEnum === 2 && item.SecondReviewState !== 1"
v-hasPermi="['trials:trials-panel:visit:crc-upload:reupload']" type="primary"
:loading="uploadBtnLoading" @click="openUploadDialog(index)">
{{ $t('trials:reuploadDicoms:button:reupload') }}
</el-button>
<!-- 确认重传完成 -->
<el-button
v-show="item.ReuploadEnum === 2"
v-hasPermi="[
<el-button v-show="item.ReuploadEnum === 2" v-hasPermi="[
'trials:trials-panel:visit:crc-upload:set-reupload-finished',
]"
type="primary"
:disabled="item.IsReuploaded"
:loading="reuploadedFinishbtnLoading"
@click="handleSetUploadFinished(index)"
>
]" type="primary" :disabled="item.IsReuploaded" :loading="reuploadedFinishbtnLoading"
@click="handleSetUploadFinished(index)">
{{ $t('trials:reuploadDicoms:button:reuploadFinished') }}
</el-button>
<!-- 发送 -->
<el-button
v-hasPermi="['trials:trials-panel:visit:crc-upload:send']"
:disabled="newMessage === ''"
type="primary"
:loading="btnLoading"
@click="handleReply(item.Id, index)"
>
<el-button v-hasPermi="['trials:trials-panel:visit:crc-upload:send']" :disabled="newMessage === ''"
type="primary" :loading="btnLoading" @click="handleReply(item.Id, index)">
{{ $t('trials:reuploadDicoms:button:send') }}
</el-button>
</div>
@ -139,13 +78,8 @@
</el-tab-pane>
</el-tabs>
<!-- 上传Dicom/非Dicom文件 -->
<el-dialog
v-if="uploadVisible"
:visible.sync="uploadVisible"
:fullscreen="true"
append-to-body
custom-class="upload-dialog"
>
<el-dialog v-if="uploadVisible" :visible.sync="uploadVisible" :fullscreen="true" append-to-body
custom-class="upload-dialog">
<span slot="title">
<el-breadcrumb separator-class="el-icon-arrow-right">
<label style="float: left; margin-right: 10px">Upload: </label>
@ -163,100 +97,51 @@
}}</el-breadcrumb-item>
</el-breadcrumb>
</span>
<div
class="base-modal-body"
style="display: flex; flex-direction: column"
>
<div class="base-modal-body" style="display: flex; flex-direction: column">
<el-tabs v-model="activeName" type="border-card" style="flex: 1">
<!-- DICOM影像上传 -->
<el-tab-pane
:label="$t('trials:uploadedDicoms:tab:uploadDicoms')"
name="dicom"
v-if="[0, 1].includes($store.state.trials.config.CollectImagesEnum)"
>
<upload-dicom-files
:data="data"
:subject-id="data.SubjectId"
:subject-visit-id="data.Id"
@close="closeUpload"
@getList="reFreshList"
/>
<el-tab-pane :label="$t('trials:uploadedDicoms:tab:uploadDicoms')" name="dicom"
v-if="[0, 1].includes($store.state.trials.config.CollectImagesEnum)">
<upload-dicom-files :data="data" :isAfresh="true" :subject-id="data.SubjectId" :subject-visit-id="data.Id"
@close="closeUpload" @getList="reFreshList" />
</el-tab-pane>
<!-- 非DICOM影像上传 -->
<el-tab-pane
:label="$t('trials:uploadNonDicoms:tab:uploadNonDicoms')"
name="non-dicom"
v-if="[0, 2].includes($store.state.trials.config.CollectImagesEnum)"
>
<upload-non-dicom-files
v-if="activeName === 'non-dicom'"
:data="data"
:allow-add-or-edit="true"
:body-parts="bodyParts"
:modalities="modalities"
:subject-visit-id="data.Id"
@getList="reFreshList"
/>
<el-tab-pane :label="$t('trials:uploadNonDicoms:tab:uploadNonDicoms')" name="non-dicom"
v-if="[0, 2].includes($store.state.trials.config.CollectImagesEnum)">
<upload-non-dicom-files v-if="activeName === 'non-dicom'" :data="data" :allow-add-or-edit="true"
:body-parts="bodyParts" :modalities="modalities" :subject-visit-id="data.Id" @getList="reFreshList" />
</el-tab-pane>
<!-- 临床数据采集data.IsBaseLine && -->
<el-tab-pane
v-if="
<el-tab-pane v-if="
data.IsBaseLine &&
(otherInfo.IsHaveSubjectClinicalData ||
otherInfo.IsHaveVisitClinicalData)
"
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
name="clinical-data"
>
<upload-clinical-data
v-if="activeName === 'clinical-data'"
:subject-visit-id="data.Id"
:data="data"
:enum-type="otherInfo.ClinicalInformationTransmissionEnum"
:allow-add-or-edit="true"
@getList="reFreshList"
/>
" :label="$t('trials:uploadClinicalData:tab:uploadClinicalData')" name="clinical-data">
<upload-clinical-data v-if="activeName === 'clinical-data'" :subject-visit-id="data.Id" :data="data"
:enum-type="otherInfo.ClinicalInformationTransmissionEnum" :allow-add-or-edit="true"
@getList="reFreshList" />
</el-tab-pane>
<el-tab-pane
v-if="!data.IsBaseLine && otherInfo.IsHaveVisitClinicalData"
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
name="clinical-data"
>
<upload-clinical-data
v-if="activeName === 'clinical-data'"
:subject-visit-id="data.Id"
:data="data"
:enum-type="otherInfo.ClinicalInformationTransmissionEnum"
:allow-add-or-edit="true"
@getList="reFreshList"
/>
<el-tab-pane v-if="!data.IsBaseLine && otherInfo.IsHaveVisitClinicalData"
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')" name="clinical-data">
<upload-clinical-data v-if="activeName === 'clinical-data'" :subject-visit-id="data.Id" :data="data"
:enum-type="otherInfo.ClinicalInformationTransmissionEnum" :allow-add-or-edit="true"
@getList="reFreshList" />
</el-tab-pane>
</el-tabs>
</div>
</el-dialog>
<!-- 临床数据签名框 -->
<el-dialog
v-if="signVisible"
:visible.sync="signVisible"
:close-on-click-modal="false"
width="600px"
append-to-body
custom-class="base-dialog-wrapper"
>
<el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px" append-to-body
custom-class="base-dialog-wrapper">
<div slot="title">
<span style="font-size: 18px">{{ $t('common:dialogTitle:sign') }}</span>
<span style="font-size: 12px; margin-left: 5px">{{
`(${$t('common:label:sign')}${currentUser})`
}}</span>
</div>
<SignForm
ref="signForm"
:sign-code-enum="signCode"
:signReplaceText="signReplaceText"
:subject-visit-id="data.Id"
@closeDialog="closeClinicalDataSignDialog"
/>
<SignForm ref="signForm" :sign-code-enum="signCode" :signReplaceText="signReplaceText" :subject-visit-id="data.Id"
@closeDialog="closeClinicalDataSignDialog" />
</el-dialog>
</div>
</template>
@ -372,8 +257,7 @@ export default {
</p>
<p style='color:red'>${this.$t(
'trials:qcQuality:dialog:deadline'
)}: ${
item.DeadlineTime
)}: ${item.DeadlineTime
? item.DeadlineTime
: this.$t('trials:qcQuality:dialog:none')
}</p>`
@ -570,14 +454,17 @@ export default {
<style lang="scss" scoped>
.history-chat {
height: 500px;
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 10px;
background: #d0d0d0;
}
::v-deep .el-tabs {
::v-deep .el-tabs__header {
width: 100px;
@ -585,34 +472,41 @@ export default {
height: 500px;
overflow-y: auto;
}
::v-deep .el-tabs__content {
margin-right: 10px;
height: 500px;
width: calc(100% - 120px);
overflow-y: auto;
}
.chat-wrapper {
background-color: #f5f7fa;
height: 500px;
display: flex;
flex-direction: column !important;
overflow: hidden;
.chat-content {
width: 100%;
padding: 20px;
// height: 400px;
overflow-y: auto;
flex: 1;
.word {
display: flex;
margin-bottom: 20px;
img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.info {
margin-left: 10px;
.user-info {
font-size: 12px;
color: rgba(51, 51, 51, 0.8);
@ -621,6 +515,7 @@ export default {
line-height: 20px;
margin-top: -5px;
}
.info-content {
padding: 10px;
font-size: 14px;
@ -628,6 +523,7 @@ export default {
position: relative;
margin-top: 8px;
}
.info-content::before {
position: absolute;
left: -8px;
@ -639,19 +535,23 @@ export default {
}
}
}
.word-my {
display: flex;
justify-content: flex-end;
margin-bottom: 20px;
img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.info {
width: 90%;
margin-left: 10px;
text-align: right;
.user-info {
font-size: 12px;
color: rgba(51, 51, 51, 0.8);
@ -661,6 +561,7 @@ export default {
margin-top: -5px;
margin-right: 10px;
}
.info-content {
position: relative;
max-width: 70%;
@ -673,6 +574,7 @@ export default {
color: #fff;
text-align: left;
}
.info-content::after {
position: absolute;
right: -8px;
@ -685,14 +587,17 @@ export default {
}
}
}
.chat-message {
height: 100px;
padding: 0 50px;
.function {
margin-top: 10px;
text-align: right;
}
}
ol {
margin: 5px;
padding: 0px 10px;

View File

@ -22,7 +22,7 @@
<el-table v-loading="studyLoading" :data="studyList" style="width: 100%" :row-class-name="tableRowClassName"
max-height="250" @selection-change="handleUploadedSelectionChange"
:default-sort="{ prop: 'UploadedTime', order: 'ascending' }">
<el-table-column type="selection" width="55" />
<el-table-column type="selection" width="55" :selectable="handleSelectable2" />
<!-- 检查编号 -->
<el-table-column prop="StudyCode" :label="$t('trials:uploadedDicoms:table:studyId')" min-width="80"
show-overflow-tooltip sortable>
@ -105,12 +105,16 @@
<el-button icon="el-icon-upload2" v-if="
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
relationInfo.IsHaveStudyClinicalData
" :title="$t('trials:workbench:title:UploadClinicalData')" circle @click="handleUploadPetData(scope.row)" />
" :disabled="!isAfresh && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
:title="$t('trials:workbench:title:UploadClinicalData')" circle @click="handleUploadPetData(scope.row)" />
<!-- 编辑 -->
<el-button icon="el-icon-edit-outline" v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
:title="$t('common:button:edit')" circle @click="handleEditStudy(scope.row)" />
:title="$t('common:button:edit')"
:disabled="!isAfresh && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
circle @click="handleEditStudy(scope.row)" />
<!-- 删除 :disabled="scope.row.IsDeleted"-->
<el-button icon="el-icon-delete" :title="$t('trials:uploadedDicoms:action:delete')" circle
:disabled="!isAfresh && data.SubmitTime && moment(data.SubmitTime).isAfter(moment(scope.row.UploadedTime))"
@click="handleDeleteStudy(scope.row)" />
<!-- <el-button-->
<!-- icon="el-icon-toilet-paper"-->
@ -594,6 +598,10 @@ export default {
type: String,
required: true,
},
isAfresh: {
type: Boolean,
default: false
}
},
data() {
return {
@ -1765,6 +1773,13 @@ export default {
return true
}
},
handleSelectable2(row) {
if (!this.isAfresh && this.data.SubmitTime && moment(this.data.SubmitTime).isAfter(moment(row.UploadedTime))) {
return false
} else {
return true
}
},
//
handleUploadedSelectionChange(selection) {
this.deleteArr = []

View File

@ -308,14 +308,14 @@
" :label="$t('common:action:action')" width="250" fixed="right">
<template slot-scope="scope">
<!-- 上传 -->
<el-button v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']" icon="el-icon-upload2" :disabled="scope.row.SubmitState * 1 === 2 ||
<el-button v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']" icon="el-icon-upload2" :disabled="!isOCTorIVUS && (scope.row.SubmitState * 1 === 2 ||
scope.row.VisitExecuted === 2 ||
scope.row.IsLostVisit || (scope.row.IsSubjectQuit && scope.row.SubmitState * 1 !== 2)
scope.row.IsLostVisit || (scope.row.IsSubjectQuit && scope.row.SubmitState * 1 !== 2))
" circle :title="$t('trials:crcUpload:action:upload')" @click="CRChandleUpload(scope.row)" />
<!-- 上传2 -->
<el-button icon="el-icon-upload2" v-hasPermi="['trials:trials-panel:visit:crc-upload:upload2']" :disabled="scope.row.SubmitState * 1 === 2 ||
<el-button icon="el-icon-upload2" v-hasPermi="['trials:trials-panel:visit:crc-upload:upload2']" :disabled="!isOCTorIVUS && (scope.row.SubmitState * 1 === 2 ||
scope.row.VisitExecuted === 2 ||
scope.row.IsLostVisit || (scope.row.IsSubjectQuit && scope.row.SubmitState * 1 !== 2)
scope.row.IsLostVisit || (scope.row.IsSubjectQuit && scope.row.SubmitState * 1 !== 2))
" circle :title="$t('trials:crcUpload:action:upload')" @click="CRChandleUpload2(scope.row)" />
<!-- 提交 -->
<el-button v-hasPermi="['trials:trials-panel:visit:crc-upload:submit']" icon="el-icon-check" :disabled="scope.row.AuditState * 1 > 0 ||
@ -968,6 +968,7 @@ export default {
},
TrialReadingCriterionName: null,
TrialCode: null,
isOCTorIVUS: false
}
},
watch: {
@ -1060,6 +1061,7 @@ export default {
this.trialCriterionList = res.Result
this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId
this.isOCTorIVUS = this.trialCriterionList.some(item => item.CriterionType === 19 || item.CriterionType === 20)
// this.handleUpload2(this.subjectRowData)
})
.catch(() => { })