From 4d4e8cd36377fa24cdda7a560dfc42fd2c9334b4 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期五, 23 五月 2025 15:33:49 +0800
Subject: [PATCH] 实验结果汇报

---
 laboratory/src/views/dataManagement/testResultReport/list.vue |  411 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 252 insertions(+), 159 deletions(-)

diff --git a/laboratory/src/views/dataManagement/testResultReport/list.vue b/laboratory/src/views/dataManagement/testResultReport/list.vue
index b4486dc..27ebf63 100644
--- a/laboratory/src/views/dataManagement/testResultReport/list.vue
+++ b/laboratory/src/views/dataManagement/testResultReport/list.vue
@@ -1,31 +1,35 @@
 <template>
   <div class="list">
-    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null">
+    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null" @handlePageChange="handlePageChange" @handleSizeChange="handleSizeChange">
       <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-date-picker
-              v-model="form.createTime"
+              v-model="dateRange"
               type="daterange"
               range-separator="至"
               start-placeholder="开始日期"
               end-placeholder="结束日期"
               value-format="yyyy-MM-dd"
+              @change="handleDateChange"
             ></el-date-picker>
           </el-form-item>
           <el-form-item label="状态:">
             <el-select v-model="form.status" placeholder="请选择">
-              <el-option label="待提交" value="pending"></el-option>
-              <el-option label="已提交" value="submitted"></el-option>
+              <el-option label="全部" value=""></el-option>
+              <el-option label="待提交" :value="1"></el-option>
+              <el-option label="待评定" :value="2"></el-option>
+              <el-option label="已评定" :value="3"></el-option>
+              <el-option label="已封存" :value="4"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="">
@@ -45,6 +49,7 @@
               实验结果汇报列表
             </div>
             <div
+              v-if="isProcessEngineer"
               class="drafts"
               :class="{ active: currentType === 'draft' }"
               @click="handleTypeChange('draft')"
@@ -52,160 +57,137 @@
               草稿箱
             </div>
           </div>
-          <el-button @click="handleAddResult" class="el-icon-plus" type="primary">
-            新增实验结果
+          <el-button v-if="isProcessEngineer" @click="handleAddResult" 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="engineer" label="工艺工程师"></el-table-column>
-        <el-table-column prop="chemist" label="化验师"></el-table-column>
-        <el-table-column prop="engineerApproved" label="是否评定">
+        <el-table-column prop="processEngineerName" label="工艺工程师"></el-table-column>
+        
+        <el-table-column prop="laboratoryChemistName" label="化验师"></el-table-column>
+        <el-table-column prop="laboratoryChemistEvaluate" label="是否评定">
           <template slot-scope="scope">
-            <el-tag :type="scope.row.engineerApproved === '是' ? 'success' : 'danger'">
-              {{ scope.row.engineerApproved }}
+            <el-tag :type="scope.row.laboratoryChemistEvaluate === 1 ? 'success' : 'danger'">
+              {{ scope.row.laboratoryChemistEvaluate === 1 ? '是' : '否' }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="experimenter" label="实验员"></el-table-column>
-        <el-table-column prop="experimenterApproved" label="是否评定">
+        <el-table-column prop="experimenterName" label="实验员"></el-table-column>
+        <el-table-column prop="experimenterEvaluate" label="是否评定">
           <template slot-scope="scope">
-            <el-tag :type="scope.row.experimenterApproved === '是' ? 'success' : 'danger'">
-              {{ scope.row.experimenterApproved }}
+            <el-tag :type="scope.row.experimenterEvaluate === 1 ? 'success' : 'danger'">
+              {{ scope.row.experimenterEvaluate === 1 ? '是' : '否' }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建日期"></el-table-column>
+        <el-table-column prop="createTime" label="创建日期" width="180"></el-table-column>
         <el-table-column prop="status" label="状态">
           <template slot-scope="scope">
-            <el-tag :type="scope.row.status === '已提交' ? 'success' : 'warning'">
-              {{ scope.row.status }}
+            <el-tag :type="getStatusType(scope.row.status)">
+              {{ getStatusText(scope.row.status) }}
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="操作" width="280">
+        <el-table-column label="操作" width="180">
           <template slot-scope="scope">
             <template v-if="currentType === 'list'">
-              <!-- 待提交状态 -->
-              <template v-if="scope.row.status === '待提交'">
-                <el-button type="text" @click="handleSubmit(scope.row)">提交</el-button>
-                <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
-                <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
-                <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+              <template v-if="isProcessEngineer">
+                <template v-if="scope.row.status === 1">
+                  <el-button type="text" @click="handleSubmit(scope.row)">提交</el-button>
+                  <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
+                  <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
+                  <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+                </template>
+                <!-- <template v-else-if="scope.row.status === 2">
+                  <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
+                </template> -->
+                <template v-else>
+                  <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
+                </template>
               </template>
-              <!-- 待评定状态 -->
-              <template v-else-if="scope.row.status === '待评定'">
-                <el-button type="text" @click="handleEvaluate(scope.row)">评定</el-button>
+              <template v-else>
                 <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
-              </template>
-              <!-- 已提交状态 -->
-              <template v-else-if="scope.row.status === '已提交'">
-                <el-button type="text" @click="handleDetail(scope.row.id)">详情</el-button>
+                <el-button 
+                  v-if="scope.row.status === 2" 
+                  type="text" 
+                  @click="handleEvaluate(scope.row)"
+                >评定</el-button>
               </template>
             </template>
-            <!-- 草稿箱 -->
             <template v-else>
               <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
-              <el-button type="text" @click="handleDetail(scope.row.id)">详情</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" 
+    />
+    <!-- 评价弹窗 -->
+    <evaluation-dialog 
+      :modelValue="evaluationDialogVisible" 
+      :type="'processEngineer'"
+      :viewJson="currentEvaluationData" 
+      @update:modelValue="updateEvaluationDialogVisible"
+      @submit="handleEvaluationSubmit" 
+    />
   </div>
 </template>
 
 <script>
+import { getList,deleteById,commit,evaluateProcess } from './service';
+import ShowDelConfirm from "@/components/showDelConfirm/index.vue";
+import EvaluationDialog from "./components/evaluation-dialog.vue";
+import moment from "moment";
+
 export default {
   name: "TestResultReport",
+  components: {
+    ShowDelConfirm,
+    EvaluationDialog
+  },
   data() {
     return {
       currentType: "list", // 当前显示类型:list-列表,draft-草稿箱
+      dateRange: [], // 日期范围
       form: {
-        projectPlan: "",
-        experimentNo: "",
+        projectName: "",
+        experimentCode: "",
         experimentName: "",
-        createTime: [],
-        status: ""
+        startTime: "",
+        endTime: "",
+        status: "",
+        pageNum: 1,
+        pageSize: 10
       },
       tableData: [],
       total: 0,
-      // 正式列表数据
-      mockListData: [
-        {
-          id: '1',
-          projectPlan: '名称名称名称',
-          experimentNo: '31423764',
-          experimentName: '名称名称名称',
-          engineer: '李治悦',
-          chemist: '刘大大',
-          engineerApproved: '否',
-          experimenter: '周乐心; 张瑞瑞',
-          experimenterApproved: '否',
-          createTime: '2025-1-2 16:27:17',
-          status: '待提交'
-        },
-        {
-          id: '2',
-          projectPlan: '高性能材料研究',
-          experimentNo: '31423765',
-          experimentName: '材料强度测试',
-          engineer: '赵雨',
-          chemist: '王泽',
-          engineerApproved: '是',
-          experimenter: '李明; 张华',
-          experimenterApproved: '是',
-          createTime: '2025-1-2 16:30:17',
-          status: '已提交'
-        },
-        {
-          id: '3',
-          projectPlan: '新型合金开发',
-          experimentNo: '31423766',
-          experimentName: '合金性能分析',
-          engineer: '杨静',
-          chemist: '陈亮',
-          engineerApproved: '是',
-          experimenter: '王刚',
-          experimenterApproved: '否',
-          createTime: '2025-1-2 16:35:17',
-          status: '待评定'
-        }
-      ],
-      // 草稿箱数据
-      mockDraftData: [
-        {
-          id: '4',
-          projectPlan: '环保材料研究',
-          experimentNo: '31423767',
-          experimentName: '材料降解测试',
-          engineer: '张伟',
-          chemist: '李强',
-          engineerApproved: '否',
-          experimenter: '王芳',
-          experimenterApproved: '否',
-          createTime: '2025-1-2 16:40:17',
-          status: '草稿'
-        },
-        {
-          id: '5',
-          projectPlan: '纳米材料开发',
-          experimentNo: '31423768',
-          experimentName: '纳米结构分析',
-          engineer: '刘洋',
-          chemist: '周杰',
-          engineerApproved: '否',
-          experimenter: '孙明',
-          experimenterApproved: '否',
-          createTime: '2025-1-2 16:45:17',
-          status: '草稿'
-        }
-      ]
+      // 确认弹窗相关数据
+      changeStatus: false,
+      changeStatusTitle: "",
+      changeStatusTip: "",
+      currentOperationRow: null,
+      currentOperationType: '',
+      // 评价弹窗相关数据
+      evaluationDialogVisible: false,
+      currentEvaluationData: null,
     };
+  },
+  computed: {
+    isProcessEngineer() {
+      const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
+      return userInfo.roleType === 3; // 3是工艺工程师
+    }
   },
   created() {
     this.getTableData();
@@ -213,12 +195,16 @@
   methods: {
     resetForm() {
       this.form = {
-        projectPlan: "",
-        experimentNo: "",
+        projectName: "",
+        experimentCode: "",
         experimentName: "",
-        createTime: [],
-        status: ""
+        startTime: "",
+        endTime: "",
+        status: "",
+        pageNum: 1,
+        pageSize: 10
       };
+      this.dateRange = [];
     },
     handleSearch() {
       this.getTableData();
@@ -227,7 +213,6 @@
       this.$router.push({
         path: "/dataManagement/testResultReport/detail",
         query: { 
-          id: 'new',
           type: 'add'
         }
       });
@@ -251,49 +236,161 @@
       });
     },
     handleSubmit(row) {
-      this.$confirm('确认提交该实验结果?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // TODO: 调用提交接口
-        this.$message.success('提交成功');
-        this.getTableData();
-      }).catch(() => {});
+      this.currentOperationRow = row;
+      this.currentOperationType = 'submit';
+      this.changeStatusTitle = "确认提交?";
+      this.changeStatusTip = "提交之后无法再次编辑";
+      this.changeStatus = true;
     },
     handleDelete(row) {
-      this.$confirm('确认删除该实验结果?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        // TODO: 调用删除接口
-        this.$message.success('删除成功');
-        this.getTableData();
-      }).catch(() => {});
+      this.currentOperationRow = row;
+      this.currentOperationType = 'delete';
+      this.changeStatusTitle = "确认要删除这条信息吗?";
+      this.changeStatusTip = "删除后信息无法找回";
+      this.changeStatus = true;
     },
     handleEvaluate(row) {
-      this.$router.push({
-        path: "/dataManagement/testResultReport/detail",
-        query: { 
-          id: row.id,
-          type: 'evaluate'
-        }
-      });
+      this.currentOperationRow = row;
+      this.evaluationDialogVisible = true;
     },
     handleTypeChange(type) {
       this.currentType = type;
       this.getTableData();
     },
     getTableData() {
-      // 根据currentType获取不同的数据
-      if (this.currentType === 'list') {
-        this.tableData = this.mockListData;
-        this.total = this.mockListData.length;
+      const params = {
+        ...this.form,
+        status: this.currentType === 'draft' ? -1 : this.form.status
+      };
+      
+      getList(params).then(res => {
+        if (res.code === 200) {
+          this.tableData = res.data.records || [];
+          this.total = res.data.total || 0;
+        } else {
+          this.$message.error(res.msg || '获取数据失败');
+        }
+      }).catch(err => {
+        this.$message.error('获取数据失败');
+      });
+    },
+    handleDateChange(val) {
+      if (val) {
+        this.form.startTime = val[0];
+        this.form.endTime = val[1];
       } else {
-        this.tableData = this.mockDraftData;
-        this.total = this.mockDraftData.length;
+        this.form.startTime = '';
+        this.form.endTime = '';
       }
+    },
+    getStatusType(status) {
+      const statusMap = {
+        '-1': 'info',
+        '1': 'warning',
+        '2': 'warning',
+        '3': 'success',
+        '4': 'info',
+        '5': 'warning'
+      };
+      return statusMap[status] || 'info';
+    },
+    getStatusText(status) {
+      const statusMap = {
+        '-1': '草稿箱',
+        '1': '待提交',
+        '2': '待评定',
+        '3': '已评定',
+        '4': '已封存',
+        '5': '已解封'
+      };
+      return statusMap[status] || '未知';
+    },
+    handlePageChange(pageNum) {
+      this.form.pageNum = pageNum;
+      this.getTableData();
+    },
+    handleSizeChange(pageSize) {
+      this.form.pageSize = pageSize;
+      this.getTableData();
+    },
+    handleChangeStatusConfirm() {
+      if (!this.currentOperationRow) return;
+      
+      if (this.currentOperationType === 'submit') {
+        commit({ id: this.currentOperationRow.id }).then(res => {
+          if (res) {
+            this.$message.success('提交成功');
+            this.changeStatus = false;
+            this.getTableData();
+          } else {
+            this.$message.error(res.msg || '提交失败');
+          }
+        }).catch(err => {
+          this.$message.error('提交失败');
+        });
+      } else if (this.currentOperationType === 'delete') {
+        deleteById({ id: this.currentOperationRow.id }).then(res => {
+          if (res) {
+            this.$message.success('删除成功');
+            this.changeStatus = false;
+            this.getTableData();
+          } else {
+            this.$message.error(res.msg || '删除失败');
+          }
+        }).catch(err => {
+          this.$message.error('删除失败');
+        });
+      }
+    },
+    // 更新弹窗显示状态
+    updateEvaluationDialogVisible(value) {
+      this.evaluationDialogVisible = value;
+      if (!value) {
+        this.currentEvaluationData = null;
+      }
+    },
+    // 处理评价提交
+    handleEvaluationSubmit(evaluationData) {
+      const { activeIndex } = evaluationData;
+
+      // 将评分数据转换为后端需要的格式
+      const evaluateData = {
+        evaluateType: 1, // 1=工艺工程师
+        evaluateOne: this.getEvaluateValue(activeIndex[0].score),
+        evaluateTwo: this.getEvaluateValue(activeIndex[1].score),
+        evaluateThree: this.getEvaluateValue(activeIndex[2].score),
+        evaluateFour: this.getEvaluateValue(activeIndex[3].score),
+        evaluateFive: this.getEvaluateValue(activeIndex[4].score),
+        evaluateSix: this.getEvaluateValue(activeIndex[5].score),
+        evaluateTime: moment().format('YYYY-MM-DD HH:mm:ss'),
+        resultEvaluateJson: JSON.stringify(activeIndex),
+        resultReportId: this.currentOperationRow.id,
+        dispatchId: this.currentOperationRow.dispatchId,
+        status: 1
+      };
+      console.log('evaluateData',evaluateData)
+
+      evaluateProcess(evaluateData).then(res => {
+        if (res.code == 200) {
+          this.$message.success('评定成功');
+          this.evaluationDialogVisible = false;
+          this.getTableData(); // 重新获取列表数据
+        } else {
+          this.$message.error(res.msg || '评定失败');
+        }
+      }).catch(err => {
+        this.$message.error('评定失败');
+      });
+    },
+    // 将分数转换为评定值
+    getEvaluateValue(score) {
+      // 2分 = 良好(1), 1分 = 正确(2), 0分 = 失误(3)
+      const scoreMap = {
+        2: 1, // 良好
+        1: 2, // 正确
+        0: 3  // 失误
+      };
+      return scoreMap[score] || 3; // 默认返回失误
     }
   }
 };
@@ -312,33 +409,29 @@
   padding-bottom: 20px;
   justify-content: space-between;
   align-items: center;
-  .title {
+  .title, .drafts {
     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;
+    font-weight: 400;
+  }
+  .title {
+    padding: 16px 29px;
   }
   .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;
   }
   .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