irc_web/src/views/reviewers/components/Summarize.vue

357 lines
9.3 KiB
Vue

<template>
<div class="form-container">
<el-card class="box-card">
<div style="width: 80%">
<div class="top">
<span>{{ $t('system:reviewer:tab:Summarize') }}</span>
<el-button
size="small"
type="primary"
v-if="$route.query.ReviewStatus !== '1'"
@click="handleAdd()"
>
{{ $t('common:button:add') }}
</el-button>
</div>
<el-table
ref="educationTbl"
:data="list"
border
class="table"
:loading="loading"
size="small"
>
<el-table-column type="index" width="30" />
<el-table-column
prop="Indication"
:label="$t('system:reviewer:label:Indication')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column
prop="Summarize"
:label="$t('system:reviewer:label:SummarizeZH')"
min-width="55"
show-overflow-tooltip
/>
<el-table-column
prop="SummarizeEn"
:label="$t('system:reviewer:label:SummarizeEN')"
min-width="70"
show-overflow-tooltip
/>
<el-table-column
prop="IsMain"
:label="$t('system:reviewer:label:IsMain')"
show-overflow-tooltip
>
<template slot-scope="scope">
{{ $fd('YesOrNo', scope.row.IsMain) }}
</template>
</el-table-column>
<el-table-column
:label="$t('system:EducationTraining:table:Operation')"
>
<template slot-scope="scope">
<el-button
type="text"
size="small"
:disabled="$route.query.ReviewStatus === '1'"
@click="handleAdd(scope.row)"
>
{{ $t('common:button:edit') }}
</el-button>
<el-button
type="text"
size="small"
:disabled="$route.query.ReviewStatus === '1'"
@click="handleDelete(scope.row)"
>
{{ $t('common:button:delete') }}
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<base-model :config="model_cfg">
<template slot="dialog-body">
<el-form
ref="summarizeFrom"
v-loading="loading"
:rules="rules"
:model="form"
class="demo-ruleForm"
label-width="100px"
>
<el-form-item
:label="$t('system:reviewer:label:Indication')"
prop="Indication"
>
<el-input
v-model="form.Indication"
:placeholder="
$t('curriculumVitae:summarize:form:placeholder:Indication')
"
size="small"
:maxlength="400"
/>
</el-form-item>
<el-form-item prop="IndicationEn">
<el-input
v-model="form.IndicationEn"
:placeholder="
$t('curriculumVitae:summarize:form:placeholder:IndicationEn')
"
size="small"
:maxlength="400"
/>
</el-form-item>
<el-form-item
:label="$t('system:reviewer:label:Summarize')"
prop="Summarize"
>
<el-input
v-model="form.Summarize"
type="textarea"
:rows="10"
:placeholder="
$t('curriculumVitae:summarize:form:placeholder:summarize')
"
size="small"
:maxlength="4000"
/>
</el-form-item>
<el-form-item prop="SummarizeEn">
<el-input
v-model="form.SummarizeEn"
type="textarea"
:rows="10"
:placeholder="
$t('curriculumVitae:summarize:form:placeholder:summarizeEN')
"
size="small"
:maxlength="4000"
/>
</el-form-item>
<el-form-item
prop="IsMain"
:label="$t('system:reviewer:label:IsMain')"
>
<el-switch
v-model="form.IsMain"
:disabled="list.length <= 0 || ISMAIN"
>
</el-switch>
</el-form-item>
</el-form>
</template>
<template slot="dialog-footer">
<el-button size="small" type="primary" @click="handleCancle">
{{ $t('common:button:cancel') }}
</el-button>
<el-button
size="small"
type="primary"
@click="handleSave"
:loading="loading"
>
{{ $t('common:button:save') }}
</el-button>
</template>
</base-model>
</div>
</template>
<script>
import {
addOrUpdateGneralSituation,
getSummarizeInfo,
deleteSummarizeInfo,
} from '@/api/reviewers'
import BaseModel from '@/components/BaseModel'
const defaultForm = () => {
return {
Id: null,
DoctorId: null,
Summarize: null,
SummarizeEn: null,
IsMain: false,
Indication: null,
IndicationEn: null,
}
}
export default {
props: {
reviewerId: {
type: String,
},
},
components: { BaseModel },
data() {
return {
list: [],
loading: false,
ISMAIN: false,
model_cfg: {
visible: false,
showClose: true,
width: '800px',
title: this.$t('system:reviewer:form:SummarizeTitle'),
appendToBody: false,
top: '8vh',
},
form: defaultForm(),
rules: {
Indication: [
{
required: true,
message: 'Please enter Indication',
trigger: 'blur',
},
{
max: 400,
message: this.$t('form:rules:maxLength:400'),
trigger: 'blur',
},
],
IndicationEn: [
{
required: true,
message: 'Please enter Indication',
trigger: 'blur',
},
{
max: 400,
message: this.$t('form:rules:maxLength:400'),
trigger: 'blur',
},
],
Summarize: [
{
max: 4000,
message: this.$t('form:rules:maxLength:4000'),
trigger: 'blur',
},
],
SummarizeEn: [
{
max: 4000,
message: this.$t('form:rules:maxLength:4000'),
trigger: 'blur',
},
],
},
}
},
mounted() {
this.getDetail()
},
methods: {
async handleSave() {
try {
let validate = await this.$refs.summarizeFrom.validate()
if (!validate) return false
this.form.DoctorId = this.$route.query.Id || this.reviewerId
this.loading = true
if (this.$route.query.trialId) {
this.form.TrialId = this.$route.query.trialId
}
if (this.list.length <= 0) {
this.form.IsMain = true
}
let res = await addOrUpdateGneralSituation(this.form)
this.loading = false
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.model_cfg.visible = false
this.getDetail()
}
} catch (err) {
this.loading = false
console.log(err)
}
},
// 获取详情
async getDetail() {
try {
let id = this.$route.query.Id || this.reviewerId
if (!id) return false
this.loading = true
let res = await getSummarizeInfo({
DoctorId: id,
})
this.loading = false
if (res.IsSuccess) {
this.list = res.Result.SummarizeList
}
} catch (err) {
this.loading = false
console.log(err)
}
},
handleCancle() {
this.model_cfg.visible = false
},
handleAdd(row) {
this.form = defaultForm()
this.ISMAIN = false
if (row) {
Object.keys(this.form).forEach((key) => {
this.form[key] = row[key]
})
this.form.Id = row.Id
if (this.form.IsMain) {
this.ISMAIN = true
}
}
if (this.list.length <= 0) {
this.form.IsMain = true
}
this.model_cfg.visible = true
},
async handleDelete(row) {
try {
if (row.IsMain) {
return this.$message.warning(
this.$t('system:reviewer:message:deletedSuccessfully')
)
}
let confirm = await this.$confirm(
this.$t('system:reviewer:confirm:delete')
)
if (!confirm) return false
let data = {
Id: row.Id,
}
this.loading = true
let res = await deleteSummarizeInfo(data)
this.loading = false
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:deletedSuccessfully'))
this.getDetail()
}
} catch (err) {
console.log(err)
this.loading = false
}
},
},
}
</script>
<style lang="scss" scoped>
.basic-form {
.el-input--small {
width: 220px !important;
}
.el-select--small {
width: 220px !important;
}
}
.top {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
margin-bottom: 10px;
}
</style>