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