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/add.vue | 253 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 241 insertions(+), 12 deletions(-) diff --git a/culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue b/culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue index b33a9ad..b363297 100644 --- a/culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue +++ b/culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue @@ -27,9 +27,9 @@ <div>报告编号</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> + <el-form-item prop="name" style="margin-top: 38px"> <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + </el-form-item> <div class="header-title" style="width: 100%;"> <div class="header-title-left"> @@ -37,9 +37,9 @@ <div>报告名称</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> + <el-form-item prop="name" style="margin-top: 38px"> <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + </el-form-item> <div class="header-title" style="width: 100%;"> <div class="header-title-left"> @@ -47,20 +47,87 @@ <div>报告正文</div> </div> </div> - <form-item prop="name" style="margin-top: 38px"> + <el-form-item prop="name" style="margin-top: 38px"> <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" /> - </form-item> + </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> - <form-item prop="name" style="margin-top: 38px"> + <el-form-item prop="name" style="margin-top: 38px"> <el-upload action="https://jsonplaceholder.typicode.com/posts/" :file-list="fileList"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> - </form-item> + </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="header-title" style="width: 100%;display: flex; align-items: center;"> + <div class="header-title-left mt-unset"> + <!-- <img src="@/assets/public/headercard.png" /> --> + <div>菌种实验员</div> + </div> + <div class="header-title-right"> + <el-button @click="showChoose = true" class="el-icon-circle-plus-outline" type="primary"> + 选择菌种实验员</el-button> + </div> + </div> + <div class="member-list"> + <div class="member-list-card"> + <div class="member-item"> + <div class="member-title"> + 菌种实验员 + </div> + <div class="member-name-box"> + <div class="member-name"> + 张三 + </div> + </div> + <div class="member-change"> + <div class="member-change-btn">修改</div> + </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> <div class="end-btn" style="margin-top: 38px"> <el-button type="primary">发送</el-button> @@ -74,6 +141,7 @@ <script> import { Card } from 'element-ui'; import AiEditor from '@/components/AiEditor' + export default { components: { AiEditor }, data() { @@ -97,14 +165,88 @@ remark: "", queryForm: { - } + }, + 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: '' + } + ], } - } + }, + computed: { + totalScore() { + return this.assessmentTable.reduce((sum, row) => sum + Number(row.selectedScore), 0) + } + }, + methods: { + 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; + }, + }, } </script> <style lang="less" scoped> +.mt-unset { + margin-top: unset !important; +} + .header-title { display: flex; align-items: center; @@ -159,15 +301,102 @@ } } -.end-btn{ +.end-btn { display: flex; align-items: center; gap: 10px; - button{ + button { width: 180px; height: 36px; // background: #409EFF; } } + +.member-list { + margin-top: 18px; + display: flex; + flex-wrap: wrap; + gap: 28px; + + .member-list-card { + width: 340px; + height: 400px; + border-radius: 8px; + border: 1px solid #dcdfe6; + background: linear-gradient(to bottom, + rgba(5, 160, 193, 0.2) 0%, + rgba(5, 242, 194, 0) 70%); + + .member-item { + height: 100%; + display: flex; + flex-direction: column; + + .member-title { + margin-top: 20px; + width: 100%; + font-family: "Source Han Sans CN Bold Bold"; + font-weight: bold; + font-size: 16px; + color: rgba(0, 0, 0, 0.8); + line-height: 16px; + text-align: center; + } + + .flex1 { + flex: 1; + } + + .member-name-box { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + } + + .member-name-box-2 { + flex: 1; + padding: 0 20px; + padding-top: 40px; + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 20px; + justify-items: center; + align-items: start; + } + + .member-name { + width: 60px; + height: 60px; + background: #7d8b79; + border-radius: 50%; + text-align: center; + line-height: 60px; + font-weight: 500; + font-size: 16px; + color: #ffffff; + margin: 0; + } + + .member-change { + display: flex; + justify-content: center; + padding: 10px 0; + margin-top: auto; + cursor: pointer; + + .member-change-btn { + background: #fff1f0; + border-radius: 4px; + border: 1px solid #ffccc7; + padding: 1px 8px; + font-weight: 400; + font-size: 12px; + color: #ff4d4f; + } + } + } + } +} </style> \ No newline at end of file -- Gitblit v1.7.1