<template>
|
<Card>
|
<!-- <div class="header-title">
|
<div class="header-title-left">
|
<img src="@/assets/public/headercard.png" />
|
<div>新增原始细胞</div>
|
</div>
|
</div> -->
|
<el-form
|
:model="form"
|
:rules="rules"
|
ref="strainForm"
|
label-position="top"
|
class="strain-form"
|
>
|
|
<div class="form-row">
|
<el-form-item label="菌种来源" prop="identificationMethod" required>
|
<el-input v-model="form.identificationMethod" placeholder="请输入"></el-input>
|
</el-form-item>
|
</div>
|
<div class="form-row three-columns">
|
<el-form-item label="鉴别菌株编号" prop="storageLocation" required>
|
<el-input v-model="form.storageLocation" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="鉴别菌株名称" prop="preservationMethod" required>
|
<el-input v-model="form.preservationMethod" placeholder="请输入"></el-input>
|
</el-form-item>
|
<div class="form-item-placeholder"></div>
|
</div>
|
<div class="form-row three-columns">
|
<el-form-item label="验证实验编号" prop="storageLocation" required>
|
<el-input v-model="form.storageLocation" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="实验时间" prop="preservationMethod" required>
|
<el-input v-model="form.preservationMethod" placeholder="请输入"></el-input>
|
</el-form-item>
|
<div class="form-item-placeholder"></div>
|
</div>
|
<div class="end-btn" style="margin-top: 400px">
|
<el-button type="primary" @click="handleSubmit">提交</el-button>
|
<el-button @click="handleDraft">存草稿</el-button>
|
</div>
|
</el-form>
|
|
<!-- 批量新增弹窗 -->
|
<el-dialog
|
title="批量新增"
|
:visible.sync="batchAddDialogVisible"
|
width="520px"
|
:close-on-click-modal="false"
|
:close-on-press-escape="false"
|
custom-class="batch-add-dialog"
|
>
|
<div class="dialog-content">
|
<el-form :model="batchForm" ref="batchFormRef" label-position="top" class="batch-form">
|
<el-form-item
|
label="批量新增数量"
|
prop="count"
|
required
|
:rules="[{ required: true, message: '请输入批量新增数量', trigger: 'blur' }]"
|
>
|
<el-input v-model.number="batchForm.count" placeholder="请输入" />
|
</el-form-item>
|
</el-form>
|
<div class="dialog-notice">
|
<p>注意:操作批量新增后,系统会自动生成对应数量的菌种数据,</p>
|
<p>这些菌种的基础信息内容都是一致的,唯独菌种编号内容系统</p>
|
<p>不会自动生成,需要操作员自行编辑</p>
|
</div>
|
</div>
|
<template #footer>
|
<div class="end-btn">
|
<el-button type="primary" @click="handleConfirmBatchAdd">确认新增</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
|
<!-- 签字确认组件 -->
|
<ConfirmStorageDialog
|
:visible.sync="signatureVisible"
|
@confirm="handleSignatureConfirm"
|
name="操作人签字"
|
text="是否确认提交该项原始细胞库资料信息?"
|
/>
|
</Card>
|
</template>
|
|
<script>
|
import ConfirmStorageDialog from '@/components/confirm-storage-dialog/index.vue'
|
|
export default {
|
name: 'AddprimitiveCell',
|
components: {
|
ConfirmStorageDialog
|
},
|
data() {
|
return {
|
batchAddDialogVisible: false,
|
signatureVisible: false,
|
currentAction: '', // 'submit' or 'batchAdd'
|
batchForm: {
|
count: ''
|
},
|
form: {
|
strainNo: '',
|
strainName: '',
|
source: '',
|
identificationMethod: '',
|
characteristics: '',
|
storageLocation: '',
|
preservationMethod: '',
|
remarks: ''
|
},
|
rules: {
|
strainNo: [{ required: true, message: '请输入菌种编号', trigger: 'blur' }],
|
strainName: [{ required: true, message: '请输入菌种名称', trigger: 'blur' }],
|
source: [{ required: true, message: '请输入菌种来源', trigger: 'blur' }],
|
identificationMethod: [{ required: true, message: '请输入鉴定方法', trigger: 'blur' }],
|
characteristics: [{ required: true, message: '请输入特征描述', trigger: 'blur' }],
|
storageLocation: [{ required: true, message: '请输入保存位置', trigger: 'blur' }],
|
preservationMethod: [{ required: true, message: '请输入菌种保存方法', trigger: 'blur' }]
|
}
|
}
|
},
|
methods: {
|
handleSubmit() {
|
this.$refs.strainForm.validate((valid) => {
|
if (valid) {
|
this.currentAction = 'submit'
|
this.signatureVisible = true
|
}
|
})
|
},
|
handleBatchAdd() {
|
this.batchAddDialogVisible = true
|
},
|
handleConfirmBatchAdd() {
|
this.$refs.batchFormRef.validate((valid) => {
|
if (valid) {
|
this.currentAction = 'batchAdd'
|
this.batchAddDialogVisible = false
|
this.signatureVisible = true
|
}
|
})
|
},
|
handleDraft() {
|
// 实现存草稿逻辑
|
console.log('save draft', this.form)
|
},
|
handleSignatureConfirm(signatureImage) {
|
this.signatureVisible = false
|
this.$router.back()
|
if (this.currentAction === 'submit') {
|
// 处理提交逻辑
|
console.log('submit form with signature:', this.form, signatureImage)
|
} else if (this.currentAction === 'batchAdd') {
|
// 处理批量新增逻辑
|
console.log('batch add with signature:', this.batchForm.count, signatureImage)
|
}
|
}
|
}
|
}
|
</script>
|
|
<style scoped lang="less">
|
.add-strain {
|
height: 100%;
|
background: #F5F7FA;
|
|
.form-card {
|
background: #fff;
|
border-radius: 8px;
|
}
|
}
|
|
.header-title {
|
margin-bottom: 24px;
|
|
&-left {
|
display: flex;
|
align-items: center;
|
|
img {
|
width: 20px;
|
height: 20px;
|
margin-right: 8px;
|
}
|
|
div {
|
font-size: 18px;
|
font-weight: bold;
|
color: #303133;
|
}
|
}
|
}
|
.end-btn{
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
gap: 10px;
|
|
button{
|
width: 180px;
|
height: 36px;
|
// background: #409EFF;
|
}
|
}
|
.strain-form {
|
padding: 0 40px;
|
|
.form-row {
|
display: flex;
|
flex-wrap: wrap;
|
gap: 24px;
|
margin-bottom: 24px;
|
|
&.three-columns {
|
.el-form-item, .form-item-placeholder {
|
flex: 1;
|
min-width: 280px;
|
|
@media screen and (max-width: 1200px) {
|
min-width: calc(50% - 12px);
|
}
|
|
@media screen and (max-width: 768px) {
|
min-width: 100%;
|
}
|
}
|
|
.form-item-placeholder {
|
@media screen and (max-width: 1200px) {
|
display: none;
|
}
|
}
|
}
|
|
.el-form-item {
|
margin-bottom: 0;
|
|
&.full-width {
|
width: 100%;
|
}
|
}
|
}
|
|
:deep(.el-form-item__label) {
|
font-weight: normal;
|
color: #606266;
|
padding-bottom: 8px;
|
line-height: 20px;
|
}
|
|
:deep(.el-form-item__content) {
|
line-height: unset;
|
}
|
|
:deep(.el-input__inner) {
|
border-radius: 4px;
|
height: 36px;
|
line-height: 36px;
|
}
|
|
:deep(.el-textarea__inner) {
|
border-radius: 4px;
|
padding: 8px 12px;
|
min-height: 120px;
|
}
|
}
|
|
.batch-add-dialog {
|
:deep(.el-dialog__header) {
|
margin: 0;
|
padding: 20px;
|
text-align: center;
|
border-bottom: 1px solid #EBEEF5;
|
|
.el-dialog__title {
|
font-size: 16px;
|
font-weight: 600;
|
color: #303133;
|
}
|
}
|
|
:deep(.el-dialog__body) {
|
padding: 20px;
|
}
|
|
.dialog-content {
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
}
|
|
.batch-form {
|
width: 100%;
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
|
:deep(.el-form-item) {
|
width: 320px;
|
margin-bottom: 0;
|
}
|
|
:deep(.el-form-item__label) {
|
width: 100%;
|
color: #606266;
|
font-weight: normal;
|
padding-bottom: 8px;
|
&::before {
|
color: #F56C6C;
|
}
|
}
|
|
:deep(.el-input) {
|
width: 100%;
|
input {
|
width: 100%;
|
}
|
}
|
}
|
|
.dialog-notice {
|
margin-top: 16px;
|
text-align: center;
|
p {
|
margin: 0;
|
line-height: 22px;
|
color: #606266;
|
font-size: 14px;
|
}
|
}
|
|
:deep(.el-dialog__footer) {
|
padding: 0 20px 20px;
|
text-align: center;
|
|
.el-button {
|
width: 180px;
|
height: 36px;
|
padding: 0;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
font-size: 14px;
|
border-radius: 4px;
|
margin: 0;
|
}
|
}
|
}
|
|
.end-btn {
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
gap: 10px;
|
|
:deep(.el-button) {
|
width: 180px;
|
height: 36px;
|
padding: 0;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
font-size: 14px;
|
border-radius: 4px;
|
margin: 0;
|
}
|
}
|
</style>
|