Explorar el Código

空间分析导出

Hwf hace 3 meses
padre
commit
beb497e0e4

+ 49 - 0
src/types/components.d.ts

@@ -24,11 +24,57 @@ declare module 'vue' {
     DistributionMap: typeof import('./../components/Map/YztMap/DistributionMap.vue')['default']
     DrawMap: typeof import('./../components/Map/YztMap/DrawMap.vue')['default']
     Editor: typeof import('./../components/Editor/index.vue')['default']
+    ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
+    ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
+    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
+    ElCol: typeof import('element-plus/es')['ElCol']
+    ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     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']
+    ElIcon: typeof import('element-plus/es')['ElIcon']
+    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElMenu: typeof import('element-plus/es')['ElMenu']
+    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
+    ElOption: typeof import('element-plus/es')['ElOption']
+    ElPagination: typeof import('element-plus/es')['ElPagination']
+    ElPopover: typeof import('element-plus/es')['ElPopover']
+    ElRow: typeof import('element-plus/es')['ElRow']
+    ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
+    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
+    ElSlider: typeof import('element-plus/es')['ElSlider']
+    ElStep: typeof import('element-plus/es')['ElStep']
+    ElSteps: typeof import('element-plus/es')['ElSteps']
+    ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
+    ElSwitch: typeof import('element-plus/es')['ElSwitch']
+    ElTable: typeof import('element-plus/es')['ElTable']
+    ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTabPane: typeof import('element-plus/es')['ElTabPane']
+    ElTabs: typeof import('element-plus/es')['ElTabs']
+    ElTag: typeof import('element-plus/es')['ElTag']
+    ElText: typeof import('element-plus/es')['ElText']
+    ElTimeline: typeof import('element-plus/es')['ElTimeline']
+    ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
+    ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
+    ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
+    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
+    ElUpload: typeof import('element-plus/es')['ElUpload']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
     FlvVideo: typeof import('./../components/FlvVideo/index.vue')['default']
@@ -75,4 +121,7 @@ declare module 'vue' {
     VideoTagEdit: typeof import('./../components/VideoTagEdit/index.vue')['default']
     YztMap: typeof import('./../components/Map/YztMap/index.vue')['default']
   }
+  export interface ComponentCustomProperties {
+    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
+  }
 }

+ 37 - 1
src/views/globalMap/RightMenu/SpatialAnalysis.vue

@@ -29,7 +29,8 @@
         <div v-for="(item, index) in filteredList" :key="index" class="item2">{{ item.name + '(' + item.list.length + ')' }}</div>
       </div>
     </div>
-    <Dialog v-model="showDetail" title="空间分析" height="760px" hide-footer>
+    <Dialog v-if="showDetail" v-model="showDetail" title="空间分析" height="760px" hide-footer>
+      <div class="common-btn-primary export-btn" @click="exportData">导出</div>
       <div class="common-table">
         <div class="table-header">
           <div class="td">序号</div>
@@ -56,6 +57,7 @@
 import { validateNum } from '@/utils/ruoyi';
 import { getSpatialAnalysis } from '@/api/globalMap';
 import { deepClone } from '@/utils';
+import * as XLSX from 'xlsx';
 
 const props = defineProps({
   updateLocation: []
@@ -147,6 +149,35 @@ let showDetail = ref(false);
 const handleShowDetail = () => {
   showDetail.value = true;
 };
+// 导出
+const exportData = () => {
+  let jsonData = [];
+  const headerMap = {
+    townName: '行政镇',
+    villageName: '行政村',
+    populationSize: '常住人口(万)',
+    areaSize: '面积(km2)',
+    GDP: 'GDP(亿元)'
+  };
+  const orderedKeys = Object.keys(headerMap);
+  analysisData.value.townData.forEach((item) => {
+    const newItem = {};
+    Object.keys(item).forEach((key) => {
+      if (headerMap[key]) {
+        newItem[headerMap[key]] = item[key];
+      }
+    });
+    jsonData.push(newItem);
+  });
+  const worksheet = XLSX.utils.json_to_sheet(jsonData, {
+    header: orderedKeys.map((key) => headerMap[key]) // 按 headerMap 顺序传递中文表头
+  });
+  // 创建工作簿并添加工作表
+  const workbook = XLSX.utils.book_new();
+  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+  // 导出文件
+  XLSX.writeFile(workbook, '空间分析数据.xlsx');
+};
 </script>
 
 <style lang="scss" scoped>
@@ -200,4 +231,9 @@ const handleShowDetail = () => {
   border-radius: 4px;
   margin-top: 5px;
 }
+.export-btn {
+  position: absolute;
+  right: 20px;
+  top: 55px;
+}
 </style>

+ 7 - 1
src/views/globalMap/index.vue

@@ -295,7 +295,13 @@ const handleHideCommunicationSupport = () => {
 const findChecked = (dataList, name) => {
   let index = 0;
   dataList.forEach((item) => {
-    if (!['易涝隐患点', '省政务无人机', '铁塔运行监测', '通讯保障', '救援队伍', '重点车辆', '附近视频'].includes(item.name) && item.name !== name && !item.isVideo && item.path === '2' && !!item.checked) {
+    if (
+      !['易涝隐患点', '省政务无人机', '铁塔运行监测', '通讯保障', '救援队伍', '重点车辆', '附近视频'].includes(item.name) &&
+      item.name !== name &&
+      !item.isVideo &&
+      item.path === '2' &&
+      !!item.checked
+    ) {
       index++;
     }
     if (item.children && item.children.length > 0) {