From 803b93038ca16e21ea60a260ca4ac882b84a87ef Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 18 七月 2025 17:31:53 +0800
Subject: [PATCH] 2025.7.18 监管任务模块 1. 监管场景样式优化; 2. 新增监管场景GIS地图展示(待完成);

---
 src/assets/image/scene_18.png                         |    0 
 src/components.d.ts                                   |    1 
 src/components/list-item/ItemMonitorObj.vue           |   93 +++++++-
 src/api/index.js                                      |    2 
 src/components/map/BaseMap.vue                        |    7 
 index.html                                            |    4 
 src/utils/map/index.js                                |  114 +++++++++++
 src/assets/image/scene_19.png                         |    0 
 vite.config.js                                        |   27 +-
 src/views/fysp/task/MonitorObjEdit.vue                |    4 
 src/assets/image/scene_4.png                          |    0 
 src/components/map/SceneMap.vue                       |   36 +++
 src/assets/image/scene_15.png                         |    0 
 src/assets/image/scene_5.png                          |    0 
 src/views/fysp/task/components/CompTaskMap.vue        |   25 ++
 src/views/fysp/task/components/CompMonitorObj.vue     |   70 +++++-
 src/assets/scene-icon.js                              |   43 ++++
 src/assets/image/scene_20.png                         |    0 
 src/assets/image/scene_16.png                         |    0 
 src/utils/map/marks.js                                |   36 ++-
 src/views/fysp/task/components/CompMonitorObjEdit.vue |   38 ++
 src/assets/image/scene_1.png                          |    0 
 src/assets/image/scene_17.png                         |    0 
 src/views/fysp/task/TaskManage.vue                    |   29 ++
 src/views/fysp/task/components/CompMonitorPlan.vue    |   71 ++++--
 src/assets/image/scene_6.png                          |    0 
 26 files changed, 488 insertions(+), 112 deletions(-)

diff --git a/index.html b/index.html
index d5c41ec..bbeb3db 100644
--- a/index.html
+++ b/index.html
@@ -9,12 +9,12 @@
   <body>
     <div id="app"></div>
   </body>
-  <!-- <script type="text/javascript">
+  <script type="text/javascript">
     window._AMapSecurityConfig = {
       serviceHost: 'http://47.100.191.150:8083/_AMapService'
     };
   </script>
-  <script
+  <!-- <script
     type="text/javascript"
     src="https://webapi.amap.com/maps?v=1.4.5&key=520c5e5cf44c7793104e500cbf0ed711&plugin=Map3D,ElasticMarker,AMap.ControlBar,AMap.Geocoder"
   ></script> -->
diff --git a/src/api/index.js b/src/api/index.js
index dca45b4..a839aee 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -13,7 +13,7 @@
 let ip2_file = 'https://fyami.com.cn/';
 
 if (debug) {
-  ip1 = 'http://192.168.0.103:8080/';
+  ip1 = 'http://192.168.0.103:9001/';
   // ip1_file = 'http://192.168.0.138:8080/';
   // ip2 = 'http://192.168.0.138:8080/';
   // ip2_file = 'https://fyami.com.cn/';
diff --git a/src/assets/image/scene_1.png b/src/assets/image/scene_1.png
new file mode 100644
index 0000000..972dd1c
--- /dev/null
+++ b/src/assets/image/scene_1.png
Binary files differ
diff --git a/src/assets/image/scene_15.png b/src/assets/image/scene_15.png
new file mode 100644
index 0000000..2c33b51
--- /dev/null
+++ b/src/assets/image/scene_15.png
Binary files differ
diff --git a/src/assets/image/scene_16.png b/src/assets/image/scene_16.png
new file mode 100644
index 0000000..f314fcd
--- /dev/null
+++ b/src/assets/image/scene_16.png
Binary files differ
diff --git a/src/assets/image/scene_17.png b/src/assets/image/scene_17.png
new file mode 100644
index 0000000..082f2ac
--- /dev/null
+++ b/src/assets/image/scene_17.png
Binary files differ
diff --git a/src/assets/image/scene_18.png b/src/assets/image/scene_18.png
new file mode 100644
index 0000000..4adcc68
--- /dev/null
+++ b/src/assets/image/scene_18.png
Binary files differ
diff --git a/src/assets/image/scene_19.png b/src/assets/image/scene_19.png
new file mode 100644
index 0000000..69dd6bf
--- /dev/null
+++ b/src/assets/image/scene_19.png
Binary files differ
diff --git a/src/assets/image/scene_20.png b/src/assets/image/scene_20.png
new file mode 100644
index 0000000..d7b09a8
--- /dev/null
+++ b/src/assets/image/scene_20.png
Binary files differ
diff --git a/src/assets/image/scene_4.png b/src/assets/image/scene_4.png
new file mode 100644
index 0000000..5d4a940
--- /dev/null
+++ b/src/assets/image/scene_4.png
Binary files differ
diff --git a/src/assets/image/scene_5.png b/src/assets/image/scene_5.png
new file mode 100644
index 0000000..c90e6a7
--- /dev/null
+++ b/src/assets/image/scene_5.png
Binary files differ
diff --git a/src/assets/image/scene_6.png b/src/assets/image/scene_6.png
new file mode 100644
index 0000000..6f7ab7a
--- /dev/null
+++ b/src/assets/image/scene_6.png
Binary files differ
diff --git a/src/assets/scene-icon.js b/src/assets/scene-icon.js
new file mode 100644
index 0000000..446fec7
--- /dev/null
+++ b/src/assets/scene-icon.js
@@ -0,0 +1,43 @@
+import scene_1 from '@/assets/image/scene_1.png';
+import scene_4 from '@/assets/image/scene_4.png';
+import scene_5 from '@/assets/image/scene_5.png';
+import scene_6 from '@/assets/image/scene_6.png';
+import scene_15 from '@/assets/image/scene_15.png';
+import scene_16 from '@/assets/image/scene_16.png';
+import scene_17 from '@/assets/image/scene_17.png';
+import scene_18 from '@/assets/image/scene_18.png';
+import scene_19 from '@/assets/image/scene_19.png';
+import scene_20 from '@/assets/image/scene_20.png';
+
+function sceneIcon(type) {
+  switch (type + '') {
+    case '1':
+      return scene_1;
+    case '2':
+      return scene_1;
+    case '3':
+      return scene_1;
+    case '4':
+      return scene_4;
+    case '5':
+      return scene_5;
+    case '6':
+      return scene_6;
+    case '15':
+      return scene_15;
+    case '16':
+      return scene_16;
+    case '17':
+      return scene_17;
+    case '18':
+      return scene_18;
+    case '19':
+      return scene_19;
+    case '20':
+      return scene_20;
+    default:
+      return scene_1;
+  }
+}
+
+export { sceneIcon };
diff --git a/src/components.d.ts b/src/components.d.ts
index 2b04de3..dfd2932 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -63,6 +63,7 @@
     ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
+    ElScroll: typeof import('element-plus/es')['ElScroll']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
diff --git a/src/components/list-item/ItemMonitorObj.vue b/src/components/list-item/ItemMonitorObj.vue
index 51f1ecf..128c5fc 100644
--- a/src/components/list-item/ItemMonitorObj.vue
+++ b/src/components/list-item/ItemMonitorObj.vue
@@ -1,24 +1,53 @@
 <template>
   <!-- <el-card shadow="hover"> -->
-  <div class="wrapper">
+  <div :class="statusClass + ' wrapper'">
     <div>
-      <el-text>{{ item.displayid }}銆�</el-text>
-      <el-text truncated class="w-250px">{{ item.sensename }}</el-text>
+      <!-- <el-text>{{ item.displayid }}銆�</el-text> -->
+      <el-text tag="b" class="text-line-2">
+        {{ item.displayid + '銆�' + item.sensename }}
+      </el-text>
     </div>
-    <!-- <div>
-      <el-text>鍦板潃锛歿{ item.location }}</el-text>
-    </div> -->
+    <div>
+      <el-text truncated class="w-250px" type="info">
+        <el-icon><LocationInformation /></el-icon>
+        {{ item.scene.location }}
+      </el-text>
+    </div>
     <el-row justify="space-between" style="margin-top: 4px">
       <el-space>
-        <el-tag type="info" effect="plain" size="small">
+        <el-tag
+          v-if="item.extension1 == '1'"
+          type="success"
+          effect="plain"
+          size="small"
+        >
+          <el-icon :size="8"><Select /></el-icon>
+          <span>宸茬洃绠�</span>
+        </el-tag>
+        <el-tag
+          v-else-if="!item.extension1 || item.extension1 == '0'"
+          type="danger"
+          effect="plain"
+          size="small"
+        >
+          <el-icon :size="8"><CloseBold /></el-icon>
+          <span>鏈洃绠�</span>
+        </el-tag>
+        <el-tag v-else type="primary" effect="plain" size="small">
+          <el-icon :size="8"><Select /></el-icon>
+          <span>宸插鏍�</span>
+        </el-tag>
+        <!-- <el-tag type="info" effect="plain" size="small">
           {{ item.sceneType }}
-        </el-tag>
-        <el-tag type="info" effect="plain" size="small">
-          璁″垝鐩戠锛歿{ item.monitornum }}
-        </el-tag>
-        <el-tag type="info" effect="plain" size="small">
-          宸茬洃绠★細{{ item.extension1 ? item.extension1 : '0' }}
-        </el-tag>
+        </el-tag> -->
+        <el-space>
+          <el-tag type="info" size="small">
+            璁″垝锛歿{ item.monitornum }}娆�
+          </el-tag>
+          <el-tag type="info" size="small">
+            鐩戠锛歿{ item.extension1 ? item.extension1 : '0' }}娆�
+          </el-tag>
+        </el-space>
       </el-space>
       <slot :item="item"></slot>
       <!-- <el-button size="small" type="success" @click="add">娣诲姞</el-button> -->
@@ -30,7 +59,7 @@
 /**
  * 鐩戠瀵硅薄
  */
-
+import { computed } from 'vue';
 
 const props = defineProps({
   item: {
@@ -40,6 +69,16 @@
 });
 
 const emit = defineEmits(['add']);
+
+const statusClass = computed(() => {
+  if (!props.item.extension1 || props.item.extension1 == '0') {
+    return 'border-bottom-danger';
+  } else if (props.item.extension1 == '1') {
+    return 'border-bottom-success';
+  } else {
+    return 'border-bottom-primary';
+  }
+});
 
 function add() {
   emit('add', props.item);
@@ -51,5 +90,29 @@
   border: 1px solid var(--el-border-color);
   border-radius: var(--el-border-radius-base);
   padding: 4px 8px;
+  box-shadow: var(--el-box-shadow-light);
+}
+
+.text-line-2 {
+  width: 300px;
+  height: 40px;
+  display: -webkit-box;
+  line-clamp: 2;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.border-bottom-success {
+  border-left: 3px solid var(--el-color-success);
+}
+
+.border-bottom-danger {
+  border-left: 3px solid var(--el-color-danger);
+}
+
+.border-bottom-primary {
+  border-left: 3px solid var(--el-color-primary);
 }
 </style>
diff --git a/src/components/map/BaseMap.vue b/src/components/map/BaseMap.vue
index 2da91ff..11e34ed 100644
--- a/src/components/map/BaseMap.vue
+++ b/src/components/map/BaseMap.vue
@@ -3,12 +3,15 @@
 </template>
 
 <script setup>
-import { onMounted } from 'vue';
-import { createMap } from '@/utils/map/index_old';
+import { onMounted, onUnmounted } from 'vue';
+import { createMap, map } from '@/utils/map/index';
 onMounted(() => {
   // 楂樺痉鍦板浘鍒濆鍖�
   createMap('container');
 });
+onUnmounted(() => {
+  map?.destroy();
+});
 </script>
 <style>
 #container {
diff --git a/src/components/map/SceneMap.vue b/src/components/map/SceneMap.vue
index 60e7038..7994a7f 100644
--- a/src/components/map/SceneMap.vue
+++ b/src/components/map/SceneMap.vue
@@ -1,12 +1,42 @@
 <template>
-  <div style="width: 70vw; height: 500px; background-color: aliceblue">
-    <BaseMap></BaseMap>
-  </div>
+  <BaseMap></BaseMap>
 </template>
 <script setup>
+import { watch } from 'vue';
+import { map, onMapMounted } from '@/utils/map/index';
+import marks from '@/utils/map/marks';
+import { sceneIcon } from '@/assets/scene-icon';
 const props = defineProps({
   // 鍦烘櫙鐐逛綅淇℃伅
   data: Array
 });
+
+var markViewList = [];
+
+watch(
+  () => props.data,
+  (nV, oV) => {
+    if (nV != oV) {
+      drawSceneMarks();
+    }
+  },
+  { immediate: true }
+);
+
+function drawSceneMarks() {
+  onMapMounted(() => {
+    markViewList = [];
+    props.data.forEach((d) => {
+      const mark = marks.createMarker({
+        position: [d.longitude, d.latitude],
+        icon: sceneIcon(d.typeid),
+        label: d.name,
+        extData: d.guid
+      });
+      markViewList.push(mark);
+    });
+    map.setFitView(markViewList);
+  });
+}
 </script>
 <style scoped></style>
diff --git a/src/utils/map/index.js b/src/utils/map/index.js
new file mode 100644
index 0000000..fe8b0ba
--- /dev/null
+++ b/src/utils/map/index.js
@@ -0,0 +1,114 @@
+import AMapLoader from '@amap/amap-jsapi-loader';
+
+var mapInitDone = false;
+var onMapMountedEvents = [];
+
+var AMap;
+// 鍦板浘瀵硅薄
+var map;
+// 鍗槦鍥惧眰
+var satellite;
+// 榧犳爣缁樺浘
+var mouseTool;
+// 3D鍥惧眰
+var object3Dlayer;
+// 鍦板浘鎷栧姩鐘舵��
+var isDragging = false;
+
+// 鍦板浘鍔犺浇瀹屾垚瑙﹀彂
+function onMapMounted(...events) {
+  if (mapInitDone) {
+    events.forEach((e) => {
+      e();
+    });
+  } else {
+    onMapMountedEvents = onMapMountedEvents.concat(events);
+  }
+}
+
+function createMap(id) {
+  AMapLoader.load({
+    key: '520c5e5cf44c7793104e500cbf0ed711', // 鐢宠濂界殑Web绔紑鍙戣�匥ey锛岄娆¤皟鐢� load 鏃跺繀濉�
+    version: '2.0', // 鎸囧畾瑕佸姞杞界殑 JS API 鐨勭増鏈紝缂虹渷鏃堕粯璁や负 1.4.15
+    // 闇�瑕佷娇鐢ㄧ殑鐨勬彃浠跺垪琛紝濡傛瘮渚嬪昂'AMap.Scale'绛�
+    plugins: [
+      'AMap.ElasticMarker',
+      'AMap.ControlBar',
+      'AMap.ToolBar',
+      'AMap.Scale',
+      // 'AMap.DragRoute',
+      // 'AMap.MouseTool',
+      // 'AMap.PolygonEditor'
+    ]
+  })
+    .then((_AMap) => {
+      AMap = _AMap;
+      _initMap(id);
+      mapInitDone = true;
+      onMapMountedEvents.forEach((e) => {
+        e();
+      });
+      onMapMountedEvents = [];
+    })
+    .catch((e) => {
+      console.log(e);
+    });
+}
+
+function _initMap(elementId) {
+  map = new AMap.Map(elementId, {
+    // mapStyle: 'amap://styles/e1e78509de64ddcd2efb4cb34c6fae2a',
+    features: ['bg', 'road'],
+    pitch: 45, // 鍦板浘淇话瑙掑害锛屾湁鏁堣寖鍥� 0 搴�- 83 搴�
+    viewMode: '2D', // 鍦板浘妯″紡
+    resizeEnable: true,
+    center: [121.6039283, 31.25295567],
+    zooms: [2, 26],
+    zoom: 14
+  });
+  // map = new AMap.Map(elementId);
+
+  // 娣诲姞鍗槦鍦板浘
+  satellite = new AMap.TileLayer.Satellite();
+  satellite.hide();
+  map.add([satellite]);
+
+  // _initMouseTool();
+  // _init3DLayer();
+  // _initDragEvent();
+}
+
+// 榧犳爣缁樺浘鍒濆鍖�
+function _initMouseTool() {
+  mouseTool = new AMap.MouseTool(map);
+}
+
+// 3D鍥惧眰鍒濆鍖�
+function _init3DLayer() {
+  object3Dlayer = new AMap.Object3DLayer();
+  map.add(object3Dlayer);
+}
+
+// 璁剧疆鍦板浘鎷栨嫿鐩戝惉浜嬩欢
+function _initDragEvent() {
+  let dragEndEvent;
+  map.on('dragstart', () => {
+    clearTimeout(dragEndEvent);
+    isDragging = true;
+  });
+  map.on('dragend', function () {
+    dragEndEvent = setTimeout(() => {
+      isDragging = false;
+    }, 8000);
+  });
+}
+
+export {
+  createMap,
+  onMapMounted,
+  map,
+  AMap,
+  mouseTool,
+  object3Dlayer,
+  isDragging
+};
diff --git a/src/utils/map/marks.js b/src/utils/map/marks.js
index a72dcdf..bf01656 100644
--- a/src/utils/map/marks.js
+++ b/src/utils/map/marks.js
@@ -2,7 +2,7 @@
  * 楂樺痉鍦板浘鐐规爣璁扮粯鍒剁浉鍏�
  */
 
-import { map } from './index_old';
+import { map, AMap } from './index';
 import { useToolboxStore } from '@/stores/toolbox';
 
 const toolboxStore = useToolboxStore();
@@ -25,7 +25,7 @@
     for (let i = 0; i < lnglats.length; i++) {
       data.push({
         lnglat: lnglats[i], //鐐规爣璁颁綅缃�
-        name: `${fDatas.times[i]}<br/>${_factor.factorName}: ${_factor.datas[i].factorData} mg/m鲁`,
+        name: `${fDatas.times[i]}<br/>${_factor.factorName}: ${_factor.datas[i].factorData} 渭g/m鲁`,
         id: i
       });
     }
@@ -34,12 +34,12 @@
     var styleObject = {
       url: 'https://a.amap.com/jsapi_demos/static/images/mass1.png',
       // url: './asset/mipmap/ic_up_white.png', // 鍥炬爣鍦板潃
-      // eslint-disable-next-line no-undef
+
       size: new AMap.Size(11, 11), // 鍥炬爣澶у皬
-      // eslint-disable-next-line no-undef
+
       anchor: new AMap.Pixel(5, 5) // 鍥炬爣鏄剧ず浣嶇疆鍋忕Щ閲忥紝鍩哄噯鐐逛负鍥炬爣宸︿笂瑙�
     };
-    // eslint-disable-next-line no-undef
+
     var massMarks = new AMap.MassMarks(data, {
       zIndex: 5, // 娴烽噺鐐瑰浘灞傚彔鍔犵殑椤哄簭
       zooms: [15, 18], // 鍦ㄦ寚瀹氬湴鍥剧缉鏀剧骇鍒寖鍥村唴灞曠ず娴烽噺鐐瑰浘灞�
@@ -50,11 +50,11 @@
       // 3. 鑷畾涔夌偣鍑讳簨浠�
       onClick(i);
     });
-    // eslint-disable-next-line no-undef
+
     var marker = new AMap.Marker({
       content: ' ',
       map: map,
-      // eslint-disable-next-line no-undef
+
       offset: new AMap.Pixel(13, 12)
     });
     var timeout;
@@ -86,8 +86,7 @@
    * @param {boolean} collision 鏍囨敞閬胯
    * @returns
    */
-  createLabelMarks(img, dataList, collision = true) {
-    // eslint-disable-next-line no-undef
+  createLabelMarks(img, dataList, collision = true, showTxt = true) {
     const layer = new AMap.LabelsLayer({
       zooms: [3, 20],
       zIndex: 1000,
@@ -119,7 +118,7 @@
           retina: true
         },
         text: {
-          content: data.name,
+          content: showTxt ? data.name : '',
           direction: 'top',
           offset: [0, -5],
           style: {
@@ -136,7 +135,6 @@
         index: i
       };
 
-      // eslint-disable-next-line no-undef
       var labelMarker = new AMap.LabelMarker(curData);
 
       // markers.push(labelMarker);
@@ -145,5 +143,21 @@
     }
 
     return layer;
+  },
+
+  createMarker({ position, icon, label, extData }) {
+    const marker = new AMap.Marker({
+      position: position,
+      offset: new AMap.Pixel(-10, -10),
+      icon: icon, //娣诲姞 icon 鍥炬爣 URL
+      title: label,
+      label: {
+        content: label,
+        direction: 'bottom'
+      },
+      extData
+    });
+    map.add(marker);
+    return marker;
   }
 };
diff --git a/src/views/fysp/task/MonitorObjEdit.vue b/src/views/fysp/task/MonitorObjEdit.vue
index 3479166..219bc98 100644
--- a/src/views/fysp/task/MonitorObjEdit.vue
+++ b/src/views/fysp/task/MonitorObjEdit.vue
@@ -1,5 +1,5 @@
 <template>
-  <el-affix :offset="60" target=".el-main">
+  <!-- <el-affix :offset="60" target=".el-main"> -->
     <div class="page-header">
       <el-page-header @back="goBack">
         <template #content>
@@ -19,7 +19,7 @@
       </el-page-header>
       <el-divider />
     </div>
-  </el-affix>
+  <!-- </el-affix> -->
   <CompMonitorObjEdit
     ref="objEditRef"
     :task="task"
diff --git a/src/views/fysp/task/TaskManage.vue b/src/views/fysp/task/TaskManage.vue
index 24129b6..07d98d9 100644
--- a/src/views/fysp/task/TaskManage.vue
+++ b/src/views/fysp/task/TaskManage.vue
@@ -43,6 +43,7 @@
                   <CompMonitorPlan
                     ref="planRef"
                     :task="curTask.data"
+                    :day-task-list="dayTaskList"
                     @date-change="onDateChange"
                   ></CompMonitorPlan>
                 </el-col>
@@ -51,7 +52,7 @@
                     create
                     v-model="curSubTaskList"
                     :loading="subTaskLoading"
-                    :create-loading="daytaskLoading"
+                    :create-loading="daytaskCreateLoading"
                     height="56vh"
                     @add="handleAddSubtask"
                     @submit="handleSubtaskSubmit"
@@ -59,9 +60,9 @@
                 </el-col>
               </el-row>
             </el-tab-pane>
-            <!-- <el-tab-pane label="鐩戠鍦板浘" name="second">
-              <CompTaskMap></CompTaskMap>
-            </el-tab-pane> -->
+            <el-tab-pane label="鐩戠鍦板浘" name="second">
+              <CompTaskMap :plans="curMonitorObjList"></CompTaskMap>
+            </el-tab-pane>
           </el-tabs>
         </el-row>
         <el-divider></el-divider>
@@ -167,6 +168,9 @@
       showMonitorObjList: [],
       //褰撳墠閫変腑鐨勪换鍔�
       curTask: {},
+      //褰撳墠閫変腑鐨勬棩浠诲姟
+      curDayTaskList: [],
+      daytaskLoading: false,
       //鎿嶄綔鎸夐挳
       buttons: [
         {
@@ -186,7 +190,7 @@
       // 褰撳墠閫夋嫨鐨勬棩浠诲姟
       curDayTask: {},
       curDay: undefined,
-      daytaskLoading: false,
+      daytaskCreateLoading: false,
       // 褰撳墠閫夋嫨鐨勬棩浠诲姟涓嬬殑瀛愪换鍔�
       curSubTaskList: undefined,
       subTaskLoading: false,
@@ -270,7 +274,18 @@
         })
         .finally(() => {
           this.mainLoading = false;
+          this.fetchDayTasks();
         });
+    },
+    fetchDayTasks() {
+      // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
+      this.dayTaskLoading = true;
+      return taskApi
+        .fetchDayTasks(this.curTask.data.tguid)
+        .then((res) => {
+          this.dayTaskList = res;
+        })
+        .finally(() => (this.dayTaskLoading = false));
     },
     editTask() {
       this.$router.push({
@@ -340,7 +355,7 @@
         _dayTask.settime = dayjs().toDate();
         _dayTask.t1stverifytime = dayjs().toDate();
         _dayTask.runingstatus = '鏈墽琛�';
-        this.daytaskLoading = true;
+        this.daytaskCreateLoading = true;
         taskApi
           .putTask(_dayTask)
           .then((res) => {
@@ -356,7 +371,7 @@
             this.subTaskDrawer = true;
             this.handleSubtaskSubmit();
           })
-          .finally(() => (this.daytaskLoading = false));
+          .finally(() => (this.daytaskCreateLoading = false));
       }
     }
   },
diff --git a/src/views/fysp/task/components/CompMonitorObj.vue b/src/views/fysp/task/components/CompMonitorObj.vue
index 0047d9f..65da3fe 100644
--- a/src/views/fysp/task/components/CompMonitorObj.vue
+++ b/src/views/fysp/task/components/CompMonitorObj.vue
@@ -1,21 +1,45 @@
 <template>
   <div class="monitor-obj-wrapper">
     <el-affix v-if="affix" :offset="60" target=".monitor-obj-wrapper">
-      <div>
-        <el-segmented
+      <el-scrollbar class="p-b-8" always>
+        <!-- <el-segmented
           :model-value="activeName"
           :options="activeTabs"
           @change="tabChange"
-        />
-      </div>
+        /> -->
+        <el-tabs v-model="activeName" @tab-change="tabChange">
+          <el-tab-pane
+            v-for="item in activeTabs"
+            :key="item"
+            :label="item"
+            :name="item"
+          ></el-tab-pane>
+        </el-tabs>
+      </el-scrollbar>
     </el-affix>
-    <div v-else>
-      <el-segmented
+    <el-scrollbar class="" always v-else>
+      <!-- <el-segmented
         :model-value="activeName"
         :options="activeTabs"
         @change="tabChange"
-      />
-    </div>
+      /> -->
+      <el-tabs v-model="activeName" @tab-change="tabChange">
+        <el-tab-pane
+          v-for="item in activeTabs"
+          :key="item"
+          :label="item"
+          :name="item"
+        ></el-tab-pane>
+      </el-tabs>
+    </el-scrollbar>
+    <el-space size="large">
+      <el-tag type="info"> 鎬绘暟锛歿{ activeData.length }} </el-tag>
+      <el-checkbox-group v-model="checkList">
+        <el-checkbox label="鏈洃绠�" :value="0" />
+        <el-checkbox label="宸茬洃绠�" :value="1" />
+        <el-checkbox label="宸插鏍�" :value="2" />
+      </el-checkbox-group>
+    </el-space>
     <el-scrollbar :height="height">
       <el-space wrap>
         <ItemMonitorObj v-for="obj in activeData" :key="obj.movid" :item="obj">
@@ -60,7 +84,7 @@
     },
     btnType: {
       type: String,
-      default: 'danger'
+      default: 'default'
     },
     // 澶撮儴閫夐」鏄惁鍚搁《
     affix: Boolean,
@@ -70,16 +94,34 @@
   data() {
     return {
       activeName: defaultTabName,
-      tabs: []
+      tabs: [],
+      checkList: [0, 1, 2]
     };
   },
   computed: {
     activeData() {
       const list = this.data.filter((v) => {
-        return (
-          this.activeName == defaultTabName || v.sceneType == this.activeName
-        );
-        // return this.tabName == defaultTabName || v.sceneType == this.tabName;
+        // 绛涢�夊綋鍓嶉�夋嫨鐨勬爣绛鹃〉瀵瑰簲鐨勫満鏅被鍨�
+        const b1 =
+          this.activeName == defaultTabName || v.sceneType == this.activeName;
+
+        // 璁$畻鍦烘櫙鐨勭洃绠$姸鎬�
+        let status;
+        if (v.extension1 == undefined || null) {
+          // 鏈洃绠�
+          status = 0;
+        } else {
+          const num = parseInt(v.extension1);
+          if (num >= 2) {
+            // 宸插鏍�
+            status = 2;
+          } else {
+            // 宸茬洃绠★紙1娆★級
+            status = num;
+          }
+        }
+        const b2 = this.checkList.indexOf(status) != -1;
+        return b1 && b2;
       });
       this.$emit('update:showData', list);
       return list;
diff --git a/src/views/fysp/task/components/CompMonitorObjEdit.vue b/src/views/fysp/task/components/CompMonitorObjEdit.vue
index cccd5ea..01de63a 100644
--- a/src/views/fysp/task/components/CompMonitorObjEdit.vue
+++ b/src/views/fysp/task/components/CompMonitorObjEdit.vue
@@ -10,7 +10,7 @@
       </div>
       <el-divider />
       <CompMonitorObj
-        height="68vh"
+        height="62vh"
         :data="curMonitorObjList"
         show-btn
         v-model:tabName="curSceneType"
@@ -21,14 +21,22 @@
       </CompMonitorObj>
     </el-col>
     <el-col :span="8">
-      <el-affix :offset="140">
+      <!-- <el-affix :offset="140"> -->
         <div>
           <el-text>鍙�夊満鏅�</el-text>
         </div>
         <el-divider />
-        <div>
-          <el-segmented v-model="curSceneType" :options="sceneTypeOptions" />
-        </div>
+        <el-scrollbar class="scrollbar-flex-content" always >
+          <!-- <el-segmented v-model="curSceneType" :options="sceneTypeOptions" /> -->
+          <el-tabs v-model="curSceneType">
+            <el-tab-pane
+              v-for="item in sceneTypeOptions"
+              :key="item"
+              :label="item"
+              :name="item"
+            ></el-tab-pane>
+          </el-tabs>
+        </el-scrollbar>
         <FYInfoSearch
           placeholder="璇疯緭鍏ュ満鏅悕绉板叧閿瓧"
           :data="showSceneList"
@@ -56,7 +64,7 @@
             </ItemScene>
           </template>
         </FYInfoSearch>
-      </el-affix>
+      <!-- </el-affix> -->
     </el-col>
   </el-row>
 
@@ -245,7 +253,7 @@
       const total = this.curMonitorObjList.length;
       const map = new Map();
       this.curMonitorObjList.forEach((e) => {
-        const d = e.scene
+        const d = e.scene;
         if (!map.has(d.type)) {
           map.set(d.type, { num: 0 });
         }
@@ -274,7 +282,13 @@
       });
     },
     deleteMov(item) {
-      if (!(item.extension1 == null || item.extension1 == undefined || item.extension1 == '0')) {
+      if (
+        !(
+          item.extension1 == null ||
+          item.extension1 == undefined ||
+          item.extension1 == '0'
+        )
+      ) {
         ElMessage({
           message: '宸茬洃绠″満鏅棤娉曠Щ闄�',
           type: 'error'
@@ -448,4 +462,10 @@
 };
 </script>
 
-<style scoped></style>
+<style scoped>
+.scrollbar-flex-content {
+  display: flex;
+  /* width: fit-content; */
+  height: min-content;
+}
+</style>
diff --git a/src/views/fysp/task/components/CompMonitorPlan.vue b/src/views/fysp/task/components/CompMonitorPlan.vue
index 3294472..c1e2856 100644
--- a/src/views/fysp/task/components/CompMonitorPlan.vue
+++ b/src/views/fysp/task/components/CompMonitorPlan.vue
@@ -1,6 +1,5 @@
 <template>
   <el-calendar
-    v-loading="dayTaskLoading"
     v-model="dateValue"
     :range="dateRange"
     @update:model-value="onDateChange"
@@ -53,6 +52,10 @@
   task: {
     type: Object,
     default: () => {}
+  },
+  dayTaskList: {
+    type: Array,
+    default: () => []
   }
 });
 const emit = defineEmits(['dateChange']);
@@ -98,22 +101,32 @@
 
 /********************** 浠诲姟鏁版嵁 *********************************/
 
-// 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
-const dayTaskLoading = ref(false);
-const dayTaskList = ref([]);
-function fetchDayTasks() {
-  dayTaskLoading.value = true;
-  return taskApi
-    .fetchDayTasks(props.task.tguid)
-    .then((res) => {
-      dayTaskList.value = res;
-      // 濡傛灉宸查�夋棩鏈熷瓨鍦紝鍦ㄩ噸鏂拌幏鍙栨棩浠诲姟缁熻淇℃伅鍚庯紝鍐嶆瑙﹀彂鐐瑰嚮浜嬩欢
-      if (dateValue.value) {
-        onDateChange(dateValue.value) 
-      }
-    })
-    .finally(() => (dayTaskLoading.value = false));
-}
+watch(
+  () => props.dayTaskList,
+  (nV, oV) => {
+    if (nV != oV && dateValue.value) {
+      onDateChange(dateValue.value);
+    }
+  },
+  { immediate: false }
+);
+
+// // 鑾峰彇鏃ヤ换鍔$粺璁′俊鎭�
+// const dayTaskLoading = ref(false);
+// const dayTaskList = ref([]);
+// function fetchDayTasks() {
+//   dayTaskLoading.value = true;
+//   return taskApi
+//     .fetchDayTasks(props.task.tguid)
+//     .then((res) => {
+//       dayTaskList.value = res;
+//       // 濡傛灉宸查�夋棩鏈熷瓨鍦紝鍦ㄩ噸鏂拌幏鍙栨棩浠诲姟缁熻淇℃伅鍚庯紝鍐嶆瑙﹀彂鐐瑰嚮浜嬩欢
+//       if (dateValue.value) {
+//         onDateChange(dateValue.value);
+//       }
+//     })
+//     .finally(() => (dayTaskLoading.value = false));
+// }
 
 // 鏃ヤ换鍔℃暟鎹睍绀�
 const compMap = new Map();
@@ -123,7 +136,7 @@
     return compMap.get(key).value;
   }
   const result = computed(() => {
-    return dayTaskList.value.find((v) => {
+    return props.dayTaskList.find((v) => {
       return dayjs(v.date).isSame(dayjs(day));
     });
   });
@@ -142,7 +155,7 @@
 // 鎬讳换鍔$粺璁�
 const taskStatistic = computed(() => {
   const res = { total: 0, complete: 0, changed: 0 };
-  dayTaskList.value.forEach((e) => {
+  props.dayTaskList.forEach((e) => {
     res.total += e.totalTaskNum;
     res.complete += e.completeTaskNum;
     res.changed += e.changedTaskNum;
@@ -151,17 +164,17 @@
 });
 /********************** 鍒濆鍖� *********************************/
 
-watch(
-  () => props.task,
-  (nV) => {
-    if (nV && nV.tguid) {
-      fetchDayTasks();
-    }
-  },
-  { immediate: true }
-);
+// watch(
+//   () => props.task,
+//   (nV) => {
+//     if (nV && nV.tguid) {
+//       fetchDayTasks();
+//     }
+//   },
+//   { immediate: true }
+// );
 
-defineExpose({ fetchDayTasks });
+// defineExpose({ fetchDayTasks });
 </script>
 <style scoped>
 .li-01 {
diff --git a/src/views/fysp/task/components/CompTaskMap.vue b/src/views/fysp/task/components/CompTaskMap.vue
index fb00bae..9079ab7 100644
--- a/src/views/fysp/task/components/CompTaskMap.vue
+++ b/src/views/fysp/task/components/CompTaskMap.vue
@@ -1,8 +1,25 @@
 <template>
-  <SceneMap></SceneMap>
+  <div style="width: 70vw; height: 600px; background-color: aliceblue">
+    <SceneMap :data="scenes"></SceneMap>
+  </div>
 </template>
-
 <script setup>
+import { computed } from 'vue';
+const props = defineProps({
+  // 鍦烘櫙璁″垝
+  plans: {
+    type: Array,
+    default: () => []
+  },
+  dayTasks: {
+    type: Array,
+    default: () => []
+  }
+});
 
-
-</script>
\ No newline at end of file
+const scenes = computed(() => {
+  return props.plans.map((p) => {
+    return p.scene;
+  });
+});
+</script>
diff --git a/vite.config.js b/vite.config.js
index 121fef6..87f98fa 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -24,10 +24,10 @@
       resolvers: [
         ElementPlusResolver({
           importStyle: 'sass'
-        }),
+        })
       ],
-      dts: 'src/components.d.ts',
-    }),
+      dts: 'src/components.d.ts'
+    })
     // ElementPlus({
     //   useSource: true,
     // }),
@@ -42,8 +42,8 @@
 
     alias: [
       { find: /^@\//, replacement: `${pathSrc}/` },
-      { find: /^~/, replacement: `` },
-    ],
+      { find: /^~/, replacement: `` }
+    ]
     // extensions: ['.js', '.mjs', '.vue', '.json', '.less', '.css']
   },
   build: {
@@ -52,14 +52,14 @@
       input: path.resolve(__dirname, 'index.html'),
       output: {
         chunkFileNames: 'js/[name].[hash].js',
-        entryFileNames: 'js/[name].[hash].js',
+        entryFileNames: 'js/[name].[hash].js'
         // assetFileNames: "assets/[name].[hash].[ext]",
-      },
-    },
+      }
+    }
   },
   css: {
     postcss: {
-      plugins: [autoprefixer],
+      plugins: [autoprefixer]
     },
     preprocessorOptions: {
       // less: {
@@ -67,11 +67,12 @@
       //   additionalData: `@import "${path.resolve(__dirname, 'src/styles/variable.less')}";`
       // },
       scss: {
-        additionalData: `@use "@/styles/element/index.scss" as *;`,
-      },
-    },
+        additionalData: `@use "@/styles/element/index.scss" as *;`
+      }
+    }
   },
   server: {
-    host: '0.0.0.0'
+    host: '0.0.0.0',
+    // port: 5174
   }
 });

--
Gitblit v1.9.3