中心调研更改
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
9448805f36
commit
0bbb93d663
|
|
@ -129,3 +129,31 @@ export function getUserTypeList(userTypeEnum) {
|
||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getSiteSurveyLogList(param) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialSiteSurvey/getSiteSurveyLogList`,
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getTrialIsSPMJoin(trialId) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialSiteSurvey/getTrialIsSPMJoin?trialId=${trialId}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getSiteSurveyEquipmentList(param) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialSiteSurvey/getSiteSurveyEquipmentList`,
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function getSiteSurveyInfoList(param) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialSiteSurvey/getSiteSurveyInfoList`,
|
||||||
|
method: 'post',
|
||||||
|
data: param
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
<template>
|
||||||
|
<div class="log-list">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="tableData"
|
||||||
|
v-adaptive="{ bottomOffset: 40 }"
|
||||||
|
height="100"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="CreateTime"
|
||||||
|
label="时间"
|
||||||
|
min-width="120"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.CreateTime ? moment(scope.row.CreateTime).format('YYYY-MM-DD HH:MM:SS') : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="Name"
|
||||||
|
label="姓名"
|
||||||
|
min-width="100"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="UserType"
|
||||||
|
label="角色"
|
||||||
|
min-width="100"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('UserType', scope.row.IsJoin) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="OptType"
|
||||||
|
label="操作"
|
||||||
|
min-width="100"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('SiteSurveyOptTyp', scope.row.IsJoin) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="Json"
|
||||||
|
label="详情"
|
||||||
|
min-width="100"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button v-if="scope.row.Json" type="text">调研表</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="Reason"
|
||||||
|
label="备注"
|
||||||
|
min-width="140"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getSiteSurveyLogList } from '@/api/research'
|
||||||
|
import moment from 'moment'
|
||||||
|
export default {
|
||||||
|
name: 'LogList',
|
||||||
|
props: {
|
||||||
|
trialSiteSurveyId: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
tableData: [],
|
||||||
|
moment
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getList() {
|
||||||
|
try {
|
||||||
|
this.loading = true
|
||||||
|
let res = await getSiteSurveyLogList({ trialSiteSurveyId: this.trialSiteSurveyId })
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.tableData = res.Result
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.log-list {
|
||||||
|
height: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -35,6 +35,10 @@
|
||||||
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleHistory">
|
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleHistory">
|
||||||
{{ $t('trials:researchForm:button:historicalRecord') }}
|
{{ $t('trials:researchForm:button:historicalRecord') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<!-- 操作日志 -->
|
||||||
|
<el-button type="primary" size="small" @click="viewLog">
|
||||||
|
{{ $t('trials:researchForm:button:log') }}
|
||||||
|
</el-button>
|
||||||
<!-- 退出 -->
|
<!-- 退出 -->
|
||||||
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleBack">
|
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleBack">
|
||||||
{{ $t('trials:researchForm:button:loginOut') }}
|
{{ $t('trials:researchForm:button:loginOut') }}
|
||||||
|
|
@ -133,11 +137,32 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
<div style="height:100%;margin:0;">
|
<div class="history-dialog-content">
|
||||||
<HistoricalRecord :trial-id="trialId" :site-id="siteId" :trial-site-survey-id="trialSiteSurveyId" />
|
<HistoricalRecord :trial-id="trialId" :site-id="siteId" :trial-site-survey-id="trialSiteSurveyId" />
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<el-dialog v-if="logVisible" :visible.sync="logVisible"
|
||||||
|
:custom-class="isFullscreen ? 'full-log-dialog-container' : 'log-dialog-container'" :close-on-click-modal="false"
|
||||||
|
:fullscreen="isFullscreen" :show-close="false" width="60%" append-to-body>
|
||||||
|
<span slot="title" class="dialog-footer">
|
||||||
|
<div style="display: flex;flex-direction: row;justify-content: space-between;">
|
||||||
|
<div>
|
||||||
|
{{ $t('trials:researchForm:button:log') }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||||
|
style="vertical-align: baseline;cursor: pointer;font-size: 20px;" @click="toggleLogFullscreen" />
|
||||||
|
<svg-icon icon-class="dClose" style="cursor: pointer;font-size: 25px;margin-left: 10px;"
|
||||||
|
@click="logVisible = false" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
<div class="log-dialog-content">
|
||||||
|
<LogList :trial-site-survey-id="trialSiteSurveyId" />
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
|
@ -150,9 +175,10 @@ import EquipmentList from './components/EquipmentList'
|
||||||
import { mapMutations } from 'vuex'
|
import { mapMutations } from 'vuex'
|
||||||
import TopLang from './topLang'
|
import TopLang from './topLang'
|
||||||
import HistoricalRecord from './components/HistoricalRecord'
|
import HistoricalRecord from './components/HistoricalRecord'
|
||||||
|
import LogList from './components/LogList'
|
||||||
export default {
|
export default {
|
||||||
name: 'QuestionForm',
|
name: 'QuestionForm',
|
||||||
components: { BaseInfo, HistoricalParticipant, ParticipantList, EquipmentList, TopLang, HistoricalRecord },
|
components: { BaseInfo, HistoricalParticipant, ParticipantList, EquipmentList, TopLang, HistoricalRecord, LogList },
|
||||||
props: {
|
props: {
|
||||||
isPreview: {
|
isPreview: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|
@ -175,7 +201,8 @@ export default {
|
||||||
historyVisible: false,
|
historyVisible: false,
|
||||||
siteSurveyNoteInfo: {},
|
siteSurveyNoteInfo: {},
|
||||||
IsSupportUploadFile: false,
|
IsSupportUploadFile: false,
|
||||||
IsOnlyUploadFile: false
|
IsOnlyUploadFile: false,
|
||||||
|
logVisible: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -347,7 +374,14 @@ export default {
|
||||||
handleHistory() {
|
handleHistory() {
|
||||||
this.isFullscreen = false
|
this.isFullscreen = false
|
||||||
this.historyVisible = true
|
this.historyVisible = true
|
||||||
}
|
},
|
||||||
|
toggleLogFullscreen() {
|
||||||
|
this.isFullscreen = !this.isFullscreen
|
||||||
|
},
|
||||||
|
viewLog() {
|
||||||
|
this.isFullscreen = false
|
||||||
|
this.logVisible = true
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -399,5 +433,45 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.history-dialog-content,
|
||||||
|
.log-dialog-content {
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.log-dialog-content {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style lang="scss">
|
||||||
|
.full-log-dialog-container,
|
||||||
|
.log-dialog-container {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-log-dialog-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-log-dialog-container .el-dialog__body {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.log-dialog-container .el-dialog__body {
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
padding: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-log-dialog-container .log-dialog-content,
|
||||||
|
.log-dialog-container .log-dialog-content {
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,298 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-form-item :label="$t('trials:researchStaff:table:siteId')">
|
||||||
|
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width:120px;">
|
||||||
|
<el-option
|
||||||
|
v-for="(item,index) of siteOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.TrialSiteCode"
|
||||||
|
:value="item.TrialSiteId"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 中心名称 -->
|
||||||
|
<el-form-item :label="$t('trials:researchStaff:table:siteName')">
|
||||||
|
<el-input v-model="searchData.TrialSiteName" class="mr" clearable style="width:120px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<!-- 查询 -->
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
|
{{ $t('common:button:search') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 重置 -->
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
|
{{ $t('common:button:reset') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 导出 -->
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-download"
|
||||||
|
:disabled="list.length === 0"
|
||||||
|
>
|
||||||
|
{{ $t('common:button:export') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table
|
||||||
|
ref="list"
|
||||||
|
v-loading="loading"
|
||||||
|
v-adaptive="{ bottomOffset: 55 }"
|
||||||
|
:data="list"
|
||||||
|
stripe
|
||||||
|
height="100"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="TrialSiteCode"
|
||||||
|
:label="$t('trials:researchStaff:table:siteId')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 中心名称 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="TrialSiteName"
|
||||||
|
:label="$t('trials:researchStaff:table:siteName')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="120"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 扫描设备 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('EquipmentTypeEnum')"
|
||||||
|
prop="EquipmentTypeEnum"
|
||||||
|
:label="$t('trials:equiptResearch:form:equipment')"
|
||||||
|
min-width="120"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.OtherEquipmentType ? scope.row.OtherEquipmentType :
|
||||||
|
$fd('SiteSurvey_ScanEquipmentType', scope.row.EquipmentTypeEnum) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 扫描参数 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('Parameters')"
|
||||||
|
prop="Parameters"
|
||||||
|
:label="$t('trials:equiptResearch:form:param')"
|
||||||
|
min-width="100"
|
||||||
|
show-overflow-tooltip />
|
||||||
|
<!-- 扫描仪器制造商名称 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('ManufacturerType')"
|
||||||
|
min-width="120"
|
||||||
|
prop="ManufacturerType"
|
||||||
|
:label="$t('trials:equiptResearch:form:manufacturer')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.ManufacturerName ? scope.row.ManufacturerName : $fd('ManufacturerType',
|
||||||
|
scope.row.ManufacturerType) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 扫描仪型号 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('ScannerType')"
|
||||||
|
min-width="120"
|
||||||
|
prop="ScannerType"
|
||||||
|
:label="$t('trials:equiptResearch:form:model')"
|
||||||
|
show-overflow-tooltip />
|
||||||
|
<!-- 磁场强度 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('MagneticFieldStrengthType')"
|
||||||
|
min-width="120"
|
||||||
|
prop="MagneticFieldStrengthType"
|
||||||
|
:label="$t('trials:equiptResearch:form:MagneticFieldStrengthType')"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('MagneticFieldStrengthType', scope.row.MagneticFieldStrengthType) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 体部线圈通道数 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('BodyCoilChannelCount')"
|
||||||
|
min-width="120"
|
||||||
|
prop="BodyCoilChannelCount"
|
||||||
|
:label="$t('trials:equiptResearch:form:BodyCoilChannelCount')"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('BodyCoilChannelCount', scope.row.BodyCoilChannelCount) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 是否具备专用的PDFF脂肪定量序列(CSE-MRI序列) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('HasDedicatedPdfFatQuantificationSequence')"
|
||||||
|
min-width="120"
|
||||||
|
prop="HasDedicatedPdfFatQuantificationSequence"
|
||||||
|
:label="$t('trials:equiptResearch:form:HasDedicatedPdfFatQuantificationSequence')"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.HasDedicatedPdfFatQuantificationSequence) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 专用的PDFF脂肪定量序列类型 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('PdfFatQuantificationSequenceType')"
|
||||||
|
min-width="120"
|
||||||
|
prop="PdfFatQuantificationSequenceType"
|
||||||
|
:label="$t('trials:equiptResearch:form:PdfFatQuantificationSequenceType')"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.OtherSequenceSpecification ? scope.row.OtherSequenceSpecification :
|
||||||
|
$fd('PdfFatQuantificationSequenceType', scope.row.PdfFatQuantificationSequenceType) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 是否包含 T2/R2 校正(用于铁沉积校正) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('HasT2R2Correction')"
|
||||||
|
min-width="120"
|
||||||
|
prop="HasT2R2Correction"
|
||||||
|
:label="$t('trials:equiptResearch:form:HasT2R2Correction')"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.HasT2R2Correction) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 是否可完整导出 PDFF 参数图及全部原始 DICOM 数据 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('CanFullyExportPdfParameterMapsAndRawDicom')"
|
||||||
|
prop="CanFullyExportPdfParameterMapsAndRawDicom"
|
||||||
|
:label="$t('trials:equiptResearch:form:CanFullyExportPdfParameterMapsAndRawDicom')"
|
||||||
|
min-width="120"
|
||||||
|
show-overflow-tooltip >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.CanFullyExportPdfParameterMapsAndRawDicom) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 备注 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="equipmentControlFieldList.includes('Note')"
|
||||||
|
min-width="120"
|
||||||
|
prop="Note"
|
||||||
|
:label="$t('trials:equiptResearch:form:precautions')"
|
||||||
|
show-overflow-tooltip />
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||||
|
</template>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getTrialSiteSelect } from '@/api/trials'
|
||||||
|
import { getSiteSurveyEquipmentList } from '@/api/research'
|
||||||
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
SortField: '',
|
||||||
|
Asc: true,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
TrialId: '',
|
||||||
|
TrialSiteId: '',
|
||||||
|
TrialSiteName: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'Equipments',
|
||||||
|
components: { BaseContainer, Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
loading: false,
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
trialId: '',
|
||||||
|
otherInfo: {},
|
||||||
|
siteOptions: [],
|
||||||
|
equipmentControlFieldList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.trialId = this.$route.query.trialId
|
||||||
|
this.getList()
|
||||||
|
this.getSite()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getList() {
|
||||||
|
try {
|
||||||
|
this.loading = true
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
let res = await getSiteSurveyEquipmentList(this.searchData)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.list = res.Result.CurrentPageData
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
this.otherInfo = res.OtherInfo
|
||||||
|
const { EquipmentControlFieldList } = res.OtherInfo
|
||||||
|
this.equipmentControlFieldList = []
|
||||||
|
EquipmentControlFieldList.forEach(item => {
|
||||||
|
this.equipmentControlFieldList.push(item.FiledName)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 导出
|
||||||
|
async handleExport() {
|
||||||
|
try {
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
this.loading = true
|
||||||
|
const { SortField, Asc, PageIndex, PageSize, ...param } = { ...this.searchData }
|
||||||
|
await trialSiteUserSummaryListExport({ ...param })
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取site下拉框数据
|
||||||
|
async getSite() {
|
||||||
|
try {
|
||||||
|
let res = await getTrialSiteSelect(this.trialId)
|
||||||
|
this.siteOptions = res.Result
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 重置
|
||||||
|
handleReset() {
|
||||||
|
this.searchData = searchDataDefault()
|
||||||
|
this.getList()
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.list.clearSort()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 查询
|
||||||
|
handleSearch() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.searchData.Asc = true
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,389 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-form-item :label="$t('trials:researchStaff:table:siteId')">
|
||||||
|
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width:120px;">
|
||||||
|
<el-option
|
||||||
|
v-for="(item,index) of siteOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.TrialSiteCode"
|
||||||
|
:value="item.TrialSiteId"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 中心名称 -->
|
||||||
|
<el-form-item :label="$t('trials:researchStaff:table:siteName')">
|
||||||
|
<el-input v-model="searchData.TrialSiteName" class="mr" clearable style="width:120px;" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<!-- 查询 -->
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
|
{{ $t('common:button:search') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 重置 -->
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
|
{{ $t('common:button:reset') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 导出 -->
|
||||||
|
<el-form-item>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-download"
|
||||||
|
:disabled="list.length === 0"
|
||||||
|
>
|
||||||
|
{{ $t('common:button:export') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template slot="main-container">
|
||||||
|
<el-table
|
||||||
|
ref="list"
|
||||||
|
v-loading="loading"
|
||||||
|
v-adaptive="{ bottomOffset: 55 }"
|
||||||
|
:data="list"
|
||||||
|
stripe
|
||||||
|
height="100"
|
||||||
|
@sort-change="handleSortByColumn"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
|
||||||
|
<!-- 项目编号 -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="TrialCode"
|
||||||
|
:label="$t('trials:researchForm:form:trialId')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/> -->
|
||||||
|
<!-- 试验方案号 -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="ResearchProgramNo"
|
||||||
|
:label="$t('trials:researchForm:form:researchNo')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/> -->
|
||||||
|
<!-- 试验名称 -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="ExperimentName"
|
||||||
|
:label="$t('trials:researchForm:form:researchName')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/> -->
|
||||||
|
<!-- 适应症类型 -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="IndicationType"
|
||||||
|
:label="$t('trials:researchForm:form:decleareType')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/> -->
|
||||||
|
<!-- 适应症类型 -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
prop="IndicationType"
|
||||||
|
:label="$t('trials:researchForm:form:decleareType')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/> -->
|
||||||
|
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="TrialSiteCode"
|
||||||
|
:label="$t('trials:researchStaff:table:siteId')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/>
|
||||||
|
<!-- 中心名称 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="SiteName"
|
||||||
|
:label="$t('trials:researchStaff:table:siteName')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/>
|
||||||
|
<!-- 联系人 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="UserName"
|
||||||
|
:label="$t('trials:researchForm:form:contactor')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/>
|
||||||
|
<!-- 联系电话 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="Phone"
|
||||||
|
:label="$t('trials:researchForm:form:contactorPhone')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/>
|
||||||
|
<!-- 联系邮箱 -->
|
||||||
|
<el-table-column
|
||||||
|
prop="Email"
|
||||||
|
:label="$t('trials:researchForm:form:contactorEmail')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
sortable="custom"
|
||||||
|
min-width="100"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
v-if="otherInfo.IsSupportUploadFile"
|
||||||
|
prop="SiteSurveyFile.FileName"
|
||||||
|
:label="$t('trials:researchForm:form:contactorEmail')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
min-width="100"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button v-if="scope.row.SiteSurveyFile.FileName" type="text" @click="viewFile(scope.row.SiteSurveyFile)">
|
||||||
|
{{ scope.row.SiteSurveyFile.FileName }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<!-- 平均刻盘周期(天) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('AverageEngravingCycle')"
|
||||||
|
prop="AverageEngravingCycle"
|
||||||
|
:label="$t('trials:researchForm:form:engravingCycle')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- MRI-PDFF 是否为本中心该适应症的常规诊疗检查项目? -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('IsRoutineMRIPDEE')"
|
||||||
|
prop="IsRoutineMRIPDEE"
|
||||||
|
:label="$t('trials:researchForm:form:IsRoutineMRIPDEE')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsRoutineMRIPDEE) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- MRI-PDFF 检查的检测周期(含单次检查时长、预约等待时长等) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('MRIPDFFScanTime') || !notShowFieldList.includes('MRIPDFFLeadTime') || !notShowFieldList.includes('MRIPDFFOther')"
|
||||||
|
:label="$t('trials:researchForm:form:IsRoutineMRIPDEE')"
|
||||||
|
>
|
||||||
|
<!-- 单次检查时长(分钟) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('MRIPDFFScanTime')"
|
||||||
|
prop="MRIPDFFScanTime"
|
||||||
|
:label="$t('trials:researchForm:form:MRIPDFFScanTime')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- 平均预约等待时长(天) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('MRIPDFFLeadTime')"
|
||||||
|
prop="MRIPDFFLeadTime"
|
||||||
|
:label="$t('trials:researchForm:form:MRIPDFFLeadTime')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- 特殊情况备注-->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('MRIPDFFOther')"
|
||||||
|
prop="MRIPDFFOther"
|
||||||
|
:label="$t('trials:researchForm:form:MRIPDFFOther')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 如已选择研究者评估,项目是否会授权影像科老师参与本试验?如不单独授权,是否可在试验中保持 1-2 名固定技师操作? -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('IsAuthorizeRadiologistsParticipate') || !notShowFieldList.includes('AssignFixedTechnologists')"
|
||||||
|
prop="IsAuthorize"
|
||||||
|
:label="$t('trials:researchForm:form:IsAuthorize')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.IsAuthorizeRadiologistsParticipate">
|
||||||
|
{{ $t('trials:researchForm:form:IsAuthorizeRadiologistsParticipate') }}
|
||||||
|
</span>
|
||||||
|
<span v-else-if="scope.row.AssignFixedTechnologists">
|
||||||
|
{{ $t('trials:researchForm:form:AssignFixedTechnologists') }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 请确认参与本项目影像采集的影像技师具备对应的资质(如:“技师证”,对应设备的“大型设备上岗证”) -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('IsConfirmImagingTechnologist')"
|
||||||
|
prop="IsConfirmImagingTechnologist"
|
||||||
|
:label="$t('trials:researchForm:form:isQualified')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsConfirmImagingTechnologist) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 原因 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('NotConfirmReson')"
|
||||||
|
prop="NotConfirmReson"
|
||||||
|
:label="$t('trials:researchForm:form:notQualifiedReason')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- 研究单位疗效评估人员类型 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('EfficacyEvaluatorType')"
|
||||||
|
prop="EfficacyEvaluatorType"
|
||||||
|
:label="$t('trials:researchForm:form:staffType')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- 是否严格按照研究单位影像手册参数完成图像采集 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('IsFollowStudyParameters')"
|
||||||
|
prop="IsFollowStudyParameters"
|
||||||
|
:label="$t('trials:researchForm:form:isFollowStudyParam')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.IsFollowStudyParameters) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 不能严格按照研究单位影像手册参数采集图像原因 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('NotFollowReson')"
|
||||||
|
prop="NotFollowReson"
|
||||||
|
:label="$t('trials:researchForm:form:notFollowStudyParam')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<!-- 是否严格按照影像手册参数完成刻盘 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('ISStrictManualBurnFlag')"
|
||||||
|
prop="ISStrictManualBurnFlag"
|
||||||
|
:label="$t('trials:researchForm:form:ISStrictManualBurnFlag')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ $fd('YesOrNo', scope.row.ISStrictManualBurnFlag) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 不能严格按照影像手册参数完成刻盘原因 -->
|
||||||
|
<el-table-column
|
||||||
|
v-if="!notShowFieldList.includes('NotStrictManualBurnFlagReason')"
|
||||||
|
prop="NotStrictManualBurnFlagReason"
|
||||||
|
:label="$t('trials:researchForm:form:NotStrictManualBurnFlagReason')"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||||
|
</template>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getTrialSiteSelect } from '@/api/trials'
|
||||||
|
import { getSiteSurveyInfoList } from '@/api/research'
|
||||||
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
SortField: '',
|
||||||
|
Asc: true,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
TrialId: '',
|
||||||
|
TrialSiteId: '',
|
||||||
|
TrialSiteName: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'Equipments',
|
||||||
|
components: { BaseContainer, Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
loading: false,
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
trialId: '',
|
||||||
|
otherInfo: {},
|
||||||
|
siteOptions: [],
|
||||||
|
notShowFieldList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.trialId = this.$route.query.trialId
|
||||||
|
this.getList()
|
||||||
|
this.getSite()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getList() {
|
||||||
|
try {
|
||||||
|
this.loading = true
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
let res = await getSiteSurveyInfoList(this.searchData)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.list = res.Result.CurrentPageData
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
this.otherInfo = res.OtherInfo
|
||||||
|
this.notShowFieldList = res.OtherInfo.NotShowFieldList
|
||||||
|
}
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 导出
|
||||||
|
async handleExport() {
|
||||||
|
try {
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
this.loading = true
|
||||||
|
const { SortField, Asc, PageIndex, PageSize, ...param } = { ...this.searchData }
|
||||||
|
await trialSiteUserSummaryListExport({ ...param })
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
} finally {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取site下拉框数据
|
||||||
|
async getSite() {
|
||||||
|
try {
|
||||||
|
let res = await getTrialSiteSelect(this.trialId)
|
||||||
|
this.siteOptions = res.Result
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
viewFile(siteSurveyFile) {
|
||||||
|
this.$preview({
|
||||||
|
path: siteSurveyFile.Path,
|
||||||
|
type: siteSurveyFile.FileType,
|
||||||
|
title: siteSurveyFile.FileName,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 重置
|
||||||
|
handleReset() {
|
||||||
|
this.searchData = searchDataDefault()
|
||||||
|
this.getList()
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.list.clearSort()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 查询
|
||||||
|
handleSearch() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.searchData.Asc = true
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,707 @@
|
||||||
|
<template>
|
||||||
|
<BaseContainer>
|
||||||
|
<!-- 搜索框 -->
|
||||||
|
<template slot="search-container">
|
||||||
|
<el-form :inline="true">
|
||||||
|
<!-- 中心 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:siteId')">
|
||||||
|
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width: 120px">
|
||||||
|
<el-option v-for="(item, index) of siteOptions" :key="index" :label="item.TrialSiteCode"
|
||||||
|
:value="item.TrialSiteId" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 联系人 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:contactor')">
|
||||||
|
<el-input v-model="searchData.UserKeyInfo" class="mr" clearable :placeholder="`${$t(
|
||||||
|
'trials:researchRecord:placeholder:contactorInfo'
|
||||||
|
)}`" style="width: 140px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 初审人 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:preliminaryUser')">
|
||||||
|
<el-input v-model="searchData.PreliminaryUserName" class="mr" clearable style="width: 140px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 审核人 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:ReviewerUser')">
|
||||||
|
<el-input v-model="searchData.ReviewerUserName" class="mr" clearable style="width: 140px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 状态 -->
|
||||||
|
<!-- <el-form-item :label="$t('trials:researchRecord:table:status')">
|
||||||
|
<el-select v-model="searchData.State" clearable filterable style="width: 120px">
|
||||||
|
<el-option v-for="(item, index) of $d.ResearchRecord" :key="index" :label="item.label"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item> -->
|
||||||
|
<!-- 是否废除 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:isDeleted')">
|
||||||
|
<el-select v-model="searchData.IsDeleted" clearable filterable style="width: 120px">
|
||||||
|
<el-option v-for="item of $d.YesOrNo" v-show="item.raw.ValueCN !== '无'" :key="`IsDeleted${item.value}`"
|
||||||
|
:label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 更新时间 -->
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:table:updateTime')">
|
||||||
|
<el-date-picker v-model="searchData.DateRange" type="daterange" value-format="yyyy-MM-dd" format="yyyy-MM-dd"
|
||||||
|
style="width: 250px" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 查询 -->
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
|
{{ $t('common:button:search') }}
|
||||||
|
</el-button>
|
||||||
|
<!-- 重置 -->
|
||||||
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
|
{{ $t('common:button:reset') }}
|
||||||
|
</el-button>
|
||||||
|
<!-- 中心人员 -->
|
||||||
|
<el-button
|
||||||
|
v-if="searchData.State === 3"
|
||||||
|
v-hasPermi="['trials:trials-panel:attachments:site-research:summary-record']"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-info"
|
||||||
|
@click="showResearchUser">
|
||||||
|
{{ $t('trials:researchRecord:button:researchData') }}
|
||||||
|
</el-button>
|
||||||
|
<!-- 调查表链接 -->
|
||||||
|
<el-button
|
||||||
|
v-if="searchData.State === 0"
|
||||||
|
v-hasPermi="['trials:trials-panel:attachments:site-research:questionnaire-link']"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-link"
|
||||||
|
@click="showResearchLink">
|
||||||
|
{{ $t('trials:researchRecord:button:questionLink') }}
|
||||||
|
</el-button>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template slot="main-container">
|
||||||
|
<!-- 系统文件列表 -->
|
||||||
|
<el-table ref="siteResearchList" v-loading="loading" v-adaptive="{ bottomOffset: 60 }" :data="list" stripe
|
||||||
|
height="100" @sort-change="handleSortByColumn">
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<!-- 中心编号 -->
|
||||||
|
<el-table-column prop="TrialSiteCode" :label="$t('trials:researchRecord:table:siteId')" min-width="100"
|
||||||
|
sortable="custom" show-overflow-tooltip />
|
||||||
|
<!-- 中心名称 -->
|
||||||
|
<el-table-column prop="SiteName" :label="$t('trials:researchRecord:table:siteName')" min-width="100"
|
||||||
|
sortable="custom" show-overflow-tooltip />
|
||||||
|
<!-- 联系人 -->
|
||||||
|
<el-table-column prop="UserName" :label="$t('trials:researchRecord:table:contactor')" min-width="100"
|
||||||
|
sortable="custom" show-overflow-tooltip />
|
||||||
|
<!-- 联系电话 -->
|
||||||
|
<el-table-column prop="Phone" :label="$t('trials:researchRecord:table:contactorPhone')" min-width="100"
|
||||||
|
show-overflow-tooltip />
|
||||||
|
<!-- 联系邮箱 -->
|
||||||
|
<el-table-column prop="Email" :label="$t('trials:researchRecord:table:contactorEmail')" min-width="150"
|
||||||
|
show-overflow-tooltip />
|
||||||
|
<!-- 初审人 -->
|
||||||
|
<el-table-column prop="preliminaryUser" :label="$t('trials:researchRecord:table:preliminaryUser')"
|
||||||
|
min-width="150" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{
|
||||||
|
scope.row.PreliminaryUser
|
||||||
|
? scope.row.PreliminaryUser.RealName
|
||||||
|
: ''
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 审核人 -->
|
||||||
|
<el-table-column prop="ReviewerUser" :label="$t('trials:researchRecord:table:ReviewerUser')" min-width="150"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.ReviewerUser ? scope.row.ReviewerUser.RealName : '' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 状态 -->
|
||||||
|
<el-table-column prop="State" :label="$t('trials:researchRecord:table:status')" min-width="150"
|
||||||
|
sortable="custom" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag v-if="scope.row.State === 0" type="primary">{{
|
||||||
|
$fd('ResearchRecord', scope.row.State)
|
||||||
|
}}</el-tag>
|
||||||
|
<el-tag v-if="scope.row.State === 1" type="info">{{
|
||||||
|
$fd('ResearchRecord', scope.row.State)
|
||||||
|
}}</el-tag>
|
||||||
|
<el-tag v-if="scope.row.State === 2" type="warning">{{
|
||||||
|
$fd('ResearchRecord', scope.row.State)
|
||||||
|
}}</el-tag>
|
||||||
|
<el-tag v-if="scope.row.State === 3" type="danger">{{
|
||||||
|
$fd('ResearchRecord', scope.row.State)
|
||||||
|
}}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 是否废除 -->
|
||||||
|
<el-table-column prop="IsDeleted" :label="$t('trials:researchRecord:table:isDeleted')" min-width="100"
|
||||||
|
sortable="custom" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
|
||||||
|
$fd('YesOrNo', scope.row.IsDeleted)
|
||||||
|
}}</el-tag>
|
||||||
|
<el-tag v-else type="primary">{{
|
||||||
|
$fd('YesOrNo', scope.row.IsDeleted)
|
||||||
|
}}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 更新时间 -->
|
||||||
|
<el-table-column prop="UpdateTime" :label="$t('trials:researchRecord:table:updateTime')" min-width="150"
|
||||||
|
show-overflow-tooltip sortable="custom" />
|
||||||
|
<el-table-column width="150">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<!-- 查看 -->
|
||||||
|
<el-button
|
||||||
|
v-if="searchData.State === 1 || searchData.State === 2 || searchData.State === 3"
|
||||||
|
:disabled="scope.row.State !== 3"
|
||||||
|
circle
|
||||||
|
:title="$t('common:button:view')"
|
||||||
|
icon="el-icon-view"
|
||||||
|
@click="handleViewResearchList(scope.row)" />
|
||||||
|
<!-- 审批 -->
|
||||||
|
<el-button
|
||||||
|
v-if="searchData.State === 1 || searchData.State === 2"
|
||||||
|
v-hasPermi="['trials:trials-panel:attachments:site-research:auidt']"
|
||||||
|
:disabled="scope.row.State === 0 || scope.row.State === 3 || scope.row.IsDeleted"
|
||||||
|
circle
|
||||||
|
:title="$t('trials:researchRecord:action:view')"
|
||||||
|
icon="el-icon-s-check"
|
||||||
|
@click="handleViewResearchList(scope.row)" />
|
||||||
|
<!-- 废除 -->
|
||||||
|
<el-button v-if="searchData.State === 0" v-hasPermi="[
|
||||||
|
'trials:trials-panel:attachments:site-research:abolish',
|
||||||
|
]" :disabled="scope.row.State !== 0 || scope.row.IsDeleted" circle
|
||||||
|
:title="$t('trials:researchRecord:action:abolish')" icon="el-icon-delete"
|
||||||
|
@click="handleRepealResearch(scope.row)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 分页组件 -->
|
||||||
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
|
@pagination="getList" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 中心数据 trials:researchRecord:button:researchData-->
|
||||||
|
<!-- 中心人员 trials:researchRecord:dialogTitle:questionStaff-->
|
||||||
|
<el-dialog v-if="researchUserVisible" :visible.sync="researchUserVisible"
|
||||||
|
:title="$t('trials:researchRecord:button:researchData')" custom-class="base-dialog-wrapper"
|
||||||
|
:fullscreen="true">
|
||||||
|
<div class="base-modal-body" style="border: 1px solid #ccc; padding: 10px">
|
||||||
|
<el-tabs v-model="activeName">
|
||||||
|
<el-tab-pane
|
||||||
|
:label="$t('trials:researchRecord:dialogTitle:questionStaff')"
|
||||||
|
name="first">
|
||||||
|
<Users v-if="activeName === 'first'"/>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane
|
||||||
|
label="中心设备"
|
||||||
|
name="second">
|
||||||
|
<Equipments v-if="activeName === 'second'"/>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane
|
||||||
|
label="基本情况"
|
||||||
|
name="third">
|
||||||
|
<Questions v-if="activeName === 'third'"/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 调查表 -->
|
||||||
|
<el-dialog v-if="researchInfoVisible" :visible.sync="researchInfoVisible" :fullscreen="true"
|
||||||
|
:close-on-click-modal="false">
|
||||||
|
<research-form v-if="researchInfoVisible" @refreshPage="getList" />
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 调查表编辑 -->
|
||||||
|
<el-dialog v-if="ImageManualVisible" :visible.sync="ImageManualVisible" :fullscreen="true"
|
||||||
|
:close-on-click-modal="false" :title="$t('trials:researchRecord:dialogTitle:ImageManualEdit')">
|
||||||
|
<ImageManual v-if="ImageManualVisible" :trialSiteSurveyId="trialSiteSurveyId" @getList="getList" />
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 调查表链接 -->
|
||||||
|
<base-model :config="share_model">
|
||||||
|
<template slot="dialog-body" v-loading="shareLoading">
|
||||||
|
<el-button size="small" type="primary" style="margin-bottom: 10px;" @click.stop="openImageManual">{{
|
||||||
|
$t('trials:researchRecord:label:edit')
|
||||||
|
}}</el-button>
|
||||||
|
<div style="width: 100%; display: flex">
|
||||||
|
<div class="date">
|
||||||
|
<el-form :model="shareForm" :rules="rules" ref="shareForm" label-width="100px">
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:label:ExpirationDays')" prop="ExpirationDays">
|
||||||
|
<el-radio-group v-model="shareForm.ExpirationDays" @input="shareForm.OtherExpirationDays = null">
|
||||||
|
<el-radio :label="1">{{ $t('trials:researchRecord:label:day1') }}</el-radio>
|
||||||
|
<el-radio :label="7">{{ $t('trials:researchRecord:label:day7') }}</el-radio>
|
||||||
|
<el-radio :label="15">{{ $t('trials:researchRecord:label:day15') }}</el-radio>
|
||||||
|
<el-radio :label="`default`">{{ $t('trials:researchRecord:label:default') }}
|
||||||
|
<el-input placeholder="" type="number" @input="handleInput" v-model="shareForm.OtherExpirationDays"
|
||||||
|
clearable size="mini" style="width: 60px;" class="dayInput" />
|
||||||
|
<span style="margin-left: 10px;">{{ $t('trials:researchRecord:label:day') }}</span>
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="$t('trials:researchRecord:label:LinkVerificationCode')" prop="LinkVerificationCode">
|
||||||
|
<el-radio-group v-model="shareForm.LinkVerificationCode"
|
||||||
|
@input="shareForm.OtherLinkVerificationCode = null">
|
||||||
|
<el-radio label="researchProgramNo">{{ $t('trials:researchRecord:label:researchProgramNo')
|
||||||
|
}}</el-radio>
|
||||||
|
<el-radio label="default">{{ $t('trials:researchRecord:label:default') }}
|
||||||
|
<el-input placeholder="" type="number" v-model="shareForm.OtherLinkVerificationCode" clearable
|
||||||
|
size="mini" style="width: 100px;" />
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-button type="primary" round @click="setLink" style="float: right;">
|
||||||
|
{{ $t('trials:researchRecord:button:setLink') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="share">
|
||||||
|
<div class="shareLink">
|
||||||
|
<h3>{{ $t('trials:researchRecord:label:link') }}</h3>
|
||||||
|
<el-input ref="shareLink" v-model="shareLink" readonly type="textarea" autosize :rows="3" />
|
||||||
|
<div class="dateBox">
|
||||||
|
<span>{{ $t('trials:researchRecord:label:linkVerificationCode') }}</span>
|
||||||
|
<span>{{ LinkVerificationCode }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="dateBox">
|
||||||
|
<span>{{ $t('trials:researchRecord:label:ValidityPeriod') }}</span>
|
||||||
|
<span>{{ validityPeriod }}</span>
|
||||||
|
<span style="color: red;" v-if="isExpired">({{ $t('trials:researchRecord:label:Expired') }})</span>
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" round @click="copyLink" class="shareLinkBtn"
|
||||||
|
:disabled="!validityPeriod || isExpired">
|
||||||
|
{{ $t('trials:researchRecord:button:copyLink') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="shareCode">
|
||||||
|
<h3>{{ $t('trials:researchRecord:label:shareCode') }}</h3>
|
||||||
|
<div style="display: flex;align-items: center;justify-content: space-between;">
|
||||||
|
<div class="qrCodeBox">
|
||||||
|
<div id="qrcode" ref="qrcode"></div>
|
||||||
|
</div>
|
||||||
|
<div class="codeBtnBox">
|
||||||
|
<el-button @click="handleCopyImg" type="primary" round :disabled="!validityPeriod || isExpired">{{
|
||||||
|
$t('trials:researchRecord:button:copyCode')
|
||||||
|
}}</el-button>
|
||||||
|
<el-button @click="savePic" round :disabled="!validityPeriod || isExpired">{{
|
||||||
|
$t('trials:researchRecord:button:savePic')
|
||||||
|
}}</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
</base-model>
|
||||||
|
</BaseContainer>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
getTrialSiteSurveyList,
|
||||||
|
getTrialSiteSelect,
|
||||||
|
abandonSiteSurvey,
|
||||||
|
setTrialLinkExpirationTime,
|
||||||
|
getTrialLinkExpirationTime,
|
||||||
|
getLinkLinkExpirationTime,
|
||||||
|
} from '@/api/trials'
|
||||||
|
import { changeURLStatic } from '@/utils/history.js'
|
||||||
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
|
import Pagination from '@/components/Pagination'
|
||||||
|
import Users from './users'
|
||||||
|
import Equipments from './Equipments'
|
||||||
|
import Questions from './Questions'
|
||||||
|
import ResearchForm from '@/views/research/form'
|
||||||
|
import BaseModel from '@/components/BaseModel'
|
||||||
|
import ImageManual from './ImageManual'
|
||||||
|
import QRCode from 'qrcodejs2'
|
||||||
|
|
||||||
|
const searchDataDefault = () => {
|
||||||
|
return {
|
||||||
|
SortField: '',
|
||||||
|
Asc: true,
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
TrialSiteId: '',
|
||||||
|
UserKeyInfo: '',
|
||||||
|
State: null,
|
||||||
|
IsDeleted: '',
|
||||||
|
DateRange: [],
|
||||||
|
PreliminaryUserName: null,
|
||||||
|
ReviewerUserName: null,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
name: 'ResearchList',
|
||||||
|
components: { BaseContainer, Pagination, Users, Equipments, Questions, ResearchForm, BaseModel, ImageManual },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
searchData: searchDataDefault(),
|
||||||
|
loading: false,
|
||||||
|
list: [],
|
||||||
|
total: 0,
|
||||||
|
trialId: this.$route.query.trialId,
|
||||||
|
siteOptions: [],
|
||||||
|
researchUserVisible: false,
|
||||||
|
researchInfoVisible: false,
|
||||||
|
share_model: {
|
||||||
|
visible: false,
|
||||||
|
title: this.$t('trials:researchRecord:title:shark'),
|
||||||
|
width: '1000px',
|
||||||
|
},
|
||||||
|
shareLink: '',
|
||||||
|
researchState: this.$d.ResearchRecord,
|
||||||
|
qrcode: null,
|
||||||
|
validityPeriod: null,
|
||||||
|
LinkVerificationCode: null,
|
||||||
|
isExpired: false,
|
||||||
|
shareLoading: false,
|
||||||
|
shareForm: {
|
||||||
|
ExpirationDays: null,
|
||||||
|
OtherExpirationDays: null,
|
||||||
|
LinkVerificationCode: null,
|
||||||
|
OtherLinkVerificationCode: null,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
ExpirationDays: [
|
||||||
|
{ required: true, message: this.$t("common:ruleMessage:select"), trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (value === 'default' && !this.shareForm.OtherExpirationDays) {
|
||||||
|
callback(new Error(this.$t("common:ruleMessage:specify")));
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
|
||||||
|
}, trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
LinkVerificationCode: [
|
||||||
|
{ required: true, message: this.$t("common:ruleMessage:select"), trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (value === 'default' && !this.shareForm.OtherLinkVerificationCode) {
|
||||||
|
callback(new Error(this.$t("common:ruleMessage:specify")));
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
|
||||||
|
}, trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
ImageManualVisible: false,
|
||||||
|
trialSiteSurveyId: null,
|
||||||
|
activeName: 'first'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// this.getList()
|
||||||
|
this.getSite()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getLinkTimeIsExpired() {
|
||||||
|
try {
|
||||||
|
let data = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
}
|
||||||
|
this.shareLoading = true
|
||||||
|
let res = await getLinkLinkExpirationTime(data)
|
||||||
|
this.shareLoading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.isExpired = res.Result.IsIsExpired
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.shareLoading = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getLinkTime() {
|
||||||
|
try {
|
||||||
|
let data = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
}
|
||||||
|
this.shareLoading = true
|
||||||
|
let res = await getTrialLinkExpirationTime(data)
|
||||||
|
this.shareLoading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.validityPeriod = res.Result.LinkExpirationTime
|
||||||
|
this.LinkVerificationCode = res.Result.LinkVerificationCode || res.Result.ResearchProgramNo
|
||||||
|
if (!this.validityPeriod) {
|
||||||
|
this.LinkVerificationCode = null
|
||||||
|
}
|
||||||
|
if (!this.validityPeriod) return false
|
||||||
|
this.getLinkTimeIsExpired()
|
||||||
|
this.shareLink = `${location.protocol}//${location.host}/researchLogin?trialId=${this.$route.query.trialId}`
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.creatQrCode()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.shareLoading = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async setLink() {
|
||||||
|
try {
|
||||||
|
let validate = await this.$refs.shareForm.validate()
|
||||||
|
if (!validate) return false
|
||||||
|
let data = {
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
ExpirationDays: this.shareForm.ExpirationDays,
|
||||||
|
LinkVerificationCode: this.shareForm.LinkVerificationCode
|
||||||
|
}
|
||||||
|
if (this.shareForm.LinkVerificationCode === 'researchProgramNo') {
|
||||||
|
data.LinkVerificationCode = null
|
||||||
|
}
|
||||||
|
if (this.shareForm.LinkVerificationCode === 'default') {
|
||||||
|
data.LinkVerificationCode = this.shareForm.OtherLinkVerificationCode
|
||||||
|
}
|
||||||
|
if (this.shareForm.ExpirationDays === 'default') {
|
||||||
|
data.ExpirationDays = this.shareForm.OtherExpirationDays
|
||||||
|
}
|
||||||
|
this.shareLoading = true
|
||||||
|
let res = await setTrialLinkExpirationTime(data)
|
||||||
|
this.shareLoading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.getLinkTime()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.shareLoading = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleInput(val) {
|
||||||
|
// 过滤掉非数字字符,并取整为正整数
|
||||||
|
this.shareForm.OtherExpirationDays = val.replace(/[^\d]/g, '').replace(/^0+/, '')
|
||||||
|
},
|
||||||
|
openImageManual() {
|
||||||
|
// if (!this.trialSiteSurveyId) return false
|
||||||
|
this.ImageManualVisible = true
|
||||||
|
},
|
||||||
|
// 获取系统文件数据
|
||||||
|
getList() {
|
||||||
|
this.loading = true
|
||||||
|
this.searchData.TrialId = this.trialId
|
||||||
|
if (this.searchData.DateRange && this.searchData.DateRange.length === 2) {
|
||||||
|
this.searchData.UpdateTimeBegin = this.searchData.DateRange[0]
|
||||||
|
this.searchData.updateTimeEnd = this.searchData.DateRange[1]
|
||||||
|
} else {
|
||||||
|
this.searchData.UpdateTimeBegin = ''
|
||||||
|
this.searchData.updateTimeEnd = ''
|
||||||
|
}
|
||||||
|
getTrialSiteSurveyList(this.searchData)
|
||||||
|
.then((res) => {
|
||||||
|
this.loading = false
|
||||||
|
this.list = res.Result.CurrentPageData
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 查看调查表记录详情
|
||||||
|
handleViewResearchList(row) {
|
||||||
|
changeURLStatic('trialSiteSurveyId', row.Id)
|
||||||
|
this.researchInfoVisible = true
|
||||||
|
},
|
||||||
|
// 废除待提交的调查表
|
||||||
|
handleRepealResearch(row) {
|
||||||
|
// 是否确认废除?
|
||||||
|
this.$confirm(this.$t('trials:researchRecord:message:abolish'), {
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true,
|
||||||
|
}).then(() => {
|
||||||
|
abandonSiteSurvey(this.trialId, row.Id).then((res) => {
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.getList()
|
||||||
|
// 废除成功
|
||||||
|
this.$message.success(
|
||||||
|
this.$t('trials:researchRecord:message:abolishSuccessfully')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 展示当前项目下所有调查表需生成账户的用户信息
|
||||||
|
showResearchUser() {
|
||||||
|
this.researchUserVisible = true
|
||||||
|
this.activeName = 'first'
|
||||||
|
},
|
||||||
|
// 复制链接
|
||||||
|
copyLink() {
|
||||||
|
// 中心调研表链接
|
||||||
|
this.$copyText(
|
||||||
|
`${this.$t('trials:researchRecord:message:researchFormLink')}: ${this.shareLink
|
||||||
|
}\n${this.$t('trials:researchRecord:label:linkVerificationCode')}${this.LinkVerificationCode}\n${this.$t('trials:researchRecord:label:ValidityPeriod')}${this.validityPeriod}`
|
||||||
|
)
|
||||||
|
.then((res) => {
|
||||||
|
// 复制成功
|
||||||
|
this.$message.success(
|
||||||
|
this.$t('trials:researchRecord:message:copySuccessfully')
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
// 复制失败
|
||||||
|
this.$alert(this.$t('trials:researchRecord:message:copyFailed'))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 创建二维码
|
||||||
|
creatQrCode() {
|
||||||
|
this.$refs.qrcode.innerHTML = '' //清除二维码方法一
|
||||||
|
let text = this.shareLink
|
||||||
|
this.qrcode = new QRCode(this.$refs.qrcode, {
|
||||||
|
text: text, //页面地址 ,如果页面需要参数传递请注意哈希模式#
|
||||||
|
width: 200,
|
||||||
|
height: 200,
|
||||||
|
colorDark: '#000000',
|
||||||
|
colorLight: '#ffffff',
|
||||||
|
correctLevel: QRCode.CorrectLevel.H,
|
||||||
|
})
|
||||||
|
// qrcode.clear(); // 清除二维码方法二
|
||||||
|
},
|
||||||
|
// 下载二维码
|
||||||
|
savePic() {
|
||||||
|
let qrCodeCanvas = document
|
||||||
|
.getElementById('qrcode')
|
||||||
|
.getElementsByTagName('canvas')
|
||||||
|
let a = document.createElement('a')
|
||||||
|
a.href = qrCodeCanvas[0].toDataURL('image/url')
|
||||||
|
a.download = `${this.$route.query.researchProgramNo}${this.$t('trials:researchRecord:title:code')}.png`
|
||||||
|
a.click()
|
||||||
|
},
|
||||||
|
// 复制二维码
|
||||||
|
handleCopyImg() {
|
||||||
|
let qrCodeCanvas = document
|
||||||
|
.getElementById('qrcode')
|
||||||
|
.getElementsByTagName('canvas')
|
||||||
|
qrCodeCanvas[0].toBlob(async (blob) => {
|
||||||
|
console.log(blob)
|
||||||
|
const data = [
|
||||||
|
new ClipboardItem({
|
||||||
|
[blob.type]: blob,
|
||||||
|
}),
|
||||||
|
] // https://w3c.github.io/clipboard-apis/#dom-clipboard-write
|
||||||
|
await navigator.clipboard.write(data).then(
|
||||||
|
() => {
|
||||||
|
this.$message.success(
|
||||||
|
this.$t('trials:researchRecord:message:copySuccess')
|
||||||
|
)
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
this.$message.error(
|
||||||
|
this.$t('trials:researchRecord:message:UnableWrite')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取site下拉框数据
|
||||||
|
getSite() {
|
||||||
|
getTrialSiteSelect(this.trialId).then((res) => {
|
||||||
|
this.siteOptions = res.Result
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 展示调查表链接
|
||||||
|
showResearchLink() {
|
||||||
|
this.shareForm = {
|
||||||
|
ExpirationDays: null,
|
||||||
|
OtherExpirationDays: null,
|
||||||
|
LinkVerificationCode: null,
|
||||||
|
OtherLinkVerificationCode: null,
|
||||||
|
}
|
||||||
|
this.validityPeriod = null
|
||||||
|
this.isExpired = false
|
||||||
|
this.share_model.visible = true
|
||||||
|
this.getLinkTime()
|
||||||
|
// &lang=${this.$i18n.locale}
|
||||||
|
// this.trialSiteSurveyId = this.list[0].Id
|
||||||
|
},
|
||||||
|
// 重置
|
||||||
|
handleReset() {
|
||||||
|
const state = this.searchData.State
|
||||||
|
this.searchData = searchDataDefault()
|
||||||
|
this.searchData.DateRange = []
|
||||||
|
if (this.searchData.DateRange && this.searchData.DateRange.length === 2) {
|
||||||
|
this.searchData.UpdateTimeBegin = this.searchData.DateRange[0]
|
||||||
|
this.searchData.updateTimeEnd = this.searchData.DateRange[1]
|
||||||
|
} else {
|
||||||
|
this.searchData.UpdateTimeBegin = ''
|
||||||
|
this.searchData.updateTimeEnd = ''
|
||||||
|
}
|
||||||
|
this.searchData.State = state
|
||||||
|
this.getList()
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.siteResearchList.clearSort()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 查询
|
||||||
|
handleSearch() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
// 排序
|
||||||
|
handleSortByColumn(column) {
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.searchData.Asc = true
|
||||||
|
} else {
|
||||||
|
this.searchData.Asc = false
|
||||||
|
}
|
||||||
|
this.searchData.SortField = column.prop
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
if (this.qrcode) {
|
||||||
|
this.qrcode = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.date,
|
||||||
|
.share {
|
||||||
|
width: 55%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dayInput {
|
||||||
|
::v-deep .el-input__inner {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.date {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.share {
|
||||||
|
width: 45%;
|
||||||
|
padding-left: 5%;
|
||||||
|
border-left: 1px solid #f0f0f0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shareLinkBtn {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qrCodeBox {
|
||||||
|
width: 220px;
|
||||||
|
height: 220px;
|
||||||
|
display: flex;
|
||||||
|
border: 1px solid #c0c4cc;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 1px 1px 5px #c0c4cc;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dateBox {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.codeBtnBox {
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
display: block;
|
||||||
|
margin: 10px auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -119,7 +119,7 @@
|
||||||
<el-table
|
<el-table
|
||||||
ref="researchUsers"
|
ref="researchUsers"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
v-adaptive="{bottomOffset:70}"
|
v-adaptive="{bottomOffset:55}"
|
||||||
:data="list"
|
:data="list"
|
||||||
stripe
|
stripe
|
||||||
height="100"
|
height="100"
|
||||||
|
|
@ -296,7 +296,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
console.log(this.dict.type.SiteSurvey_UserRoles)
|
|
||||||
this.getList()
|
this.getList()
|
||||||
this.getSite()
|
this.getSite()
|
||||||
this.getUserType()
|
this.getUserType()
|
||||||
|
|
|
||||||
|
|
@ -1,670 +1,150 @@
|
||||||
<template>
|
<template>
|
||||||
<BaseContainer>
|
<BaseContainer>
|
||||||
<!-- 搜索框 -->
|
<div class="step-wrapper">
|
||||||
<template slot="search-container">
|
<el-steps
|
||||||
<el-form :inline="true">
|
:active="activeStatus"
|
||||||
<!-- 中心 -->
|
align-center
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:siteId')">
|
:space="300"
|
||||||
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width: 120px">
|
>
|
||||||
<el-option v-for="(item, index) of siteOptions" :key="index" :label="item.TrialSiteCode"
|
<!-- 中心填写 -->
|
||||||
:value="item.TrialSiteId" />
|
<el-step
|
||||||
</el-select>
|
:title="$t('trials:siteResearch:timeline:step1')"
|
||||||
</el-form-item>
|
class="click_cursor"
|
||||||
<!-- 联系人 -->
|
@click.native="handleClick(0)"
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:contactor')">
|
/>
|
||||||
<el-input v-model="searchData.UserKeyInfo" class="mr" clearable :placeholder="`${$t(
|
<!-- SPM审核 -->
|
||||||
'trials:researchRecord:placeholder:contactorInfo'
|
<el-step
|
||||||
)}`" style="width: 140px" />
|
v-show="isSPMJoin"
|
||||||
</el-form-item>
|
:title="$t('trials:siteResearch:timeline:step2')"
|
||||||
<!-- 初审人 -->
|
class="click_cursor"
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:preliminaryUser')">
|
@click.native="handleClick(1)"
|
||||||
<el-input v-model="searchData.PreliminaryUserName" class="mr" clearable style="width: 140px" />
|
/>
|
||||||
</el-form-item>
|
<!-- PM审核 -->
|
||||||
<!-- 审核人 -->
|
<el-step
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:ReviewerUser')">
|
:title="$t('trials:siteResearch:timeline:step3')"
|
||||||
<el-input v-model="searchData.ReviewerUserName" class="mr" clearable style="width: 140px" />
|
class="click_cursor"
|
||||||
</el-form-item>
|
@click.native="handleClick(2)"
|
||||||
<!-- 状态 -->
|
/>
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:status')">
|
<!-- 审核完毕 -->
|
||||||
<el-select v-model="searchData.State" clearable filterable style="width: 120px">
|
<el-step
|
||||||
<el-option v-for="(item, index) of $d.ResearchRecord" :key="index" :label="item.label"
|
:title="$t('trials:siteResearch:timeline:step14')"
|
||||||
:value="item.value" />
|
class="click_cursor"
|
||||||
</el-select>
|
@click.native="handleClick(3)"
|
||||||
</el-form-item>
|
/>
|
||||||
<!-- 是否废除 -->
|
</el-steps>
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:isDeleted')">
|
<div class="step-content">
|
||||||
<el-select v-model="searchData.IsDeleted" clearable filterable style="width: 120px">
|
<ResearchList ref="researchList"/>
|
||||||
<el-option v-for="item of $d.YesOrNo" v-show="item.raw.ValueCN !== '无'" :key="`IsDeleted${item.value}`"
|
|
||||||
:label="item.label" :value="item.value" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<!-- 更新时间 -->
|
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:updateTime')">
|
|
||||||
<el-date-picker v-model="searchData.DateRange" type="daterange" value-format="yyyy-MM-dd" format="yyyy-MM-dd"
|
|
||||||
style="width: 250px" />
|
|
||||||
</el-form-item>
|
|
||||||
<!-- 查询 -->
|
|
||||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
|
||||||
{{ $t('common:button:search') }}
|
|
||||||
</el-button>
|
|
||||||
<!-- 重置 -->
|
|
||||||
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
|
||||||
{{ $t('common:button:reset') }}
|
|
||||||
</el-button>
|
|
||||||
<!-- 中心人员 -->
|
|
||||||
<el-button v-hasPermi="[
|
|
||||||
'trials:trials-panel:attachments:site-research:summary-record',
|
|
||||||
]" type="primary" icon="el-icon-info" @click="showResearchUser">
|
|
||||||
{{ $t('trials:researchRecord:button:questionStaffs') }}
|
|
||||||
</el-button>
|
|
||||||
<!-- 调查表链接 -->
|
|
||||||
<el-button v-hasPermi="[
|
|
||||||
'trials:trials-panel:attachments:site-research:questionnaire-link',
|
|
||||||
]" type="primary" icon="el-icon-link" @click="showResearchLink">
|
|
||||||
{{ $t('trials:researchRecord:button:questionLink') }}
|
|
||||||
</el-button>
|
|
||||||
</el-form>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template slot="main-container">
|
|
||||||
<!-- 系统文件列表 -->
|
|
||||||
<el-table ref="siteResearchList" v-loading="loading" v-adaptive="{ bottomOffset: 60 }" :data="list" stripe
|
|
||||||
height="100" @sort-change="handleSortByColumn">
|
|
||||||
<el-table-column type="index" width="50" />
|
|
||||||
<!-- 中心编号 -->
|
|
||||||
<el-table-column prop="TrialSiteCode" :label="$t('trials:researchRecord:table:siteId')" min-width="100"
|
|
||||||
sortable="custom" show-overflow-tooltip />
|
|
||||||
<!-- 中心名称 -->
|
|
||||||
<el-table-column prop="SiteName" :label="$t('trials:researchRecord:table:siteName')" min-width="100"
|
|
||||||
sortable="custom" show-overflow-tooltip />
|
|
||||||
<!-- 联系人 -->
|
|
||||||
<el-table-column prop="UserName" :label="$t('trials:researchRecord:table:contactor')" min-width="100"
|
|
||||||
sortable="custom" show-overflow-tooltip />
|
|
||||||
<!-- 联系电话 -->
|
|
||||||
<el-table-column prop="Phone" :label="$t('trials:researchRecord:table:contactorPhone')" min-width="100"
|
|
||||||
show-overflow-tooltip />
|
|
||||||
<!-- 联系邮箱 -->
|
|
||||||
<el-table-column prop="Email" :label="$t('trials:researchRecord:table:contactorEmail')" min-width="150"
|
|
||||||
show-overflow-tooltip />
|
|
||||||
<!-- 初审人 -->
|
|
||||||
<el-table-column prop="preliminaryUser" :label="$t('trials:researchRecord:table:preliminaryUser')"
|
|
||||||
min-width="150" show-overflow-tooltip>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{
|
|
||||||
scope.row.PreliminaryUser
|
|
||||||
? scope.row.PreliminaryUser.RealName
|
|
||||||
: ''
|
|
||||||
}}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 审核人 -->
|
|
||||||
<el-table-column prop="ReviewerUser" :label="$t('trials:researchRecord:table:ReviewerUser')" min-width="150"
|
|
||||||
show-overflow-tooltip>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ scope.row.ReviewerUser ? scope.row.ReviewerUser.RealName : '' }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 状态 -->
|
|
||||||
<el-table-column prop="State" :label="$t('trials:researchRecord:table:status')" min-width="150"
|
|
||||||
sortable="custom" show-overflow-tooltip>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag v-if="scope.row.State === 0" type="primary">{{
|
|
||||||
$fd('ResearchRecord', scope.row.State)
|
|
||||||
}}</el-tag>
|
|
||||||
<el-tag v-if="scope.row.State === 1" type="info">{{
|
|
||||||
$fd('ResearchRecord', scope.row.State)
|
|
||||||
}}</el-tag>
|
|
||||||
<el-tag v-if="scope.row.State === 2" type="warning">{{
|
|
||||||
$fd('ResearchRecord', scope.row.State)
|
|
||||||
}}</el-tag>
|
|
||||||
<el-tag v-if="scope.row.State === 3" type="danger">{{
|
|
||||||
$fd('ResearchRecord', scope.row.State)
|
|
||||||
}}</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 是否废除 -->
|
|
||||||
<el-table-column prop="IsDeleted" :label="$t('trials:researchRecord:table:isDeleted')" min-width="100"
|
|
||||||
sortable="custom" show-overflow-tooltip>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
|
|
||||||
$fd('YesOrNo', scope.row.IsDeleted)
|
|
||||||
}}</el-tag>
|
|
||||||
<el-tag v-else type="primary">{{
|
|
||||||
$fd('YesOrNo', scope.row.IsDeleted)
|
|
||||||
}}</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<!-- 更新时间 -->
|
|
||||||
<el-table-column prop="UpdateTime" :label="$t('trials:researchRecord:table:updateTime')" min-width="150"
|
|
||||||
show-overflow-tooltip sortable="custom" />
|
|
||||||
<el-table-column width="150">
|
|
||||||
<template slot-scope="scope">
|
|
||||||
<!-- 查看 -->
|
|
||||||
<el-button :disabled="scope.row.State !== 3" circle :title="$t('common:button:view')" icon="el-icon-view"
|
|
||||||
@click="handleViewResearchList(scope.row)" />
|
|
||||||
<!-- 审批 -->
|
|
||||||
<el-button v-hasPermi="[
|
|
||||||
'trials:trials-panel:attachments:site-research:auidt',
|
|
||||||
]" :disabled="scope.row.State === 0 || scope.row.State === 3 || scope.row.IsDeleted" circle
|
|
||||||
:title="$t('trials:researchRecord:action:view')" icon="el-icon-s-check"
|
|
||||||
@click="handleViewResearchList(scope.row)" />
|
|
||||||
<!-- 废除 -->
|
|
||||||
<el-button v-hasPermi="[
|
|
||||||
'trials:trials-panel:attachments:site-research:abolish',
|
|
||||||
]" :disabled="scope.row.State !== 0 || scope.row.IsDeleted" circle
|
|
||||||
:title="$t('trials:researchRecord:action:abolish')" icon="el-icon-delete"
|
|
||||||
@click="handleRepealResearch(scope.row)" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 分页组件 -->
|
|
||||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- 中心人员 -->
|
|
||||||
<el-dialog v-if="researchUserVisible" :visible.sync="researchUserVisible"
|
|
||||||
:title="$t('trials:researchRecord:dialogTitle:questionStaff')" custom-class="base-dialog-wrapper"
|
|
||||||
:fullscreen="true">
|
|
||||||
<div class="base-modal-body" style="border: 1px solid #ccc; padding: 10px">
|
|
||||||
<Users v-if="researchUserVisible" />
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</div>
|
||||||
|
|
||||||
<!-- 调查表 -->
|
|
||||||
<el-dialog v-if="researchInfoVisible" :visible.sync="researchInfoVisible" :fullscreen="true"
|
|
||||||
:close-on-click-modal="false">
|
|
||||||
<research-form v-if="researchInfoVisible" @refreshPage="getList" />
|
|
||||||
</el-dialog>
|
|
||||||
<!-- 调查表编辑 -->
|
|
||||||
<el-dialog v-if="ImageManualVisible" :visible.sync="ImageManualVisible" :fullscreen="true"
|
|
||||||
:close-on-click-modal="false" :title="$t('trials:researchRecord:dialogTitle:ImageManualEdit')">
|
|
||||||
<ImageManual v-if="ImageManualVisible" :trialSiteSurveyId="trialSiteSurveyId" @getList="getList" />
|
|
||||||
</el-dialog>
|
|
||||||
<!-- 调查表链接 -->
|
|
||||||
<base-model :config="share_model">
|
|
||||||
<template slot="dialog-body" v-loading="shareLoading">
|
|
||||||
<el-button size="small" type="primary" style="margin-bottom: 10px;" @click.stop="openImageManual">{{
|
|
||||||
$t('trials:researchRecord:label:edit')
|
|
||||||
}}</el-button>
|
|
||||||
<div style="width: 100%; display: flex">
|
|
||||||
<div class="date">
|
|
||||||
<el-form :model="shareForm" :rules="rules" ref="shareForm" label-width="100px">
|
|
||||||
<el-form-item :label="$t('trials:researchRecord:label:ExpirationDays')" prop="ExpirationDays">
|
|
||||||
<el-radio-group v-model="shareForm.ExpirationDays" @input="shareForm.OtherExpirationDays = null">
|
|
||||||
<el-radio :label="1">{{ $t('trials:researchRecord:label:day1') }}</el-radio>
|
|
||||||
<el-radio :label="7">{{ $t('trials:researchRecord:label:day7') }}</el-radio>
|
|
||||||
<el-radio :label="15">{{ $t('trials:researchRecord:label:day15') }}</el-radio>
|
|
||||||
<el-radio :label="`default`">{{ $t('trials:researchRecord:label:default') }}
|
|
||||||
<el-input placeholder="" type="number" @input="handleInput" v-model="shareForm.OtherExpirationDays"
|
|
||||||
clearable size="mini" style="width: 60px;" class="dayInput" />
|
|
||||||
<span style="margin-left: 10px;">{{ $t('trials:researchRecord:label:day') }}</span>
|
|
||||||
</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('trials:researchRecord:label:LinkVerificationCode')" prop="LinkVerificationCode">
|
|
||||||
<el-radio-group v-model="shareForm.LinkVerificationCode"
|
|
||||||
@input="shareForm.OtherLinkVerificationCode = null">
|
|
||||||
<el-radio label="researchProgramNo">{{ $t('trials:researchRecord:label:researchProgramNo')
|
|
||||||
}}</el-radio>
|
|
||||||
<el-radio label="default">{{ $t('trials:researchRecord:label:default') }}
|
|
||||||
<el-input placeholder="" type="number" v-model="shareForm.OtherLinkVerificationCode" clearable
|
|
||||||
size="mini" style="width: 100px;" />
|
|
||||||
</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<el-button type="primary" round @click="setLink" style="float: right;">
|
|
||||||
{{ $t('trials:researchRecord:button:setLink') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="share">
|
|
||||||
<div class="shareLink">
|
|
||||||
<h3>{{ $t('trials:researchRecord:label:link') }}</h3>
|
|
||||||
<el-input ref="shareLink" v-model="shareLink" readonly type="textarea" autosize :rows="3" />
|
|
||||||
<div class="dateBox">
|
|
||||||
<span>{{ $t('trials:researchRecord:label:linkVerificationCode') }}</span>
|
|
||||||
<span>{{ LinkVerificationCode }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="dateBox">
|
|
||||||
<span>{{ $t('trials:researchRecord:label:ValidityPeriod') }}</span>
|
|
||||||
<span>{{ validityPeriod }}</span>
|
|
||||||
<span style="color: red;" v-if="isExpired">({{ $t('trials:researchRecord:label:Expired') }})</span>
|
|
||||||
</div>
|
|
||||||
<el-button type="primary" round @click="copyLink" class="shareLinkBtn"
|
|
||||||
:disabled="!validityPeriod || isExpired">
|
|
||||||
{{ $t('trials:researchRecord:button:copyLink') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<div class="shareCode">
|
|
||||||
<h3>{{ $t('trials:researchRecord:label:shareCode') }}</h3>
|
|
||||||
<div style="display: flex;align-items: center;justify-content: space-between;">
|
|
||||||
<div class="qrCodeBox">
|
|
||||||
<div id="qrcode" ref="qrcode"></div>
|
|
||||||
</div>
|
|
||||||
<div class="codeBtnBox">
|
|
||||||
<el-button @click="handleCopyImg" type="primary" round :disabled="!validityPeriod || isExpired">{{
|
|
||||||
$t('trials:researchRecord:button:copyCode')
|
|
||||||
}}</el-button>
|
|
||||||
<el-button @click="savePic" round :disabled="!validityPeriod || isExpired">{{
|
|
||||||
$t('trials:researchRecord:button:savePic')
|
|
||||||
}}</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
</base-model>
|
|
||||||
</BaseContainer>
|
</BaseContainer>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import {
|
import { getTrialIsSPMJoin } from '@/api/research'
|
||||||
getTrialSiteSurveyList,
|
|
||||||
getTrialSiteSelect,
|
|
||||||
abandonSiteSurvey,
|
|
||||||
setTrialLinkExpirationTime,
|
|
||||||
getTrialLinkExpirationTime,
|
|
||||||
getLinkLinkExpirationTime,
|
|
||||||
} from '@/api/trials'
|
|
||||||
import { changeURLStatic } from '@/utils/history.js'
|
|
||||||
import BaseContainer from '@/components/BaseContainer'
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
import Pagination from '@/components/Pagination'
|
import ResearchList from './components/ResearchList'
|
||||||
import Users from './components/users'
|
|
||||||
import ResearchForm from '@/views/research/form'
|
|
||||||
import BaseModel from '@/components/BaseModel'
|
|
||||||
import ImageManual from './components/ImageManual'
|
|
||||||
import QRCode from 'qrcodejs2'
|
|
||||||
|
|
||||||
const searchDataDefault = () => {
|
|
||||||
return {
|
|
||||||
SortField: '',
|
|
||||||
Asc: true,
|
|
||||||
PageIndex: 1,
|
|
||||||
PageSize: 20,
|
|
||||||
TrialSiteId: '',
|
|
||||||
UserKeyInfo: '',
|
|
||||||
State: null,
|
|
||||||
IsDeleted: '',
|
|
||||||
DateRange: [],
|
|
||||||
PreliminaryUserName: null,
|
|
||||||
ReviewerUserName: null,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SiteResearchList',
|
name: 'SiteResearch',
|
||||||
components: { BaseContainer, Pagination, Users, ResearchForm, BaseModel, ImageManual },
|
components: {
|
||||||
|
BaseContainer,
|
||||||
|
ResearchList
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
searchData: searchDataDefault(),
|
isSPMJoin: false,
|
||||||
loading: false,
|
activeStatus: 0
|
||||||
list: [],
|
}
|
||||||
total: 0,
|
},
|
||||||
trialId: this.$route.query.trialId,
|
watch: {
|
||||||
siteOptions: [],
|
activeStatus: {
|
||||||
researchUserVisible: false,
|
deep: true,
|
||||||
researchInfoVisible: false,
|
immediate: true,
|
||||||
share_model: {
|
handler(v) {
|
||||||
visible: false,
|
this.$nextTick(() =>{
|
||||||
title: this.$t('trials:researchRecord:title:shark'),
|
this.$refs['researchList'].searchData.State = v
|
||||||
width: '1000px',
|
this.$refs['researchList'].getList()
|
||||||
},
|
})
|
||||||
shareLink: '',
|
|
||||||
researchState: this.$d.ResearchRecord,
|
|
||||||
qrcode: null,
|
|
||||||
validityPeriod: null,
|
|
||||||
LinkVerificationCode: null,
|
|
||||||
isExpired: false,
|
|
||||||
shareLoading: false,
|
|
||||||
shareForm: {
|
|
||||||
ExpirationDays: null,
|
|
||||||
OtherExpirationDays: null,
|
|
||||||
LinkVerificationCode: null,
|
|
||||||
OtherLinkVerificationCode: null,
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
ExpirationDays: [
|
|
||||||
{ required: true, message: this.$t("common:ruleMessage:select"), trigger: 'blur' },
|
|
||||||
{
|
|
||||||
validator: (rule, value, callback) => {
|
|
||||||
if (value === 'default' && !this.shareForm.OtherExpirationDays) {
|
|
||||||
callback(new Error(this.$t("common:ruleMessage:specify")));
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
|
|
||||||
}, trigger: 'blur'
|
}
|
||||||
}
|
|
||||||
],
|
|
||||||
LinkVerificationCode: [
|
|
||||||
{ required: true, message: this.$t("common:ruleMessage:select"), trigger: 'blur' },
|
|
||||||
{
|
|
||||||
validator: (rule, value, callback) => {
|
|
||||||
if (value === 'default' && !this.shareForm.OtherLinkVerificationCode) {
|
|
||||||
callback(new Error(this.$t("common:ruleMessage:specify")));
|
|
||||||
} else {
|
|
||||||
callback()
|
|
||||||
}
|
|
||||||
|
|
||||||
}, trigger: 'blur'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
},
|
|
||||||
ImageManualVisible: false,
|
|
||||||
trialSiteSurveyId: null,
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.getList()
|
this.getTrialIsSPMJoin()
|
||||||
this.getSite()
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getLinkTimeIsExpired() {
|
async getTrialIsSPMJoin() {
|
||||||
try {
|
try {
|
||||||
let data = {
|
let trialId = this.$route.query.trialId
|
||||||
TrialId: this.$route.query.trialId,
|
if (!trialId) return
|
||||||
}
|
let res = await getTrialIsSPMJoin( trialId )
|
||||||
this.shareLoading = true
|
this.isSPMJoin = res.Result
|
||||||
let res = await getLinkLinkExpirationTime(data)
|
} catch(e) {
|
||||||
this.shareLoading = false
|
console.log(e)
|
||||||
if (res.IsSuccess) {
|
|
||||||
this.isExpired = res.Result.IsIsExpired
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
this.shareLoading = false
|
|
||||||
console.log(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
async getLinkTime() {
|
handleClick(step) {
|
||||||
try {
|
this.activeStatus = step
|
||||||
let data = {
|
|
||||||
TrialId: this.$route.query.trialId,
|
|
||||||
}
|
|
||||||
this.shareLoading = true
|
|
||||||
let res = await getTrialLinkExpirationTime(data)
|
|
||||||
this.shareLoading = false
|
|
||||||
if (res.IsSuccess) {
|
|
||||||
this.validityPeriod = res.Result.LinkExpirationTime
|
|
||||||
this.LinkVerificationCode = res.Result.LinkVerificationCode || res.Result.ResearchProgramNo
|
|
||||||
if (!this.validityPeriod) {
|
|
||||||
this.LinkVerificationCode = null
|
|
||||||
}
|
|
||||||
if (!this.validityPeriod) return false
|
|
||||||
this.getLinkTimeIsExpired()
|
|
||||||
this.shareLink = `${location.protocol}//${location.host}/researchLogin?trialId=${this.$route.query.trialId}`
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.creatQrCode()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
this.shareLoading = false
|
|
||||||
console.log(err)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
async setLink() {
|
|
||||||
try {
|
}
|
||||||
let validate = await this.$refs.shareForm.validate()
|
|
||||||
if (!validate) return false
|
|
||||||
let data = {
|
|
||||||
TrialId: this.$route.query.trialId,
|
|
||||||
ExpirationDays: this.shareForm.ExpirationDays,
|
|
||||||
LinkVerificationCode: this.shareForm.LinkVerificationCode
|
|
||||||
}
|
|
||||||
if (this.shareForm.LinkVerificationCode === 'researchProgramNo') {
|
|
||||||
data.LinkVerificationCode = null
|
|
||||||
}
|
|
||||||
if (this.shareForm.LinkVerificationCode === 'default') {
|
|
||||||
data.LinkVerificationCode = this.shareForm.OtherLinkVerificationCode
|
|
||||||
}
|
|
||||||
if (this.shareForm.ExpirationDays === 'default') {
|
|
||||||
data.ExpirationDays = this.shareForm.OtherExpirationDays
|
|
||||||
}
|
|
||||||
this.shareLoading = true
|
|
||||||
let res = await setTrialLinkExpirationTime(data)
|
|
||||||
this.shareLoading = false
|
|
||||||
if (res.IsSuccess) {
|
|
||||||
this.getLinkTime()
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
this.shareLoading = false
|
|
||||||
console.log(err)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleInput(val) {
|
|
||||||
// 过滤掉非数字字符,并取整为正整数
|
|
||||||
this.shareForm.OtherExpirationDays = val.replace(/[^\d]/g, '').replace(/^0+/, '')
|
|
||||||
},
|
|
||||||
openImageManual() {
|
|
||||||
// if (!this.trialSiteSurveyId) return false
|
|
||||||
this.ImageManualVisible = true
|
|
||||||
},
|
|
||||||
// 获取系统文件数据
|
|
||||||
getList() {
|
|
||||||
this.loading = true
|
|
||||||
this.searchData.TrialId = this.trialId
|
|
||||||
if (this.searchData.DateRange && this.searchData.DateRange.length === 2) {
|
|
||||||
this.searchData.UpdateTimeBegin = this.searchData.DateRange[0]
|
|
||||||
this.searchData.updateTimeEnd = this.searchData.DateRange[1]
|
|
||||||
} else {
|
|
||||||
this.searchData.UpdateTimeBegin = ''
|
|
||||||
this.searchData.updateTimeEnd = ''
|
|
||||||
}
|
|
||||||
getTrialSiteSurveyList(this.searchData)
|
|
||||||
.then((res) => {
|
|
||||||
this.loading = false
|
|
||||||
this.list = res.Result.CurrentPageData
|
|
||||||
this.total = res.Result.TotalCount
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
this.loading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 查看调查表记录详情
|
|
||||||
handleViewResearchList(row) {
|
|
||||||
changeURLStatic('trialSiteSurveyId', row.Id)
|
|
||||||
this.researchInfoVisible = true
|
|
||||||
},
|
|
||||||
// 废除待提交的调查表
|
|
||||||
handleRepealResearch(row) {
|
|
||||||
// 是否确认废除?
|
|
||||||
this.$confirm(this.$t('trials:researchRecord:message:abolish'), {
|
|
||||||
type: 'warning',
|
|
||||||
distinguishCancelAndClose: true,
|
|
||||||
}).then(() => {
|
|
||||||
abandonSiteSurvey(this.trialId, row.Id).then((res) => {
|
|
||||||
if (res.IsSuccess) {
|
|
||||||
this.getList()
|
|
||||||
// 废除成功
|
|
||||||
this.$message.success(
|
|
||||||
this.$t('trials:researchRecord:message:abolishSuccessfully')
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 展示当前项目下所有调查表需生成账户的用户信息
|
|
||||||
showResearchUser() {
|
|
||||||
this.researchUserVisible = true
|
|
||||||
},
|
|
||||||
// 复制链接
|
|
||||||
copyLink() {
|
|
||||||
// 中心调研表链接
|
|
||||||
this.$copyText(
|
|
||||||
`${this.$t('trials:researchRecord:message:researchFormLink')}: ${this.shareLink
|
|
||||||
}\n${this.$t('trials:researchRecord:label:linkVerificationCode')}${this.LinkVerificationCode}\n${this.$t('trials:researchRecord:label:ValidityPeriod')}${this.validityPeriod}`
|
|
||||||
)
|
|
||||||
.then((res) => {
|
|
||||||
// 复制成功
|
|
||||||
this.$message.success(
|
|
||||||
this.$t('trials:researchRecord:message:copySuccessfully')
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
// 复制失败
|
|
||||||
this.$alert(this.$t('trials:researchRecord:message:copyFailed'))
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 创建二维码
|
|
||||||
creatQrCode() {
|
|
||||||
this.$refs.qrcode.innerHTML = '' //清除二维码方法一
|
|
||||||
let text = this.shareLink
|
|
||||||
this.qrcode = new QRCode(this.$refs.qrcode, {
|
|
||||||
text: text, //页面地址 ,如果页面需要参数传递请注意哈希模式#
|
|
||||||
width: 200,
|
|
||||||
height: 200,
|
|
||||||
colorDark: '#000000',
|
|
||||||
colorLight: '#ffffff',
|
|
||||||
correctLevel: QRCode.CorrectLevel.H,
|
|
||||||
})
|
|
||||||
// qrcode.clear(); // 清除二维码方法二
|
|
||||||
},
|
|
||||||
// 下载二维码
|
|
||||||
savePic() {
|
|
||||||
let qrCodeCanvas = document
|
|
||||||
.getElementById('qrcode')
|
|
||||||
.getElementsByTagName('canvas')
|
|
||||||
let a = document.createElement('a')
|
|
||||||
a.href = qrCodeCanvas[0].toDataURL('image/url')
|
|
||||||
a.download = `${this.$route.query.researchProgramNo}${this.$t('trials:researchRecord:title:code')}.png`
|
|
||||||
a.click()
|
|
||||||
},
|
|
||||||
// 复制二维码
|
|
||||||
handleCopyImg() {
|
|
||||||
let qrCodeCanvas = document
|
|
||||||
.getElementById('qrcode')
|
|
||||||
.getElementsByTagName('canvas')
|
|
||||||
qrCodeCanvas[0].toBlob(async (blob) => {
|
|
||||||
console.log(blob)
|
|
||||||
const data = [
|
|
||||||
new ClipboardItem({
|
|
||||||
[blob.type]: blob,
|
|
||||||
}),
|
|
||||||
] // https://w3c.github.io/clipboard-apis/#dom-clipboard-write
|
|
||||||
await navigator.clipboard.write(data).then(
|
|
||||||
() => {
|
|
||||||
this.$message.success(
|
|
||||||
this.$t('trials:researchRecord:message:copySuccess')
|
|
||||||
)
|
|
||||||
},
|
|
||||||
() => {
|
|
||||||
this.$message.error(
|
|
||||||
this.$t('trials:researchRecord:message:UnableWrite')
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 获取site下拉框数据
|
|
||||||
getSite() {
|
|
||||||
getTrialSiteSelect(this.trialId).then((res) => {
|
|
||||||
this.siteOptions = res.Result
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 展示调查表链接
|
|
||||||
showResearchLink() {
|
|
||||||
this.shareForm = {
|
|
||||||
ExpirationDays: null,
|
|
||||||
OtherExpirationDays: null,
|
|
||||||
LinkVerificationCode: null,
|
|
||||||
OtherLinkVerificationCode: null,
|
|
||||||
}
|
|
||||||
this.validityPeriod = null
|
|
||||||
this.isExpired = false
|
|
||||||
this.share_model.visible = true
|
|
||||||
this.getLinkTime()
|
|
||||||
// &lang=${this.$i18n.locale}
|
|
||||||
// this.trialSiteSurveyId = this.list[0].Id
|
|
||||||
},
|
|
||||||
// 重置
|
|
||||||
handleReset() {
|
|
||||||
this.searchData = searchDataDefault()
|
|
||||||
this.searchData.DateRange = []
|
|
||||||
if (this.searchData.DateRange && this.searchData.DateRange.length === 2) {
|
|
||||||
this.searchData.UpdateTimeBegin = this.searchData.DateRange[0]
|
|
||||||
this.searchData.updateTimeEnd = this.searchData.DateRange[1]
|
|
||||||
} else {
|
|
||||||
this.searchData.UpdateTimeBegin = ''
|
|
||||||
this.searchData.updateTimeEnd = ''
|
|
||||||
}
|
|
||||||
this.getList()
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.siteResearchList.clearSort()
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 查询
|
|
||||||
handleSearch() {
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
// 排序
|
|
||||||
handleSortByColumn(column) {
|
|
||||||
if (column.order === 'ascending') {
|
|
||||||
this.searchData.Asc = true
|
|
||||||
} else {
|
|
||||||
this.searchData.Asc = false
|
|
||||||
}
|
|
||||||
this.searchData.SortField = column.prop
|
|
||||||
this.getList()
|
|
||||||
},
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
if (this.qrcode) {
|
|
||||||
this.qrcode = null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.date,
|
.step-wrapper {
|
||||||
.share {
|
height: 100%;
|
||||||
width: 55%;
|
flex: 1;
|
||||||
height: 100%;
|
display: flex;
|
||||||
}
|
flex-direction: column;
|
||||||
|
padding: 0;
|
||||||
.dayInput {
|
margin: 0;
|
||||||
::v-deep .el-input__inner {
|
background-color: #fff;
|
||||||
padding-left: 5px;
|
|
||||||
}
|
}
|
||||||
}
|
.el-steps {
|
||||||
|
height: 80px;
|
||||||
|
justify-content: center;
|
||||||
.date {
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.share {
|
|
||||||
width: 45%;
|
|
||||||
padding-left: 5%;
|
|
||||||
border-left: 1px solid #f0f0f0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shareLinkBtn {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.qrCodeBox {
|
|
||||||
width: 220px;
|
|
||||||
height: 220px;
|
|
||||||
display: flex;
|
|
||||||
border: 1px solid #c0c4cc;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 1px 1px 5px #c0c4cc;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dateBox {
|
|
||||||
margin: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.codeBtnBox {
|
|
||||||
|
|
||||||
::v-deep .el-button {
|
|
||||||
display: block;
|
|
||||||
margin: 10px auto;
|
|
||||||
}
|
}
|
||||||
}
|
.step-content {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
// .underline {
|
||||||
|
// // .el-step__title {
|
||||||
|
// // text-decoration: underline
|
||||||
|
// // }
|
||||||
|
// .el-step__title,
|
||||||
|
// .el-step__title.is-process,
|
||||||
|
// .el-step__title.is-finish {
|
||||||
|
// text-decoration: underline;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// .noneUnderline {
|
||||||
|
// .el-step__title {
|
||||||
|
// text-decoration: none;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// .el-step__head.is-process,
|
||||||
|
// .el-step__title.is-process,
|
||||||
|
// .el-step__description.is-process {
|
||||||
|
// color: #428bca;
|
||||||
|
// border-color: #428bca;
|
||||||
|
// }
|
||||||
|
// .el-step__head.is-process .el-step__line {
|
||||||
|
// background-color: #428bca;
|
||||||
|
// }
|
||||||
|
// .el-step__head.is-finish,
|
||||||
|
// .el-step__title.is-finish,
|
||||||
|
// .el-step__description.is-finish {
|
||||||
|
// color: #303133;
|
||||||
|
// border-color: #303133;
|
||||||
|
// }
|
||||||
|
// .el-step__title.is-process,
|
||||||
|
// .el-step__title.is-finish {
|
||||||
|
// text-decoration: none;
|
||||||
|
// }
|
||||||
|
// .el-step__head.is-finish .el-step__line {
|
||||||
|
// background-color: #303133;
|
||||||
|
// }
|
||||||
|
.click_cursor {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue