From d8d68a0aee93073b5ec3195368ca0ed1076f66a2 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期三, 25 六月 2025 17:58:08 +0800
Subject: [PATCH] 对接评定接口和中台待办事项

---
 laboratory/src/views/deliveryAssessment/processEngineerEvaluate/index.vue |  389 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 263 insertions(+), 126 deletions(-)

diff --git a/laboratory/src/views/deliveryAssessment/processEngineerEvaluate/index.vue b/laboratory/src/views/deliveryAssessment/processEngineerEvaluate/index.vue
index 348229f..54441ab 100644
--- a/laboratory/src/views/deliveryAssessment/processEngineerEvaluate/index.vue
+++ b/laboratory/src/views/deliveryAssessment/processEngineerEvaluate/index.vue
@@ -1,157 +1,294 @@
 <template>
-    <div class="list">
-        <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange"
-            @sizeChange="handleSizeChange">
-            <template #search>
-                <el-form :model="form" label-width="140px" inline>
-                    <el-form-item label="所属项目课题方案:">
-                        <el-input v-model="form.name" placeholder="请输入" />
-                    </el-form-item>
-                    <el-form-item label="实验编号:">
-                        <el-input v-model="form.name" placeholder="请输入" />
-                    </el-form-item>
-                    <el-form-item label="创建日期:">
-                        <el-input v-model="form.name" placeholder="请输入" />
-                    </el-form-item>
-                    <el-form-item label="状态:">
-                        <el-select v-model="form.name" placeholder="请选择" />
-                    </el-form-item>
-                    <el-form-item class="search-btn-box">
-                        <el-button>重置</el-button>
-                        <el-button type="primary">查询</el-button>
-                    </el-form-item>
-                </el-form>
-            </template>
-            <template #setting>
-                <div class="table-title">
-                    实验结果汇报列表
-                </div>
-            </template>
-            <template #table>
-                <el-table-column prop="name" label="所属项目课题方案" />
-                <el-table-column prop="age" label="实验编号" />
-                <el-table-column prop="age" label="工艺工程师" />
-                <el-table-column prop="age" label="化验师" />
-                <el-table-column prop="age" label="实验员" />
-                <el-table-column prop="age" label="创建日期" />
-                <el-table-column prop="age" label="状态">
-                    <template #default="{ row }">
-                        <el-tag v-if="row.status == 1" type="info" color="#fff">已评定</el-tag>
-                        <el-tag v-else type="success">待评定</el-tag>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="age" label="操作">
-                    <template #default="{ row }">
-                        <el-button type="text" @click="assessmentVisible = true">详情</el-button>
-                    </template>
-                </el-table-column>
-            </template>
-        </TableCustom>
-    </div>
+  <div class="list">
+    <TableCustom
+      :queryForm="queryForm"
+      :tableData="tableData"
+      :total="total"
+      @currentChange="handleCurrentChange"
+      @sizeChange="handleSizeChange"
+    >
+      <template #search>
+        <el-form :model="form" label-width="140px" inline>
+          <el-form-item label="所属项目课题方案:">
+            <el-input v-model="form.projectName" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="实验编号:">
+            <el-input v-model="form.experimentCode" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="实验名称:">
+            <el-input v-model="form.experimentName" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="创建日期:">
+            <el-input v-model="form.createTime" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="状态:">
+            <el-select v-model="form.status" placeholder="请选择">
+              <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 class="search-btn-box">
+            <el-button @click="resetForm">重置</el-button>
+            <el-button type="primary" @click="handleSearch">查询</el-button>
+          </el-form-item>
+        </el-form>
+      </template>
+      <template #setting>
+        <div class="table-title">实验结果汇报列表</div>
+      </template>
+      <template #table>
+        <el-table-column prop="projectName" label="所属项目课题方案" />
+        <el-table-column prop="experimentCode" label="实验编号" />
+        <el-table-column prop="experimentName" label="实验名称" />
+        <el-table-column prop="processEngineerName" label="工艺工程师" />
+        <el-table-column prop="laboratoryChemistName" label="化验师" />
+        <el-table-column prop="experimenterName" label="实验员" />
+        <el-table-column prop="createTime" label="创建日期" />
+        <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>
+        <el-table-column prop="operation" label="操作">
+          <template #default="{ row }">
+            <el-button type="text" @click="handleDetail(row)">详情</el-button>
+            <el-button
+              v-if="row.status === 2"
+              type="text"
+              @click="handleEvaluate(row)"
+              >评定</el-button
+            >
+          </template>
+        </el-table-column>
+      </template>
+    </TableCustom>
+    <evaluation-dialog
+      :modelValue="evaluationDialogVisible"
+      :type="'processEngineer'"
+      :viewJson="currentEvaluationData"
+      @update:modelValue="updateEvaluationDialogVisible"
+      @submit="handleEvaluationSubmit"
+    />
+  </div>
 </template>
 
 <script>
+import EvaluationDialog from "./components/evaluation-dialog.vue";
+import { evaluatePageList,evaluateProcess } from './service.js';
 
 export default {
-    name: 'ProcessEngineerEvaluate',
-    data() {
-        return {
-            form: {
-            },
-            tableData: [],
-            queryForm: {
-                pageSize: 10,
-                pageNum: 1
-            },
-            total: 0,
-        }
+  name: "ProcessEngineerEvaluate",
+  components: {
+    EvaluationDialog,
+  },
+  data() {
+    return {
+      form: {
+        projectName: '',
+        experimentCode: '',
+        experimentName: '',
+        createTime: '',
+        status: '',
+      },
+      tableData: [],
+      queryForm: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+      total: 0,
+      evaluationDialogVisible: false,
+      currentEvaluationData: null,
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    handleCurrentChange(page) {
+      this.queryForm.pageNum = page;
+      this.getList();
     },
-    methods: {
-        handleCurrentChange(page) {
-            this.queryForm.pageNum = page
-            this.getList()
+    handleSizeChange(size) {
+      this.queryForm.pageSize = size;
+      this.getList();
+    },
+    getList() {
+      const params = {
+        ...this.form,
+        pageNum: this.queryForm.pageNum,
+        pageSize: this.queryForm.pageSize,
+      };
+      evaluatePageList(params).then(res => {
+        if (res && res.code === 200) {
+          this.tableData = res.data.records || [];
+          this.total = res.data.total || 0;
+        } else {
+          this.$message.error(res.msg || '获取数据失败');
+        }
+      }).catch(() => {
+        this.$message.error('获取数据失败');
+      });
+    },
+    handleDetail(row) {
+      this.$router.push({
+        path: "/dataManagement/testResultReport/detail",
+        query: {
+          id: row.id,
+          type: "view",
         },
-        handleSizeChange(size) {
-            this.queryForm.pageSize = size
-            this.getList()
-        },
-        getList() {
+      });
+    },
+    handleEvaluate(row) {
+      this.currentEvaluationData = row; // 可根据实际需要传递数据
+      this.evaluationDialogVisible = true;
+    },
+    updateEvaluationDialogVisible(val) {
+      this.evaluationDialogVisible = val;
+      if (!val) 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)
 
-        },
-        handleDetail(row) {
-            // 处理详情
-        },
-    }
-}
+      evaluateProcess(evaluateData).then(res => {
+        if (res.code == 200) {
+          this.$message.success('评定成功');
+          this.evaluationDialogVisible = false;
+          this.getList(); // 重新获取列表数据
+        } else {
+          this.$message.error(res.msg || '评定失败');
+        }
+      }).catch(err => {
+        this.$message.error('评定失败');
+      });
+    },
+    resetForm() {
+      this.form = {
+        projectName: '',
+        experimentCode: '',
+        experimentName: '',
+        createTime: '',
+        status: '',
+      };
+      this.getList();
+    },
+    handleSearch() {
+      this.getList();
+    },
+    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] || '未知';
+    },
+  },
+};
 </script>
 
 <style scoped lang="less">
 .list {
-    height: 100%;
+  height: 100%;
 }
 
 .top-box-integral {
-    display: flex;
-    justify-content: space-between;
-    flex-wrap: wrap;
-    gap: 28px;
+  display: flex;
+  justify-content: space-between;
+  flex-wrap: wrap;
+  gap: 28px;
 
-    &-card {
-        flex: 1;
-        background: #E8FAF6;
-        box-shadow: 0px 10px 10px 0px rgba(0, 0, 0, 0.06);
-        border-radius: 10px;
-        padding: 21px 20px;
+  &-card {
+    flex: 1;
+    background: #e8faf6;
+    box-shadow: 0px 10px 10px 0px rgba(0, 0, 0, 0.06);
+    border-radius: 10px;
+    padding: 21px 20px;
 
-        &-title {
-            font-family: 'SourceHanSansCN-Medium';
-            font-size: 14px;
-            color: rgba(0, 0, 0, 0.8);
-        }
-
-        &-num {
-            font-family: 'SF Compact Display Black';
-            text-align: center;
-            font-weight: 900;
-            font-size: 50px;
-            color: #049C9A;
-            line-height: 60px;
-        }
+    &-title {
+      font-family: "SourceHanSansCN-Medium";
+      font-size: 14px;
+      color: rgba(0, 0, 0, 0.8);
     }
+
+    &-num {
+      font-family: "SF Compact Display Black";
+      text-align: center;
+      font-weight: 900;
+      font-size: 50px;
+      color: #049c9a;
+      line-height: 60px;
+    }
+  }
 }
 
 .tip-warring {
-    margin-top: 20px;
-    color: rgba(255, 73, 85, 1);
+  margin-top: 20px;
+  color: rgba(255, 73, 85, 1);
 }
 
 .table-title {
-    width: 220px;
-    height: 50px;
-    background: #FFFFFF;
-    border-radius: 8px 8px 0px 0px;
-    border: 1px solid #049C9A;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-family: SourceHanSansCN, SourceHanSansCN;
-    font-weight: bold;
-    font-size: 18px;
-    color: #049C9A;
-    line-height: 27px;
+  width: 220px;
+  height: 50px;
+  background: #ffffff;
+  border-radius: 8px 8px 0px 0px;
+  border: 1px solid #049c9a;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-family: SourceHanSansCN, SourceHanSansCN;
+  font-weight: bold;
+  font-size: 18px;
+  color: #049c9a;
+  line-height: 27px;
 }
 
 .expand-box {
-    padding: 20px;
-    background: linear-gradient(180deg, #049C9A 0%, #0ACBCA 100%);
-    border-radius: 20px;
+  padding: 20px;
+  background: linear-gradient(180deg, #049c9a 0%, #0acbca 100%);
+  border-radius: 20px;
 
-    &-title {
-        font-weight: 500;
-        font-size: 16px;
-        color: #FFFFFF;
-        line-height: 24px;
-        margin-bottom: 20px;
-    }
+  &-title {
+    font-weight: 500;
+    font-size: 16px;
+    color: #ffffff;
+    line-height: 24px;
+    margin-bottom: 20px;
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.7.1