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/list.vue |  324 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 239 insertions(+), 85 deletions(-)

diff --git a/laboratory/src/views/dataManagement/inspectionReport/list.vue b/laboratory/src/views/dataManagement/inspectionReport/list.vue
index e9d66bb..f00ab07 100644
--- a/laboratory/src/views/dataManagement/inspectionReport/list.vue
+++ b/laboratory/src/views/dataManagement/inspectionReport/list.vue
@@ -1,16 +1,19 @@
 <template>
   <div class="list">
-    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null">
+    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null" @handleSizeChange="handleSizeChange" @handleCurrentChange="handleCurrentChange">
       <template #search>
         <el-form :model="form" labelWidth="auto" inline>
           <el-form-item label="项目课题方案名称:">
-            <el-input v-model="form.projectPlan" placeholder="请输入"></el-input>
+            <el-input v-model="form.projectName" placeholder="请输入"></el-input>
           </el-form-item>
           <el-form-item label="所属实验编号:">
-            <el-input v-model="form.experimentNo" placeholder="请输入"></el-input>
+            <el-input v-model="form.experimentCode" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item label="实验名称:">
+            <el-input v-model="form.experimentName" placeholder="请输入"></el-input>
           </el-form-item>
           <el-form-item label="创建人:">
-            <el-input v-model="form.creator" placeholder="请输入"></el-input>
+            <el-input v-model="form.createBy" placeholder="请输入"></el-input>
           </el-form-item>
           <el-form-item label="创建时间:">
             <el-date-picker
@@ -22,90 +25,167 @@
               value-format="yyyy-MM-dd"
             ></el-date-picker>
           </el-form-item>
-          <el-form-item label="实验名称:">
-            <el-input v-model="form.experimentName" placeholder="请输入"></el-input>
-          </el-form-item>
           <el-form-item label="">
             <el-button type="default" @click="resetForm">重置</el-button>
-            <el-button type="primary" style="margin-left: 10px;" @click="handleSearch">查询</el-button>
+            <el-button type="primary" @click="handleSearch" style="margin-left: 20px">查询</el-button>
           </el-form-item>
         </el-form>
       </template>
       <template #setting>
-        <div class="tableTitle" @click="handleAdd">
+        <div class="tableTitle">
           <div class="flex a-center">
-            <div class="title active">新增检验报告</div>
+            <div class="title" :class="{ active: activeTab == 'list' }" @click="handleTabChange('list')">
+              检验报告列表
+            </div>
+            <div v-if="isLabTechnician" class="drafts" :class="{ active: activeTab == 'draft' }" @click="handleTabChange('draft')">
+              草稿箱
+            </div>
           </div>
+          <el-button v-if="isLabTechnician" @click="handleAdd" class="el-icon-plus" type="primary">
+            新增检验报告</el-button>
         </div>
       </template>
       <template #table>
-        <el-table-column prop="projectPlan" label="所属项目课题方案" ></el-table-column>
-        <el-table-column prop="experimentNo" label="所属实验编号" ></el-table-column>
+        <el-table-column prop="projectName" label="所属课题方案" ></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="createTime" label="创建时间" ></el-table-column>
-        <el-table-column prop="creator" label="创建人" ></el-table-column>
+        <el-table-column prop="createBy" label="创建人" ></el-table-column>
         <el-table-column prop="status" label="状态" >
           <template slot-scope="scope">
-            <el-tag :type="scope.row.status === '待提交' ? 'warning' : 'success'">
-              {{ scope.row.status }}
+            <el-tag :type="getStatusType(scope.row.status)">
+              {{ getStatusText(scope.row.status) }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="操作">
+        <el-table-column label="操作" width="250">
           <template slot-scope="scope">
-            <el-button type="text" @click="handleSubmit(scope.row)">提交</el-button>
-            <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+            <!-- 列表状态下的按钮 -->
+            <template v-if="activeTab == 'list'">
+              <!-- 化验师的按钮 -->
+              <template v-if="isLabTechnician">
+                <el-button 
+                  v-if="scope.row.status == 1"
+                  type="text" 
+                  @click="handleSubmit(scope.row)"
+                >提交</el-button>
+                <el-button 
+                  type="text" 
+                  v-if="scope.row.status == 1"
+                  @click="handleEdit(scope.row)"
+                >编辑</el-button>
+                <el-button 
+                  type="text" 
+                  v-if="scope.row.status == 2"
+                  @click="handleDetail(scope.row)"
+                >详情</el-button>
+              </template>
+              <!-- 其他角色的按钮 -->
+              <template v-else>
+                <el-button 
+                  type="text" 
+                  @click="handleDetail(scope.row)"
+                >详情</el-button>
+              </template>
+            </template>
+            <!-- 草稿箱状态下的按钮 -->
+            <template v-else>
+              <el-button 
+                type="text" 
+                @click="handleEdit(scope.row)"
+              >编辑</el-button>
+              <el-button 
+                type="text" 
+                @click="handleDelete(scope.row)"
+              >删除</el-button>
+            </template>
           </template>
         </el-table-column>
       </template>
     </TableCustom>
+    <ShowDelConfirm 
+      :title="changeStatusTitle" 
+      :tip="changeStatusTip" 
+      :show="changeStatus"
+      @close="changeStatus = false" 
+      @confirm="handleChangeStatusConfirm" 
+    />
   </div>
 </template>
 
 <script>
-import store from '../../../store';
+import { getList, update, deleteById,commit } from './service';
+import ShowDelConfirm from "@/components/showDelConfirm/index.vue";
+
 export default {
-  name: "OriginalRecordTest",
+  name: "InspectionReportList",
+  components: {
+    ShowDelConfirm
+  },
   data() {
     return {
+      activeTab: 'list',
       form: {
-        projectPlan: "",
-        experimentNo: "",
-        creator: "",
+        testReason: "",
+        testResult: "",
+        createBy: "",
         createTime: [],
-        experimentName: ""
+        startTime: "",
+        endTime: "",
+        status: '',
+        pageNum: 1,
+        pageSize: 10
       },
-      tableData: [
-        {
-          id: '1',
-          projectPlan: '名称名称名称',
-          experimentNo: '31423764',
-          experimentName: '名称名称名称',
-          creator: '张三',
-          createTime: '2024-01-08',
-          status: '待提交'
-        }
-      ],
-      total: 5
+      tableData: [],
+      total: 0,
+      // 确认弹窗相关数据
+      changeStatus: false,
+      changeStatusTitle: "",
+      changeStatusTip: "",
+      currentOperationRow: null,
+      currentOperationType: ''
     };
+  },
+  computed: {
+    isLabTechnician() {
+      const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
+      return userInfo.roleType == 4; // 4是化验师
+    }
   },
   created() {
     this.getTableData();
   },
   methods: {
-    resetForm() {
-      this.form = {
-        projectPlan: "",
-        experimentNo: "",
-        creator: "",
-        createTime: [],
-        experimentName: ""
-      };
-    },
-    handleSearch() {
+    handleTabChange(tab) {
+      this.activeTab = tab;
+      this.form.status = tab == 'draft' ? -1 : '';
       this.getTableData();
     },
-    handleAdd(){
+    resetForm() {
+      this.form = {
+        testReason: "",
+        testResult: "",
+        createBy: "",
+        createTime: [],
+        startTime: "",
+        endTime: "",
+        status: this.activeTab == 'draft' ? -1 : '',
+        pageNum: 1,
+        pageSize: 10
+      };
+      this.getTableData();
+    },
+    handleSearch() {
+      if (this.form.createTime && this.form.createTime.length == 2) {
+        this.form.startTime = this.form.createTime[0];
+        this.form.endTime = this.form.createTime[1];
+      } else {
+        this.form.startTime = "";
+        this.form.endTime = "";
+      }
+      this.getTableData();
+    },
+    handleAdd() {
       this.$router.push({
         path: "/dataManagement/inspectionReport/detail",
         query: {
@@ -123,46 +203,101 @@
       });
     },
     handleSubmit(row) {
-      this.$confirm('确认提交该检验报告?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // TODO: 调用提交接口
-        this.$message({
-          type: 'success',
-          message: '提交成功!'
-        });
-        this.getTableData();
-      }).catch(() => {
-        this.$message({
-          type: 'info',
-          message: '已取消提交'
-        });          
+      this.currentOperationRow = row;
+      this.currentOperationType = 'submit';
+      this.changeStatusTitle = "确认提交检测数据结果吗?";
+      this.changeStatusTip = "提交后关联的样品信息将不可回溯";
+      this.changeStatus = true;
+    },
+    handleDetail(row) {
+      this.$router.push({
+        path: "/dataManagement/inspectionReport/detail",
+        query: {
+          id: row.id,
+          type: 'view'
+        }
       });
     },
+    handleDelete(row) {
+      this.currentOperationRow = row;
+      this.currentOperationType = 'delete';
+      this.changeStatusTitle = "确认要删除这条信息吗?";
+      this.changeStatusTip = "删除后信息无法找回";
+      this.changeStatus = true;
+    },
+    handleChangeStatusConfirm() {
+      if (!this.currentOperationRow) return;
+      
+      if (this.currentOperationType == 'submit') {
+        commit({id:this.currentOperationRow.id}).then(res => {
+          console.log('2222222',res)
+          if (res.code == 200) {
+            this.$message.success('提交成功!');
+            this.changeStatus = false;
+            this.getTableData();
+          } else {
+            this.$message.error(res.msg || '提交失败');
+          }
+        }).catch(() => {
+          this.$message.error('提交失败');
+        });
+      } else if (this.currentOperationType == 'delete') {
+        deleteById({
+          id: this.currentOperationRow.id
+        }).then(() => {
+          this.$message.success("删除成功");
+          this.changeStatus = false;
+          this.getTableData();
+        }).catch(error => {
+          this.$message.error("删除失败");
+        });
+      }
+    },
+    getStatusType(status) {
+      const statusMap = {
+        '-1': 'info',
+        '1': 'warning',
+        '2': 'success'
+      };
+      return statusMap[status] || 'info';
+    },
+    getStatusText(status) {
+      const statusMap = {
+        '-1': '草稿箱',
+        '1': '待提交',
+        '2': '已提交'
+      };
+      return statusMap[status] || '未知';
+    },
+    handleSizeChange(val) {
+      this.form.pageSize = val;
+      this.getTableData();
+    },
+    handleCurrentChange(val) {
+      this.form.pageNum = val;
+      this.getTableData();
+    },
     getTableData() {
-      this.tableData = [
-        {
-          id: '1',
-          projectPlan: '名称名称名称',
-          experimentNo: '31423764',
-          experimentName: '名称名称名称',
-          creator: '张三',
-          createTime: '2024-01-08',
-          status: '待提交'
-        },
-        {
-          id: '2',
-          projectPlan: '项目方案2',
-          experimentNo: '31423765',
-          experimentName: '实验名称2',
-          creator: '李四',
-          createTime: '2024-01-09',
-          status: '已提交'
+      if (this.form.createTime && this.form.createTime.length == 2) {
+        this.form.startTime = this.form.createTime[0];
+        this.form.endTime = this.form.createTime[1];
+      } else {
+        this.form.startTime = "";
+        this.form.endTime = "";
+      }
+
+      const { createTime, ...requestParams } = this.form;
+      console.log('requestParams',requestParams)
+      getList(requestParams).then(res => {
+        if (res.code == 200) {
+          this.tableData = res.data.records || [];
+          this.total = res.data.total || 0;
+        } else {
+          this.$message.error(res.msg || '获取列表失败');
         }
-      ];
-      this.total = this.tableData.length;
+      }).catch(() => {
+        this.$message.error('获取列表失败');
+      });
     }
   }
 };
@@ -172,31 +307,50 @@
 .list {
   height: 100%;
 }
+
 .flex {
   display: flex;
   align-items: center;
 }
+
 .tableTitle {
   display: flex;
   padding-bottom: 20px;
   justify-content: space-between;
   align-items: center;
-  cursor: pointer;
+
   .title {
     background: #fafafc;
     border-radius: 8px 8px 0px 0px;
     border: 1px solid #dcdfe6;
     padding: 16px 29px;
-    font-weight: bold;
     font-size: 18px;
     color: #606266;
     width: unset;
+    cursor: pointer;
+    transition: all 0.3s ease;
+    font-weight: 400;
   }
+
+  .drafts {
+    padding: 16px 65px;
+    background: #fafafc;
+    border-radius: 8px 8px 0px 0px;
+    border: 1px solid #dcdfe6;
+    font-weight: 400;
+    font-size: 18px;
+    color: #606266;
+    margin-left: 16px;
+    cursor: pointer;
+    transition: all 0.3s ease;
+  }
+
   .active {
     color: #049c9a;
     background: #ffffff;
     border-radius: 8px 8px 0px 0px;
     border: 1px solid #049c9a;
+    font-weight: bold;
   }
 }
 </style> 
\ No newline at end of file

--
Gitblit v1.7.1