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