马宇豪
2025-05-09 cbb23429b8beed72b58cbb57f9b3c56a0fb2b5d2
src/views/analyse/evaluate/index.vue
@@ -25,38 +25,47 @@
<!--                        </el-col>-->
                    </el-row>
                    <el-table ref="multipleTableRef" :data="evaluateState.evaluateData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
                        <el-table-column type="expand">
                            <template #default="scope">
                                <el-table :data="scope.row.factorQueryDTOList" style="width: 100%">
                                    <el-table-column type="index" label="序号" width="80" />
                                    <el-table-column prop="technologyMeasure" label="技术措施" show-overflow-tooltip align="center"></el-table-column>
                                    <el-table-column prop="manageMeasure" label="管理措施" show-overflow-tooltip align="center"></el-table-column>
                                    <el-table-column prop="educationMeasure" label="教育措施" show-overflow-tooltip align="center"></el-table-column>
                                    <el-table-column prop="personalProtectionMeasure" label="防护措施" show-overflow-tooltip align="center"></el-table-column>
                                    <el-table-column prop="evaluateStatus" label="防护措施" show-overflow-tooltip align="center">
                                        <template #default="scope">
                                            <div>
                                                <div v-if="scope.row.evaluateStatus === 0">
                                                    <el-tag :type="'info'">
                                                        {{ '未评价' }}
                                                    </el-tag>
                                                </div>
                                                <div v-if="scope.row.evaluateStatus === 1">
                                                    <el-tag :type="'success'">
                                                        {{ '已评价' }}
                                                    </el-tag>
                                                </div>
                                            </div>
                                        </template>
                                    </el-table-column>
                                    <el-table-column label="操作" width="250">
                                        <template #default="scope">
                                            <el-button size="small" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button>
                                        </template>
                                    </el-table-column>
                                </el-table>
                            </template>
                        </el-table-column>
<!--                        <el-table-column type="expand">-->
<!--                            <template #default="scope">-->
<!--                                <el-table :data="scope.row.factorQueryDTOList" style="width: 100%">-->
<!--                                  <el-table-column type="index" label="序号" width="80" />-->
<!--                                  <el-table-column prop="evaluateMethod" label="评价方法" align="center">-->
<!--                                    <template #default="scope">-->
<!--                                      {{ evaluateState.evaluateMethodList.find(i=>i.id === scope.row.evaluateMethod)?.name }}-->
<!--                                    </template>-->
<!--                                  </el-table-column>-->
<!--                                  <el-table-column prop="itemIdentificationTime" label="辨识添加时间" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>-->
<!--                                  <el-table-column label="操作" width="250" >-->
<!--                                    <template #default="scope2">-->
<!--                                        <el-button size="small" v-if="scope.row.planExecStatus === 3 && scope.row.evaluateUserId == evaluateState.user" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope2.row)">评价</el-button>-->
<!--                                        <el-button size="small" v-if="scope2.row.riskValue" text type="primary" :icon="View" @click="openEvaluateDialog('查看', scope2.row)">查看</el-button>-->
<!--                                    </template>-->
<!--                                  </el-table-column>-->
<!--                                </el-table>-->
<!--                            </template>-->
<!--                        </el-table-column>-->
                        <el-table-column prop="assessPlanName" label="评估计划名称"/>
                        <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip>
@@ -64,32 +73,47 @@
                                <span>{{`${evaluateState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span>
                            </template>
                        </el-table-column>
                        <el-table-column prop="identificationUser" label="计划负责人" />
                        <el-table-column prop="riskUnitName" label="风险单元" />
                        <el-table-column prop="planUserName" label="计划负责人" />
                        <el-table-column prop="identificationUser" label="辨识专家" />
                        <el-table-column prop="evaluateUser" label="评价专家" />
                        <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
                        <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>
                        <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>
                        <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>
                        <el-table-column prop="planExecStatus" label="状态" show-overflow-tooltip>
                            <template #default="scope">
                                <div>
                                    <div v-if="scope.row.planExecStatus === 3">
                                        <el-tag :type="'info'">
                                            {{ '未提交' }}
                                        </el-tag>
                                    </div>
                                    <div v-if="scope.row.planExecStatus === 4">
                                        <el-tag :type="'success'">
                                            {{ '已提交' }}
                                        </el-tag>
                                    </div>
                                </div>
                            </template>
                        <el-table-column prop="evaluateStatus" label="执行状态" show-overflow-tooltip align="center">
                          <template #default="scope">
                            <div>
                              <div v-if="scope.row.planExecStatus === 1">
                                <el-tag :type="'info'">
                                  {{ '未开始' }}
                                </el-tag>
                              </div>
                              <div v-if="scope.row.planExecStatus === 2">
                                <el-tag :type="'info'">
                                  {{ '辨识阶段' }}
                                </el-tag>
                              </div>
                              <div v-if="scope.row.planExecStatus === 3">
                                <el-tag :type="'primary'">
                                  {{ '评价阶段' }}
                                </el-tag>
                              </div>
                              <div v-if="scope.row.planExecStatus === 4">
                                <el-tag :type="'success'">
                                  {{ '完成阶段' }}
                                </el-tag>
                              </div>
                            </div>
                          </template>
                        </el-table-column>
                        <el-table-column label="操作" width="250">
                            <template #default="scope">
                                <el-button size="small" text type="primary" @click="accessEvaluate(scope.row)">提交</el-button>
                            </template>
                          <template #default="scope">
                            <el-button size="small" text :icon="View" type="primary" @click="openProjectDialog('查看',scope.row)">实验信息</el-button>
                            <el-button size="small" v-if="scope.row.planExecStatus===3 && scope.row.evaluateUsers?.find(i=>i.evaluateUserId== evaluateState.user)" text type="primary" :icon="DocumentChecked" @click="accessEvaluate(scope.row)">提交</el-button>
                            <el-button size="small" v-if="scope.row.planExecStatus===3 && scope.row.evaluateUsers?.find(i=>i.evaluateUserId== evaluateState.user)" text type="primary" :icon="Edit" @click="openEvaluate(scope.row)">评价</el-button>
                            <el-button size="small" v-if="scope.row.planExecStatus===4" text :icon="View" type="primary" @click="openEvaluate(scope.row)">查看评价</el-button>
                          </template>
                        </el-table-column>
                    </el-table>
                    <div class="pageBtn">
@@ -98,7 +122,48 @@
                </div>
            </div>
        </div>
        <evaluate-dialog ref="evaluateDialogRef" @refresh="getEvaluateData"></evaluate-dialog>
        <el-dialog title="辨识信息评价" v-model="evaluateState.evaluateDialog" width="50%">
          <el-table :data="evaluateState.currentEvalute.factorQueryDTOList" style="width: 100%">
            <el-table-column type="index" label="序号" width="80"/>
            <el-table-column prop="evaluateMethod" label="评价方法" align="center">
              <template #default="scope">
                {{ evaluateState.evaluateMethodList.find(i=>i.id === scope.row.evaluateMethod)?.name }}
              </template>
            </el-table-column>
            <el-table-column prop="itemIdentificationTime" label="辨识添加时间" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>
            <el-table-column label="操作">
              <template #default="scope">
                <el-button size="small" v-if="evaluateState.currentEvalute.planExecStatus === 3 && evaluateState.currentEvalute.evaluateUsers?.find(i=>i.evaluateUserId== evaluateState.user)" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button>
                <el-button size="small" v-if="scope.row.riskValue" text type="primary" :icon="View" @click="openEvaluateDialog('查看', scope.row)">查看</el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-dialog>
        <develop-dialog ref="DevelopDialogRef" @refresh="getEvaluateData"></develop-dialog>
        <evaluate-dialog ref="evaluateDialogRef" @refresh="getDataAndClose"></evaluate-dialog>
    </div>
</template>
@@ -107,22 +172,33 @@
import {evaluateApi} from "/@/api/analyse/evaluate";
import {identifyApi} from "/@/api/analyse/identify";
import {ElMessage, ElMessageBox} from "element-plus";
import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
import { Edit, View, Plus, Delete, DocumentChecked } from '@element-plus/icons-vue';
import {planApi} from "/@/api/analyse/plan";
import {userApi} from "/@/api/systemManage/user";
import {useUserInfo} from "/@/stores/userInfo";
import {storeToRefs} from "pinia";
import {roomApi} from "/@/api/basic/room";
import {projectApi} from "/@/api/experiment/project";
const DevelopDialog = defineAsyncComponent(() => import('../../experiment/developing/components/developDialog.vue'));
const EvaluateDialog = defineAsyncComponent(() => import('./components/evaluateDialog.vue'));
const evaluateDialogRef = ref();
const DevelopDialogRef = ref()
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
const evaluateState = reactive<EvaluateStateType>({
    evaluateData: [],
    user: null,
    currentEvalute:{},
    allRoomList: [],
    evaluateDialog: false,
    searchQuery: {
        pageIndex: 1,
        pageSize: 10,
        assessPlanName: '',
        experimentName: '',
        tag: 2,
        planExecStatus: 5
    },
    total: 0,
    planList: [
@@ -161,6 +237,52 @@
    }
};
const getRoomData = async () => {
  let res = await roomApi().getAllRoom();
  if(res.data.code === 100){
    evaluateState.allRoomList = JSON.parse(JSON.stringify(res.data.data));
  }else{
    ElMessage({
      type: 'warning',
      message: res.data.msg
    });
  }
};
const openProjectDialog = async (title: string, value: {}) => {
  let res = await projectApi().getProjectByList({
    pageIndex: 1,
    pageSize: 10,
    searchParams: {
      experimentName: '',
      experimentType: null,
      assessLevel: null,
      id: value.experimentId
    }
  },);
  if(res.data.code === 100){
    if(Array.isArray(res.data.data) && res.data.data.length>0){
      DevelopDialogRef.value.showDevelopDialog(title, res.data.data[0], evaluateState.allRoomList);
    }else{
      ElMessage({
        type: 'warning',
        message: '查询不到实验信息'
      });
    }
  }else{
    ElMessage({
      type: 'warning',
      message: res.data.msg
    });
  }
};
const getDataAndClose =()=>{
  evaluateState.evaluateDialog = false
  getEvaluateData()
}
const getAllPlanList = async () => {
    let res = await planApi().getAllPlan();
    if(res.data.code === 100){
@@ -175,10 +297,13 @@
const getPersonList = async () => {
    let res = await userApi().getUserList({
        roleId: 1,
        usePage: false,
        pageIndex: 1,
        pageSize: 10
        pageSize: 99999,
        searchParams:{
          roleId: null,
          name: '',
          realName: ''
        }
    });
    if(res.data.code === 100){
        evaluateState.personList = JSON.parse(JSON.stringify(res.data.data));
@@ -189,6 +314,11 @@
        })
    }
};
const openEvaluate = (value: IdentifyType) => {
  evaluateState.evaluateDialog = true
  evaluateState.currentEvalute  = value
}
const openEvaluateDialog = (title: string, value: IdentifyType) => {
    evaluateDialogRef.value.showEvaluateDialog(title, value);
@@ -221,7 +351,7 @@
};
const accessEvaluate = (val: IdentifyType) => {
    ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
    ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”的评价信息,是否继续?`, '提示', {
        confirmButtonText: '确认',
        cancelButtonText: '取消',
        type: 'warning'
@@ -263,6 +393,7 @@
        assessPlanName: '',
        experimentName: '',
        tag: 2,
        planExecStatus: 5
    }
};
@@ -270,6 +401,8 @@
    getEvaluateData();
    getAllPlanList();
    getPersonList();
  getRoomData()
    evaluateState.user = Number(userInfos.value.uid)
});
</script>
@@ -340,64 +473,6 @@
                margin-right: 20px;
            }
        }
    }
}
.stepItem {
    width: 100%;
    display: flex;
    align-items: flex-start;
    margin-bottom: 30px;
    margin-left: 30px;
    padding-bottom: 30px;
    border-left: 2px solid #ccc;
    &:first-of-type {
        margin-top: 30px;
    }
    &:last-of-type {
        margin-bottom: 0;
        border-left: none;
    }
    .stepNum {
        width: 30px;
        height: 30px;
        border-radius: 15px;
        box-sizing: border-box;
        color: #333;
        border: 1px solid #999;
        line-height: 28px;
        text-align: center;
        margin-right: 10px;
        margin-left: -16px;
        margin-top: -30px;
    }
    .stepCard {
        width: 100%;
        margin-top: -30px;
        .box-card {
            width: 100%;
            &:deep(.el-card__header) {
                padding: 10px 15px;
            }
            .card-header {
                width: 100%;
                display: flex;
                justify-content: space-between;
                align-items: center;
                & > div:first-of-type {
                    margin-right: 80px;
                    font-size: 18px;
                    font-weight: bold;
                }
            }
        }
    }
    &:hover .card-header {
        color: #0098f5;
    }
    &:hover .stepNum {
        border: 2px solid #0098f5;
        color: #0098f5;
    }
}