Browse Source

Merge branch 'dev' of http://47.101.207.123:3000/CITYGIS-BDP/EOC-UI into dev

citygis-lhh 1 month ago
parent
commit
d47e08ef29
28 changed files with 308 additions and 187 deletions
  1. 8 9
      src/components/TitleHeader/index.vue
  2. 1 0
      src/components/TitleHeaderLong/index.vue
  3. 1 0
      src/components/TitleHeadermini/index.vue
  4. 2 1
      src/components/TitleHeadersmall/index.vue
  5. 4 2
      src/components/TowLevelTitle/fxryTowLevelTitle.vue
  6. 2 1
      src/components/TowLevelTitle/index.vue
  7. 11 0
      src/store/dialog.js
  8. 2 2
      src/views/left/comp/dispose/CaseHandling.vue
  9. 2 1
      src/views/left/comp/dispose/InformationReport.vue
  10. 1 0
      src/views/left/comp/dispose/common/HeaderBoxContent.vue
  11. 7 3
      src/views/left/comp/dispose/dialog/ActivityTrajectoryDialog.vue
  12. 15 6
      src/views/left/comp/dispose/dialog/DetectionResultDialog.vue
  13. 4 0
      src/views/left/comp/dispose/dialog/RiskDialog.vue
  14. 15 3
      src/views/left/comp/dispose/dialog/RiskLocationDialog.vue
  15. 10 1
      src/views/left/comp/dispose/dialog/RiskPersonnelDialog.vue
  16. 1 0
      src/views/left/dialog/ProgressInDisposalDialog.vue
  17. 16 10
      src/views/left/dialog/PublicHealthRisksDialog.vue
  18. 6 1
      src/views/left/dialog/components/DisposalProgressContentSecond.vue
  19. 6 2
      src/views/left/dialog/components/common/DisposalChildBox.vue
  20. 0 106
      src/views/left/dialog/components/dialog/CaseDetailDiaog.vue
  21. 1 15
      src/views/left/dialog/components/dialog/CaseManageNodeDialog.vue
  22. 1 6
      src/views/left/dialog/components/dialog/LaboratoryTestNodeDialog.vue
  23. 165 0
      src/views/left/dialog/components/dialog/RiskLocationControlDialog.vue
  24. 17 12
      src/views/left/modules/BigRiskTable.vue
  25. 1 0
      src/views/left/modules/ProgressInDisposal.vue
  26. 6 5
      src/views/left/modules/ReportDisposal.vue
  27. 2 0
      src/views/left/modules/common/RiskTableContent.vue
  28. 1 1
      src/views/right/echarts/echartsOption.js

+ 8 - 9
src/components/TitleHeader/index.vue

@@ -2,8 +2,7 @@
   <div class="title_container">
     <div class="title">{{ title }}</div>
     <div class="btn_box">
-      <div class="right_btn" :class="{ 'right_btn_active': activeIndex === index }" v-for="(item, index) in buttons"
-        @click="btnClick(item, index)">{{ item.name }}</div>
+      <div class="right_btn" :class="{ right_btn_active: activeIndex === index }" v-for="(item, index) in buttons" @click="btnClick(item, index)">{{ item.name }}</div>
     </div>
   </div>
 </template>
@@ -14,11 +13,11 @@ const props = defineProps({
   buttons: {
     default: () => []
   },
-  btnActiveIndex: 0,
+  btnActiveIndex: 0
 })
 let activeIndex = ref(1)
 const emit = defineEmits(['btnClick'])
-function btnClick (item, index) {
+function btnClick(item, index) {
   activeIndex.value = index
   emit('btnClick', item)
 }
@@ -31,7 +30,6 @@ function btnClick (item, index) {
   justify-content: space-between;
   background: url('../../assets/img/一级标题样式(14).png') no-repeat;
 
-
   .title {
     width: 100%;
     margin-left: 45px;
@@ -70,16 +68,17 @@ function btnClick (item, index) {
   font-style: normal;
   text-transform: none;
   margin-left: 8px;
+  cursor: pointer;
 }
 
 .right_btn_active {
-  background: linear-gradient(90deg, #59A7DA 0%, rgba(22, 116, 178, 0) 100%);
+  background: linear-gradient(90deg, #59a7da 0%, rgba(22, 116, 178, 0) 100%);
   border-radius: 4px 4px 4px 4px;
-  border: 1px solid #6FE5FF;
-  font-family: Alibaba PuHuiTi 3.0, Alibaba PuHuiTi 30;
+  border: 1px solid #6fe5ff;
+  font-family: Alibaba PuHuiTi 3, Alibaba PuHuiTi 30;
   font-weight: normal;
   font-size: 14px;
-  color: #08FFE5;
+  color: #08ffe5;
   font-style: normal;
   text-transform: none;
 }

+ 1 - 0
src/components/TitleHeaderLong/index.vue

@@ -102,6 +102,7 @@ function getImgSrc (picName) {
   font-style: normal;
   text-transform: none;
   margin-left: 8px;
+  cursor: pointer;
 }
 
 .right_btn_active {

+ 1 - 0
src/components/TitleHeadermini/index.vue

@@ -73,6 +73,7 @@ function btnClick (item, index) {
   font-style: normal;
   text-transform: none;
   margin-left: 8px;
+  cursor: pointer;
 }
 
 .right_btn_active {

+ 2 - 1
src/components/TitleHeadersmall/index.vue

@@ -70,7 +70,7 @@ function btnClick (item, index) {
 
 .btn_box {
   display: flex;
-  margin-right: 10px;
+  // margin-right: 10px;
   margin-top: 6px;
 }
 
@@ -89,6 +89,7 @@ function btnClick (item, index) {
   font-style: normal;
   text-transform: none;
   margin-left: 8px;
+  cursor: pointer;
 }
 
 .right_btn_active {

+ 4 - 2
src/components/TowLevelTitle/fxryTowLevelTitle.vue

@@ -8,7 +8,7 @@
       <div class="btn_box" >
         <div class="right_btn" :class="{ 'right_btn_active': activeIndex === index }" v-for="(item, index) in buttons"
           @click="btnClick(item, index)">{{ item.name }}</div>
-         <span  v-if="openDialog" @click="openDialog">
+         <span  v-if="openDialog" @click="openDialog" style="cursor: pointer;">
             <!-- <img src="展开箭头.png" alt=""> -->
             <img src="../../assets/img/展开箭头.png" alt="">
           </span>
@@ -101,7 +101,8 @@ function openDialog() {
 }
 
 .right_btn {
-  padding: 0 5px;
+  // padding: 0 5px;
+  padding: 0 3px;
   height: 24px;
   border-radius: 4px 4px 4px 4px;
   border: 1px solid rgba(111, 229, 255, 0.3);
@@ -115,6 +116,7 @@ function openDialog() {
   font-style: normal;
   text-transform: none;
   margin-left: 10px;
+  cursor: pointer;
   >span{
     img{
       width: 24px;

+ 2 - 1
src/components/TowLevelTitle/index.vue

@@ -8,7 +8,7 @@
       <div class="btn_box" >
         <div class="right_btn" :class="{ 'right_btn_active': activeIndex === index }" v-for="(item, index) in buttons"
           @click="btnClick(item, index)">{{ item.name }}</div>
-         <span  v-if="props.openDialog" @click="openDialog">
+         <span  v-if="props.openDialog" @click="openDialog" style="cursor: pointer;">
             <!-- <img src="展开箭头.png" alt=""> -->
             <img src="../../assets/img/展开箭头.png" alt="">
           </span>
@@ -115,6 +115,7 @@ function openDialog () {
   font-style: normal;
   text-transform: none;
   margin-left: 10px;
+  cursor: pointer;
   >span{
     img{
       width: 24px;

+ 11 - 0
src/store/dialog.js

@@ -15,6 +15,8 @@ export const useDialogStore = defineStore('dialog', {
 
       laboratoryTestNodeDialogOpen: false,   // 存储实验室检测节点弹窗开关
 
+      riskLocationControlDialogOpen:false,  //存储风险场所管控节点弹窗开关
+
       // 公共卫生风险及地图图例 下拉选项
       selectSearchObj: {
         type: '',
@@ -114,6 +116,15 @@ export const useDialogStore = defineStore('dialog', {
       return this.caseDetailDiaogOpen
     },
 
+    // 风险场所管控
+    setRiskLocationControlDialogOpen (open) {
+      this.riskLocationControlDialogOpen = open
+    },
+    getRiskLocationControlDialogOpen () {
+      return this.riskLocationControlDialogOpen
+    },
+    
+
     // 弹窗统一关闭
     closeAllDialog () {
       // this.riskPersonnelDialogOpen = false

+ 2 - 2
src/views/left/comp/dispose/CaseHandling.vue

@@ -867,7 +867,7 @@ onMounted(() => {})
         position: relative;
         .risk_personnel_tag {
           position: absolute;
-          top: 1px;
+          top: 3px;
           left: 96px;
           color: #04fafe;
         }
@@ -897,7 +897,7 @@ onMounted(() => {})
         position: relative;
         .activity_trajectory_tag {
           position: absolute;
-          top: 1px;
+          top: 3px;
           left: 96px;
           color: #04fafe;
         }

+ 2 - 1
src/views/left/comp/dispose/InformationReport.vue

@@ -349,13 +349,14 @@ onMounted(() => {
         display: flex;
         justify-content: center;
         align-items: center;
+        cursor: pointer;
+
         .icon-box {
           width: 25px;
           height: 25px;
           background-image: url("../../../../assets/img/a-shouqi1 1@2x.png");
           background-size: 100% 100%;
           transform: rotate(-90deg);
-          cursor: pointer;
         }
         .up-icon {
           transform: rotate(90deg);

+ 1 - 0
src/views/left/comp/dispose/common/HeaderBoxContent.vue

@@ -155,6 +155,7 @@ function getImgSrc(picName) {
     text-transform: none;
     padding: 4px;
     box-sizing: border-box;
+    cursor: pointer;
     >img{
       width: 24px;
       height: 24px;

+ 7 - 3
src/views/left/comp/dispose/dialog/ActivityTrajectoryDialog.vue

@@ -15,11 +15,15 @@ const dialogOptions = {
   buttons: [],
   tableColumns: [
     { type: 'index', label: '序号', width: '80' },
-    { prop: 'name', label: '活动时间' },
-    { prop: 'type', label: '活动地址' },
+    { prop: 'time', label: '活动时间' },
+    { prop: 'address', label: '活动地址' },
   ],
   tableData: [
-    // 数据...
+    {time:'2024-07-26 09:00',address:'xxxxx'},
+    {time:'2024-07-26 09:00',address:'1号大街'},
+    {time:'2024-07-26 10:00',address:'2号大街'},
+    {time:'2024-07-26 11:00',address:'3号大街'},
+    {time:'2024-07-26 12:00',address:'4号大街'},
   ]
 }
 

+ 15 - 6
src/views/left/comp/dispose/dialog/DetectionResultDialog.vue

@@ -23,14 +23,23 @@ const dialogOptions = {
     { type: 'index', label: '序号', width: '80' },
     { prop: 'name', label: '姓名' },
     { prop: 'type', label: '标本类别' },
-    { prop: 'type', label: '采样时间' },
-    { prop: 'type', label: '收样时间' },
-    { prop: 'type', label: '检测时间' },
-    { prop: 'type', label: '检测机构' },
-    { prop: 'type', label: '检测结果' },
+    { prop: 'time1', label: '采样时间' },
+    { prop: 'time2', label: '收样时间' },
+    { prop: 'time3', label: '检测时间' },
+    { prop: 'organization', label: '检测机构' },
+    { prop: 'result', label: '检测结果' },
   ],
   tableData: [
-    // 数据...
+    {name:'小明',type:'鼻拭子',time1:'2024-07-26 09:00',time2:'2024-07-26 09:00',time3:'-',organization:'xx单位',result:'阴性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'长宁区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'长宁区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'长宁区疾病预防控制中心',result:'阴性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'普陀区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'普陀区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'普陀区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'普陀区疾病预防控制中心',result:'阴性'},
+    {name:'小明',type:'血清',time1:'2024-10-02 5:35',time2:'2024-10-02 9:35',time3:'-',organization:'普陀区疾病预防控制中心',result:'阳性'},
+    {name:'小明',type:'咽拭子',time1:'2024-09-27 17:03',time2:'2024-09-27 17:03',time3:'-',organization:'xx单位',result:'阳性'},
   ]
 }
 

+ 4 - 0
src/views/left/comp/dispose/dialog/RiskDialog.vue

@@ -224,6 +224,10 @@ const handleRowClick = row => {
   margin-left: 10px;
 }
 
+.dialog_table{
+  width: 100%;
+  height: 195px;
+}
 :deep(.el-table) {
   tr {
     background-color: rgba(0, 170, 255, 0.15) !important;

+ 15 - 3
src/views/left/comp/dispose/dialog/RiskLocationDialog.vue

@@ -18,11 +18,23 @@ const dialogOptions = {
   tableColumns: [
     { type: 'index', label: '序号', width: '80' },
     { prop: 'name', label: '场所名称' },
-    { prop: 'type', label: '场所地址' },
-    { prop: 'address', label: '消杀进展' },
+    { prop: 'address', label: '场所地址' },
+    { prop: 'progress', label: '消杀进展' },
   ],
   tableData: [
-    // 数据...
+    {name:'场所1',address:'上海市xx区xx街道xx号',progress:'处置中'},
+    {name:'上海姚连生中学',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'上海市长宁区天山中医医院',address:'上海市xx区xx街道xx号',progress:'处置中'},
+    {name:'王乐康家',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'上海市徐汇区第一中心小学',address:'上海市xx区xx街道xx号',progress:'处置中'},
+    {name:'明园世纪城',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'霞飞苑',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'永康小区',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'上海市徐汇区日晖新村小学',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'西南位育中学东校区',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'社区学院',address:'上海市xx区xx街道xx号',progress:'已完成'},
+    {name:'教育科学研究院实验小学',address:'上海市xx区xx街道xx号',progress:'已完成'},
+
   ]
 }
 

+ 10 - 1
src/views/left/comp/dispose/dialog/RiskPersonnelDialog.vue

@@ -39,7 +39,16 @@ const dialogOptions = {
     // }
   ],
   tableData: [
-    // 数据...
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'小明',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'小红',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'小米',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'小兰',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
+   {name:'张嘉佳',type:'密接',address:'-',relation:'同学',lastContact:'-',status:'-'},
   ]
 }
 

+ 1 - 0
src/views/left/dialog/ProgressInDisposalDialog.vue

@@ -177,6 +177,7 @@ function handleRowClick() {}
       color: #9ffdff;
       font-style: normal;
       text-transform: none;
+      cursor: pointer;
       > img {
         width: 44px;
         height: 44px;

+ 16 - 10
src/views/left/dialog/PublicHealthRisksDialog.vue

@@ -30,21 +30,27 @@ import { ref, reactive, toRefs, onBeforeMount, onMounted } from 'vue'
 import { useDialogStore } from '@/store/dialog'
 let dialogStore = useDialogStore()
 
+import {
+  riskTypeOptions,
+  riskLevelList,
+  riskStatusOptions
+} from "@/data/dict.js";
+
 const buttons = ref([
   { id: 1, name: '报告地', active: false },
   { id: 2, name: '发生地', active: true }
 ])
 let selectSearchObj = ref({})
-const riskTypeOptions = ref([
-  { value: 1, label: '风险个案' },
-  { value: 2, label: '风险事件' },
-  { value: 3, label: '风险信息' }
-])
-
-const riskStatusOptions = ref([
-  { value: 1, label: '处置中' },
-  { value: 2, label: '已结案' }
-])
+// const riskTypeOptions = ref([
+//   { value: 1, label: '风险个案' },
+//   { value: 2, label: '风险事件' },
+//   { value: 3, label: '风险信息' }
+// ])
+
+// const riskStatusOptions = ref([
+//   { value: 1, label: '处置中' },
+//   { value: 2, label: '已结案' }
+// ])
 
 const tableData = ref([
   {

+ 6 - 1
src/views/left/dialog/components/DisposalProgressContentSecond.vue

@@ -26,6 +26,8 @@
     <CaseManageNodeDialog v-if="dialogStore.caseManageNodeDialogOpen"></CaseManageNodeDialog>
     <!-- 实验室检测节点弹窗 -->
     <LaboratoryTestNodeDialog v-if="dialogStore.laboratoryTestNodeDialogOpen"></LaboratoryTestNodeDialog>
+    <!-- 风险场所管控节点弹窗 -->
+     <RiskLocationControlDialog v-if="dialogStore.riskLocationControlDialogOpen"></RiskLocationControlDialog>
   </div>
 </template>
 
@@ -34,6 +36,7 @@ import { ref, onMounted } from 'vue'
 import DisposalChildBox from './common/DisposalChildBox.vue'
 import CaseManageNodeDialog from './dialog/CaseManageNodeDialog'
 import LaboratoryTestNodeDialog from './dialog/LaboratoryTestNodeDialog.vue'
+import RiskLocationControlDialog from './dialog/RiskLocationControlDialog.vue'
 import { useDialogStore } from '@/store/dialog'
 let dialogStore = useDialogStore()
 
@@ -53,7 +56,7 @@ const getStatus = status => {
 //点击节点
 const handleNodeClick = item => {
   console.log(item)
-  if (!['病例管理', '实验室检测'].includes(item.nodeName)) return
+  if (!['病例管理', '实验室检测','风险场所管控'].includes(item.nodeName)) return
   
   rightPanelStore.handleCloseAllVisible()
   dialogStore.closeAllDialog()
@@ -61,6 +64,8 @@ const handleNodeClick = item => {
     dialogStore.setCaseManageNodeDialogOpen(true)
   } else if (item.nodeName === '实验室检测') {
     dialogStore.setLaboratoryTestNodeDialogOpen(true)
+  }else if (item.nodeName === '风险场所管控') {
+    dialogStore.setRiskLocationControlDialogOpen(true)
   }
 }
 

+ 6 - 2
src/views/left/dialog/components/common/DisposalChildBox.vue

@@ -5,7 +5,7 @@
       <div class="child-box" :class="{ first: index == 0, last: index == data.children?.length - 1 }">
         <div class="left-line"></div>
 
-        <div class="child-content" @click="handleNodeClick(item)">
+        <div class="child-content"  @click="handleNodeClick(item)">
           <div class="content">{{ item.nodeName }}</div>
           <div class="status-box" v-if="item.state" :class="getStatus(item.state)">
             {{ item.state }}
@@ -76,7 +76,7 @@ const getStatus = status => {
       border-radius: 6px 6px 6px 6px;
       border: 1px solid #109aff;
       padding: 10px 0;
-      cursor: pointer;
+      // cursor: pointer;
       .content {
         width: 96px;
         height: 16px;
@@ -177,4 +177,8 @@ const getStatus = status => {
     }
   }
 }
+
+.pointer{
+  cursor: pointer;
+}
 </style>

+ 0 - 106
src/views/left/dialog/components/dialog/CaseDetailDiaog.vue

@@ -8,112 +8,6 @@
     </div>
 
     <div class="case_detail_body">
-      <!-- <div>
-        <div class="title">
-          病例编号
-          <span class="symbol">:</span>
-        </div>
-        <span>XXXXXXXXXXXXXXXXXXXX</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          姓 名
-          <span class="symbol2">:</span>
-        </div>
-        <span>XXX</span>
-      </div>
-      <div>
-        <div class="title">
-          身份证号
-          <span class="symbol">:</span>
-        </div>
-        <span>XXXXXXXXXXXXXXXXXXXX</span>
-      </div>
-      <div>
-        <div class="title">
-          联系电话
-          <span class="symbol">:</span>
-        </div>
-        <span>13018230914</span>
-      </div>
-      <div>
-        <div class="title">
-          隔离位置
-          <span class="symbol">:</span>
-        </div>
-        <span>XXXXXXXXXXXXXXXXXXXX</span>
-      </div>
-      <div>
-        <div class="title">
-          隔离时间
-          <span class="symbol">:</span>
-        </div>
-        <span>2024-10-01 08:00</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          体 温
-          <span class="symbol2">:</span>
-        </div>
-        <span>37.3°</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          心 率
-          <span class="symbol2">:</span>
-        </div>
-        <span>110次/分</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          血 压
-          <span class="symbol2">:</span>
-        </div>
-        <span>120mmHg</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          姓 名
-          <span class="symbol2">:</span>
-        </div>
-        <span>XXX</span>
-      </div>
-      <div>
-        <div class="title">
-          病例类型
-          <span class="symbol">:</span>
-        </div>
-        <span>肺炎</span>
-      </div>
-      <div>
-        <div class="title">
-          密接人员
-          <span class="symbol">:</span>
-        </div>
-        <span>15人</span>
-      </div>
-      <div>
-        <div class="title">
-          风险场所
-          <span class="symbol">:</span>
-        </div>
-        <span>6个</span>
-      </div>
-      <div>
-        <div class="title spacing">
-          轨 迹
-          <span class="symbol2">:</span>
-        </div>
-        <div class="btn">查看轨迹</div>
-      </div>
-      <div>
-        <div class="title spacing">
-          分 析
-          <span class="symbol2">:</span>
-        </div>
-        <div class="btn">模型分析</div>
-      </div> -->
-
         <template v-for="(item, index) in displayItems" :key="index">
         <div>
           <div class="title" :class="{ spacing: item.spacing }">

+ 1 - 15
src/views/left/dialog/components/dialog/CaseManageNodeDialog.vue

@@ -159,21 +159,7 @@ const handleButtonClick = index => {
 }
 
 const tableRowClassName = ({ row, rowIndex }) => {
-  console.log(rowIndex, 'rowIndex')
-  // if (rowIndex===0) {
-  //   return 'g_single-row'
-  // }
-  // if (rowIndex!==0&&rowIndex % 2 === 0) {
-  //   return 'single-row'
-  // } else if (rowIndex!==0 && rowIndex % 2 !== 0) {
-  //   return 'double-row'
-  // }
-  // return rowIndex % 2 === 0 ? 'single-row' : 'double-row'
-
-  if (rowIndex === 0) {
-    return 'single-row'
-  }
-  return rowIndex % 2 === 0 ? 'double-row' : ''
+  return rowIndex % 2 === 0 ? 'single-row' : 'double-row'
 }
 </script>
 

+ 1 - 6
src/views/left/dialog/components/dialog/LaboratoryTestNodeDialog.vue

@@ -133,12 +133,7 @@ const handleRowClick = row => {
 }
 
 const tableRowClassName = ({ row, rowIndex }) => {
-  // return rowIndex % 2 === 0 ? 'single-row' : 'double-row'
-
-  if (rowIndex === 0) {
-    return 'single-row'
-  }
-  return rowIndex % 2 === 0 ? 'double-row' : ''
+  return rowIndex % 2 === 0 ? 'single-row' : 'double-row'
 }
 </script>
 

+ 165 - 0
src/views/left/dialog/components/dialog/RiskLocationControlDialog.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="risk_location_container">
+    <div class="dialog_container_header">
+      <div class="dialog_container_header_title">
+        <img :src="getImgSrc(dialogOptions.imgName)" alt="icon" />
+        <div>{{ dialogOptions.title }}</div>
+      </div>
+      <div class="dialog_container_header_btn">
+        <div class="btn_box">
+          <div class="img_close" @click="handleClose">
+            <img src="../../../../../assets/img/弹窗关闭.png" alt="close" />
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <el-table :data="dialogOptions.tableData" class="dialog_table" @row-click="handleRowClick" :row-class-name="tableRowClassName">
+      <el-table-column
+        v-for="(column, colIndex) in dialogOptions.tableColumns"
+        :key="`col_${colIndex}_${column.prop}`"
+        :type="column.type"
+        :prop="column.prop"
+        :label="column.label"
+        :width="column.width"
+        :align="column.align || 'center'"
+        :formatter="column.formatter"
+      >
+        <!-- 支持自定义列模板 -->
+        <template v-if="column.slot" #default="scope">
+          <slot :name="column.slot" :row="scope.row">
+            <el-button color="#3599ff" :dark="true" plain>查看</el-button>
+            <el-button color="#a83126" :dark="true" plain>删除</el-button>
+          </slot>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+<script setup>
+import { ref, watch, computed, reactive, toRefs, onBeforeMount, onMounted } from 'vue'
+const dialogOptions = ref({
+  imgName: '小标题',
+  title: '风险场所列表',
+  activeIndex: 0,
+  buttons: [],
+  tableColumns: [
+    // { type: 'index', label: '序号', width: '80' },
+    { prop: 'type', label: '风险ID' },
+    { prop: 'date', label: '风险名称' },
+    { prop: 'domeType', label: '管控ID' },
+    { prop: 'samplingNum', label: '管控名称' },
+    {
+      prop: 'actions',
+      label: '操作',
+      slot: 'action-column', // 使用插槽自定义
+      width: '160'
+    }
+  ],
+  tableData: [
+    // 数据...
+    { type: '病例', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '病例', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '密接', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '密接', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '病例', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '病例', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '密接', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '密接', date: '-', domeType: '血清', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' },
+    { type: '咽拭子', date: '-', domeType: '-', samplingNum: '-', testNum: '-', positiveNum: '-' }
+  ]
+})
+
+// 图片路径处理方法
+const getImgSrc = picName => {
+  return new URL(`../../../../../assets/img/${picName}.png`, import.meta.url).href
+}
+</script>
+<style lang="scss" scoped>
+.risk_location_container {
+  position: absolute;
+  right: -600px;
+  top: 20px;
+  width: 582px;
+  height: 768px;
+  background: url(../../../../../assets/img/弹框-大.png) no-repeat;
+  background-size: 100% 100%;
+  padding: 20px;
+  box-sizing: border-box;
+}
+
+.dialog_container_header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  width: 100%;
+  height: 50px;
+  box-sizing: border-box;
+  // padding: 0 20px;
+}
+
+.dialog_container_header_title {
+  display: flex;
+  align-items: center;
+  font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+  font-weight: 400;
+  font-size: 24px;
+  font-style: normal;
+  text-transform: none;
+  background: linear-gradient(to bottom, #ffffff 0%, #a4e9ff 100%);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+
+  > img {
+    width: 22px;
+    height: 22px;
+    margin-right: 10px;
+  }
+}
+
+.dialog_container_header_btn {
+  display: flex;
+  align-items: center;
+}
+
+.dialog_table {
+  width: 100%;
+  height: 670px;
+  margin-top: 15px;
+}
+
+:deep(.el-table) {
+  thead {
+    tr {
+      background-color: transparent !important;
+      background: none !important;
+      font-weight: 400 !important;
+    }
+    position: relative;
+
+    &::after {
+      content: '';
+      position: absolute;
+      bottom: 0;
+      left: 0;
+      width: 100%;
+      height: 3px;
+      background: url('../../../../../assets/img/title-bottom-line.png') no-repeat center;
+      background-size: 100% 100%;
+      z-index: 1;
+    }
+  }
+}
+
+:deep(.el-table__header-wrapper th) {
+  background-color: transparent !important;
+  background: none !important;
+  // border-bottom: 1px solid rgba(41, 44, 45, 0.3) !important;
+}
+</style>

+ 17 - 12
src/views/left/modules/BigRiskTable.vue

@@ -19,7 +19,7 @@
 
           <div class="select_search">
             <el-select v-model="selectSearchObj.level" placeholder="风险级别" popper-class="custom-select">
-              <el-option v-for="item in riskLevelOptions" :key="item.value" :label="item.label" :value="item.value" />
+              <el-option v-for="item in riskLevelList" :key="item.value" :label="item.label" :value="item.value" />
             </el-select>
             <el-select v-model="selectSearchObj.type" placeholder="风险类型" popper-class="custom-select">
               <el-option v-for="item in riskTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
@@ -64,6 +64,10 @@ import { useRiskTableStore } from '@/store/riskTable.js'
 let riskTableStore = useRiskTableStore()
 import { useCommonStore } from '@/store/common.js'
 let commonStore = useCommonStore()
+import {
+  riskTypeOptions,
+  riskLevelList,
+} from "@/data/dict.js";
 
 const emit = defineEmits(['changeRiskView'])
 // const props = defineProps({
@@ -93,18 +97,18 @@ function setActive(index) {
 
 let selectSearchObj = ref({})
 
-const riskLevelOptions = ref([
-  { value: 0, label: 'A级', active: true },
-  { value: 1, label: 'B级', active: false },
-  { value: 2, label: 'C级', active: false },
-  { value: 3, label: 'D级', active: false }
-])
+// const riskLevelOptions = ref([
+//   { value: 0, label: 'A级', active: true },
+//   { value: 1, label: 'B级', active: false },
+//   { value: 2, label: 'C级', active: false },
+//   { value: 3, label: 'D级', active: false }
+// ])
 
-const riskTypeOptions = ref([
-  { value: 1, label: '风险个案' },
-  { value: 2, label: '风险事件' },
-  { value: 3, label: '风险信息' }
-])
+// const riskTypeOptions = ref([
+//   { value: 1, label: '风险个案' },
+//   { value: 2, label: '风险事件' },
+//   { value: 3, label: '风险信息' }
+// ])
 
 const riskStatusOptions = ref([
   { value: 1, label: '已结案' },
@@ -604,6 +608,7 @@ function goBack() {
       font-weight: 400;
       font-size: 20px;
       color: #e0e5fa;
+      cursor: pointer;
     }
   }
 

+ 1 - 0
src/views/left/modules/ProgressInDisposal.vue

@@ -178,6 +178,7 @@ function openAIDialogHandle() {
   text-align: left;
   font-style: normal;
   text-transform: none;
+  cursor: pointer;
 }
 
 .ai_tab-button_bg_img {

+ 6 - 5
src/views/left/modules/ReportDisposal.vue

@@ -441,18 +441,19 @@ function openRiskBigTable() {
 .content_four {
   // flex: 1;
   width: 100%;
-  height: 202px;
+  height: 210px;
 
   .content_four_body {
-    height: 146px;
+    height: 152px;
     padding: 0 10px;
+    box-sizing: border-box;
     display: flex;
     align-items: center;
     justify-content: space-between;
-    background: linear-gradient(180deg, rgba(32, 70, 121, 0) 2%, rgba(32, 70, 121, 0.6) 100%);
+    // background: linear-gradient(180deg, rgba(32, 70, 121, 0) 2%, rgba(32, 70, 121, 0.6) 100%);
     border-radius: 0px 0px 0px 0px;
-    border: 1px solid;
-    border-image: linear-gradient(180deg, rgba(7, 108, 208, 0), rgba(168, 212, 235, 1)) 1 1;
+    // border: 1px solid;
+    // border-image: linear-gradient(180deg, rgba(7, 108, 208, 0), rgba(168, 212, 235, 1)) 1 1;
   }
 
   // 检测设备  应急车辆

+ 2 - 0
src/views/left/modules/common/RiskTableContent.vue

@@ -260,6 +260,7 @@ onMounted(() => {})
   font-style: normal;
   text-transform: none;
   margin-left: 10px;
+  cursor: pointer;
 }
 
 .right_btn_active {
@@ -276,6 +277,7 @@ onMounted(() => {})
 
 .open_icon {
   margin-left: 10px;
+  cursor: pointer;
 }
 
 .scroll_table {

+ 1 - 1
src/views/right/echarts/echartsOption.js

@@ -461,7 +461,7 @@ export function WordColudOption(data) {
           fontFamily: "sans-serif",
           fontWeight: "bold",
           color: function (args) {
-            console.log(args,args.dataIndex,colorArr.length, "=======args=====");
+            // console.log(args,args.dataIndex,colorArr.length, "=======args=====");
             if (args.dataIndex < colorArr.length) {
               return colorArr[args.dataIndex];
             }else{