From de5e674a5655cd5c8d5457d1be8182519625d265 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期三, 12 三月 2025 15:35:47 +0800
Subject: [PATCH] 修改

---
 src/views/analyse/plan/components/planDialog.vue |  468 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 256 insertions(+), 212 deletions(-)

diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue
index aab3fce..1934288 100644
--- a/src/views/analyse/plan/components/planDialog.vue
+++ b/src/views/analyse/plan/components/planDialog.vue
@@ -1,80 +1,109 @@
 <template>
-    <div class="system-menu-dialog-container">
-        <el-dialog :title="planDialogState.title" v-model="planDialogState.planDialogVisible" width="600px">
-            <el-form ref="planFormRef" :rules="planDialogState.planFormRules" :model="planDialogState.planForm" size="default" label-width="120px">
-                <el-row :gutter="35">
-                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="风险分析单元" prop="riskUnitId">
-                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.riskUnitId" style="width:100%" placeholder="风险分析单元" clearable>
-                                <el-option v-for="item in planDialogState.riskUnitList" :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="评估计划名称" prop="assessPlanName">
-                            <el-input :disabled="planDialogState.disabled" v-model="planDialogState.planForm.assessPlanName" placeholder="评估计划名称" clearable></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="assessTime">
-                        <el-date-picker
-                            :disabled="planDialogState.disabled"
-                            type="datetimerange"
-                            v-model="planDialogState.planForm.assessTime"
-                            start-placeholder="开始时间"
-                            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 valueSelect">
-                        <el-form-item label="辨识专家" prop="identificationUserId">
-                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationUserId" style="width:100%" :teleported="false" placeholder="辨识专家" clearable>
-                                <el-option v-for="item in planDialogState.bsExperts" :key="item.id" :label="item.realName" :value="item.id">
-                                  <div class="valueTable">
-                                    <div><div>姓名:</div><span>{{item.realName}}</span></div>
-                                    <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div>
-                                  </div>
-                                </el-option>
-                            </el-select>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 valueSelect">
-                        <el-form-item label="评价专家" prop="evaluateUserId">
-                            <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.evaluateUserId" style="width:100%" :teleported="false" placeholder="评价专家" clearable>
-                                <el-option v-for="item in planDialogState.pjExperts" :key="item.id" :label="item.realName" :value="item.id">
-                                  <div class="valueTable">
-                                    <div><div>姓名:</div><span>{{item.realName}}</span></div>
-                                    <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div>
-                                  </div>
-                                </el-option>
-                            </el-select>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-form>
-            <template #footer>
+  <div class="system-menu-dialog-container">
+    <el-dialog :title="planDialogState.title" v-model="planDialogState.planDialogVisible" width="600px">
+      <el-form ref="planFormRef" :rules="planDialogState.planFormRules" :model="planDialogState.planForm" size="default"
+               label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="风险分析单元" prop="riskUnitId">
+              <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.riskUnitId"
+                         style="width:100%" placeholder="风险分析单元" clearable>
+                <el-option v-for="item in planDialogState.riskUnitList" :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="评估计划名称" prop="assessPlanName">
+              <el-input :disabled="planDialogState.disabled" v-model="planDialogState.planForm.assessPlanName"
+                        placeholder="评估计划名称" clearable></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="assessTime">
+              <el-date-picker
+                  :disabled="planDialogState.disabled"
+                  type="datetimerange"
+                  v-model="planDialogState.planForm.assessTime"
+                  start-placeholder="开始时间"
+                  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">
+            <el-form-item label="辨识类型" prop="identificationType">
+              <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationType"
+                         style="width:100%" placeholder="辨识类型" clearable>
+                <el-option v-for="item in planDialogState.typeList" :key="item.value" :label="item.name"
+                           :value="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 valueSelect">
+            <el-form-item label="辨识专家" prop="identificationUserInsert">
+              <el-select :disabled="planDialogState.disabled" multiple v-model="planDialogState.planForm.identificationUserInsert"
+                         style="width:100%" :teleported="false" placeholder="辨识专家" clearable>
+                <el-option v-for="item in planDialogState.bsExperts" :key="item.id" :label="item.realName"
+                           :value="item.id">
+                  <div class="valueTable">
+                    <div>
+                      <div>姓名:</div>
+                      <span>{{ item.realName }}</span></div>
+                    <div>
+                      <div>专业:</div>
+                      <span>{{ item.userIdentities?.map(i => i.userIdentity).join(',') }}</span></div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 valueSelect">
+            <el-form-item label="评价专家" prop="evaluateUserInsert">
+              <el-select :disabled="planDialogState.disabled" multiple v-model="planDialogState.planForm.evaluateUserInsert"
+                         style="width:100%" :teleported="false" placeholder="评价专家" clearable>
+                <el-option v-for="item in planDialogState.pjExperts" :key="item.id" :label="item.realName"
+                           :value="item.id">
+                  <div class="valueTable">
+                    <div>
+                      <div>姓名:</div>
+                      <span>{{ item.realName }}</span></div>
+                    <div>
+                      <div>专业:</div>
+                      <span>{{ item.userIdentities?.map(i => i.userIdentity).join(',') }}</span></div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
 				<span class="dialog-footer">
-					<el-button @click="planDialogState.planDialogVisible = !planDialogState.planDialogVisible" size="default">取 消</el-button>
-					<el-button v-if="!planDialogState.disabled" type="primary" @click="onSubmitPlan" size="default">确定</el-button>
+					<el-button @click="planDialogState.planDialogVisible = !planDialogState.planDialogVisible"
+                     size="default">取 消</el-button>
+					<el-button v-if="!planDialogState.disabled" type="primary" @click="onSubmitPlan"
+                     size="default">确定</el-button>
 				</span>
-            </template>
-        </el-dialog>
-    </div>
+      </template>
+    </el-dialog>
+  </div>
 </template>
 
 <script setup lang="ts">
-import { reactive, ref, getCurrentInstance } from "vue";
+import {reactive, ref, getCurrentInstance} from "vue";
 import {ElMessage} from "element-plus";
 import {planApi} from "/@/api/analyse/plan";
 import {isValidKey} from "/@/utils/methods";
@@ -82,174 +111,189 @@
 const planFormRef = ref()
 
 const planDialogState = reactive<PlanDialogType>({
-    title: '',
-    disabled: false,
-    planDialogVisible: false,
-    planForm: {
-        riskUnitId: null,
-        planUserId: null,
-        assessPlanName: '',
-        assessTime: [],
-        assessStartTime: '',
-        assessEndTime: '',
-        identificationUserId: null,
-        evaluateUserId: null,
-        riskType: 2
+  title: '',
+  disabled: false,
+  planDialogVisible: false,
+  planForm: {
+    riskUnitId: null,
+    planUserId: null,
+    assessPlanName: '',
+    assessTime: [],
+    identificationType: null,
+    assessStartTime: '',
+    assessEndTime: '',
+    identificationUserInsert: [],
+    evaluateUserInsert: [],
+    riskType: 2
+  },
+  planFormRules: {
+    riskUnitId: [{required: true, message: '请选择风险分析单元', trigger: 'change'}],
+    assessPlanName: [{required: true, message: '请填写评估计划名称', trigger: 'blur'}],
+    assessTime: [{required: true, message: '请选择评估时间', trigger: 'blur'}],
+    planUserId: [{required: true, message: '请选择计划制定人', trigger: 'change'}],
+    identificationType: [{required: true, message: '请选择辨识类型', trigger: 'change'}],
+    identificationUserInsert: [{required: true, message: '请选择辨识专家', trigger: 'change'}],
+    evaluateUserInsert: [{required: true, message: '请选择评价专家', trigger: 'change'}],
+  },
+  riskUnitList: [],
+  personList: [],
+  typeList: [
+    {
+      name: '线上专家',
+      value: 1
     },
-    planFormRules: {
-        riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }],
-        assessPlanName: [{ required: true, message: '请填写评估计划名称', trigger: 'blur' }],
-        assessTime: [{ required: true, message: '请选择评估时间', trigger: 'blur' }],
-        planUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }],
-        identificationUserId: [{ required: true, message: '请选择辨识专家', trigger: 'change' }],
-        evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }],
+    {
+      name: '现场专家',
+      value: 2
     },
-    riskUnitList: [],
-    personList: [],
-    bsExperts: [],
-    pjExperts: []
+    {
+      name: '线上+现场',
+      value: 3
+    }
+  ],
+  bsExperts: [],
+  pjExperts: []
 })
 
-const showPlanDialog = (title: string, value: PlanType, riskUnitList: RiskUnitType [], personList: SystemPersonType [],bsExperts:[],pjExperts:[]) => {
-    planDialogState.planDialogVisible = true;
-    planDialogState.riskUnitList = riskUnitList;
-    planDialogState.personList = personList;
-    planDialogState.bsExperts = bsExperts;
-    planDialogState.pjExperts = pjExperts;
-    planDialogState.disabled = false
-    setTimeout(() => {
-        planFormRef.value.clearValidate();
-    });
-    if(title === '新增'){
-        planDialogState.title = '新增';
-        planDialogState.planForm = {
-            riskUnitId: null,
-            planUserId: null,
-            assessPlanName: '',
-            assessTime: [],
-            assessStartTime: '',
-            assessEndTime: '',
-            identificationUserId: null,
-            evaluateUserId: null,
-            riskType: 2
-        };
-    }else if(title === '查看'){
-        planDialogState.title = '查看';
-        planDialogState.disabled = true
-        for(let i in planDialogState.planForm){
-            if(isValidKey(i, planDialogState.planForm)){
-                planDialogState.planForm[i] = value[i]
-            }
-        }
-        planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime]
-        console.log(value,planDialogState.planForm.assessTime,'time')
-    }else{
-        planDialogState.title = '编辑';
-        planDialogState.planForm.id = value.id
-        for(let i in planDialogState.planForm){
-            if(isValidKey(i, planDialogState.planForm)){
-                planDialogState.planForm[i] = value[i]
-            }
-        }
-        planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime]
+const showPlanDialog = (title: string, value: PlanType, riskUnitList: RiskUnitType [], personList: SystemPersonType [], bsExperts: [], pjExperts: []) => {
+  planDialogState.planDialogVisible = true;
+  planDialogState.riskUnitList = riskUnitList;
+  planDialogState.personList = personList;
+  planDialogState.bsExperts = bsExperts;
+  planDialogState.pjExperts = pjExperts;
+  planDialogState.disabled = false
+  setTimeout(() => {
+    planFormRef.value.clearValidate();
+  });
+  if (title === '新增') {
+    planDialogState.title = '新增';
+    planDialogState.planForm = {
+      riskUnitId: null,
+      planUserId: null,
+      assessPlanName: '',
+      assessTime: [],
+      identificationType: null,
+      assessStartTime: '',
+      assessEndTime: '',
+      identificationUserInsert: [],
+      evaluateUserInsert: [],
+      riskType: 2
     }
+  } else {
+    if(title === '查看'){
+      planDialogState.title = '查看'
+      planDialogState.disabled = true
+    }else{
+      planDialogState.title = '编辑'
+      planDialogState.planForm.id = value.id
+    }
+    for (let i in planDialogState.planForm) {
+      if (isValidKey(i, planDialogState.planForm)) {
+        planDialogState.planForm[i] = value[i]
+      }
+    }
+    planDialogState.planForm.identificationUserInsert = value.identityUsers?.map(i=>i.identificationUserId)
+    planDialogState.planForm.evaluateUserInsert = value.evaluateUsers?.map(i=>i.evaluateUserId)
+    planDialogState.planForm.assessTime = [value.assessStartTime, value.assessEndTime]
+  }
 };
 
 const formatTime = () => {
-    planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[0]
-    planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[1]
+  planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[0]
+  planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[1]
 };
 
 const onSubmitPlan = () => {
-    planFormRef.value.validate(async(valid: boolean) => {
-        if(valid){
-            formatTime()
-            delete planDialogState.planForm.assessTime
-            if(planDialogState.title === '新增'){
-                let res = await planApi().addPlan(planDialogState.planForm);
-                if(res.data.code === 100){
-                    emit('refresh')
-                    planDialogState.planDialogVisible = false;
-                    ElMessage({
-                        type: 'success',
-                        message: '新增成功'
-                    })
-                }else{
-                    ElMessage({
-                        type: 'warning',
-                        message: res.data.msg,
-                    });
-                }
-            }else{
-                let res = await planApi().modPlan(planDialogState.planForm)
-                if(res.data.code === 100){
-                    emit('refresh')
-                    planDialogState.planDialogVisible = false;
-                    ElMessage({
-                        type: 'success',
-                        message: '编辑成功'
-                    })
-                }else{
-                    ElMessage({
-                        type: 'warning',
-                        message: res.data.msg,
-                    });
-                }
-            }
-        }else{
-            ElMessage({
-                type: 'warning',
-                message: '请完善基本信息',
-            });
+  planFormRef.value.validate(async (valid: boolean) => {
+    if (valid) {
+      formatTime()
+      delete planDialogState.planForm.assessTime
+      if (planDialogState.title === '新增') {
+        let res = await planApi().addPlan(planDialogState.planForm);
+        if (res.data.code === 100) {
+          emit('refresh')
+          planDialogState.planDialogVisible = false;
+          ElMessage({
+            type: 'success',
+            message: '新增成功'
+          })
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg,
+          });
         }
-    })
+      } else {
+        let res = await planApi().modPlan(planDialogState.planForm)
+        if (res.data.code === 100) {
+          emit('refresh')
+          planDialogState.planDialogVisible = false;
+          ElMessage({
+            type: 'success',
+            message: '编辑成功'
+          })
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg,
+          });
+        }
+      }
+    } else {
+      ElMessage({
+        type: 'warning',
+        message: '请完善基本信息',
+      });
+    }
+  })
 }
 
 const emit = defineEmits(['refresh'])
 
 defineExpose({
-    showPlanDialog
+  showPlanDialog
 })
 </script>
 
 <style lang="scss" scoped>
-    ::v-deep(.pickTime){
-      position: absolute !important;
-      top: 0 !important;
-    }
-    .valueSelect{
-      ::v-deep(.el-popper){
-        .el-select-dropdown__item{
-          width: 100%;
-          height: auto;
-          white-space: normal;
-          word-break: break-all;
-          word-wrap: break-word;
-          overflow: auto;
-          padding: 10px 25px;
-          border-bottom: 1px solid #ccc;
+::v-deep(.pickTime) {
+  position: absolute !important;
+  top: 0 !important;
+}
 
-          .valueTable{
-            &>div{
-              line-height: 1.5;
-              margin-bottom: 6px;
-              display: flex;
-              align-items: center;
+.valueSelect {
+  ::v-deep(.el-popper) {
+    .el-select-dropdown__item {
+      width: 100%;
+      height: auto;
+      white-space: normal;
+      word-break: break-all;
+      word-wrap: break-word;
+      overflow: auto;
+      padding: 10px 25px;
+      border-bottom: 1px solid #ccc;
 
-              div{
-                color: #999;
-              }
+      .valueTable {
+        & > div {
+          line-height: 1.5;
+          margin-bottom: 6px;
+          display: flex;
+          align-items: center;
 
-              span{
-                font-weight: bolder;
-              }
+          div {
+            color: #999;
+          }
 
-              &:last-of-type{
-                margin-bottom: 0;
-              }
-            }
+          span {
+            font-weight: bolder;
+          }
+
+          &:last-of-type {
+            margin-bottom: 0;
           }
         }
       }
     }
+  }
+}
 </style>

--
Gitblit v1.9.2