<template>
|
<el-dialog title="体检信息" append-to-body :visible.sync="dialogVisible" width="50%" @close="handleClose">
|
<el-form
|
ref="physicalExamForm"
|
:model="formData"
|
:rules="rules"
|
label-position="right"
|
label-width="120px"
|
>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="姓名" prop="empName">
|
<el-input v-model="formData.empName" :disabled="empInfoDisabled">
|
<el-button v-if="!empInfoDisabled" slot="append" icon="el-icon-search" @click="$emit('select-employee')" />
|
</el-input>
|
</el-form-item>
|
<el-form-item label="身份证号码" prop="certificateNumb">
|
<el-input v-model="formData.certificateNumb" :disabled="empInfoDisabled" />
|
</el-form-item>
|
<el-form-item label="性别" prop="sex">
|
<el-select v-model="formData.sex" placeholder="请选择性别" :disabled="empInfoDisabled">
|
<el-option
|
v-for="dict in sexOptions"
|
:key="dict.dicItemCode"
|
:label="dict.dicItemName"
|
:value="dict.dicItemCode"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="体检医院" prop="hospital">
|
<el-input v-model="formData.hospital" />
|
</el-form-item>
|
<el-form-item label="体检类型" prop="physicalExamType">
|
<el-select v-model="formData.physicalExamType" placeholder="请选择体检类型">
|
<el-option
|
v-for="dict in physicalExamTypeOptions"
|
:key="dict.dicItemCode"
|
:label="dict.dicItemName"
|
:value="dict.dicItemCode"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="转氨酶" prop="transaminase">
|
<el-input v-model="formData.transaminase" />
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="员工编号" prop="empNumb">
|
<el-input v-model="formData.empNumb" :disabled="empInfoDisabled" />
|
</el-form-item>
|
<el-form-item label="部门(护卫点)" prop="allDeptName">
|
<el-input v-model="formData.allDeptName" :disabled="empInfoDisabled" />
|
</el-form-item>
|
<el-form-item label="岗位" prop="jobName">
|
<el-input v-model="formData.jobName" :disabled="empInfoDisabled" />
|
</el-form-item>
|
<el-form-item label="体检日期" prop="physicalExamDate">
|
<el-date-picker
|
v-model="formData.physicalExamDate"
|
value-format="yyyy-MM-dd"
|
type="date"
|
placeholder="选择体检日期"
|
/>
|
</el-form-item>
|
<el-form-item label="血压" prop="bloodPressure">
|
<el-input v-model="formData.bloodPressure" />
|
</el-form-item>
|
<el-form-item label="心电图" prop="ecg">
|
<el-select v-model="formData.ecg" placeholder="ecg">
|
<el-option
|
v-for="dict in ecgOptions"
|
:key="dict.dicItemCode"
|
:label="dict.dicItemName"
|
:value="dict.dicItemCode"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="24">
|
<el-form-item label="体检结论" prop="conclusion">
|
<el-input v-model="formData.conclusion" />
|
</el-form-item>
|
<el-form-item label="复查记录" prop="reviewRecord">
|
<el-input v-model="formData.reviewRecord" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="24">
|
<el-form-item label="备注" prop="remark">
|
<el-input v-model="formData.remark" type="textarea" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="handleSave">保 存</el-button>
|
<el-button v-if="isAdd && showContinueButton" type="primary" @click="handleSaveContinue">保存并继续新增</el-button>
|
</div>
|
</el-dialog>
|
</template>
|
|
<script>
|
export default {
|
name: 'PhysicalExamEdit',
|
props: {
|
visible: {
|
type: Boolean,
|
default: false
|
},
|
isAdd: {
|
type: Boolean,
|
default: true
|
},
|
editData: {
|
type: Object,
|
default: () => ({})
|
},
|
sexOptions: {
|
type: Array,
|
default: () => []
|
},
|
physicalExamTypeOptions: {
|
type: Array,
|
default: () => []
|
},
|
ecgOptions: {
|
type: Array,
|
default: () => []
|
},
|
showContinueButton: {
|
type: Boolean,
|
default: false
|
},
|
empInfoDisabled: {
|
type: Boolean,
|
default: true
|
}
|
},
|
data() {
|
return {
|
formData: this.getEmptyForm(),
|
rules: {
|
physicalExamDate: [{ required: true, message: '请选择体检日期', trigger: 'change' }],
|
hospital: [{ required: true, message: '请输入体检医院', trigger: 'blur' }, {
|
max: 64, message: '长度不超过64个字符', trigger: 'blur'
|
}],
|
physicalExamType: [{ required: true, message: '请选择体检类型', trigger: 'change' }],
|
bloodPressure: [{ required: true, message: '请输入血压', trigger: 'blur' }, {
|
max: 40, message: '长度不超过40个字符', trigger: 'blur'
|
}],
|
transaminase: [{ required: true, message: '请输入转氨酶', trigger: 'blur' }, {
|
max: 40, message: '长度不超过40个字符', trigger: 'blur'
|
}],
|
ecg: [{ required: true, message: '请选择心电图', trigger: 'change' }, {
|
max: 16, message: '长度不超过16个字符', trigger: 'blur'
|
}],
|
conclusion: [{ required: true, message: '请输入体检结论', trigger: 'blur' }, {
|
max: 128, message: '长度不超过128个字符', trigger: 'blur'
|
}],
|
reviewRecord: [{ max: 128, message: '长度不超过128个字符', trigger: 'blur' }],
|
remark: [{ max: 512, message: '长度不超过512个字符', trigger: 'blur' }]
|
}
|
}
|
},
|
computed: {
|
dialogVisible: {
|
get() {
|
return this.visible
|
},
|
set(val) {
|
this.$emit('update:visible', val)
|
}
|
}
|
},
|
watch: {
|
visible(val) {
|
if (val && !this.isAdd && this.editData) {
|
this.formData = { ...this.getEmptyForm(), ...this.editData }
|
} else if (val && this.isAdd) {
|
this.formData = { ...this.getEmptyForm(), ...this.editData }
|
}
|
},
|
editData: {
|
deep: true,
|
handler(val) {
|
if (this.visible && val) {
|
this.formData = { ...this.formData, ...val }
|
}
|
}
|
}
|
},
|
methods: {
|
getEmptyForm() {
|
return {
|
physicalExamId: '',
|
empId: '',
|
empNumb: '',
|
empName: '',
|
certificateNumb: '',
|
sex: '',
|
deptId: '',
|
deptName: '',
|
allDeptName: '',
|
JobId: '',
|
jobName: '',
|
hospital: '',
|
physicalExamDate: '',
|
physicalExamType: '',
|
bloodPressure: '',
|
transaminase: '',
|
ecg: '',
|
conclusion: '',
|
reviewRecord: '',
|
remark: '',
|
empStatus: 0,
|
version: ''
|
}
|
},
|
handleSave() {
|
this.$refs.physicalExamForm.validate((valid) => {
|
if (valid) {
|
if (this.isAdd) {
|
this.$post('hr/empPhysicalExam', { ...this.formData }).then(() => {
|
this.$message({ message: this.$t('tips.createSuccess'), type: 'success' })
|
this.dialogVisible = false
|
this.$emit('success')
|
})
|
} else {
|
this.$put('hr/empPhysicalExam', { ...this.formData }).then(() => {
|
this.$message({ message: this.$t('tips.updateSuccess'), type: 'success' })
|
this.dialogVisible = false
|
this.$emit('success')
|
})
|
}
|
}
|
})
|
},
|
handleSaveContinue() {
|
this.$refs.physicalExamForm.validate((valid) => {
|
if (valid && this.isAdd) {
|
this.formData.delFlag = '2'
|
this.$post('hr/empPhysicalExam', { ...this.formData }).then(() => {
|
this.$message({
|
message: this.$t('tips.createSuccess'),
|
type: 'success'
|
})
|
this.$refs.physicalExamForm.resetFields()
|
this.formData = this.getEmptyForm()
|
this.$emit('continue')
|
})
|
}
|
})
|
},
|
handleClose() {
|
if (this.$refs.physicalExamForm) {
|
this.$refs.physicalExamForm.resetFields()
|
}
|
this.formData = this.getEmptyForm()
|
this.$emit('close')
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
</style>
|