From e65a6e0bbdf46c377b0c340259cc69a32a52511b Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期三, 28 五月 2025 17:29:02 +0800 Subject: [PATCH] 对接菌种验证数据资料接口 --- culture/src/views/strain-library/validation/primitive-cell/add.vue | 177 +++++++++++++++++++++++++---------------------------------- 1 files changed, 75 insertions(+), 102 deletions(-) diff --git a/culture/src/views/strain-library/validation/primitive-cell/add.vue b/culture/src/views/strain-library/validation/primitive-cell/add.vue index b7c6d94..473265d 100644 --- a/culture/src/views/strain-library/validation/primitive-cell/add.vue +++ b/culture/src/views/strain-library/validation/primitive-cell/add.vue @@ -6,34 +6,28 @@ <div>新增原始细胞</div> </div> </div> --> - <el-form - :model="form" - :rules="rules" - ref="strainForm" - label-position="top" - class="strain-form" - > - + <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 label="菌种来源" prop="strainSource"> + <el-input v-model="form.strainSource" 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 label="鉴别菌株编号" prop="identifyingStrainCode"> + <el-input v-model="form.identifyingStrainCode" 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 label="鉴别菌株名称" prop="identifyingStrainName"> + <el-input v-model="form.identifyingStrainName" 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 label="验证实验编号" prop="validationExperimentCode"> + <el-input v-model="form.validationExperimentCode" 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 label="实验时间" prop="experimentTime"> + <el-date-picker :prefix-icon="' '" style="width: 290px;" v-model="form.experimentTime" type="date" + placeholder="请选择实验时间"></el-date-picker> </el-form-item> <div class="form-item-placeholder"></div> </div> @@ -43,51 +37,16 @@ </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="是否确认提交该项原始细胞库资料信息?" - /> + <ConfirmStorageDialog :visible.sync="signatureVisible" @confirm="handleSignatureConfirm" name="操作人签字" + text="是否确认提交该项原始细胞库资料信息?" /> </Card> </template> <script> import ConfirmStorageDialog from '@/components/confirm-storage-dialog/index.vue' +import { add, edit, detail } from './service' +import moment from 'moment' export default { name: 'AddprimitiveCell', @@ -96,30 +55,24 @@ }, data() { return { - batchAddDialogVisible: false, signatureVisible: false, currentAction: '', // 'submit' or 'batchAdd' batchForm: { count: '' }, form: { - strainNo: '', - strainName: '', - source: '', - identificationMethod: '', - characteristics: '', - storageLocation: '', - preservationMethod: '', - remarks: '' + strainSource: '', // 菌种来源 + identifyingStrainCode: '', // 鉴别菌株编号 + identifyingStrainName: '', // 鉴别菌株名称 + validationExperimentCode: '', // 验证实验编号 + experimentTime: '' // 实验时间 }, 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' }] + strainSource: [{ required: true, message: '请输入菌种来源', trigger: 'blur' }], + identifyingStrainCode: [{ required: true, message: '请输入鉴别菌株编号', trigger: 'blur' }], + identifyingStrainName: [{ required: true, message: '请输入鉴别菌株名称', trigger: 'blur' }], + validationExperimentCode: [{ required: true, message: '请输入验证实验编号', trigger: 'blur' }], + experimentTime: [{ required: true, message: '请输入实验时间', trigger: 'blur' }] } } }, @@ -132,31 +85,44 @@ } }) }, - 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) + this.signatureVisible = true + this.currentAction = 'draft' }, handleSignatureConfirm(signatureImage) { - this.signatureVisible = false - this.$router.back() + this.signatureVisible = false; + const id = this.$route.query.id || this.$route.params.id; + const submitData = { ...this.form, strainType: 1, isDraft: this.currentAction == 'submit' ? 0 : 1, handleSignature: signatureImage.signature, experimentTime: moment(this.form.experimentTime).format('YYYY-MM-DD') }; 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) + if (id) { + // 编辑 + edit({ ...submitData, id }).then(() => { + this.$router.back(); + }); + } else { + // 新增 + add(submitData).then(() => { + this.$router.back(); + }); + } + } else { + // 存草稿 + add(submitData).then(() => { + this.$router.back(); + }); + } + }, + mounted() { + const id = this.$route.query.id || this.$route.params.id; + if (id) { + // 编辑或详情回显 + detail({ id }).then(res => { + if (res && res.data) { + // 这里根据实际接口返回字段做适配 + Object.assign(this.form, res.data); + } + }); } } } @@ -180,7 +146,7 @@ &-left { display: flex; align-items: center; - + img { width: 20px; height: 20px; @@ -194,18 +160,20 @@ } } } -.end-btn{ + +.end-btn { display: flex; align-items: center; justify-content: center; gap: 10px; - button{ + button { width: 180px; height: 36px; // background: #409EFF; } } + .strain-form { padding: 0 40px; @@ -216,14 +184,16 @@ margin-bottom: 24px; &.three-columns { - .el-form-item, .form-item-placeholder { + + .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%; } @@ -275,7 +245,7 @@ padding: 20px; text-align: center; border-bottom: 1px solid #EBEEF5; - + .el-dialog__title { font-size: 16px; font-weight: 600; @@ -309,6 +279,7 @@ color: #606266; font-weight: normal; padding-bottom: 8px; + &::before { color: #F56C6C; } @@ -316,8 +287,9 @@ :deep(.el-input) { width: 100%; + input { - width: 100%; + width: 100%; } } } @@ -325,6 +297,7 @@ .dialog-notice { margin-top: 16px; text-align: center; + p { margin: 0; line-height: 22px; @@ -336,7 +309,7 @@ :deep(.el-dialog__footer) { padding: 0 20px 20px; text-align: center; - + .el-button { width: 180px; height: 36px; -- Gitblit v1.7.1