From 993e5fd593398926af72af660cb5ed6aba8e4e2b Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期二, 20 五月 2025 16:43:04 +0800 Subject: [PATCH] 对接接口 --- culture/src/views/strain-library/strain-library-manage/add.vue | 224 ++++++++++++++++++++++++++++++++------------------------ 1 files changed, 128 insertions(+), 96 deletions(-) diff --git a/culture/src/views/strain-library/strain-library-manage/add.vue b/culture/src/views/strain-library/strain-library-manage/add.vue index 1894619..0c4dbd1 100644 --- a/culture/src/views/strain-library/strain-library-manage/add.vue +++ b/culture/src/views/strain-library/strain-library-manage/add.vue @@ -1,92 +1,60 @@ <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" - > + <el-form :model="form" :rules="rules" ref="strainForm" label-position="top" class="strain-form"> <div class="form-row three-columns"> - <el-form-item label="菌种编号" prop="strainNo" required> - <el-input v-model="form.strainNo" placeholder="请输入"></el-input> + <el-form-item label="菌种编号" prop="strainCode"> + <el-input v-model="form.strainCode" placeholder="请输入"></el-input> </el-form-item> - <el-form-item label="菌种名称" prop="strainName" required> + <el-form-item label="菌种名称" prop="strainName"> <el-input v-model="form.strainName" placeholder="请输入"></el-input> </el-form-item> - <el-form-item label="菌种来源" prop="source" required> - <el-input v-model="form.source" 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"> - <el-form-item label="鉴定方法" prop="identificationMethod" required> - <el-input v-model="form.identificationMethod" placeholder="请输入"></el-input> + <el-form-item label="鉴定方法" prop="appraisalMethod"> + <el-input v-model="form.appraisalMethod" placeholder="请输入"></el-input> </el-form-item> </div> <div class="form-row"> - <el-form-item label="特征描述" prop="characteristics" required class="full-width"> - <el-input - type="textarea" - v-model="form.characteristics" - :rows="4" - placeholder="请输入" - ></el-input> + <el-form-item label="特征描述" prop="features" class="full-width"> + <el-input type="textarea" v-model="form.features" :rows="4" 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="saveLocation"> + <el-input v-model="form.saveLocation" 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="saveMethod"> + <el-input v-model="form.saveMethod" placeholder="请输入"></el-input> </el-form-item> <div class="form-item-placeholder"></div> </div> <div class="form-row"> <el-form-item label="备注" prop="remarks" class="full-width"> - <el-input - type="textarea" - v-model="form.remarks" - :rows="4" - placeholder="请输入" - ></el-input> + <el-input type="textarea" v-model="form.remark" :rows="4" placeholder="请输入"></el-input> </el-form-item> </div> <div class="end-btn" style="margin-top: 38px"> - <el-button type="primary" @click="handleSubmit">提交</el-button> - <el-button type="primary" @click="handleBatchAdd">批量新增</el-button> - <el-button @click="handleDraft">存草稿</el-button> + <el-button type="primary" @click="handleSubmit(0)">提交</el-button> + <el-button v-if="!$route.query.id" type="primary" @click="handleBatchAdd">批量新增</el-button> + <el-button @click="handleSubmit(1)">存草稿</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" - > + <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-form-item label="批量新增数量" prop="count" + :rules="[{ required: true, message: '请输入批量新增数量', trigger: 'blur' }]"> <el-input v-model.number="batchForm.count" placeholder="请输入" /> </el-form-item> </el-form> @@ -104,18 +72,16 @@ </el-dialog> <!-- 签字确认组件 --> - <SignatureCanvas - :visible.sync="signatureVisible" - @confirm="handleSignatureConfirm" - /> + <SignatureCanvas :visible.sync="signatureVisible" @confirm="handleSignatureConfirm" /> </Card> </template> <script> import SignatureCanvas from '@/components/SignatureCanvas.vue' +import { add, edit, getDetail, addBatch } from './service' export default { - name: 'AddStrain', + name: 'StrainLibraryManageAdd', components: { SignatureCanvas }, @@ -128,60 +94,119 @@ count: '' }, form: { - strainNo: '', + strainCode: '', strainName: '', source: '', - identificationMethod: '', + appraisalMethod: '', characteristics: '', storageLocation: '', preservationMethod: '', - remarks: '' + remark: '' }, rules: { - strainNo: [{ required: true, message: '请输入菌种编号', trigger: 'blur' }], + strainCode: [{ + validator: (rule, value, callback) => { + if (this.currentAction === 'submit' && !value) { + callback(new Error('请输入菌种编号')); + } else { + callback(); + } + }, + trigger: 'change' + }], 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' }], + appraisalMethod: [{ required: true, message: '请输入鉴定方法', trigger: 'blur' }], + features: [{ required: true, message: '请输入特征描述', trigger: 'blur' }], + saveLocation: [{ required: true, message: '请输入保存位置', trigger: 'blur' }], + saveMethod: [{ required: true, message: '请输入菌种保存方法', trigger: 'blur' }] + } + } + }, + activated() { + if (this.$route.query.id) { + getDetail({ id: this.$route.query.id }).then(res => { + this.form = res + }) + } + }, + watch: { + '$route.query.id'() { + this.form = { + strainCode: '', + strainName: '', + source: '', + appraisalMethod: '', + characteristics: '', + storageLocation: '', + preservationMethod: '', + remark: '' } } }, methods: { - handleSubmit() { + handleSubmit(isDraft) { + this.currentAction = 'submit' this.$refs.strainForm.validate((valid) => { if (valid) { - this.currentAction = 'submit' - this.signatureVisible = true + this.form.isDraft = isDraft + if (isDraft == 1) { + //存草稿 + this.handleSignatureConfirm('') + } else { + this.signatureVisible = true + } } }) }, handleBatchAdd() { - this.batchAddDialogVisible = true + this.currentAction = 'batchAdd' + this.$refs.strainForm.validate((valid) => { + if (valid) { + 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) + async handleSignatureConfirm(signatureImage) { + let requestData = { + strainCode: this.form.strainCode, + strainName: this.form.strainName, + strainSource: this.form.strainSource, + appraisalMethod: this.form.appraisalMethod, + features: this.form.features, + saveLocation: this.form.saveLocation, + saveMethod: this.form.saveMethod, + remark: this.form.remark, + signature: signatureImage, + type: 1, + }; + if (this.currentAction === 'batchAdd') { + requestData.batchCount = this.batchForm.count; + } else { + requestData.isDraft = this.form.isDraft + } + try { + if (this.$route.query.id) { + requestData.id = this.$route.query.id; + await edit(requestData); + } else if (this.currentAction === 'batchAdd') { + await addBatch(requestData); + } else { + await add(requestData); + } + this.signatureVisible = false; + this.$router.back(); + this.$message.success('操作成功'); + } catch (error) { + this.$message.error('操作失败'); } } } @@ -205,7 +230,7 @@ &-left { display: flex; align-items: center; - + img { width: 20px; height: 20px; @@ -219,18 +244,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; @@ -241,14 +268,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%; } @@ -300,7 +329,7 @@ padding: 20px; text-align: center; border-bottom: 1px solid #EBEEF5; - + .el-dialog__title { font-size: 16px; font-weight: 600; @@ -334,6 +363,7 @@ color: #606266; font-weight: normal; padding-bottom: 8px; + &::before { color: #F56C6C; } @@ -341,8 +371,9 @@ :deep(.el-input) { width: 100%; + input { - width: 100%; + width: 100%; } } } @@ -350,6 +381,7 @@ .dialog-notice { margin-top: 16px; text-align: center; + p { margin: 0; line-height: 22px; @@ -361,7 +393,7 @@ :deep(.el-dialog__footer) { padding: 0 20px 20px; text-align: center; - + .el-button { width: 180px; height: 36px; @@ -394,4 +426,4 @@ margin: 0; } } -</style> +</style> \ No newline at end of file -- Gitblit v1.7.1