浏览代码

Merge branch 'dev' into dev-webgis

hm 2 周之前
父节点
当前提交
7eccf2def0

+ 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

+ 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)
   }
 }
 

+ 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>

+ 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{