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/reportLibraryOne/add.vue |  260 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 239 insertions(+), 21 deletions(-)

diff --git a/culture/src/views/strainReportLibrary/reportLibraryOne/add.vue b/culture/src/views/strainReportLibrary/reportLibraryOne/add.vue
index 39fe6a9..f315a04 100644
--- a/culture/src/views/strainReportLibrary/reportLibraryOne/add.vue
+++ b/culture/src/views/strainReportLibrary/reportLibraryOne/add.vue
@@ -12,12 +12,12 @@
                 </div>
 
             </div>
-            <Table :height="null" :queryForm="queryForm" :total="0">
+            <Table :height="null" :queryForm="queryForm" :total="0" :data="projectData">
                 <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>
             <el-form ref="form" :model="form" :rules="rules" inline label-position="top" style="margin-top: 38px">
@@ -27,8 +27,8 @@
                         <div>报告编号</div>
                     </div>
                 </div>
-                <el-form-item prop="name" style="margin-top: 38px">
-                    <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                <el-form-item prop="reportCode" style="margin-top: 38px">
+                    <el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" />
                 </el-form-item>
 
                 <div class="header-title" style="width: 100%;">
@@ -37,8 +37,8 @@
                         <div>报告名称</div>
                     </div>
                 </div>
-                <el-form-item prop="name" style="margin-top: 38px">
-                    <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                <el-form-item prop="reportName" style="margin-top: 38px">
+                    <el-input v-model="form.reportName" style="width: 100%;" placeholder="请输入报告编号" />
                 </el-form-item>
 
                 <div class="header-title" style="width: 100%;">
@@ -47,8 +47,9 @@
                         <div>报告正文</div>
                     </div>
                 </div>
-                <el-form-item prop="name" style="margin-top: 38px">
-                    <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                <el-form-item prop="reportText" style="margin-top: 38px">
+                    <ai-editor ref="materialEditor" :value="form.reportText" style="width: 100%;"
+                        placeholder="请输入报告正文" />
                 </el-form-item>
                 <div class="header-title" style="width: 100%;">
                     <div class="header-title-left">
@@ -74,42 +75,94 @@
                         <div>菌种实验员</div>
                     </div>
                     <div class="header-title-right">
-                        <el-button @click="showChoose = true" class="el-icon-circle-plus-outline" type="primary">
+                        <el-button @click="getMember" class="el-icon-circle-plus-outline" type="primary">
                             选择菌种实验员</el-button>
                     </div>
                 </div>
                 <div class="member-list">
-                    <div class="member-list-card">
+                    <div v-if="selectedMember" class="member-list-card" v-for="(item, index) in selectedMember"
+                        :key="index">
                         <div class="member-item">
                             <div class="member-title">
                                 菌种实验员
                             </div>
                             <div class="member-name-box">
                                 <div class="member-name">
-                                    张三
+                                    {{ item.nickName }}
                                 </div>
                             </div>
                             <div class="member-change">
-                                <div class="member-change-btn">修改</div>
+                                <div class="member-change-btn" @click="handleModifyMember(item)">修改</div>
+                            </div>
+                        </div>
+                    </div>
+                    <div v-else class="member-list-card empty-state">
+                        <div class="member-item">
+                            <div class="member-title">
+                                菌种实验员
+                            </div>
+                            <div class="member-name-box">
+                                <div class="empty-text">请选择菌种实验员</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>
-                    <el-button type="default">存草稿</el-button>
+                    <el-button type="primary" @click="addData">发送</el-button>
+                    <el-button type="default" @click="saveData">存草稿</el-button>
                 </div>
             </el-form>
         </Card>
+        <chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject>
+        <SelectMember ref="selectMember" @submit="selectUser" :singleSelect="true" />
+
     </div>
 
 </template>
 <script>
 import { Card } from 'element-ui';
 import AiEditor from '@/components/AiEditor'
+import ChooseProject from '@/components/chooseProject/index.vue'
+import SelectMember from '@/components/SelectMember'
+import { add } from './service'
+
 export default {
-    components: { AiEditor },
+    components: { AiEditor, ChooseProject, SelectMember },
     data() {
         return {
             form: {
@@ -123,17 +176,173 @@
                 approver: "",
                 approveTime: ""
             },
+            projectData: [], // 存储选中的项目组数据
             fileList: [], // 附件列表
             showChoose: false,
             radio1: 1,
-            rules: {},
+            rules: {
+                reportCode: [
+                    { required: true, message: '请输入报告编号', trigger: 'blur' }
+                ],
+                reportName: [
+                    { required: true, message: '请输入报告名称', trigger: 'blur' }
+                ]
+            },
             status: "1",
             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: ''
+                }
+            ],
+            selectedMember: null, // 存储选中的菌种实验员
         }
-    }
+    },
+    computed: {
+        totalScore() {
+            return this.assessmentTable.reduce((sum, row) => sum + Number(row.selectedScore), 0)
+        }
+    },
+    methods: {
+        addData() {
+            console.log('qeqweqeqwqrew',this.form,this.projectData);
+            
+            this.$refs.form.validate(async (valid) => {
+                if (!valid) return;
+                if (this.$refs.materialEditor.getContent() == '<p></p>') {
+                    this.$message.error('请输入报告正文')
+                    return
+                }
+                if (!this.projectData.length) {
+                    this.$message.warning('请选择项目组');
+                    return;
+                }
+                if (!this.selectedMember || !this.selectedMember[0]) {
+                    this.$message.warning('请选择菌种实验员');
+                    return;
+                }
+                try {
+                    const params = {
+                        isDraft: 0,
+                        evaluateId:this.selectedMember[0].id,
+                        projectId: this.projectData[0].id,
+                        reportCode: this.form.reportCode,
+                        reportContent: this.$refs.materialEditor.getContent(),
+                        reportName: this.form.reportName,
+                        reportType: 1
+                    };
+                    add(params).then(res => {
+                        if (res.code == 200) {
+                            this.$message.success('发送成功');
+                            this.$router.push('/strainReportLibrary/reportLibraryOne');
+                        }
+                    })
+                } catch (e) {
+                    this.$message.error('发送失败');
+                }
+            });
+        },
+        saveData() {
+            this.$refs.form.validate(async (valid) => {
+                if (!valid) return;
+                
+                try {
+                    const params = {
+                        isDraft: 1,
+                        projectId: this.projectData[0].id,
+                        evaluateId:this.selectedMember[0].id,
+                        reportCode: this.form.reportCode,
+                        reportContent: this.$refs.materialEditor.getContent(),
+                        reportName: this.form.reportName,
+                        reportType: 1
+                    };
+                    add(params).then(res => {
+                        if (res.code == 200) {
+                            this.$message.success('保存成功');
+                            this.$router.push('/strainReportLibrary/reportLibraryOne');
+                        }
+                    })
+                } catch (e) {
+                    this.$message.error('保存失败');
+                }
+            });
+        }, getProjectData(data) {
+            this.projectData = [data]; // 将选中的项目组数据存储到数组中
+            this.showChoose = false
+        },
+        selectUser(data) {
+            this.selectedMember = data;
+            console.log('qweqweqwe', data);
+            this.$refs.selectMember.close()
+        },
+        getMember() {
+            this.$refs.selectMember.open(null);
+        },
+        handleModifyMember(member) {
+            this.$refs.selectMember.open(member);
+        },
+        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>
@@ -224,6 +433,15 @@
                 rgba(5, 160, 193, 0.2) 0%,
                 rgba(5, 242, 194, 0) 70%);
 
+        &.empty-state {
+            background: #f5f7fa;
+
+            .empty-text {
+                color: #909399;
+                font-size: 14px;
+            }
+        }
+
         .member-item {
             height: 100%;
             display: flex;

--
Gitblit v1.7.1