From d82e210c6de4163d5a528f385b5582d8822cb69f Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期五, 23 五月 2025 17:13:52 +0800 Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory --- culture/src/views/strainReportLibrary/reportLibraryOneTWO/components/approval/index.vue | 301 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 242 insertions(+), 59 deletions(-) diff --git a/culture/src/views/strainReportLibrary/reportLibraryOneTWO/components/approval/index.vue b/culture/src/views/strainReportLibrary/reportLibraryOneTWO/components/approval/index.vue index 964ae96..c7c711d 100644 --- a/culture/src/views/strainReportLibrary/reportLibraryOneTWO/components/approval/index.vue +++ b/culture/src/views/strainReportLibrary/reportLibraryOneTWO/components/approval/index.vue @@ -1,7 +1,7 @@ <template> - <el-dialog :title="dialogTitle" :visible.sync="visible" width="80%" po :close-on-click-modal="false" + <el-dialog :title="dialogTitle" :visible.sync="visible" width="80%" @open="open" po :close-on-click-modal="false" @close="handleClose"> - <div class="approval-dialog"> + <div class="approval-dialog" :style="{ height: obj?.isDetail ? '50vh' : '40vh' }"> <!-- 左侧审批内容 --> <div class="approval-content"> <Card class="approval-content-card"> @@ -12,13 +12,12 @@ <div>所属项目组</div> </div> </div> - <Table :height="null" :queryForm="queryForm" :total="0" @currentChange="handleCurrentChange" - @sizeChange="handleSizeChange"> + <Table :height="null" :total="0" :data="tableData"> <template> - <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="teamName" label="项目组名称" /> + <el-table-column prop="personCharge" label="项目负责人" /> + <el-table-column prop="staffName" label="项目组成员" /> + <el-table-column prop="createTime" label="创建时间" /> </template> </Table> @@ -31,9 +30,10 @@ <div>报告编号</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> - <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + <el-form-item prop="reportCode" style="margin-top: 38px"> + <el-input disabled v-model="form.reportCode" style="width: 100%;" + placeholder="请输入报告编号" /> + </el-form-item> <div class="header-title" style="width: 100%;"> <div class="header-title-left"> @@ -41,9 +41,10 @@ <div>报告名称</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> - <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + <el-form-item prop="reportName" style="margin-top: 38px"> + <el-input disabled v-model="form.reportName" style="width: 100%;" + placeholder="请输入报告名称" /> + </el-form-item> <div class="header-title" style="width: 100%;"> <div class="header-title-left"> @@ -51,9 +52,53 @@ <div>报告正文</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> - <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + <el-form-item prop="reportText" style="margin-top: 38px"> + <ai-editor :readOnly="true" :value="form.reportText" style="width: 100%;" + placeholder="请输入报告正文" /> + </el-form-item> + + <div class="header-title" style="width: 100%;"> + <div class="header-title-left"> + <img src="@/assets/public/headercard.png" /> + <div>菌种实验员操作评定</div> + </div> + </div> + + <div class="table" style="margin-top: 38px"> + <el-table :data="assessmentTable" border style="width: 100%" :show-summary="true" + :span-method="tableSpanMethod" :summary-method="getTableSummary"> + <el-table-column prop="category" label="菌种实验员专业能力考核项" width="180"></el-table-column> + <el-table-column prop="score" label="该项评分" width="120"> + <template slot-scope="scope"> + <el-radio-group v-if="scope.row.category !== '5.实验失败'" + v-model="scope.row.selectedScore"> + <el-radio :label="0">0分</el-radio> + <el-radio :label="1">1分</el-radio> + <el-radio :label="2">2分</el-radio> + </el-radio-group> + <el-radio-group v-else v-model="scope.row.selectedScore"> + <el-radio :label="0">否0分</el-radio> + <el-radio :label="-3">是-3分</el-radio> + </el-radio-group> + </template> + </el-table-column> + <el-table-column prop="criteria" label="该项评分参考标准"></el-table-column> + <el-table-column prop="desc" label="评分规则说明"> + <template slot-scope="scope"> + <p> 【0分】 实验操作失误或实验方案设计无效导致实验失败、数据不可用。</p> + <p> 【1分】存在操作有误及实验过程出现问题,没有严格按照操作规程运行;如实验准备不充分,取样遗漏等。</p> + <p> 【2分】完整按照操作规程及实验室管理制度运行,无任何问题。</p> + </template> + </el-table-column> + <el-table-column prop="rule" label="考评规则"> + <template slot-scope="scope"> + 菌种工程师以分题内容考核菌种实验员。 + </template> + </el-table-column> + </el-table> + </div> + + </el-form> </template> @@ -63,21 +108,20 @@ <!-- 右侧审批流程 --> <div class="approval-flow"> <div class="flow-content"> - <approval-process :status="form.status" :submit-time="form.createTime" :approver="form.approver" - :approve-time="form.approveTime" /> + <approval-process :processData="form.processData" /> </div> </div> </div> - <div class="approval-dialog-approve"> + <div class="approval-dialog-approve" v-if="!obj.isDetail"> <el-row :span="24"> <el-col :span="12"> <div class="status"> <div class="status-title">审批结果</div> <div class="status-content"> - <div class="resolve" :class="status == '1' && 'activeStatus'" @click.stop="status = 1"> + <div class="resolve" :class="status == '2' && 'activeStatus'" @click.stop="status = 2"> 通过 </div> - <div class="reject" :class="status == '2' && 'activeStatus'" @click.stop="status = 2"> + <div class="reject" :class="status == '3' && 'activeStatus'" @click.stop="status = 3"> 驳回 </div> </div> @@ -94,8 +138,8 @@ </div> <div slot="footer" class="dialog-footer"> - <el-button @click="handleClose" >取 消</el-button> - <el-button type="primary" @click="handleApprove" v-if="type === 'approve'">通过</el-button> + <el-button @click="handleClose">{{ obj.isDetail ? '关闭' : '取 消' }}</el-button> + <el-button type="primary" @click="handleApprove" v-if="!obj.isDetail">通过</el-button> </div> </el-dialog> </template> @@ -103,6 +147,8 @@ <script> import ApprovalProcess from '@/components/approvalProcess' import AiEditor from '@/components/AiEditor' +// import { getDetail } from '../../service'; + export default { name: "ApprovalDialog", @@ -119,27 +165,74 @@ type: String, default: "approve", // approve-审批,view-查看 }, - data: { + obj: { type: Object, - default: () => ({}), + default: () => { + return { + isDetail: false + } + }, }, }, data() { return { form: { - planName: "", - planCode: "", - stage: "", - creator: "", + reportCode: "", + reportName: "", + reportText: "", + teamName: "", + createBy: "", createTime: "", + status: "", approvalComment: "", - status: "pending", approver: "", - approveTime: "" + approveTime: "", + processData: [], + updateBy: "", + auditRemark: "", + auditPersonName: "", + auditTime: "" }, - radio1: 1, + assessmentTable: [ + { + category: '1.该分题的菌种专业知识', + selectedScore: 0, + criteria: '1.1 能讲生物学基础,掌握各类微生物形态特性、生化特性及鉴定方法。1.2 菌种选育技术,了解掌握自然选育、诱变选育、基因工程育种。', + desc: '', + rule: '' + }, + { + category: '2.操作能力', + selectedScore: 0, + criteria: '1.菌种分离无菌操作规范 2.菌种培养无菌操作规范 3.菌种保存无菌操作规范 4.菌种鉴定无菌操作规范', + desc: '', + rule: '' + }, + { + category: '3.仪器设备使用', + selectedScore: 0, + criteria: '能正确使用实验仪器,如移液器、恒温箱等,操作规范。', + desc: '', + rule: '' + }, + { + category: '4.实验数据记录与分析', + selectedScore: 0, + criteria: '实验数据记录及时、准确、完整,能简单分析数据。', + desc: '', + rule: '' + }, + { + category: '5.实验失败', + selectedScore: 0, + criteria: '无论何种原因,本次实验失败。', + desc: '', + rule: '' + } + ], + tableData: [], rules: {}, - status: "1", + status: "2", remark: "", }; }, @@ -147,41 +240,131 @@ dialogTitle() { return this.type === "approve" ? "审批" : "审批详情"; }, - }, - watch: { - data: { - handler(val) { - if (val) { - this.form = { ...val }; - } - }, - immediate: true, - }, + totalScore() { + return this.assessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); + } }, methods: { + open() { + if (!this.obj.id) { + this.$message.error('缺少必要参数'); + return; + } + + // getDetail(this.obj.id).then(res => { + // const data = res.data || res; + // this.form = { + // ...this.form, + // ...data, + // processData: [] + // }; + + // this.tableData = data.projectTeam ? + // [{ ...data.projectTeam, staffName: data.staffNames || '' }] : + // []; + + // let processData = []; + // // 提交节点 + // processData.push({ + // type: "primary", + // mode: "list", + // fields: [ + // { label: "提交人:", value: data.updateBy || "" }, + // { label: "提交时间:", value: data.createTime || "" }, + // ] + // }); + + // if (data.status == 2 || data.status == 3) { + // processData.push({ + // type: data.status === 2 ? "primary" : "danger", + // mode: "list", + // fields: [ + // { label: "审批意见:", value: data.auditRemark || "" }, + // { label: "审核人:", value: data.auditPersonName || "" }, + // { label: "审核时间:", value: data.auditTime || "" }, + // ] + // }); + // } else { + // processData.push({ + // type: "warning", + // mode: "list", + // fields: [ + // { label: "等待审核" }, + // ], + // }); + // } + + // if (data.status == 2) { + // processData.push({ + // type: "warning", + // mode: "list", + // fields: [{ label: "等待评定" }], + // }); + // } + + // if (data.status == 3) { + // processData.push({ + // type: "success", + // mode: "list", + // fields: [ + // { label: "已评定" }, + // { label: "评定人:", value: data.evaluatePersonName || "" }, + // { label: "评定时间:", value: data.evaluateTime || "" } + // ], + // }); + // } + + // this.form.processData = processData; + + // }).catch(err => { + // this.$message.error('获取详情失败'); + // }); + }, handleClose() { this.$emit("close"); this.form.approvalComment = ""; }, - handleApprove() { - if (!this.form.approvalComment) { - this.$message.warning("请输入审批意见"); - return; + tableSpanMethod({ row, column, rowIndex, columnIndex }) { + // 评分规则说明(desc)和考评规则(rule)列合并所有行 + // desc列索引为3,rule列索引为4(从0开始) + if (columnIndex === 3 || columnIndex === 4) { + if (rowIndex === 0) { + return [this.assessmentTable.length, 1]; // 合并所有行 + } else { + return [0, 0]; // 其他行隐藏 + } } + return [1, 1]; + }, + getTableSummary(param) { + const { columns } = param; + const sums = []; + columns.forEach((column, index) => { + if (index === 0) { + sums[index] = '合计'; + } else if (index === 1) { + sums[index] =this.totalScore + '分'; + } else { + sums[index] = ''; + } + }); + return sums; + }, + handleApprove() { this.$emit("approve", { ...this.form, - status: "approved", + statuss: this.status, + remark: this.remark }); }, - handleReject() { - if (!this.form.approvalComment) { - this.$message.warning("请输入审批意见"); - return; - } - this.$emit("reject", { - ...this.form, - status: "rejected", - }); + + handleCurrentChange(page) { + this.form.pageNum = page + this.getList() + }, + handleSizeChange(size) { + this.form.pageSize = size + this.getList() }, }, }; @@ -211,7 +394,7 @@ background: #ffffff; box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08); border-radius: 10px; - + .flow-title { font-size: 16px; font-weight: bold; -- Gitblit v1.7.1