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/taskList/index.vue |  402 ++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 255 insertions(+), 147 deletions(-)

diff --git a/laboratory/src/views/deliveryAssessment/taskList/index.vue b/laboratory/src/views/deliveryAssessment/taskList/index.vue
index 791ee4d..c1a9c2a 100644
--- a/laboratory/src/views/deliveryAssessment/taskList/index.vue
+++ b/laboratory/src/views/deliveryAssessment/taskList/index.vue
@@ -1,171 +1,279 @@
 <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="top-box-integral">
-                    <div style="background-color:rgba(232, 250, 246, 1)" v-for="item in 3" :key="item"
-                        class="top-box-integral-card">
-                        <div class="top-box-integral-card-title">{{ ['课题合计数量', '待评定', '已评定'][item - 1] }}</div>
-                        <div style="color:rgba(4, 156, 154, 1)" class="top-box-integral-card-num">99.9</div>
-                    </div>
-                </div>
-                <div class="tip-warring">
-                    <div>
-                        【注意】每个课题交付评分标准:
-                    </div>
-                    <div>
-                        1、课题由工程师/化验师设定,并清晰完整完成课题目标,评优秀3分;
-                    </div>
-                    <div>
-                        2、课题由工程师/化验师设定,并清晰完整完成课题目标,评优秀3分;
-                    </div>
-                    <div>
-                        3、课题由上级设定,工程师/化验师清晰完整完成课题目标,评正常2分;
-                    </div>
-                    <div>
-                        4、课题由上级设定,工程师/化验师只能阐述课题内容,无法延伸工作思路,无开发思维的运行能力、创新能力,无法实现专题目标,评失误0分;
-                    </div>
-                </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="累积分值" />
-                <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>
-                        <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-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" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="报告名称:">
+            <el-input v-model="form.reportName" placeholder="请输入" />
+          </el-form-item>
+          <el-form-item label="提交人:">
+            <el-input v-model="form.staffNames" placeholder="请输入" />
+          </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="top-box-integral">
+          <div
+            style="background-color: rgba(232, 250, 246, 1)"
+            class="top-box-integral-card"
+          >
+            <div class="top-box-integral-card-title">课题合计数量</div>
+            <div
+              style="color: rgba(4, 156, 154, 1)"
+              class="top-box-integral-card-num"
+            >
+              {{ statistics.totalCount || 0 }}
+            </div>
+          </div>
+          <div
+            style="background-color: rgba(232, 250, 246, 1)"
+            class="top-box-integral-card"
+          >
+            <div class="top-box-integral-card-title">待评定</div>
+            <div
+              style="color: rgba(4, 156, 154, 1)"
+              class="top-box-integral-card-num"
+            >
+              {{ statistics.toEvaluatedCount || 0 }}
+            </div>
+          </div>
+          <div
+            style="background-color: rgba(232, 250, 246, 1)"
+            class="top-box-integral-card"
+          >
+            <div class="top-box-integral-card-title">已评定</div>
+            <div
+              style="color: rgba(4, 156, 154, 1)"
+              class="top-box-integral-card-num"
+            >
+              {{ statistics.evaluatedCount || 0 }}
+            </div>
+          </div>
+        </div>
+        <div class="tip-warring">
+          <div>【注意】每个课题交付评分标准:</div>
+          <div>
+            1、课题由工程师/化验师设定,并清晰完整完成课题目标,评优秀3分;
+          </div>
+          <div>
+            2、课题由工程师/化验师设定,并清晰完整完成课题目标,评优秀3分;
+          </div>
+          <div>
+            3、课题由上级设定,工程师/化验师清晰完整完成课题目标,评正常2分;
+          </div>
+          <div>
+            4、课题由上级设定,工程师/化验师只能阐述课题内容,无法延伸工作思路,无开发思维的运行能力、创新能力,无法实现专题目标,评失误0分;
+          </div>
+        </div>
+      </template>
+      <template #table>
+        <el-table-column prop="teamName" label="所属项目组" />
+        <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-if="row.reportType == 4">验证与发布</span>
+            <span v-else>--</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="reportCode" label="报告编号" />
+        <el-table-column prop="reportName" label="报告名称" />
+        <el-table-column prop="createBy" label="提交人" />
+        <el-table-column prop="evaluatePersonName" label="评定人员" />
+        <el-table-column prop="evaluateScore" label="评定分数" />
+        <el-table-column prop="totalScore" 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 label="操作">
+          <template #default="{ row }">
+            <el-button type="text" @click="handleDetail(row)">详情</el-button>
+            <el-button
+              type="text"
+              @click="handleAssessment(row)"
+              v-if="row.status == 2"
+              >评定</el-button
+            >
+          </template>
+        </el-table-column>
+      </template>
+    </TableCustom>
 
-        <AssessmentDialog :modelValue="assessmentVisible" :reportData="currentReport"
-            @submit="handleAssessmentSubmit" />
-    </div>
+    <AssessmentDialog
+      :modelValue="assessmentVisible"
+      :id="currentId"
+      :type="dialogType"
+      @close="handleAssessmentSubmit"
+      @submit="handleAssessmentSubmit"
+    />
+  </div>
 </template>
 
 <script>
-import AssessmentDialog from './components/AssessmentDialog.vue'
+import AssessmentDialog from "./components/AssessmentDialog.vue";
+import { pageList, evaluateCount, evaluateDetail } from "./service.js";
 
 export default {
-    name: 'TaskList',
-    components: {
-        AssessmentDialog
+  name: "TaskList",
+  components: {
+    AssessmentDialog,
+  },
+  data() {
+    return {
+      form: {},
+      tableData: [],
+      queryForm: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+      total: 0,
+      assessmentVisible: false,
+      currentId: null,
+      dialogType: '',
+      statistics: {
+        totalCount: 0,
+        toEvaluatedCount: 0,
+        evaluatedCount: 0,
+      },
+    };
+  },
+  methods: {
+    async getList() {
+      const params = { ...this.queryForm, ...this.form };
+      const res = await pageList(params);
+      if (res && res.data) {
+        this.tableData = res.data.records || [];
+        this.total = res.data.total || 0;
+      }
     },
-    data() {
-        return {
-            form: {
-            },
-            tableData: [],
-            queryForm: {
-                pageSize: 10,
-                pageNum: 1
-            },
-            total: 0,
-            assessmentVisible: false,
-            currentReport: {}
-        }
+    async getStatistics() {
+      const params = { ...this.queryForm, ...this.form };
+      const res = await evaluateCount(params);
+      if (res && res.data) {
+        this.statistics = res.data;
+      }
     },
-    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);
-            // 处理评定提交
-        }
-    }
-}
+    handleCurrentChange(page) {
+      this.queryForm.pageNum = page;
+      this.getList();
+    },
+    handleSizeChange(size) {
+      this.queryForm.pageSize = size;
+      this.getList();
+    },
+    handleSearch() {
+      this.queryForm.pageNum = 1;
+      this.getList();
+      this.getStatistics();
+    },
+    handleReset() {
+      this.form = {};
+      this.queryForm = { pageSize: 10, pageNum: 1 };
+      this.getList();
+      this.getStatistics();
+    },
+    handleDetail(row) {
+      this.currentId = row.id;
+      this.dialogType = 'detail';
+      this.assessmentVisible = true;
+    },
+    handleAssessment(row) {
+      this.currentId = row.id;
+      this.dialogType = 'assessment';
+      this.assessmentVisible = true;
+    },
+    handleAssessmentSubmit(data) {
+      this.assessmentVisible=false;
+      this.getList();
+      this.getStatistics();
+    },
+  },
+  mounted() {
+    this.getList();
+    this.getStatistics();
+  },
+};
 </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);
 }
 </style>
\ No newline at end of file

--
Gitblit v1.7.1