irc_web/src/views/trials/trials-panel/setting/trial-config/components/processConfig.vue

1580 lines
61 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="process-config-form">
<!-- 配置信息表单 -->
<el-form ref="processConfigForm" v-loading="loading" :model="form" label-width="300px" style="width: 800px"
:rules="rules" size="small">
<!-- 数据存储 -->
<el-form-item
:label="$t('trials:processCfg:form:trialDataStoreType')"
prop="TrialDataStoreType"
>
<el-radio-group
v-model="form.TrialDataStoreType"
:disabled="form.IsTrialProcessConfirmed && !isEdit"
>
<el-radio
v-for="item of $d.TrialDataStoreType"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 阅片方式 -->
<el-form-item :label="$t('trials:processCfg:form:readingMode')" prop="ReadingMode">
<el-radio-group v-model="form.ReadingMode" :disabled="form.IsTrialProcessConfirmed && !isEdit">
<el-radio v-for="item of $d.ReadingMode" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('trials:processCfg:form:criterion')" prop="TrialCriterionNamesStr">
<el-input v-model="form.TrialCriterionNamesStr" type="textarea" :autosize="{ minRows: 1, maxRows: 3 }"
style="width: 80%" disabled />
<el-button v-if="TrialStatusStr === 'Initializing'" :disabled="!isEdit" icon="el-icon-plus" circle
@click="handleSetCriterion" />
</el-form-item>
<!-- 临床信息传输 -->
<el-form-item :label="$t('trials:logincCfg:form:clinicalInforTransfer')"
prop="ClinicalInformationTransmissionEnum">
<el-radio-group v-model="form.ClinicalInformationTransmissionEnum"
:disabled="form.IsTrialProcessConfirmed && !isEdit">
<el-radio v-for="item of $d.ClinicalInformationTransmissionEnum" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 临床数据配置 -->
<el-form-item v-if="form.ClinicalInformationTransmissionEnum === 1"
:label="$t('trials:logincCfg:form:clinicalConfig')" prop="ClinicalDataSetNamesStr">
<el-input v-model="form.ClinicalDataSetNamesStr" type="textarea" :autosize="{ minRows: 1, maxRows: 3 }"
style="width: 80%" disabled />
<el-button v-if="form.TrialCriterionNamesStr" icon="el-icon-plus" circle @click="handleSetCD" />
</el-form-item>
<!-- 影像质控流程 -->
<el-form-item :label="$t('trials:processCfg:form:qcProcess')" prop="QCProcessEnum">
<el-radio-group v-model="form.QCProcessEnum" :disabled="form.IsTrialProcessConfirmed && !isEdit"
@input="QCProcessEnumChange">
<el-radio v-for="item of $d.QCProcessEnum" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!--影像质控风险控制-->
<el-form-item :label="$t('trials:processCfg:form:IsImageQualityControl')" prop="IsImageQualityControl"
v-if="form.QCProcessEnum > 0">
<el-radio-group v-model="form.IsImageQualityControl" :disabled="form.IsTrialProcessConfirmed && !isEdit">
<el-radio v-for="item of $d.YesOrNo" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 一致性核查流程 -->
<el-form-item :label="$t('trials:processCfg:form:conProcess')" prop="IsImageConsistencyVerification">
<el-radio-group v-model="form.IsImageConsistencyVerification"
:disabled="form.IsTrialProcessConfirmed && !isEdit">
<el-radio v-for="item of $d.YesOrNo" :key="`IsImageConsistencyVerification${item.value}`" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- 采集影像 -->
<el-form-item :label="$t('trials:processCfg:form:CollectImagesEnum')" prop="CollectImagesEnum">
<el-radio-group v-model="form.CollectImagesEnum" :disabled="form.IsTrialProcessConfirmed && !isEdit">
<el-radio v-for="item of $d.CollectImagesType" :key="item.id" :label="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</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
:label="$t('trials:processCfg:form:digitPlaces')"
prop="DigitPlaces"
>
<el-radio-group
v-model="form.DigitPlaces"
:disabled="form.IsTrialProcessConfirmed && !isEdit"
>
<el-radio
v-for="item of $d.DigitPlaces"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item> -->
<!-- 阅片模式 -->
<!-- <el-form-item
:label="$t('trials:processCfg:form:readingType')"
prop="ReadingType"
>
<el-radio-group
v-model="form.ReadingType"
:disabled="form.IsTrialProcessConfirmed && !isEdit"
@change="handleReadingTypeChange"
>
<el-radio
v-for="item of $d.ReadingMethod"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
&lt;!&ndash; 任务展示方式 &ndash;&gt;
<el-form-item
label="任务展示方式"
prop="IsReadingTaskViewInOrder"
>
<el-radio-group
v-model="form.IsReadingTaskViewInOrder"
:disabled="form.IsTrialProcessConfirmed && !isEdit"
@change="handleIsReadingTaskViewInOrderChange"
>
<el-radio
v-for="item of $d.IsReadingTaskViewInOrder"
:key="'IsReadingTaskViewInOrder' + item.value"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
&lt;!&ndash; 全局阅片 &ndash;&gt;
<el-form-item
:label="$t('trials:processCfg:form:global')"
prop="IsGlobalReading"
>
<el-radio-group
v-model="form.IsGlobalReading"
:disabled="(form.IsTrialProcessConfirmed && !isEdit) || !form.IsReadingTaskViewInOrder"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsGlobalReading${item.value}`"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
&lt;!&ndash; 仲裁阅片 &ndash;&gt;
<el-form-item
:label="$t('trials:processCfg:form:ad')"
prop="IsArbitrationReading"
>
<el-radio-group
v-model="form.IsArbitrationReading"
:disabled="form.ReadingType!== 3 || (form.IsTrialProcessConfirmed && !isEdit)"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsArbitrationReading${item.value}`"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
&lt;!&ndash; 临床阅片 &ndash;&gt;
<el-form-item
:label="$t('trials:processCfg:form:clinical')"
prop="IsClinicalReading"
>
<el-radio-group
v-model="form.IsClinicalReading"
:disabled="(form.IsTrialProcessConfirmed && !isEdit) || !form.IsReadingTaskViewInOrder"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsClinicalReading${item.value}`"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>-->
<!-- 仲裁规则 -->
<!-- <el-form-item
:label="$t('trials:processCfg:form:adRules')"
prop="ArbitrationRule"
>
<el-radio-group
v-model="form.ArbitrationRule"
:disabled="form.ReadingType === 1 || (form.IsTrialProcessConfirmed && !isEdit)"
>
<el-radio
v-for="item of $d.ArbitrationRule"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item> -->
<el-form-item>
<!-- 保存 -->
<el-button v-if="
form.IsTrialProcessConfirmed === false &&
hasPermi(['trials:trials-panel:setting:trial-config:save'])
" type="primary" @click="handleSave">
{{ $t('common:button:save') }}
</el-button>
<!-- 配置确认 -->
<el-button v-if="
form.IsTrialProcessConfirmed === false &&
hasPermi(['trials:trials-panel:setting:trial-config:save'])
" type="primary" @click="handleConfirm">
{{ $t('trials:trialCfg:button:confirm') }}
</el-button>
<!-- 配置更新 -->
<el-button v-if="
form.IsTrialProcessConfirmed === true &&
!isEdit &&
TrialStatusStr === 'Initializing' &&
hasPermi(['trials:trials-panel:setting:trial-config:save'])
" type="primary" @click="isEdit = true">
{{ $t('trials:trialCfg:button:update') }}
</el-button>
<!-- 配置更新确认 -->
<el-button v-if="
form.IsTrialProcessConfirmed === true &&
isEdit &&
hasPermi(['trials:trials-panel:setting:trial-config:save'])
" type="primary" @click="handleUpdate">
{{ $t('trials:trialCfg:button:updateAndConfirm') }}
</el-button>
<!-- 取消 -->
<el-button v-if="
form.IsTrialProcessConfirmed === true &&
isEdit &&
hasPermi(['trials:trials-panel:setting:trial-config:save'])
" type="primary" @click="isEdit = false">
{{ $t('common:button:cancel') }}
</el-button>
</el-form-item>
</el-form>
<!-- 配置信息确认框 -->
<el-dialog v-if="confirmVisible" :visible.sync="confirmVisible" :close-on-click-modal="false" width="600px"
:title="$t('trials:trialCfg:dialogTitle:cfgConfirm')" custom-class="base-dialog-wrapper">
<div class="base-dialog-body">
<el-table :data="confirmData" border style="width: 100%" size="small">
<!-- 配置项 -->
<el-table-column prop="Name" :label="$t('trials:trialCfg:table:cfgItem')" show-overflow-tooltip />
<!-- 配置值 -->
<el-table-column prop="NewVal" :label="$t('trials:trialCfg:table:cfgVal')" show-overflow-tooltip />
</el-table>
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<!-- 确认 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleConfirmConfigData">
{{ $t('trials:trialCfg:button:confirmCfg') }}
</el-button>
</div>
</el-dialog>
<!-- 配置信息更新框 -->
<el-dialog v-if="updateVisible" :visible.sync="updateVisible" :close-on-click-modal="false" width="600px"
:title="$t('trials:trialCfg:dialogTitle:cfgConfirm')" custom-class="base-dialog-wrapper">
<div class="base-dialog-body">
<el-table :data="confirmData" border style="width: 100%" size="small">
<!-- 配置项 -->
<el-table-column prop="Name" :label="$t('trials:trialCfg:table:cfgItem')" show-overflow-tooltip />
<!-- 配置值(更改前) -->
<el-table-column prop="OldVal" :label="`${$t('trials:trialCfg:table:cfgVal')} ${$t(
'trials:trialCfg:table:beforeChange'
)}`" show-overflow-tooltip />
<!-- 配置值(更改后) -->
<el-table-column prop="NewVal" :label="`${$t('trials:trialCfg:table:cfgVal')} ${$t(
'trials:trialCfg:table:updated'
)}`" show-overflow-tooltip>
<template slot-scope="scope">
<span :class="{ fontColor: scope.row.NewVal !== scope.row.OldVal }">{{ scope.row.NewVal }}</span>
</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" :loading="btnLoading" @click="handleUpdateConfigData">
{{ $t('trials:trialCfg:button:confirmCfg') }}
</el-button>
</div>
</el-dialog>
<!-- 配置信息签名框 -->
<el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px"
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" @closeDialog="closeSignDialog" />
</el-dialog>
<!-- 配置阅片标准模板选项 -->
<el-dialog v-if="criterionListVisible" :visible.sync="criterionListVisible" :close-on-click-modal="false"
:title="$t('trials:processCfg:title:criterion')" custom-class="base-dialog-wrapper" width="1000px">
<div v-loading="listLoading" class="base-dialog-body">
<div class="search-form" style="display: flex; justify-content: space-between">
<el-form :inline="true" size="mini" class="base-search-form">
<!-- 阅片标准 -->
<el-form-item :label="$t('trials:processCfg:title:criterion')">
<el-input v-model="criterionSearchForm.CriterionName" clearable style="width: 120px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearchCriterion">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" @click="handleResetCriterion">
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<div>
<el-button size="mini" type="primary" icon="el-icon-plus" @click="handleAddCriterion">
{{ $t('common:button:new') }}
</el-button>
</div>
</div>
<el-table ref="criterionList" :data="criterionList" stripe height="450" row-key="Id" class="criterion-table"
@select="selectCriterion">
<el-table-column type="selection" align="left" width="45" :reserve-selection="true" />
<el-table-column type="index" width="40" />
<el-table-column prop="CriterionName" :label="$t('trials:processCfg:title:criterion')" />
<el-table-column prop="CriterionType" :label="$t('trials:processCfg:title:criterionType')">
<template slot-scope="scope">
<span>{{ $fd('CriterionType', scope.row.CriterionType) }}</span>
</template>
</el-table-column>
<!-- <el-table-column
prop="IsCompleteConfig"
label="是否配置完成"
>
<template slot-scope="scope">
<el-switch
v-model="scope.row.IsCompleteConfig"
:disabled="scope.row.IsBeUsed || scope.row.IsSystemData"
@change="changeCriterionStatus($event, scope.row)"
/>
</template>
</el-table-column> -->
<el-table-column :label="$t('common:action:action')">
<template slot-scope="scope">
<!-- <el-button
type="primary"
size="mini"
:disabled="scope.row.IsBeUsed"
@click="handleConfigCriterion(scope.row)"
>
eCRF
</el-button> -->
<el-button circle :title="$t('common:button:edit')" icon="el-icon-edit" :disabled="scope.row.IsSystemData"
@click="handleEditCriterion(scope.row)">
</el-button>
<el-button circle :title="$t('common:button:delete')" icon="el-icon-delete"
:disabled="scope.row.IsSystemData" @click="handleDeleteCriterion(scope.row)">
</el-button>
</template>
</el-table-column>
</el-table>
<pagination style="text-align: right; margin-top: 10px" class="page" :total="criterionListTotal"
:page.sync="criterionSearchForm.PageIndex" :limit.sync="criterionSearchForm.PageSize"
@pagination="getCriterionList" />
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-button size="small" type="primary" :disabled="listLoading" @click="criterionListVisible = false">
{{ $t('common:button:cancel') }}
</el-button>
<el-button size="small" type="primary" :disabled="listLoading" @click="handleConfirmCriterion">
{{ $t('common:button:confirm') }}
</el-button>
</div>
</el-dialog>
<!-- 自定义阅片标准 -->
<el-dialog v-if="criterionFormDg.visible" :visible.sync="criterionFormDg.visible" :close-on-click-modal="false"
:title="criterionFormDg.title" custom-class="base-dialog-wrapper" append-to-body width="500px">
<div class="base-dialog-body">
<el-form ref="criterionForm" onsubmit="return false;" :model="criterionForm" label-width="210px">
<!-- 阅片标准名称 -->
<el-form-item :label="this.$t('trials:processCfg:title:criterionName')" prop="CriterionName" :rules="[
{ required: true, message: $t('common:ruleMessage:specify') },
{ max: 50, message: `${$t('common:ruleMessage:maxLength')} 50` },
]">
<el-input v-model="criterionForm.CriterionName" />
</el-form-item>
</el-form>
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-button size="small" type="primary" :disabled="listLoading" @click="handleCancelSave">
{{ $t('common:button:cancel') }}
</el-button>
<el-button size="small" type="primary" :disabled="listLoading" @click="handleSaveCriterion">
{{ $t('common:button:confirm') }}
</el-button>
</div>
</el-dialog>
<!-- 配置阅片标准问题 -->
<el-dialog v-if="criterionQSVisible" :visible.sync="criterionQSVisible" :close-on-click-modal="false" title="eCRF模板"
custom-class="base-dialog-wrapper" append-to-body width="1300px">
<div class="base-dialog-body">
<CriterionConfig :data="currentCriterionRow" @getList="getCriterionList" />
</div>
</el-dialog>
<!-- 配置临床信息模板选项 -->
<el-dialog v-if="clinicalDataVisible" :visible.sync="clinicalDataVisible" :close-on-click-modal="false"
:title="$t('trials:processCfg:title:clinicalDataCfg')" width="1250px" custom-class="base-dialog-wrapper">
<div v-loading="listLoading" class="base-dialog-body">
<div style="text-align: right">
<el-button v-if="isEdit" size="mini" type="primary" icon="el-icon-plus" @click="handleAddClinicalData">
{{ $t('common:button:new') }}
</el-button>
</div>
<el-table ref="clinicalData" :data="clinicalDataList" stripe height="400" row-key="Id" class="criterion-table"
@selection-change="handleCDSelectChange">
<!-- :selectable="handleSelectable" -->
<el-table-column type="selection" align="left" width="45" :reserve-selection="true"
:selectable="handleSelectable" />
<el-table-column type="index" width="40" />
<!-- 临床数据名称 -->
<el-table-column prop="ClinicalDataSetName" :label="$t('trials:processCfg:title:clinicalDataName')"
width="180" show-overflow-tooltip>
<template slot-scope="scope">
{{
$i18n.locale === 'zh'
? scope.row.ClinicalDataSetName
: scope.row.ClinicalDataSetEnName
}}
</template>
</el-table-column>
<!-- 上传人 -->
<el-table-column prop="UploadRole" :label="$t('trials:processCfg:title:uploader')" width="120"
show-overflow-tooltip>
<template slot-scope="scope">
{{ $fd('ClinicalDataUploadRole', scope.row.UploadRole) }}
</template>
</el-table-column>
<!-- 数据级别 -->
<el-table-column prop="ClinicalDataLevel" :label="$t('trials:processCfg:title:dataLevel')" width="180"
show-overflow-tooltip>
<template slot-scope="scope">
{{ $fd('ClinicalLevel', scope.row.ClinicalDataLevel) }}
</template>
</el-table-column>
<!-- 传输方式 -->
<el-table-column prop="ClinicalUploadType" :label="$t('trials:processCfg:title:transferType')" width="180"
show-overflow-tooltip>
<template slot-scope="scope">
{{ $fd('ClinicalUploadType', scope.row.ClinicalUploadType) }}
</template>
</el-table-column>
<!-- 阅片标准 -->
<el-table-column prop="CriterionEnumList" :label="$t('trials:processCfg:table:criterion')"
show-overflow-tooltip>
<template slot-scope="scope">
{{ scope.row.TrialCriterionNameList.join(', ') }}
</template>
</el-table-column>
<!-- 模板名称 -->
<el-table-column :label="$t('common:action:action')" width="220" fixed="right" style="text-align: right">
<template slot-scope="scope">
<!-- 下载 -->
<el-button v-if="scope.row.FileName && scope.row.ClinicalUploadType && $i18n.locale === 'zh'" circle
:title="$t('common:button:download')" icon="el-icon-download"
@click="handleDownloadTpl(scope.row.Path)">
</el-button>
<el-button v-if="scope.row.FileName && scope.row.ClinicalUploadType && $i18n.locale === 'en'" circle
icon="el-icon-download" @click="handleDownloadTpl(scope.row.EnPath)">
</el-button>
<el-button v-if="scope.row.FileName && !scope.row.ClinicalUploadType" circle
:title="$t('common:button:preview')" icon="el-icon-view" @click="handlePreviewTpl(scope.row)">
</el-button>
<el-button v-if="scope.row.ClinicalUploadType === 2" circle :title="$t('common:button:preview')"
icon="el-icon-view" @click="handlePreview(scope.row)">
</el-button>
<el-button circle v-if="isEdit" :title="$t('trials:readingUnit:qsList:title:qsConfig')"
icon="el-icon-set-up" :disabled="scope.row.ClinicalUploadType !== 2"
@click="handleConfigQuestion(scope.row)">
</el-button>
<!-- 编辑 -->
<el-button circle v-if="isEdit" :title="$t('common:button:edit')" icon="el-icon-edit" :disabled="TrialStatusStr !== 'Initializing' ||
!!scope.row.SystemClinicalDataSetId
" @click="handleEditClinicalData(scope.row)">
</el-button>
<!-- 删除 -->
<el-button circle v-if="isEdit" :title="$t('common:button:delete')" icon="el-icon-delete" :disabled="TrialStatusStr !== 'Initializing' ||
form.ClinicalDataSetNames.indexOf(
scope.row.ClinicalDataSetName
) > -1 ||
!!scope.row.SystemClinicalDataSetId
" @click="handleDeleteClinicalData(scope.row)">
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div v-if="isEdit" class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-button size="small" type="primary" :disabled="listLoading" @click="clinicalDataVisible = false">
{{ $t('common:button:cancel') }}
</el-button>
<el-button size="small" type="primary" :disabled="listLoading" @click="handleConfirmClinicalData">
{{ $t('common:button:confirm') }}
</el-button>
</div>
</el-dialog>
<el-dialog v-if="addOrEditCD.visible" :visible.sync="addOrEditCD.visible" :close-on-click-modal="false"
:title="addOrEditCD.title" width="500px" append-to-body custom-class="base-dialog-wrapper">
<ClinicalDataForm ref="addOrEditCD" :trial-id="form.TrialId" :data="currentRow"
@close="addOrEditCD.visible = false" @getList="getClinicalDataList" />
</el-dialog>
<el-dialog v-if="previewTpl.visible" :visible.sync="previewTpl.visible" :close-on-click-modal="false"
:title="previewTpl.title" width="800px" append-to-body custom-class="base-dialog-wrapper">
<div style="margin: 0 20px">
<!-- 既往放疗史 -->
<h4>{{ $t('trials:uploadClinicalData:title:pastTreatment') }}</h4>
<el-table :data="[]" style="width: 100%">
<el-table-column type="index" width="50" />
<!-- 放疗部位 -->
<el-table-column prop="Position" :label="$t('trials:uploadClinicalData:table:bodyPart')" />
<!-- 开始日期 -->
<el-table-column prop="StartTime" :label="$t('trials:uploadClinicalData:table:beginDate')">
<template slot-scope="scope">
{{
scope.row.StartTime
? moment(scope.row.StartTime).format('YYYY-MM-DD')
: ''
}}
</template>
</el-table-column>
<!-- 结束日期 -->
<el-table-column prop="EndTime" :label="$t('trials:uploadClinicalData:table:endDate')">
<template slot-scope="scope">
{{
scope.row.EndTime
? moment(scope.row.EndTime).format('YYYY-MM-DD')
: ''
}}
</template>
</el-table-column>
<!-- 病灶是否PD -->
<el-table-column prop="IsPD" :label="$t('trials:uploadClinicalData:table:isPD')">
<template slot-scope="scope">
{{ $fd('IsPdEnum', scope.row.IsPD) }}
</template>
</el-table-column>
<el-table-column v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
" :label="$t('common:action:action')" min-width="120">
<template slot-scope="scope">
<!-- 编辑 -->
<el-button v-if="allowAddOrEdit" icon="el-icon-edit-outline" circle :title="$t('common:button:edit')"
size="small" @click.native.prevent="editRow(scope.row, 1)" />
<!-- 移除 -->
<el-button v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
" v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']" icon="el-icon-delete" circle
:title="$t('common:button:delete')" size="small"
@click.native.prevent="deletePreviousHistory(scope.row)" />
</template>
</el-table-column>
</el-table>
<!-- 既往手术史 -->
<h4>{{ $t('trials:uploadClinicalData:title:pastSurgery') }}</h4>
<el-table :data="[]" style="width: 100%">
<el-table-column type="index" width="50" />
<!-- 手术名称 -->
<el-table-column prop="OperationName" :label="$t('trials:uploadClinicalData:table:surgeryName')" />
<!-- 手术日期 -->
<el-table-column prop="OperationTime" :label="$t('trials:uploadClinicalData:table:surgeryDate')">
<template slot-scope="scope">
{{
scope.row.OperationTime
? moment(scope.row.OperationTime).format('YYYY-MM-DD')
: ''
}}
</template>
</el-table-column>
<el-table-column v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
" :label="$t('common:action:action')" min-width="200">
<template slot-scope="scope">
<!-- 编辑 -->
<el-button v-if="allowAddOrEdit" icon="el-icon-edit-outline" circle :title="$t('common:button:edit')"
size="small" @click.native.prevent="editRow(scope.row, 2)" />
<!-- 移除 -->
<el-button v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
" v-hasPermi="['trials:trials-panel:visit:crc-upload:upload']" icon="el-icon-delete" circle
:title="$t('common:button:delete')" size="small"
@click.native.prevent="deletePreviousSurgery(scope.row)" />
</template>
</el-table-column>
</el-table>
<!-- 既往其他治疗史 -->
<h4>{{ $t('trials:uploadClinicalData:title:others') }}</h4>
<el-table :data="[]" style="width: 100%">
<el-table-column type="index" width="50" />
<!-- 治疗类型 -->
<el-table-column prop="TreatmentType" :label="$t('trials:uploadClinicalData:table:treatmentType')" />
<!-- 开始日期 -->
<el-table-column prop="StartTime" :label="$t('trials:uploadClinicalData:table:treatmentbeginDate')">
<template slot-scope="scope">
{{
scope.row.StartTime
? moment(scope.row.StartTime).format('YYYY-MM-DD')
: ''
}}
</template>
</el-table-column>
<!-- 结束日期 -->
<el-table-column prop="EndTime" :label="$t('trials:uploadClinicalData:table:treatmentendDate')">
<template slot-scope="scope">
{{
scope.row.EndTime
? moment(scope.row.EndTime).format('YYYY-MM-DD')
: ''
}}
</template>
</el-table-column>
<el-table-column v-if="
hasPermi(['trials:trials-panel:visit:crc-upload:upload']) &&
allowAddOrEdit
" :label="$t('common:action:action')" min-width="200">
<template slot-scope="scope">
<!-- 编辑 -->
<el-button v-if="allowAddOrEdit" icon="el-icon-edit-outline" circle :title="$t('common:button:edit')"
size="small" @click.native.prevent="editRow(scope.row, 3)" />
<!-- 移除 -->
<el-button v-if="
data.SubmitState * 1 < 2 ||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
" icon="el-icon-delete" circle :title="$t('common:button:delete')" size="small"
@click.native.prevent="deletePreviousOther(scope.row)" />
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
<el-dialog v-if="QuestionConfigVisible.visible" :visible.sync="QuestionConfigVisible.visible"
:close-on-click-modal="false" :title="QuestionConfigVisible.title" width="1600px" append-to-body
custom-class="base-dialog-wrapper">
<ClinicalQuestionConfig ref="QuestionConfigVisible" @handlePreview="handlePreview" :data="currentRow" @close="
QuestionConfigVisible.visible = false
getClinicalDataList()
" @getList="getClinicalDataList" />
</el-dialog>
<el-dialog v-if="preview.visible" :visible.sync="preview.visible" :close-on-click-modal="false"
:title="preview.title" :fullscreen="true">
<clinicalDataQuestions :data="rowData" :trial-clinical-id="rowData.Id" />
</el-dialog>
</div>
</template>
<script>
import {
getTrialCriterionSelectList,
configTrialProcessInfo,
getTrialClinicalDataTrialSetList,
deleteClinicalTrialSetData,
DownloadTrialClinicalFile,
getReadingQuestionCriterionTrialList,
addOrUpdateReadingQuestionCriterionTrial,
deleteReadingQuestionCriterionTrial,
setTrialReadingQuestionCriterionIsIsCompleteConfig,
configTrialProcessInfoVerification,
} from '@/api/trials'
import { ConfigTrialProcessInfoConfirm } from '@/api/trials/setting'
import SignForm from '@/views/trials/components/newSignForm'
import Pagination from '@/components/Pagination'
import ClinicalDataForm from './clinicalDataForm'
import ClinicalQuestionConfig from './ClinicalQuestionConfig'
import CriterionConfig from './criterionConfig'
import const_ from '@/const/sign-code'
import clinicalDataQuestions from '@/components/clinicalDataQuestions'
const criterionSearchDataDefault = () => {
return {
PageIndex: 1,
PageSize: 20,
CriterionName: '',
}
}
export default {
name: 'ProcessConfig',
components: {
SignForm,
Pagination,
CriterionConfig,
ClinicalDataForm,
ClinicalQuestionConfig,
clinicalDataQuestions,
},
data() {
// var validator = (rule, value, callback) => {
// if (value.length === 0) {
// callback(new Error(this.$t('common:ruleMessage:select')))
// } else {
// callback()
// }
// }
return {
VUE_IS_TEST: process.env.VUE_APP_IS_TEST,
form: {
TrialId: '',
TrialDataStoreType: 0,
ClinicalInformationTransmissionEnum: 1,
ClinicalDataSetNames: [],
ClinicalDataTrialSetIds: [],
ClinicalDataSetNamesStr: '',
QCProcessEnum: null,
IsImageQualityControl: false,
CollectImagesEnum: null,
ImageFormatList: [],
IsImageConsistencyVerification: null,
ReadingMode: null,
// ImagePlatform: null,
// DigitPlaces: null,
ReadingType: null,
IsReadingTaskViewInOrder: null,
IsGlobalReading: null,
IsArbitrationReading: null,
IsClinicalReading: null,
// ArbitrationRule: null,
IsTrialProcessConfirmed: false,
// CriterionIds: [],
TrialCriterionNamesStr: '',
TrialCriterionIds: [],
TrialCriterionNames: [],
TrialCriterionIdEnums: [],
},
rules: {
TrialDataStoreType: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: 'blur',
},
],
ClinicalDataSetNamesStr: [
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: 'blur',
},
],
ClinicalInformationTransmissionEnum: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: 'blur',
},
],
CollectImagesEnum: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
ImageFormatList: [
{
type: 'array',
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
QCProcessEnum: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
IsImageConsistencyVerification: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
ReadingMode: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
// ImagePlatform: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// CriterionIds: [
// { required: true, validator: validator, trigger: ['blur', 'change'] }
// ],
TrialCriterionNamesStr: [
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur', 'change'],
},
],
// DigitPlaces: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// ReadingType: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// IsReadingTaskViewInOrder: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// IsGlobalReading: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// IsArbitrationReading: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ],
// IsClinicalReading: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ]
// ArbitrationRule: [
// { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
// ]
},
confirmVisible: false,
updateVisible: false,
signVisible: false,
btnLoading: false,
confirmData: [],
loading: false,
signText: '',
signCode: '',
currentUser: zzSessionStorage.getItem('userName'),
initialForm: {},
isEdit: false,
TrialStatusStr: '',
criterionListVisible: false,
criterionList: [],
criterionListTotal: 0,
criterionSearchForm: criterionSearchDataDefault(),
listLoading: false,
selectedCriterions: [],
selectCriterionIds: [],
criterionFormDg: { visible: false, title: '' },
criterionForm: { Id: '', CriterionName: '' },
criterionQSVisible: false,
currentCriterionRow: {},
clinicalDataList: [],
clinicalDataVisible: false,
addOrEditCD: { visible: false, title: '' },
previewTpl: { visible: false, title: '' },
currentRow: {},
selectClinicalDataArr: [],
selectedCD: [],
QuestionConfigVisible: { visible: false, title: '' },
preview: { visible: false, title: this.$t('common:button:preview') },
}
},
mounted() { },
methods: {
QCProcessEnumChange(v) {
this.form.IsImageQualityControl = false
if (v > 0) this.form.IsImageQualityControl = true
},
handlePreview(row) {
this.rowData = { ...row }
this.preview.visible = true
},
handleConfigQuestion(row) {
this.currentRow = { ...row }
this.QuestionConfigVisible.visible = true
this.QuestionConfigVisible.title = this.$t(
'trials:readingUnit:qsList:title:qsConfig'
)
},
handlePreviewTpl() {
this.previewTpl.visible = true
this.previewTpl.title = this.$t('common:button:preview')
},
// 配置信息保存
handleSave() {
this.$refs['processConfigForm'].validate(async (valid) => {
if (!valid) return
this.loading = true
// 保存配置信息
configTrialProcessInfo(this.form)
.then((res) => {
this.loading = false
if (res.IsSuccess) {
this.initialForm = { ...this.form }
this.$message.success(this.$t('common:message:savedSuccessfully'))
}
})
.catch((_) => {
this.loading = false
})
})
},
// 打开配置信息确认框
handleConfirm() {
this.$refs['processConfigForm'].validate(async (valid) => {
if (!valid) return
this.getConfigArr()
this.confirmVisible = true
})
},
// 打开配置信息更新框
handleUpdate() {
this.$refs['processConfigForm'].validate(async (valid) => {
if (!valid) return
this.getConfigArr()
this.updateVisible = true
})
},
// 配置确认
handleConfirmConfigData() {
const { ProcessConfigConfirmation } = const_.processSignature
this.signCode = ProcessConfigConfirmation
// this.confirmConfigData()
this.initialForm = { ...this.form }
this.signVisible = true
},
// 配置更新
handleUpdateConfigData() {
const { ProcessConfigUpdates } = const_.processSignature
this.signCode = ProcessConfigUpdates
this.initialForm = { ...this.form }
this.signVisible = true
},
// 配置确认签名
confirmConfigData() {
this.btnLoading = true
// 保存配置信息
configTrialProcessInfo(this.form)
.then((res) => {
this.btnLoading = false
if (res.IsSuccess) {
this.initialForm = { ...this.form }
this.signVisible = true
}
})
.catch((_) => {
this.btnLoading = false
})
},
// 关闭签名框
closeSignDialog(isSign, signInfo) {
if (isSign) {
this.signConfirm(signInfo)
} else {
this.signVisible = false
}
},
// 签名并确认
async signConfirm(signInfo) {
this.loading = true
var params = {
data: this.form,
signInfo: signInfo,
}
// 保存并签名确认
ConfigTrialProcessInfoConfirm(params)
.then((res) => {
this.loading = false
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.form.IsTrialProcessConfirmed = true
this.isEdit = false
this.$refs['signForm'].btnLoading = false
this.signVisible = false
this.confirmVisible = false
this.updateVisible = false
this.$emit('refresh')
}
})
.catch((_) => {
this.loading = false
this.$refs['signForm'].btnLoading = false
})
},
// 配置信息数组结构
getConfigArr() {
// var criterions = []
// this.form.CriterionIds.map(id => {
// criterions.push(this.$fd('ReadingStandard', id, 'id'))
// })
// var initialCriterions = []
// this.initialForm.CriterionIds.map(id => {
// initialCriterions.push(this.$fd('ReadingStandard', id, 'id'))
// })
this.confirmData = [
{
Name: this.$t('trials:processCfg:form:trialDataStoreType'), // 数据存储
NewVal: this.$fd('TrialDataStoreType', this.form.TrialDataStoreType),
OldVal: this.$fd('TrialDataStoreType', this.initialForm.TrialDataStoreType),
},
{
Name: this.$t('trials:processCfg:form:readingMode'), // 阅片方式
NewVal: this.$fd('ReadingMode', this.form.ReadingMode),
OldVal: this.$fd('ReadingMode', this.initialForm.ReadingMode),
},
// {
// Name: this.$t('trials:processCfg:form:imagePlatform'), // 阅片平台
// NewVal: this.$fd('ImagePlatform', this.form.ImagePlatform),
// OldVal: this.$fd('ImagePlatform', this.initialForm.ImagePlatform)
// },
{
Name: this.$t('trials:processCfg:form:criterion'), // 阅片标准
NewVal: this.form.TrialCriterionNames.join(', '),
OldVal: this.initialForm.TrialCriterionNames.join(', '),
},
{
Name: this.$t('trials:logincCfg:form:clinicalInforTransfer'),
NewVal: this.$fd(
'ClinicalInformationTransmissionEnum',
this.form.ClinicalInformationTransmissionEnum
),
OldVal: this.$fd(
'ClinicalInformationTransmissionEnum',
this.initialForm.ClinicalInformationTransmissionEnum
),
},
{
Name: this.$t('trials:logincCfg:form:clinicalConfig'),
NewVal: this.form.ClinicalDataSetNames.join(', '),
OldVal: this.initialForm.ClinicalDataSetNames.join(', '),
},
{
Name: this.$t('trials:processCfg:form:qcProcess'), // 影像质控流程
NewVal: this.$fd('QCProcessEnum', this.form.QCProcessEnum),
OldVal: this.$fd('QCProcessEnum', this.initialForm.QCProcessEnum),
},
{
Name: this.$t('trials:processCfg:form:IsImageQualityControl'), // 影像质控风险控制
NewVal: this.$fd('YesOrNo', this.form.IsImageQualityControl),
OldVal: this.$fd('YesOrNo', this.initialForm.IsImageQualityControl),
},
{
Name: this.$t('trials:processCfg:form:conProcess'), // 一致性核查流程
NewVal: this.$fd('YesOrNo', this.form.IsImageConsistencyVerification),
OldVal: this.$fd(
'YesOrNo',
this.initialForm.IsImageConsistencyVerification
),
},
{
Name: this.$t('trials:processCfg:form:CollectImagesEnum'), // 采集影像
NewVal: this.$fd('CollectImagesType', this.form.CollectImagesEnum),
OldVal: this.$fd(
'CollectImagesType',
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'), // 阅片标准
// NewVal: criterions.length > 0 ? criterions.join(', ') : '',
// OldVal: initialCriterions.length > 0 ? initialCriterions.join(', ') : ''
// },
// {
// Name: this.$t('trials:processCfg:form:digitPlaces'), // 修约小数位数
// NewVal: this.$fd('DigitPlaces', this.form.DigitPlaces),
// OldVal: this.$fd('DigitPlaces', this.initialForm.DigitPlaces)
// },
// {
// Name: this.$t('trials:processCfg:form:readingType'), // 阅片模式
// NewVal: this.$fd('ReadingMethod', this.form.ReadingType),
// OldVal: this.$fd('ReadingMethod', this.initialForm.ReadingType)
// },
// {
// Name: '任务展示方式', // 任务展示方式
// NewVal: this.$fd('IsReadingTaskViewInOrder', this.form.IsReadingTaskViewInOrder),
// OldVal: this.$fd('IsReadingTaskViewInOrder', this.initialForm.IsReadingTaskViewInOrder)
// },
// {
// Name: this.$t('trials:processCfg:form:global'), // 全局阅片
// NewVal: this.$fd('YesOrNo', this.form.IsGlobalReading),
// OldVal: this.$fd('YesOrNo', this.initialForm.IsGlobalReading)
// },
// {
// Name: this.$t('trials:processCfg:form:ad'), // 仲裁阅片
// NewVal: this.$fd('YesOrNo', this.form.IsArbitrationReading),
// OldVal: this.$fd('YesOrNo', this.initialForm.IsArbitrationReading)
// },
// {
// Name: this.$t('trials:processCfg:form:clinical'), // 临床阅片
// NewVal: this.$fd('YesOrNo', this.form.IsClinicalReading),
// OldVal: this.$fd('YesOrNo', this.initialForm.IsClinicalReading)
// }
// {
// Name: this.$t('trials:processCfg:form:adRules'), // 仲裁规则
// NewVal: this.$fd('ArbitrationRule', this.form.ArbitrationRule),
// OldVal: this.$fd('ArbitrationRule', this.initialForm.ArbitrationRule)
// }
]
},
// 阅片模式change事件
handleReadingTypeChange(val) {
// 单重阅片时,仲裁阅片为否且不允许编辑,双重阅片时,仲裁阅片则为是且不允许编辑,定制时,不设默认值
if (val === 1) {
// 单重阅片
this.form.IsArbitrationReading = false
this.form.ArbitrationRule = 3
} else if (val === 2) {
// 双重阅片
this.form.IsArbitrationReading = true
} else {
this.form.IsArbitrationReading = false
}
},
// 初始化表单
async initForm(res) {
this.loading = true
for (const k in this.form) {
if (res.hasOwnProperty(k)) {
this.form[k] = res[k]
}
}
this.form.TrialCriterionNamesStr =
this.form.TrialCriterionNames.join(', ')
this.form.ClinicalDataSetNamesStr =
this.form.ClinicalDataSetNames.join(', ')
this.initialForm = { ...this.form }
this.TrialStatusStr = res.TrialStatusStr
this.getCriterionList()
if (!this.form.IsTrialProcessConfirmed) {
this.isEdit = true
}
this.loading = false
},
// 获取临床数据模板信息
getClinicalDataList(isSelect = false) {
return new Promise((resolve, reject) => {
this.listLoading = true
getTrialClinicalDataTrialSetList({
trialId: this.form.TrialId,
criterionIds: this.form.TrialCriterionIds,
})
.then((res) => {
this.clinicalDataList = res.Result
this.listLoading = false
if (isSelect) {
this.$nextTick(() => {
for (
let i = 0;
i < this.form.ClinicalDataTrialSetIds.length;
i++
) {
var index = this.clinicalDataList.findIndex(
(item) => item.Id === this.form.ClinicalDataTrialSetIds[i]
)
if (index > -1) {
this.$refs['clinicalData'].toggleRowSelection(
this.clinicalDataList[index],
true
)
}
}
})
}
resolve()
})
.catch(() => {
this.listLoading = false
reject()
})
})
},
// 获取勾选行数据
handleCDSelectChange(val) {
const arr = []
this.selectedCD = []
for (let index = 0; index < val.length; index++) {
arr.push(val[index].Id)
this.selectedCD.push(
this.$i18n.locale === 'zh'
? val[index].ClinicalDataSetName
: val[index].ClinicalDataSetEnName
)
}
this.selectClinicalDataArr = arr
},
async handleConfirmClinicalData() {
// 验证临床数据配置
try {
let params = {
trialId: this.form.TrialId,
trialCriterionIds: this.form.TrialCriterionIds,
clinicalDataTrialSetIds: this.selectClinicalDataArr,
}
await configTrialProcessInfoVerification(params)
this.form.ClinicalDataSetNames = this.selectedCD
this.form.ClinicalDataTrialSetIds = this.selectClinicalDataArr
this.form.ClinicalDataSetNamesStr =
this.form.ClinicalDataSetNames.join(', ')
this.clinicalDataVisible = false
} catch (e) {
console.log(e)
}
},
async handleSetCD() {
this.clinicalDataVisible = true
await this.getClinicalDataList()
this.$nextTick(() => {
for (let i = 0; i < this.form.ClinicalDataTrialSetIds.length; i++) {
var index = this.clinicalDataList.findIndex(
(item) => item.Id === this.form.ClinicalDataTrialSetIds[i]
)
if (index > -1) {
this.$refs['clinicalData'].toggleRowSelection(
this.clinicalDataList[index],
true
)
}
}
})
},
handleAddClinicalData() {
this.currentRow = {}
this.addOrEditCD.title = this.$t('common:button:new') // 新增
this.addOrEditCD.visible = true
},
handleEditClinicalData(row) {
this.currentRow = { ...row }
this.addOrEditCD.title = this.$t('common:button:edit') // '编辑'
this.addOrEditCD.visible = true
},
handleDeleteClinicalData(row) {
this.$confirm(this.$t('trials:staffResearch:message:confirmDel'), {
type: 'warning',
distinguishCancelAndClose: true,
}).then(() => {
this.loading = true
deleteClinicalTrialSetData(row.Id)
.then((res) => {
this.loading = false
if (res.IsSuccess) {
var cdNameIndex = this.selectedCD.indexOf(row.ClinicalDataSetName)
if (cdNameIndex > -1) {
this.selectedCD.splice(cdNameIndex, 1)
}
var cdIdIndex = this.selectClinicalDataArr.indexOf(row.Id)
if (cdIdIndex > -1) {
this.selectClinicalDataArr.splice(cdIdIndex, 1)
}
var index = this.form.ClinicalDataTrialSetIds.indexOf(row.Id)
if (index > -1) {
this.form.ClinicalDataTrialSetIds.splice(index, 1)
}
var i = this.form.ClinicalDataSetNames.indexOf(
row.ClinicalDataSetName
)
if (i > -1) {
this.form.ClinicalDataSetNames.splice(i, 1)
this.form.ClinicalDataSetNamesStr =
this.form.ClinicalDataSetNames.join(', ')
}
this.getClinicalDataList(true)
// '删除成功!'
this.$message.success(
this.$t('common:message:deletedSuccessfully')
)
}
})
.catch(() => {
this.loading = false
})
})
},
handleDownloadTpl(path) {
window.open(this.OSSclientConfig.basePath + path)
// this.listLoading = true
// DownloadTrialClinicalFile(row.Id).then(data => {
// this.listLoading = false
// }).catch(() => { this.listLoading = false })
},
handleSelectable(row) {
if (!row.IsApply) {
return false
}
if (this.isEdit) {
return true
} else {
return false
}
},
getCriterionList(isSelect = false) {
this.listLoading = true
this.criterionSearchForm.TrialId = this.form.TrialId
getReadingQuestionCriterionTrialList(this.criterionSearchForm)
.then((res) => {
this.criterionList = res.Result.CurrentPageData
this.criterionListTotal = res.Result.TotalCount
this.listLoading = false
if (isSelect) {
this.$nextTick(() => {
for (let i = 0; i < this.form.TrialCriterionIds.length; i++) {
var index = this.criterionList.findIndex(
(item) => item.Id === this.form.TrialCriterionIds[i]
)
if (index > -1) {
this.$refs['criterionList'].toggleRowSelection(
this.criterionList[index],
true
)
}
}
})
}
})
.catch(() => {
this.listLoading = false
})
},
handleResetCriterion() {
this.criterionSearchForm = criterionSearchDataDefault()
this.getCriterionList()
},
handleSearchCriterion() {
this.getCriterionList()
},
handleSetCriterion() {
this.criterionListVisible = true
this.selectedCriterions = []
this.selectCriterionIds = []
this.$nextTick(() => {
for (let i = 0; i < this.form.TrialCriterionIds.length; i++) {
var index = this.criterionList.findIndex(
(item) => item.Id === this.form.TrialCriterionIds[i]
)
if (index > -1) {
this.$refs['criterionList'].toggleRowSelection(
this.criterionList[index],
true
)
this.selectedCriterions.push(
this.criterionList[index].CriterionName
)
this.selectCriterionIds.push(this.criterionList[index].Id)
}
}
})
},
// 获取勾选行数据
selectCriterion(selection, row) {
// this.selectCriterionIds = selection.length > 0 ? [row.Id] : []
// this.selectedCriterions = selection.length > 0 ? [row.CriterionName] : []
console.log(selection)
var a = Object.assign(
[],
selection.sort((a, b) => {
return a.ShowOrder - b.ShowOrder
})
)
this.selectedCriterions = a.map((v) => v.CriterionName)
this.selectCriterionIds = a.map((v) => v.Id)
// 清除 所有勾选项
// this.$refs.criterionList.clearSelection()
// 当表格数据都没有被勾选的时候 就返回
// 主要用于将当前勾选的表格状态清除
// if (selection.length === 0) return
// this.$refs.criterionList.toggleRowSelection(row, true)
},
handleAddCriterion() {
this.criterionForm.Id = ''
this.criterionForm.CriterionName = ''
this.criterionFormDg.title = this.$t('common:button:new') // 新增
this.criterionFormDg.visible = true
},
handleEditCriterion(row) {
for (const k in this.criterionForm) {
if (row.hasOwnProperty(k)) {
this.criterionForm[k] = row[k]
}
}
this.criterionFormDg.title = this.$t('common:button:edit') // '编辑'
this.criterionFormDg.visible = true
},
handleConfigCriterion(row) {
this.currentCriterionRow = { ...row }
this.criterionQSVisible = true
},
handleDeleteCriterion(row) {
// '是否确认删除?'
this.$confirm(this.$t('trials:processCfg:message:delete'), {
type: 'warning',
distinguishCancelAndClose: true,
}).then(() => {
this.listLoading = true
deleteReadingQuestionCriterionTrial(row.Id)
.then((res) => {
this.listLoading = false
if (res.IsSuccess) {
var cNameIndex = this.selectedCriterions.indexOf(
row.CriterionName
)
if (cNameIndex > -1) {
this.selectedCriterions.splice(cNameIndex, 1)
}
var cIdIndex = this.selectCriterionIds.indexOf(row.Id)
if (cIdIndex > -1) {
this.selectCriterionIds.splice(cIdIndex, 1)
}
var index = this.form.TrialCriterionIds.indexOf(row.Id)
if (index > -1) {
this.form.TrialCriterionIds.splice(index, 1)
}
var i = this.form.TrialCriterionNames.indexOf(row.CriterionName)
if (i > -1) {
this.form.TrialCriterionNames.splice(i, 1)
this.form.TrialCriterionNamesStr =
this.form.TrialCriterionNames.join(', ')
}
this.getCriterionList(true)
// '删除成功!'
this.$message.success(
this.$t('common:message:deletedSuccessfully')
)
}
})
.catch(() => {
this.listLoading = false
})
})
},
handleCancelSave() {
this.$refs['criterionForm'].resetFields()
this.criterionFormDg.visible = false
},
handleSaveCriterion() {
this.$refs['criterionForm'].validate((valid) => {
if (!valid) return
this.listLoading = true
this.criterionForm.TrialId = this.form.TrialId
addOrUpdateReadingQuestionCriterionTrial(this.criterionForm)
.then((res) => {
this.listLoading = false
// 保存成功
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.criterionFormDg.visible = false
this.getCriterionList()
})
.catch(() => {
this.listLoading = false
})
})
},
handleConfirmCriterion() {
if (
this.selectedCriterions.join(', ') !== this.form.TrialCriterionNamesStr
) {
// 清空临床数据配置信息
this.form.ClinicalDataSetNames = []
this.form.ClinicalDataTrialSetIds = []
this.form.ClinicalDataSetNamesStr = ''
}
this.form.TrialCriterionNames = this.selectedCriterions
this.form.TrialCriterionIds = this.selectCriterionIds
this.form.TrialCriterionNamesStr =
this.form.TrialCriterionNames.join(', ')
this.criterionListVisible = false
},
changeCriterionStatus(callback, row) {
var message = ''
if (callback) {
message = this.$t('trials:processCfg:message:update') // '是否确认更改?'
row.IsCompleteConfig = false
} else {
message = this.$t('trials:processCfg:message:update') // '是否确认更改?'
row.IsCompleteConfig = true
}
this.$confirm(message, {
distinguishCancelAndClose: true,
type: 'warning',
})
.then(() => {
this.listLoading = true
var params = {
id: row.Id,
isCompleteConfig: !row.IsCompleteConfig,
}
setTrialReadingQuestionCriterionIsIsCompleteConfig(params)
.then((res) => {
this.listLoading = false
if (res.IsSuccess) {
this.$message.success(
this.$t('common:message:savedSuccessfully')
) // '保存成功!'
this.getCriterionList()
}
})
.catch(() => {
this.listLoading = false
})
})
.catch(() => { })
},
handleIsReadingTaskViewInOrderChange(val) {
if (val === false) {
// 无序
this.form.IsGlobalReading = false
this.form.IsClinicalReading = false
}
},
},
}
</script>
<style lang="scss">
.process-config-form {
.fontColor {
color: red;
}
.criterion-table {
thead {
.el-table-column--selection {
.cell {
display: none;
}
}
}
}
}
</style>