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/QA/index.vue |  343 +++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 201 insertions(+), 142 deletions(-)

diff --git a/laboratory/src/views/deliveryAssessment/QA/index.vue b/laboratory/src/views/deliveryAssessment/QA/index.vue
index 49dd85d..7406056 100644
--- a/laboratory/src/views/deliveryAssessment/QA/index.vue
+++ b/laboratory/src/views/deliveryAssessment/QA/index.vue
@@ -1,168 +1,227 @@
 <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-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="tableTitle">
-                    <div class="title active">
-                        化验师QA专题报告列表</div>
-                </div>
-            </template>
-            <template #table>
-                <el-table-column prop="name" label="报告类型" />
-                <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="评定时间" />
-                <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">详情</el-button>
-                    </template>
-                </el-table-column>
-            </template>
-        </TableCustom>
+  <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.teamName" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="报告名称:">
+            <el-input v-model="form.reportTitle" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="报告编号:">
+            <el-input v-model="form.reportCode" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="课题类型:">
+            <el-select v-model="form.reportType" placeholder="请选择">
+              <el-option label="中试" :value="1" />
+              <el-option label="辅料" :value="2" />
+              <el-option label="产品报告" :value="3" />
+              <!-- <el-option label="验证与发布" :value="4" /> reportType	integer	报告类型 1=中试 2=辅料 3=产品报告-->
+            </el-select>
+          </el-form-item>
+          <el-form-item label="状态:">
+            <el-select v-model="form.status" placeholder="请选择">
+              <el-option label="草稿箱" :value="-1" />
+              <el-option label="待审核" :value="1" />
+              <el-option label="待评定" :value="2" />
+              <el-option label="已评定" :value="3" />
+              <el-option label="已驳回" :value="4" />
+              <el-option label="已撤回" :value="5" />
+            </el-select>
+          </el-form-item>
+          <el-form-item class="search-btn-box">
+            <el-button @click="handleReset">重置</el-button>
+            <el-button type="primary" @click="handleSearch">查询</el-button>
+          </el-form-item>
+        </el-form>
+      </template>
+      <template #setting>
+        <div class="tableTitle">
+          <div class="title active">化验师QA专题报告列表</div>
+        </div>
+      </template>
+      <template #table>
+        <el-table-column prop="reportType" label="报告类型">
+          <template #default="{ row }">
+            <span v-if="row.reportType == 1">中试</span>
+            <span v-else-if="row.reportType == 2">辅料</span>
+            <span v-else-if="row.reportType == 3">产品报告</span>
+            <span v-else>--</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="teamName" label="所属项目组" />
+        <el-table-column prop="reportTitle" label="报告名称" />
+        <el-table-column prop="reportCode" label="报告编号" />
+        <el-table-column prop="developPerson" label="制定人" />
+        <el-table-column prop="developDate" label="制定日期" />
+        <el-table-column prop="evaluatePersonName" label="评定人" />
+        <el-table-column prop="evaluateTime" label="评定时间" />
+        <el-table-column prop="status" label="状态">
+          <template #default="{ row }">
+            <el-tag v-if="row.status == 3" type="info" color="#fff"
+              >已评定</el-tag
+            >
+            <el-tag v-else-if="row.status == 2" type="success">待评定</el-tag>
+            <el-tag v-else-if="row.status == 1" type="warning">待审核</el-tag>
+            <el-tag v-else-if="row.status == 4" type="danger">已驳回</el-tag>
+            <el-tag v-else-if="row.status == 5" type="info">已撤回</el-tag>
+            <el-tag v-else type="default">草稿箱</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="age" label="操作">
+          <template #default="{ row }">
+            <el-button type="text" v-if="row.status == 3" @click="handleDetail(row)">详情</el-button>
+            <el-button v-if="row.status == 2" type="text" @click="handleAssessment(row)">评定</el-button>
+          </template>
+        </el-table-column>
+      </template>
+    </TableCustom>
 
-        <!-- 工艺工程师 -->
-        <AssessmentDialog :modelValue="assessmentVisible" :reportData="currentReport" />
-    </div>
+    <!-- 工艺工程师 -->
+    <AssessmentDialog
+      :modelValue="assessmentVisible"
+      :id="currentReport.id"
+      :type="currentType"
+      @close="closeAssessmentDialog"
+    />
+  </div>
 </template>
 
 <script>
-import AssessmentDialog from './components/AssessmentDialog.vue'
+import AssessmentDialog from "./components/AssessmentDialog.vue";
+import { evaluateList } from "./service.js";
 
 export default {
-    name: 'QAList',
-    components: {
-        AssessmentDialog,
+  name: "QAList",
+  components: {
+    AssessmentDialog,
+  },
+  data() {
+    return {
+      form: {},
+      tableData: [],
+      queryForm: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+      total: 0,
+      assessmentVisible: false,
+      currentType: "",
+      currentReport: {},
+    };
+  },
+  methods: {
+    handleCurrentChange(page) {
+      this.queryForm.pageNum = page;
+      this.getList();
     },
-    data() {
-        return {
-            form: {
-            },
-            tableData: [],
-            queryForm: {
-                pageSize: 10,
-                pageNum: 1
-            },
-            total: 0,
-            assessmentVisible: true,
-            currentReport: {},
-        }
+    handleSizeChange(size) {
+      this.queryForm.pageSize = size;
+      this.getList();
     },
-    methods: {
-        handleCurrentChange(page) {
-            this.queryForm.pageNum = page
-            this.getList()
-        },
-        handleSizeChange(size) {
-            this.queryForm.pageSize = size
-            this.getList()
-        },
-        getList() {
-
-        },
-        handleDetail(row) {
-            // 处理详情
-        },
-        handleAssessment(row) {
-            this.currentReport = row;
-            this.assessmentVisible = true;
-        },
-        handleAssessmentSubmit(data) {
-            console.log('评定提交数据:', data);
-            // 处理评定提交
-        }
-    }
-}
+    async getList() {
+      const params = { ...this.queryForm, ...this.form };
+      const res = await evaluateList(params);
+      if (res && res.data) {
+        this.tableData = res.data.records || [];
+        this.total = res.data.total || 0;
+      }
+    },
+    handleSearch() {
+      this.queryForm.pageNum = 1;
+      this.getList();
+    },
+    handleReset() {
+      this.form = {};
+      this.queryForm = { pageSize: 10, pageNum: 1 };
+      this.getList();
+    },
+    handleDetail(row) {
+      // 处理详情
+      this.currentReport = row;
+      this.currentType = "detail";
+      this.assessmentVisible = true;
+    },
+    handleAssessment(row) {
+      this.currentReport = row;
+      this.currentType = "approve";
+      this.assessmentVisible = true;
+    },
+    closeAssessmentDialog() {
+      this.assessmentVisible = false;
+      this.currentReport = {};
+      this.currentType = "";
+      this.getList();
+    },
+  },
+  mounted() {
+    this.getList();
+  },
+};
 </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;
+    }
+  }
 }
 
 .tableTitle {
-    display: flex;
+  display: flex;
 
-    .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;
-    }
+  .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;
+  }
 
-    .active {
-        color: #049c9a;
-        background: #ffffff;
-        border-radius: 8px 8px 0px 0px;
-        border: 1px solid #049c9a;
-    }
+  .active {
+    color: #049c9a;
+    background: #ffffff;
+    border-radius: 8px 8px 0px 0px;
+    border: 1px solid #049c9a;
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.7.1