董国庆
2025-12-08 d1f1b4ccc6919ba5189e489b8155b2d126df716d
文档问题
6个文件已修改
791 ■■■■■ 已修改文件
laboratory/src/views/chemistQa/pilotAndProduction/add.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/approvalPlan/components/approvalDialog.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/originalRecordTest/detail.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/originalRecordTest/list.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/testResultReport/components/checkout-result.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/testResultReport/detail.vue 774 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/chemistQa/pilotAndProduction/add.vue
@@ -71,9 +71,10 @@
              <el-date-picker
                :prefix-icon="null"
                v-model="form.developDate"
                type="date"
                type="datetime"
                disabled
                placeholder="请选择日期"
                value-format="yyyy-MM-dd HH:mm:ss"
              />
            </el-form-item>
          </el-col>
@@ -137,6 +138,7 @@
import { addData, getDetail, editData } from "./service";
import { customUploadRequest, getFullUrl } from "@/utils/utils";
import { mapState } from "vuex";
import moment from "moment";
export default {
  components: {
@@ -181,7 +183,7 @@
    this.form.commitPersonId = JSON.parse(
      sessionStorage.getItem("userInfo")
    ).userId;
    this.form.developDate = new Date().toISOString().split("T")[0];
    this.form.developDate = moment().format("YYYY-MM-DD HH:mm:ss");
    if (this.$route.query.id) {
      this.getDetail();
laboratory/src/views/dataManagement/approvalPlan/components/approvalDialog.vue
@@ -349,7 +349,7 @@
      }
      const params = {
        id: this.form.id,
        auditStatus: this.status === "1" ? 2 : 3, // 2-已通过,3-已驳回
        auditStatus: this.status == "1" ? 2 : 3, // 2-已通过,3-已驳回
        auditRemark: this.remark,
      };
      audit(params)
laboratory/src/views/dataManagement/originalRecordTest/detail.vue
@@ -121,7 +121,8 @@
      </div>
      <AiEditor ref="resultCalculationEditor" :value="editorContents.termResult" height="400px" style="margin: 20px 0;"
        placeholder="请输入检测结果运算..." :readOnly="isDetail" />
      <Table :data="taskTableData" :total="0" :height="null" class="rwuTable">
      <Table :data="taskTableData" :total="allTaskTableData.length" :height="null" class="rwuTable" :queryForm="{ pageNum: currentPage, pageSize: pageSize }" :disAblePagination="true"
      @handleCurrentChange="handleCurrentChange">
        <el-table-column type="index" label="序号" width="80"></el-table-column>
        <el-table-column prop="sampleCode" label="检测样编号"></el-table-column>
        <el-table-column prop="testData" label="检测数据"></el-table-column>
@@ -431,7 +432,7 @@
          id: this.form.id,
          status: isDraft ? -1 : 2,
          ...editorContents,
          testMethodConfirmSheetOriginalDataList: this.taskTableData.map(item => ({
          testMethodConfirmSheetOriginalDataList: this.allTaskTableData.map(item => ({
            dataCode: item.sampleCode,
            dataTitle: item.testData,
            dataType: item.photos && item.spectrums ? '1,2' :
laboratory/src/views/dataManagement/originalRecordTest/list.vue
@@ -1,6 +1,6 @@
<template>
  <div class="list">
    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null" @handlePageChange="handlePageChange" @handleSizeChange="handleSizeChange">
    <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null" @handleCurrentChange="handlePageChange" @handleSizeChange="handleSizeChange">
      <template #search>
        <el-form :model="form" labelWidth="auto" inline>
          <el-form-item label="项目课题方案名称:">
laboratory/src/views/dataManagement/testResultReport/components/checkout-result.vue
@@ -37,7 +37,7 @@
                <AiEditor
                  ref="descriptionEditor"
                  :readOnly="true"
                  :value="data?.testReason || ''"
                  :value="data?.testResult || ''"
                  height="400px"
                  placeholder="暂无检验说明..."
                />
laboratory/src/views/dataManagement/testResultReport/detail.vue
@@ -1,22 +1,56 @@
<template>
  <Card>
    <el-form ref="form" :model="form" :rules="rules" inline label-position="top">
    <el-form
      ref="form"
      :model="form"
      :rules="rules"
      inline
      label-position="top"
    >
      <div class="header-title" style="margin-bottom: 38px">
        <div class="header-title-left">
          <img src="@/assets/public/headercard.png" />
          <div>所属实验调度</div>
        </div>
        <el-button type="primary" class="el-icon-plus" @click="handleAddTask" v-if="!isView">选择实验调度</el-button>
        <el-button
          type="primary"
          class="el-icon-plus"
          @click="handleAddTask"
          v-if="!isView"
          >选择实验调度</el-button
        >
      </div>
      <Table :data="taskTableData" :total="0" :height="null" class="rwuTable">
        <el-table-column prop="projectName" label="所属项目课题方案" width="200"></el-table-column>
        <el-table-column prop="experimentCode" label="实验编号"></el-table-column>
        <el-table-column prop="experimentName" label="实验名称"></el-table-column>
        <el-table-column prop="experimentDate" label="通知时间"></el-table-column>
        <el-table-column prop="experimentStartTime" label="实验开始时间"></el-table-column>
        <el-table-column prop="experimentEndTime" label="实验结束时间"></el-table-column>
        <el-table-column prop="participantsName" label="参加人员"></el-table-column>
        <el-table-column
          prop="projectName"
          label="所属项目课题方案"
          width="200"
        ></el-table-column>
        <el-table-column
          prop="experimentCode"
          label="实验编号"
        ></el-table-column>
        <el-table-column
          prop="experimentName"
          label="实验名称"
        ></el-table-column>
        <el-table-column
          prop="experimentDate"
          label="通知时间"
        ></el-table-column>
        <el-table-column
          prop="experimentStartTime"
          label="实验开始时间"
        ></el-table-column>
        <el-table-column
          prop="experimentEndTime"
          label="实验结束时间"
        ></el-table-column>
        <el-table-column
          prop="participantsName"
          label="参加人员"
        ></el-table-column>
        <el-table-column prop="status" label="状态">
          <template slot-scope="scope">
            <el-tag :type="getStatusType(scope.row.status)">
@@ -32,12 +66,32 @@
          <div>一 、实验结果</div>
        </div>
      </div>
      <Table :data="experimentResultData" :total="0" :height="null" class="rwuTable">
        <el-table-column prop="projectName" label="项目课题方案名称"></el-table-column>
        <el-table-column prop="experimentCode" label="实验编号"></el-table-column>
        <el-table-column prop="experimentName" label="实验名称"></el-table-column>
        <el-table-column prop="experimentDate" label="实验日期"></el-table-column>
        <el-table-column prop="schemePersonName" label="实验员"></el-table-column>
      <Table
        :data="experimentResultData"
        :total="0"
        :height="null"
        class="rwuTable"
      >
        <el-table-column
          prop="projectName"
          label="项目课题方案名称"
        ></el-table-column>
        <el-table-column
          prop="experimentCode"
          label="实验编号"
        ></el-table-column>
        <el-table-column
          prop="experimentName"
          label="实验名称"
        ></el-table-column>
        <el-table-column
          prop="experimentDate"
          label="实验日期"
        ></el-table-column>
        <el-table-column
          prop="schemePersonName"
          label="实验员"
        ></el-table-column>
        <el-table-column prop="createTime" label="创建日期"></el-table-column>
        <el-table-column prop="createBy" label="创建人"></el-table-column>
        <el-table-column prop="status" label="当前状态">
@@ -49,7 +103,9 @@
        </el-table-column>
        <el-table-column label="操作" min-width="100" fixed="right">
          <template slot-scope="scope">
            <el-button type="text" @click="handleViewDetail(scope.row)">详情</el-button>
            <el-button type="text" @click="handleViewDetail(scope.row)"
              >详情</el-button
            >
          </template>
        </el-table-column>
      </Table>
@@ -60,10 +116,24 @@
          <div>二 、检验结果</div>
        </div>
      </div>
      <Table :data="inspectionResultData" :total="0" :height="null" class="rwuTable">
        <el-table-column prop="projectName" label="所属课题方案"></el-table-column>
        <el-table-column prop="experimentCode" label="所属实验编号"></el-table-column>
        <el-table-column prop="experimentName" label="实验名称"></el-table-column>
      <Table
        :data="inspectionResultData"
        :total="0"
        :height="null"
        class="rwuTable"
      >
        <el-table-column
          prop="projectName"
          label="所属课题方案"
        ></el-table-column>
        <el-table-column
          prop="experimentCode"
          label="所属实验编号"
        ></el-table-column>
        <el-table-column
          prop="experimentName"
          label="实验名称"
        ></el-table-column>
        <el-table-column prop="createTime" label="创建时间"></el-table-column>
        <el-table-column prop="createBy" label="创建人"></el-table-column>
        <el-table-column prop="status" label="状态">
@@ -75,7 +145,11 @@
        </el-table-column>
        <el-table-column label="操作" min-width="100" fixed="right">
          <template slot-scope="scope">
            <el-button type="text" @click="handleViewInspectionDetail(scope.row)">详情</el-button>
            <el-button
              type="text"
              @click="handleViewInspectionDetail(scope.row)"
              >详情</el-button
            >
          </template>
        </el-table-column>
      </Table>
@@ -88,8 +162,13 @@
      </div>
      <div class="content-box">
        <AiEditor ref="analysisEditor" :readOnly="isView" :value="form.experimentResult" height="400px"
          placeholder="暂无实验数据分析及结论..." />
        <AiEditor
          ref="analysisEditor"
          :readOnly="isView"
          :value="form.experimentResult"
          height="400px"
          placeholder="暂无实验数据分析及结论..."
        />
      </div>
      <div class="header-title">
@@ -101,23 +180,38 @@
      <div class="evaluate-card">
        <div class="evaluate-card-people">
          <div v-for="technician in labTechnicians" :key="technician.id" class="evaluate-card-people-item"
            :class="{ 'active-people': selectedLabTechnician?.id == technician.id }"
            @click="handleSelectLabTechnician(technician)">
          <div
            v-for="technician in labTechnicians"
            :key="technician.id"
            class="evaluate-card-people-item"
            :class="{
              'active-people': selectedLabTechnician?.id == technician.id,
            }"
            @click="handleSelectLabTechnician(technician)"
          >
            {{ technician.nickName }}
          </div>
        </div>
        <div class="evaluate-card-cotent">
          <template v-if="selectedLabTechnician">
            <template v-if="selectedLabTechnician.data">
              <div class="evaluate-table-wrapper" @click="handleEvaluate('labTechnician')">
                <EvaluateTable class="evaluate-table" :isReadonly="true" :type="1"
                  :viewJson="selectedLabTechnician.data.resultEvaluateJson" />
              <div
                class="evaluate-table-wrapper"
                @click="handleEvaluate('labTechnician')"
              >
                <EvaluateTable
                  class="evaluate-table"
                  :isReadonly="true"
                  :type="1"
                  :viewJson="selectedLabTechnician.data.resultEvaluateJson"
                />
              </div>
            </template>
            <template v-else>
              <div class="no-data">暂未评定</div>
              <div class="to-evaluate" @click="handleEvaluate('labTechnician')">去评价</div>
              <div class="to-evaluate" @click="handleEvaluate('labTechnician')">
                去评价
              </div>
            </template>
          </template>
        </div>
@@ -132,23 +226,38 @@
      <div class="evaluate-card">
        <div class="evaluate-card-people">
          <div v-for="experimenter in experimenters" :key="experimenter.id" class="evaluate-card-people-item"
            :class="{ 'active-people': selectedExperimenter?.id == experimenter.id }"
            @click="handleSelectExperimenter(experimenter)">
          <div
            v-for="experimenter in experimenters"
            :key="experimenter.id"
            class="evaluate-card-people-item"
            :class="{
              'active-people': selectedExperimenter?.id == experimenter.id,
            }"
            @click="handleSelectExperimenter(experimenter)"
          >
            {{ experimenter.nickName }}
          </div>
        </div>
        <div class="evaluate-card-cotent">
          <template v-if="selectedExperimenter">
            <template v-if="selectedExperimenter.data">
              <div class="evaluate-table-wrapper" @click="handleEvaluate('experimenter')">
                <EvaluateTable ref="experimenterEvaluateTable" class="evaluate-table" :isReadonly="true"
                  :viewJson="selectedExperimenter.data.resultEvaluateJson" />
              <div
                class="evaluate-table-wrapper"
                @click="handleEvaluate('experimenter')"
              >
                <EvaluateTable
                  ref="experimenterEvaluateTable"
                  class="evaluate-table"
                  :isReadonly="true"
                  :viewJson="selectedExperimenter.data.resultEvaluateJson"
                />
              </div>
            </template>
            <template v-else>
              <div class="no-data">暂未评定</div>
              <div class="to-evaluate" @click="handleEvaluate('experimenter')">去评价</div>
              <div class="to-evaluate" @click="handleEvaluate('experimenter')">
                去评价
              </div>
            </template>
          </template>
        </div>
@@ -162,46 +271,87 @@
      <div class="evaluate-card" v-if="isView">
        <div class="evaluate-card-people">
          <div v-for="engineer in processEngineers" :key="engineer.id" class="evaluate-card-people-item"
            :class="{ 'active-people': selectedProcessEngineer?.id == engineer.id }"
            @click="handleSelectProcessEngineer(engineer)">
          <div
            v-for="engineer in processEngineers"
            :key="engineer.id"
            class="evaluate-card-people-item"
            :class="{
              'active-people': selectedProcessEngineer?.id == engineer.id,
            }"
            @click="handleSelectProcessEngineer(engineer)"
          >
            {{ engineer.nickName }}
          </div>
        </div>
        <div class="evaluate-card-cotent">
          <template v-if="selectedProcessEngineer">
            <template v-if="selectedProcessEngineer.data">
              <div class="evaluate-table-wrapper" @click="handleEvaluate('processEngineer')">
                <EvaluateTable class="evaluate-table" :isReadonly="true" :type="1"
                  :viewJson="selectedProcessEngineer.data.resultEvaluateJson" />
              <div
                class="evaluate-table-wrapper"
                @click="handleEvaluate('processEngineer')"
              >
                <EvaluateTable
                  class="evaluate-table"
                  :isReadonly="true"
                  :type="1"
                  :viewJson="selectedProcessEngineer.data.resultEvaluateJson"
                />
              </div>
            </template>
            <template v-else>
              <div class="no-data">暂未评定</div>
              <div v-if="isView && form.status == 2 &&(userRole==1 || userRole==2)" class="to-evaluate" @click="handleEvaluate('processEngineer')">去评价</div>
              <div
                v-if="
                  isView && form.status == 2 && (userRole == 1 || userRole == 2)
                "
                class="to-evaluate"
                @click="handleEvaluate('processEngineer')"
              >
                去评价
              </div>
            </template>
          </template>
        </div>
      </div>
      <div class="add-project-footer" v-if="!isView">
        <el-button type="primary" class="save-btn" @click="handleSubmit(1)">提交</el-button>
        <el-button type="primary" class="save-btn" @click="handleSubmit(1)"
          >提交</el-button
        >
        <el-button @click="handleSubmit(-1)">存草稿</el-button>
      </div>
      <div class="add-project-footer" v-if="isView && form.status == 2 &&(userRole==1 || userRole==2)">
        <el-button type="primary" class="save-btn" @click="handleEvaluate('processEngineer')">工艺工程师评定</el-button>
      <div
        class="add-project-footer"
        v-if="isView && form.status == 2 && (userRole == 1 || userRole == 2)"
      >
        <el-button
          type="primary"
          class="save-btn"
          @click="handleEvaluate('processEngineer')"
          >工艺工程师评定</el-button
        >
        <!-- <el-button @click="handleSubmit(-1)">存草稿</el-button> -->
      </div>
    </el-form>
    <!-- 选择实验调度弹窗 -->
    <experimental-scheduling :show="schedulingDialogVisible" @close="handleSchedulingClose"
      @submit="handleSchedulingSelect" />
    <experimental-scheduling
      :show="schedulingDialogVisible"
      @close="handleSchedulingClose"
      @submit="handleSchedulingSelect"
    />
    <!-- 评价弹窗 -->
    <evaluation-dialog :modelValue="evaluationDialogVisible" :type="currentEvaluationType"
      :viewJson="currentEvaluationData ? currentEvaluationData : ''" @update:modelValue="updateEvaluationDialogVisible"
      @submit="handleEvaluationSubmit" />
    <evaluation-dialog
      :modelValue="evaluationDialogVisible"
      :type="currentEvaluationType"
      :viewJson="currentEvaluationData ? currentEvaluationData : ''"
      @update:modelValue="updateEvaluationDialogVisible"
      @submit="handleEvaluationSubmit"
    />
    <!-- 检验结果详情弹窗 -->
    <checkout-result :visible="checkoutResultVisible" :data="currentCheckoutResult"
      @close="handleCheckoutResultClose" />
    <checkout-result
      :visible="checkoutResultVisible"
      :data="currentCheckoutResult"
      @close="handleCheckoutResultClose"
    />
    <!-- 新增组件弹窗 -->
    <!-- <add-component-dialog
      v-if="showNewDialog"
@@ -209,8 +359,11 @@
      @confirm="handleAddComponent"
    /> -->
    <!-- 实验结果详情 -->
    <ExperimentResultDialog :visible.sync="experimentResultDialogVisible" :type="'view'"
      :data="currentExperimentResult" />
    <ExperimentResultDialog
      :visible.sync="experimentResultDialogVisible"
      :type="'view'"
      :data="currentExperimentResult"
    />
  </Card>
</template>
@@ -222,7 +375,13 @@
import CheckoutResult from "./components/checkout-result.vue";
import AiEditor from "@/components/AiEditor";
// import AddComponentDialog from "@/components/AddComponentDialog";
import { getOtherInfoByDispatchId, add, update, getDetail,evaluateProcess } from './service'
import {
  getOtherInfoByDispatchId,
  add,
  update,
  getDetail,
  evaluateProcess,
} from "./service";
import { mapState } from "vuex";
export default {
  name: "AddProject",
@@ -231,7 +390,7 @@
    EvaluationDialog,
    CheckoutResult,
    ExperimentResultDialog,
    AiEditor
    AiEditor,
    // AddComponentDialog
  },
  data() {
@@ -249,11 +408,11 @@
        experimentResult: "",
        id: "",
        resultWorkEvaluates: [],
        status: -1
        status: -1,
      },
      rules: {
        dispatchId: [
          { required: true, message: "请选择所属实验调度", trigger: "change" }
          { required: true, message: "请选择所属实验调度", trigger: "change" },
        ],
      },
      taskTableData: [],
@@ -273,29 +432,28 @@
      // 弹窗控制
      evaluationDialogVisible: false,
      currentEvaluationType: '',
      currentEvaluationType: "",
      checkoutResultVisible: false,
      currentCheckoutResult: null,
      statusTypeMap: {
        "-1": "info",
        "1": "warning",
        "2": "success",
        "3": "info"
        1: "warning",
        2: "success",
        3: "info",
      },
      statusTextMap: {
        "-1": "草稿箱",
        "1": "待确认",
        "2": "已确认",
        "3": "已封存"
        1: "待确认",
        2: "已确认",
        3: "已封存",
      },
      currentEvaluationData: null, // 添加当前评价数据
      userRole:'',
      userRole: "",
    };
  },
  watch: {
    selectedLabTechnician: {
      handler(newVal) {
      },
      handler(newVal) {},
    },
  },
  computed: {
@@ -314,7 +472,7 @@
      this.getDetailData(id);
    }
    const userInfo = JSON.parse(sessionStorage.getItem("userInfo"));
    this.userRole = userInfo.roleType || '';
    this.userRole = userInfo.roleType || "";
  },
  methods: {
    handleAddTask() {
@@ -387,7 +545,7 @@
            this.$message.success("删除成功");
          }
        })
        .catch(() => { });
        .catch(() => {});
    },
    handleTaskSubmit(formData) {
      const photos = formData.photos.map((file) => ({
@@ -459,7 +617,7 @@
      this.checkoutResultVisible = true;
    },
    handleCheckoutResultClose() {
      this.currentCheckoutResult = null
      this.currentCheckoutResult = null;
      this.checkoutResultVisible = false;
    },
    // 选择化验师
@@ -476,18 +634,25 @@
    },
    // 去评价
    handleEvaluate(type) {
      if(this.$route.query.type == 'view' && type !='processEngineer' && this.userRole!=3){
        this.$message.warning('当前为查看模式,无法进行评价');
      if (
        this.$route.query.type == "view" &&
        type != "processEngineer" &&
        this.userRole != 3
      ) {
        this.$message.warning("当前为查看模式,无法进行评价");
        return;
      }
      this.currentEvaluationType = type;
      // 根据类型获取当前选中人员的评定数据
      if (type == 'labTechnician' && this.selectedLabTechnician) {
        this.currentEvaluationData = this.selectedLabTechnician.data?.resultEvaluateJson;
      } else if (type == 'experimenter' && this.selectedExperimenter) {
        this.currentEvaluationData = this.selectedExperimenter.data?.resultEvaluateJson;
      } else if (type == 'processEngineer' && this.selectedProcessEngineer) {
        this.currentEvaluationData = this.selectedProcessEngineer.data?.resultEvaluateJson;
      if (type == "labTechnician" && this.selectedLabTechnician) {
        this.currentEvaluationData =
          this.selectedLabTechnician.data?.resultEvaluateJson;
      } else if (type == "experimenter" && this.selectedExperimenter) {
        this.currentEvaluationData =
          this.selectedExperimenter.data?.resultEvaluateJson;
      } else if (type == "processEngineer" && this.selectedProcessEngineer) {
        this.currentEvaluationData =
          this.selectedProcessEngineer.data?.resultEvaluateJson;
      }
      this.evaluationDialogVisible = true;
    },
@@ -497,53 +662,63 @@
      // 将评分数据转换为后端需要的格式
      const evaluateData = {
        evaluateType: type == 'labTechnician' ? 2 : type == 'experimenter' ? 3 : 1, // 1=工艺工程师 2=化验师 3=实验员
        evaluateType:
          type == "labTechnician" ? 2 : type == "experimenter" ? 3 : 1, // 1=工艺工程师 2=化验师 3=实验员
        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'),
        evaluateTime: moment().format("YYYY-MM-DD HH:mm:ss"),
        resultEvaluateJson: JSON.stringify(activeIndex),
        dispatchId: this.selectedScheduling?.id,
        userId: type == 'labTechnician' ? this.selectedLabTechnician.id :
                type == 'experimenter' ? this.selectedExperimenter.id :
                this.selectedProcessEngineer.id,
        userId:
          type == "labTechnician"
            ? this.selectedLabTechnician.id
            : type == "experimenter"
            ? this.selectedExperimenter.id
            : this.selectedProcessEngineer.id,
        // teamId: this.selectedScheduling?.teamId,
        status: 1
        status: 1,
      };
      if (type == 'labTechnician') {
      if (type == "labTechnician") {
        // 更新化验师列表中的数据
        const labTechnician = this.labTechnicians.find(item => item.id == this.selectedLabTechnician.id);
        const labTechnician = this.labTechnicians.find(
          (item) => item.id == this.selectedLabTechnician.id
        );
        if (labTechnician) {
          labTechnician.data = { ...labTechnician.data, ...evaluateData };
          this.selectedLabTechnician = { ...labTechnician };
        }
      } else if (type == 'experimenter') {
      } else if (type == "experimenter") {
        // 更新实验员列表中的数据
        const experimenter = this.experimenters.find(item => item.id == this.selectedExperimenter.id);
        const experimenter = this.experimenters.find(
          (item) => item.id == this.selectedExperimenter.id
        );
        if (experimenter) {
          experimenter.data = { ...experimenter.data, ...evaluateData };
          this.selectedExperimenter = { ...experimenter };
        }
      } else if (type == 'processEngineer') {
      } else if (type == "processEngineer") {
        // 工艺工程师评定直接调用接口
        evaluateProcess({
          ...evaluateData,
          resultReportId: this.form.id // 添加实验报告ID
        }).then(res => {
          if (res.code == 200) {
            this.$message.success('评定成功');
            // 重新获取详情数据
            this.getDetailData(this.form.id);
          } else {
            this.$message.error(res.msg || '评定失败');
          }
        }).catch(err => {
          this.$message.error('评定失败');
        });
          resultReportId: this.form.id, // 添加实验报告ID
        })
          .then((res) => {
            if (res.code == 200) {
              this.$message.success("评定成功");
              // 重新获取详情数据
              this.getDetailData(this.form.id);
            } else {
              this.$message.error(res.msg || "评定失败");
            }
          })
          .catch((err) => {
            this.$message.error("评定失败");
          });
      }
      this.evaluationDialogVisible = false;
      this.currentEvaluationData = null;
@@ -554,16 +729,16 @@
      const scoreMap = {
        2: 1, // 良好
        1: 2, // 正确
        0: 3  // 失误
        0: 3, // 失误
      };
      return scoreMap[score] || 3; // 默认返回失误
    },
    // 收集评分数据
    collectEvaluateData() {
      const evaluates = [];
      // 收集化验师评分
      this.labTechnicians.forEach(tech => {
      this.labTechnicians.forEach((tech) => {
        if (tech.data) {
          evaluates.push({
            ...tech.data,
@@ -571,13 +746,13 @@
            userId: tech.id,
            teamId: this.selectedScheduling?.teamId,
            status: -1,
            id: tech.data.id || undefined
            id: tech.data.id || undefined,
          });
        }
      });
      // 收集实验员评分
      this.experimenters.forEach(exp => {
      this.experimenters.forEach((exp) => {
        if (exp.data) {
          evaluates.push({
            ...exp.data,
@@ -585,13 +760,13 @@
            userId: exp.id,
            teamId: this.selectedScheduling?.teamId,
            status: -1,
            id: exp.data.id || undefined
            id: exp.data.id || undefined,
          });
        }
      });
      // 收集工艺工程师评分
      this.processEngineers.forEach(eng => {
      this.processEngineers.forEach((eng) => {
        if (eng.data) {
          evaluates.push({
            ...eng.data,
@@ -599,7 +774,7 @@
            userId: eng.id,
            teamId: this.selectedScheduling?.teamId,
            status: -1,
            id: eng.data.id || undefined
            id: eng.data.id || undefined,
          });
        }
      });
@@ -628,172 +803,183 @@
      }
    },
    getInfomationByDispatchId(selectedData) {
      getOtherInfoByDispatchId({ dispatchId: selectedData.id }).then(res => {
        // 直接使用接口返回的字段,因为字段名完全一致
        let list = res.inspectionReports.map(item => ({
          ...item,
          experimentName: selectedData.experimentName,
          projectName: selectedData.projectName,
          experimentCode: selectedData.experimentCode
        })) || []
        this.experimentResultData = res.experimentSchemeVOS || [];
        this.inspectionResultData = list;
      getOtherInfoByDispatchId({ dispatchId: selectedData.id })
        .then((res) => {
          // 直接使用接口返回的字段,因为字段名完全一致
          let list =
            res.inspectionReports.map((item) => ({
              ...item,
              experimentName: selectedData.experimentName,
              projectName: selectedData.projectName,
              experimentCode: selectedData.experimentCode,
            })) || [];
          this.experimentResultData = res.experimentSchemeVOS || [];
          this.inspectionResultData = list;
        if (!this.$route.query.id) {
          // 处理实验人员数据
          const participants = res.experimentDispatchParticipants || [];
          // 获取工艺工程师列表
          this.processEngineers = participants
            .filter(p => p.roleType == 3) // 3=工艺工程师
            .map(p => ({
              id: p.userId,
              nickName: p.nickName || '工艺工程师',
              role: '工艺工程师',
              data: null
            }));
          if (!this.$route.query.id) {
            // 处理实验人员数据
            const participants = res.experimentDispatchParticipants || [];
            // 获取工艺工程师列表
            this.processEngineers = participants
              .filter((p) => p.roleType == 3) // 3=工艺工程师
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || "工艺工程师",
                role: "工艺工程师",
                data: null,
              }));
          // 获取化验师列表
          this.labTechnicians = participants
            .filter(p => p.roleType == 4) // 4=化验师
            .map(p => ({
              id: p.userId,
              nickName: p.nickName || '化验师',
              role: '化验师',
              data: null
            }));
            // 获取化验师列表
            this.labTechnicians = participants
              .filter((p) => p.roleType == 4) // 4=化验师
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || "化验师",
                role: "化验师",
                data: null,
              }));
          // 获取实验员列表
          this.experimenters = participants
            .filter(p => p.roleType == 5) // 5=实验员
            .map(p => ({
              id: p.userId,
              nickName: p.nickName || '实验员',
              role: '实验员',
              data: null
            }));
            // 获取实验员列表
            this.experimenters = participants
              .filter((p) => p.roleType == 5) // 5=实验员
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || "实验员",
                role: "实验员",
                data: null,
              }));
          // 处理评定数据
          const evaluates = res.resultWorkEvaluates || [];
          evaluates.forEach(evaluate => {
            // 根据评定类型和用户ID匹配对应的评定数据
            if (evaluate.evaluateType == 1) { // 1=工艺工程师
              const engineer = this.processEngineers.find(e => e.id == evaluate.userId);
              if (engineer) {
                engineer.data = {
                  id: evaluate.id, // 保存id
                  evaluateOne: evaluate.evaluateOne,
                  evaluateTwo: evaluate.evaluateTwo,
                  evaluateThree: evaluate.evaluateThree,
                  evaluateFour: evaluate.evaluateFour,
                  evaluateFive: evaluate.evaluateFive,
                  evaluateSix: evaluate.evaluateSix,
                  evaluateTime: evaluate.evaluateTime,
                  resultEvaluateJson: evaluate.resultEvaluateJson
                };
            // 处理评定数据
            const evaluates = res.resultWorkEvaluates || [];
            evaluates.forEach((evaluate) => {
              // 根据评定类型和用户ID匹配对应的评定数据
              if (evaluate.evaluateType == 1) {
                // 1=工艺工程师
                const engineer = this.processEngineers.find(
                  (e) => e.id == evaluate.userId
                );
                if (engineer) {
                  engineer.data = {
                    id: evaluate.id, // 保存id
                    evaluateOne: evaluate.evaluateOne,
                    evaluateTwo: evaluate.evaluateTwo,
                    evaluateThree: evaluate.evaluateThree,
                    evaluateFour: evaluate.evaluateFour,
                    evaluateFive: evaluate.evaluateFive,
                    evaluateSix: evaluate.evaluateSix,
                    evaluateTime: evaluate.evaluateTime,
                    resultEvaluateJson: evaluate.resultEvaluateJson,
                  };
                }
              } else if (evaluate.evaluateType == 2) {
                // 2=化验师
                const technician = this.labTechnicians.find(
                  (t) => t.id == evaluate.userId
                );
                if (technician) {
                  technician.data = {
                    id: evaluate.id, // 保存id
                    evaluateOne: evaluate.evaluateOne,
                    evaluateTwo: evaluate.evaluateTwo,
                    evaluateThree: evaluate.evaluateThree,
                    evaluateFour: evaluate.evaluateFour,
                    evaluateFive: evaluate.evaluateFive,
                    evaluateSix: evaluate.evaluateSix,
                    evaluateTime: evaluate.evaluateTime,
                    resultEvaluateJson: evaluate.resultEvaluateJson,
                  };
                }
              } else if (evaluate.evaluateType == 3) {
                // 3=实验员
                const experimenter = this.experimenters.find(
                  (e) => e.id == evaluate.userId
                );
                if (experimenter) {
                  experimenter.data = {
                    id: evaluate.id, // 保存id
                    evaluateOne: evaluate.evaluateOne,
                    evaluateTwo: evaluate.evaluateTwo,
                    evaluateThree: evaluate.evaluateThree,
                    evaluateFour: evaluate.evaluateFour,
                    evaluateFive: evaluate.evaluateFive,
                    evaluateSix: evaluate.evaluateSix,
                    evaluateTime: evaluate.evaluateTime,
                    resultEvaluateJson: evaluate.resultEvaluateJson,
                  };
                }
              }
            } else if (evaluate.evaluateType == 2) { // 2=化验师
              const technician = this.labTechnicians.find(t => t.id == evaluate.userId);
              if (technician) {
                technician.data = {
                  id: evaluate.id, // 保存id
                  evaluateOne: evaluate.evaluateOne,
                  evaluateTwo: evaluate.evaluateTwo,
                  evaluateThree: evaluate.evaluateThree,
                  evaluateFour: evaluate.evaluateFour,
                  evaluateFive: evaluate.evaluateFive,
                  evaluateSix: evaluate.evaluateSix,
                  evaluateTime: evaluate.evaluateTime,
                  resultEvaluateJson: evaluate.resultEvaluateJson
                };
              }
            } else if (evaluate.evaluateType == 3) { // 3=实验员
              const experimenter = this.experimenters.find(e => e.id == evaluate.userId);
              if (experimenter) {
                experimenter.data = {
                  id: evaluate.id, // 保存id
                  evaluateOne: evaluate.evaluateOne,
                  evaluateTwo: evaluate.evaluateTwo,
                  evaluateThree: evaluate.evaluateThree,
                  evaluateFour: evaluate.evaluateFour,
                  evaluateFive: evaluate.evaluateFive,
                  evaluateSix: evaluate.evaluateSix,
                  evaluateTime: evaluate.evaluateTime,
                  resultEvaluateJson: evaluate.resultEvaluateJson
                };
              }
            });
            // 默认选中第一个人员
            if (this.processEngineers.length > 0) {
              this.selectedProcessEngineer = this.processEngineers[0];
            }
          });
          // 默认选中第一个人员
          if (this.processEngineers.length > 0) {
            this.selectedProcessEngineer = this.processEngineers[0];
            if (this.labTechnicians.length > 0) {
              this.selectedLabTechnician = this.labTechnicians[0];
            }
            if (this.experimenters.length > 0) {
              this.selectedExperimenter = this.experimenters[0];
            }
          }
          if (this.labTechnicians.length > 0) {
            this.selectedLabTechnician = this.labTechnicians[0];
          }
          if (this.experimenters.length > 0) {
            this.selectedExperimenter = this.experimenters[0];
          }
        }
      }).catch(err => {
        this.$message.error('获取其他信息失败');
      });
        })
        .catch((err) => {
          this.$message.error("获取其他信息失败");
        });
    },
    getStatusType(status) {
      return this.statusTypeMap[status] || 'info';
      return this.statusTypeMap[status] || "info";
    },
    getStatusText(status) {
      return this.statusTextMap[status] || '未知状态';
      return this.statusTextMap[status] || "未知状态";
    },
    getResultStatusType(status) {
      const statusMap = {
        '-1': "info",
        '1': "warning",
        '2': "warning",
        '3': "success",
        '4': "danger",
        '5': "info",
        '6': 'success'
        "-1": "info",
        1: "warning",
        2: "warning",
        3: "success",
        4: "danger",
        5: "info",
        6: "success",
      };
      return statusMap[status] || "info";
    },
    getResultStatusText(status) {
      const statusMap = {
        '-1': "草稿",
        '1': "已发送",
        '2': "申请中止待审核",
        '3': "申请中止已通过",
        '4': "申请中止已驳回",
        '5': "已封存",
        '6': '实验员已提交'
        "-1": "草稿",
        1: "已发送",
        2: "申请中止待审核",
        3: "申请中止已通过",
        4: "申请中止已驳回",
        5: "已封存",
        6: "实验员已提交",
      };
      return statusMap[status] || "未知";
    },
    getCheckoutStatusType(status) {
      const statusMap = {
        '-1': 'info',
        '1': 'warning',
        '2': 'success'
        "-1": "info",
        1: "warning",
        2: "success",
      };
      return statusMap[status] || 'info';
      return statusMap[status] || "info";
    },
    getCheckoutStatusText(status) {
      const statusMap = {
        '-1': '草稿箱',
        '1': '待提交',
        '2': '已提交'
        "-1": "草稿箱",
        1: "待提交",
        2: "已提交",
      };
      return statusMap[status] || '未知';
      return statusMap[status] || "未知";
    },
    // 验证评分数据
    validateEvaluates() {
      // 检查是否所有实验员和化验师都有评分
      const allTechnicians = this.labTechnicians.every(tech => tech.data);
      const allExperimenters = this.experimenters.every(exp => exp.data);
      const allTechnicians = this.labTechnicians.every((tech) => tech.data);
      const allExperimenters = this.experimenters.every((exp) => exp.data);
      if (!allTechnicians || !allExperimenters) {
        this.$message.error('请完成所有实验员和化验师的评分');
        this.$message.error("请完成所有实验员和化验师的评分");
        return false;
      }
      return true;
@@ -811,8 +997,12 @@
          const experimentResult = this.$refs.analysisEditor.getContent();
          // 校验实验数据分析及结论
          if (!experimentResult || experimentResult == '<p></p>' || experimentResult.trim() == '<p></p>') {
            this.$message.error('请输入实验数据分析及结论');
          if (
            !experimentResult ||
            experimentResult == "<p></p>" ||
            experimentResult.trim() == "<p></p>"
          ) {
            this.$message.error("请输入实验数据分析及结论");
            return;
          }
@@ -826,7 +1016,7 @@
        const evaluates = this.collectEvaluateData();
        // 更新评分数据的状态
        evaluates.forEach(evaluate => {
        evaluates.forEach((evaluate) => {
          evaluate.status = status;
        });
@@ -835,7 +1025,7 @@
          dispatchId: this.selectedScheduling?.id,
          experimentResult: this.$refs.analysisEditor.getContent(),
          status: status,
          resultWorkEvaluates: evaluates
          resultWorkEvaluates: evaluates,
        };
        // 如果有ID,则是编辑
@@ -846,14 +1036,14 @@
          await add(submitData);
        }
        this.$message.success(status == 1 ? '提交成功' : '保存草稿成功');
        this.$message.success(status == 1 ? "提交成功" : "保存草稿成功");
        this.$router.back();
      this.$store.commit(
        "SET_TAGLIST",
        this.tagList.filter((item) => item.path !== this.$route.path)
      );
        this.$store.commit(
          "SET_TAGLIST",
          this.tagList.filter((item) => item.path !== this.$route.path)
        );
      } catch (error) {
        this.$message.error('提交失败,请重试');
        // this.$message.error("提交失败,请重试");
      }
    },
@@ -864,57 +1054,60 @@
        if (res) {
          this.form = {
            ...res,
            experimentResult: res.experimentResult || ''
            experimentResult: res.experimentResult || "",
          };
          // 设置选中的实验调度
          if (res.experimentDispatchVO) {
            this.selectedScheduling = {
              ...res.experimentDispatchVO
              ...res.experimentDispatchVO,
            };
            this.taskTableData = [res.experimentDispatchVO]
            this.taskTableData = [res.experimentDispatchVO];
            // 获取其他信息
            await this.getInfomationByDispatchId(res.experimentDispatchVO);
          }
          if (res.experimentDispatchParticipants) {
            // 处理实验人员数据
            const participants = res.experimentDispatchParticipants || [];
            // 获取工艺工程师列表
            this.processEngineers = participants
              .filter(p => p.roleType == 3) // 3=工艺工程师
              .map(p => ({
              .filter((p) => p.roleType == 3) // 3=工艺工程师
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || '工艺工程师',
                role: '工艺工程师',
                data: null
                nickName: p.nickName || "工艺工程师",
                role: "工艺工程师",
                data: null,
              }));
            // 获取化验师列表
            this.labTechnicians = participants
              .filter(p => p.roleType == 4)
              .map(p => ({
              .filter((p) => p.roleType == 4)
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || '化验师',
                role: '化验师',
                data: null
                nickName: p.nickName || "化验师",
                role: "化验师",
                data: null,
              }));
            // 获取实验员列表
            this.experimenters = participants
              .filter(p => p.roleType == 5)
              .map(p => ({
              .filter((p) => p.roleType == 5)
              .map((p) => ({
                id: p.userId,
                nickName: p.nickName || '实验员',
                role: '实验员',
                data: null
                nickName: p.nickName || "实验员",
                role: "实验员",
                data: null,
              }));
            // 处理评分数据
            if (res.resultWorkEvaluates) {
              res.resultWorkEvaluates.forEach(evaluate => {
                if (evaluate.evaluateType == 1) { // 工艺工程师
                  const engineer = this.processEngineers.find(e => e.id == evaluate.userId);
              res.resultWorkEvaluates.forEach((evaluate) => {
                if (evaluate.evaluateType == 1) {
                  // 工艺工程师
                  const engineer = this.processEngineers.find(
                    (e) => e.id == evaluate.userId
                  );
                  if (engineer) {
                    engineer.data = {
                      id: evaluate.id,
@@ -925,11 +1118,14 @@
                      evaluateFive: evaluate.evaluateFive,
                      evaluateSix: evaluate.evaluateSix,
                      evaluateTime: evaluate.evaluateTime,
                      resultEvaluateJson: evaluate.resultEvaluateJson
                      resultEvaluateJson: evaluate.resultEvaluateJson,
                    };
                  }
                } else if (evaluate.evaluateType == 2) { // 化验师
                  const technician = this.labTechnicians.find(t => t.id == evaluate.userId);
                } else if (evaluate.evaluateType == 2) {
                  // 化验师
                  const technician = this.labTechnicians.find(
                    (t) => t.id == evaluate.userId
                  );
                  if (technician) {
                    technician.data = {
                      id: evaluate.id,
@@ -940,11 +1136,14 @@
                      evaluateFive: evaluate.evaluateFive,
                      evaluateSix: evaluate.evaluateSix,
                      evaluateTime: evaluate.evaluateTime,
                      resultEvaluateJson: evaluate.resultEvaluateJson
                      resultEvaluateJson: evaluate.resultEvaluateJson,
                    };
                  }
                } else if (evaluate.evaluateType == 3) { // 实验员
                  const experimenter = this.experimenters.find(e => e.id == evaluate.userId);
                } else if (evaluate.evaluateType == 3) {
                  // 实验员
                  const experimenter = this.experimenters.find(
                    (e) => e.id == evaluate.userId
                  );
                  if (experimenter) {
                    experimenter.data = {
                      id: evaluate.id,
@@ -955,7 +1154,7 @@
                      evaluateFive: evaluate.evaluateFive,
                      evaluateSix: evaluate.evaluateSix,
                      evaluateTime: evaluate.evaluateTime,
                      resultEvaluateJson: evaluate.resultEvaluateJson
                      resultEvaluateJson: evaluate.resultEvaluateJson,
                    };
                  }
                }
@@ -975,22 +1174,21 @@
          }
        }
      } catch (error) {
        this.$message.error('获取详情失败');
        this.$message.error("获取详情失败");
      }
    },
    // 判断是否可以评定
    canEvaluate() {
      const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
      const isAdmin = userInfo.roleType == 1; // 1是超级管理员
      const isApprover = userInfo.roleType == 2; // 2是审批人
      return (isAdmin || isApprover) && this.form.status == 2; // 2是待评定状态
    }
    },
  },
  computed: {
    isView() {
      return this.$route.query.type == 'view';
      return this.$route.query.type == "view";
    },
  },
};
</script>