From 06b2be3bbb48e0275fbd25624c1cce54a7cac2b1 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期二, 20 五月 2025 16:44:34 +0800
Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory

---
 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