From 76cbfbad1c4235e2baf3216a8c99781995241429 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期四, 22 五月 2025 10:32:55 +0800
Subject: [PATCH] 检验报告管理

---
 laboratory/src/views/dataManagement/inspectionReport/detail.vue |  248 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 216 insertions(+), 32 deletions(-)

diff --git a/laboratory/src/views/dataManagement/inspectionReport/detail.vue b/laboratory/src/views/dataManagement/inspectionReport/detail.vue
index b303a1f..913130a 100644
--- a/laboratory/src/views/dataManagement/inspectionReport/detail.vue
+++ b/laboratory/src/views/dataManagement/inspectionReport/detail.vue
@@ -7,28 +7,29 @@
       inline
       label-position="top"
     >
-     
-
-      
-      
-     
-      <div class="header-title" style="margin-bottom: 38px">
+     <div class="header-title" style="margin-bottom: 38px">
         <div class="header-title-left">
           <img src="@/assets/public/headercard.png" />
           <div>所属实验调度</div>
         </div>
-        <el-button type="primary" class="el-icon-plus" @click="handleAddTask">选择实验调度</el-button>
+        <el-button type="primary" class="el-icon-plus" @click="handleAddTask" v-if="pageType !== 'view'">选择实验调度</el-button>
       </div>
 
       <Table :data="taskTableData" :total="0" :height="null" class="rwuTable">
-        <el-table-column prop="index" label="所属项目课题方案" width="200"></el-table-column>
-        <el-table-column prop="sampleCode" label="实验编号"></el-table-column>
-        <el-table-column prop="testData" label="实验名称"></el-table-column>
-        <el-table-column prop="testData" label="通知时间"></el-table-column>
-        <el-table-column prop="testData" label="实验开始时间"></el-table-column>
-        <el-table-column prop="testData" label="实验结束时间"></el-table-column>
-        <el-table-column prop="testData" label="参加人员"></el-table-column>
-        <el-table-column prop="testData" label="状态"></el-table-column>
+        <el-table-column prop="projectName" label="所属项目课题方案" width="200"></el-table-column>
+        <el-table-column prop="experimentCode" label="实验编号"></el-table-column>
+        <el-table-column prop="experimentName" label="实验名称"></el-table-column>
+        <el-table-column prop="experimentDate" label="通知时间"></el-table-column>
+        <el-table-column prop="experimentStartTime" label="实验开始时间"></el-table-column>
+        <el-table-column prop="experimentEndTime" label="实验结束时间"></el-table-column>
+        <el-table-column prop="participantsName" label="参加人员"></el-table-column>
+        <el-table-column prop="status" label="状态">
+          <template slot-scope="scope">
+            <el-tag :type="getStatusType(scope.row.status)">
+              {{ getStatusText(scope.row.status) }}
+            </el-tag>
+          </template>
+        </el-table-column>
       </Table>
       <div class="header-title">
         <div class="header-title-left">
@@ -36,57 +37,101 @@
           <div>本次检验结果总表</div>
         </div>
       </div>
+      <AiEditor
+        ref="totalResultEditor"
+        :value="editorContents.totalResult"
+        height="200px"
+        style="margin: 20px 0;"
+        placeholder="请输入本次检验结果总表..."
+        :readOnly="pageType === 'view'"
+      />
       <div class="header-title">
         <div class="header-title-left">
           <img src="@/assets/public/headercard.png" />
           <span>本次检验结果</span>
         </div>
       </div>
+      <AiEditor
+        ref="resultEditor"
+        :value="editorContents.result"
+        height="200px"
+        style="margin: 20px 0;"
+        placeholder="请输入本次检验结果..."
+        :readOnly="pageType === 'view'"
+      />
 
-      <div class="add-project-footer">
-        <el-button type="primary" class="save-btn">发送</el-button>
-        <el-button>存草稿</el-button>
+      <div class="add-project-footer" v-if="pageType !== 'view'">
+        <el-button type="primary" class="save-btn" @click="handleSave">发送</el-button>
+        <el-button @click="handleSaveDraft">存草稿</el-button>
       </div>
     </el-form>
     <!-- 添加检测数据弹窗 -->
-    <add-dialog 
+    <!-- <add-dialog 
       ref="addDialog"
       :visible.sync="dialogVisible" 
       @success="handleTaskSubmit" 
-    />
+    /> -->
+    <experimentalScheduling :show="dialogVisible" @close="handleSchedulingClose" @submit="handleSchedulingSubmit" />
   </Card>
 </template>
   
 <script>
 import AddDialog from './components/addDialog.vue'
 import moment from 'moment'
+import experimentalScheduling from "../sampleManage/components/experimental-scheduling.vue";
+import AiEditor from '@/components/AiEditor'
+import { getDetail,add,update } from './service'
 
 export default {
   name: "AddProject",
   components: {
-    AddDialog
+    AddDialog,
+    experimentalScheduling,
+    AiEditor
   },
   data() {
     return {
       dialogVisible: false,
       isEdit: false,
       currentEditIndex: -1,
+      pageType: 'add', // 页面类型:add-新增,edit-编辑,view-详情
       form: {
-        recordNo: '',
-        testItemName: '',
-        testItemNo: '',
-        testMethodName: '',
-        testMethodNo: ''
+        id: '',
+        dispatchId: '', // 实验调度id
+        testReason: '', // 检验说明
+        testResult: '', // 检验结果
+        status: 1 // 状态:1=待提交
+      },
+      editorContents: {
+        totalResult: '',
+        result: ''
       },
       rules: {
-        recordNo: [{ required: true, message: "请输入原始检验记录编号", trigger: "blur" }],
-        testItemName: [{ required: true, message: "请输入检测项名字", trigger: "blur" }],
-        testItemNo: [{ required: true, message: "请输入检测项编号", trigger: "blur" }],
-        testMethodName: [{ required: true, message: "请输入检测方法名字", trigger: "blur" }],
-        testMethodNo: [{ required: true, message: "请输入检测方法编号", trigger: "blur" }]
+        dispatchId: [{ required: true, message: "请选择实验调度", trigger: "change" }]
       },
-      taskTableData: []
+      taskTableData: [],
+      // 状态映射表
+      statusTypeMap: {
+        "-1": "info",
+        "1": "warning",
+        "2": "success",
+        "3": "info"
+      },
+      statusTextMap: {
+        "-1": "草稿箱",
+        "1": "待确认",
+        "2": "已确认",
+        "3": "已封存"
+      }
     };
+  },
+  created() {
+    // 从路由参数中获取id和type
+    const { id, type } = this.$route.query;
+    if (id) {
+      this.pageType = type || 'view';
+      this.getDetail(id);
+    }
   },
   methods: {
     handleAddTask() {
@@ -209,6 +254,145 @@
     },
     getPhotoUrls(photos) {
       return photos.map(photo => photo.url);
+    },
+    handleSchedulingClose() {
+      this.dialogVisible = false;
+    },
+    handleSchedulingSubmit(data) {
+      this.taskTableData = data || [];
+    },
+    getStatusType(status) {
+      return this.statusTypeMap[status] || 'info';
+    },
+    getStatusText(status) {
+      return this.statusTextMap[status] || '未知状态';
+    },
+    // 获取所有编辑器的内容
+    getAllEditorContent() {
+      return {
+        totalResult: this.$refs.totalResultEditor.getContent(),
+        result: this.$refs.resultEditor.getContent()
+      }
+    },
+    // 统一处理方法
+    handleSubmit(type) {
+      // 如果是存草稿,不进行校验
+      if (type === 'draft') {
+        this.submitData(type);
+        return;
+      }
+
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          // 获取所有编辑器内容
+          const editorContents = this.getAllEditorContent()
+          
+          // 检查编辑器内容是否为空
+          const emptyFields = []
+          
+          // 判断内容是否为空(排除<p></p>)
+          const isEmptyContent = (content) => {
+            return !content || content === '<p></p>' || content.trim() === '<p></p>'
+          }
+
+          // 检查实验调度是否选择
+          if (!this.taskTableData || this.taskTableData.length === 0) {
+            this.$message.warning('请选择实验调度')
+            return false
+          }
+
+          // 检查检验结果总表是否填写
+          if (isEmptyContent(editorContents.totalResult)) {
+            this.$message.warning('请填写本次检验结果总表')
+            return false
+          }
+
+          this.submitData(type);
+        } else {
+          this.$message.warning('请填写必填项')
+          return false
+        }
+      })
+    },
+
+    // 提交数据
+    async submitData(type) {
+      try {
+        // 获取所有编辑器内容
+        const editorContents = this.getAllEditorContent()
+        
+        // 构建提交数据
+        const submitData = {
+          ...this.form,
+          dispatchId: this.taskTableData[0]?.id || '',
+          testReason: editorContents.totalResult,
+          testResult: editorContents.result,
+          status: type === 'draft' ? -1 : 1 // 草稿箱:-1, 待提交:1
+        }
+
+        // 如果是编辑模式,添加id
+        if (this.pageType === 'edit') {
+          submitData.id = this.form.id
+        }
+
+        console.log('提交数据:', submitData)
+
+        // 调用接口
+        const request = this.pageType === 'edit' ? update : add
+        const res = await request(submitData)
+
+        if (res.code === 200) {
+          const successMsg = type === 'draft' ? '草稿保存成功' : (this.pageType === 'edit' ? '更新成功' : '保存成功')
+          this.$message.success(successMsg)
+          this.$router.back()
+        } else {
+          const errorMsg = type === 'draft' ? '草稿保存失败' : (this.pageType === 'edit' ? '更新失败' : '保存失败')
+          this.$message.error(res.msg || errorMsg)
+        }
+      } catch (error) {
+        console.error('保存失败:', error)
+        const errorMsg = type === 'draft' ? '草稿保存失败' : (this.pageType === 'edit' ? '更新失败' : '保存失败')
+        this.$message.error(errorMsg)
+      }
+    },
+
+    // 获取详情数据
+    async getDetail(id) {
+      try {
+        const res = await getDetail({ id });
+        if (res) {
+          const data = res;
+          // 设置表单数据
+          this.form = {
+            id: data.id,
+            dispatchId: data.dispatchId,
+            testReason: data.testReason,
+            testResult: data.testResult,
+            status: data.status
+          };
+          // 设置编辑器内容
+          this.editorContents = {
+            totalResult: data.testReason || '',
+            result: data.testResult || ''
+          };
+          // 设置实验调度数据
+          if (data.experimentDispatch) {
+            this.taskTableData = [data.experimentDispatch];
+          }
+        }
+      } catch (error) {
+        console.error('获取详情失败:', error);
+        this.$message.error('获取详情失败,请重试');
+      }
+    },
+
+    // 保存
+    handleSave() {
+      this.handleSubmit('save')
+    },
+    // 保存草稿
+    handleSaveDraft() {
+      this.handleSubmit('draft')
     }
   }
 };

--
Gitblit v1.7.1