From a60dc30be50598fe2d1acb42f8171ec69e37b436 Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期三, 28 五月 2025 17:29:05 +0800 Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory --- culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue | 532 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 302 insertions(+), 230 deletions(-) diff --git a/culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue b/culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue index 002863a..1b818c9 100644 --- a/culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue +++ b/culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue @@ -1,262 +1,334 @@ <template> - <!-- 设置传代计划数弹窗 --> - <el-dialog :title="planForm.status == 'add' ? '新增菌种传代项' : '菌种传代项详情'" :visible.sync="planDialogVisible" width="40%" - :close-on-click-modal="false"> - <el-form :model="planForm" :rules="planRules" ref="planForm" label-position="top"> - <el-row :gutter="20"> - <el-col :span="16"> - <el-form-item label="菌株类型" required> - <div class="type-box" v-if="planForm.status == 'add'"> - <div @click="handleType(index)" v-for="(item, index) in ['原始祖代菌株SO', '分离菌落 CO', '祖代菌株 O']" - :key="item" class="type-box-item" - :class="index + 1 == planForm.activeType && 'activeType'"> - <div class="type-box-item-text">{{ item }}</div> - <img v-if="index + 1 == planForm.activeType" class="type-box-item-select" - src="../../../assets/public/selectType.png" /> - </div> - </div> - <div v-else class="type-box"> - <div class="type-box-item activeType"> - {{ ['原始祖代菌株SO', '分离菌落 CO', '祖代菌株 O'][planForm.activeType - 1] }} - </div> - </div> - </el-form-item> - </el-col> - <el-col :span="20" v-if="planForm.activeType == 1"> - <el-form-item label="来源获得" prop="source"> - <el-input :disabled="planForm.status != 'add'" v-model="planForm.source" - placeholder="请输入"></el-input> - </el-form-item> - </el-col> - <el-col :span="10" v-else> - <el-form-item label="菌落编号" prop="source"> - <el-input :disabled="planForm.status != 'add'" v-model="planForm.source" - placeholder="请输入"></el-input> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="菌种名称" prop="inoculateName"> - <el-input :disabled="planForm.status != 'add'" v-model="planForm.inoculateName" - placeholder="请输入"></el-input> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="菌种编号" prop="inoculateNo"> - <el-input :disabled="planForm.status != 'add'" v-model="planForm.inoculateNo" - placeholder="请输入"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="20"> - <el-col :span="10"> - <el-form-item label="保存/废弃" required> - <div class="flex-row" v-if="planForm.status == 'add'"> - <div @click="handleStatus('save')" :class="planForm.isDiscarded && 'active'">保存</div> - <div @click="handleStatus('discard')" :class="!planForm.isDiscarded && 'active'">废弃</div> - </div> - <div v-else class="activeStatus"> - 保存 - </div> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="20" v-if="!planForm.isDiscarded"> - <el-col :span="10"> - <el-form-item label="废弃原因说明" required> - <el-input :disabled="planForm.status != 'add'" v-model="planForm.discardReason" - placeholder="请输入"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="20"> - <el-col :span="10"> - <el-form-item label="菌种入库时间"> - <el-input disabled v-model="planForm.inTime"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row v-if="planForm.status != 'add'" :gutter="20"> - <el-col :span="10"> - <el-form-item label="接种操作人签字"> - <el-image /> - </el-form-item> - </el-col> - <el-col :span="10"> - <el-form-item label="菌种保藏人签字"> - <el-image /> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div v-if="planForm.status == 'add'" class="dialog-footer"> - <el-button>保存草稿</el-button> - <el-button type="primary" @click="handleAddPlan">提交</el-button> - </div> - </el-dialog> + <!-- 设置传代计划数弹窗 --> + <el-dialog + :title="planForm.formStatus == 'add' ? '新增菌种传代项' : '菌种传代项详情'" + :visible.sync="planDialogVisible" + width="40%" + :close-on-click-modal="false" + > + <el-form + :model="planForm" + :rules="planRules" + ref="planForm" + label-position="top" + > + <el-row :gutter="20"> + <el-col :span="16"> + <el-form-item label="菌株类型" required> + <div class="type-box" v-if="planForm.formStatus == 'add'"> + <div + @click="handleType(index)" + v-for="(item, index) in [ + '原始祖代菌株SO', + '分离菌落 CO', + '祖代菌株 O', + ]" + :key="item" + class="type-box-item" + :class="index + 1 == planForm.strainType && 'activeType'" + > + <div class="type-box-item-text">{{ item }}</div> + <img + v-if="index + 1 == planForm.strainType" + class="type-box-item-select" + src="../../../assets/public/selectType.png" + /> + </div> + </div> + <div v-else class="type-box"> + <div class="type-box-item activeType"> + {{ + ["原始祖代菌株SO", "分离菌落 CO", "祖代菌株 O"][ + planForm.strainType - 1 + ] + }} + </div> + </div> + </el-form-item> + </el-col> + <el-col :span="20" v-if="planForm.strainType == 1"> + <el-form-item label="来源获得" prop="source"> + <el-input + :disabled="planForm.formStatus != 'add'" + v-model="planForm.source" + placeholder="请输入" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="10" v-else> + <el-form-item label="菌落编号" prop="colonyNumber"> + <el-input + :disabled="planForm.formStatus != 'add'" + v-model="planForm.colonyNumber" + placeholder="请输入" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="菌种名称" prop="strainName"> + <el-input + :disabled="planForm.formStatus != 'add'" + v-model="planForm.strainName" + placeholder="请输入" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="10"> + <el-form-item label="菌种编号" prop="strainCode"> + <el-input + :disabled="planForm.formStatus != 'add'" + v-model="planForm.strainCode" + placeholder="请输入" + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="10"> + <el-form-item label="保存/废弃" required> + <div class="flex-row" v-if="planForm.formStatus == 'add'"> + <div + @click="handleStatus('save')" + :class="planForm.status === 1 && 'active'" + > + 保存 + </div> + <div + @click="handleStatus('discard')" + :class="planForm.status === 2 && 'active'" + > + 废弃 + </div> + </div> + <div v-else class="activeStatus"> + {{ planForm.status === 1 ? "保存" : "废弃" }} + </div> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20" v-if="planForm.status === 2"> + <el-col :span="10"> + <el-form-item label="废弃原因说明" required> + <el-input + :disabled="planForm.formStatus != 'add'" + v-model="planForm.remark" + placeholder="请输入" + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="10"> + <el-form-item label="菌种入库时间"> + <el-input disabled v-model="planForm.confirmTime"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row v-if="planForm.formStatus != 'add'" :gutter="20"> + <el-col v-if="planForm.vaccinateSignature" :span="10"> + <el-form-item label="接种操作人签字"> + <el-image :src="planForm.vaccinateSignature" /> + </el-form-item> + </el-col> + <el-col v-if="planForm.preserveSignature" :span="10"> + <el-form-item label="菌种保藏人签字"> + <el-image :src="planForm.preserveSignature" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div v-if="planForm.formStatus == 'add'" class="dialog-footer"> + <el-button>保存草稿</el-button> + <el-button type="primary" @click="handleAddPlan">提交</el-button> + </div> + </el-dialog> </template> <script> export default { - data() { - return { - planDialogVisible: false, - planForm: {}, - planRules: { - inoculateNo: [ - { required: true, message: '请输入菌种编号', trigger: 'blur' } - ], - inoculateName: [ - { required: true, message: '请输入菌种名称', trigger: 'blur' } - ], - source: [ - { required: true, message: '请输入来源获得', trigger: 'blur' } - ], - }, - dialogTitle: '' - } + data() { + return { + planDialogVisible: false, + planForm: { + source: "", // 来源获得 + strainCode: "", // 菌种编号 + strainName: "", // 菌种名称 + colonyNumber: "", // 菌落编号 + strainType: "1", // 1原始祖代菌株 2分离菌落 3祖代菌株 + status: 1, // 1保存 2废弃 + type: 1, // 固定为1 + confirmTime: "", + remark: "", + formStatus: "add", + }, + planRules: { + strainCode: [ + { required: true, message: "请输入菌种编号", trigger: "blur" }, + ], + colonyNumber: [ + { required: true, message: "请输入菌落编号", trigger: "blur" }, + ], + strainName: [ + { required: true, message: "请输入菌种名称", trigger: "blur" }, + ], + source: [ + { required: true, message: "请输入来源获得", trigger: "blur" }, + ], + }, + dialogTitle: "", + }; + }, + methods: { + openInitData(value) { + // 赋值当前时间 + // const now = new Date(); + // const pad = (n) => n.toString().padStart(2, "0"); + // this.planForm.storageTime = `${now.getFullYear()}-${pad( + // now.getMonth() + 1 + // )}-${pad(now.getDate())} ${pad(now.getHours())}:${pad( + // now.getMinutes() + // )}:${pad(now.getSeconds())}`; + this.planForm = value; + this.openDialog(); }, - methods: { - openInitData(value) { - this.planForm = value - this.openDialog() - }, - openDialog() { - this.planDialogVisible = true - }, - closeDialog() { - this.planDialogVisible = false - }, - handleAddPlan() { - this.$refs.planForm.validate((valid) => { - if (valid) { - if (!this.planForm.activeType) { - this.$message.warning('请选择菌株类型'); - return - } - this.$emit('addNodeSign', this.planForm, 1) - } - }) - }, - handleStatus(status) { - if (this.planForm.status != 'add') return - this.planForm.isDiscarded = status === 'save' - this.$forceUpdate() - }, - handleType(index) { - if (this.planForm.status != 'add') return - this.planForm.activeType = index + 1 + openDialog() { + this.planDialogVisible = true; + }, + closeDialog() { + this.planDialogVisible = false; + }, + handleAddPlan() { + this.$refs.planForm.validate((valid) => { + if (valid) { + if (!this.planForm.strainType) { + this.$message.warning("请选择菌株类型"); + return; + } + this.$emit("addNodeSign", { ...this.planForm }, 1); } - } -} + }); + }, + handleStatus(status) { + if (this.planForm.formStatus !== "add") return; + this.planForm.status = status === "save" ? 1 : 2; + this.$forceUpdate(); + }, + handleType(index) { + if (this.planForm.formStatus !== "add") return; + this.planForm.strainType = index + 1; + // 如果是分离菌落或祖代菌株,colonyNumber=source,否则清空 + this.planForm.colonyNumber = ""; + }, + }, +}; </script> <style scoped lang="less"> .dialog-footer { - margin-top: 39px; - display: flex; - justify-content: center; - gap: 60px; + margin-top: 39px; + display: flex; + justify-content: center; + gap: 60px; - .el-button--primary { - width: 150px; - height: 40px; - background: #049C9A; - border-radius: 4px; - } + .el-button--primary { + width: 150px; + height: 40px; + background: #049c9a; + border-radius: 4px; + } - .el-button--default { - - width: 150px; - height: 40px; - border-radius: 4px; - } + .el-button--default { + width: 150px; + height: 40px; + border-radius: 4px; + } } ::v-deep .el-input-number .el-input__inner { - text-align: left; + text-align: left; } .el-input-number--small { - width: 100%; + width: 100%; } .flex-row { - width: 370px; - display: flex; - align-items: center; - font-size: 16px; - color: #333333; - padding: 4px; + width: 370px; + display: flex; + align-items: center; + font-size: 16px; + color: #333333; + padding: 4px; + border-radius: 10px; + border: 2px solid rgba(4, 156, 154, 0.5); + font-family: "PingFangSCRegular"; + + .flex-row-save { + background: #049c9a; + color: #fff; + } + + div { + width: 183px; + height: 32px; + text-align: center; + flex-shrink: 0; + cursor: pointer; + } + + .active { + font-family: "sourceHanSansCN-Medium"; + color: #049c9a; + background: #ebfefd; + box-shadow: 0px 0px 6px 0px rgba(10, 109, 108, 0.25); border-radius: 10px; - border: 2px solid rgba(4, 156, 154, 0.5); - font-family: 'PingFangSCRegular'; - - .flex-row-save { - background: #049C9A; - color: #fff; - } - - div { - width: 183px; - height: 32px; - text-align: center; - flex-shrink: 0; - cursor: pointer; - } - - .active { - font-family: 'SourceHanSansCN-Medium'; - color: #049C9A; - background: #EBFEFD; - box-shadow: 0px 0px 6px 0px rgba(10, 109, 108, 0.25); - border-radius: 10px; - } + } } .activeStatus { - font-family: 'SourceHanSansCN-Medium'; - color: #049C9A; - background: #EBFEFD; - border-radius: 10px; - width: 183px; - line-height: 40px; - border-radius: 10px; - text-align: center; - font-weight: 500; - font-size: 16px; + font-family: "sourceHanSansCN-Medium"; + color: #049c9a; + background: #ebfefd; + border-radius: 10px; + width: 183px; + line-height: 40px; + border-radius: 10px; + text-align: center; + font-weight: 500; + font-size: 16px; } .type-box { - display: flex; - align-items: center; - gap: 11px; + display: flex; + align-items: center; + gap: 11px; - .activeType { - background: #EBFEFD; - font-weight: 500; - color: #049C9A; + .activeType { + background: #ebfefd; + font-weight: 500; + color: #049c9a; + } + + &-item { + cursor: pointer; + position: relative; + width: 150px; + text-align: center; + background: #f5f5f5; + border-radius: 4px; + font-weight: 400; + font-size: 16px; + color: #333333; + + &-text { + line-height: 40px; } - &-item { - cursor: pointer; - position: relative; - width: 150px; - text-align: center; - background: #F5F5F5; - border-radius: 4px; - font-weight: 400; - font-size: 16px; - color: #333333; - - &-text { - line-height: 40px; - } - - &-select { - position: absolute; - bottom: 0; - right: 0; - width: 21px; - height: 17px; - } + &-select { + position: absolute; + bottom: 0; + right: 0; + width: 21px; + height: 17px; } + } } -</style> \ No newline at end of file +</style> -- Gitblit v1.7.1