262 lines
7.6 KiB
Plaintext
262 lines
7.6 KiB
Plaintext
<template>
|
|
<el-form
|
|
v-if="questions.length>0"
|
|
ref="globalReviewForm"
|
|
v-loading="loading"
|
|
:model="form"
|
|
size="small"
|
|
label-width="150"
|
|
>
|
|
<div class="base-dialog-body">
|
|
<!-- 是否同意访视整体评估 GlobalAnswerType:2-->
|
|
<el-form-item
|
|
:label="agreeOrNot.QuestionName"
|
|
>
|
|
<el-switch
|
|
v-model="form[agreeOrNot.GlobalAnswerType]"
|
|
active-value="1"
|
|
inactive-value="0"
|
|
@change="handleAgreeOrNotChange(agreeOrNot.GlobalAnswerType)"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item
|
|
v-for="qs in questions"
|
|
:key="`${qs.QuestionId}${qs.QuestionName}`"
|
|
:label="qs.QuestionName"
|
|
:prop="!qs.QuestionId?String(qs.GlobalAnswerType):qs.QuestionId"
|
|
:rules="[
|
|
{ required:parseInt(form[agreeOrNot.GlobalAnswerType]) !== 1,message: '请注明', trigger: ['change']},
|
|
]"
|
|
>
|
|
<!-- 裁判问题 GlobalAnswerType:0 -->
|
|
<template v-if="qs.GlobalAnswerType === 0">
|
|
<!-- 下拉框 -->
|
|
<el-select
|
|
v-if="qs.Type==='select'"
|
|
v-model="form[!qs.QuestionId?qs.GlobalAnswerType:qs.QuestionId]"
|
|
style="width:100%;"
|
|
:disabled="parseInt(form[agreeOrNot.GlobalAnswerType]) === 1"
|
|
>
|
|
<template v-if="qs.TypeValue">
|
|
<el-option
|
|
v-for="val in qs.TypeValue.split('|')"
|
|
:key="val"
|
|
:label="val"
|
|
:value="val"
|
|
:disabled="getBeforeAnswer(qs.QuestionName) === val"
|
|
/>
|
|
</template>
|
|
<template v-if=" qs.DictionaryCode">
|
|
<el-option
|
|
v-for="item of $d[qs.DictionaryCode]"
|
|
:key="item.id"
|
|
:value="item.value"
|
|
:label="item.label"
|
|
:disabled="getBeforeAnswer(qs.QuestionName) === item.value"
|
|
/>
|
|
</template>
|
|
|
|
</el-select>
|
|
<!-- 单选 -->
|
|
<el-radio-group
|
|
v-if="qs.Type==='radio'"
|
|
v-model="form[!qs.QuestionId?qs.GlobalAnswerType:qs.QuestionId]"
|
|
:disabled="parseInt(form[agreeOrNot.GlobalAnswerType]) === 1"
|
|
>
|
|
<el-radio
|
|
v-for="val in qs.TypeValue.split('|')"
|
|
:key="val"
|
|
:label="val"
|
|
:disabled="getBeforeAnswer(qs.QuestionName) === val"
|
|
>
|
|
{{ val }}
|
|
</el-radio>
|
|
</el-radio-group>
|
|
</template>
|
|
|
|
<!-- 评估更新类型 GlobalAnswerType:3 -->
|
|
<template v-if="qs.GlobalAnswerType === 3">
|
|
<!-- 下拉框 -->
|
|
<el-select
|
|
v-model="form[!qs.QuestionId?qs.GlobalAnswerType:qs.QuestionId]"
|
|
style="width:100%;"
|
|
:disabled="parseInt(form[agreeOrNot.GlobalAnswerType]) === 1"
|
|
>
|
|
<el-option
|
|
v-for="val in assessTypeList"
|
|
:key="val.Code"
|
|
:label="val.ValueCN"
|
|
:value="val.Code"
|
|
:disabled="getBeforeAnswer(qs.QuestionName) === val.Code"
|
|
/>
|
|
</el-select>
|
|
</template>
|
|
<!-- 全局阅片备注 GlobalAnswerType:1 -->
|
|
<el-input
|
|
v-if="qs.GlobalAnswerType === 1"
|
|
v-model="form[!qs.QuestionId?qs.GlobalAnswerType:qs.QuestionId]"
|
|
type="textarea"
|
|
:autosize="{ minRows: 2, maxRows: 4}"
|
|
:disabled="parseInt(form[agreeOrNot.GlobalAnswerType]) === 1"
|
|
/>
|
|
</el-form-item>
|
|
</div>
|
|
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
|
<el-form-item style="text-align:right;">
|
|
<el-button size="small" type="primary" @click="handleClose">
|
|
{{ $t('common:button:cancel') }}
|
|
</el-button>
|
|
<el-button size="small" type="primary" @click="handleSave">
|
|
{{ $t('common:button:save') }}
|
|
</el-button>
|
|
</el-form-item>
|
|
</div>
|
|
</el-form>
|
|
</template>
|
|
<script>
|
|
import { saveGlobalReadingInfo } from '@/api/trials'
|
|
export default {
|
|
name: 'EditGlobalForm',
|
|
props: {
|
|
globalTaskId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
visitTaskId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
questionList: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
assessTypeList: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
subjectId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
trialId: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
beforeQuestionList: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
globalUpdateType: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
agreeOrNot: {
|
|
type: Object,
|
|
default() {
|
|
return {}
|
|
}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
questions: [],
|
|
form: {},
|
|
loading: false
|
|
}
|
|
},
|
|
mounted() {
|
|
this.questionList.map(v => {
|
|
var answer = ''
|
|
if (v.DictionaryCode) {
|
|
answer = v.Answer ? parseInt(v.Answer) : null
|
|
} else {
|
|
answer = v.Answer
|
|
}
|
|
if (!v.QuestionId) {
|
|
this.$set(this.form, v.GlobalAnswerType, answer)
|
|
} else {
|
|
this.$set(this.form, v.QuestionId, answer)
|
|
}
|
|
})
|
|
this.questions = this.questionList
|
|
this.$set(this.form, this.agreeOrNot.GlobalAnswerType, this.agreeOrNot.Answer)
|
|
},
|
|
methods: {
|
|
handleSave() {
|
|
this.$refs.globalReviewForm.validate(valid => {
|
|
if (!valid) return
|
|
this.loading = true
|
|
var questionList = []
|
|
var reg = new RegExp(/^[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}$/)
|
|
for (const i in this.form) {
|
|
if (reg.test(i)) {
|
|
questionList.push({
|
|
questionId: i,
|
|
visitTaskId: this.visitTaskId,
|
|
answer: this.form[i]
|
|
})
|
|
} else {
|
|
questionList.push({
|
|
questionId: '',
|
|
visitTaskId: this.visitTaskId,
|
|
globalAnswerType: parseInt(i),
|
|
answer: this.form[i]
|
|
})
|
|
}
|
|
}
|
|
var param = {
|
|
globalTaskId: this.globalTaskId,
|
|
subjectId: this.subjectId,
|
|
trialId: this.trialId,
|
|
questionList: questionList
|
|
}
|
|
saveGlobalReadingInfo(param).then(res => {
|
|
this.loading = false
|
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
|
this.$emit('getList')
|
|
this.$emit('close')
|
|
}).catch(() => {
|
|
this.loading = false
|
|
})
|
|
})
|
|
},
|
|
handleClose() {
|
|
this.$emit('close')
|
|
},
|
|
handleAgreeOrNotChange(k) {
|
|
var agreeOrNot = parseInt(this.form[k])
|
|
if (agreeOrNot === 1) {
|
|
for (const i in this.form) {
|
|
if (i !== String(k)) {
|
|
this.form[i] = ''
|
|
}
|
|
}
|
|
}
|
|
},
|
|
getBeforeAnswer(qs) {
|
|
var i = this.beforeQuestionList.findIndex(item => item.QuestionName === qs)
|
|
if (i > -1 && this.beforeQuestionList[i].Answer) {
|
|
var answer = null
|
|
if (this.beforeQuestionList[i].DictionaryCode) {
|
|
answer = parseInt(this.beforeQuestionList[i].Answer)
|
|
} else {
|
|
answer = this.beforeQuestionList[i].Answer
|
|
}
|
|
return answer
|
|
} else {
|
|
return ''
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|