马宇豪
2023-04-25 0c0fa2483fd431104f6498e40fffd983d913dce2
修改
已修改25个文件
已添加1个文件
1010 ■■■■ 文件已修改
src/api/basic/unit/index.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/menu/company.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/applyReview/components/reportDialog.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/assessApply/components/riskDialog.vue 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/assessApply/components/riskUnitDialog.vue 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/assessApply/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/evaluate/index.ts 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/evaluate/index.vue 151 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/identify/components/identifyDialog.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/identify/components/identifyQuery.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/identify/index.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/identify/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/plan/components/planDialog.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/plan/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/analyse/riskUnit/index.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basic/equipment/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/developing/components/developDialog.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/developing/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/components/applyDialog.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/components/projectDialog.vue 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/components/selectDanger.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/components/selectEmergency.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/index.ts 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/project/index.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/loginPage/loginPage.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/basic/unit/index.ts
@@ -34,6 +34,15 @@
            });
        },
        deleteRiskUnitById: (params: object) => {
            return request({
                url: import.meta.env.VITE_API_URL + '/risk/delete/deleteRiskUnit',
                method: 'post',
                data: params
            });
        },
        getAllUnit: () => {
            return request({
                url: import.meta.env.VITE_API_URL + '/basic/select/listRiskUnit',
src/assets/menu/company.png

src/views/analyse/applyReview/components/reportDialog.vue
@@ -178,7 +178,8 @@
                        <td class="w-25 m-color">{{item.approveStage}}</td>
                        <td class="w-25">{{item.approvePerson}}</td>
                        <td class="w-25 m-color">审批结果</td>
                        <td class="w-25">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td>
<!--                        <td class="w-25">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td>-->
                        <td class="w-25" :class="item.approveStatus==3?'redTit':''">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td>
                      </tr>
                      <tr>
                        <td class="w-25 m-color autoheight">审批意见</td>
@@ -504,6 +505,10 @@
         width: 75%;
     }
    &.redTit{
      color: red;
    }
    &.autoheight {
      min-height: 44px;
      height: auto;
src/views/analyse/assessApply/components/riskDialog.vue
@@ -2,7 +2,7 @@
    <div class="system-menu-dialog-container">
        <el-dialog title="管理实验现实风险" v-model="assessApplyDialogState.assessApplyDialogVisible" width="60%">
          <div>
            <el-button @click="addUnit()" type="primary" style="margin-bottom: 20px" size="default">增加风险分析单元</el-button>
            <el-button @click="openUnitDialog('新增','', assessApplyDialogState.id, assessApplyDialogState.liabilityUserId)" type="primary" style="margin-bottom: 20px" size="default">增加风险分析单元</el-button>
          </div>
          <el-table ref="multipleTableRef" :data="assessApplyDialogState.riskUnitData" style="width: 100%" :header-cell-style="{ background: '#fafafa' }">
            <el-table-column prop="riskCode" label="风险单元编号"/>
@@ -15,12 +15,19 @@
            <el-table-column prop="riskUnitType" label="风险单元类型"/>
            <el-table-column prop="riskUnitType" label="负责人">
              <template #default="scope">
                <span>{{`${assessApplyDialogState.allPersonList.find(item =>item.id === scope.row.liabilityUserId)?.personName || ''}`}}</span>
                <span>{{`${assessApplyDialogState.allPersonList.find(item =>item.id === scope.row.liabilityUserId)?.realName || ''}`}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="evaluateStatus" label="是否评价">
              <template #default="scope">
                <span>{{scope.row.evaluateStatus == 1?'未评价':scope.row.evaluateStatus == 2?'已评价':'--'}}</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" width="150" align="center">
              <template #default="scope">
                <el-button size="default" text  type="primary" @click="openUnitDialog('查看', scope.row, assessApplyDialogState.id, assessApplyDialogState.liabilityUserId)">查看</el-button>
                <el-button size="default" text  type="primary" @click="openUnitDialog('编辑', scope.row, assessApplyDialogState.id, assessApplyDialogState.liabilityUserId)">编辑</el-button>
                <el-button size="default" text type="danger" @click="deleteUnit(scope.$index, scope.row)">删除</el-button>
              </template>
            </el-table-column>
          </el-table>
@@ -41,6 +48,9 @@
import {personApi} from "/@/api/basic/person";
import {riskUnitApi} from "/@/api/analyse/riskUnit";
import {unitApi} from "/@/api/basic/unit";
import {userApi} from "/@/api/systemManage/user";
import {ElMessageBox} from "element-plus/es";
import {identifyApi} from "/@/api/analyse/identify";
const RiskUnitDialog = defineAsyncComponent(() => import('./riskUnitDialog.vue'));
const assessApplyDialogState = reactive<AssessApplyDialogStateType>({
@@ -67,8 +77,8 @@
    getRiskData()
};
const addUnit = (id: number, value: RiskUnitType) => {
  riskUnitDialogRef.value.showRiskUnitDialog(assessApplyDialogState.id, assessApplyDialogState.liabilityUserId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList);
const openUnitDialog = (title: string, val, id: number, userId: number) => {
  riskUnitDialogRef.value.showRiskUnitDialog(title, val, id, userId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList);
};
const getRiskData = async () => {
@@ -96,8 +106,16 @@
};
const getAllPersonList = async () => {
  let res = await personApi().getAllPerson();
  if(res.data.code === 100){
  let res = await userApi().getUserList({
    pageIndex: 1,
    pageSize: 99999,
    searchParams:{
      roleId: null,
      name: '',
      realName: ''
    }
  });
  if(res.data.code === 200){
    assessApplyDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data));
  }else{
    ElMessage({
@@ -119,6 +137,34 @@
  }
}
const deleteUnit = (index: number, val: IdentifyType) => {
  ElMessageBox.confirm(`此操作将永久删除该风险单元,是否继续?`, '提示', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning'
  })
      .then(async () => {
        let data = { id: val.id }
        let res = await unitApi().deleteRiskUnitById(data);
        if (res.data.code === 100) {
          (<Array<IdentifyType>>assessApplyDialogState.riskUnitData).splice(index, 1)
          ElMessage({
            type: 'success',
            duration: 2000,
            message: '删除成功'
          });
        } else {
          ElMessage({
            type: 'warning',
            message: res.data.msg
          });
        }
      })
      .catch((error) => {
        console.log(error);
      });
};
const emit = defineEmits(['refresh'])
defineExpose({
src/views/analyse/assessApply/components/riskUnitDialog.vue
@@ -5,43 +5,43 @@
        <el-row :gutter="35">
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="风险单元编号" prop="riskCode">
              <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input>
              <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" :disabled="riskUnitDialogState.disabled" placeholder="风险单元编号" clearable class="input-length"></el-input>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="风险单元名称" prop="riskName">
              <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input>
              <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" :disabled="riskUnitDialogState.disabled" placeholder="风险单元名称" clearable class="input-length"></el-input>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="风险单元类型" prop="riskUnitTypeId">
              <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length">
              <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" :disabled="riskUnitDialogState.disabled" placeholder="风险单元类型" clearable class="input-length">
                <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="负责人" prop="liabilityUserId">
              <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length">
                <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option>
              <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" :disabled="riskUnitDialogState.disabled" placeholder="负责人" clearable class="input-length">
                <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="负责部门" prop="liabilityDep">
              <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input>
              <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" :disabled="riskUnitDialogState.disabled" placeholder="负责部门" clearable class="input-length"></el-input>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1">
            <el-form-item label="基础风险单元" prop="basicRiskUnitId">
              <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length">
              <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" :disabled="riskUnitDialogState.disabled" placeholder="基础风险单元" clearable class="input-length">
                <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="风险单元描述">
              <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input>
              <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" :disabled="riskUnitDialogState.disabled" placeholder="风险单元描述" clearable class="input-length"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
@@ -49,7 +49,7 @@
      <template #footer>
                <span class="dialog-footer">
                    <el-button @click="riskUnitDialogState.riskUnitDialogVisible = !riskUnitDialogState.riskUnitDialogVisible" size="default">取 消</el-button>
                    <el-button type="primary" @click="onSubmitRiskUnit" size="default">确定</el-button>
                    <el-button type="primary" @click="onSubmitRiskUnit" v-if="!riskUnitDialogState.disabled" size="default">确定</el-button>
                </span>
      </template>
    </el-dialog>
@@ -65,10 +65,12 @@
const riskUnitFormRef = ref()
const riskUnitDialogState = reactive<RiskUnitDialogType>({
  title: '新增',
  title: '',
  experimentType: 2,
  disabled: false,
  riskUnitDialogVisible: false,
  riskUnitForm: {
    id: null,
    experimentId: null,
    riskCode: '',
    riskName: '',
@@ -101,49 +103,51 @@
  ],
})
const showRiskUnitDialog = (id: number, liabilityUserId: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => {
const showRiskUnitDialog = (title: string, val, id: number, userId: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => {
  riskUnitDialogState.riskUnitDialogVisible = true;
  riskUnitDialogState.basicUnitList = basicUnitList
  riskUnitDialogState.allPersonList = allPersonList
  riskUnitDialogState.riskTypeList = allRiskTypeList
  riskUnitDialogState.disabled = false
  setTimeout(() => {
    riskUnitFormRef.value.clearValidate();
  });
  if(title === '新增'){
    riskUnitDialogState.title = '新增';
  riskUnitDialogState.riskUnitForm = {
      id: null,
    experimentId: id,
    riskCode: '',
    riskName: '',
    riskUnitTypeId: null,
    liabilityUserId: liabilityUserId,
      liabilityUserId: userId,
    liabilityDep: '',
    description: '',
    basicRiskUnitId: null,
  };
  }else if(title === '查看'){
    riskUnitDialogState.title = '查看';
    riskUnitDialogState.disabled = true
    for(let i in riskUnitDialogState.riskUnitForm){
      if(isValidKey(i, riskUnitDialogState.riskUnitForm)){
        riskUnitDialogState.riskUnitForm[i] = val[i];
      }
    }
  }else{
    riskUnitDialogState.title = '编辑';
    for(let i in riskUnitDialogState.riskUnitForm){
      if(isValidKey(i, riskUnitDialogState.riskUnitForm)){
        riskUnitDialogState.riskUnitForm[i] = val[i];
      }
    }
  }
};
const onSubmitRiskUnit = () => {
  riskUnitFormRef.value.validate(async(valid: boolean) => {
    if(valid){
      if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){
        let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm
        let query = { experimentId,basicRiskUnitId }
        let res = await riskUnitApi().addBasicRiskUnit(query);
        if(res.data.code === 100){
          emit('refresh')
          riskUnitDialogState.riskUnitDialogVisible = false;
          ElMessage({
            type: 'success',
            message: '新增成功'
          })
        }else{
          ElMessage({
            type: 'warning',
            message: res.data.msg,
          });
        }
      }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){
        let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm
      if(riskUnitDialogState.title === '新增'){
        let { id, basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm
        let res = await riskUnitApi().addRiskUnit(query);
        if(res.data.code === 100){
          emit('refresh')
src/views/analyse/assessApply/index.vue
@@ -65,7 +65,7 @@
                        <el-table-column label="操作" width="250" fixed="right">
                            <template #default="scope">
                                <el-button size="small" v-if="scope.row.stage == 3" text type="primary" :icon="Edit" @click="toReport(scope.row)">生成评估报告</el-button>
                                <el-button size="small" text type="primary" :icon="Edit" @click="openRiskDialog(scope.row)">管理实验现实风险</el-button>
                                <el-button size="small" text type="primary" :icon="Edit" @click="openRiskDialog(scope.row)">管理实验风险单元</el-button>
                                <el-button size="small" v-if="scope.row.stage == 4 && !scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('提交', scope.row)">提交审批</el-button>
                                <el-button size="small" v-if="scope.row.stage == 4 && !scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('修改', scope.row)">修改</el-button>
                                <el-button size="small" v-if="scope.row.stage == 4 && scope.row.assessPerson" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看</el-button>
src/views/analyse/evaluate/index.ts
@@ -1,5 +1,8 @@
declare interface EvaluateStateType {
    evaluateData: Array<EvaluateType>
    evaluateData: Array<IdentifyType>
    user: null| number
    currentEvalute:{}
    evaluateDialog:boolean
    searchQuery: {
        pageIndex: number,
        pageSize: number,
src/views/analyse/evaluate/index.vue
@@ -25,47 +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="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" 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 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>
@@ -75,6 +75,7 @@
                        </el-table-column>
                        <el-table-column prop="riskUnitName" label="风险单元" />
                        <el-table-column prop="identificationUser" 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>
@@ -108,7 +109,9 @@
                        </el-table-column>
                        <el-table-column label="操作" width="250">
                          <template #default="scope">
                            <el-button size="small" v-if="scope.row.planExecStatus===3" text type="primary" @click="accessEvaluate(scope.row)">提交</el-button>
                            <el-button size="small" v-if="scope.row.planExecStatus===3 && scope.row.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.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>
@@ -118,7 +121,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.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>
        <evaluate-dialog ref="evaluateDialogRef" @refresh="getDataAndClose"></evaluate-dialog>
    </div>
</template>
@@ -127,16 +171,22 @@
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";
const EvaluateDialog = defineAsyncComponent(() => import('./components/evaluateDialog.vue'));
const evaluateDialogRef = ref();
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
const evaluateState = reactive<EvaluateStateType>({
    evaluateData: [],
    user: null,
    currentEvalute:{},
    evaluateDialog: false,
    searchQuery: {
        pageIndex: 1,
        pageSize: 10,
@@ -182,6 +232,11 @@
    }
};
const getDataAndClose =()=>{
  evaluateState.evaluateDialog = false
  getEvaluateData()
}
const getAllPlanList = async () => {
    let res = await planApi().getAllPlan();
    if(res.data.code === 100){
@@ -213,6 +268,11 @@
        })
    }
};
const openEvaluate = (value: IdentifyType) => {
  evaluateState.evaluateDialog = true
  evaluateState.currentEvalute  = value
}
const openEvaluateDialog = (title: string, value: IdentifyType) => {
    evaluateDialogRef.value.showEvaluateDialog(title, value);
@@ -295,6 +355,7 @@
    getEvaluateData();
    getAllPlanList();
    getPersonList();
    evaluateState.user = Number(userInfos.value.uid)
});
</script>
src/views/analyse/identify/components/identifyDialog.vue
@@ -438,7 +438,6 @@
        };
    }else if(title === '查看'){
        identifyDialogState.title = '查看';
        console.log(value,'value')
        identifyDialogState.disabled = true
        for(let i in identifyDialogState.identifyForm){
            if(isValidKey(i, identifyDialogState.identifyForm)){
@@ -447,11 +446,6 @@
        }
    }else{
        identifyDialogState.title = '编辑';
        // identifyDialogState.identifyForm.hazopId = identifyQueryForm.hazopId;
        // identifyDialogState.identifyForm.jhaId = identifyQueryForm.jhaId;
        // identifyDialogState.identifyForm.phaId = identifyQueryForm.phaId;
        // identifyDialogState.identifyForm.sclId = identifyQueryForm.sclId;
        // identifyDialogState.identifyForm.analogyId = identifyQueryForm.analogyId;
        for(let i in identifyDialogState.identifyForm){
              if(isValidKey(i, identifyDialogState.identifyForm)){
                  identifyDialogState.identifyForm[i] = value[i];
@@ -483,11 +477,9 @@
                    });
                }
            }else{
                console.log(identifyDialogState.identifyForm,'identifyDialogState.identifyForm')
                let res = await identifyApi().modIdentify(identifyDialogState.identifyForm)
                if(res.data.code === 100){
                    emit('refresh',2,identifyDialogState.identifyForm)
                    identifyDialogState.identifyDialogVisible = false;
                    ElMessage({
                        type: 'success',
src/views/analyse/identify/components/identifyQuery.vue
@@ -236,7 +236,6 @@
};
const onDelIdentifyQuery = (index: number, val: IdentifyType) => {
  console.log(val,'val')
    ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', {
        confirmButtonText: '确认',
        cancelButtonText: '取消',
src/views/analyse/identify/index.ts
@@ -1,5 +1,6 @@
declare interface IdentifyStateType {
    identifyData: Array<IdentifyType>
    user: null | number
    searchQuery: {
        pageIndex: number,
        pageSize: number,
@@ -74,7 +75,7 @@
    sclCheckResult: string,
    planExecStatus?: number,
    evaluateMethod?: number,
    factorQueryDTOList?: IdentifyType [],
    factorQueryDTOList?: EvaluateType [],
    evaluateUser?: string,
    result?: number | null,
    identificationDesc: string
src/views/analyse/identify/index.vue
@@ -34,6 +34,7 @@
                            </template>
                        </el-table-column>
                        <el-table-column prop="identificationUser" 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>
@@ -67,9 +68,9 @@
                        </el-table-column>
                        <el-table-column label="操作" width="250">
                            <template #default="scope">
                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" @click="accessIdentify(scope.row)">提交</el-button>
                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2 && scope.row.identificationUserId == identifyState.user" @click="accessIdentify(scope.row)">提交</el-button>
                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 3 || scope.row.planExecStatus === 4" :icon="View" @click="openIdentifyQuery('查看', scope.row)">查看</el-button>
                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('辨识', scope.row)">辨识</el-button>
                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2 && scope.row.identificationUserId == identifyState.user" :icon="Edit" @click="openIdentifyQuery('辨识', scope.row)">辨识</el-button>
<!--                                <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('编辑', scope.row)">编辑</el-button>-->
                            </template>
                        </el-table-column>
@@ -91,13 +92,17 @@
import { Edit, View, Plus, Delete } 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";
const IdentifyQueryDialog = defineAsyncComponent(() => import('./components/identifyQuery.vue'));
const identifyQueryDialogRef = ref();
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
const identifyState = reactive<IdentifyStateType>({
    identifyData: [],
    user: null,
    searchQuery: {
        pageIndex: 1,
        pageSize: 10,
@@ -261,6 +266,7 @@
    getIdentifyData();
    getAllPlanList();
    getPersonList();
    identifyState.user = Number(userInfos.value.uid)
});
</script>
src/views/analyse/plan/components/planDialog.vue
@@ -16,13 +16,6 @@
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                        <el-form-item label="计划制定人" prop="planUserId">
                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.planUserId" style="width:100%"  placeholder="计划制定人" clearable>
                                <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                        <el-form-item label="评估时间" prop="assessTime">
                            <el-date-picker
                                :disabled="planDialogState.disabled"
@@ -32,8 +25,16 @@
                                end-placeholder="结束时间"
                                format="YYYY-MM-DD HH:mm:ss"
                                value-format="YYYY-MM-DD HH:mm:ss"
                            popper-class="pickTime"
                                @change="formatTime">
                            </el-date-picker>
                      </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                        <el-form-item label="计划制定人" prop="planUserId">
                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.planUserId" style="width:100%"  placeholder="计划制定人" clearable>
                                <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -197,6 +198,9 @@
})
</script>
<style scoped>
<style lang="scss" scoped>
    ::v-deep(.pickTime){
      position: absolute !important;
      top: 0 !important;
    }
</style>
src/views/analyse/plan/index.vue
@@ -123,7 +123,6 @@
const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue'));
const planDialogRef = ref();
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
@@ -409,7 +408,7 @@
    getPlanData();
    getAllRiskUnitList();
    getPersonList();
    planState.user = userInfos.value.uid
    planState.user = Number(userInfos.value.uid)
})
</script>
src/views/analyse/riskUnit/index.ts
@@ -40,10 +40,11 @@
declare interface RiskUnitDialogType {
    title: string,
    disabled: boolean
    experimentType: number | null,
    riskUnitDialogVisible: boolean,
    riskUnitForm: {
        id?: number
        id?: number | null
        experimentId: number | null,
        riskCode: string,
        riskName: string,
src/views/basic/equipment/index.vue
@@ -132,7 +132,7 @@
    let res = await equipmentApi().getEquipmentByList(equipmentState.searchQuery);
    if(res.data.code === 100){
        equipmentState.equipmentData = res.data.data;
        equipmentState.total = res.data.total;
        equipmentState.total = res.data.total
    }else{
        ElMessage({
            type: 'warning',
src/views/experiment/developing/components/developDialog.vue
@@ -15,7 +15,7 @@
                    <tr>
                        <td class="w-25 m-color required">实验类型</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="experimentType" style="display: flex;justify-content: center">
                            <el-radio-group style="text-align: center" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentType">
                                <el-radio :label="1">化学类</el-radio>
                                <el-radio :label="2">生物类</el-radio>
@@ -24,27 +24,32 @@
                                <el-radio :label="5">特种设备类</el-radio>
                                <el-radio :label="6">其他类</el-radio>
                            </el-radio-group>
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">部门</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="dep">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                      <td class="w-25 m-color required">负责人</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="liabilityUserId">
                        <el-select style="width: 100%" disabled v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable>
                          <el-option :key="userInfos.uid" :value="userInfos.uid" :label="userInfos.userName"></el-option>
                        </el-select>
                        </el-form-item>
                        <!--                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId"/>-->
                      </td>
                      <td class="w-25 m-color required">电话</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="liabilityUserPhone">
                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserPhone" />
                        </el-form-item>
                      </td>
                    </tr>
                    <tr>
@@ -58,34 +63,46 @@
<!--                              :label="item.personName"-->
<!--                          ></el-option>-->
<!--                        </el-select>-->
                        <el-form-item prop="safeLiabilityUser">
                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser"/>
                        </el-form-item>
                      </td>
                      <td class="w-25 m-color required">电话</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="safeLiabilityUserPhone">
                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" />
                        </el-form-item>
                      </td>
                    </tr>
                    <tr>
                      <td class="w-25 m-color required">立项时间</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="createExperimentTime">
                        <el-date-picker :disabled="projectDialogState.disabled"  type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.createExperimentTime" />
                        </el-form-item>
                      </td>
                      <td class="w-25 m-color required">开展时间</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="startTime">
                          <el-date-picker :disabled="projectDialogState.disabled"  type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.startTime" />
                        </el-form-item>
                      </td>
                    </tr>
                    <tr>
                      <td class="w-25 m-color required">是否是安全化信息系统</td>
                      <td class="w-25 m-color">
                        <el-form-item prop="sisStatus">
                        <el-radio-group :disabled="projectDialogState.disabled"  v-model="projectDialogState.projectForm.sisStatus" @change="hasSafeSystem">
                          <el-radio :label="1">是</el-radio>
                          <el-radio :label="2">否</el-radio>
                        </el-radio-group>
                        </el-form-item>
                      </td>
                      <td class="w-25 m-color" :class="projectDialogState.projectForm.sisStatus==1?'required':''">安全信息化系统</td>
                      <td class="w-25 m-color">
                        <el-input :disabled="projectDialogState.disabled" :readonly="projectDialogState.projectForm.sisStatus!==1" v-model="projectDialogState.projectForm.safeInformationSystem" />
                      <td class="w-25 m-color" v-if="projectDialogState.projectForm.sisStatus == 1" :class="projectDialogState.projectForm.sisStatus==1?'required':''">安全信息化系统</td>
                      <td class="w-25 m-color" v-if="projectDialogState.projectForm.sisStatus == 1">
                        <el-form-item prop="safeInformationSystem">
                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeInformationSystem" />
                        </el-form-item>
                      </td>
                    </tr>
                    <select-room ref="selectRoomRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.siteList"></select-room>
@@ -94,119 +111,154 @@
                    <tr>
                        <td class="w-25 m-color required">实验步骤</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="experimentStep">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">操作方法</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="experimentMethod">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">工艺过程</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="process">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">特殊/关键过程</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="keyProcess">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                      <td class="w-25 m-color required">预防措施</td>
                      <td class="w-75 m-color">
                        <el-form-item prop="measure">
                        <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" />
                        </el-form-item>
                      </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">是否存在过夜、老化实验</td>
                        <td class="w-25 m-color">
                          <el-form-item prop="timeout">
                            <el-radio-group :disabled="projectDialogState.disabled"  v-model="projectDialogState.projectForm.timeout">
                                <el-radio :label="1">存在</el-radio>
                                <el-radio :label="2">不存在</el-radio>
                            </el-radio-group>
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color required">过夜、老化保障措施</td>
                        <td class="w-25 m-color">
                        <td class="w-25 m-color required" v-if="projectDialogState.projectForm.timeout === 1">过夜、老化保障措施</td>
                        <td class="w-25 m-color" v-if="projectDialogState.projectForm.timeout === 1">
                          <el-form-item prop="timeoutManager">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">是否在封闭条件下</td>
                        <td class="w-25 m-color">
                          <el-form-item prop="closed">
                            <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed">
                                <el-radio :label="1">存在</el-radio>
                                <el-radio :label="2">不存在</el-radio>
                            </el-radio-group>
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color required">封闭条件保障措施</td>
                        <td class="w-25 m-color">
                        <td class="w-25 m-color required" v-if="projectDialogState.projectForm.closed === 1">封闭条件保障措施</td>
                        <td class="w-25 m-color" v-if="projectDialogState.projectForm.closed === 1">
                          <el-form-item prop="unclosedManager">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">实验场所防爆措施条件和设施情况</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="explosionProof">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">实验场所防火措施条件和设施情况</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="fireProof">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color required">实验场所防中毒措施条件和设施情况</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="poisonProof">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" />
                          </el-form-item>
                        </td>
                    </tr>
                    <select-danger ref="selectDangerRef" v-model:data="projectDialogState.projectForm.hazardousWasteList" v-model:disabled="projectDialogState.disabled"></select-danger>
                    <select-person ref="selectPersonRef" v-model:data="projectDialogState.projectForm.persons" v-model:disabled="projectDialogState.disabled"></select-person>
<!--                    <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>-->
<!--                    <tr>-->
<!--                        <td class="w-25 m-color required">有无预案</td>-->
<!--                        <td class="w-25 m-color required">预案名称</td>-->
<!--                        <td class="w-25 m-color required">是否演练</td>-->
<!--                        <td class="w-25 m-color required">演练情况</td>-->
<!--                    </tr>-->
<!--                    <tr>-->
<!--                        <td class="w-25 m-color">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />-->
<!--                        </td>-->
<!--                    </tr>-->
                    <select-emergency ref="selectEmergencyRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.emergencyList"></select-emergency>
                    <tr>
                        <td class="w-25 m-color required">安全管理制度</td>
                        <td class="w-75 m-color">
                        <el-form-item prop="safeManagerMethod">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" />
                        </td>
                    </tr>
                    <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>
                    <tr>
                        <td class="w-25 m-color required">有无预案</td>
                        <td class="w-25 m-color required">预案名称</td>
                        <td class="w-25 m-color required">是否演练</td>
                        <td class="w-25 m-color required">演练情况</td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />
                        </td>
                        <td class="w-25 m-color">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />
                        </td>
                        <td class="w-25 m-color">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />
                        </td>
                        <td class="w-25 m-color">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />
                        </el-form-item>
                        </td>
                    </tr>
                    <tr class="m-color b-font" style="  text-align: center">其他信息</tr>
                    <tr>
                        <td class="w-25 m-color required">实验场所是否需要分区隔断</td>
                        <td class="w-75 m-color">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />
                          <el-form-item prop="partitionCondition">
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />-->
                          <el-radio-group :disabled="projectDialogState.disabled"  v-model="projectDialogState.projectForm.partitionCondition">
                            <el-radio :label="0">是</el-radio>
                            <el-radio :label="1">否</el-radio>
                          </el-radio-group>
                          </el-form-item>
                        </td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color">其它基础信息(详细描述)</td>
                        <td class="w-75 m-color">
                          <el-form-item>
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.note" placeholder="请输入" />
                          </el-form-item>
                        </td>
                    </tr>
                </table>
@@ -227,21 +279,23 @@
import {projectApi} from "/@/api/experiment/project";
import {personApi} from "/@/api/basic/person";
import {userApi} from "/@/api/systemManage/user";
import SelectRoom from "/@/views/experiment/project/components/selectRoom.vue";
import {useUserInfo} from "/@/stores/userInfo";
import {storeToRefs} from "pinia";
import {checkChineseName, verifyPhone} from "/@/utils/toolsValidate";
const SelectEquipment = defineAsyncComponent(() => import('../../project/components/selectEquipment.vue'))
const SelectMaterial = defineAsyncComponent(() => import('../../project/components/selectMaterial.vue'))
const SelectDanger = defineAsyncComponent(() => import('../../project/components/selectDanger.vue'))
const SelectEmergency = defineAsyncComponent(() => import('../../project/components/selectEmergency.vue'))
const SelectPerson = defineAsyncComponent(() => import('../../project/components/selectPerson.vue'))
const SelectRoom = defineAsyncComponent(() => import('../../project/components/selectRoom.vue'))
const ProjectFormRef = ref()
const selectPersonRef = ref()
const selectEquipmentRef = ref()
const selectRoomRef = ref()
const selectMaterialRef = ref()
const selectDangerRef = ref()
const selectEmergencyRef = ref()
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
@@ -272,13 +326,9 @@
        explosionProof: "",
        fireProof: "",
        poisonProof: "",
        hazardousWaste: null,
        safeManagerMethod: "",
        emergencyPlan: "",
        emergencyDrill: "",
        emergencyPlanName: "",
        emergencyDrillStatus: "",
        partitionCondition: "",
        emergencyList: [],
        partitionCondition: null,
        note: "",
        createExperimentTime: '',
        startTime: '',
@@ -293,10 +343,32 @@
        ]
    },
    projectFormRules: {
        experimentName: [{ required: true, message: '请填写设备编号', trigger: 'blur' }],
        deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
        devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }],
        deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }]
      experimentName: [{ required: true, message: '', trigger: 'blur' }],
      experimentType: [{ required: true, message: '', trigger: 'blur' }],
      liabilityUserId: [{ required: true, message: '', trigger: 'blur' }],
      liabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }],
      safeLiabilityUser: [{ required: true, message: '', trigger: 'blur' }],
      safeLiabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }],
      sisStatus: [{ required: true, message: '', trigger: 'blur' }],
      safeInformationSystem: [{ required: true, message: '', trigger: 'blur' }],
      dep: [{ required: true, message: '', trigger: 'blur' }],
      experimentStep: [{ required: true, message: '', trigger: 'blur' }],
      experimentMethod: [{ required: true, message: '', trigger: 'blur' }],
      process: [{ required: true, message: '', trigger: 'blur' }],
      keyProcess: [{ required: true, message: '', trigger: 'blur' }],
      measure: [{ required: true, message: '', trigger: 'blur' }],
      timeout: [{ required: true, message: '', trigger: 'blur' }],
      timeoutManager: [{ required: true, message: '', trigger: 'blur' }],
      closed: [{ required: true, message: '', trigger: 'blur' }],
      unclosedManager: [{ required: true, message: '', trigger: 'blur' }],
      explosionProof: [{ required: true, message: '', trigger: 'blur' }],
      fireProof: [{ required: true, message: '', trigger: 'blur' }],
      poisonProof: [{ required: true, message: '', trigger: 'blur' }],
      safeManagerMethod: [{ required: true, message: '', trigger: 'blur' }],
      emergencyList: [{ required: true, message: '', trigger: 'blur' }],
      partitionCondition: [{ required: true, message: '', trigger: 'blur' }],
      createExperimentTime: [{ required: true, message: '', trigger: 'blur' }],
      startTime: [{ required: true, message: '', trigger: 'blur' }]
    },
    allPersonList: [],
    allRoomList: [],
@@ -335,25 +407,17 @@
            explosionProof: "",
            fireProof: "",
            poisonProof: "",
            hazardousWaste: 1,
            safeManagerMethod: "",
            emergencyPlan: "",
            emergencyDrill: "",
            emergencyPlanName: "",
            emergencyDrillStatus: "",
            partitionCondition: "",
            emergencyList: [],
            partitionCondition: null,
            note: "",
            createExperimentTime: '',
            startTime: '',
            persons: [
            ],
            persons: [],
            siteList: [],
            deviceList: [
            ],
            stuffList: [
            ],
            hazardousWasteList: [
            ]
            deviceList: [],
            stuffList: [],
            hazardousWasteList: []
        };
    }else if(title === '整改'){
      projectDialogState.title = '整改';
@@ -397,6 +461,30 @@
const onSubmitProject = () => {
    ProjectFormRef.value.validate(async(valid: boolean) => {
        if(valid){
            if(projectDialogState.projectForm.timeout == 2){
              projectDialogState.projectForm.timeoutManager = ''
            }else{
              if(projectDialogState.projectForm.timeoutManager == ''){
                ElMessage({
                  type: 'warning',
                  message: '请填写过夜、老化保障措施',
                  duration: 1000
                });
                return
              }
            }
            if(projectDialogState.projectForm.closed == 2){
              projectDialogState.projectForm.unclosedManager = ""
            }else{
              if(projectDialogState.projectForm.unclosedManager == ''){
                ElMessage({
                  type: 'warning',
                  message: '请填写封闭条件保障措施',
                  duration: 1000
                });
                return
              }
            }
            if(projectDialogState.title === '新增'){
                if(checkChineseName(projectDialogState.projectForm.safeLiabilityUser) == false){
                  ElMessage({
@@ -438,14 +526,6 @@
                  });
                  return
                }
                if(projectDialogState.projectForm.hazardousWasteList.length === 0){
                  ElMessage({
                    type: 'warning',
                    message: '请选择添加危废数据',
                    duration: 1000
                  });
                  return
                }
                if(projectDialogState.projectForm.persons.length === 0){
                  ElMessage({
                    type: 'warning',
@@ -454,6 +534,7 @@
                  });
                  return
                }
                projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList
                projectDialogState.projectForm.persons = selectPersonRef.value.dataList
                projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList
                projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId}))
@@ -646,7 +727,15 @@
.m-color {
    color: #0c4995;
}
::v-deep(.el-form-item){
  height: 100%;
  display: flex;
  justify-content: center;
  .el-form-item__content{
    display: flex;
    justify-content: center;
  }
}
.roomSelect{
  ::v-deep(.el-popper){
    .el-select-dropdown__item{
src/views/experiment/developing/index.vue
@@ -82,6 +82,7 @@
                        <el-table-column label="操作" width="250" fixed="right">
                            <template #default="scope">
                                <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button>
                                <el-button size="small" text type="primary" :icon="View" v-if="scope.row.stage == 4" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button>
                                <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button>
                                <el-button size="small" :disabled="(scope.row.status == 2 && scope.row.stage == 1) ? false : true" text type="warning" :icon="RefreshLeft" @click="cancelAccess( scope.row)">撤销评估</el-button>
                                <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', scope.row)">整改</el-button>
@@ -97,6 +98,7 @@
        <develop-dialog ref="DevelopDialogRef" @refresh="getdevelopData"></develop-dialog>
<!--        <apply-start ref="ApplyStartRef"></apply-start>-->
        <test ref="ApplyStartRef" @refresh="getdevelopData"></test>
        <report-dialog ref="ReportDialogRef"></report-dialog>
    </div>
</template>
@@ -106,13 +108,13 @@
import {ElMessage, ElMessageBox} from "element-plus";
import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue';
import {roomApi} from "/@/api/basic/room";
const ReportDialog = defineAsyncComponent(() => import('../../analyse/assessApply/components/reportDialog.vue'));
const DevelopDialog = defineAsyncComponent(() => import('./components/developDialog.vue'));
const Test = defineAsyncComponent(() => import('./components/applyDialog.vue'))
const DevelopDialogRef = ref();
const ApplyStartRef = ref();
const DevelopDialogRef = ref()
const ApplyStartRef = ref()
const ReportDialogRef = ref()
const developState = reactive<ProjectStateType>({
    developData: [],
    searchQuery: {
@@ -152,6 +154,10 @@
    DevelopDialogRef.value.showDevelopDialog(title, value, developState.allRoomList);
};
const openReportDialog = (title: string,value: ProjectType) =>{
  ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList);
}
const applyAccess = (val: ProjectType) => {
    ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentName}”,是否继续?`, '提示', {
        confirmButtonText: '确认',
src/views/experiment/project/components/applyDialog.vue
@@ -17,7 +17,7 @@
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="applyStartDialogState.applyStartForm.sisStatus==1">
                        <el-form-item label="安全信息化系统" prop="safeInformationSystem">
                        <el-form-item label="安全信息化系统名称" prop="safeInformationSystem">
                            <el-input v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length">
                            </el-input>
                        </el-form-item>
@@ -42,7 +42,7 @@
const applyStartFormRef = ref()
const applyStartDialogState = reactive<ApplyStartDialogType>({
    title: '申请开展',
    title: '转为已开展',
    applyStartDialogVisible: false,
    applyStartForm: {
        id: null,
src/views/experiment/project/components/projectDialog.vue
@@ -133,8 +133,8 @@
                            </el-radio-group>
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color required">过夜、老化保障措施</td>
                        <td class="w-25 m-color">
                        <td class="w-25 m-color required" v-if="projectDialogState.projectForm.timeout === 1">过夜、老化保障措施</td>
                        <td class="w-25 m-color" v-if="projectDialogState.projectForm.timeout === 1">
                          <el-form-item prop="timeoutManager">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" />
                          </el-form-item>
@@ -150,8 +150,8 @@
                            </el-radio-group>
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color required">封闭条件保障措施</td>
                        <td class="w-25 m-color">
                        <td class="w-25 m-color required" v-if="projectDialogState.projectForm.closed === 1">封闭条件保障措施</td>
                        <td class="w-25 m-color" v-if="projectDialogState.projectForm.closed === 1">
                          <el-form-item prop="unclosedManager">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" />
                          </el-form-item>
@@ -200,6 +200,36 @@
<!--                            <el-input v-model="projectDialogState.projectForm.systemName" placeholder="请输入" />-->
<!--                        </td>-->
<!--                    </tr>-->
<!--                    <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>-->
<!--                    <tr>-->
<!--                        <td class="w-25 m-color required">有无预案</td>-->
<!--                        <td class="w-25 m-color required">预案名称</td>-->
<!--                        <td class="w-25 m-color required">是否演练</td>-->
<!--                        <td class="w-25 m-color required">演练情况</td>-->
<!--                    </tr>-->
<!--                    <tr>-->
<!--                        <td class="w-25 m-color">-->
<!--                          <el-form-item prop="emergencyPlan">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />-->
<!--                          </el-form-item>-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                          <el-form-item prop="emergencyPlanName">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />-->
<!--                          </el-form-item>-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                          <el-form-item prop="emergencyDrillStatus">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />-->
<!--                          </el-form-item>-->
<!--                        </td>-->
<!--                        <td class="w-25 m-color">-->
<!--                          <el-form-item prop="emergencyDrill">-->
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />-->
<!--                          </el-form-item>-->
<!--                        </td>-->
<!--                    </tr>-->
                    <select-emergency ref="selectEmergencyRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.emergencyList"></select-emergency>
                    <tr>
                        <td class="w-25 m-color required">安全管理制度</td>
                        <td class="w-75 m-color">
@@ -208,41 +238,16 @@
                          </el-form-item>
                        </td>
                    </tr>
                    <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>
                    <tr>
                        <td class="w-25 m-color required">有无预案</td>
                        <td class="w-25 m-color required">预案名称</td>
                        <td class="w-25 m-color required">是否演练</td>
                        <td class="w-25 m-color required">演练情况</td>
                    </tr>
                    <tr>
                        <td class="w-25 m-color">
                          <el-form-item prop="emergencyPlan">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color">
                          <el-form-item prop="emergencyPlanName">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color">
                          <el-form-item prop="emergencyDrillStatus">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />
                          </el-form-item>
                        </td>
                        <td class="w-25 m-color">
                          <el-form-item prop="emergencyDrill">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />
                          </el-form-item>
                        </td>
                    </tr>
                    <tr class="m-color b-font" style="  text-align: center">其他信息</tr>
                    <tr>
                        <td class="w-25 m-color required">实验场所是否需要分区隔断</td>
                        <td class="w-75 m-color">
                          <el-form-item prop="partitionCondition">
                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />
<!--                            <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />-->
                            <el-radio-group :disabled="projectDialogState.disabled"  v-model="projectDialogState.projectForm.partitionCondition">
                              <el-radio :label="0">是</el-radio>
                              <el-radio :label="1">否</el-radio>
                            </el-radio-group>
                          </el-form-item>
                        </td>
                    </tr>
@@ -278,6 +283,7 @@
const SelectEquipment = defineAsyncComponent(() => import('./selectEquipment.vue'))
const SelectMaterial = defineAsyncComponent(() => import('./selectMaterial.vue'))
const SelectEmergency = defineAsyncComponent(() => import('./selectEmergency.vue'))
const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue'))
const SelectPerson = defineAsyncComponent(() => import('./selectPerson.vue'))
const SelectRoom = defineAsyncComponent(() => import('./selectRoom.vue'))
@@ -286,6 +292,7 @@
const selectEquipmentRef = ref()
const selectRoomRef = ref()
const selectMaterialRef = ref()
const selectEmergencyRef = ref()
const selectDangerRef = ref()
const userInfo = useUserInfo();
@@ -316,24 +323,16 @@
        explosionProof: "",
        fireProof: "",
        poisonProof: "",
        hazardousWaste: null,
        safeManagerMethod: "",
        emergencyPlan: "",
        emergencyDrill: "",
        emergencyPlanName: "",
        emergencyDrillStatus: "",
        partitionCondition: "",
        emergencyList: [],
        partitionCondition: null,
        note: "",
        createExperimentTime: '',
        persons: [
        ],
        persons: [],
        siteList: [],
        deviceList: [
        ],
        stuffList: [
        ],
        hazardousWasteList: [
        ]
        deviceList: [],
        stuffList: [],
        hazardousWasteList: []
    },
    projectFormRules: {
      experimentName: [{ required: true, message: '', trigger: 'blur' }],
@@ -355,12 +354,8 @@
      explosionProof: [{ required: true, message: '', trigger: 'blur' }],
      fireProof: [{ required: true, message: '', trigger: 'blur' }],
      poisonProof: [{ required: true, message: '', trigger: 'blur' }],
      hazardousWaste: [{ required: true, message: '', trigger: 'blur' }],
      safeManagerMethod: [{ required: true, message: '', trigger: 'blur' }],
      emergencyPlan: [{ required: true, message: '', trigger: 'blur' }],
      emergencyDrill: [{ required: true, message: '', trigger: 'blur' }],
      emergencyPlanName: [{ required: true, message: '', trigger: 'blur' }],
      emergencyDrillStatus: [{ required: true, message: '', trigger: 'blur' }],
      emergencyList: [{ required: true, message: '', trigger: 'blur' }],
      partitionCondition: [{ required: true, message: '', trigger: 'blur' }],
      createExperimentTime: [{ required: true, message: '', trigger: 'blur' }]
    },
@@ -409,13 +404,9 @@
            explosionProof: "",
            fireProof: "",
            poisonProof: "",
            hazardousWaste: 1,
            safeManagerMethod: "",
            emergencyPlan: "",
            emergencyDrill: "",
            emergencyPlanName: "",
            emergencyDrillStatus: "",
            partitionCondition: "",
            emergencyList: [],
            partitionCondition: null,
            note: "",
            createExperimentTime: '',
            persons: [],
@@ -450,6 +441,30 @@
const onSubmitProject = () => {
    ProjectFormRef.value.validate(async(valid: boolean) => {
        if(valid){
            if(projectDialogState.projectForm.timeout === 2){
              projectDialogState.projectForm.timeoutManager = ''
            }else{
              if(projectDialogState.projectForm.timeoutManager == ''){
                ElMessage({
                  type: 'warning',
                  message: '请填写过夜、老化保障措施',
                  duration: 1000
                });
                return
              }
            }
            if(projectDialogState.projectForm.closed === 2){
              projectDialogState.projectForm.unclosedManager = ""
            }else{
              if(projectDialogState.projectForm.unclosedManager == ''){
                ElMessage({
                  type: 'warning',
                  message: '请填写封闭条件保障措施',
                  duration: 1000
                });
                return
              }
            }
            if(projectDialogState.title === '新增'){
                if(checkChineseName(projectDialogState.projectForm.safeLiabilityUser) == false){
                  ElMessage({
@@ -491,14 +506,6 @@
                  });
                  return
                }
                if(projectDialogState.projectForm.hazardousWasteList.length === 0){
                  ElMessage({
                    type: 'warning',
                    message: '请选择添加危废数据',
                    duration: 1000
                  });
                  return
                }
                if(projectDialogState.projectForm.persons.length === 0){
                  ElMessage({
                    type: 'warning',
@@ -507,6 +514,7 @@
                  });
                  return
                }
                projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList
                projectDialogState.projectForm.persons = selectPersonRef.value.dataList
                projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList
              // projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId}))
@@ -529,8 +537,6 @@
                    });
                }
            }else{
              console.log(selectRoomRef.value.dataList,'selectRoomRef.value.dataList',selectMaterialRef.value.dataList)
                // projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId}))
                projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(obj => ({siteId:obj.siteId}))
                projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList.map(obj => ({classify:obj.classify,wasteStorage:obj.wasteStorage,handAmount:obj.handAmount}))
                let res = await projectApi().modProject(projectDialogState.projectForm)
src/views/experiment/project/components/selectDanger.vue
@@ -2,9 +2,9 @@
    <tr class="m-color b-font" style="text-align: center">危废情况</tr>
    <tr>
        <td class="w-20 m-color">序号</td>
        <td class="w-20 m-color required">废弃物分类</td>
        <td class="w-20 m-color required">存储方式</td>
        <td class="w-20 m-color required">预估处理量</td>
        <td class="w-20 m-color">废弃物分类</td>
        <td class="w-20 m-color">存储方式</td>
        <td class="w-20 m-color">预估处理量</td>
        <td class="w-20 m-color">操作</td>
    </tr>
    <tr v-for="(item,index) in selectDangerState.wasteList" :key="index">
src/views/experiment/project/components/selectEmergency.vue
对比新文件
@@ -0,0 +1,181 @@
<template>
    <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>
    <tr>
      <td class="w-20 m-color">预案名称</td>
      <td class="w-20 m-color">是否演练</td>
      <td class="w-20 m-color">演练情况</td>
      <td class="w-20 m-color">是否备案</td>
      <td class="w-20 m-color">操作</td>
    </tr>
    <tr v-for="(item,index) in selectEmergencyState.emergencyList" :key="index">
        <td class="w-20">
            <el-input :disabled="selectEmergencyState.disabled" v-model="item.emergencyPlanName" />
        </td>
        <td class="w-20">
            <el-radio-group :disabled="selectEmergencyState.disabled"  v-model="item.emergencyDrillStatus">
              <el-radio label="是">是</el-radio>
              <el-radio label="否">否</el-radio>
            </el-radio-group>
        </td>
        <td class="w-20">
            <el-input :disabled="selectEmergencyState.disabled" v-model="item.emergencyDrill" placeholder="未演练则填“无”"/>
        </td>
        <td class="w-20">
            <el-radio-group :disabled="selectEmergencyState.disabled"  v-model="item.emergencyPlan">
              <el-radio label="是">是</el-radio>
              <el-radio label="否">否</el-radio>
            </el-radio-group>
        </td>
        <td class="w-20">
          <el-button :disabled="selectEmergencyState.disabled" type="danger" @click="deleteEmergencyItem(index)">删除</el-button>
        </td>
    </tr>
    <tr style="text-align: center">
        <el-button :disabled="selectEmergencyState.disabled" type="primary" shape="round" @click="addEmergencyItem()">
            添加一条
        </el-button>
    </tr>
</template>
<script setup lang="ts">
import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue";
import {ElMessage} from "element-plus";
let props = defineProps({
    disabled: Boolean,
    data: Array<emergencyListType>
});
const selectEmergencyState = reactive<SelectEmergencyType>({
    disabled: false,
    emergencyList: []
})
const addEmergencyItem = () => {
    selectEmergencyState.emergencyList.push({ emergencyPlanName: '', emergencyDrillStatus: '', emergencyDrill: '', emergencyPlan: '' });
};
watchEffect(() => {
    selectEmergencyState.emergencyList = props.data as Array<emergencyListType>
    selectEmergencyState.disabled = props.disabled
});
const deleteEmergencyItem = (index: number) => {
    selectEmergencyState.emergencyList.splice(index,1);
};
const formatList = (formatList: Array<emergencyListType>) => {
    selectEmergencyState.emergencyList = formatList
};
defineExpose({
    dataList: selectEmergencyState.emergencyList,
    formatList
});
onMounted(() => {
});
</script>
<style scoped lang="scss">
.site-layout-background {
    background: #fff;
}
.report-table {
    width: 100%;
    border-collapse: collapse;
    border: 1px solid #337ecc;
    margin: 20px 0;
    th {
        padding: 10px 0;
        border: 1px solid #337ecc;
        border-left: none;
    }
    tr {
        width: 100%;
        height: 44px;
        line-height: 42px;
        border-bottom: 1px solid #ccc;
        &:last-of-type {
            border-bottom: none;
        }
        td {
            border-right: 1px solid #ccc;
            display: inline-block;
            height: 44px;
            vertical-align: middle;
            text-align: center;
            line-height: 42px;
            &:last-of-type {
                border-right: none;
            }
            &.required {
              &::before {
                content: "*";
                display: inline-block;
                color: red;
              }
            }
            &.w-14 {
                width: calc((100/7)/100 * 100%);
            }
            &.w-16 {
                width: calc((100/6)/100 * 100%);
            }
            &.w-18 {
                width: 16.59%;
            }
            &.w-20 {
                width: 20%;
            }
            &.w-25 {
                width: 25%;
            }
            &.w-50 {
                width: 50%;
            }
            &.w-75 {
                width: 75%;
            }
            .ant-input {
                height: 100%;
                border: none;
                background: #f5f7fa;
            }
            .ant-picker {
                width: 100%;
                height: 100%;
            }
            :deep(.el-input__wrapper ){
              box-shadow: none;
            }
        }
    }
    .b-font {
        font-size: 16px;
        font-weight: bolder;
    }
}
.m-color {
    color: #0c4995;
}
</style>
src/views/experiment/project/index.ts
@@ -54,13 +54,9 @@
        explosionProof: string,
        fireProof: string,
        poisonProof: string,
        hazardousWaste: null | number,
        safeManagerMethod: string,
        emergencyPlan: string,
        emergencyDrill: string,
        emergencyPlanName: string,
        emergencyDrillStatus: string,
        partitionCondition: string,
        emergencyList: Array<emergencyListType>,
        partitionCondition: null | number,
        note: string,
        startTime?: string,
        createExperimentTime: string
@@ -152,6 +148,18 @@
    stuffUnitList: Array<stuffType>
}
declare interface SelectEmergencyType {
    disabled: boolean
    emergencyList: Array<emergencyListType>
}
declare interface emergencyListType {
    emergencyPlanName: string,
    emergencyDrillStatus: string,
    emergencyDrill: string,
    emergencyPlan: string
}
declare interface SelectRoomType {
    disabled: boolean
    roomList: Array<roomListType>,
@@ -198,7 +206,6 @@
    stuffStorage: string,
    stuffUnit: string
}
declare interface ApplyStartDialogType {
    title: string,
src/views/experiment/project/index.vue
@@ -82,9 +82,11 @@
                        <el-table-column label="操作" width="250" fixed="right">
                            <template #default="scope">
                                <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button>
                                <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">申请开展</el-button>
                                <el-button size="small" text type="primary" :icon="View" v-if="scope.row.stage == 4" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button>
                                <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">转为已开展</el-button>
                                <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button>
                                <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', scope.row)">整改</el-button>
                                <el-button size="small" text type="danger" :icon="Delete" @click="onDelProject(scope.row)">删除</el-button>
                                <el-button size="small" text type="danger" :icon="Delete" :disabled="scope.row.stage !== 1" @click="onDelProject(scope.row)">删除</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
@@ -97,6 +99,7 @@
        <project-dialog ref="ProjectDialogRef" @refresh="getProjectData"></project-dialog>
<!--        <apply-start ref="ApplyStartRef"></apply-start>-->
        <test ref="ApplyStartRef" @refresh="getProjectData"></test>
        <report-dialog ref="ReportDialogRef"></report-dialog>
    </div>
</template>
@@ -106,13 +109,12 @@
import {ElMessage, ElMessageBox} from "element-plus";
import { View,Edit, Plus, Delete } from '@element-plus/icons-vue';
import {roomApi} from "/@/api/basic/room";
const ReportDialog = defineAsyncComponent(() => import('../../analyse/assessApply/components/reportDialog.vue'));
const ProjectDialog = defineAsyncComponent(() => import('./components/projectDialog.vue'));
const Test = defineAsyncComponent(() => import('./components/applyDialog.vue'))
const ProjectDialogRef = ref();
const ApplyStartRef = ref();
const ProjectDialogRef = ref()
const ApplyStartRef = ref()
const ReportDialogRef = ref()
const projectState = reactive<ProjectStateType>({
    projectData: [],
    searchQuery: {
@@ -152,10 +154,40 @@
    ProjectDialogRef.value.showProjectDialog(title, value, projectState.allRoomList);
};
const openReportDialog = (title: string,value: ProjectType) =>{
  ReportDialogRef.value.showReportDialog(title, value, projectState.allRoomList);
}
const applyStart = (title: string, value: ProjectType) => {
    ApplyStartRef.value.showApplyStartDialog(value);
};
const applyAccess = (val: ProjectType) => {
  ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentName}”,是否继续?`, '提示', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning'
  })
      .then(async () => {
        let res = await projectApi().accessProject([val.id]);
        if (res.data.code === 100) {
          ElMessage({
            type: 'success',
            duration: 2000,
            message: '申请成功'
          });
          await getProjectData();
        } else {
          ElMessage({
            type: 'warning',
            message: res.data.msg
          });
        }
      })
      .catch((error) => {
      });
}
const onDelProject = (val: ProjectType) => {
    ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentName}”,是否继续?`, '提示', {
        confirmButtonText: '确认',
src/views/loginPage/loginPage.vue
@@ -2,7 +2,7 @@
    <div class="login-container">
        <div class="loginContent">
            <div class="loginPanel">
                <div class="welcc">科学研究实验风险评估系统</div>
                <div class="welcc">科学研究实验安全风险评估系统</div>
                <div class="loginGroup">
                  <div class="loginPic">
                    <img src="../../assets/loginPage/login-pic.png">
@@ -168,6 +168,9 @@
              color: #485BD4;
              letter-spacing: 6px;
              white-space: nowrap;
              position: relative;
              z-index: 9999;
              text-shadow: 0 3px 5px rgba(72,91,212,.4);
            }
            :deep(.loginGroup){
src/views/system/role/index.vue
@@ -9,12 +9,12 @@
<!--                    </el-icon>-->
<!--                    查询-->
<!--                </el-button>-->
                <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')">
                    <el-icon>
                        <ele-FolderAdd />
                    </el-icon>
                    新增角色
                </el-button>
<!--                <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')">-->
<!--                    <el-icon>-->
<!--                        <ele-FolderAdd />-->
<!--                    </el-icon>-->
<!--                    新增角色-->
<!--                </el-button>-->
            </div>
            <el-table :data="tableData.data" style="width: 100%">
                <el-table-column type="index" label="序号" width="60" />