| | |
| | | <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> |