1090 lines
35 KiB
Vue
1090 lines
35 KiB
Vue
<template>
|
|
<div class="clinical-data_content">
|
|
<el-tabs
|
|
type="card"
|
|
v-model="clinicalType"
|
|
v-if="!(data.IsVisit || data.IsBaseLine)"
|
|
>
|
|
<div v-if="type === 'readingPeriod'">
|
|
<!--style="margin:0"-->
|
|
<h4>
|
|
<!-- 提示: -->
|
|
{{ $t('trials:readingPeriod:cd:title:tips') }}
|
|
</h4>
|
|
<h5>
|
|
<!-- 当前访视/阅片期需要采集“临床数据名称”。请采集临床数据后,按照模板上传,并签名确认。 -->
|
|
{{ tips1 }}
|
|
</h5>
|
|
<h5>
|
|
{{ $t('trials:readingPeriod:cd:title:tips2') }}
|
|
</h5>
|
|
</div>
|
|
<div class="top">
|
|
<!-- 预览 -->
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-view"
|
|
size="small"
|
|
:disabled="list.length === 0"
|
|
@click="handlePreview()"
|
|
>
|
|
{{ $t('trials:readingPeriod:cd:title:preview') }}
|
|
</el-button>
|
|
<!-- 添加 -->
|
|
<el-button
|
|
v-if="
|
|
otherInfo.IsCanAddClinicalData &&
|
|
hasPermi(['trials:trials-panel:subject:readingPeriod:edit']) &&
|
|
clinicalType === '1' &&
|
|
type !== 'consistencyAnalysis'
|
|
"
|
|
type="primary"
|
|
icon="el-icon-plus"
|
|
size="small"
|
|
@click="handleAdd"
|
|
>
|
|
{{ $t('common:button:add') }}
|
|
</el-button>
|
|
<!--下载模板-->
|
|
<el-button
|
|
v-if="
|
|
otherInfo.IsCanAddClinicalData &&
|
|
hasPermi(['trials:trials-panel:subject:readingPeriod:edit']) &&
|
|
clinicalType === '1' &&
|
|
type !== 'consistencyAnalysis'
|
|
"
|
|
type="primary"
|
|
icon="el-icon-download"
|
|
size="small"
|
|
@click="downLoadTemplate"
|
|
>
|
|
{{ $t('trials:readingPeriod:cd:title:downLoadTemplate') }}
|
|
</el-button>
|
|
<el-button
|
|
v-if="
|
|
hasPermi(['trials:trials-panel:subject:readingPeriod:edit']) &&
|
|
clinicalType === '2' &&
|
|
list.length > 0 &&
|
|
list[0].ReadingClinicalDataState !== 3 &&
|
|
list[0].IsCRCApplicationRevoke &&
|
|
type !== 'consistencyAnalysis'
|
|
"
|
|
type="primary"
|
|
icon="el-icon-plus"
|
|
size="small"
|
|
:disabled="list.length === 0"
|
|
@click="handleVerification(list[0], 'unconfirm')"
|
|
>
|
|
撤回审批
|
|
</el-button>
|
|
</div>
|
|
<div class="main">
|
|
<el-table
|
|
v-loading="loading"
|
|
:data="list"
|
|
stripe
|
|
style="width: 100%"
|
|
height="500"
|
|
>
|
|
<el-table-column type="index" width="40" />
|
|
<!-- 临床数据名称 -->
|
|
<el-table-column
|
|
prop="ClinicalDataSetName"
|
|
:label="$t('trials:readingPeriod:cd:table:clinicalDataName')"
|
|
min-width="100"
|
|
/>
|
|
<el-table-column
|
|
prop="UploadRole"
|
|
:label="$t('trials:studyList:table:uploader')"
|
|
show-overflow-tooltip
|
|
min-width="100"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalDataUploadRole', scope.row.UploadRole) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 数据级别 -->
|
|
<el-table-column
|
|
prop="ClinicalDataLevel"
|
|
:label="$t('trials:readingPeriod:cd:table:dataLevel')"
|
|
min-width="100"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalLevel', scope.row.ClinicalDataLevel) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 传输方式 -->
|
|
<el-table-column
|
|
prop="ClinicalUploadType"
|
|
:label="$t('trials:readingPeriod:cd:table:transferType')"
|
|
min-width="120"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalUploadType', scope.row.ClinicalUploadType) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 文件数量 -->
|
|
<el-table-column
|
|
prop="FileCount"
|
|
:label="$t('trials:readingPeriod:cd:table:fileCount')"
|
|
min-width="120"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{
|
|
scope.row.ClinicalUploadType === 0 ? 'NA' : scope.row.FileCount
|
|
}}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 阅片临床数据状态 -->
|
|
<el-table-column
|
|
prop="ReadingClinicalDataState"
|
|
:label="$t('trials:readingPeriod:cd:title:cdStatus')"
|
|
width="150"
|
|
>
|
|
<template slot-scope="scope">
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 0"
|
|
type="info"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 1"
|
|
type="danger"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 2"
|
|
type="primary"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 3"
|
|
type="warning"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column :label="$t('common:action:action')" width="260">
|
|
<template slot-scope="scope">
|
|
<!-- 查看 -->
|
|
<el-button
|
|
circle
|
|
:disabled="
|
|
scope.row.ClinicalUploadType === 1 &&
|
|
scope.row.FileCount === 0
|
|
"
|
|
:title="$t('trials:readingPeriod:cd:action:view')"
|
|
icon="el-icon-view"
|
|
@click="handlePreview(scope.row.Id, scope.row)"
|
|
/>
|
|
<!-- 编辑 -->
|
|
<el-button
|
|
v-if="clinicalType === '1'"
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:action:edit')"
|
|
icon="el-icon-edit-outline"
|
|
:disabled="
|
|
scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0
|
|
"
|
|
@click="handleEdit(scope.row)"
|
|
/>
|
|
<!-- 编辑 -->
|
|
<el-button
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
v-if="clinicalType === '1'"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:title:cdCheck')"
|
|
icon="el-icon-s-claim"
|
|
:disabled="
|
|
(scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0) &&
|
|
scope.row.ReadingClinicalDataState !== 2
|
|
"
|
|
@click="handleVerification(scope.row, 'confirm')"
|
|
/>
|
|
<!-- 删除 -->
|
|
<el-button
|
|
v-if="clinicalType === '1' && type !== 'consistencyAnalysis'"
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:action:delete')"
|
|
icon="el-icon-delete"
|
|
:disabled="
|
|
scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0
|
|
"
|
|
@click="handleDelete(scope.row)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<!-- 添加或编辑 -->
|
|
<el-dialog
|
|
v-if="addOrUpdateCD.visible"
|
|
:visible.sync="addOrUpdateCD.visible"
|
|
:close-on-click-modal="false"
|
|
:title="addOrUpdateCD.title"
|
|
width="600px"
|
|
append-to-body
|
|
custom-class="base-dialog-wrapper"
|
|
>
|
|
<AddOrEditCD
|
|
:trial-reading-criterion-id="trialReadingCriterionId"
|
|
:data="currentData"
|
|
:option="currentOption"
|
|
:type="type"
|
|
@close="addOrUpdateCD.visible = false"
|
|
@getList="getList"
|
|
/>
|
|
</el-dialog>
|
|
|
|
<!-- 核查 -->
|
|
<el-dialog
|
|
v-if="verification.visible"
|
|
:visible.sync="verification.visible"
|
|
:close-on-click-modal="false"
|
|
:title="verification.title"
|
|
width="600px"
|
|
append-to-body
|
|
custom-class="base-dialog-wrapper"
|
|
>
|
|
<Verification
|
|
:data="currentData"
|
|
@close="verification.visible = false"
|
|
@getList="getList"
|
|
@handlePreview="handlePreview"
|
|
@sign="handleSign"
|
|
/>
|
|
</el-dialog>
|
|
|
|
<!-- 签名 -->
|
|
<el-dialog
|
|
v-if="signVisible"
|
|
:visible.sync="signVisible"
|
|
:close-on-click-modal="false"
|
|
width="600px"
|
|
custom-class="base-dialog-wrapper"
|
|
append-to-body
|
|
>
|
|
<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"
|
|
@closeDialog="closeSignDialog"
|
|
/>
|
|
</el-dialog>
|
|
</div>
|
|
<!-- <template v-for="item in $d.GetClinicalType">
|
|
<el-tab-pane :key="item.Id" :label="item.label" :name="item.value.toString()" v-if="item.value===1">
|
|
|
|
</el-tab-pane>
|
|
</template> -->
|
|
</el-tabs>
|
|
<div v-else>
|
|
<div class="top">
|
|
<!-- 预览 -->
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-view"
|
|
size="small"
|
|
:disabled="list.length === 0"
|
|
@click="handlePreview()"
|
|
>
|
|
{{ $t('trials:readingPeriod:cd:title:preview') }}
|
|
</el-button>
|
|
<!-- 添加 -->
|
|
<el-button
|
|
v-if="
|
|
otherInfo.IsCanAddClinicalData &&
|
|
hasPermi(['trials:trials-panel:subject:readingPeriod:edit'])
|
|
"
|
|
type="primary"
|
|
icon="el-icon-plus"
|
|
size="small"
|
|
@click="handleAdd"
|
|
>
|
|
{{ $t('common:button:add') }}
|
|
</el-button>
|
|
</div>
|
|
<div class="main">
|
|
<el-table
|
|
v-loading="loading"
|
|
:data="list"
|
|
stripe
|
|
style="width: 100%"
|
|
height="500"
|
|
>
|
|
<el-table-column type="index" width="40" />
|
|
<!-- 临床数据名称 -->
|
|
<el-table-column
|
|
prop="ClinicalDataSetName"
|
|
:label="$t('trials:readingPeriod:cd:table:clinicalDataName')"
|
|
/>
|
|
<el-table-column
|
|
prop="UploadRole"
|
|
:label="$t('trials:studyList:table:uploader')"
|
|
show-overflow-tooltip
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalDataUploadRole', scope.row.UploadRole) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 数据级别 -->
|
|
<el-table-column
|
|
prop="ClinicalDataLevel"
|
|
:label="$t('trials:readingPeriod:cd:table:dataLevel')"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalLevel', scope.row.ClinicalDataLevel) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 传输方式 -->
|
|
<el-table-column
|
|
prop="ClinicalUploadType"
|
|
:label="$t('trials:readingPeriod:cd:table:transferType')"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{ $fd('ClinicalUploadType', scope.row.ClinicalUploadType) }}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 文件数量 -->
|
|
<el-table-column
|
|
prop="FileCount"
|
|
:label="$t('trials:readingPeriod:cd:table:fileCount')"
|
|
>
|
|
<template slot-scope="scope">
|
|
{{
|
|
scope.row.ClinicalUploadType === 0 ? 'NA' : scope.row.FileCount
|
|
}}
|
|
</template>
|
|
</el-table-column>
|
|
<!-- 阅片临床数据状态 -->
|
|
<el-table-column
|
|
prop="ReadingClinicalDataState"
|
|
:label="$t('trials:readingPeriod:cd:title:cdStatus')"
|
|
width="150"
|
|
>
|
|
<template slot-scope="scope">
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 0"
|
|
type="info"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 1"
|
|
type="danger"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 2"
|
|
type="primary"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
<el-tag
|
|
v-if="scope.row.ReadingClinicalDataState === 3"
|
|
type="warning"
|
|
>{{
|
|
$fd(
|
|
'ReadingClinicalDataState',
|
|
scope.row.ReadingClinicalDataState
|
|
)
|
|
}}</el-tag
|
|
>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column :label="$t('common:action:action')" width="260">
|
|
<template slot-scope="scope">
|
|
<!-- 查看 -->
|
|
<el-button
|
|
circle
|
|
:disabled="
|
|
scope.row.ClinicalUploadType === 1 &&
|
|
scope.row.FileCount === 0
|
|
"
|
|
:title="$t('trials:readingPeriod:cd:action:view')"
|
|
icon="el-icon-view"
|
|
@click="handlePreview(scope.row.Id, scope.row)"
|
|
/>
|
|
<!-- 编辑 -->
|
|
<el-button
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:action:edit')"
|
|
icon="el-icon-edit-outline"
|
|
:disabled="
|
|
scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0 ||
|
|
(type === 'consistencyAnalysis' &&
|
|
scope.row.ReadingClinicalDataState === 3)
|
|
"
|
|
@click="handleEdit(scope.row)"
|
|
/>
|
|
<!-- 编辑 -->
|
|
<el-button
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:title:cdCheck')"
|
|
icon="el-icon-s-claim"
|
|
:disabled="
|
|
(scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0 ||
|
|
type === 'consistencyAnalysis') &&
|
|
scope.row.ReadingClinicalDataState !== 2
|
|
"
|
|
@click="handleVerification(scope.row, 'confirm')"
|
|
/>
|
|
<!-- 删除 -->
|
|
<el-button
|
|
v-hasPermi="['trials:trials-panel:subject:readingPeriod:edit']"
|
|
circle
|
|
:title="$t('trials:readingPeriod:cd:action:delete')"
|
|
icon="el-icon-delete"
|
|
:disabled="
|
|
scope.row.IsCRCUpload ||
|
|
scope.row.IsSign ||
|
|
scope.row.UploadRole === 0
|
|
"
|
|
@click="handleDelete(scope.row)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<!-- 添加 -->
|
|
<el-dialog
|
|
v-if="addOrUpdateCD.visible"
|
|
:visible.sync="addOrUpdateCD.visible"
|
|
:close-on-click-modal="false"
|
|
:title="addOrUpdateCD.title"
|
|
width="600px"
|
|
append-to-body
|
|
custom-class="base-dialog-wrapper"
|
|
>
|
|
<AddOrEditCD
|
|
:trial-reading-criterion-id="trialReadingCriterionId"
|
|
:data="currentData"
|
|
@close="addOrUpdateCD.visible = false"
|
|
@getList="getList"
|
|
/>
|
|
</el-dialog>
|
|
|
|
<!-- 核查 -->
|
|
<el-dialog
|
|
v-if="verification.visible"
|
|
:visible.sync="verification.visible"
|
|
:close-on-click-modal="false"
|
|
:title="verification.title"
|
|
width="600px"
|
|
append-to-body
|
|
custom-class="base-dialog-wrapper"
|
|
>
|
|
<Verification
|
|
:data="currentData"
|
|
@close="verification.visible = false"
|
|
@getList="getList"
|
|
@handlePreview="handlePreview"
|
|
@sign="handleSign"
|
|
/>
|
|
</el-dialog>
|
|
|
|
<!-- 签名 -->
|
|
<el-dialog
|
|
v-if="signVisible"
|
|
:visible.sync="signVisible"
|
|
:close-on-click-modal="false"
|
|
width="600px"
|
|
custom-class="base-dialog-wrapper"
|
|
append-to-body
|
|
>
|
|
<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"
|
|
@closeDialog="closeSignDialog"
|
|
/>
|
|
</el-dialog>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import {
|
|
getReadingClinicalDataList,
|
|
deleteReadingClinicalData,
|
|
ReadClinicalDataSign,
|
|
getTrialClinicalDataSelect,
|
|
getConsistencyAnalysisReadingClinicalDataList,
|
|
signConsistencyAnalysisReadingClinicalData,
|
|
} from '@/api/trials'
|
|
import AddOrEditCD from './AddOrEditCD'
|
|
import Verification from './Verification'
|
|
import SignForm from '@/views/trials/components/newSignForm'
|
|
import const_ from '@/const/sign-code'
|
|
import { getToken } from '@/utils/auth'
|
|
import { downLoadFile } from '@/utils/stream.js'
|
|
export default {
|
|
name: 'ClinicalData',
|
|
components: { AddOrEditCD, SignForm, Verification },
|
|
props: {
|
|
trialReadingCriterionId: {
|
|
type: String,
|
|
default() {
|
|
return ''
|
|
},
|
|
},
|
|
data: {
|
|
type: Object,
|
|
default() {
|
|
return {}
|
|
},
|
|
},
|
|
type: {
|
|
default: 'readingPeriod',
|
|
},
|
|
},
|
|
watch: {
|
|
clinicalType() {
|
|
this.getList()
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
clinicalType: null,
|
|
loading: false,
|
|
searchData: {},
|
|
list: [],
|
|
total: 0,
|
|
dialogVisible: false,
|
|
addOrUpdateCD: { title: '', visible: false },
|
|
verification: { title: '', visible: false },
|
|
currentData: {},
|
|
currentOption: [],
|
|
signCode: '',
|
|
currentUser: zzSessionStorage.getItem('userName'),
|
|
signVisible: false,
|
|
otherInfo: {},
|
|
spanArr: [],
|
|
pos: 0,
|
|
tips1: null,
|
|
clinicalDatas: [],
|
|
}
|
|
},
|
|
mounted() {
|
|
if (!(this.data.IsVisit || this.data.IsBaseLine)) {
|
|
// this.clinicalType = this.$d.GetClinicalType[0].value.toString();
|
|
this.clinicalType = '1'
|
|
} else {
|
|
this.getList(true)
|
|
}
|
|
window.addEventListener('message', (res) => {
|
|
if (res.data.type === 'pmConfirmClinical') {
|
|
this.getList()
|
|
}
|
|
})
|
|
},
|
|
methods: {
|
|
// 下载模板
|
|
async downLoadTemplate() {
|
|
try {
|
|
let { files, name } = this.formatDownloadFile()
|
|
let res = await downLoadFile(files, name, 'zip')
|
|
} catch (err) {
|
|
console.log(err)
|
|
}
|
|
},
|
|
// 格式化下载文件路径
|
|
formatDownloadFile() {
|
|
let files = [],
|
|
name = `${this.$route.query.trialId}_${
|
|
this.data.CriterionName
|
|
}_template_${new Date().getTime()}.zip`
|
|
this.clinicalDatas.forEach((item) => {
|
|
if (item.Path) {
|
|
let obj = {
|
|
name: item.FileName,
|
|
url: this.OSSclientConfig.basePath + item.Path,
|
|
}
|
|
files.push(obj)
|
|
}
|
|
})
|
|
return { files, name }
|
|
},
|
|
getClinicalDatas() {
|
|
return new Promise((resolve, reject) => {
|
|
let message = ''
|
|
let currentData = Object.assign(
|
|
{},
|
|
{
|
|
TrialId: this.data.TrialId,
|
|
ReadingId: this.data.Id,
|
|
IsVisit: this.data.IsVisit,
|
|
SubjectId: this.data.SubjectId,
|
|
IsBaseLine: this.data.IsBaseLine,
|
|
}
|
|
)
|
|
var param = {
|
|
trialId: currentData.TrialId,
|
|
IsVisit: currentData.IsVisit,
|
|
ReadingId: currentData.ReadingId,
|
|
SubjectId: currentData.SubjectId,
|
|
ReadingClinicalDataId: currentData.Id ? currentData.Id : '',
|
|
IsBaseLine: currentData.IsBaseLine,
|
|
TrialReadingCriterionId: this.trialReadingCriterionId,
|
|
}
|
|
getTrialClinicalDataSelect(param)
|
|
.then((res) => {
|
|
this.clinicalDatas = res.Result
|
|
res.Result.forEach((item, index) => {
|
|
if (index < 1) {
|
|
message += item.ClinicalDataSetName
|
|
} else {
|
|
message = message + '、' + item.ClinicalDataSetName
|
|
}
|
|
})
|
|
resolve(message)
|
|
})
|
|
.catch(() => {
|
|
reject()
|
|
})
|
|
})
|
|
},
|
|
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|
if (columnIndex === 6 && row.IsNeedMerge) {
|
|
const _row = this.spanArr[rowIndex]
|
|
const _col = _row > 0 ? 1 : 0
|
|
return {
|
|
rowspan: _row,
|
|
colspan: _col,
|
|
}
|
|
}
|
|
},
|
|
getSpanArr(data) {
|
|
for (var i = 0; i < data.length; i++) {
|
|
if (i === 0) {
|
|
this.spanArr.push(1)
|
|
this.pos = 0
|
|
} else {
|
|
// 判断当前元素与上一个元素是否相同
|
|
if (data[i].IsNeedMerge === data[i - 1].IsNeedMerge) {
|
|
this.spanArr[this.pos] += 1
|
|
this.spanArr.push(0)
|
|
} else {
|
|
this.spanArr.push(1)
|
|
this.pos = i
|
|
}
|
|
}
|
|
}
|
|
},
|
|
getList(is) {
|
|
this.loading = true
|
|
if (this.type === 'consistencyAnalysis') {
|
|
let data = {
|
|
SubjectId: this.data.SubjectId,
|
|
VisitTaskId: this.data.Id,
|
|
TrialId: this.$route.query.trialId,
|
|
}
|
|
return getConsistencyAnalysisReadingClinicalDataList(data)
|
|
.then((res) => {
|
|
this.list = res.Result
|
|
this.otherInfo = res.OtherInfo
|
|
this.loading = false
|
|
})
|
|
.catch(() => {
|
|
this.loading = false
|
|
})
|
|
}
|
|
this.searchData.ReadingId = this.data.Id
|
|
this.searchData.SubjectId = this.data.SubjectId
|
|
this.searchData.IsVisit = this.data.IsVisit
|
|
this.searchData.TrialId = this.data.TrialId
|
|
this.searchData.IsBaseLine = this.data.IsBaseLine
|
|
this.searchData.TrialReadingCriterionId = this.trialReadingCriterionId
|
|
if (!is) {
|
|
this.searchData.GetClinicalType = this.clinicalType
|
|
}
|
|
getReadingClinicalDataList(this.searchData)
|
|
.then(async (res) => {
|
|
this.list = res.Result
|
|
let message = ''
|
|
this.list.forEach((item, index) => {
|
|
if (index < 1) {
|
|
message += item.ClinicalDataSetName
|
|
} else {
|
|
message = message + '、' + item.ClinicalDataSetName
|
|
}
|
|
})
|
|
if (message === '' || !message) {
|
|
message = await this.getClinicalDatas()
|
|
}
|
|
this.tips1 = this.$t('trials:readingPeriod:cd:title:tips1').replace(
|
|
'临床数据名称',
|
|
message
|
|
)
|
|
this.tips1 = this.tips1.replace('xxx', message)
|
|
this.pos = 0
|
|
this.getSpanArr(this.list)
|
|
this.otherInfo = res.OtherInfo
|
|
this.loading = false
|
|
})
|
|
.catch(() => {
|
|
this.loading = false
|
|
})
|
|
},
|
|
handleAdd() {
|
|
this.currentData = Object.assign(
|
|
{},
|
|
{
|
|
TrialId: this.data.TrialId,
|
|
ReadingId: this.data.Id,
|
|
IsVisit: this.data.IsVisit,
|
|
SubjectId: this.data.SubjectId,
|
|
IsBaseLine: this.data.IsBaseLine,
|
|
}
|
|
)
|
|
this.addOrUpdateCD.title = this.$t('common:button:new')
|
|
this.addOrUpdateCD.visible = true
|
|
},
|
|
handleEdit(row) {
|
|
this.currentData = { ...row }
|
|
this.currentData.TrialId = this.data.TrialId
|
|
this.currentData.SubjectId = this.data.SubjectId
|
|
if (this.type === 'readingPeriod') {
|
|
this.currentData.ReadingId = this.data.Id
|
|
}
|
|
this.currentData.IsVisit = this.data.IsVisit
|
|
this.currentData.IsBaseLine = this.data.IsBaseLine
|
|
this.addOrUpdateCD.title = this.$t('common:button:edit')
|
|
this.currentOption = [
|
|
{
|
|
ClinicalDataSetName:
|
|
this.$i18n.locale === 'zh'
|
|
? row.ClinicalDataSetName
|
|
: row.ClinicalDataSetEnName,
|
|
Id: row.ClinicalDataTrialSetId,
|
|
},
|
|
]
|
|
this.addOrUpdateCD.visible = true
|
|
},
|
|
handleVerification(row, type) {
|
|
if (type === 'unconfirm') {
|
|
var token = getToken()
|
|
let routeData = this.$router.resolve({
|
|
path: `/clinicalData?type=unconfirm&ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&readingId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&readModuleId=${row.ReadModuleId}&getClinicalType=${
|
|
this.clinicalType
|
|
}&isConfirm=1&IsOnlyGetCRCReadModule=1&TokenKey=${token}`,
|
|
})
|
|
if (this.type === 'consistencyAnalysis') {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?type=unconfirm&ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&visitTaskId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&readModuleId=${row.ReadModuleId}&getClinicalType=${
|
|
this.clinicalType
|
|
}&isConfirm=1&IsOnlyGetCRCReadModule=1&TokenKey=${token}&&isGetAllConsistencyAnalysis=${0}`,
|
|
})
|
|
}
|
|
window.open(routeData.href, '_blank')
|
|
return
|
|
}
|
|
if (row.IsNeedMerge) {
|
|
var token = getToken()
|
|
let routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&readingId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&readModuleId=${row.ReadModuleId}&getClinicalType=${
|
|
this.clinicalType
|
|
}&isConfirm=1&IsOnlyGetCRCReadModule=1&TokenKey=${token}`,
|
|
})
|
|
if (this.type === 'consistencyAnalysis') {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&visitTaskId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&readModuleId=${row.ReadModuleId}&getClinicalType=${
|
|
this.clinicalType
|
|
}&isConfirm=1&IsOnlyGetCRCReadModule=1&TokenKey=${token}&&isGetAllConsistencyAnalysis=${0}`,
|
|
})
|
|
}
|
|
window.open(routeData.href, '_blank')
|
|
} else {
|
|
this.currentData = { ...row }
|
|
this.currentData.TrialId = this.data.TrialId
|
|
this.currentData.SubjectId = this.data.SubjectId
|
|
if (this.type === 'readingPeriod') {
|
|
this.currentData.ReadingId = this.data.Id
|
|
}
|
|
this.currentData.IsVisit = this.data.IsVisit
|
|
this.currentData.IsBaseLine = this.data.IsBaseLine
|
|
this.verification.title = this.$t(
|
|
'trials:readingPeriod:cd:title:cdCheck'
|
|
) // '核查'
|
|
this.verification.visible = true
|
|
}
|
|
},
|
|
handleDelete(row) {
|
|
this.$confirm(this.$t('trials:readingPeriod:cd:message:delete'), {
|
|
type: 'warning',
|
|
distinguishCancelAndClose: true,
|
|
})
|
|
.then(() => {
|
|
this.loading = true
|
|
deleteReadingClinicalData(row.Id)
|
|
.then((res) => {
|
|
this.loading = false
|
|
if (res.IsSuccess) {
|
|
this.getList()
|
|
this.$message.success(
|
|
this.$t('common:message:deletedSuccessfully')
|
|
)
|
|
}
|
|
})
|
|
.catch(() => {
|
|
this.loading = false
|
|
})
|
|
})
|
|
.catch(() => {})
|
|
},
|
|
handleSign(from) {
|
|
// this.currentData = { ...row }
|
|
this.currentData.IsBlind = from.IsBlind
|
|
this.currentData.IsComplete = from.IsComplete
|
|
const { CDQualityConfirmation } = const_.processSignature
|
|
this.signCode = CDQualityConfirmation
|
|
this.signVisible = true
|
|
},
|
|
signConfirm(signInfo) {
|
|
this.loading = true
|
|
let params = {
|
|
data: {
|
|
readingClinicalDataId: this.currentData.Id,
|
|
IsBlind: this.currentData.IsBlind,
|
|
IsComplete: this.currentData.IsComplete,
|
|
TrialReadingCriterionId: this.trialReadingCriterionId,
|
|
},
|
|
signInfo: signInfo,
|
|
}
|
|
if (this.type === 'consistencyAnalysis') {
|
|
params = {
|
|
data: {
|
|
consistentClinicalDataId: this.currentData.Id,
|
|
IsBlind: this.currentData.IsBlind,
|
|
IsComplete: this.currentData.IsComplete,
|
|
},
|
|
signInfo: signInfo,
|
|
}
|
|
signConsistencyAnalysisReadingClinicalData(params)
|
|
.then((res) => {
|
|
this.loading = false
|
|
if (res.IsSuccess) {
|
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
|
this.$refs['signForm'].btnLoading = false
|
|
|
|
this.signVisible = false
|
|
|
|
this.getList()
|
|
this.$emit('getList')
|
|
this.$nextTick(() => {
|
|
this.verification.visible = false
|
|
})
|
|
}
|
|
})
|
|
.catch((_) => {
|
|
this.loading = false
|
|
this.$refs['signForm'].btnLoading = false
|
|
})
|
|
} else {
|
|
ReadClinicalDataSign(params)
|
|
.then((res) => {
|
|
this.loading = false
|
|
if (res.IsSuccess) {
|
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
|
this.$refs['signForm'].btnLoading = false
|
|
|
|
this.signVisible = false
|
|
|
|
this.getList()
|
|
this.$emit('getList')
|
|
this.$nextTick(() => {
|
|
this.verification.visible = false
|
|
})
|
|
}
|
|
})
|
|
.catch((_) => {
|
|
this.loading = false
|
|
this.$refs['signForm'].btnLoading = false
|
|
})
|
|
}
|
|
},
|
|
// 关闭签名框并设置确认状态
|
|
closeSignDialog(isSign, signInfo) {
|
|
if (isSign) {
|
|
this.signConfirm(signInfo)
|
|
} else {
|
|
this.signVisible = false
|
|
this.loading = false
|
|
}
|
|
},
|
|
handlePreview(readingClinicalDataId, row) {
|
|
if (row && row.IsNeedMerge) {
|
|
var token = getToken()
|
|
let routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&readingId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&getClinicalType=${this.clinicalType}&readModuleId=${
|
|
row.ReadModuleId
|
|
}&IsOnlyGetCRCReadModule=1&TokenKey=${token}`,
|
|
})
|
|
if (this.type === 'consistencyAnalysis') {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&visitTaskId=${this.data.Id}&readingClinicalDataId=${
|
|
row.readingClinicalDataId || ''
|
|
}&getClinicalType=${this.clinicalType}&readModuleId=${
|
|
row.ReadModuleId
|
|
}&IsOnlyGetCRCReadModule=1&TokenKey=${token}&&isGetAllConsistencyAnalysis=${0}`,
|
|
})
|
|
}
|
|
window.open(routeData.href, '_blank')
|
|
} else {
|
|
var token = getToken()
|
|
var routeData
|
|
if (row) {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&readingId=${this.data.Id}&readingClinicalDataId=${
|
|
readingClinicalDataId || ''
|
|
}&getClinicalType=${this.clinicalType}&TokenKey=${token}`,
|
|
})
|
|
if (this.type === 'consistencyAnalysis') {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?ClinicalDataTrialSetId=${
|
|
row.ClinicalDataTrialSetId
|
|
}&subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&visitTaskId=${this.data.Id}&readingClinicalDataId=${
|
|
readingClinicalDataId || ''
|
|
}&getClinicalType=${
|
|
this.clinicalType
|
|
}&TokenKey=${token}&&isGetAllConsistencyAnalysis=${0}`,
|
|
})
|
|
}
|
|
} else {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&readingId=${this.data.Id}&readingClinicalDataId=${
|
|
readingClinicalDataId || ''
|
|
}&getClinicalType=${this.clinicalType}&TokenKey=${token}`,
|
|
})
|
|
if (this.type === 'consistencyAnalysis') {
|
|
routeData = this.$router.resolve({
|
|
path: `/clinicalData?subjectId=${this.data.SubjectId}&trialId=${
|
|
this.data.TrialId
|
|
}&visitTaskId=${this.data.Id}&readingClinicalDataId=${
|
|
readingClinicalDataId || ''
|
|
}&getClinicalType=${
|
|
this.clinicalType
|
|
}&TokenKey=${token}&&isGetAllConsistencyAnalysis=${0}`,
|
|
})
|
|
}
|
|
}
|
|
window.open(routeData.href, '_blank')
|
|
}
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.clinical-data_content {
|
|
.top {
|
|
text-align: right;
|
|
}
|
|
::v-deep .el-divider--horizontal {
|
|
margin: 10px;
|
|
}
|
|
}
|
|
</style>
|