From 229178209fb0445fc9176627e18b64cffd52bd09 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期五, 30 一月 2026 16:30:04 +0800
Subject: [PATCH] 11

---
 screen/src/view/hiddenDanger/index.vue |  426 +++++++++++++---------------------------------------
 1 files changed, 111 insertions(+), 315 deletions(-)

diff --git a/screen/src/view/hiddenDanger/index.vue b/screen/src/view/hiddenDanger/index.vue
index 165cfef..f8cf7de 100644
--- a/screen/src/view/hiddenDanger/index.vue
+++ b/screen/src/view/hiddenDanger/index.vue
@@ -4,16 +4,10 @@
     <div class="pt--35 px--20 pb--54">
       <!-- 返回 -->
       <div>
-        <img
-          @click="backFun"
-          src="../../assets/img/back.png"
-          class="w--22 h--20 shrink0 mr--13 cursor-pointer"
-        />
+        <img @click="backFun" src="../../assets/img/back.png" class="w--22 h--20 shrink0 mr--13 cursor-pointer" />
       </div>
       <!-- tab -->
-      <div
-        class="flex a-center absolute postion-center br--16 top--130 br--16 c-fff fs--14 bgcolor4 SSHR"
-      >
+      <div class="flex a-center absolute postion-center br--16 top--130 br--16 c-fff fs--14 bgcolor4 SSHR">
         <div @click="activeTab = 1" class="lh--32 px--20 cursor-pointer z-10">
           重大隐患
         </div>
@@ -30,228 +24,107 @@
       <!-- 搜索 -->
       <div class="flex a-center gap--16 mt--24 mb--20">
         <!-- 项目选择(非项目端才显示) -->
-        <div
-          v-if="!isProjectMode"
-          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox"
-        >
-          <el-select
-            filterable
-            v-model="searchForm.projectId"
-            placeholder="请选择项目"
-            class="flex1"
-            @change="handleSelectChange"
-          >
-            <el-option
-              v-for="item in projectList"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
+        <div v-if="!isProjectMode"
+          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox">
+          <el-select filterable v-model="searchForm.projectId" placeholder="请选择项目" class="flex1"
+            @change="handleSelectChange">
+            <el-option v-for="item in projectList" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
           <div class="flex a-center gap--5">
-            <i
-              @click.stop="clearSelect('projectId')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="searchForm.projectId"
-            />
-            <img
-              src="../../assets/img/down-circle@2x.png"
-              class="w--15 h--16 shrink0"
-            />
+            <i @click.stop="clearSelect('projectId')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="searchForm.projectId" />
+            <img src="../../assets/img/down-circle@2x.png" class="w--15 h--16 shrink0" />
           </div>
         </div>
 
         <!-- 整改状态 -->
-        <div
-          v-if="showReformedFilter"
-          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox"
-        >
-          <el-select
-            v-model="searchForm.state "
-            placeholder="请选择整改状态"
-            class="flex1"
-            @change="handleSelectChange"
-          >
-            <el-option
-              v-for="item in reformedOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
+        <div v-if="showReformedFilter"
+          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox">
+          <el-select v-model="searchForm.state" placeholder="请选择整改状态" class="flex1" @change="handleSelectChange">
+            <el-option v-for="item in reformedOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
           <div class="flex a-center gap--5">
-            <i
-              @click.stop="clearSelect('state')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="searchForm.state  !== null"
-            />
-            <img
-              src="../../assets/img/down-circle@2x.png"
-              class="w--15 h--16 shrink0"
-            />
+            <i @click.stop="clearSelect('state')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="searchForm.state !== null" />
+            <img src="../../assets/img/down-circle@2x.png" class="w--15 h--16 shrink0" />
           </div>
         </div>
 
         <!-- 隐患类型(仅重大隐患显示) -->
-        <div
-          v-if="showTypeFilter"
-          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox"
-        >
-          <el-select
-            v-model="searchForm.type"
-            placeholder="请选择隐患类型"
-            class="flex1"
-            @change="handleSelectChange"
-          >
+        <div v-if="showTypeFilter"
+          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox">
+          <el-select v-model="searchForm.type" placeholder="请选择隐患类型" class="flex1" @change="handleSelectChange">
             <el-option label="安全隐患" :value="1"></el-option>
             <el-option label="设备隐患" :value="2"></el-option>
           </el-select>
           <div class="flex a-center gap--5">
-            <i
-              @click.stop="clearSelect('type')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="searchForm.type !== null"
-            />
-            <img
-              src="../../assets/img/down-circle@2x.png"
-              class="w--15 h--16 shrink0"
-            />
+            <i @click.stop="clearSelect('type')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="searchForm.type !== null" />
+            <img src="../../assets/img/down-circle@2x.png" class="w--15 h--16 shrink0" />
           </div>
         </div>
 
         <!-- 隐患等级(安全和设备隐患显示) -->
-        <div
-          v-if="showLevelFilter"
-          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox"
-        >
-          <el-select
-            v-model="searchForm.level"
-            placeholder="请选择隐患等级"
-            class="flex1"
-            @change="handleSelectChange"
-          >
-            <el-option
-              v-for="item in levelOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
+        <div v-if="showLevelFilter"
+          class="flex a-center j-between pl--18 pr--15 h--40 relative w--300 bgcolor1 searchBox">
+          <el-select v-model="searchForm.level" placeholder="请选择隐患等级" class="flex1" @change="handleSelectChange">
+            <el-option v-for="item in levelOptions" :key="item.value" :label="item.label" :value="item.value">
             </el-option>
           </el-select>
           <div class="flex a-center gap--5">
-            <i
-              @click.stop="clearSelect('level')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="searchForm.level !== null"
-            />
-            <img
-              src="../../assets/img/down-circle@2x.png"
-              class="w--15 h--16 shrink0"
-            />
+            <i @click.stop="clearSelect('level')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="searchForm.level !== null" />
+            <img src="../../assets/img/down-circle@2x.png" class="w--15 h--16 shrink0" />
           </div>
         </div>
 
         <!-- 开始时间 -->
-        <div
-          class="flex a-center j-between px--20 w--300 h--40 relative bgcolor1 picker"
-        >
-          <el-date-picker
-            v-model="startDateTime"
-            ref="datetime1"
-            type="datetime"
-            placeholder=""
-          >
+        <div class="flex a-center j-between px--20 w--300 h--40 relative bgcolor1 picker">
+          <el-date-picker v-model="startDateTime" ref="datetime1" type="datetime" placeholder="">
           </el-date-picker>
-          <div
-            @click.stop="handleClick(1)"
-            class="absolute h100 flex a-center c-fff fs--14 SHS pointer-events-none"
-            style="left: 20px; right: 60px; z-index: 1"
-            v-if="startDateTxt"
-          >
+          <div @click.stop="handleClick(1)" class="absolute h100 flex a-center c-fff fs--14 SHS pointer-events-none"
+            style="left: 20px; right: 60px; z-index: 1" v-if="startDateTxt">
             {{ startDateTxt }}
           </div>
-          <div
-            @click.stop="handleClick(1)"
-            v-else
+          <div @click.stop="handleClick(1)" v-else
             class="absolute h100 flex a-center c-fff fs--14 SHSR pointer-events-none"
-            style="left: 20px; right: 60px; z-index: 1"
-          >
+            style="left: 20px; right: 60px; z-index: 1">
             开始时间
           </div>
-          <div
-            class="flex a-center gap--5"
-            style="position: relative; z-index: 2"
-          >
-            <i
-              @click.stop="clearDateTime('start')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="startDateTxt"
-            />
-            <img
-              @click="handleClick(1)"
-              src="../../assets/img/home/Shape@2x (6).png"
-              class="w--13 h--13 shrink0 cursor-pointer"
-            />
+          <div class="flex a-center gap--5" style="position: relative; z-index: 2">
+            <i @click.stop="clearDateTime('start')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="startDateTxt" />
+            <img @click="handleClick(1)" src="../../assets/img/home/Shape@2x (6).png"
+              class="w--13 h--13 shrink0 cursor-pointer" />
           </div>
         </div>
 
         <!-- 结束时间 -->
-        <div
-          class="flex a-center j-between px--20 w--300 h--40 relative bgcolor1 picker"
-        >
-          <el-date-picker
-            v-model="endDateTime"
-            ref="datetime2"
-            type="datetime"
-            placeholder=""
-          >
+        <div class="flex a-center j-between px--20 w--300 h--40 relative bgcolor1 picker">
+          <el-date-picker v-model="endDateTime" ref="datetime2" type="datetime" placeholder="">
           </el-date-picker>
-          <div
-            @click="handleClick(2)"
-            class="absolute h100 flex a-center c-fff fs--14 SHS pointer-events-none"
-            style="left: 20px; right: 60px; z-index: 1"
-            v-if="endDateTxt"
-          >
+          <div @click="handleClick(2)" class="absolute h100 flex a-center c-fff fs--14 SHS pointer-events-none"
+            style="left: 20px; right: 60px; z-index: 1" v-if="endDateTxt">
             {{ endDateTxt }}
           </div>
-          <div
-            @click="handleClick(2)"
-            v-else
-            class="absolute h100 flex a-center c-fff fs--14 SHSR pointer-events-none"
-            style="left: 20px; right: 60px; z-index: 1"
-          >
+          <div @click="handleClick(2)" v-else class="absolute h100 flex a-center c-fff fs--14 SHSR pointer-events-none"
+            style="left: 20px; right: 60px; z-index: 1">
             结束时间
           </div>
-          <div
-            class="flex a-center gap--5"
-            style="position: relative; z-index: 2"
-          >
-            <i
-              @click.stop="clearDateTime('end')"
-              class="el-icon-circle-close c-fff cursor-pointer"
-              v-show="endDateTxt"
-            />
-            <img
-              @click="handleClick(2)"
-              src="../../assets/img/home/Shape@2x (6).png"
-              class="w--13 h--13 shrink0 cursor-pointer"
-            />
+          <div class="flex a-center gap--5" style="position: relative; z-index: 2">
+            <i @click.stop="clearDateTime('end')" class="el-icon-circle-close c-fff cursor-pointer"
+              v-show="endDateTxt" />
+            <img @click="handleClick(2)" src="../../assets/img/home/Shape@2x (6).png"
+              class="w--13 h--13 shrink0 cursor-pointer" />
           </div>
         </div>
 
         <!-- 搜索内容 -->
-        <div
-          class="flex a-center j-between w--300 pl--20 h--40 relative bgcolor1 searchBox"
-        >
-          <el-input
-            v-model="searchForm.content"
-            placeholder="请输入搜索内容"
-            class="flex1"
-            clearable
-            @keyup.enter.native="handleSearch"
-          >
+        <div class="flex a-center j-between w--300 pl--20 h--40 relative bgcolor1 searchBox">
+          <el-input v-model="searchForm.content" placeholder="请输入搜索内容" class="flex1" clearable
+            @keyup.enter.native="handleSearch">
           </el-input>
           <div class="btn SHSR" @click="handleSearch">搜索</div>
         </div>
@@ -267,7 +140,7 @@
         <el-table-column label="问题备注" prop="remark" min-width="150" show-overflow-tooltip />
         <el-table-column label="隐患等级" min-width="120" prop="level">
           <template #default="{ row }">
-            <span>{{getLevelText(row.level) }}</span>
+            <span>{{ getLevelText(row.level) }}</span>
           </template>
         </el-table-column>
         <el-table-column v-if="activeTab == 1" label="隐患类型" min-width="120">
@@ -279,15 +152,10 @@
         </el-table-column>
         <el-table-column label="图片" min-width="100">
           <template #default="{ row }">
-            <div
-              class="btnColor cursor-pointer"
-              :class="
-                !row.userFiles || row.userFiles.length === 0
-                  ? 'disableColor'
-                  : ''
-              "
-              @click="handlePreviewImages(row.userFiles)"
-            >
+            <div class="btnColor cursor-pointer" :class="!row.userFiles || row.userFiles.length === 0
+              ? 'disableColor'
+              : ''
+              " @click="handlePreviewImages(row.userFiles)">
               {{ row.fileNum || 0 }}张
             </div>
           </template>
@@ -297,86 +165,46 @@
           <template #default="{ row }">
             <div class="flex a-center j-center">
               <div class="ripple">
-                <div
-                  class="ripple-wave wave-1"
-                  :class="{ bgColor33: row.state == 3 }"
-                ></div>
-                <div
-                  class="ripple-wave wave-2"
-                  :class="{ bgColor44: row.state == 3 }"
-                ></div>
-                <div
-                  class="ripple-wave wave-3"
-                  :class="{ bgColor55: row.state == 3 }"
-                ></div>
+                <div class="ripple-wave wave-1" :class="{ bgColor33: row.state == 3 }"></div>
+                <div class="ripple-wave wave-2" :class="{ bgColor44: row.state == 3 }"></div>
+                <div class="ripple-wave wave-3" :class="{ bgColor55: row.state == 3 }"></div>
               </div>
               <div class="ml--6 SHSR">{{ getReformedText(row.state) }}</div>
             </div>
           </template>
         </el-table-column>
-        <el-table-column
-          label="责任人"
-          prop="responsiblePerson"
-          min-width="120"
-        />
+        <el-table-column label="责任人" prop="responsiblePerson" min-width="120" />
         <el-table-column label="操作" min-width="200" fixed="right">
           <template #default="{ row }">
-            <el-button
-              @click="handleEditPeople(row)"
-              type="text"
-              class="btnColor"
-            >
+            <el-button @click="handleEditPeople(row)" type="text" class="btnColor">
               编辑责任人
             </el-button>
-            <el-button
-              type="text"
-              class="btnColor"
-              @click="handleViewDetail(row)"
-            >
+            <el-button type="text" class="btnColor" @click="handleViewDetail(row)">
               详情
             </el-button>
           </template>
         </el-table-column>
       </CustomTable>
-      <CustomPagination
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-        :current-page="pageNum"
-        :page-sizes="[10, 20, 50, 100]"
-        :page-size="pageSize"
-        :total="total"
-      />
+      <CustomPagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="total" />
     </div>
     <!-- 修改责任人 -->
     <CustomDialog title="责任人" :visible.sync="updatePeople" width="600px">
       <div class="pt--37 px--45 pb--64">
-        <input
-          v-model="peopleName"
-          placeholder="请输入"
-          class="w100 h--60 fs--14 SHSR py--23 px--21 bgcolor5 c-fff"
-        />
+        <input v-model="peopleName" placeholder="请输入" class="w100 h--60 fs--14 SHSR py--23 px--21 bgcolor5 c-fff" />
         <div class="flex a-center j-center gap--30 mt--59 SHSR fs--16 c-fff">
-          <div
-            @click="closeUpdatePeople"
-            class="w--150 lh--40 txt-center bgcolor2 br--4 cursor-pointer"
-          >
+          <div @click="closeUpdatePeople" class="w--150 lh--40 txt-center bgcolor2 br--4 cursor-pointer">
             取消
           </div>
-          <div
-            @click="saveUpdatePeople"
-            class="w--150 lh--40 txt-center bgcolor3 br--4 cursor-pointer"
-          >
+          <div @click="saveUpdatePeople" class="w--150 lh--40 txt-center bgcolor3 br--4 cursor-pointer">
             保存
           </div>
         </div>
       </div>
     </CustomDialog>
     <!-- 隐患详情 -->
-    <CustomDialog
-      :title="detailData ? detailData.projectName || '隐患详情' : '隐患详情'"
-      :visible.sync="detailVisible"
-      width="1420px"
-    >
+    <CustomDialog :title="detailData ? detailData.projectName || '隐患详情' : '隐患详情'" :visible.sync="detailVisible"
+      width="1420px">
       <el-tabs v-model="activeName" type="card" @tab-click="handleClickTab">
         <el-tab-pane label="基本信息" name="first">
           <div class="oa" style="height: 700px">
@@ -424,21 +252,13 @@
             </div>
             <div class="mt--30">
               <div class="SHSR fs--16 lh--16 mb--17 color1">规范条款:</div>
-              <div
-                class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6"
-              >
-                <template
-                  v-if="
-                    detailData &&
-                    detailData.specificTerms &&
-                    detailData.specificTerms.length > 0
-                  "
-                >
-                  <div
-                    v-for="(term, index) in detailData.specificTerms"
-                    :key="'term-' + index"
-                    class="mb--10"
-                  >
+              <div class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6">
+                <template v-if="
+                  detailData &&
+                  detailData.specificTerms &&
+                  detailData.specificTerms.length > 0
+                ">
+                  <div v-for="(term, index) in detailData.specificTerms" :key="'term-' + index" class="mb--10">
                     {{ index + 1 }}. {{ term }}
                   </div>
                 </template>
@@ -449,21 +269,13 @@
             </div>
             <div class="mt--30">
               <div class="SHSR fs--16 lh--16 mb--17 color1">建议措施:</div>
-              <div
-                class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6"
-              >
-                <template
-                  v-if="
-                    detailData &&
-                    detailData.suggestActions &&
-                    detailData.suggestActions.length > 0
-                  "
-                >
-                  <div
-                    v-for="(action, index) in detailData.suggestActions"
-                    :key="'action-' + index"
-                    class="mb--10"
-                  >
+              <div class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6">
+                <template v-if="
+                  detailData &&
+                  detailData.suggestActions &&
+                  detailData.suggestActions.length > 0
+                ">
+                  <div v-for="(action, index) in detailData.suggestActions" :key="'action-' + index" class="mb--10">
                     {{ index + 1 }}. {{ action }}
                   </div>
                 </template>
@@ -499,9 +311,7 @@
             </div>
             <div class="mt--30">
               <div class="SHSR fs--16 lh--16 mb--17 color1">备注:</div>
-              <div
-                class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6"
-              >
+              <div class="min-h--60 py--20 px--19 c-fff SHSBold fs--18 w100 bgcolor6">
                 {{ (detailData && detailData.remark) || "-" }}
               </div>
             </div>
@@ -509,10 +319,7 @@
         </el-tab-pane>
         <el-tab-pane :label="getReviewRecordsLabel()" name="second">
           <div class="oa" style="height: 700px">
-            <div
-              v-if="!detailData || !detailData.errorReview"
-              class="txt-center c-fff fs--16 mt--50"
-            >
+            <div v-if="!detailData || !detailData.errorReview" class="txt-center c-fff fs--16 mt--50">
               暂无复查记录
             </div>
             <div v-else>
@@ -533,18 +340,13 @@
               <div class="flex j-between gap--30 mt--30">
                 <div class="flex1">
                   <div class="SHSR fs--16 lh--16 mb--17 color1">复查图片:</div>
-                  <div
-                    class="lh--60 px--19 btnColor SHSBold fs--18 w100 cursor-pointer"
-                    :class="
-                      !detailData.errorReview.img ||
-                      detailData.errorReview.img.length === 0
-                        ? 'disableColor'
-                        : ''
-                    "
-                    @click="
+                  <div class="lh--60 px--19 btnColor SHSBold fs--18 w100 cursor-pointer" :class="!detailData.errorReview.img ||
+                    detailData.errorReview.img.length === 0
+                    ? 'disableColor'
+                    : ''
+                    " @click="
                       handlePreviewReviewImages(detailData.errorReview.img)
-                    "
-                  >
+                      ">
                     {{
                       (detailData.errorReview.img &&
                         detailData.errorReview.img.length) ||
@@ -579,11 +381,7 @@
       </el-tabs>
     </CustomDialog>
     <!-- 图片预览 -->
-    <CustomPreview
-      :show="previewVisible"
-      :imgArr="previewImages"
-      @close="previewVisible = false"
-    />
+    <CustomPreview :show="previewVisible" :imgArr="previewImages" @close="previewVisible = false" />
   </div>
 </template>
 
@@ -614,7 +412,7 @@
       // 搜索条件
       searchForm: {
         projectId: null, // 选中的项目ID
-        state : null, // 整改状态:1已整改 0未整改
+        state: null, // 整改状态:1已整改 0未整改
         type: null, // 隐患类型:1=安全 2=设备
         level: null, // 隐患等级:0=一级 1=二级 2=三级 3=四级
         startTime: null, // 开始时间
@@ -696,12 +494,12 @@
       // bigHiddenDangerConfig: 1开启 2关闭
       // generalHiddenDangerConfig: 1开启 2关闭
 
-      if (this.activeTab === 1) {
-        // 重大隐患 tab,判断 bigHiddenDangerConfig
-        return this.bigHiddenDangerConfig === 1;
+      if (this.bigHiddenDangerConfig === 1) {
+        return false
+      } else if (this.generalHiddenDangerConfig === 1) {
+        return this.activeTab === 1
       } else {
-        // 安全隐患和设备隐患 tab,判断 generalHiddenDangerConfig
-        return this.generalHiddenDangerConfig === 1;
+        return true
       }
     },
   },
@@ -800,7 +598,7 @@
     // 加载表格数据
     this.loadTableData();
   },
-  mounted() {},
+  mounted() { },
   methods: {
     // 从 localStorage 加载配置
     loadConfigFromLocalStorage() {
@@ -846,7 +644,7 @@
     resetSearchForm() {
       this.searchForm = {
         projectId: this.projectId || null,
-        state : null,
+        state: null,
         type: this.currentType,
         level: null,
         startTime: this.routeStartTime || null, // 保留路由传递的开始时间
@@ -1001,8 +799,8 @@
     },
 
     // 获取整改状态文本
-    getReformedText(state ) {
-      return ["未复查","未整改", "部分整改", "已整改",'未复查' ][state ];
+    getReformedText(state) {
+      return ["未复查", "未整改", "部分整改", "已整改", '未复查'][state];
     },
 
     // 预览图片
@@ -1099,7 +897,7 @@
     // 获取复查状态文本
     getReviewStateText(state) {
       const stateMap = {
-        0:'未复查',
+        0: '未复查',
         1: "未整改",
         2: "部分整改",
         3: "已整改",
@@ -1327,12 +1125,10 @@
     position: absolute;
     top: -2px;
     right: -2px;
-    background: linear-gradient(
-      90deg,
-      #3467d0 0%,
-      #0d226a 50.35%,
-      #376fe0 100%
-    );
+    background: linear-gradient(90deg,
+        #3467d0 0%,
+        #0d226a 50.35%,
+        #376fe0 100%);
     height: 38px;
     display: flex;
     align-items: center;

--
Gitblit v1.7.1