From e950c38ba82e5e6bc8b0c50c35e5dbb6a180165a Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期二, 20 五月 2025 16:43:06 +0800
Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory

---
 culture/src/views/strain-library/validation/primitive-cell/add.vue |  372 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 372 insertions(+), 0 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
new file mode 100644
index 0000000..b7c6d94
--- /dev/null
+++ b/culture/src/views/strain-library/validation/primitive-cell/add.vue
@@ -0,0 +1,372 @@
+<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>

--
Gitblit v1.7.1