From 10f03db48aa05493739d5657dd759a06f30d8e4c Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期四, 10 四月 2025 11:00:27 +0800
Subject: [PATCH] 新增接收弹窗

---
 src/views/dataManagement/sampleManage/addSample.vue |  293 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 250 insertions(+), 43 deletions(-)

diff --git a/src/views/dataManagement/sampleManage/addSample.vue b/src/views/dataManagement/sampleManage/addSample.vue
index 158722f..3cc2cad 100644
--- a/src/views/dataManagement/sampleManage/addSample.vue
+++ b/src/views/dataManagement/sampleManage/addSample.vue
@@ -27,47 +27,103 @@
         <el-table-column prop="creator" label="状态"></el-table-column>
       </template>
     </Table>
-    <div class="header-title-left" style="margin-top: 38px">
-      <img src="@/assets/public/headercard.png" />
-      <span>基础信息</span>
+
+    <!-- 化验师专用部分 -->
+    <div v-if="isAssayer" class="assayer-section">
+      <div class="header-title-left" style="margin-top: 38px">
+        <img src="@/assets/public/headercard.png" />
+        <span>送样-收样记录</span>
+      </div>
+      <div class="sample-code">取样单编号:{{ form.sampleCode || 'DD-25010BS01' }}</div>
+      
+      <!-- 待收样列表 -->
+      <div class="pending-samples">
+        <div class="sub-title">待收样列表</div>
+        <el-button type="primary" class="batch-receive" @click="handleBatchReceive">批量接收</el-button>
+        <Table :data="pendingSamples" :total="pendingSamplesTotal" :height="null" @selection-change="handleSelectionChange">
+          <template>
+            <el-table-column type="selection" width="55"></el-table-column>
+            <el-table-column prop="index" label="序号" width="80"></el-table-column>
+            <el-table-column prop="sampleName" label="取样名称"></el-table-column>
+            <el-table-column prop="sampleCode" label="取样样品编号"></el-table-column>
+            <el-table-column prop="ph" label="PH"></el-table-column>
+            <el-table-column prop="sampleAmount" label="取样量"></el-table-column>
+            <el-table-column prop="sendTime" label="送样时间"></el-table-column>
+            <el-table-column prop="sender" label="送样人"></el-table-column>
+            <el-table-column prop="status" label="状态"></el-table-column>
+            <el-table-column label="操作" width="100">
+              <template slot-scope="scope">
+                <el-button type="text" @click="handleReceive(scope.row)">接收</el-button>
+              </template>
+            </el-table-column>
+          </template>
+        </Table>
+      </div>
+
+      <!-- 已收样列表 -->
+      <div class="received-samples">
+        <div class="sub-title">已收样列表</div>
+        <Table :data="receivedSamples" :total="receivedSamplesTotal" :height="null">
+          <template>
+            <el-table-column prop="index" label="序号" width="80"></el-table-column>
+            <el-table-column prop="sampleName" label="取样名称"></el-table-column>
+            <el-table-column prop="sampleCode" label="取样样品编号"></el-table-column>
+            <el-table-column prop="ph" label="PH"></el-table-column>
+            <el-table-column prop="sampleAmount" label="取样量"></el-table-column>
+            <el-table-column prop="sendTime" label="送样时间"></el-table-column>
+            <el-table-column prop="sender" label="送样人"></el-table-column>
+            <el-table-column prop="receiveTime" label="收样时间"></el-table-column>
+            <el-table-column prop="receiver" label="收样人"></el-table-column>
+            <el-table-column prop="status" label="状态"></el-table-column>
+          </template>
+        </Table>
+      </div>
     </div>
-    <el-form
-      v-if="!isExperimenter"
-      ref="form"
-      :model="form"
-      :rules="rules"
-      inline
-      label-position="top"
-    >
-      <el-form-item label="取样单编号" prop="sampleCode">
-        <el-input
-          v-model="form.sampleCode"
-          :disabled="!isExperimenter"
-          :placeholder="isExperimenter ? '请输入取样单编号' : '自动生成'"
-        />
-      </el-form-item>
-    </el-form>
-    <div v-else class="number">取样单编号:213421241</div>
-    <div class="header-title-left" style="margin-top: 38px">
-      <img src="@/assets/public/headercard.png" />
-      <span>取样操作记录</span>
-      <el-button
-        v-if="isEngineer"
-        type="primary"
-        class="el-icon-plus"
-        @click="showAddTime = true"
+
+    <!-- 非化验师部分 -->
+    <div v-if="!isAssayer">
+      <div class="header-title-left" style="margin-top: 38px">
+        <img src="@/assets/public/headercard.png" />
+        <span>基础信息</span>
+      </div>
+      <el-form
+        v-if="!isExperimenter"
+        ref="form"
+        :model="form"
+        :rules="rules"
+        inline
+        label-position="top"
       >
-        新增工艺时间
-      </el-button>
-      <el-button
-        type="primary"
-        class="el-icon-plus"
-        @click="showAdditives = !showAdditives"
-      >
-        {{ showAdditives ? "收起辅料详情" : "展开辅料详情" }}
-      </el-button>
+        <el-form-item label="取样单编号" prop="sampleCode">
+          <el-input
+            v-model="form.sampleCode"
+            :disabled="!isExperimenter"
+            :placeholder="isExperimenter ? '请输入取样单编号' : '自动生成'"
+          />
+        </el-form-item>
+      </el-form>
+      <div v-else class="number">取样单编号:213421241</div>
+      <div class="header-title-left" style="margin-top: 38px">
+        <img src="@/assets/public/headercard.png" />
+        <span>取样操作记录</span>
+        <el-button
+          v-if="isEngineer"
+          type="primary"
+          class="el-icon-plus"
+          @click="showAddTime = true"
+        >
+          新增工艺时间
+        </el-button>
+        <el-button
+          type="primary"
+          class="el-icon-plus"
+          @click="showAdditives = !showAdditives"
+        >
+          {{ showAdditives ? "收起辅料详情" : "展开辅料详情" }}
+        </el-button>
+      </div>
     </div>
-    <Table :data="sampleData" :total="sampleTotal" :height="null">
+    <Table v-if="!isAssayer" :data="sampleData" :total="sampleTotal" :height="null">
       <template>
         <el-table-column prop="index" label="序号" width="80"></el-table-column>
         <el-table-column
@@ -182,7 +238,7 @@
         </el-table-column>
       </template>
     </Table>
-    <div class="remark-section" v-if="isExperimenter">
+    <div class="remark-section" v-if="isExperimenter && !isAssayer">
       <el-form :model="form" label-position="top">
         <el-form-item label="备注">
           <el-input
@@ -194,7 +250,7 @@
         </el-form-item>
       </el-form>
     </div>
-    <div class="add-project-footer">
+    <div class="add-project-footer" v-if="!isAssayer">
       <el-button type="primary" class="save-btn" @click="handleSave">保存</el-button>
       <el-button>存草稿</el-button>
     </div>
@@ -211,6 +267,11 @@
       :sample-data="sampleData"
       @confirm="handleConfirm"
     />
+    <receive-confirm-dialog
+      :visible.sync="showReceiveConfirm"
+      :sample-count="selectedSamples.length"
+      @confirm="confirmReceive"
+    />
   </Card>
 </template>
 
@@ -219,6 +280,7 @@
 import addTime from "./components/addTime.vue";
 import SampleDialog from "./components/sampleDialog.vue";
 import ConfirmDialog from './components/confirmDialog.vue';
+import ReceiveConfirmDialog from './components/receiveConfirmDialog.vue'
 
 export default {
   name: "AddConfirmationSheet",
@@ -227,6 +289,7 @@
     addTime,
     SampleDialog,
     ConfirmDialog,
+    ReceiveConfirmDialog
   },
   props: {},
   data() {
@@ -236,9 +299,10 @@
       showAdditives: true,
       showSampleDialog: false,
       showConfirmDialog: false,
+      showReceiveConfirm: false,
       currentSampleData: {},
       currentEditIndex: -1,
-      schedulingData: [], // 实验调度表格数据
+      schedulingData: [],
       schedulingTotal: 0,
       sampleData: [
         {
@@ -262,7 +326,7 @@
           sampleAmount: "100ml",
           sampleTime: "2024-03-20 10:00:00",
           remark: "",
-          operator: "张三",
+          operator: "张三"
         },
         {
           index: 2,
@@ -299,7 +363,81 @@
         ],
       },
       menu: [],
-      userRole: "experimenter", // 用户角色,可以是 'engineer' 或 'experimenter'
+      userRole: "assayer", // 用户角色,可以是 'engineer'、'experimenter' 或 'assayer'
+      // 化验师相关数据
+      pendingSamples: [
+        {
+          index: 1,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "5",
+          sampleAmount: "34",
+          sendTime: "2025-1-9 15:26:08",
+          sender: "李四",
+          status: "待接收"
+        },
+        {
+          index: 2,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "6",
+          sampleAmount: "23",
+          sendTime: "2025-1-9 15:26:08",
+          sender: "李四",
+          status: "待接收"
+        },
+        {
+          index: 3,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "7",
+          sampleAmount: "23",
+          sendTime: "2025-1-13 16:38:17",
+          sender: "李四",
+          status: "待接收"
+        }
+      ],
+      pendingSamplesTotal: 3,
+      receivedSamples: [
+        {
+          index: 1,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "5",
+          sampleAmount: "34",
+          sendTime: "2025-1-9 15:26:08",
+          sender: "李四",
+          receiveTime: "2025-1-15 14:00:50",
+          receiver: "段向蒙",
+          status: "已接收"
+        },
+        {
+          index: 2,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "6",
+          sampleAmount: "23",
+          sendTime: "2025-1-9 15:26:08",
+          sender: "李四",
+          receiveTime: "2025-1-15 14:00:50",
+          receiver: "傅彦涛",
+          status: "已接收"
+        },
+        {
+          index: 3,
+          sampleName: "名称名称名称",
+          sampleCode: "314234321",
+          ph: "7",
+          sampleAmount: "23",
+          sendTime: "2025-1-13 16:38:17",
+          sender: "李四",
+          receiveTime: "2025-1-15 14:00:50",
+          receiver: "王乐康",
+          status: "已接收"
+        }
+      ],
+      receivedSamplesTotal: 3,
+      selectedSamples: []
     };
   },
   computed: {
@@ -311,6 +449,9 @@
     },
     isExperimenter() {
       return this.userRole === "experimenter";
+    },
+    isAssayer() {
+      return this.userRole === "assayer";
     },
   },
   watch: {},
@@ -524,6 +665,45 @@
       this.$message.success('保存成功');
       this.showConfirmDialog = false;
     },
+    handleSelectionChange(selection) {
+      this.selectedSamples = selection;
+    },
+    handleReceive(row) {
+      this.selectedSamples = [row];
+      this.showReceiveConfirm = true;
+    },
+    handleBatchReceive() {
+      if (this.selectedSamples.length === 0) {
+        this.$message.warning('请先选择要接收的样品');
+        return;
+      }
+      this.showReceiveConfirm = true;
+    },
+    confirmReceive(signature) {
+      // 这里处理接收确认逻辑
+      const sampleIds = this.selectedSamples.map(item => item.id);
+      console.log('接收样品', { sampleIds, signature });
+      
+      // 模拟接收成功
+      this.$message.success(`成功接收 ${this.selectedSamples.length} 个样品`);
+      
+      // 更新数据
+      this.selectedSamples.forEach(sample => {
+        const index = this.pendingSamples.findIndex(item => item.id === sample.id);
+        if (index > -1) {
+          this.pendingSamples.splice(index, 1);
+          this.receivedSamples.unshift({
+            ...sample,
+            receiveTime: new Date().toLocaleString(),
+            receiver: '当前用户',
+            status: '已接收'
+          });
+        }
+      });
+      
+      // 清空选择
+      this.selectedSamples = [];
+    }
   },
 };
 </script>
@@ -724,4 +904,31 @@
     margin: 0 32px 0 8px;
   }
 }
+
+.assayer-section {
+  .sample-code {
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    font-size: 14px;
+    color: rgba(0,0,0,0.88);
+    margin: 20px 0;
+  }
+
+  .sub-title {
+    font-size: 16px;
+    font-weight: 500;
+    color: #333;
+    margin: 20px 0;
+    display: inline-block;
+  }
+
+  .batch-receive {
+    float: right;
+    margin-bottom: 16px;
+  }
+
+  .pending-samples, .received-samples {
+    // margin-top: 20px;
+  }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.7.1