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/breeding-record/add.vue |  478 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 478 insertions(+), 0 deletions(-)

diff --git a/culture/src/views/strain-library/breeding-record/add.vue b/culture/src/views/strain-library/breeding-record/add.vue
new file mode 100644
index 0000000..4fc6c3f
--- /dev/null
+++ b/culture/src/views/strain-library/breeding-record/add.vue
@@ -0,0 +1,478 @@
+<template>
+  <div>
+    <Card>
+      <el-form ref="form" :model="form" :rules="rules" inline label-position="top">
+        <div class="header-title" style="width: 100%">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>来源类型</div>
+          </div>
+        </div>
+        <div class="flex" style="margin-bottom: 20px">
+          <div class="tabs">
+            <div :class="{ active: activeTab === 'strain' }" @click="activeTab = 'strain'">
+              来源菌株
+            </div>
+            <div :class="{ active: activeTab === 'material' }" @click="activeTab = 'material'">
+              来源物资
+            </div>
+          </div>
+        </div>
+        <!-- 来源菌株 -->
+        <el-row v-if="activeTab === 'strain'" :gutter="10">
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+            <el-form-item label="菌株编号" prop="strainCode" required>
+              <el-input v-model="form.strainCode" class="w-380" placeholder="请输入菌株编号" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+            <el-form-item label="菌株名称" prop="strainName" required>
+              <el-input v-model="form.strainName" class="w-380" placeholder="请输入菌株名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
+            <el-form-item label="培养基配方" prop="mediumFormula" required>
+              <el-input v-model="form.mediumFormula" class="w-380" placeholder="请输入培养基配方" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <!-- 来源物资 -->
+        <el-row v-if="activeTab === 'material'" :gutter="10">
+          <el-col :span="24">
+            <el-form-item label="来源物资、时间及批号" prop="materialCode" required>
+              <el-input v-model="form.materialCode" placeholder="请输入物资编号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="培养基配方" prop="materialName" required>
+              <el-input v-model="form.materialName" placeholder="请输入物资名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="分离菌落编号" prop="materialDescription" required>
+              <el-input v-model="form.materialDescription" placeholder="请输入物资描述" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="header-title" style="margin-top: 20px;">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>培养条件</div>
+          </div>
+        </div>
+        <el-row :gutter="10">
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="培养基" prop="strainCode" required>
+              <el-input v-model="form.strainCode" class="w-380" placeholder="请输入培养基" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="培养温度" prop="strainName" required>
+              <el-input v-model="form.strainName" class="w-380" placeholder="请输入培养温度" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="需氧类型" prop="mediumFormula" required>
+              <el-input v-model="form.mediumFormula" class="w-380" placeholder="请输入需氧类型" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="培养时间" prop="mediumFormula" required>
+              <el-input v-model="form.mediumFormula" class="w-380" placeholder="请输入培养时间" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <div class="header-title" style="margin-top: 20px;">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>一、培养基分离记录</div>
+          </div>
+          <div class="header-title-right">
+            <el-button @click="showSeparationDialog = true" class="el-icon-circle-plus-outline" type="primary">
+              新增培养皿分离记录</el-button>
+          </div>
+        </div>
+        <Table :height="null" :queryForm="queryForm" :total="0">
+          <template>
+            <el-table-column prop="name" label="培养皿序号" />
+            <el-table-column prop="age" label="分离菌落编号" />
+            <el-table-column prop="age" label="接种操作人签字" />
+            <el-table-column prop="age" label="操作时间" />
+            <el-table-column prop="address" label="操作">
+              <template slot-scope="scope"><el-button type="text"
+                @click="handleEdit(scope.row)">编辑</el-button>
+                <el-button type="text"
+                @click="handleEdit(scope.row)">删除</el-button></template>
+            </el-table-column>
+          </template>
+        </Table>
+        <div class="header-title" style="margin-top: 20px;">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>二、培养皿生物学形态观察记录</div>
+          </div>
+          <div class="header-title-right">
+            <el-button @click="showObservationDialog = true" class="el-icon-circle-plus-outline" type="primary">
+              新增观察记录</el-button>
+          </div>
+        </div>
+        <Table :height="null" :queryForm="queryForm" :total="0">
+          <template>
+            <el-table-column prop="age" label="分离菌落编号" />
+            <el-table-column prop="age" label="形状强壮度排名" />
+            <el-table-column prop="address" label="操作">
+              <template slot-scope="scope"><el-button type="text"
+                @click="handleEdit(scope.row)">形态记录</el-button>
+                <el-button type="text"
+                @click="handleEdit(scope.row)">删除</el-button></template>
+            </el-table-column>
+          </template>
+        </Table>
+        <div class="header-title" style="margin-top: 20px;">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>三、接种斜面记录</div>
+          </div>
+          <div class="header-title-right">
+            <el-button @click="showInoculationDialog = true" class="el-icon-circle-plus-outline" type="primary">
+              新增斜面记录</el-button>
+          </div>
+        </div>
+        <Table :height="null" :queryForm="queryForm" :total="0">
+          <template>
+            <el-table-column prop="age" label="分离菌落编号" />
+            <el-table-column prop="age" label="接种斜面编号" />
+            <el-table-column prop="age" label="接种操作人" />
+            <el-table-column prop="age" label="接种操作人签字" />
+            <el-table-column prop="age" label="接种操作时间" />
+            <el-table-column prop="age" label="入库/废弃" />
+            <el-table-column prop="age" label="入库总数(只)" />
+            <el-table-column prop="age" label="菌种保藏人签字" />
+            <el-table-column prop="age" label="入库保藏/废弃时间" />
+
+            <el-table-column prop="address" label="操作">
+              <template slot-scope="scope">
+                <el-button type="text"
+                @click="handleEdit(scope.row)">删除</el-button></template>
+            </el-table-column>
+          </template>
+        </Table>
+        <div class="header-title" style="margin-top: 20px;">
+          <div class="header-title-left">
+            <img src="@/assets/public/headercard.png" />
+            <div>四、菌种保藏记录</div>
+          </div>
+          <div class="header-title-right">
+            <el-button @click="showPreserveDialog = true" class="el-icon-circle-plus-outline" type="primary">
+              新增菌种保藏记录</el-button>
+          </div>
+        </div>
+        <Table :height="null" :queryForm="queryForm" :total="0">
+          <template>
+            <el-table-column prop="age" label="用于保藏的菌种编号" />
+            <el-table-column prop="age" label="实验验证结论" />
+            <el-table-column prop="age" label="保藏方法" />
+            <el-table-column prop="age" label="保藏菌种编号" />
+            <el-table-column prop="age" label="菌种保藏人签字" />
+            <el-table-column prop="age" label="保藏时间" />
+            <el-table-column prop="address" label="操作">
+              <template slot-scope="scope">
+                <el-button type="text"
+                @click="handleEdit(scope.row)">删除</el-button></template>
+            </el-table-column>
+          </template>
+        </Table>
+        <!-- 弹窗组件 -->
+        <SeparationRecordDialog
+          :visible.sync="showSeparationDialog"
+          @confirm="handleSeparationConfirm"
+        />
+        <SlantRecordDialog
+          :visible.sync="showObservationDialog"
+          @ok="handleObservationConfirm"
+        />
+        <InoculationSlopeRecordDialog
+          :visible.sync="showInoculationDialog"
+          @save="handleInoculationConfirm"
+        />
+        <PreserveStrainRecordDialog
+          :visible.sync="showPreserveDialog"
+          @save="handlePreserveConfirm"
+        />
+        <div class="end-btn">
+          <el-button type="primary">发送</el-button>
+          <el-button type="default">存草稿</el-button>
+        </div>
+      </el-form>
+    </Card>
+  </div>
+</template>
+<script>
+import AiEditor from "@/components/AiEditor";
+import SeparationRecordDialog from "./separation-record-dialog.vue";
+import SlantRecordDialog from "./SlantRecordDialog.vue";
+import InoculationSlopeRecordDialog from "./inoculation-slope-record-dialog.vue";
+import PreserveStrainRecordDialog from "./preserve-strain-record-dialog.vue";
+
+export default {
+  components: {
+    AiEditor,
+    SeparationRecordDialog,
+    SlantRecordDialog,
+    InoculationSlopeRecordDialog,
+    PreserveStrainRecordDialog,
+  },
+  name: "AddBreedingRecord",
+  data() {
+    return {
+      form: {
+        strainCode: "",
+        strainName: "",
+        mediumFormula: "",
+        materialCode: "",
+        materialName: "",
+        materialDescription: "",
+        planName: "",
+        planCode: "",
+        stage: "",
+        creator: "",
+        createTime: "",
+        approvalComment: "",
+        status: "pending",
+        approver: "",
+        approveTime: "",
+      },
+      rules: {
+        strainCode: [{ required: true, message: "请输入菌株编号", trigger: "blur" }],
+        strainName: [{ required: true, message: "请输入菌株名称", trigger: "blur" }],
+        mediumFormula: [{ required: true, message: "请输入培养基配方", trigger: "blur" }],
+        materialCode: [{ required: true, message: "请输入物资编号", trigger: "blur" }],
+        materialName: [{ required: true, message: "请输入物资名称", trigger: "blur" }],
+        materialDescription: [{ required: true, message: "请输入物资描述", trigger: "blur" }],
+      },
+      activeTab: "strain", // 默认显示来源菌株表单
+      fileList: [], // 附件列表
+      showChoose: false,
+      radio1: 1,
+      status: "1",
+      remark: "",
+      queryForm: {},
+      showSeparationDialog: false,
+      showObservationDialog: false,
+      showInoculationDialog: false,
+      showPreserveDialog: false,
+    };
+  },
+  methods: {
+    handleSeparationConfirm(data) {
+      console.log("培养皿分离记录确认", data);
+    },
+    handleObservationConfirm(data) {
+      console.log("培养皿观察记录确认", data);
+    },
+    handleInoculationConfirm(data) {
+      console.log("接种斜面记录确认", data);
+    },
+    handlePreserveConfirm(data) {
+      console.log("菌种保藏记录确认", data);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+::v-deep(.el-form-item) {
+  width: 100%;
+
+  .el-input__inner {
+    width: 100%;
+  }
+
+  .w-380 {
+    width: 280px;
+  }
+}
+
+.mt-unset {
+  margin-top: unset !important;
+}
+
+.flex {
+  display: flex;
+}
+
+.tabs {
+  display: flex;
+  align-items: center;
+  border: 2px solid rgba(4, 156, 154, 0.5);
+  border-radius: 10px;
+  padding: 4px;
+
+  div {
+    width: 183px;
+    height: 32px;
+    border-radius: 10px;
+    text-align: center;
+    line-height: 32px;
+    font-size: 16px;
+    cursor: pointer;
+  }
+
+  .active {
+    background: #ebfefd;
+    color: #049c9a;
+  }
+
+  .inactive {
+    background: #fff;
+    color: #333333;
+  }
+}
+
+.header-title {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  margin-bottom: 20px;
+  gap: 13px;
+
+  .header-title-left {
+    display: flex;
+    align-items: center;
+    gap: 13px;
+
+    img {
+      width: 12px;
+      height: 19px;
+    }
+
+    div {
+      flex-shrink: 0;
+      font-weight: bold;
+      font-size: 18px;
+      color: #222222;
+      line-height: 27px;
+      font-family: "Source Han Sans CN Bold Bold";
+
+    }
+
+    span {
+      flex-shrink: 0;
+      font-weight: bold;
+      font-size: 18px;
+      color: #222222;
+      line-height: 27px;
+      font-family: "Source Han Sans CN Bold Bold";
+    }
+  }
+
+  .header-title-left :first-child {
+    margin-top: 0;
+  }
+}
+
+.header-title:first-child {
+  .header-title-left {
+    margin-top: 0;
+  }
+}
+
+.end-btn {
+  display: flex;
+  align-items: center;
+  gap: 10px;
+
+  button {
+    width: 180px;
+    height: 36px;
+    // background: #409EFF;
+  }
+}
+
+.member-list {
+  margin-top: 18px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 28px;
+
+  .member-list-card {
+    width: 340px;
+    height: 400px;
+    border-radius: 8px;
+    border: 1px solid #dcdfe6;
+    background: linear-gradient(to bottom,
+        rgba(5, 160, 193, 0.2) 0%,
+        rgba(5, 242, 194, 0) 70%);
+
+    .member-item {
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+
+      .member-title {
+        margin-top: 20px;
+        width: 100%;
+        font-family: "Source Han Sans CN Bold Bold";
+        font-weight: bold;
+        font-size: 16px;
+        color: rgba(0, 0, 0, 0.8);
+        line-height: 16px;
+        text-align: center;
+      }
+
+      .flex1 {
+        flex: 1;
+      }
+
+      .member-name-box {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+      }
+
+      .member-name-box-2 {
+        flex: 1;
+        padding: 0 20px;
+        padding-top: 40px;
+        display: grid;
+        grid-template-columns: repeat(4, 1fr);
+        gap: 20px;
+        justify-items: center;
+        align-items: start;
+      }
+
+      .member-name {
+        width: 60px;
+        height: 60px;
+        background: #7d8b79;
+        border-radius: 50%;
+        text-align: center;
+        line-height: 60px;
+        font-weight: 500;
+        font-size: 16px;
+        color: #ffffff;
+        margin: 0;
+      }
+
+      .member-change {
+        display: flex;
+        justify-content: center;
+        padding: 10px 0;
+        margin-top: auto;
+        cursor: pointer;
+
+        .member-change-btn {
+          background: #fff1f0;
+          border-radius: 4px;
+          border: 1px solid #ffccc7;
+          padding: 1px 8px;
+          font-weight: 400;
+          font-size: 12px;
+          color: #ff4d4f;
+        }
+      }
+    }
+  }
+}
+</style>

--
Gitblit v1.7.1