From 0db8c9b94a9ac655549d5eba5c2a6c92ac386c06 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 08 十月 2026 11:20:56 +0800
Subject: [PATCH] 提交最新代码

---
 culture/src/views/strain-library/validation/chief-cell/confirm-detail.vue |  123 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 108 insertions(+), 15 deletions(-)

diff --git a/culture/src/views/strain-library/validation/chief-cell/confirm-detail.vue b/culture/src/views/strain-library/validation/chief-cell/confirm-detail.vue
index 755def6..ff3a6f1 100644
--- a/culture/src/views/strain-library/validation/chief-cell/confirm-detail.vue
+++ b/culture/src/views/strain-library/validation/chief-cell/confirm-detail.vue
@@ -2,23 +2,41 @@
   <Card class="confirm-detail-page">
     <el-card class="top-card">
       <el-row :gutter="24" class="top-info-row">
+        <el-col :span="24" class="info-col source-col">
+          <div class="info-item source-item">
+            <span class="label">菌种来源:</span>
+            <el-tooltip
+                :content="detail.strainSource || '暂无数据'"
+                placement="top"
+                :disabled="!detail.strainSource || detail.strainSource.length < 30"
+                popper-class="source-tooltip"
+                effect="dark"
+            >
+              <span class="source-text">{{ detail.strainSource || '暂无数据' }}</span>
+            </el-tooltip>
+          </div>
+        </el-col>
         <el-col :span="8" class="info-col">
-          <div class="info-item"><span class="label">菌种来源:</span>{{ detail.strainSource }}</div>
           <div class="info-item"><span class="label">鉴别菌株编号:</span>{{ detail.identifyingStrainCode }}</div>
           <div class="info-item"><span class="label">鉴别菌株名称:</span>{{ detail.identifyingStrainName }}</div>
         </el-col>
         <el-col :span="8" class="info-col">
           <div class="info-item"><span class="label">验证实验编号:</span>{{ detail.validationExperimentCode }}</div>
-          <div class="info-item"><span class="label">实验时间:</span>{{ detail.experimentTime }}</div>
+          <div class="info-item"><span class="label">实验时间:</span>{{ detail.experimentTime | formatDate }}</div>
           <div class="info-item"></div>
         </el-col>
         <el-col :span="8" class="info-col ">
           <div class="info-item sign-label"><span class="label">菌种实验员签字</span></div>
           <div class="info-item signature-item">
             <div class="signature-area">
-              <img v-if="detail.handleSignature" :src="detail.handleSignature" alt="签字" />
+              <el-image v-if="detail.handleSignature" :src="getFullUrl(detail.handleSignature)" :preview-src-list="[getFullUrl(detail.handleSignature)]" alt="签字" />
               <span v-else class="waiting-text">暂无签名</span>
             </div>
+          </div>
+        </el-col>
+        <el-col :span="8" class="info-col">
+          <div class="info-item">
+            <span class="label">签字时间:</span>{{ detail.handleTime }}
           </div>
         </el-col>
       </el-row>
@@ -37,7 +55,7 @@
         </el-form-item>
       </el-form>
     </div>
-    <el-button type="primary" @click="handleSave" class="el-icon-plus"> 新增</el-button>
+    <el-button type="primary" @click="handleAdd" class="el-icon-plus"> 新增</el-button>
     <EditConditionDialog
       :visible.sync="dialogVisible"
       :isEdit="dialogIsEdit"
@@ -74,11 +92,14 @@
 import EditConditionDialog from './EditConditionDialog.vue'
 import DetailConditionDialog from './DetailConditionDialog.vue'
 import { detail,confirm } from './service'
+import { getFullUrl } from '@/utils/utils'
+import moment from 'moment'
 export default {
   name: 'ConfirmDetail',
   components: { EditConditionDialog, DetailConditionDialog },
   data() {
     return {
+      cacheForm: null,
       detail: {
         strainSource: '',
         identifyingStrainCode: '',
@@ -127,18 +148,55 @@
       detailDialogValue: {}
     }
   },
-  mounted() {
-    this.getDetail()
+  filters: {
+    formatDate(date) {
+      if(date){
+        return moment(date).format('YYYY-MM-DD')
+      }else{
+        return ''
+      }
+    },
+  },
+  activated() {
+    if (this.cacheForm) {
+      this.detail = this.cacheForm;
+    }
+    if (this.$route.query.id && !this.cacheForm) {
+      this.getDetail();
+    }
+  },
+  deactivated() {
+    this.cacheForm = JSON.parse(JSON.stringify(this.detail));
   },
   methods: {
+    getFullUrl(url) {
+      if (url) {
+        return getFullUrl(url)
+      }
+      return ''
+    },
     getDetail() {
       detail({id: this.$route.query.id}).then(res => {
+        const data = res.data || res
+        const purpose = Array.isArray(data.purpose)
+          ? data.purpose
+          : String(data.purpose || '').split(',').filter(Boolean).map(Number)
         this.detail = {
-          ...res,
-          handleSignature: res.handleSignature || '', // 处理签名为空的情况
-          purpose: res.purpose || [] // 处理 purpose 为空的情况
+          ...data,
+          handleSignature: data.handleSignature || '',
+          purpose
+        }
+        if (Array.isArray(data.list) && data.list.length) {
+          this.tableData = data.list.map(item => ({ ...item }))
         }
       })
+    },
+    handleAdd() {
+      this.dialogVisible = true
+      this.dialogIsEdit = false
+      this.dialogIsFixed = false
+      this.dialogValue = {}
+      this.dialogIndex = null
     },
     handleEdit(row) {
       const idx = this.tableData.indexOf(row)
@@ -155,12 +213,17 @@
     handleSave() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.detail.list = this.tableData || []
-          this.detail.purpose = this.detail.purpose.join(',')
-          confirm({...this.detail}).then(res => {
+          const payload = {
+            ...this.detail,
+            list: this.tableData || [],
+            purpose: (this.detail.purpose || []).join(','),
+            isDraft: 0
+          }
+          confirm(payload).then(res => {
             if (res.code == 200) {
               this.$message.success('保存成功');
-              this.$router.back()
+              this.cacheForm = null
+              this.$closeCurrentView('/strain/validation/chief-cell')
             } else {
               this.$message.error(res.msg);
             }
@@ -208,13 +271,43 @@
 .info-item {
   display: flex;
   font-size: 15px;
-  height: 45px;
   line-height: 45px;
 }
 
 .label {
   color: #666;
   font-weight: 500;
+  flex-shrink: 0;
+}
+
+
+.source-item {
+  flex: 1;
+  min-width: 0;
+
+  .source-text {
+    flex: 1;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    color: #303133;
+    cursor: pointer;
+    padding: 0 4px;
+
+    &:hover {
+      color: #409EFF;
+    }
+  }
+}
+
+// 或者直接覆盖所有 .el-tooltip__popper
+/deep/ .source-tooltip {
+  max-width: 320px !important;
+  min-width: 120px !important;
+  word-break: break-word;
+  line-height: 1.6;
+  padding: 10px 14px;
+  font-size: 13px;
 }
 
 .sign-col {
@@ -284,4 +377,4 @@
     height: auto;
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.7.1