中心调研问题修改

uat_us^2
wangxiaoshuang 2026-08-12 16:19:15 +08:00
parent 9b596ce0ed
commit 9a748b0c8a
3 changed files with 72 additions and 47 deletions

View File

@ -8,7 +8,7 @@
<!-- <TopLang style="position: fixed;top: 40px;right: 40px" /> --> <!-- <TopLang style="position: fixed;top: 40px;right: 40px" /> -->
<div style="display: flex;justify-content: space-between;" v-if="!isPreview"> <div style="display: flex;justify-content: space-between;" v-if="!isPreview">
<div>{{ $t('trials:researchForm:title:researchSurveyStatus') }} <el-tag>{{ $fd('ResearchRecord', state) <div>{{ $t('trials:researchForm:title:researchSurveyStatus') }} <el-tag>{{ $fd('ResearchRecord', state)
}}</el-tag></div> }}</el-tag></div>
<div> <div>
<!-- 提交 --> <!-- 提交 -->
<el-button v-if="(state === 0 && userTypeEnumInt === 0)" type="primary" size="small" <el-button v-if="(state === 0 && userTypeEnumInt === 0)" type="primary" size="small"
@ -234,7 +234,7 @@ export default {
}, },
computed: { computed: {
isPM() { isPM() {
return this.hasPermi(['role:pm', 'role:spm', 'role:cpm', 'role:apm']) && this.state !== 3 return this.hasPermi(['role:pm', 'role:spm', 'role:cpm', 'role:apm']) && this.state !== 3 && this.IsOnlyUploadFile
} }
}, },
methods: { methods: {

View File

@ -52,21 +52,15 @@
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
<!-- 中心人员 --> <!-- 中心人员 -->
<el-button <el-button v-if="searchData.State === 3"
v-if="searchData.State === 3" v-hasPermi="['trials:trials-panel:attachments:site-research:summary-record']" type="primary"
v-hasPermi="['trials:trials-panel:attachments:site-research:summary-record']" icon="el-icon-info" @click="showResearchUser">
type="primary"
icon="el-icon-info"
@click="showResearchUser">
{{ $t('trials:researchRecord:button:researchData') }} {{ $t('trials:researchRecord:button:researchData') }}
</el-button> </el-button>
<!-- 调查表链接 --> <!-- 调查表链接 -->
<el-button <el-button v-if="searchData.State === 0"
v-if="searchData.State === 0" v-hasPermi="['trials:trials-panel:attachments:site-research:questionnaire-link']" type="primary"
v-hasPermi="['trials:trials-panel:attachments:site-research:questionnaire-link']" 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>
@ -146,22 +140,17 @@
<el-table-column width="150"> <el-table-column width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 查看 --> <!-- 查看 -->
<el-button <el-button v-if="searchData.State === 3" :disabled="scope.row.State !== 3" circle
v-if="searchData.State === 1 || searchData.State === 2 || searchData.State === 3" :title="$t('common:button:view')" icon="el-icon-view" @click="handleViewResearchList(scope.row)" />
:disabled="scope.row.State !== 3"
circle
:title="$t('common:button:view')"
icon="el-icon-view"
@click="handleViewResearchList(scope.row)" />
<!-- 审批 --> <!-- 审批 -->
<el-button <el-button v-if="(searchData.State === 1 || searchData.State === 2) && isAudit"
v-if="searchData.State === 1 || searchData.State === 2"
v-hasPermi="['trials:trials-panel:attachments:site-research:auidt']" v-hasPermi="['trials:trials-panel:attachments:site-research:auidt']"
:disabled="scope.row.State === 0 || scope.row.State === 3 || scope.row.IsDeleted" :disabled="scope.row.State === 0 || scope.row.State === 3 || scope.row.IsDeleted" circle
circle :title="$t('trials:researchRecord:action:view')" icon="el-icon-s-check"
:title="$t('trials:researchRecord:action:view')"
icon="el-icon-s-check"
@click="handleViewResearchList(scope.row)" /> @click="handleViewResearchList(scope.row)" />
<!-- 日志 -->
<el-button circle :title="$t('trials:researchRecord:action:log')" icon="el-icon-tickets"
@click="viewLog(scope.row)" />
<!-- 废除 --> <!-- 废除 -->
<el-button v-if="searchData.State === 0" v-hasPermi="[ <el-button v-if="searchData.State === 0" v-hasPermi="[
'trials:trials-panel:attachments:site-research:abolish', 'trials:trials-panel:attachments:site-research:abolish',
@ -180,24 +169,17 @@
<!-- 中心数据 trials:researchRecord:button:researchData--> <!-- 中心数据 trials:researchRecord:button:researchData-->
<!-- 中心人员 trials:researchRecord:dialogTitle:questionStaff--> <!-- 中心人员 trials:researchRecord:dialogTitle:questionStaff-->
<el-dialog v-if="researchUserVisible" :visible.sync="researchUserVisible" <el-dialog v-if="researchUserVisible" :visible.sync="researchUserVisible"
:title="$t('trials:researchRecord:button:researchData')" custom-class="base-dialog-wrapper" :title="$t('trials:researchRecord:button:researchData')" custom-class="base-dialog-wrapper" :fullscreen="true">
:fullscreen="true">
<div class="base-modal-body" style="border: 1px solid #ccc; padding: 10px"> <div class="base-modal-body" style="border: 1px solid #ccc; padding: 10px">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane <el-tab-pane :label="$t('trials:researchRecord:dialogTitle:questionStaff')" name="first">
:label="$t('trials:researchRecord:dialogTitle:questionStaff')" <Users v-if="activeName === 'first'" />
name="first">
<Users v-if="activeName === 'first'"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane <el-tab-pane label="中心设备" name="second">
label="中心设备" <Equipments v-if="activeName === 'second'" />
name="second">
<Equipments v-if="activeName === 'second'"/>
</el-tab-pane> </el-tab-pane>
<el-tab-pane <el-tab-pane label="基本情况" name="third">
label="基本情况" <Questions v-if="activeName === 'third'" />
name="third">
<Questions v-if="activeName === 'third'"/>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -290,6 +272,26 @@
</template> </template>
</base-model> </base-model>
<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>
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
@ -311,6 +313,7 @@ import ResearchForm from '@/views/research/form'
import BaseModel from '@/components/BaseModel' import BaseModel from '@/components/BaseModel'
import ImageManual from './ImageManual' import ImageManual from './ImageManual'
import QRCode from 'qrcodejs2' import QRCode from 'qrcodejs2'
import LogList from '@/views/research/components/LogList'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
@ -329,7 +332,13 @@ const searchDataDefault = () => {
} }
export default { export default {
name: 'ResearchList', name: 'ResearchList',
components: { BaseContainer, Pagination, Users, Equipments, Questions, ResearchForm, BaseModel, ImageManual }, components: { BaseContainer, Pagination, Users, Equipments, Questions, ResearchForm, BaseModel, ImageManual, LogList },
props: {
isAudit: {
type: Boolean,
default: false
}
},
data() { data() {
return { return {
searchData: searchDataDefault(), searchData: searchDataDefault(),
@ -388,7 +397,9 @@ export default {
}, },
ImageManualVisible: false, ImageManualVisible: false,
trialSiteSurveyId: null, trialSiteSurveyId: null,
activeName: 'first' activeName: 'first',
isFullscreen: false,
logVisible: false
} }
}, },
mounted() { mounted() {
@ -396,6 +407,14 @@ export default {
this.getSite() this.getSite()
}, },
methods: { methods: {
toggleLogFullscreen() {
this.isFullscreen = !this.isFullscreen
},
viewLog(row) {
this.trialSiteSurveyId = row.Id
this.isFullscreen = false
this.logVisible = true
},
async getLinkTimeIsExpired() { async getLinkTimeIsExpired() {
try { try {
let data = { let data = {

View File

@ -16,7 +16,7 @@
@click.native="handleClick(3)" /> @click.native="handleClick(3)" />
</el-steps> </el-steps>
<div class="step-content"> <div class="step-content">
<ResearchList ref="researchList" /> <ResearchList ref="researchList" :isAudit="isAudit" />
</div> </div>
</div> </div>
</BaseContainer> </BaseContainer>
@ -50,10 +50,15 @@ export default {
} }
} }
}, },
computed: {
isAudit() {
return (this.hasPermi(['role:spm', 'role:cpm', 'role:apm']) && this.activeStatus === 1) || (this.hasPermi(['role:pm']) && this.activeStatus === 2)
}
},
mounted() { mounted() {
this.getTrialIsSPMJoin() this.getTrialIsSPMJoin()
if (this.hasPermi(['role:pm'])) this.activeStatus = 2 if (this.hasPermi(['role:pm'])) this.activeStatus = 2
if (this.hasPermi(['role:spm'])) this.activeStatus = 1 if (this.hasPermi(['role:spm', 'role:cpm', 'role:apm'])) this.activeStatus = 1
}, },
methods: { methods: {
async getTrialIsSPMJoin() { async getTrialIsSPMJoin() {
@ -62,6 +67,7 @@ export default {
if (!trialId) return if (!trialId) return
let res = await getTrialIsSPMJoin(trialId) let res = await getTrialIsSPMJoin(trialId)
this.isSPMJoin = res.Result this.isSPMJoin = res.Result
if (!this.isSPMJoin && this.activeStatus === 1) this.activeStatus = 0
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }