From 63d9a9c62fd34f4b48a157e0bc57dd82ee09a197 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期四, 27 十一月 2025 17:36:12 +0800
Subject: [PATCH] 2025.11.27

---
 src/components/iconfont/index.js                     |    5 
 src/components/list-item/ItemScene.vue               |    3 
 src/components.d.ts                                  |   15 +
 src/components/SideList.vue                          |    3 
 src/components/ToolBar.vue                           |   17 -
 src/views/HomePage.vue                               |    2 
 src/constants/menu.js                                |   33 ++
 src/components/iconfont/IconPrinter.vue              |    6 
 src/utils/doc.js                                     |   22 
 public/工地巡查单据模板-简版.docx                              |    0 
 src/assets/iconfont/iconfont.js                      |   70 +++++
 src/components/list-item/ItemMonitorObj.vue          |    6 
 src/components/map/BaseMap.vue                       |    8 
 src/utils/map/index.js                               |    1 
 src/components/core/SiderMenu.vue                    |    4 
 src/views/fysp/scene/SceneInspectFile.vue            |  145 +++++-----
 src/components/map/SceneMap.vue                      |  206 ++++++++++++---
 public/现场监管场景信息导入模板.xlsx                             |    0 
 src/views/fysp/task/components/CompTaskMap.vue       |    8 
 src/views/fysp/task/components/CompSubTaskSelect.vue |    9 
 src/views/fysp/task/components/CompMonitorObj.vue    |    5 
 src/utils/map/marks.js                               |    2 
 /dev/null                                            |    0 
 src/components/iconfont/SvgIcon.vue                  |   42 +++
 src/main.js                                          |    9 
 src/composables/messageBox.js                        |    2 
 src/views/fysp/config/DomainCatalog.vue              |   25 +
 src/components/list-item/ItemSubTask.vue             |    6 
 src/views/fysp/support/JingAnNightConstruction.vue   |   24 
 src/components/core/Header.vue                       |   13 
 src/views/fysp/task/components/CompSubTaskList.vue   |   30 +-
 31 files changed, 512 insertions(+), 209 deletions(-)

diff --git "a/public/~$\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx" "b/public/~$\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx"
deleted file mode 100644
index fa96a92..0000000
--- "a/public/~$\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx"
+++ /dev/null
Binary files differ
diff --git "a/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx" "b/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx"
index b02fcab..0041525 100644
--- "a/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx"
+++ "b/public/\345\267\245\345\234\260\345\267\241\346\237\245\345\215\225\346\215\256\346\250\241\346\235\277-\347\256\200\347\211\210.docx"
Binary files differ
diff --git "a/public/\347\216\260\345\234\272\347\233\221\347\256\241\345\234\272\346\231\257\344\277\241\346\201\257\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/public/\347\216\260\345\234\272\347\233\221\347\256\241\345\234\272\346\231\257\344\277\241\346\201\257\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
index 9ed8888..0ad502b 100644
--- "a/public/\347\216\260\345\234\272\347\233\221\347\256\241\345\234\272\346\231\257\344\277\241\346\201\257\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
+++ "b/public/\347\216\260\345\234\272\347\233\221\347\256\241\345\234\272\346\231\257\344\277\241\346\201\257\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js
new file mode 100644
index 0000000..e548fd4
--- /dev/null
+++ b/src/assets/iconfont/iconfont.js
@@ -0,0 +1,70 @@
+(window._iconfont_svg_string_5068051 =
+  '<svg><symbol id="icon-element-ui_printer" viewBox="0 0 1024 1024"><path d="M249.856 774.144H95.232c-6.827 0-12.117-0.341-15.872-1.024s-6.997-1.707-9.728-3.072c-5.461-3.413-9.557-7.509-12.288-12.288-1.365-2.731-2.389-5.973-3.072-9.728-0.683-3.755-1.024-9.045-1.024-15.872V375.808c0-21.163 1.195-37.205 3.584-48.128 2.389-10.923 5.632-20.139 9.728-27.648 8.875-15.701 21.163-27.989 36.864-36.864 7.509-4.096 16.725-7.339 27.648-9.728 10.923-2.389 26.965-3.584 48.128-3.584h70.656V53.248h524.288v196.608H844.8c21.163 0 37.205 1.195 48.128 3.584 10.923 2.389 20.139 5.632 27.648 9.728 15.701 8.875 27.989 21.163 36.864 36.864 4.096 7.509 7.339 16.725 9.728 27.648 2.389 10.923 3.584 26.965 3.584 48.128V732.16c0 6.827-0.341 12.117-1.024 15.872s-1.707 6.997-3.072 9.728c-3.413 5.461-7.509 9.557-12.288 12.288-2.731 1.365-5.973 2.389-9.728 3.072-3.755 0.683-9.045 1.024-15.872 1.024H774.144v196.608H249.856V774.144z m65.536-196.608v327.68h393.216v-327.68H315.392z m-65.536 131.072V512h524.288v196.608h131.072v-332.8c0-14.336-0.341-24.576-1.024-30.72s-2.219-11.093-4.608-14.848a29.687 29.687 0 0 0-9.216-9.216c-3.755-2.389-8.704-3.925-14.848-4.608-6.144-0.683-16.384-1.024-30.72-1.024H179.2c-14.336 0-24.576 0.341-30.72 1.024s-11.093 2.219-14.848 4.608a29.687 29.687 0 0 0-9.216 9.216c-2.389 3.755-3.925 8.704-4.608 14.848-0.683 6.144-1.024 16.384-1.024 30.72v332.8h131.072z m65.536-458.752h393.216V118.784H315.392v131.072z m-65.536 131.072h65.536v65.536h-65.536v-65.536z m131.072 0h65.536v65.536h-65.536v-65.536z"  ></path></symbol></svg>'),
+  ((n) => {
+    var e = (t = (t = document.getElementsByTagName('script'))[
+        t.length - 1
+      ]).getAttribute('data-injectcss'),
+      t = t.getAttribute('data-disable-injectsvg');
+    if (!t) {
+      var i,
+        o,
+        c,
+        s,
+        d,
+        a = function (e, t) {
+          t.parentNode.insertBefore(e, t);
+        };
+      if (e && !n.__iconfont__svg__cssinject__) {
+        n.__iconfont__svg__cssinject__ = !0;
+        try {
+          document.write(
+            '<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>'
+          );
+        } catch (e) {
+          console && console.log(e);
+        }
+      }
+      (i = function () {
+        var e,
+          t = document.createElement('div');
+        (t.innerHTML = n._iconfont_svg_string_5068051),
+          (t = t.getElementsByTagName('svg')[0]) &&
+            (t.setAttribute('aria-hidden', 'true'),
+            (t.style.position = 'absolute'),
+            (t.style.width = 0),
+            (t.style.height = 0),
+            (t.style.overflow = 'hidden'),
+            (t = t),
+            (e = document.body).firstChild
+              ? a(t, e.firstChild)
+              : e.appendChild(t));
+      }),
+        document.addEventListener
+          ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState)
+            ? setTimeout(i, 0)
+            : ((o = function () {
+                document.removeEventListener('DOMContentLoaded', o, !1), i();
+              }),
+              document.addEventListener('DOMContentLoaded', o, !1))
+          : document.attachEvent &&
+            ((c = i),
+            (s = n.document),
+            (d = !1),
+            l(),
+            (s.onreadystatechange = function () {
+              'complete' == s.readyState &&
+                ((s.onreadystatechange = null), r());
+            }));
+    }
+    function r() {
+      d || ((d = !0), c());
+    }
+    function l() {
+      try {
+        s.documentElement.doScroll('left');
+      } catch (e) {
+        return void setTimeout(l, 50);
+      }
+      r();
+    }
+  })(window);
diff --git a/src/components.d.ts b/src/components.d.ts
index 086570b..6fe00cd 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -14,12 +14,14 @@
     CompQuickSet: typeof import('./components/search-option/CompQuickSet.vue')['default']
     Content: typeof import('./components/core/Content.vue')['default']
     ElAffix: typeof import('element-plus/es')['ElAffix']
+    ElAlert: typeof import('element-plus/es')['ElAlert']
     ElAside: typeof import('element-plus/es')['ElAside']
     ElAvatar: typeof import('element-plus/es')['ElAvatar']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
     ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
     ElCalendar: typeof import('element-plus/es')['ElCalendar']
     ElCard: typeof import('element-plus/es')['ElCard']
     ElCascader: typeof import('element-plus/es')['ElCascader']
@@ -36,6 +38,9 @@
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
+    ElDropdown: typeof import('element-plus/es')['ElDropdown']
+    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
@@ -51,9 +56,16 @@
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
     ElOption: typeof import('element-plus/es')['ElOption']
+    ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
+    ElPagination: typeof import('element-plus/es')['ElPagination']
+    ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
     ElPopover: typeof import('element-plus/es')['ElPopover']
+    ElRadio: typeof import('element-plus/es')['ElRadio']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSpace: typeof import('element-plus/es')['ElSpace']
     ElStep: typeof import('element-plus/es')['ElStep']
@@ -67,6 +79,7 @@
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
+    ElTransfer: typeof import('element-plus/es')['ElTransfer']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     Footer: typeof import('./components/core/Footer.vue')['default']
@@ -92,6 +105,7 @@
     FYSearchBar: typeof import('./components/search-option/FYSearchBar.vue')['default']
     FYTable: typeof import('./components/table/FYTable.vue')['default']
     Header: typeof import('./components/core/Header.vue')['default']
+    IconPrinter: typeof import('./components/iconfont/IconPrinter.vue')['default']
     ItemDevice: typeof import('./components/list-item/ItemDevice.vue')['default']
     ItemMonitorObj: typeof import('./components/list-item/ItemMonitorObj.vue')['default']
     ItemScene: typeof import('./components/list-item/ItemScene.vue')['default']
@@ -104,6 +118,7 @@
     SearchBar: typeof import('./components/SearchBar.vue')['default']
     SideList: typeof import('./components/SideList.vue')['default']
     SiderMenu: typeof import('./components/core/SiderMenu.vue')['default']
+    SvgIcon: typeof import('./components/iconfont/SvgIcon.vue')['default']
     ToolBar: typeof import('./components/ToolBar.vue')['default']
   }
   export interface ComponentCustomProperties {
diff --git a/src/components/SideList.vue b/src/components/SideList.vue
index a3a795c..071fea8 100644
--- a/src/components/SideList.vue
+++ b/src/components/SideList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div style="padding-right: 10px;">
+  <div style="padding-right: 10px">
     <div v-if="legend" class="state-label">
       <el-input
         v-model="filterText"
@@ -47,6 +47,7 @@
         </el-space>
       </el-tooltip>
     </div>
+    <slot name="header" class="state-label"></slot>
     <el-tree
       ref="treeRef"
       class="el-tree"
diff --git a/src/components/ToolBar.vue b/src/components/ToolBar.vue
index 86d046c..918d271 100644
--- a/src/components/ToolBar.vue
+++ b/src/components/ToolBar.vue
@@ -38,22 +38,11 @@
     title: String,
     descriptions: {
       type: Array,
-      default: () => [
-        {
-          name: '',
-          value: ''
-        }
-      ]
+      default: () => []
     },
     buttons: {
       type: Array,
-      default: () => [
-        {
-          name: '',
-          color: 'primary',
-          click: () => {}
-        }
-      ]
+      default: () => []
     }
   }
 };
@@ -63,7 +52,7 @@
   background-color: white;
   height: var(--height-toolbar);
   border-bottom: 1px solid var(--el-color-info-light-7);
-  box-shadow: 6px 4px 4px rgba(0, 0, 0, 0.12);
+  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.12);
   margin-bottom: 4px;
 }
 
diff --git a/src/components/core/Header.vue b/src/components/core/Header.vue
index 3c742e0..4ee1493 100644
--- a/src/components/core/Header.vue
+++ b/src/components/core/Header.vue
@@ -2,9 +2,16 @@
   <el-row align="middle" class="header">
     <el-col :span="12">
       <el-space>
-        <el-button @click="collapsedSider" icon="Fold" circle :class="rotateIcon" />
+        <el-button
+          @click="collapsedSider"
+          icon="ArrowLeftBold"
+          circle
+          :class="rotateIcon"
+        />
         <el-breadcrumb separator="/" style="white-space: nowrap">
-          <el-breadcrumb-item v-for="(t, i) in navTitles" :key="i">{{ t }}</el-breadcrumb-item>
+          <el-breadcrumb-item v-for="(t, i) in navTitles" :key="i">{{
+            t
+          }}</el-breadcrumb-item>
         </el-breadcrumb>
       </el-space>
     </el-col>
@@ -65,7 +72,7 @@
 }
 
 .rotate-icon {
-  transform: rotate(-90deg);
+  transform: rotate(-180deg);
 }
 
 .logout {
diff --git a/src/components/core/SiderMenu.vue b/src/components/core/SiderMenu.vue
index 6419154..9f7df7c 100644
--- a/src/components/core/SiderMenu.vue
+++ b/src/components/core/SiderMenu.vue
@@ -70,7 +70,7 @@
   props: {
     collapse: {
       type: Boolean,
-      default: false
+      default: true
     }
   },
   emits: ['navPage'],
@@ -97,7 +97,7 @@
       return this.sysNames[this.sysIndex].name;
     },
     menus() {
-      return [MENU_FYSP, MENU_FYTZ, MENU_FYPW][this.sysIndex];
+      return [MENU_FYSP(), MENU_FYTZ, MENU_FYPW][this.sysIndex];
     }
   },
   methods: {
diff --git a/src/components/iconfont/IconPrinter.vue b/src/components/iconfont/IconPrinter.vue
new file mode 100644
index 0000000..6802a39
--- /dev/null
+++ b/src/components/iconfont/IconPrinter.vue
@@ -0,0 +1,6 @@
+<template>
+  <SvgIcon
+    icon-class="icon-element-ui_printer"
+    color="var(--el-color-default)"
+  />
+</template>
diff --git a/src/components/iconfont/SvgIcon.vue b/src/components/iconfont/SvgIcon.vue
new file mode 100644
index 0000000..27163ee
--- /dev/null
+++ b/src/components/iconfont/SvgIcon.vue
@@ -0,0 +1,42 @@
+<template>
+  <svg :class="classList" aria-hidden="true">
+    <use :xlink:href="iconName" :fill="color" />
+  </svg>
+</template>
+<script setup>
+import { computed } from 'vue';
+const props = defineProps({
+  className: {
+    type: String,
+    default: ''
+  },
+  iconClass: {
+    type: String,
+    required: true
+  },
+  color: {
+    type: String,
+    default: '#409eff'
+  },
+  size: {
+    type: String,
+    default: '20px'
+  }
+});
+const classList = computed(() => {
+  return ['icon', props.className || ''];
+});
+const iconName = computed(() => {
+  return `#${props.iconClass}`;
+});
+</script>
+<style scoped>
+.icon {
+  /* v-bind鏄疺ue3鎵嶆敮鎸佺殑鍔熻兘锛屽彲浠ュ皢CSS鐨勫�间笌js鐨勫�肩粦瀹� */
+  width: v-bind('props.size');
+  height: v-bind('props.size');
+  position: relative;
+  vertical-align: -2px;
+  fill: currentColor;
+}
+</style>
diff --git a/src/components/iconfont/index.js b/src/components/iconfont/index.js
new file mode 100644
index 0000000..deb1464
--- /dev/null
+++ b/src/components/iconfont/index.js
@@ -0,0 +1,5 @@
+/**
+ * 鍦ㄦ澶勬敞鍐岀殑鍥炬爣缁勪欢锛屽湪鍏ㄥ眬缁勪欢涓彲浠ョ洿鎺ヤ娇鐢�
+ * 鐢ㄦ硶鍜宔lementUI涓殑鍥炬爣缁勪欢鐢ㄦ硶鐩稿悓
+ */
+export {default as IconPrinter} from './IconPrinter.vue';
\ No newline at end of file
diff --git a/src/components/list-item/ItemMonitorObj.vue b/src/components/list-item/ItemMonitorObj.vue
index 128c5fc..e576e4e 100644
--- a/src/components/list-item/ItemMonitorObj.vue
+++ b/src/components/list-item/ItemMonitorObj.vue
@@ -2,13 +2,12 @@
   <!-- <el-card shadow="hover"> -->
   <div :class="statusClass + ' wrapper'">
     <div>
-      <!-- <el-text>{{ item.displayid }}銆�</el-text> -->
       <el-text tag="b" class="text-line-2">
-        {{ item.displayid + '銆�' + item.sensename }}
+        {{ item.displayid + '. ' + item.sensename }}
       </el-text>
     </div>
     <div>
-      <el-text truncated class="w-250px" type="info">
+      <el-text truncated class="w-300px" type="info">
         <el-icon><LocationInformation /></el-icon>
         {{ item.scene.location }}
       </el-text>
@@ -97,6 +96,7 @@
   width: 300px;
   height: 40px;
   display: -webkit-box;
+  line-height: 20px;
   line-clamp: 2;
   -webkit-line-clamp: 2;
   -webkit-box-orient: vertical;
diff --git a/src/components/list-item/ItemScene.vue b/src/components/list-item/ItemScene.vue
index e333f30..a1bad6c 100644
--- a/src/components/list-item/ItemScene.vue
+++ b/src/components/list-item/ItemScene.vue
@@ -2,8 +2,7 @@
   <!-- <el-card shadow="hover"> -->
   <div class="wrapper">
     <div>
-      <el-text>{{ item.index }}銆�</el-text>
-      <el-text>{{ item.name }}</el-text>
+      <el-text>{{ item.index + '. ' + item.name }}</el-text>
     </div>
     <!-- <div>
       <el-text>鍦板潃锛歿{ item.location }}</el-text>
diff --git a/src/components/list-item/ItemSubTask.vue b/src/components/list-item/ItemSubTask.vue
index 20f9ee1..b53fd56 100644
--- a/src/components/list-item/ItemSubTask.vue
+++ b/src/components/list-item/ItemSubTask.vue
@@ -21,7 +21,7 @@
         <div class="text-info">
           <div class="text-label">
             <el-icon class="m-r-4" size="16"><LocationInformation /></el-icon>
-            <span>浠诲姟鍦板潃锛�</span>
+            <span>鍦板潃锛�</span>
           </div>
           {{ item.scenseaddress }}
         </div>
@@ -29,14 +29,14 @@
           <div class="text-label">
             <!-- <el-icon><Clock /></el-icon> -->
             <el-icon class="m-r-4" size="16"><AlarmClock /></el-icon>
-            <span>浠诲姟鏃堕棿锛�</span>
+            <span>鏃堕棿锛�</span>
           </div>
           {{ $fm.formatYMD(item.planstarttime) }}
         </div>
         <div class="text-info">
           <div class="text-label">
             <el-icon class="m-r-4" size="16"><User /></el-icon>
-            浠诲姟浜哄憳锛�
+            浜哄憳锛�
           </div>
           {{ item.executorrealtimes }}
         </div>
diff --git a/src/components/map/BaseMap.vue b/src/components/map/BaseMap.vue
index 11e34ed..d4aa7fb 100644
--- a/src/components/map/BaseMap.vue
+++ b/src/components/map/BaseMap.vue
@@ -17,7 +17,7 @@
 #container {
   position: relative;
   width: 100%;
-  height: 100vh;
+  height: 100%;
   min-height: var(--screen-min-height);
   min-width: var(--screen-min-width);
   z-index: 0px;
@@ -33,8 +33,8 @@
   opacity: 0 !important;
 }
 
-.amap-marker-label {
-  font-size: 13px;
+/* .amap-marker-label {
+  font-size: 14px;
   text-align: center;
   color: white;
   background-color: transparent;
@@ -42,5 +42,5 @@
   border-radius: 2px;
   border: 0px;
   padding: 4px;
-}
+} */
 </style>
diff --git a/src/components/map/SceneMap.vue b/src/components/map/SceneMap.vue
index 3abe4c6..42dede6 100644
--- a/src/components/map/SceneMap.vue
+++ b/src/components/map/SceneMap.vue
@@ -1,14 +1,72 @@
 <template>
   <BaseMap></BaseMap>
-  <el-row class="left-top-wrap">
-    <FYOptionScene
-      label=""
-      :allOption="true"
-      :type="2"
-      v-model:value="scenetype"
-    ></FYOptionScene>
-    <slot name="left-top"></slot>
-  </el-row>
+  <div class="wrap p-events-none">
+    <el-row class="p-events-none">
+      <FYOptionScene
+        class="p-events-auto"
+        label=""
+        :allOption="true"
+        :type="2"
+        v-model:value="scenetype"
+      ></FYOptionScene>
+      <div class="p-events-auto">
+        <slot name="left-top"></slot>
+      </div>
+    </el-row>
+    <el-row
+      class="p-events-none left-wrap"
+      align="bottom"
+      :style="leftCardWrapStyle"
+    >
+      <div
+        ref="refLeftCard"
+        v-show="leftCardShow"
+        class="card-left p-events-auto"
+      >
+        <div><el-text size="large">鍦烘櫙鍒楄〃</el-text></div>
+        <el-scrollbar height="400px" class="scrollbar">
+          <el-row
+            v-for="s in selectedSceneList"
+            :key="s.guid"
+            justify="space-between"
+            class="p-v-4 scene-item"
+          >
+            <el-text truncated style="width: 250px">
+              {{ s.index + '銆�' + s.name }}
+            </el-text>
+            <el-space>
+              <el-icon
+                :color="
+                  s._checked ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)'
+                "
+                @click="locateTo(s)"
+              >
+                <LocationInformation />
+              </el-icon>
+              <el-icon
+                class="cursor-p"
+                :color="
+                  s._visible ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)'
+                "
+                @click="handleVisibleChange(s)"
+              >
+                <View />
+              </el-icon>
+            </el-space>
+          </el-row>
+        </el-scrollbar>
+      </div>
+      <el-button
+        class="close-btn-right p-events-auto"
+        type="primary"
+        plain
+        size="small"
+        :icon="leftCardShow ? 'ArrowLeft' : 'ArrowRight'"
+        @click="leftCardShow = !leftCardShow"
+      ></el-button>
+    </el-row>
+  </div>
+
   <!-- <el-row class="right-wrap">
     <el-col :span="4">
       <el-button>close</el-button>
@@ -17,19 +75,9 @@
       
     </el-col>
   </el-row> -->
-  <el-scrollbar class="right-wrap">
-    <div v-for="s in selectedSceneList" :key="s.guid">
-      <el-checkbox
-        v-model="s._checked"
-        :label="s.name"
-        @change="handleChange(s)"
-      />
-      <!-- <el-text>{{ s.name }}</el-text> -->
-    </div>
-  </el-scrollbar>
 </template>
 <script setup>
-import { ref, watch, computed } from 'vue';
+import { ref, watch, computed, onMounted } from 'vue';
 import { map, onMapMounted } from '@/utils/map/index';
 import marks from '@/utils/map/marks';
 import mapUtil from '@/utils/map/util';
@@ -39,6 +87,17 @@
   data: Array
 });
 
+onMounted(() => {
+  // refLeftCard.value.offsetHeight;
+  // leftCardWrapStyle.value = {
+  //   height: refLeftCard.value.offsetHeight + 'px'
+  // };
+});
+
+const refLeftCard = ref();
+const leftCardShow = ref(true);
+const leftCardWrapStyle = ref();
+
 let allMarkViews = [];
 let markViewList = [];
 
@@ -46,7 +105,7 @@
 
 const selectedSceneList = computed(() => {
   return props.data.filter((v) => {
-    v._checked = true;
+    v._visible = true;
     return (
       scenetype.value == undefined ||
       scenetype.value.value == null ||
@@ -74,16 +133,25 @@
   }
 });
 
-function handleChange(scene) {
+function handleVisibleChange(scene) {
   const mv = markViewList.find((v) => {
     return scene.guid == v.getExtData().guid;
   });
-  if (scene._checked) {
+  scene._visible = !scene._visible;
+  if (scene._visible) {
     map.add(mv);
   } else {
     map.remove(mv);
   }
-  // filterMarkViews();
+}
+
+function locateTo(scene) {
+  const mv = markViewList.find((v) => {
+    return scene.guid == v.getExtData().guid;
+  });
+  if (mv) {
+    mapUtil.setFitView(mv);
+  }
 }
 
 function createSceneMarks() {
@@ -94,28 +162,40 @@
       const mark = marks.createMarker({
         position: [d.longitude, d.latitude],
         img: sceneIcon(d.typeid),
-        // label: d.name,
+        label: '',
         extData: d
       });
+      var timeout;
       // 娣诲姞鐐瑰嚮浜嬩欢
-      mark.on('click', (ev) => {
+      mark.on('mouseover', (ev) => {
+        if (timeout) {
+          clearTimeout(timeout);
+        }
         const _mark = ev.target;
         const _extData = _mark.getExtData();
-        if (_extData._show) {
+        ev.target.setLabel({
+          content: _extData.name
+        });
+        timeout = setTimeout(() => {
           ev.target.setLabel({
             content: ''
-            // direction: 'bottom'
           });
-          _extData._show = false;
-          ev.target.setExtData(_extData);
-        } else {
-          ev.target.setLabel({
-            content: _extData.name
-            // direction: 'bottom'
-          });
-          _extData._show = true;
-          ev.target.setExtData(_extData);
-        }
+        }, 2000);
+        // if (_extData._show) {
+        //   ev.target.setLabel({
+        //     content: ''
+        //     // direction: 'bottom'
+        //   });
+        //   _extData._show = false;
+        //   ev.target.setExtData(_extData);
+        // } else {
+        //   ev.target.setLabel({
+        //     content: _extData.name
+        //     // direction: 'bottom'
+        //   });
+        //   _extData._show = true;
+        //   ev.target.setExtData(_extData);
+        // }
       });
       allMarkViews.push(mark);
     });
@@ -142,7 +222,7 @@
     }
     markViewList = markViewList.filter((v) => {
       const _index = selectedSceneList.value.findIndex((s) => {
-        return s.guid == v.getExtData().guid && s._checked;
+        return s.guid == v.getExtData().guid && s._visible;
       });
       return _index != -1;
     });
@@ -169,20 +249,46 @@
 }
 </script>
 <style scoped>
-.left-top-wrap {
+.wrap {
+  position: absolute;
+  left: 0px;
+  top: 0;
+  width: 100%;
+  height: 100%;
+}
+.left-wrap {
   position: absolute;
   left: 0;
-  top: 0;
+  bottom: 1px;
 }
-.right-wrap {
-  position: absolute;
-  right: 0px;
-  bottom: 0;
-  height: 50%;
+
+.card-left {
   background-color: white;
-  border-radius: 4px;
-  padding: 2px 8px;
-  max-width: 300px;
-  box-shadow: var(--el-box-shadow);
+  /* border-radius: 4px; */
+  width: 316px;
+  /* box-shadow: var(--el-box-shadow); */
+  z-index: 0;
+}
+
+.scrollbar {
+  padding-right: 8px;
+  /* width: 300px; */
+}
+
+.close-btn-right {
+  margin-left: -3px;
+  height: 60px;
+}
+
+.p-events-auto {
+  pointer-events: auto;
+}
+
+.p-events-none {
+  pointer-events: none;
+}
+
+.scene-item {
+  /* background-color: aliceblue; */
 }
 </style>
diff --git a/src/composables/messageBox.js b/src/composables/messageBox.js
index 6cb46f8..a45738c 100644
--- a/src/composables/messageBox.js
+++ b/src/composables/messageBox.js
@@ -34,7 +34,7 @@
       }
       ElMessage({
         message: errStr,
-        type: 'warning',
+        type: 'error',
       });
     });
 }
diff --git a/src/constants/menu.js b/src/constants/menu.js
index 64ea2ac..4e498bc 100644
--- a/src/constants/menu.js
+++ b/src/constants/menu.js
@@ -13,7 +13,7 @@
   });
 }
 
-const MENU_FYSP = [
+const _MENU_FYSP = [
   // {
   //   icon: 'Search',
   //   name: '宸℃煡瀹℃牳',
@@ -164,7 +164,8 @@
       {
         path: '/fysp/config/domainCatalog',
         icon: 'List',
-        name: '鍊煎煙鐩綍'
+        name: '鍊煎煙鐩綍',
+        debug: true
       }
     ]
   },
@@ -259,4 +260,32 @@
   }
 ];
 
+
+const MENU_FYSP = () => {
+  // 娣辨嫹璐濆師濮嬭彍鍗曟暟缁勶紝閬垮厤淇敼鍘熸暟鎹�
+  const menuCopy = JSON.parse(JSON.stringify(_MENU_FYSP));
+  
+  // 閫掑綊澶勭悊鑿滃崟椤�
+  const processMenuItem = (item) => {
+    // 濡傛灉褰撳墠椤规湁children灞炴��
+    if (item.children && Array.isArray(item.children)) {
+      // 鏍规嵁鐜杩囨护children鏁扮粍
+      item.children = item.children.filter(child => {
+        // 閫掑綊澶勭悊瀛愰」鐨刢hildren
+        processMenuItem(child);
+        
+        // 寮�鍙戠幆澧冧繚鐣欐墍鏈夐」锛堝寘鎷琩ebug: true鐨勶級锛岀敓浜х幆澧冭繃婊ゆ帀debug: true鐨勯」
+        // 娉ㄦ剰锛氬彧鏈夎缃簡debug: true鐨勯」鎵嶉渶瑕佸湪闈炲紑鍙戠幆澧冭繃婊�
+        // 濡傛灉娌℃湁debug灞炴�э紝搴旇淇濈暀
+        return import.meta.env.DEV || child.debug !== true;
+      });
+    }
+    return item;
+  };
+  
+  // 澶勭悊鏁翠釜鑿滃崟鏁扮粍
+  return menuCopy.map(processMenuItem);
+};
+
+
 export { MENU_FYSP, MENU_FYTZ, MENU_FYPW, MENU_COMMON };
diff --git a/src/main.js b/src/main.js
index 175bb60..d4cf1d6 100644
--- a/src/main.js
+++ b/src/main.js
@@ -8,6 +8,8 @@
 
 // import 'element-plus/dist/index.css';
 import './assets/main.css';
+import './assets/iconfont/iconfont.js'
+import * as MyIconfont from './components/iconfont';
 
 import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
 import 'element-plus/theme-chalk/src/overlay.scss';
@@ -35,6 +37,13 @@
   app.component(key, component);
 }
 
+// 鍏ㄥ眬娉ㄥ唽鑷畾涔夊浘鏍囩粍浠�
+for (const [key, component] of Object.entries(MyIconfont)) {
+  app.component(key, component);
+}
+
+
+
 app
   .use(pinia)
   .use(router)
diff --git a/src/utils/doc.js b/src/utils/doc.js
index 631fc3c..2127116 100644
--- a/src/utils/doc.js
+++ b/src/utils/doc.js
@@ -311,7 +311,7 @@
   FileSaver.saveAs(blob, zipName);
 }
 
-function print(
+function print({
   ref,
   title,
   style,
@@ -320,23 +320,23 @@
   borderHeadStyle,
   gridStyle,
   css
-) {
+}) {
   printJS({
     printable: ref,
     header: title || null,
     type: type || 'html',
-    // headerStyle:
-    //   'font-size:6px;font-weight:600;text-align:center;padding:15px 0 10px 0;', //鏍囬璁剧疆
+    headerStyle: 
+      'font-size:6px;font-weight:600;text-align:center;padding:15px 0 10px 0;', //鏍囬璁剧疆
     properties: jsonData || [], //json鏁版嵁鍏�
-    gridHeaderStyle:
-      borderHeadStyle ||
-      'font-size:6px;font-weight:400;height:40px;line-height:40px;border: 1px solid #ccc;padding:3px 5px 3px 5px;text-align:center;', //json鏍煎紡琛ㄥご鏍峰紡
-    gridStyle:
-      gridStyle ||
-      'font-size:1px;font-weight:200;border: 1px solid #ccc;padding:3px 5px 3px 5px;text-align:center;', //json鍚勫紡琛ㄥ摜澶
+    // gridHeaderStyle:
+    //   borderHeadStyle ||
+    //   'font-size:6px;font-weight:400;height:40px;line-height:40px;border: 1px solid #ccc;padding:3px 5px 3px 5px;text-align:center;', //json鏍煎紡琛ㄥご鏍峰紡
+    // gridStyle:
+    //   gridStyle ||
+    //   'font-size:1px;font-weight:200;border: 1px solid #ccc;padding:3px 5px 3px 5px;text-align:center;', //json鍚勫紡琛ㄥ摜澶
     scanStyles: false, //涓嶉�傜敤榛樿鏍峰紡
     repeatTableHeader: false, //鎵撳嵃json琛ㄥご鍙樉绀哄湪绗竴椤�
-    style: style || `@page{size:auto;margin: 0cm 1cm 0cm 1cm;}`, //鍘婚櫎椤电湁椤佃剼
+    style: style || `@page{size:A4;margin: -1cm 0cm 0cm 0cm;}`, //鍘婚櫎椤电湁椤佃剼
     css: css || null //css url
   });
 }
diff --git a/src/utils/map/index.js b/src/utils/map/index.js
index fe8b0ba..78b5d3d 100644
--- a/src/utils/map/index.js
+++ b/src/utils/map/index.js
@@ -49,6 +49,7 @@
         e();
       });
       onMapMountedEvents = [];
+      console.log('-------------------map init done');
     })
     .catch((e) => {
       console.log(e);
diff --git a/src/utils/map/marks.js b/src/utils/map/marks.js
index 0c3b428..6ba80b9 100644
--- a/src/utils/map/marks.js
+++ b/src/utils/map/marks.js
@@ -145,7 +145,7 @@
     return layer;
   },
 
-  createMarker({ position, img, label = ' ', extData }) {
+  createMarker({ position, img, label = '', extData }) {
     //鍒涘缓 AMap.Icon 瀹炰緥锛�
     const icon = new AMap.Icon({
       size: new AMap.Size(30, 30), //鍥炬爣灏哄
diff --git a/src/views/HomePage.vue b/src/views/HomePage.vue
index 65add8b..7dde080 100644
--- a/src/views/HomePage.vue
+++ b/src/views/HomePage.vue
@@ -45,7 +45,7 @@
 export default {
   data() {
     return {
-      isCollapsed: false,
+      isCollapsed: true,
       navTitles: [],
       headerHeight: 60,
       mainPadding: 10,
diff --git a/src/views/fysp/config/DomainCatalog.vue b/src/views/fysp/config/DomainCatalog.vue
index 3c9151e..33d3695 100644
--- a/src/views/fysp/config/DomainCatalog.vue
+++ b/src/views/fysp/config/DomainCatalog.vue
@@ -6,9 +6,26 @@
         :items="domainCatalog"
         :loading="sideLoading"
         @item-click="chooseCatalog"
-      ></SideList>
+      >
+        <template #header>
+          <el-row justify="end">
+            <el-button
+              type="primary"
+              icon="CirclePlusFilled"
+              size="small"
+              @click="handelDownload"
+            >
+            </el-button>
+          </el-row>
+        </template>
+      </SideList>
     </template>
     <template #main>
+      <ToolBar
+        class="toolbar-sticky"
+        :title="selectedCatalog?.name"
+        :loading="loading"
+      ></ToolBar>
       <!-- <FormCol> -->
       <el-table
         :data="domainItems"
@@ -204,12 +221,12 @@
 
 // 鍙栨秷缂栬緫
 function cancelEdit(scope) {
+  if (scope.row._isAdd) {
+    domainItems.value.splice(scope.$index, 1);
+  }
   scope.row._isAdd = false;
   scope.row._isEdit = false;
-  domainItems.value.splice(scope.$index, 1);
 }
-
-
 
 function _validate(row) {
   return (
diff --git a/src/views/fysp/scene/SceneInspectFile.vue b/src/views/fysp/scene/SceneInspectFile.vue
index e59d32a..7bec485 100644
--- a/src/views/fysp/scene/SceneInspectFile.vue
+++ b/src/views/fysp/scene/SceneInspectFile.vue
@@ -2,7 +2,7 @@
   <el-dialog
     :model-value="modelValue"
     @update:model-value="handleDialogChange"
-    title="宸℃煡鍗曟嵁涓嬭浇"
+    title="宸℃煡鍗曟嵁涓嬭浇鎵撳嵃"
     class="dialog-wrapper"
     v-loading="loading"
   >
@@ -43,9 +43,9 @@
                 type="default"
                 size="small"
                 class="m-t-4"
+                icon="IconPrinter"
                 @click="handlePreview(item)"
               >
-                棰勮
               </el-button>
             </el-row>
           </el-checkbox>
@@ -54,17 +54,33 @@
     </el-scrollbar>
     <template #footer>
       <div class="dialog-footer">
-        <el-button type="danger" @click="cancel">鍙栨秷</el-button>
-        <el-button type="primary" :loading="docLoading" @click="handelDownload">
-          涓嬭浇
+        <el-button type="danger" @click="cancel" icon="CloseBold"
+          >鍙栨秷</el-button
+        >
+        <el-button
+          type="primary"
+          :loading="docLoading"
+          icon="Download"
+          :disabled="checkList.length == 0"
+          @click="handelDownload"
+        >
+          涓嬭浇鎵�閫�
         </el-button>
-        <el-button type="default" :loading="docLoading" @click="handelPrint">
-          鎵撳嵃
+        <el-button
+          type="default"
+          :loading="docLoading"
+          :disabled="checkList.length == 0"
+          @click="handlePreview()"
+          icon="IconPrinter"
+        >
+          <el-space>
+            鎵撳嵃鎵�閫�
+          </el-space>
         </el-button>
       </div>
     </template>
   </el-dialog>
-  <el-dialog v-model="previewVisible" :show-close="true" fullscreen>
+  <el-dialog v-model="previewVisible" :show-close="false" fullscreen>
     <template #header="{ close, titleId, titleClass }">
       <el-row justify="end">
         <el-button type="danger" @click="close" icon="CircleCloseFilled">
@@ -73,14 +89,18 @@
         <el-button
           type="primary"
           @click="handelPrint(refWord)"
-          icon="PrintFilled"
+          icon="IconPrinter"
         >
           鎵撳嵃
         </el-button>
       </el-row>
     </template>
     <div ref="refWord">
-      
+      <div
+        :id="`word-preview-${i}`"
+        v-for="(item, i) in previewList"
+        :key="item"
+      ></div>
     </div>
     <!-- <iframe ref="pdfPreview" width="100%" height="100vh" style="height: calc(100vh - 60px);"></iframe> -->
   </el-dialog>
@@ -90,7 +110,7 @@
  * 鍦烘櫙宸℃煡鍗曟嵁鑷姩涓嬭浇
  */
 import { ref, watch } from 'vue';
-import { useRouter } from "vue-router";
+import { useRouter } from 'vue-router';
 import {
   exportDocx,
   prepareDocxBlob,
@@ -124,6 +144,8 @@
 
 // 棰勮瀵硅瘽妗嗗紑鍏�
 const previewVisible = ref(false);
+// 棰勮鐨勬枃妗�
+const previewList = ref([]);
 
 watch(
   () => [props.modelValue, props.value],
@@ -236,7 +258,7 @@
 
 // 鏍规嵁鍦烘櫙绫诲瀷锛岀敓鎴愬搴旂殑word鏂囨。
 function generateDoc(param, callback) {
-  param.map((p) => {
+  param.map((p, index) => {
     let template, _param;
     switch (p.type) {
       // 宸ュ湴
@@ -253,30 +275,7 @@
         break;
     }
     prepareDocxBlob(template, _param).then((blob) => {
-      callback(blob, `${_param.name}宸℃煡鍗曟嵁.docx`);
-    });
-  });
-}
-
-function generatePdf(param, callback) {
-  param.map((p) => {
-    let template, _param;
-    switch (p.type) {
-      // 宸ュ湴
-      case 1:
-        template = '/宸ュ湴宸℃煡鍗曟嵁妯℃澘-绠�鐗�.docx';
-        _param = p.params;
-        break;
-      // 椁愰ギ
-      case 5:
-        template = '/椁愰ギ宸℃煡鍗曟嵁妯℃澘.docx';
-        _param = p.params;
-        break;
-      default:
-        break;
-    }
-    preparePdf(template, _param).then((blob) => {
-      callback(blob, `${_param.name}宸℃煡鍗曟嵁.pdf`);
+      callback(blob, `${_param.name}宸℃煡鍗曟嵁.docx`, index);
     });
   });
 }
@@ -298,47 +297,36 @@
 // 鐐瑰嚮鎵撳嵃鎸夐挳鎿嶄綔
 function handelPrint(ref) {
   if (ref) {
-    print(ref);
+    print({
+      ref,
+      // 鏍规嵁鐩墠浣跨敤鐨刣ocx-preview缁勪欢锛岃缃墦鍗版牱寮忥紝涓昏鍘婚櫎澶氫綑鐨刴argin鍜宲adding锛屼互鍙婇槾褰辨晥鏋�
+      style: `
+        @page{size:A4;margin: 0 !important;padding:0 !important;} 
+        body {margin: 0 !important;padding:0 !important;} 
+        header {color: rgb(182, 182, 182);}
+        footer {color: rgb(182, 182, 182);}
+        .docx-wrapper {padding: 0 !important;}
+        .docx {margin-bottom: 0 !important; box-shadow: none !important;}
+        .docx_5 {
+          display: flex;
+          justify-content: space-between;
+          align-items: flex-end;
+        }
+      `
+    });
   }
-  // const file = filePrepare();
-  // if (file) {
-  //   previewDocx(file.blob, refWord.value);
-  // }
 }
 
 function handlePreview(item) {
-  const param = parseParam(item);
+  // 棰勮鐨勬枃妗o紝鍖哄垎鍗曠嫭鎵撳嵃鍜屾墦鍗板叏閮�
+  previewList.value = item ? ['0'] : checkList.value;
+  const param = item ? parseParam(item) : parseParam();
   if (param) {
-    generatePdf(param, (blob, name) => {
+    generateDoc(param, (blob, name, index) => {
       previewVisible.value = true;
       setTimeout(() => {
-        previewDocx(blob, refWord.value);        
+        previewDocx(blob, document.getElementById(`word-preview-${index}`));
       }, 200);
-      // blob.print()
-      // blob.getBlob((buffer) => {
-      //   previewDocx(buffer, refWord.value);
-      // });
-
-      // const resolved = router.resolve({
-      //   path: '/fysp/scene/SceneInspectFile',
-      //   query: {
-      //     data: JSON.stringify(blob),
-      //   }
-      // });
-      // window.open(resolved.href, '_blank')
-
-
-      // console.log('pdf', blob);
-
-      // blob.autoPrint();
-      // // blob.save(name)
-      // // 鐢熸垚PDF鐨凚lob瀵硅薄
-      // var pdfBlob = blob.output('blob');
-
-      // setTimeout(() => {
-      //   // 鍦╥frame涓樉绀洪瑙�
-      //   pdfPreview.value.src = URL.createObjectURL(pdfBlob);
-      // }, 200);
     });
   }
 }
@@ -363,4 +351,23 @@
 :deep(.el-checkbox__label) {
   width: 100%;
 }
+
+/* 鏂囨。瀛椾綋 */
+:deep(section.docx) {
+  font-family: '榛戜綋' !important;
+}
+/* 鏂囨。鏍囬 */
+:deep(header) {
+  color: rgb(182, 182, 182);
+}
+:deep(.docx_5) {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-end;
+}
+
+/*  */
+:deep(footer) {
+  color: rgb(182, 182, 182);
+}
 </style>
diff --git a/src/views/fysp/support/JingAnNightConstruction.vue b/src/views/fysp/support/JingAnNightConstruction.vue
index ec5d544..af62af3 100644
--- a/src/views/fysp/support/JingAnNightConstruction.vue
+++ b/src/views/fysp/support/JingAnNightConstruction.vue
@@ -23,7 +23,7 @@
         sortable
         prop="ncNum"
         label="缂栧彿"
-        width="100"
+        width="90"
       >
       </el-table-column>
       <el-table-column
@@ -31,7 +31,7 @@
         prop="ncItemName"
         label="椤圭洰鍚嶇О"
         :show-overflow-tooltip="true"
-        width="400"
+        width="200"
       >
       </el-table-column>
       <!-- <el-table-column prop="ncItemUnit" label="涓氫富鍗曚綅" width="130" /> -->
@@ -42,7 +42,7 @@
        <el-table-column
         prop="ncFileName"
         label="澶滄柦鏂囦欢"
-        width="170"
+        width="186"
       >
         <template #default="{ row }">
           <el-link
@@ -51,6 +51,15 @@
             :href="row.ncUrl"
             target="_blank"
             >{{ row.ncFileName }}</el-link
+          >
+        </template>
+      </el-table-column>
+      <el-table-column prop="ncUserId" label="鍖归厤鐢ㄦ埛">
+        <template #default="{ row }">
+          <el-text
+            :loading="row._loading"
+            :type="row._user ? 'success' : 'danger'"
+            >{{ row._user ? row._user.realname : '鏈尮閰�' }}</el-text
           >
         </template>
       </el-table-column>
@@ -81,15 +90,6 @@
           {{ $fm.formatYMD(row.ncCreateTime) }}
         </template>
       </el-table-column> -->
-      <el-table-column prop="ncUserId" label="鍖归厤鐢ㄦ埛">
-        <template #default="{ row }">
-          <el-text
-            :loading="row._loading"
-            :type="row._user ? 'success' : 'danger'"
-            >{{ row._user ? row._user.realname : '鏈尮閰�' }}</el-text
-          >
-        </template>
-      </el-table-column>
       <el-table-column fixed="right" label="鎿嶄綔" width="80">
         <template #default="{ row }">
           <el-button
diff --git a/src/views/fysp/task/components/CompMonitorObj.vue b/src/views/fysp/task/components/CompMonitorObj.vue
index 65da3fe..70e8ee2 100644
--- a/src/views/fysp/task/components/CompMonitorObj.vue
+++ b/src/views/fysp/task/components/CompMonitorObj.vue
@@ -41,7 +41,7 @@
       </el-checkbox-group>
     </el-space>
     <el-scrollbar :height="height">
-      <el-space wrap>
+      <el-space v-if="activeData.length > 0" wrap style="padding-bottom: 200px;">
         <ItemMonitorObj v-for="obj in activeData" :key="obj.movid" :item="obj">
           <template #default="{ item }">
             <slot :item="item">
@@ -57,6 +57,7 @@
           </template>
         </ItemMonitorObj>
       </el-space>
+      <el-empty v-else description="鏆傛棤璁板綍" />
     </el-scrollbar>
   </div>
 </template>
@@ -95,7 +96,7 @@
     return {
       activeName: defaultTabName,
       tabs: [],
-      checkList: [0, 1, 2]
+      checkList: [0]
     };
   },
   computed: {
diff --git a/src/views/fysp/task/components/CompSubTaskList.vue b/src/views/fysp/task/components/CompSubTaskList.vue
index 2ff7199..818339f 100644
--- a/src/views/fysp/task/components/CompSubTaskList.vue
+++ b/src/views/fysp/task/components/CompSubTaskList.vue
@@ -1,19 +1,16 @@
 <template>
   <el-row justify="space-between">
     <el-text>鍗曟棩璁″垝</el-text>
-    <div>
+    <div v-show="create && data && data.length > 0">
       <el-button
+        icon="IconPrinter"
         type="success"
         size="small"
         plain
         @click="handleInspectFileDownload"
-        >鍗曟嵁涓嬭浇</el-button
+        >鍗曟嵁鎵撳嵃</el-button
       >
-      <el-button
-        v-show="create && data && data.length > 0"
-        type="success"
-        size="small"
-        @click="add"
+      <el-button type="success" size="small" @click="add" icon="Switch"
         >浠诲姟璋冩暣</el-button
       >
     </div>
@@ -36,13 +33,15 @@
                 plain
                 type="primary"
                 size="small"
+                icon="EditPen"
                 @click="edit(item)"
-                >缂栬緫</el-button
+                >淇敼</el-button
               >
               <el-button
                 :disabled="item.status != '鏈墽琛�'"
-                type="default"
+                type="danger"
                 size="small"
+                icon="Delete"
                 @click="remove(item)"
                 >绉婚櫎</el-button
               >
@@ -79,13 +78,16 @@
       @cancel="dialogVisible = false"
     ></CompSubTaskEdit>
   </el-dialog>
-  <SceneInspectFile v-model="downloadDialog" :value="downloadSceneList"></SceneInspectFile>
+  <SceneInspectFile
+    v-model="downloadDialog"
+    :value="downloadSceneList"
+  ></SceneInspectFile>
 </template>
 <script setup>
 import { ref, computed, watch, onMounted, onUnmounted } from 'vue';
 import { ElMessageBox, ElNotification, ElMessage } from 'element-plus';
 import CompSubTaskEdit from './CompSubTaskEdit.vue';
-import SceneInspectFile from "@/views/fysp/scene/SceneInspectFile.vue";
+import SceneInspectFile from '@/views/fysp/scene/SceneInspectFile.vue';
 import subtaskApi from '@/api/fysp/subtaskApi';
 
 const props = defineProps({
@@ -104,7 +106,7 @@
 const activeItem = ref(null);
 const data = computed(() => props.modelValue);
 const downloadDialog = ref(false);
-const downloadSceneList = ref([])
+const downloadSceneList = ref([]);
 
 const emit = defineEmits(['submit', 'add', 'remove', 'update:modelValue']);
 
@@ -154,7 +156,7 @@
 });
 
 function handleInspectFileDownload() {
-  downloadSceneList.value = data.value.map(v=>v.scenseid)
-  downloadDialog.value = true
+  downloadSceneList.value = data.value.map((v) => v.scenseid);
+  downloadDialog.value = true;
 }
 </script>
diff --git a/src/views/fysp/task/components/CompSubTaskSelect.vue b/src/views/fysp/task/components/CompSubTaskSelect.vue
index 738df23..cfeb571 100644
--- a/src/views/fysp/task/components/CompSubTaskSelect.vue
+++ b/src/views/fysp/task/components/CompSubTaskSelect.vue
@@ -110,11 +110,9 @@
 });
 function submit(v, success, fail) {
   if (props.data.length == 0) {
-    // ElMessage({
-    //   message: '鏈�夋嫨鐩戠鍦烘櫙',
-    //   type: 'warning'
-    // });
     fail('鏈�夋嫨鐩戠鍦烘櫙');
+  } else if (v.value.executor.length == 0) {
+    fail('鏈�夋嫨鎵ц浜�');
   } else {
     success();
     // 灏嗕换鍔℃墽琛屼汉鏍煎紡鍖栧苟浼犻��
@@ -174,7 +172,8 @@
   () => props.dayTask,
   (nV, oV) => {
     if (nV != oV) {
-      taskApi.fetchTaskById(nV.guid).then((res) => {
+      // 鏍规嵁鏃ヤ换鍔★紝鑾峰彇瀵瑰簲鐨勬�讳换鍔′俊鎭紝鍐嶈幏鍙栨墽琛屼汉鍛樹俊鎭�
+      taskApi.fetchTaskById(nV.tsGuid).then((res) => {
         getExecutors(res);
       });
     }
diff --git a/src/views/fysp/task/components/CompTaskMap.vue b/src/views/fysp/task/components/CompTaskMap.vue
index 4636ff3..1af7d06 100644
--- a/src/views/fysp/task/components/CompTaskMap.vue
+++ b/src/views/fysp/task/components/CompTaskMap.vue
@@ -31,6 +31,9 @@
 const scenes = computed(() => {
   return props.plans
     .filter((v) => {
+      if (!v.scene.longitude || !v.scene.latitude) {
+        return false;
+      }
       // 鎸夌収鐩戠鐘舵�佺瓫閫�
       if (supervisionStatus.value) {
         switch (supervisionStatus.value.value) {
@@ -50,11 +53,6 @@
       } else {
         return true
       }
-      // if (supervisionStatus.value) {
-      //   supervisionStatus.value;
-      // } else {
-      //   return true;
-      // }
     })
     .map((p) => {
       return p.scene;

--
Gitblit v1.9.3