中心调研与中心影像手册的逻辑关系
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
937ab0899e
commit
49b3b056e3
|
|
@ -4358,3 +4358,12 @@ export function setBatchRemoveReadingPlan(data) {
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 更新项目额外json配置
|
||||||
|
export function updateTrialExtralConfig(params, data) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialConfig/updateTrialExtralConfig`,
|
||||||
|
method: 'put',
|
||||||
|
params,
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -106,6 +106,16 @@ export default {
|
||||||
isTrial: {
|
isTrial: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
|
},
|
||||||
|
isExternal: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
ExternalList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => {
|
||||||
|
return []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
|
@ -122,7 +132,8 @@ export default {
|
||||||
rowData: {},
|
rowData: {},
|
||||||
list: [],
|
list: [],
|
||||||
searchData: defaultSearchData(),
|
searchData: defaultSearchData(),
|
||||||
title: this.$t('dictionary:signature:fileList')
|
title: this.$t('dictionary:signature:fileList'),
|
||||||
|
loading: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
|
@ -131,6 +142,16 @@ export default {
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
},
|
||||||
|
isExternal: {
|
||||||
|
handler() {
|
||||||
|
if (this.isExternal) {
|
||||||
|
this.list = this.ExternalList
|
||||||
|
this.rowData = this.list[0] || {}
|
||||||
|
this.title = this.$t('dictionary:signature:view')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -145,6 +166,7 @@ export default {
|
||||||
},
|
},
|
||||||
async getList() {
|
async getList() {
|
||||||
try {
|
try {
|
||||||
|
if (this.isExternal) return
|
||||||
if (!this.SystemDocumentId) return false
|
if (!this.SystemDocumentId) return false
|
||||||
this.loading = true
|
this.loading = true
|
||||||
if (!this.isTrial) {
|
if (!this.isTrial) {
|
||||||
|
|
|
||||||
|
|
@ -18,19 +18,10 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 中心名称 -->
|
<!-- 中心名称 -->
|
||||||
<el-form-item :label="$t('trials:researchForm:form:siteName')" prop="TrialSiteId">
|
<el-form-item :label="$t('trials:researchForm:form:siteName')" prop="TrialSiteId">
|
||||||
<el-select
|
<el-select v-model="form.TrialSiteId" filterable style="width:100%;"
|
||||||
v-model="form.TrialSiteId"
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" @change="handleSiteChange">
|
||||||
filterable
|
<el-option v-for="(item, index) of siteOptions" :key="index" :label="item.TrialSiteAliasName"
|
||||||
style="width:100%;"
|
:value="item.TrialSiteId" />
|
||||||
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory"
|
|
||||||
@change="handleSiteChange"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="(item,index) of siteOptions"
|
|
||||||
:key="index"
|
|
||||||
:label="item.TrialSiteAliasName"
|
|
||||||
:value="item.TrialSiteId"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 中心编号 -->
|
<!-- 中心编号 -->
|
||||||
|
|
@ -42,10 +33,7 @@
|
||||||
<el-input v-model="form.UserName" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
<el-input v-model="form.UserName" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 联系电话 -->
|
<!-- 联系电话 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:researchForm:form:contactorPhone')" prop="Phone">
|
||||||
:label="$t('trials:researchForm:form:contactorPhone')"
|
|
||||||
prop="Phone"
|
|
||||||
>
|
|
||||||
<el-input v-model="form.Phone" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
<el-input v-model="form.Phone" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 联系邮箱 -->
|
<!-- 联系邮箱 -->
|
||||||
|
|
@ -55,75 +43,71 @@
|
||||||
|
|
||||||
<!-- <el-divider /> -->
|
<!-- <el-divider /> -->
|
||||||
<!-- 平均刻盘周期(天) -->
|
<!-- 平均刻盘周期(天) -->
|
||||||
<el-form-item v-if="!notShowFieldList.includes('AverageEngravingCycle')" :label="$t('trials:researchForm:form:engravingCycle')">
|
<el-form-item v-if="!notShowFieldList.includes('AverageEngravingCycle')"
|
||||||
<el-input-number v-model="form.AverageEngravingCycle" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" />
|
:label="$t('trials:researchForm:form:engravingCycle')">
|
||||||
|
<el-input-number v-model="form.AverageEngravingCycle"
|
||||||
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" controls-position="right" :min="0" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 请确认参与本项目影像采集的影像技师具备对应的资质(如:“技师证”,对应设备的“大型设备上岗证”) -->
|
<!-- 请确认参与本项目影像采集的影像技师具备对应的资质(如:“技师证”,对应设备的“大型设备上岗证”) -->
|
||||||
<el-form-item v-if="!notShowFieldList.includes('IsConfirmImagingTechnologist')" :label="$t('trials:researchForm:form:isQualified')">
|
<el-form-item v-if="!notShowFieldList.includes('IsConfirmImagingTechnologist')"
|
||||||
<el-radio-group v-model="form.IsConfirmImagingTechnologist" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory">
|
:label="$t('trials:researchForm:form:isQualified')">
|
||||||
<el-radio
|
<el-radio-group v-model="form.IsConfirmImagingTechnologist"
|
||||||
v-for="item of $d.YesOrNo"
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory">
|
||||||
:key="`IsConfirmImagingTechnologist${item.value}`"
|
<el-radio v-for="item of $d.YesOrNo" :key="`IsConfirmImagingTechnologist${item.value}`" :label="item.value">{{
|
||||||
:label="item.value"
|
item.label }}</el-radio>
|
||||||
>{{ item.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 原因 -->
|
<!-- 原因 -->
|
||||||
<el-form-item
|
<el-form-item v-if="!notShowFieldList.includes('NotConfirmReson') && form.IsConfirmImagingTechnologist === false"
|
||||||
v-if="!notShowFieldList.includes('NotConfirmReson') && form.IsConfirmImagingTechnologist === false"
|
:label="$t('trials:researchForm:form:notQualifiedReason')">
|
||||||
:label="$t('trials:researchForm:form:notQualifiedReason')"
|
<el-input v-model="form.NotConfirmReson" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||||
>
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
||||||
<el-input
|
|
||||||
v-model="form.NotConfirmReson"
|
|
||||||
type="textarea"
|
|
||||||
:autosize="{ minRows: 2, maxRows: 4}"
|
|
||||||
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 研究单位疗效评估人员类型 -->
|
<!-- 研究单位疗效评估人员类型 -->
|
||||||
<el-form-item v-if="!notShowFieldList.includes('EfficacyEvaluatorType')" :label="$t('trials:researchForm:form:staffType')">
|
<el-form-item v-if="!notShowFieldList.includes('EfficacyEvaluatorType')"
|
||||||
<el-radio-group v-model="form.EfficacyEvaluatorType" :disabled="!(state === 0 && userTypeEnumInt === 0)|| isHistory">
|
:label="$t('trials:researchForm:form:staffType')">
|
||||||
<el-radio v-for="item of $d.EfficacyEvaluatorType" :key="`EfficacyEvaluatorType${item.value}`" :label="item.value">{{ item.label }}</el-radio>
|
<el-radio-group v-model="form.EfficacyEvaluatorType"
|
||||||
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory">
|
||||||
|
<el-radio v-for="item of $d.EfficacyEvaluatorType" :key="`EfficacyEvaluatorType${item.value}`"
|
||||||
|
:label="item.value">{{ item.label }}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 是否严格按照研究单位影像手册参数完成图像采集 -->
|
<!-- 是否严格按照研究单位影像手册参数完成图像采集 -->
|
||||||
<el-form-item v-if="!notShowFieldList.includes('IsFollowStudyParameters')">
|
<el-form-item v-if="!notShowFieldList.includes('IsFollowStudyParameters')">
|
||||||
<span slot="label" v-html="$t('trials:researchForm:form:isFollowStudyParam')" />
|
<span slot="label" v-html="$t('trials:researchForm:form:isFollowStudyParam')" />
|
||||||
<el-radio-group v-model="form.IsFollowStudyParameters" :disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory">
|
<el-radio-group v-model="form.IsFollowStudyParameters"
|
||||||
<el-radio v-for="item of $d.YesOrNo" :key="`IsFollowStudyParameters${item.value}`" :label="item.value">{{ item.label }}</el-radio>
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" style="margin-right: 10px;">
|
||||||
|
<el-radio v-for="item of $d.YesOrNo" :key="`IsFollowStudyParameters${item.value}`" :label="item.value">{{
|
||||||
|
item.label }}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
<el-button type="primary" size="small" @click="viewManual">
|
||||||
|
{{ $t('trials:researchForm:button:viewManual') }}
|
||||||
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 不能严格按照研究单位影像手册参数采集图像原因 -->
|
<!-- 不能严格按照研究单位影像手册参数采集图像原因 -->
|
||||||
<el-form-item
|
<el-form-item v-if="!notShowFieldList.includes('NotFollowReson') && !form.IsFollowStudyParameters">
|
||||||
v-if="!notShowFieldList.includes('NotFollowReson') && !form.IsFollowStudyParameters"
|
|
||||||
>
|
|
||||||
<span slot="label" v-html="$t('trials:researchForm:form:notFollowStudyParam')" />
|
<span slot="label" v-html="$t('trials:researchForm:form:notFollowStudyParam')" />
|
||||||
<el-input
|
<el-input v-model="form.NotFollowReson" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||||
v-model="form.NotFollowReson"
|
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory" />
|
||||||
type="textarea"
|
|
||||||
:autosize="{ minRows: 2, maxRows: 4}"
|
|
||||||
:disabled="!(state === 0 && userTypeEnumInt === 0) || isHistory"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<!-- 保存 -->
|
<!-- 保存 -->
|
||||||
<el-button
|
<el-button v-if="state === 0 && userTypeEnumInt === 0 && !isHistory" type="primary" :loading="btnLoading"
|
||||||
v-if="state === 0 && userTypeEnumInt === 0 && !isHistory"
|
size="small" @click="handleSave(false)">
|
||||||
type="primary"
|
|
||||||
:loading="btnLoading"
|
|
||||||
size="small"
|
|
||||||
@click="handleSave(false)"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:save') }}
|
{{ $t('common:button:save') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<attachmentPreview :visible.sync="perview_visible" :isView="true" :isExternal="true" :ExternalList="ExternalList"
|
||||||
|
v-if="perview_visible" />
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getTrialSiteSelect } from '@/api/trials'
|
import { getTrialSiteSelect, getTrialDocumentList } from '@/api/trials'
|
||||||
import { addOrUpdateTrialSiteSurvey } from '@/api/research'
|
import { addOrUpdateTrialSiteSurvey } from '@/api/research'
|
||||||
|
import attachmentPreview from '@/views/dictionary/attachment/components/SignatureTemplate/attachmentPreview'
|
||||||
export default {
|
export default {
|
||||||
name: 'QuestionForm',
|
name: 'QuestionForm',
|
||||||
|
components: { attachmentPreview },
|
||||||
props: {
|
props: {
|
||||||
isHistory: {
|
isHistory: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|
@ -197,10 +181,41 @@ export default {
|
||||||
state: null,
|
state: null,
|
||||||
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
|
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
|
||||||
isShow: false,
|
isShow: false,
|
||||||
notShowFieldList: []
|
notShowFieldList: [],
|
||||||
|
perview_visible: false,
|
||||||
|
ExternalList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
async viewManual() {
|
||||||
|
try {
|
||||||
|
let data = {
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
IsPublish: true,
|
||||||
|
FileTypeCode: 4,
|
||||||
|
IsDeleted: false
|
||||||
|
}
|
||||||
|
let res = await getTrialDocumentList(data)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
const { CurrentPageData } = res.Result
|
||||||
|
if (CurrentPageData.length <= 0) return this.$message.warning(this.$t("trials:researchRecord:ImageManual:message:noImageManual"))
|
||||||
|
this.ExternalList = []
|
||||||
|
CurrentPageData.forEach(item => {
|
||||||
|
let obj = {
|
||||||
|
FilePath: item.Path,
|
||||||
|
FileFormat: 'pdf',
|
||||||
|
Name: item.Name
|
||||||
|
}
|
||||||
|
this.ExternalList.push(obj)
|
||||||
|
});
|
||||||
|
this.perview_visible = true
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
// 保存基本信息
|
// 保存基本信息
|
||||||
handleSave(isAutoCommit) {
|
handleSave(isAutoCommit) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
|
||||||
|
|
@ -6,61 +6,37 @@
|
||||||
{{ $t('trials:researchForm:title:question') }}
|
{{ $t('trials:researchForm:title:question') }}
|
||||||
</h2>
|
</h2>
|
||||||
<!-- <TopLang style="position: fixed;top: 40px;right: 40px" /> -->
|
<!-- <TopLang style="position: fixed;top: 40px;right: 40px" /> -->
|
||||||
<div style="display: flex;justify-content: space-between;">
|
<div style="display: flex;justify-content: space-between;" v-if="!isPreview">
|
||||||
<div>{{ $t('trials:researchForm:title:researchSurveyStatus') }} <el-tag>{{ $fd('ResearchRecord', state) }}</el-tag></div>
|
<div>{{ $t('trials:researchForm:title:researchSurveyStatus') }} <el-tag>{{ $fd('ResearchRecord', state)
|
||||||
|
}}</el-tag></div>
|
||||||
<div>
|
<div>
|
||||||
<!-- 提交 -->
|
<!-- 提交 -->
|
||||||
<el-button
|
<el-button v-if="(state === 0 && userTypeEnumInt === 0)" type="primary" size="small"
|
||||||
v-if="(state === 0 && userTypeEnumInt === 0)"
|
@click="handleSubmit('submit')">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
@click="handleSubmit('submit')"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchForm:button:submit') }}
|
{{ $t('trials:researchForm:button:submit') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 审核通过 -->
|
<!-- 审核通过 -->
|
||||||
<el-button
|
<el-button v-if="(state === 1 && hasPermi(['role:spm', 'role:cpm']))" type="primary" size="small"
|
||||||
v-if="(state === 1 && hasPermi(['role:spm','role:cpm']))"
|
@click="handleSubmit('approve')">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
@click="handleSubmit('approve')"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchForm:button:auditPasses') }}
|
{{ $t('trials:researchForm:button:auditPasses') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 审核通过 -->
|
<!-- 审核通过 -->
|
||||||
<el-button
|
<el-button v-if="(state === 2 && hasPermi(['role:pm', 'role:apm']))" type="primary" size="small"
|
||||||
v-if="(state === 2 && hasPermi(['role:pm','role:apm']))"
|
@click="generateAccount">
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
@click="generateAccount"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchForm:button:auditPasses') }}
|
{{ $t('trials:researchForm:button:auditPasses') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 驳回 -->
|
<!-- 驳回 -->
|
||||||
<el-button
|
<el-button
|
||||||
v-if="((state === 1 && hasPermi(['role:spm','role:cpm'])) || (state === 2 && hasPermi(['role:pm','role:apm'])))"
|
v-if="((state === 1 && hasPermi(['role:spm', 'role:cpm'])) || (state === 2 && hasPermi(['role:pm', 'role:apm'])))"
|
||||||
type="primary"
|
type="primary" size="small" @click="handleReject">
|
||||||
size="small"
|
|
||||||
@click="handleReject"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchForm:button:auditRejected') }}
|
{{ $t('trials:researchForm:button:auditRejected') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 历史记录 -->
|
<!-- 历史记录 -->
|
||||||
<el-button
|
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleHistory">
|
||||||
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
|
<el-button v-if="userTypeEnumInt === 0" type="primary" size="small" @click="handleBack">
|
||||||
v-if="userTypeEnumInt === 0"
|
|
||||||
type="primary"
|
|
||||||
size="small"
|
|
||||||
@click="handleBack"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchForm:button:loginOut') }}
|
{{ $t('trials:researchForm:button:loginOut') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -69,24 +45,26 @@
|
||||||
<div class="center-wrapper">
|
<div class="center-wrapper">
|
||||||
<!-- 基本信息 -->
|
<!-- 基本信息 -->
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
<BaseInfo ref="baseResearchInfo" />
|
<BaseInfo ref="baseResearchInfo" :isPreview="isPreview" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 人员调查 -->
|
<!-- 人员调查 -->
|
||||||
<el-card shadow="hover" class="mt10">
|
<el-card shadow="hover" class="mt10">
|
||||||
<!-- 历史人员 -->
|
<!-- 历史人员 -->
|
||||||
<h4>{{ $t('trials:staffResearch:title:historicalStaff') }}</h4>
|
<h4>{{ $t('trials:staffResearch:title:historicalStaff') }}</h4>
|
||||||
<HistoricalParticipant ref="historicalParticipant" @refreshPage="refreshPage" @getList="initPage" />
|
<HistoricalParticipant ref="historicalParticipant" :isPreview="isPreview" @refreshPage="refreshPage"
|
||||||
|
@getList="initPage" />
|
||||||
<!-- <h4>{{ $t('trials:staffResearch:title:staff') }}</h4> -->
|
<!-- <h4>{{ $t('trials:staffResearch:title:staff') }}</h4> -->
|
||||||
<!-- 新增人员 -->
|
<!-- 新增人员 -->
|
||||||
<h4>{{ $t('trials:staffResearch:title:newStaff') }}</h4>
|
<h4>{{ $t('trials:staffResearch:title:newStaff') }}</h4>
|
||||||
<ParticipantList ref="researchParticipants" @refreshPage="refreshPage" @getList="initPage" />
|
<ParticipantList ref="researchParticipants" :isPreview="isPreview" @refreshPage="refreshPage"
|
||||||
|
@getList="initPage" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 设备调研 -->
|
<!-- 设备调研 -->
|
||||||
<el-card shadow="hover" class="mt10">
|
<el-card shadow="hover" class="mt10">
|
||||||
<h4>{{ $t('trials:equiptResearch:title:equiptResearch') }}</h4>
|
<h4>{{ $t('trials:equiptResearch:title:equiptResearch') }}</h4>
|
||||||
<EquipmentList ref="researchEquipments" />
|
<EquipmentList ref="researchEquipments" :isPreview="isPreview" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 其他信息调研 -->
|
<!-- 其他信息调研 -->
|
||||||
|
|
@ -110,31 +88,17 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog v-if="rejectVisible" :visible.sync="rejectVisible" :close-on-click-modal="false"
|
||||||
v-if="rejectVisible"
|
:title="$t('trials:researchForm:dialogTitle:reject')" width="600px" custom-class="base-dialog-wrapper"
|
||||||
:visible.sync="rejectVisible"
|
append-to-body>
|
||||||
:close-on-click-modal="false"
|
|
||||||
:title="$t('trials:researchForm:dialogTitle:reject')"
|
|
||||||
width="600px"
|
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
append-to-body
|
|
||||||
>
|
|
||||||
<el-form ref="rejectForm" :model="rejectForm" label-width="100px">
|
<el-form ref="rejectForm" :model="rejectForm" label-width="100px">
|
||||||
<div class="base-dialog-body">
|
<div class="base-dialog-body">
|
||||||
<!-- 驳回原因 -->
|
<!-- 驳回原因 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:researchForm:form:rejectReson')" prop="reason" :rules="[
|
||||||
:label="$t('trials:researchForm:form:rejectReson')"
|
{ required: true, message: $t('trials:researchForm:formRule:specify') }
|
||||||
prop="reason"
|
]">
|
||||||
:rules="[
|
<el-input v-model="rejectForm.reason" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"
|
||||||
{ required: true, message: $t('trials:researchForm:formRule:specify')}
|
style="width:100%;" />
|
||||||
]"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="rejectForm.reason"
|
|
||||||
type="textarea"
|
|
||||||
:autosize="{ minRows: 2, maxRows: 4}"
|
|
||||||
style="width:100%;"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
||||||
|
|
@ -152,30 +116,24 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog :visible.sync="historyVisible"
|
||||||
:visible.sync="historyVisible"
|
:custom-class="isFullscreen ? 'full-dialog-container' : 'dialog-container'" :close-on-click-modal="false"
|
||||||
:custom-class="isFullscreen?'full-dialog-container':'dialog-container'"
|
:fullscreen="isFullscreen" :show-close="false">
|
||||||
:close-on-click-modal="false"
|
|
||||||
:fullscreen="isFullscreen"
|
|
||||||
:show-close="false"
|
|
||||||
>
|
|
||||||
<span slot="title" class="dialog-footer">
|
<span slot="title" class="dialog-footer">
|
||||||
<div style="display: flex;flex-direction: row;justify-content: space-between;">
|
<div style="display: flex;flex-direction: row;justify-content: space-between;">
|
||||||
<div>
|
<div>
|
||||||
{{ $t('trials:researchForm:button:historicalRecord') }}
|
{{ $t('trials:researchForm:button:historicalRecord') }}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" style="vertical-align: baseline;cursor: pointer;font-size: 20px;" @click="isFullscreen=!isFullscreen" />
|
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||||
<svg-icon icon-class="dClose" style="cursor: pointer;font-size: 25px;margin-left: 10px;" @click="historyVisible = false" />
|
style="vertical-align: baseline;cursor: pointer;font-size: 20px;" @click="isFullscreen = !isFullscreen" />
|
||||||
|
<svg-icon icon-class="dClose" style="cursor: pointer;font-size: 25px;margin-left: 10px;"
|
||||||
|
@click="historyVisible = false" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
<div style="height:100%;margin:0;">
|
<div style="height:100%;margin:0;">
|
||||||
<HistoricalRecord
|
<HistoricalRecord :trial-id="trialId" :site-id="siteId" :trial-site-survey-id="trialSiteSurveyId" />
|
||||||
:trial-id="trialId"
|
|
||||||
:site-id="siteId"
|
|
||||||
:trial-site-survey-id="trialSiteSurveyId"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
|
@ -194,6 +152,12 @@ import HistoricalRecord from './components/HistoricalRecord'
|
||||||
export default {
|
export default {
|
||||||
name: 'QuestionForm',
|
name: 'QuestionForm',
|
||||||
components: { BaseInfo, HistoricalParticipant, ParticipantList, EquipmentList, TopLang, HistoricalRecord },
|
components: { BaseInfo, HistoricalParticipant, ParticipantList, EquipmentList, TopLang, HistoricalRecord },
|
||||||
|
props: {
|
||||||
|
isPreview: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
trialId: this.$route.query.trialId,
|
trialId: this.$route.query.trialId,
|
||||||
|
|
@ -290,7 +254,7 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).catch(() => { this.loading = false })
|
}).catch(() => { this.loading = false })
|
||||||
}).catch(() => {})
|
}).catch(() => { })
|
||||||
},
|
},
|
||||||
// 生成账号
|
// 生成账号
|
||||||
generateAccount() {
|
generateAccount() {
|
||||||
|
|
@ -325,7 +289,7 @@ export default {
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
}).catch(() => {})
|
}).catch(() => { })
|
||||||
},
|
},
|
||||||
// 驳回
|
// 驳回
|
||||||
handleReject() {
|
handleReject() {
|
||||||
|
|
@ -373,37 +337,44 @@ export default {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
.mt10{
|
|
||||||
|
.mt10 {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
.header-wrapper{
|
|
||||||
|
.header-wrapper {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 20px auto;
|
margin: 20px auto;
|
||||||
}
|
}
|
||||||
.center-wrapper{
|
|
||||||
|
.center-wrapper {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
width: 70%;
|
width: 70%;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
::v-deep.el-card__body{
|
|
||||||
|
::v-deep.el-card__body {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// >>>.el-dialog__body{
|
// >>>.el-dialog__body{
|
||||||
// padding: 10px 20px 20px 20px;
|
// padding: 10px 20px 20px 20px;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
::v-deep.full-dialog-container{
|
::v-deep.full-dialog-container {
|
||||||
.el-dialog__body{
|
.el-dialog__body {
|
||||||
height: calc(100% - 80px);
|
height: calc(100% - 80px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::v-deep.dialog-container{
|
|
||||||
|
::v-deep.dialog-container {
|
||||||
// margin-top: 50px !important;
|
// margin-top: 50px !important;
|
||||||
width:75%;
|
width: 75%;
|
||||||
height:80%;
|
height: 80%;
|
||||||
.el-dialog__body{
|
|
||||||
|
.el-dialog__body {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
height: calc(100% - 80px);
|
height: calc(100% - 80px);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,202 @@
|
||||||
|
<template>
|
||||||
|
<div class="ImageManual">
|
||||||
|
<div class="config">
|
||||||
|
<div style="margin-bottom: 20px;font-weight: bold;">
|
||||||
|
{{ $t("trials:researchRecord:ImageManual:BasicQuestion") }}
|
||||||
|
</div>
|
||||||
|
<el-form size="small" :model="form" style="width:80%">
|
||||||
|
<el-form-item>
|
||||||
|
<el-checkbox v-model="form.AverageEngravingCycle">
|
||||||
|
{{ $t('trials:researchForm:form:engravingCycle') }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-checkbox v-model="form.IsConfirmImagingTechnologist"
|
||||||
|
@change="(val) => handleChange(val, 'IsConfirmImagingTechnologist')">
|
||||||
|
{{ $t('trials:researchForm:form:isQualified') }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-checkbox v-model="form.EfficacyEvaluatorType">
|
||||||
|
{{ $t('trials:researchForm:form:staffType') }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-checkbox v-model="form.IsFollowStudyParameters"
|
||||||
|
@change="(val) => handleChange(val, 'IsFollowStudyParameters')">
|
||||||
|
{{ $t('trials:researchForm:form:isFollowStudyParam') }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div style="margin-bottom: 20px;font-weight: bold;">
|
||||||
|
{{ $t("trials:researchRecord:ImageManual:Precautions") }}
|
||||||
|
</div>
|
||||||
|
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 99 }" placeholder=""
|
||||||
|
v-model="form.ReplaceContent" @input="handleInput" style="width: 70%;" />
|
||||||
|
<div style="text-align: right;margin: 20px;">
|
||||||
|
<el-button type="primary" :loading="loading" size="small" @click="handleSave">
|
||||||
|
{{ $t('common:button:save') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="preview">
|
||||||
|
<researchForm ref="ResearchForm" :trialSiteSurveyId="trialSiteSurveyId" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import researchForm from '@/views/research/components/ResearchForm'
|
||||||
|
import { updateTrialExtralConfig, getTrialExtralConfig, getTrialDocumentList } from "@/api/trials"
|
||||||
|
export default {
|
||||||
|
name: "ImageManual",
|
||||||
|
components: { researchForm },
|
||||||
|
props: {
|
||||||
|
trialSiteSurveyId: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
AverageEngravingCycle: false,
|
||||||
|
IsConfirmImagingTechnologist: false,
|
||||||
|
NotConfirmReson: false,
|
||||||
|
EfficacyEvaluatorType: false,
|
||||||
|
IsFollowStudyParameters: false,
|
||||||
|
NotFollowReson: false,
|
||||||
|
ReplaceContent: '',
|
||||||
|
ReplaceContentCN: '',
|
||||||
|
IsOpenLostVistRead: false,
|
||||||
|
IsSupportQCDownloadImage: false
|
||||||
|
},
|
||||||
|
obj: {
|
||||||
|
AverageEngravingCycle: false,
|
||||||
|
IsConfirmImagingTechnologist: false,
|
||||||
|
NotConfirmReson: false,
|
||||||
|
EfficacyEvaluatorType: false,
|
||||||
|
IsFollowStudyParameters: false,
|
||||||
|
NotFollowReson: false,
|
||||||
|
},
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getInfo()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleChange(val, key) {
|
||||||
|
if (key === 'IsConfirmImagingTechnologist') this.form.NotConfirmReson = val
|
||||||
|
if (key === 'IsFollowStudyParameters') this.form.NotFollowReson = val
|
||||||
|
},
|
||||||
|
handleInput(val) {
|
||||||
|
this.form.ReplaceContentCN = val
|
||||||
|
},
|
||||||
|
async getInfo() {
|
||||||
|
try {
|
||||||
|
let param = {
|
||||||
|
TrialId: this.$route.query.trialId
|
||||||
|
}
|
||||||
|
let res = await getTrialExtralConfig(param)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
Object.keys(this.form).forEach(key => {
|
||||||
|
this.form[key] = true
|
||||||
|
if (key === 'ReplaceContent' || key === 'ReplaceContentCN') this.form[key] = ''
|
||||||
|
})
|
||||||
|
this.form.IsOpenLostVistRead = res.Result.IsOpenLostVistRead
|
||||||
|
this.form.IsSupportQCDownloadImage = res.Result.IsSupportQCDownloadImage
|
||||||
|
if (Array.isArray(res.Result.NotShowFieldList) && res.Result.NotShowFieldList.length > 0) {
|
||||||
|
res.Result.NotShowFieldList.forEach(key => {
|
||||||
|
this.form[key] = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (Array.isArray(res.Result.ModifyFiledList) && res.Result.ModifyFiledList.length > 0) {
|
||||||
|
this.form.ReplaceContent = res.Result.ModifyFiledList[0].ReplaceContent.split('<p>').join('').split('</p>').filter(item => isNaN(item)).join("\n")
|
||||||
|
this.form.ReplaceContentCN = res.Result.ModifyFiledList[0].ReplaceContentCN.split('<p>').join('').split('</p>').filter(item => isNaN(item)).join("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async getTrialDocumentList() {
|
||||||
|
try {
|
||||||
|
let data = {
|
||||||
|
PageIndex: 1,
|
||||||
|
PageSize: 20,
|
||||||
|
TrialId: this.$route.query.trialId,
|
||||||
|
IsPublish: true,
|
||||||
|
FileTypeCode: 4,
|
||||||
|
IsDeleted: false
|
||||||
|
}
|
||||||
|
let res = await getTrialDocumentList(data)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
const { CurrentPageData } = res.Result
|
||||||
|
if (CurrentPageData.length <= 0) this.$message.warning(this.$t("trials:researchRecord:ImageManual:message:noImageManual"))
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async handleSave() {
|
||||||
|
try {
|
||||||
|
let param = {
|
||||||
|
TrialId: this.$route.query.trialId
|
||||||
|
}
|
||||||
|
let data = {
|
||||||
|
IsOpenLostVistRead: this.form.IsOpenLostVistRead,
|
||||||
|
IsSupportQCDownloadImage: this.form.IsSupportQCDownloadImage,
|
||||||
|
ModifyFiledList: [],
|
||||||
|
NotShowFieldList: []
|
||||||
|
}
|
||||||
|
Object.keys(this.obj).forEach(key => {
|
||||||
|
if (!this.form[key]) data.NotShowFieldList.push(key)
|
||||||
|
})
|
||||||
|
let ReplaceContent = ''
|
||||||
|
this.form.ReplaceContent.split("\n").forEach(item => {
|
||||||
|
ReplaceContent += `<p>${item}</p>`
|
||||||
|
})
|
||||||
|
let ReplaceContentCN = ''
|
||||||
|
this.form.ReplaceContentCN.split("\n").forEach(item => {
|
||||||
|
ReplaceContentCN += `<p>${item}</p>`
|
||||||
|
})
|
||||||
|
let obj = {
|
||||||
|
NeedModifyFiled: 'SiteSurveyNote',
|
||||||
|
ReplaceContent: ReplaceContent,
|
||||||
|
ReplaceContentCN: ReplaceContentCN,
|
||||||
|
}
|
||||||
|
data.ModifyFiledList.push(obj)
|
||||||
|
this.loading = true
|
||||||
|
let res = await updateTrialExtralConfig(param, data)
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.$refs.ResearchForm.initPage()
|
||||||
|
if (!data.NotShowFieldList.includes('IsFollowStudyParameters')) this.getTrialDocumentList()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
this.loading = false
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.ImageManual {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.config,
|
||||||
|
.preview {
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config {
|
||||||
|
border-right: 1px solid #EBEEF5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -5,127 +5,62 @@
|
||||||
<el-form :inline="true">
|
<el-form :inline="true">
|
||||||
<!-- 中心 -->
|
<!-- 中心 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:siteId')">
|
<el-form-item :label="$t('trials:researchRecord:table:siteId')">
|
||||||
<el-select
|
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width: 120px">
|
||||||
v-model="searchData.TrialSiteId"
|
<el-option v-for="(item, index) of siteOptions" :key="index" :label="item.TrialSiteCode"
|
||||||
clearable
|
:value="item.TrialSiteId" />
|
||||||
filterable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="(item, index) of siteOptions"
|
|
||||||
:key="index"
|
|
||||||
:label="item.TrialSiteCode"
|
|
||||||
:value="item.TrialSiteId"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 联系人 -->
|
<!-- 联系人 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:contactor')">
|
<el-form-item :label="$t('trials:researchRecord:table:contactor')">
|
||||||
<el-input
|
<el-input v-model="searchData.UserKeyInfo" class="mr" clearable :placeholder="`${$t(
|
||||||
v-model="searchData.UserKeyInfo"
|
'trials:researchRecord:placeholder:contactorInfo'
|
||||||
class="mr"
|
)}`" style="width: 140px" />
|
||||||
clearable
|
|
||||||
:placeholder="`${$t(
|
|
||||||
'trials:researchRecord:placeholder:contactorInfo'
|
|
||||||
)}`"
|
|
||||||
style="width: 140px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 初审人 -->
|
<!-- 初审人 -->
|
||||||
<el-form-item
|
<el-form-item :label="$t('trials:researchRecord:table:preliminaryUser')">
|
||||||
:label="$t('trials:researchRecord:table:preliminaryUser')"
|
<el-input v-model="searchData.PreliminaryUserName" class="mr" clearable style="width: 140px" />
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="searchData.PreliminaryUserName"
|
|
||||||
class="mr"
|
|
||||||
clearable
|
|
||||||
style="width: 140px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 审核人 -->
|
<!-- 审核人 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:ReviewerUser')">
|
<el-form-item :label="$t('trials:researchRecord:table:ReviewerUser')">
|
||||||
<el-input
|
<el-input v-model="searchData.ReviewerUserName" class="mr" clearable style="width: 140px" />
|
||||||
v-model="searchData.ReviewerUserName"
|
|
||||||
class="mr"
|
|
||||||
clearable
|
|
||||||
style="width: 140px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 状态 -->
|
<!-- 状态 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:status')">
|
<el-form-item :label="$t('trials:researchRecord:table:status')">
|
||||||
<el-select
|
<el-select v-model="searchData.State" clearable filterable style="width: 120px">
|
||||||
v-model="searchData.State"
|
<el-option v-for="(item, index) of $d.ResearchRecord" :key="index" :label="item.label"
|
||||||
clearable
|
:value="item.value" />
|
||||||
filterable
|
|
||||||
style="width: 120px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="(item, index) of $d.ResearchRecord"
|
|
||||||
:key="index"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 是否废除 -->
|
<!-- 是否废除 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:isDeleted')">
|
<el-form-item :label="$t('trials:researchRecord:table:isDeleted')">
|
||||||
<el-select
|
<el-select v-model="searchData.IsDeleted" clearable filterable style="width: 120px">
|
||||||
v-model="searchData.IsDeleted"
|
<el-option v-for="item of $d.YesOrNo" v-show="item.raw.ValueCN !== '无'" :key="`IsDeleted${item.value}`"
|
||||||
clearable
|
:label="item.label" :value="item.value" />
|
||||||
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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 更新时间 -->
|
<!-- 更新时间 -->
|
||||||
<el-form-item :label="$t('trials:researchRecord:table:updateTime')">
|
<el-form-item :label="$t('trials:researchRecord:table:updateTime')">
|
||||||
<el-date-picker
|
<el-date-picker v-model="searchData.DateRange" type="daterange" value-format="yyyy-MM-dd" format="yyyy-MM-dd"
|
||||||
v-model="searchData.DateRange"
|
style="width: 250px" />
|
||||||
type="daterange"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
format="yyyy-MM-dd"
|
|
||||||
style="width: 250px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 查询 -->
|
<!-- 查询 -->
|
||||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||||
{{ $t('common:button:search') }}
|
{{ $t('common:button:search') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 重置 -->
|
<!-- 重置 -->
|
||||||
<el-button
|
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||||
type="primary"
|
|
||||||
icon="el-icon-refresh-left"
|
|
||||||
@click="handleReset"
|
|
||||||
>
|
|
||||||
{{ $t('common:button:reset') }}
|
{{ $t('common:button:reset') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 中心人员 -->
|
<!-- 中心人员 -->
|
||||||
<el-button
|
<el-button v-hasPermi="[
|
||||||
v-hasPermi="[
|
'trials:trials-panel:attachments:site-research:summary-record',
|
||||||
'trials:trials-panel:attachments:site-research:summary-record',
|
]" type="primary" icon="el-icon-info" @click="showResearchUser">
|
||||||
]"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-info"
|
|
||||||
@click="showResearchUser"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchRecord:button:questionStaffs') }}
|
{{ $t('trials:researchRecord:button:questionStaffs') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 调查表链接 -->
|
<!-- 调查表链接 -->
|
||||||
<el-button
|
<el-button v-hasPermi="[
|
||||||
v-hasPermi="[
|
'trials:trials-panel:attachments:site-research:questionnaire-link',
|
||||||
'trials:trials-panel:attachments:site-research:questionnaire-link',
|
]" type="primary" icon="el-icon-link" @click="showResearchLink">
|
||||||
]"
|
|
||||||
type="primary"
|
|
||||||
icon="el-icon-link"
|
|
||||||
@click="showResearchLink"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchRecord:button:questionLink') }}
|
{{ $t('trials:researchRecord:button:questionLink') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
@ -133,61 +68,27 @@
|
||||||
|
|
||||||
<template slot="main-container">
|
<template slot="main-container">
|
||||||
<!-- 系统文件列表 -->
|
<!-- 系统文件列表 -->
|
||||||
<el-table
|
<el-table ref="siteResearchList" v-loading="loading" v-adaptive="{ bottomOffset: 60 }" :data="list" stripe
|
||||||
ref="siteResearchList"
|
height="100" @sort-change="handleSortByColumn">
|
||||||
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 type="index" width="50" />
|
||||||
<!-- 中心编号 -->
|
<!-- 中心编号 -->
|
||||||
<el-table-column
|
<el-table-column prop="TrialSiteCode" :label="$t('trials:researchRecord:table:siteId')" min-width="100"
|
||||||
prop="TrialSiteCode"
|
sortable="custom" show-overflow-tooltip />
|
||||||
:label="$t('trials:researchRecord:table:siteId')"
|
|
||||||
min-width="100"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- 中心名称 -->
|
<!-- 中心名称 -->
|
||||||
<el-table-column
|
<el-table-column prop="SiteName" :label="$t('trials:researchRecord:table:siteName')" min-width="100"
|
||||||
prop="SiteName"
|
sortable="custom" show-overflow-tooltip />
|
||||||
:label="$t('trials:researchRecord:table:siteName')"
|
|
||||||
min-width="100"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- 联系人 -->
|
<!-- 联系人 -->
|
||||||
<el-table-column
|
<el-table-column prop="UserName" :label="$t('trials:researchRecord:table:contactor')" min-width="100"
|
||||||
prop="UserName"
|
sortable="custom" show-overflow-tooltip />
|
||||||
:label="$t('trials:researchRecord:table:contactor')"
|
|
||||||
min-width="100"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- 联系电话 -->
|
<!-- 联系电话 -->
|
||||||
<el-table-column
|
<el-table-column prop="Phone" :label="$t('trials:researchRecord:table:contactorPhone')" min-width="100"
|
||||||
prop="Phone"
|
show-overflow-tooltip />
|
||||||
:label="$t('trials:researchRecord:table:contactorPhone')"
|
|
||||||
min-width="100"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- 联系邮箱 -->
|
<!-- 联系邮箱 -->
|
||||||
<el-table-column
|
<el-table-column prop="Email" :label="$t('trials:researchRecord:table:contactorEmail')" min-width="150"
|
||||||
prop="Email"
|
show-overflow-tooltip />
|
||||||
:label="$t('trials:researchRecord:table:contactorEmail')"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
<!-- 初审人 -->
|
<!-- 初审人 -->
|
||||||
<el-table-column
|
<el-table-column prop="preliminaryUser" :label="$t('trials:researchRecord:table:preliminaryUser')"
|
||||||
prop="preliminaryUser"
|
min-width="150" show-overflow-tooltip>
|
||||||
:label="$t('trials:researchRecord:table:preliminaryUser')"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{
|
{{
|
||||||
scope.row.PreliminaryUser
|
scope.row.PreliminaryUser
|
||||||
|
|
@ -197,24 +98,15 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 审核人 -->
|
<!-- 审核人 -->
|
||||||
<el-table-column
|
<el-table-column prop="ReviewerUser" :label="$t('trials:researchRecord:table:ReviewerUser')" min-width="150"
|
||||||
prop="ReviewerUser"
|
show-overflow-tooltip>
|
||||||
:label="$t('trials:researchRecord:table:ReviewerUser')"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.ReviewerUser ? scope.row.ReviewerUser.RealName : '' }}
|
{{ scope.row.ReviewerUser ? scope.row.ReviewerUser.RealName : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 状态 -->
|
<!-- 状态 -->
|
||||||
<el-table-column
|
<el-table-column prop="State" :label="$t('trials:researchRecord:table:status')" min-width="150"
|
||||||
prop="State"
|
sortable="custom" show-overflow-tooltip>
|
||||||
:label="$t('trials:researchRecord:table:status')"
|
|
||||||
min-width="150"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.State === 0" type="primary">{{
|
<el-tag v-if="scope.row.State === 0" type="primary">{{
|
||||||
$fd('ResearchRecord', scope.row.State)
|
$fd('ResearchRecord', scope.row.State)
|
||||||
|
|
@ -231,13 +123,8 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 是否废除 -->
|
<!-- 是否废除 -->
|
||||||
<el-table-column
|
<el-table-column prop="IsDeleted" :label="$t('trials:researchRecord:table:isDeleted')" min-width="100"
|
||||||
prop="IsDeleted"
|
sortable="custom" show-overflow-tooltip>
|
||||||
:label="$t('trials:researchRecord:table:isDeleted')"
|
|
||||||
min-width="100"
|
|
||||||
sortable="custom"
|
|
||||||
show-overflow-tooltip
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
|
<el-tag v-if="scope.row.IsDeleted" type="danger">{{
|
||||||
$fd('YesOrNo', scope.row.IsDeleted)
|
$fd('YesOrNo', scope.row.IsDeleted)
|
||||||
|
|
@ -248,88 +135,59 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 更新时间 -->
|
<!-- 更新时间 -->
|
||||||
<el-table-column
|
<el-table-column prop="UpdateTime" :label="$t('trials:researchRecord:table:updateTime')" min-width="150"
|
||||||
prop="UpdateTime"
|
show-overflow-tooltip sortable="custom" />
|
||||||
:label="$t('trials:researchRecord:table:updateTime')"
|
|
||||||
min-width="150"
|
|
||||||
show-overflow-tooltip
|
|
||||||
sortable="custom"
|
|
||||||
/>
|
|
||||||
<el-table-column width="150">
|
<el-table-column width="150">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- 查看 -->
|
<!-- 查看 -->
|
||||||
<el-button
|
<el-button :disabled="scope.row.State !== 3" circle :title="$t('common:button:view')" icon="el-icon-view"
|
||||||
:disabled="scope.row.State !== 3"
|
@click="handleViewResearchList(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('common:button:view')"
|
|
||||||
icon="el-icon-view"
|
|
||||||
@click="handleViewResearchList(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 审批 -->
|
<!-- 审批 -->
|
||||||
<el-button
|
<el-button v-hasPermi="[
|
||||||
v-hasPermi="[
|
'trials:trials-panel:attachments:site-research:auidt',
|
||||||
'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"
|
||||||
:disabled="scope.row.State === 0 || scope.row.State === 3 || scope.row.IsDeleted"
|
@click="handleViewResearchList(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('trials:researchRecord:action:view')"
|
|
||||||
icon="el-icon-s-check"
|
|
||||||
@click="handleViewResearchList(scope.row)"
|
|
||||||
/>
|
|
||||||
<!-- 废除 -->
|
<!-- 废除 -->
|
||||||
<el-button
|
<el-button v-hasPermi="[
|
||||||
v-hasPermi="[
|
'trials:trials-panel:attachments:site-research:abolish',
|
||||||
'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"
|
||||||
:disabled="scope.row.State !== 0 || scope.row.IsDeleted"
|
@click="handleRepealResearch(scope.row)" />
|
||||||
circle
|
|
||||||
:title="$t('trials:researchRecord:action:abolish')"
|
|
||||||
icon="el-icon-delete"
|
|
||||||
@click="handleRepealResearch(scope.row)"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<!-- 分页组件 -->
|
<!-- 分页组件 -->
|
||||||
<pagination
|
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize"
|
||||||
class="page"
|
@pagination="getList" />
|
||||||
:total="total"
|
|
||||||
:page.sync="searchData.PageIndex"
|
|
||||||
:limit.sync="searchData.PageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 中心人员 -->
|
<!-- 中心人员 -->
|
||||||
<el-dialog
|
<el-dialog v-if="researchUserVisible" :visible.sync="researchUserVisible"
|
||||||
v-if="researchUserVisible"
|
:title="$t('trials:researchRecord:dialogTitle:questionStaff')" custom-class="base-dialog-wrapper"
|
||||||
:visible.sync="researchUserVisible"
|
:fullscreen="true">
|
||||||
:title="$t('trials:researchRecord:dialogTitle:questionStaff')"
|
<div class="base-modal-body" style="border: 1px solid #ccc; padding: 10px">
|
||||||
custom-class="base-dialog-wrapper"
|
|
||||||
:fullscreen="true"
|
|
||||||
>
|
|
||||||
<div
|
|
||||||
class="base-modal-body"
|
|
||||||
style="border: 1px solid #ccc; padding: 10px"
|
|
||||||
>
|
|
||||||
<Users v-if="researchUserVisible" />
|
<Users v-if="researchUserVisible" />
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 调查表 -->
|
<!-- 调查表 -->
|
||||||
<el-dialog
|
<el-dialog v-if="researchInfoVisible" :visible.sync="researchInfoVisible" :fullscreen="true"
|
||||||
v-if="researchInfoVisible"
|
:close-on-click-modal="false">
|
||||||
:visible.sync="researchInfoVisible"
|
|
||||||
:fullscreen="true"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
>
|
|
||||||
<research-form v-if="researchInfoVisible" @refreshPage="getList" />
|
<research-form v-if="researchInfoVisible" @refreshPage="getList" />
|
||||||
</el-dialog>
|
</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">
|
<base-model :config="share_model">
|
||||||
<template slot="dialog-body">
|
<template slot="dialog-body">
|
||||||
|
<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 style="width: 100%; display: flex">
|
||||||
<div class="shareLink">
|
<div class="shareLink">
|
||||||
<!-- <div>
|
<!-- <div>
|
||||||
|
|
@ -341,22 +199,11 @@
|
||||||
<div style="margin: 10px 0">
|
<div style="margin: 10px 0">
|
||||||
<!-- 链接: -->
|
<!-- 链接: -->
|
||||||
{{ $t('trials:researchRecord:label:link') }}
|
{{ $t('trials:researchRecord:label:link') }}
|
||||||
<el-input
|
<el-input ref="shareLink" v-model="shareLink" readonly type="textarea" autosize />
|
||||||
ref="shareLink"
|
|
||||||
v-model="shareLink"
|
|
||||||
readonly
|
|
||||||
type="textarea"
|
|
||||||
autosize
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<!-- 复制链接 -->
|
<!-- 复制链接 -->
|
||||||
<el-button
|
<el-button type="primary" round @click="copyLink" class="shareLinkBtn">
|
||||||
type="primary"
|
|
||||||
round
|
|
||||||
@click="copyLink"
|
|
||||||
class="shareLinkBtn"
|
|
||||||
>
|
|
||||||
{{ $t('trials:researchRecord:button:copyLink') }}
|
{{ $t('trials:researchRecord:button:copyLink') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -391,6 +238,7 @@ import Pagination from '@/components/Pagination'
|
||||||
import Users from './components/users'
|
import Users from './components/users'
|
||||||
import ResearchForm from '@/views/research/form'
|
import ResearchForm from '@/views/research/form'
|
||||||
import BaseModel from '@/components/BaseModel'
|
import BaseModel from '@/components/BaseModel'
|
||||||
|
import ImageManual from './components/ImageManual'
|
||||||
import QRCode from 'qrcodejs2'
|
import QRCode from 'qrcodejs2'
|
||||||
|
|
||||||
const searchDataDefault = () => {
|
const searchDataDefault = () => {
|
||||||
|
|
@ -410,7 +258,7 @@ const searchDataDefault = () => {
|
||||||
}
|
}
|
||||||
export default {
|
export default {
|
||||||
name: 'SiteResearchList',
|
name: 'SiteResearchList',
|
||||||
components: { BaseContainer, Pagination, Users, ResearchForm, BaseModel },
|
components: { BaseContainer, Pagination, Users, ResearchForm, BaseModel, ImageManual },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
searchData: searchDataDefault(),
|
searchData: searchDataDefault(),
|
||||||
|
|
@ -429,6 +277,9 @@ export default {
|
||||||
shareLink: '',
|
shareLink: '',
|
||||||
researchState: this.$d.ResearchRecord,
|
researchState: this.$d.ResearchRecord,
|
||||||
qrcode: null,
|
qrcode: null,
|
||||||
|
|
||||||
|
ImageManualVisible: false,
|
||||||
|
trialSiteSurveyId: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
@ -436,6 +287,10 @@ export default {
|
||||||
this.getSite()
|
this.getSite()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
openImageManual() {
|
||||||
|
if (!this.trialSiteSurveyId) return false
|
||||||
|
this.ImageManualVisible = true
|
||||||
|
},
|
||||||
// 获取系统文件数据
|
// 获取系统文件数据
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
|
|
@ -488,8 +343,7 @@ export default {
|
||||||
copyLink() {
|
copyLink() {
|
||||||
// 中心调研表链接
|
// 中心调研表链接
|
||||||
this.$copyText(
|
this.$copyText(
|
||||||
`${this.$t('trials:researchRecord:message:researchFormLink')}: ${
|
`${this.$t('trials:researchRecord:message:researchFormLink')}: ${this.shareLink
|
||||||
this.shareLink
|
|
||||||
}`
|
}`
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|
@ -564,6 +418,7 @@ export default {
|
||||||
const trialId = this.trialId
|
const trialId = this.trialId
|
||||||
this.shareLink = `${location.protocol}//${location.host}/researchLogin?trialId=${trialId}&lang=${this.$i18n.locale}`
|
this.shareLink = `${location.protocol}//${location.host}/researchLogin?trialId=${trialId}&lang=${this.$i18n.locale}`
|
||||||
this.share_model.visible = true
|
this.share_model.visible = true
|
||||||
|
this.trialSiteSurveyId = this.list[0].Id
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.creatQrCode()
|
this.creatQrCode()
|
||||||
})
|
})
|
||||||
|
|
@ -611,18 +466,21 @@ export default {
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.shareLinkBtn {
|
.shareLinkBtn {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.shareCode {
|
.shareCode {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
border-left: 1px solid #eee;
|
border-left: 1px solid #eee;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.qrCode {
|
.qrCode {
|
||||||
width: 220px;
|
width: 220px;
|
||||||
height: 220px;
|
height: 220px;
|
||||||
|
|
@ -633,6 +491,7 @@ export default {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.codeBtnBox {
|
.codeBtnBox {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue