From 173766e82d7cde9a7ae30b8896a9a287dff411f8 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期二, 02 九月 2025 10:17:59 +0800
Subject: [PATCH] feat: 打包配置

---
 laboratory/src/views/dataManagement/confirmation-sheet/components/add.vue |  318 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 266 insertions(+), 52 deletions(-)

diff --git a/laboratory/src/views/dataManagement/confirmation-sheet/components/add.vue b/laboratory/src/views/dataManagement/confirmation-sheet/components/add.vue
index 422059f..8b64ebe 100644
--- a/laboratory/src/views/dataManagement/confirmation-sheet/components/add.vue
+++ b/laboratory/src/views/dataManagement/confirmation-sheet/components/add.vue
@@ -6,16 +6,16 @@
       <el-button @click="showScheduling = true" class="el-icon-plus" type="primary">
         选择实验调度</el-button>
     </div>
-    <Table :tableData="tableData" :total="total" :height="null">
+    <Table :data="tableData" :total="total" :height="null">
       <template>
         <el-table-column prop="planCode" label="所属项目课题方案"></el-table-column>
         <el-table-column prop="planName" label="实验编号"></el-table-column>
-        <el-table-column prop="planName" label="实验名称"></el-table-column>
-        <el-table-column prop="stage" label="	通知时间"></el-table-column>
-        <el-table-column prop="stage" label="	实验开始时间"></el-table-column>
-        <el-table-column prop="stage" label="	实验结束时间"></el-table-column>
-        <el-table-column prop="stage" label="	参加人员"></el-table-column>
-        <el-table-column prop="creator" label="状态"></el-table-column>
+        <el-table-column prop="testName" label="实验名称"></el-table-column>
+        <el-table-column prop="notifyTime" label="通知时间"></el-table-column>
+        <el-table-column prop="startTime" label="实验开始时间"></el-table-column>
+        <el-table-column prop="endTime" label="实验结束时间"></el-table-column>
+        <el-table-column prop="participants" label="参加人员"></el-table-column>
+        <el-table-column prop="status" label="状态"></el-table-column>
       </template>
     </Table>
     <div class="header-title-left" style="margin-top: 60px;">
@@ -25,34 +25,36 @@
         新增检测项</el-button>
       <span>【注意:这里有多少个检测项 系统就会自动创建对应数量的《检测项的检验方法及数据记录》】</span>
     </div>
-    <Table :tableData="tableData" :total="total" :height="null">
+    <Table :data="testItems" :total="testItems.length" :height="null">
       <template>
-        <el-table-column prop="planCode" label="序号"></el-table-column>
-        <el-table-column prop="planName" label="检测项名称"></el-table-column>
-        <el-table-column prop="planName" label="检测项编号"></el-table-column>
-        <el-table-column prop="stage" label="	定性/定量"></el-table-column>
-        <el-table-column prop="stage" label="	检测方法编号"></el-table-column>
-        <el-table-column prop="stage" label="	检测方法"></el-table-column>
-        <el-table-column prop="stage" label="	收样要求"></el-table-column>
-        <el-table-column prop="creator" label="操作"></el-table-column>
+        <el-table-column type="index" label="序号" width="80"></el-table-column>
+        <el-table-column prop="termName" label="检测项名称"></el-table-column>
+        <el-table-column prop="termCode" label="检测项编号"></el-table-column>
+        <el-table-column prop="termType" label="定性/定量">
+          <template slot-scope="scope">
+            {{ scope.row.termType === 1 ? '定性' : '定量' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="termMethodCode" label="检测方法编号"></el-table-column>
+        <el-table-column prop="termMethod" label="检测方法"></el-table-column>
+        <el-table-column prop="sampleRequire" label="收样要求"></el-table-column>
+        <el-table-column label="操作" width="150">
+          <template slot-scope="scope">
+            <el-button type="text" @click="handleEditTestItem(scope.row)">编辑</el-button>
+            <el-button type="text" @click="handleDeleteTestItem(scope.$index)" class="delete-btn">删除</el-button>
+          </template>
+        </el-table-column>
       </template>
     </Table>
     <div class="btn_box flex ">
       <el-button type="primary" @click="handleSubmit">提交确认单</el-button>
-      <el-button @click="$router.go(-1)">存草稿</el-button>
+      <el-button @click="handleSaveDraft">存草稿</el-button>
     </div>
-    <experimentalScheduling :show="showScheduling"/>
-    <add-test-item
-      :dialogVisible="testItemDialogVisible"
-      @close="handleTestItemDialogClose"
-      @confirm="handleTestItemConfirm"
-    />
-    <confirm-dialog
-      :visible.sync="confirmDialogVisible"
-      :formData="confirmFormData"
-      :sampleData="testItems"
-      @confirm="handleConfirmSubmit"
-    />
+    <experimentalScheduling :show="showScheduling" @close="showScheduling = false" @submit="setSelectedScheduling" />
+    <add-test-item :dialogVisible="testItemDialogVisible" :editData="currentTestItem" @close="handleTestItemDialogClose"
+      @confirm="handleTestItemConfirm" />
+    <confirm-dialog :visible.sync="confirmDialogVisible" :formData="confirmFormData" :sampleData="testItems"
+      @confirm="handleConfirmSubmit" />
   </Card>
 </template>
 
@@ -60,7 +62,8 @@
 import experimentalScheduling from './experimental-scheduling.vue';
 import AddTestItem from './add-test-item.vue'
 import ConfirmDialog from './confirm-dialog.vue'
-
+import { add, update, getDetail } from '../service'
+import { mapState } from "vuex";
 export default {
   name: 'AddConfirmationSheet',
   components: {
@@ -91,8 +94,17 @@
         planName: '', // 项目课题方案名称
         testCode: '', // 实验编号
         testName: '', // 实验名称
-        sampleCode: '' // 取样单编号
       },
+      selectedScheduling: null, // 添加选中的实验调度数据
+      currentTestItem: null, // 当前编辑的检测项
+      formData: {
+        id: '', // 确认单ID
+        dispatchId: '', // 实验调度ID
+        auditStatus: -1, // 审核状态,默认草稿
+        testMethodConfirmSheetTerms: [], // 确认单检测项
+        confirmSign: '', // 签字
+        signTime: '', // 签字时间
+      }
     };
   },
   computed: {
@@ -102,10 +114,53 @@
   },
   watch: {},
   created() {
-    
+    // 判断是否是编辑模式
+    const id = this.$route.query.id
+    if (id) {
+      this.getDetailData(id)
+    }
+  },
+  computed: {
+    ...mapState(["tagList", "isFold"]),
   },
   mounted() { },
   methods: {
+    setSelectedScheduling(data) {
+      if (!data || data.length === 0) return;
+      const selectedData = data[0]; // 获取选中的第一条数据
+      this.selectedScheduling = selectedData;
+
+      // 更新表格数据
+      this.tableData = [{
+        planCode: selectedData.projectName || '', // 所属项目课题方案
+        planName: selectedData.experimentCode || '', // 实验编号
+        testName: selectedData.experimentName || '', // 实验名称
+        notifyTime: selectedData.createTime || '', // 通知时间
+        startTime: selectedData.experimentStartTime || '', // 实验开始时间
+        endTime: selectedData.experimentEndTime || '', // 实验结束时间
+        participants: selectedData.participantsName || '', // 参加人员
+        status: this.getStatusText(selectedData.status) // 状态
+      }];
+      this.total = this.tableData.length;
+
+      // 更新确认表单数据
+      this.confirmFormData = {
+        planName: selectedData.projectName || '',
+        testCode: selectedData.experimentCode || '',
+        testName: selectedData.experimentName || '',
+      };
+    },
+
+    // 添加状态转换方法
+    getStatusText(status) {
+      const statusMap = {
+        "-1": "草稿箱",
+        "1": "待确认",
+        "2": "已确认",
+        "3": "已封存"
+      };
+      return statusMap[status] || "未知";
+    },
     setSelectedIds(arr, selectKeyList) {
       function traverse(item) {
         item.selected = selectKeyList.includes(item.menuId);
@@ -131,7 +186,7 @@
             obj.roleId = this.$route.query.roleId
             edit(obj).then(() => {
               this.msgsuccess('保存成功')
-              this.$router.go(-1)
+              this.back()
             })
           } else {
             add(obj).then(() => {
@@ -141,7 +196,7 @@
                 remark: "",
               }
               this.menu = []
-              this.$router.go(-1)
+              this.back()
             })
           }
         }
@@ -235,37 +290,196 @@
       })
     },
     showAddTestItem() {
+      this.currentTestItem = null // 清空当前编辑项
       this.testItemDialogVisible = true
     },
     handleTestItemDialogClose() {
       this.testItemDialogVisible = false
+      this.currentTestItem = null
     },
     handleTestItemConfirm(formData) {
-      // 将新增的检测项添加到列表中
-      this.testItems.push({
-        ...formData,
-        index: this.testItems.length + 1
-      })
+      if (this.currentTestItem) {
+        // 编辑模式
+        const index = this.testItems.findIndex(item => item.termCode === this.currentTestItem.termCode)
+        if (index !== -1) {
+          this.testItems.splice(index, 1, {
+            ...formData,
+            id: this.currentTestItem.id // 保留原有ID
+          })
+        }
+      } else {
+        // 新增模式
+        this.testItems.push({
+          ...formData,
+          id: this.generateUniqueId() // 生成唯一ID
+        })
+      }
       this.testItemDialogVisible = false
-      this.$message.success('添加成功')
+      this.currentTestItem = null
+      this.$message.success(this.currentTestItem ? '编辑成功' : '添加成功')
+    },
+    handleEditTestItem(row) {
+      this.currentTestItem = { ...row } // 深拷贝当前行数据
+      this.testItemDialogVisible = true
+    },
+    handleDeleteTestItem(index) {
+      this.$confirm('确认删除该检测项吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.testItems.splice(index, 1)
+        this.$message.success('删除成功')
+      }).catch(() => { })
+    },
+    generateUniqueId() {
+      return 'test_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)
     },
     handleSubmit() {
-      // 这里可以添加表单验证逻辑
+      if (this.testItems.length === 0) {
+        this.$message.warning('请至少添加一个检测项')
+        return
+      }
+      if (!this.selectedScheduling) {
+        this.$message.warning('请选择实验调度')
+        return
+      }
+      // 设置确认弹窗的数据
       this.confirmFormData = {
-        planName: '项目名称示例',
-        testCode: '实验编号示例',
-        testName: '实验名称示例',
-        sampleCode: '取样单编号示例'
+        planName: this.selectedScheduling.projectName || '', // 所属项目课题方案
+        testCode: this.selectedScheduling.experimentCode || '', // 实验编号
+        testName: this.selectedScheduling.experimentName || '', // 实验名称
       }
       this.confirmDialogVisible = true
     },
-    handleConfirmSubmit(signatureImage) {
-      // 处理最终提交逻辑
-      console.log('提交确认单,签名图片:', signatureImage)
-      // TODO: 调用提交API
-      this.$message.success('提交成功')
-      this.$router.push('/dataManagement/confirmation-sheet')
-    }
+    async handleConfirmSubmit(signatureImage) {
+      try {
+        // 构建提交数据
+        const submitData = {
+          dispatchId: this.selectedScheduling.id, // 实验调度ID
+          auditStatus: 1, // 待确认状态
+          confirmSign: signatureImage, // 签字图片
+          signTime: new Date().toISOString(), // 签字时间
+          testMethodConfirmSheetTerms: this.testItems.map(item => ({
+            id: '', // 保留原有ID(编辑时使用)
+            termCode: item.termCode,
+            termName: item.termName,
+            termType: item.termType,
+            termMethodCode: item.termMethodCode,
+            termMethod: item.termMethod,
+            sampleRequire: item.sampleRequire,
+            status: 2, // 已填写状态
+            testId: item.testId
+          }))
+        }
+        if (this.formData.id) {
+          submitData.id = this.formData.id
+          await update(submitData)
+          this.$message.success('更新成功')
+        } else {
+          await add(submitData)
+          this.$message.success('提交成功')
+        }
+
+        this.confirmDialogVisible = false // 关闭弹窗
+        this.back()
+      } catch (error) {
+        this.$message.error((this.formData.id ? '更新' : '提交') + '失败:' + (error.message || '未知错误'))
+      }
+    },
+    back() {
+      this.$router.back();
+      this.$store.commit(
+        "SET_TAGLIST",
+        this.tagList.filter((item) => item.path !== this.$route.path)
+      );
+    },
+    async handleSaveDraft() {
+      try {
+        if (!this.selectedScheduling) {
+          this.$message.warning('请选择实验调度')
+          return
+        }
+
+        // 构建草稿数据
+        const draftData = {
+          dispatchId: this.selectedScheduling.id,
+          auditStatus: -1, // 草稿箱状态
+          testMethodConfirmSheetTerms: this.testItems.map(item => ({
+            id: '', // 保留原有ID(编辑时使用)
+            termCode: item.termCode,
+            termName: item.termName,
+            termType: item.termType,
+            termMethodCode: item.termMethodCode,
+            termMethod: item.termMethod,
+            sampleRequire: item.sampleRequire,
+            status: -1, // 草稿箱状态
+            testId: item.testId
+          }))
+        }
+
+        // 打印草稿参数
+        // 根据是否有 id 决定调用新增还是更新接口
+        if (this.formData.id) {
+          draftData.id = this.formData.id
+          await update(draftData)
+          this.$message.success('更新草稿成功')
+        } else {
+          await add(draftData)
+          this.$message.success('保存草稿成功')
+        }
+
+        this.$router.push('/dataManagement/confirmation-sheet')
+      } catch (error) {
+        this.$message.error((this.formData.id ? '更新' : '保存') + '草稿失败:' + (error.message || '未知错误'))
+      }
+    },
+    async getDetailData(id) {
+      try {
+        const res = await getDetail({ id })
+        if (res) {
+          // 设置实验调度数据
+          this.selectedScheduling = {
+            ...res,
+            id: res.dispatchId,
+          }
+          this.tableData = [{
+            // planCode: res.projectName,
+            // planName: res.experimentCode,
+            // testName: res.experimentName,
+            // notifyTime: res.experimentDate,
+
+            planCode: res.projectName || '', // 所属项目课题方案
+            planName: res.experimentCode || '', // 实验编号
+            testName: res.experimentName || '', // 实验名称
+            notifyTime: res.experimentDate || '', // 通知时间
+            startTime: res.experimentStartTime || '', // 实验开始时间
+            endTime: res.experimentEndTime || '', // 实验结束时间
+            participants: res.participantsName || '', // 参加人员
+            status: this.getStatusText(res.status) // 状态
+
+          }]
+
+          // 设置检测项数据
+          this.testItems = res.testMethodConfirmSheetTerms.map(item => ({
+            ...item,
+            id: item.id // 使用后端返回的ID
+          }))
+
+          // 设置表单数据
+          this.formData = {
+            id: res.id,
+            dispatchId: res.dispatchId,
+            auditStatus: res.auditStatus,
+            confirmSign: res.confirmSign,
+            signTime: res.signTime
+          }
+
+        }
+      } catch (error) {
+        // this.$message.error('获取详情失败:' + (error.message || '未知错误'))
+      }
+    },
   },
 };
 </script>

--
Gitblit v1.7.1