소스 검색

代码提交

cxs 4 달 전
부모
커밋
57915479d6

+ 136 - 18
src/views/alarm/allData/index.vue

@@ -6,7 +6,7 @@
         <div class="header-button-lf">
           <el-form :model="pageable" label-width="auto" :inline="true">
             <el-form-item label="自动站:">
-              <el-select v-model="pageable.as_code_list"  multiple collapse-tags   filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 300px">
+              <el-select v-model="pageable.as_code_list"  multiple collapse-tags   filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 200px">
                 <el-option
                   v-for="item in platformList"
                   :key="item.as_code"
@@ -183,7 +183,7 @@
 
 <script setup lang="ts" name="useProTable">
 import Pagination from "@/components/ProTable/components/Pagination.vue";
-import {ref, reactive, onMounted} from "vue";
+import {ref, reactive, onMounted, onDeactivated, onActivated} from "vue";
 import { ColumnProps } from "@/components/ProTable/interface";
 import {ElTable} from "element-plus";
 import {getDataItemList, getPlatformList, getRgDataList} from "@/api/modules/allData";
@@ -206,8 +206,9 @@ const handleSortChange = ({ column, prop, order }) =>{
   console.log('order:', order)
 }
 
+
 const pageable = ref<any>({
-  data_type: 0,
+  data_type: true,
   time_order: 0,
   as_code_list:undefined,
   data_items:[],
@@ -261,10 +262,22 @@ let columns = reactive<ColumnProps[]>([]);
 let customizeColumns= ref<any>([
   {
     data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
-    data_id: 31,
+    data_id: 2,
+    data_type: "风",
+    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_XIANG",
+    data_name: "2分钟风向",
+    data_unit: "°",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 1,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
     data_type: "风",
-    data_item: "DI_2_GE_10_FEN_ZHONG_PING_JUN_FENG_SU",
-    data_name: "第2个10分钟平均风速",
+    data_name: "2分钟风速",
+    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_SU",
     data_unit: "m/s",
     data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
     data_value: "",
@@ -272,11 +285,11 @@ let customizeColumns= ref<any>([
     data_condition: 0
   },
   {
+    data_id: 4,
     data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
-    data_id: 2,
     data_type: "风",
-    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_XIANG",
-    data_name: "2分钟风向",
+    data_name: "10分钟风向",
+    data_item: "SHI_FEN_ZHONG_PING_JUN_FENG_XIANG",
     data_unit: "°",
     data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
     data_value: "",
@@ -284,16 +297,99 @@ let customizeColumns= ref<any>([
     data_condition: 0
   },
   {
-    data_id: 1,
     data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 3,
     data_type: "风",
-    data_name: "2分钟风速",
-    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_SU",
+    data_item: "SHI_FEN_ZHONG_PING_JUN_FENG_SU",
+    data_name: "10分钟风速",
     data_unit: "m/s",
     data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
     data_value: "",
     data_order: 0,
     data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 501,
+    data_type: "能见度",
+    data_item: "YI_FEN_ZHONG_PING_JUN_NENG_JIAN_DU",
+    data_name: "1分钟平均能见度",
+    data_unit: "m",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 101,
+    data_type: "温湿度",
+    data_item: "QI_WEN",
+    data_name: "气温",
+    data_unit: "℃",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 201,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "水汽压",
+    data_item: "SHUI_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 109,
+    data_type: "温湿度",
+    data_item: "LU_DIAN_WEN_DU",
+    data_name: "露点温度",
+    data_unit: "℃",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 202,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "本站气压",
+    data_item: "BEN_ZHAN_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },{
+    data_id: 207,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "海平面气压",
+    data_item: "HAI_PING_MIAN_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 312,
+    data_type: "降水",
+    data_item: "XIAO_SHI_LEI_JI_JIANG_SHUI_LIANG_CHENG_ZHONG",
+    data_name: "小时累计降水量(称重)",
+    data_unit: "mm",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
   }
 ])
 
@@ -344,12 +440,7 @@ const getAllRgDataList = async () => {
 const getList = async () => {
   const { data } = await getDataItemList(pageable.value);
   processTableData.value = data.list
-  if(processTableData.value){
-    const result = processTableData.value[0].data_list.map(item => ({
-      [item.data_id]: item.data_value
-    }));
-    console.log(result);
-  }
+  pageable.value.total = data.total
 };
 
 // 要素的选中和取消
@@ -366,6 +457,7 @@ const toggleSelection=(item)=> {
 }
 
 const handleSetting = () => {
+   copiedCustomizeColumns.value = [...customizeColumns.value]
   elementList.value.forEach(element => {
     const column = copiedCustomizeColumns.value.find(col => col.data_id === element.data_id);
     if (column) {
@@ -383,6 +475,7 @@ const submitForm = () => {
   dialog.visible = false;
   customizeColumns.value = [...copiedCustomizeColumns.value]
   updateColumns()
+  saveCustomizeColumns()
 }
 
 // 大概计算字符串长度
@@ -402,11 +495,36 @@ function formatDate(timestamp) {
 }
 
 onMounted(() => {
+  loadCustomizeColumns()
   updateColumns()
   getPlatforms()
   getAllRgDataList()
 })
 
+// 保存customizeColumns数组到localStorage
+function saveCustomizeColumns() {
+  const jsonString = JSON.stringify(customizeColumns.value);
+  localStorage.setItem('customizeColumns', jsonString);
+}
+
+// 从localStorage中获取customizeColumns数组
+function loadCustomizeColumns() {
+  const jsonString = localStorage.getItem('customizeColumns');
+  if (jsonString) {
+    customizeColumns.value = JSON.parse(jsonString);
+  }
+}
+let intervalId;
+
+onActivated(() => {
+  intervalId = setInterval(() => {
+    getList();
+  }, 60 * 1000);
+});
+
+onDeactivated(() => {
+  clearInterval(intervalId);
+});
 
 
 </script>

+ 18 - 6
src/views/alarm/allWeather/index.vue

@@ -6,7 +6,7 @@
         <div class="header-button-lf">
           <el-form :model="pageable" label-width="auto"  :inline="true">
             <el-form-item label="站号:">
-              <el-select v-model="as_code_list" @change="changeCodeList" collapse-tags  filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 300px">
+              <el-select v-model="as_code_list" @change="changeCodeList" collapse-tags  filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 200px">
                 <el-option
                   v-for="item in platformList"
                   :key="item.as_code"
@@ -71,7 +71,7 @@
 
 <script setup lang="ts" name="useProTable">
 import Pagination from "@/components/ProTable/components/Pagination.vue";
-import {ref, reactive, onMounted} from "vue";
+import {ref, reactive, onMounted, onActivated, onDeactivated} from "vue";
 import { ColumnProps } from "@/components/ProTable/interface";
 import { getPlatformList, getTacRecordList} from "@/api/modules/allData";
 import {Platform} from "@/api/interface";
@@ -241,13 +241,25 @@ const getList = async () => {
   pageable.value.total = data.total
 };
 
+let intervalId;
+
 onMounted(() => {
   getPlatforms();
-  getList()
-  setInterval(() => {
+  getList();
+
+});
+
+onActivated(() => {
+  intervalId = setInterval(() => {
     getList();
-  }, 60 * 1000); // 设置间隔为1分钟(60秒 * 1000毫秒)
-})
+  }, 60 * 1000);
+});
+
+onDeactivated(() => {
+  clearInterval(intervalId);
+});
+
+
 
 const platformList =ref<any>([])
 // 查询自动站列表

+ 1 - 0
src/views/login/components/LoginForm.vue

@@ -126,6 +126,7 @@ onMounted(() => {
 onBeforeUnmount(() => {
   document.onkeydown = null;
 });
+
 </script>
 
 <style scoped lang="scss">

+ 1 - 1
src/views/query/hazardousWeather/index.vue

@@ -6,7 +6,7 @@
         <div class="header-button-lf">
           <el-form :model="pageable" label-width="auto"  :inline="true">
             <el-form-item label="站号:">
-              <el-select v-model="as_code_list" @change="changeCodeList" collapse-tags  filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 300px">
+              <el-select v-model="as_code_list" @change="changeCodeList" collapse-tags  filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 200px">
                 <el-option
                   v-for="item in platformList"
                   :key="item.as_code"

+ 589 - 244
src/views/query/queryObservationData/index.vue

@@ -4,85 +4,134 @@
       <!-- 表格头部 操作按钮 -->
       <div class="table-header">
         <div class="header-button-lf">
-          <el-form :model="queryParams" label-width="auto" :inline="true">
+          <el-form :model="pageable" label-width="auto" :inline="true">
             <el-form-item label="自动站:">
-              <el-checkbox v-model="queryParams.isStand" label="多站"/>
-              <el-select v-model="queryParams.name" filterable placeholder="请选择" clearable style="width: 200px;margin-left: 10px">
-                <el-option label="站1" value="1" />
-                <el-option label="站2" value="2" />
+              <el-checkbox v-model="isStand" label="多站"/>
+
+              <!--多站选择-->
+              <el-select v-if="isStand" v-model="pageable.as_code_list"  multiple collapse-tags   filterable placeholder="请搜索自动站" remote reserve-keyword clearable  style="width: 200px;margin: 0 10px">
+                <el-option
+                  v-for="item in platformList"
+                  :key="item.as_code"
+                  :label="item.as_code +' '+item.as_name"
+                  :value="item.as_code"
+                />
+                <template #prefix>
+                  <el-icon class="el-input__icon"><search /></el-icon>
+                </template>
               </el-select>
-            </el-form-item>
-            <el-form-item label="观测时间:" v-if="queryParams.isStand">
-              <el-date-picker
-                v-model="queryParams.time"
-                type="datetime"
-                placeholder="请选择"
-                format="YYYY-MM-DD HH:mm"
-              />
-            </el-form-item>
-            <el-form-item label="观测时间:" v-if="!queryParams.isStand">
-              <el-switch
-                v-model="queryParams.hot"
-                inline-prompt
-                active-text="正点"
-                size="default"
-                inactive-text="分钟"
-              />
-
-              <span class="form-item__label">日界:</span>
-              <el-switch
-                v-model="queryParams.points"
-                inline-prompt
-                active-text="0点"
-                size="default"
-                inactive-text="18点"
-              />
-
-              <el-date-picker
-                v-if="queryParams.hot"
-                style="margin-left: 10px"
-                v-model="queryParams.time"
-                type="date"
-                placeholder="请选择"
-              />
-              <el-date-picker
-                v-if="!queryParams.hot"
-                style="margin-left: 10px"
-                v-model="queryParams.time"
-                type="datetime"
-                placeholder="请选择"
-                format="YYYY-MM-DD HH:mm"
-              />
-            </el-form-item>
-            <el-form-item label="数据密度:">
-              <el-select v-model="queryParams.density" style="width: 240px"  filterable placeholder="请选择" clearable>
-                <el-option label="1分钟" value="1" />
-                <el-option label="5分钟" value="5" />
-                <el-option label="10分钟" value="10分钟" />
+              <el-form-item label="观测时间:" v-if="isStand">
+                <el-switch
+                  v-model="hot"
+                  inline-prompt
+                  active-text="正点"
+                  size="default"
+                  inactive-text="分钟"
+                  @change="changeHot"
+                />
+                <el-date-picker
+                  v-if="hot"
+                  v-model="multiTime"
+                  style="margin-left: 10px"
+                  type="datetime"
+                  popper-class="tpc"
+                  format="YYYY-MM-DD HH"
+                  placeholder="选择日期时间"
+                  @change="changeMultiTime"
+                >
+                </el-date-picker>
+
+                <el-date-picker
+                  v-if="!hot"
+                  v-model="multiTime"
+                  style="margin-left: 10px"
+                  type="datetime"
+                  @change="changeMultiTime"
+                  format="YYYY-MM-DD HH:mm"
+                  placeholder="选择日期时间">
+                </el-date-picker>
+              </el-form-item>
+
+              <!--单站选择-->
+              <el-select v-if="!isStand"  v-model="as_code_list"  @change="changeAslist" collapse-tags   filterable placeholder="请搜索自动站"  remote reserve-keyword clearable  style="width: 200px;padding: 0px 10px">
+                <el-option
+                  v-for="item in platformList"
+                  :key="item.as_code"
+                  :label="item.as_code +' '+item.as_name"
+                  :value="item.as_code"
+                />
+                <template #prefix>
+                  <el-icon class="el-input__icon"><search /></el-icon>
+                </template>
               </el-select>
+
+              <el-form-item label="观测时间:" v-if="!isStand">
+                <el-switch
+                  v-model="hot"
+                  inline-prompt
+                  active-text="正点"
+                  size="default"
+                  inactive-text="分钟"
+                  @change="changeHot"
+                />
+
+                <span class="form-item__label">日界:</span>
+                <el-switch
+                  v-model="points"
+                  inline-prompt
+                  active-text="0点"
+                  size="default"
+                  inactive-text="18点"
+                  @change="changePoints"
+                />
+
+                <el-date-picker
+                  style="margin-left: 10px"
+                  v-model="singleTime"
+                  type="date"
+                  placeholder="请选择"
+                  @change="changeTime"
+                />
+              </el-form-item>
+
+              <el-form-item v-if="!hot" label="数据密度:">
+                <el-select v-model="pageable.time_space" style="width: 240px"  filterable placeholder="请选择" clearable>
+                  <el-option
+                    v-for="item in timeSpaceList"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  />
+                </el-select>
+              </el-form-item>
+
             </el-form-item>
             <el-form-item>
               <el-button type="primary" @click="handleQuery"> 查询 </el-button>
               <el-button style="margin-left: 10px" @click="resetQuery"> 重置 </el-button>
-              <el-button style="margin-left: 10px" type="primary" plain @click="handleCustomQuery">自定义查询</el-button>
             </el-form-item>
           </el-form>
         </div>
         <div class="header-button-ri">
           <slot name="toolButton">
-            <img class="setting" src="@/assets/images/setting2.png" @click="handleSetting"/>
+            <img class="setting" src="@/assets/images/setting2.png" @click="handleSetting" />
           </slot>
         </div>
       </div>
       <!-- 表格主体 -->
       <el-table stripe ref="tableRef" :border="true" :data="processTableData"  size="small" @sort-change="handleSortChange">
-        <el-table-column align="left" label="序号" width="80px" :show-overflow-tooltip="true" >
+        <el-table-column align="left" label="序号" width="80px" :show-overflow-tooltip="true">
           <template #default="scope">
-            {{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}
+            {{ (pageable.pageNum - 1) * pageable.pageSize + scope.$index + 1 }}
           </template>
         </el-table-column>
         <template v-for="item in columns" :key="item">
-          <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :sortable="item.sortable" :show-overflow-tooltip="true" >
+          <el-table-column v-bind="item" :align="item.align ?? 'left'" :reserve-selection="item.type == 'selection'" :sortable="item.sortable" :show-overflow-tooltip="true">
+            <template #default="scope">
+              <template v-if="item.prop === 'data_time_i'">
+                {{formatDate(scope.row.data_time_i)}}
+              </template>
+            </template>
           </el-table-column>
         </template>
         <!-- 无数据 -->
@@ -98,33 +147,116 @@
       <!-- 分页组件 -->
       <Pagination :pageable="pageable" :handle-size-change="handleSizeChange" :handle-current-change="handleCurrentChange" />
     </div>
+
     <!-- 添加或修改岗位对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="940px" append-to-body>
       <div style="height: 500px">
         <el-tabs tab-position="left" class="demo-tabs" style="height: 100%">
           <el-tab-pane label="风">
             <div class="container-tag">
-              <div class="item-tag">2分钟平均风速</div>
-              <div class="item-tag-active">2分钟平均风向</div>
-              <div class="item-tag">10分钟平均风速</div>
-              <div class="item-tag">10分钟平均风向</div>
-              <div class="item-tag">小时最大风速</div>
-              <div class="item-tag-active">小时最大风速的风向</div>
-              <div class="item-tag">小时极大风速出现时间</div>
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='风'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="温湿度">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='温湿度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="气压">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='气压'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="降水">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='降水'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="云">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='云'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="能见度">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='能见度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="天气现象">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='天气现象'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="积雪">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='积雪'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="地面温度">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='地面温度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="大气电场">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='大气电场'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="闪电">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='闪电'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="日照">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='日照'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="总辐射">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='总辐射'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="日照文">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='日照文'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="水文">
+            <div class="container-tag">
+              <template v-for="item in elementList" :key="item.id"  >
+                <div v-if="item.data_type==='水文'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+              </template>
             </div>
           </el-tab-pane>
-          <el-tab-pane label="温湿度">Config</el-tab-pane>
-          <el-tab-pane label="气压">Role</el-tab-pane>
-          <el-tab-pane label="降水">Task</el-tab-pane>
-          <el-tab-pane label="云">Task</el-tab-pane>
-          <el-tab-pane label="能见度">Task</el-tab-pane>
-          <el-tab-pane label="天气现象">Task</el-tab-pane>
-          <el-tab-pane label="积雪">Task</el-tab-pane>
-          <el-tab-pane label="地面温度">Task</el-tab-pane>
-          <el-tab-pane label="大气电场">Task</el-tab-pane>
-          <el-tab-pane label="闪电">Task</el-tab-pane>
-          <el-tab-pane label="日照">Task</el-tab-pane>
-          <el-tab-pane label="总辐射">Task</el-tab-pane>
         </el-tabs>
       </div>
       <template #footer>
@@ -134,119 +266,26 @@
         </div>
       </template>
     </el-dialog>
-
-    <!-- 自定义对话框 -->
-    <el-dialog :title="dialogQuery.title" v-model="dialogQuery.visible" width="800px" append-to-body>
-      <el-form ref="formQueryRef" :model="queryParams" :rules="rulesQuery" label-width="120px">
-        <el-form-item label="自动站:">
-          <div style="display:flex;align-items: center;width: 100%">
-            <el-checkbox v-model="queryParams.isStand" label="多站"/>
-            <el-select v-model="queryParams.name" filterable placeholder="请选择" clearable style="margin-left: 10px;">
-              <el-option label="站1" value="1" />
-              <el-option label="站2" value="2" />
-            </el-select>
-          </div>
-        </el-form-item>
-        <el-form-item label="观测时间:" v-if="queryParams.isStand" >
-          <el-date-picker
-            style="width: 100%"
-            v-model="queryParams.time"
-            type="datetime"
-            placeholder="请选择"
-            format="YYYY-MM-DD HH:mm"
-          />
-        </el-form-item>
-        <el-form-item label="观测时间:" v-if="!queryParams.isStand">
-          <div style="display:flex;align-items: center;width: 100%">
-            <el-switch
-              v-model="queryParams.hot"
-              inline-prompt
-              active-text="正点"
-              size="default"
-              inactive-text="分钟"
-            />
-
-            <span class="form-item__label">日界:</span>
-            <el-switch
-              v-model="queryParams.points"
-              inline-prompt
-              active-text="0点"
-              size="default"
-              inactive-text="18点"
-            />
-
-            <el-date-picker
-              v-if="queryParams.hot"
-              style="margin-left: 10px;width: 100%"
-              v-model="queryParams.time"
-              type="date"
-              placeholder="请选择"
-            />
-            <el-date-picker
-              v-if="!queryParams.hot"
-              style="margin-left: 10px;width: 100%"
-              v-model="queryParams.time"
-              type="datetime"
-              placeholder="请选择"
-              format="YYYY-MM-DD HH:mm"
-            />
-          </div>
-        </el-form-item>
-        <el-form-item label="数据密度:">
-          <el-select v-model="queryParams.density"  filterable placeholder="请选择" clearable>
-            <el-option label="1分钟" value="1" />
-            <el-option label="5分钟" value="5" />
-            <el-option label="10分钟" value="10分钟" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="查询要素:">
-          <el-select v-model="queryParams.element"  placeholder="请选择" clearable>
-            <el-option
-              v-for="item in columns"
-              :key="item.prop"
-              :label="item.label"
-              :value="item.prop"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="查询条件:">
-          <el-select v-model="queryParams.condition"  placeholder="请选择" clearable>
-            <el-option label=">" value="1" />
-            <el-option label="=" value="2" />
-            <el-option label="<" value="3" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="过滤值:">
-          <el-input
-            v-model="queryParams.filterValues"
-            clearable
-          />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="cancelQuery">取 消</el-button>
-          <el-button type="primary" @click="submitQueryForm">确 定</el-button>
-        </div>
-      </template>
-    </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts" name="useProTable">
 import Pagination from "@/components/ProTable/components/Pagination.vue";
-import { ref, reactive } from "vue";
+import {ref, reactive, onMounted, onDeactivated, onActivated} from "vue";
 import { ColumnProps } from "@/components/ProTable/interface";
-
+import {ElNotification, ElTable} from "element-plus";
+import {getDataItemList, getPlatformList, getRgDataList} from "@/api/modules/allData";
+import { Platform} from "@/api/interface";
+const tableRef = ref<InstanceType<typeof ElTable>>();
 const dialog = reactive<any>({
   visible: false,
   title: ''
 });
 
-const dialogQuery = reactive<any>({
-  visible: false,
-  title: ''
-});
+
+const cancel = () => {
+  dialog.visible = false;
+}
 
 const handleSortChange = ({ column, prop, order }) =>{
   // 在这里发送请求到服务器端进行远程排序
@@ -255,82 +294,144 @@ const handleSortChange = ({ column, prop, order }) =>{
   console.log('order:', order)
 }
 
-const submitQueryForm = () => {
+const timeSpaceList= [
+  {
+    value: 1,
+    label: '1分钟',
+  },
+  {
+    value: 5,
+    label: '5分钟',
+  },
+  {
+    value: 10,
+    label: '10分钟',
+  }
+]
 
-}
 
-const cancelQuery = () => {
-  dialogQuery.visible = false;
-}
+const pageable = ref<any>({
+  data_type: false,
+  time_order: 0,
+  time_space:60,
+  begin_time:undefined,
+  end_time: undefined,
+  as_code_list:[],
+  data_items:[],
+  pageNum: 1,
+  pageSize: 20,
+  total: 0
+});
 
-const formQueryRef = ref<any>();
-const rulesQuery = ref<any>(
-  {
-  }
-);
+const isStand =ref(true)
+const as_code_list = ref(undefined);
+const hot = ref(true);
+const points =ref(true);
+const singleTime =ref(undefined)
+const multiTime =ref(undefined)
 
 
-/** 自定义按钮操作 */
-const handleCustomQuery = async () => {
-  dialogQuery.visible = true;
-  dialogQuery.title = "自定义查询";
+const changeHot =(row)=>{
+  console.log(row)
+  if(row){
+    pageable.value.time_space = 60
+  }else {
+    pageable.value.time_space = 1
+  }
 }
 
+const changeMultiTime =(time)=>{
+  if(time){
+    const timeStamp = new Date(time).getTime();
+    pageable.value.begin_time = timeStamp/1000
+    pageable.value.end_time = timeStamp/1000
+  }else {
+    pageable.value.begin_time = undefined
+    pageable.value.end_time = undefined
+  }
 
+}
 
 
+const changePoints=(row)=>{
+  singleTime.value =undefined
+  pageable.value.begin_time = undefined
+  pageable.value.end_time = undefined
 
-const handleSetting = () => {
-  dialog.title = "列表字段设置"
-  dialog.visible = true;
 }
+const changeTime =(time)=>{
+  const timeStamp = new Date(time).getTime();
+  if(points){
+    //0点
+    const startTime = timeStamp + 60 * 1000; // 添加1分钟(60秒)
+    const endTime = timeStamp + 24 * 60 * 60 * 1000; // 添加一天(24小时)
+    pageable.value.begin_time = startTime/1000
+    pageable.value.end_time = endTime/1000
+  }else {
+    //18点
+    const startTimeStamp = timeStamp + 18 * 60 * 60 * 1000 + 60 * 1000;// 添加18小时和1分钟(18*60*60秒+60秒)
+    const nextDay = new Date(time);
+    nextDay.setDate(nextDay.getDate() + 1); // 设置为第二天
+    nextDay.setHours(18, 0, 0, 0); // 设置时间为18:00:00
+    const endTimeStamp = nextDay.getTime(); // 获取第二天18:00:00的时间戳
+    pageable.value.begin_time = startTimeStamp/1000
+    pageable.value.end_time = endTimeStamp/1000
+  }
+
 
-const submitForm = () => {
 
-}
 
-const cancel = () => {
-  dialog.visible = false;
 }
 
+const changeAslist =(row)=>{
+  if(row){
+    pageable.value.as_code_list = [row]
+  }else {
+    pageable.value.as_code_list = []
+  }
 
-const pageable = ref<any>({
-  pageNum: 1,
-  pageSize: 20,
-  total: 1
-});
+}
 
-const queryParams = ref({
-  isStand:true,
-  points: true,
-  name: '',
-  time:'',
-  hot:true,
-  pageNum: 1,
-  pageSize: 20,
-  density:'',
-  total: 1,
-  element:'',
-  condition:'',
-  filterValues:''
-});
 
 // 查询功能
 const handleQuery = () => {
-  queryParams.value.pageNum = 1;
+  if(isStand.value){
+    //多站
+    pageable.value.pageNum = 1;
+    getList();
+  }else {
+    //单站
+   if(!pageable.value.as_code_list){
+     ElNotification({
+       title: "错误",
+       message: "请选择台站",
+       type: "error",
+       duration: 3000
+     });
+     return
+   }
+    pageable.value.pageNum = 1;
+    getList();
+  }
+
+
 };
 
-//搜索功能
+//重置功能
 const resetQuery = () => {
-  queryParams.value.pageNum = 1;
+  pageable.value.pageNum = 1;
+  pageable.value.as_code_list = undefined
+  getList();
 };
 
+
 /**
  * @description 每页条数改变
  * @param {Number} val 当前条数
  * @return void
  * */
 const handleSizeChange = (val: number) => {
+  console.log("=====");
   console.log(val);
 };
 
@@ -340,32 +441,276 @@ const handleSizeChange = (val: number) => {
  * @return void
  * */
 const handleCurrentChange = (val: number) => {
+  pageable.value.pageNum = val
+  console.log("=====1");
   console.log(val);
 };
 
-const processTableData = ref([
+const processTableData = ref([]);
+
+// 表格配置项
+let columns = reactive<ColumnProps[]>([]);
+
+//自定义部分表头
+let customizeColumns= ref<any>([
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 2,
+    data_type: "风",
+    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_XIANG",
+    data_name: "2分钟风向",
+    data_unit: "°",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 1,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "风",
+    data_name: "2分钟风速",
+    data_item: "ER_FEN_ZHONG_PING_JUN_FENG_SU",
+    data_unit: "m/s",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 4,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "风",
+    data_name: "10分钟风向",
+    data_item: "SHI_FEN_ZHONG_PING_JUN_FENG_XIANG",
+    data_unit: "°",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 3,
+    data_type: "风",
+    data_item: "SHI_FEN_ZHONG_PING_JUN_FENG_SU",
+    data_name: "10分钟风速",
+    data_unit: "m/s",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 501,
+    data_type: "能见度",
+    data_item: "YI_FEN_ZHONG_PING_JUN_NENG_JIAN_DU",
+    data_name: "1分钟平均能见度",
+    data_unit: "m",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 101,
+    data_type: "温湿度",
+    data_item: "QI_WEN",
+    data_name: "气温",
+    data_unit: "℃",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_id: 201,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "水汽压",
+    data_item: "SHUI_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 109,
+    data_type: "温湿度",
+    data_item: "LU_DIAN_WEN_DU",
+    data_name: "露点温度",
+    data_unit: "℃",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
   {
-    id: "681913747276782417",
-    a: "测试本地",
-    b: "RS001",
-    d: "2024-09-02 22:57",
-    e: "0.2",
-    f: "150",
-    g: "25.3",
-    h: "61",
-    i: "/"
+    data_id: 202,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "本站气压",
+    data_item: "BEN_ZHAN_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },{
+    data_id: 207,
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_type: "气压",
+    data_name: "海平面气压",
+    data_item: "HAI_PING_MIAN_QI_YA",
+    data_unit: "hPa",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
+  },
+  {
+    data_r_table: "SHI_SHI_LIU_YAO_SU_SHU_JU",
+    data_id: 312,
+    data_type: "降水",
+    data_item: "XIAO_SHI_LEI_JI_JIANG_SHUI_LIANG_CHENG_ZHONG",
+    data_name: "小时累计降水量(称重)",
+    data_unit: "mm",
+    data_h_table: "LI_SHI_LIU_YAO_SU_SHU_JU",
+    data_value: "",
+    data_order: 0,
+    data_condition: 0
   }
-]);
+])
+
+
+const updateColumns = () => {
+  const column = [
+    { prop: "as_name", label: "站名", width: 100 },
+    { prop: "as_code", label: "站号", width: 100 },
+    { prop: "data_time_i", label: "观测时间", width: 170 }
+  ];
+
+  const newColumns = customizeColumns.value.map(item => ({
+    prop: item.data_id,
+    label: item.data_name +'('+item.data_unit+')',
+    sortable: true,
+    width: calculateTextLengthInPixels(item.data_name)
+  }));
+
+  columns = [...column, ...newColumns];
+  pageable.value.data_items = [...customizeColumns.value];
+  getList();
+}
 
-// 表格配置项
-const columns = reactive<ColumnProps[]>([
-  { prop: "a", label: "站名" },
-  { prop: "b", label: "站号" },
-  { prop: "d", label: "观测时间",sortable: true },
-  { prop: "e", label: "瞬风风速(m/s)",sortable: true },
-  { prop: "f", label: "瞬风方向(°)",sortable: true },
-  { prop: "g", label: "气温(℃)",sortable: true },
-  { prop: "h", label: "相对湿度(%)",sortable: true },
-  { prop: "i", label: "垂直能见度(m)",sortable: true }
-]);
+//操作 自定义部分表头
+const copiedCustomizeColumns = ref<any>([...customizeColumns.value]);
+
+// 查询自动站列表
+const queryas = ref<Platform>({
+  pagesize: 50,
+  currentpage: 1
+})
+
+const platformList =ref<any>([])
+
+const getPlatforms = async () => {
+  const { data } = await getPlatformList(queryas.value);
+  platformList.value = data.list
+};
+
+
+// 查询所有人工要素字典表
+const elementList =ref<any>([])
+const getAllRgDataList = async () => {
+  const { data } = await getRgDataList();
+  elementList.value = data.list
+};
+
+const getList = async () => {
+  const { data } = await getDataItemList(pageable.value);
+  processTableData.value = data.list
+  pageable.value.total = data.total
+};
+
+// 要素的选中和取消
+const toggleSelection=(item)=> {
+  item.isSelected=!item.isSelected
+  if(item.isSelected){
+    //添加
+    copiedCustomizeColumns.value.push(item)
+  }else {
+    //删除
+    copiedCustomizeColumns.value= copiedCustomizeColumns.value.filter(column => column.data_id !== item.data_id);
+  }
+
+}
+
+const handleSetting = () => {
+  copiedCustomizeColumns.value = [...customizeColumns.value]
+  elementList.value.forEach(element => {
+    const column = copiedCustomizeColumns.value.find(col => col.data_id === element.data_id);
+    if (column) {
+      element.isSelected = true;
+    } else {
+      element.isSelected = false;
+    }
+  });
+
+  dialog.title = "列表字段设置"
+  dialog.visible = true;
+}
+
+const submitForm = () => {
+  dialog.visible = false;
+  customizeColumns.value = [...copiedCustomizeColumns.value]
+  updateColumns()
+  saveCustomizeColumns()
+}
+
+// 大概计算字符串长度
+function calculateTextLengthInPixels(text) {
+  return (text.length * 14)+100;
+}
+
+//时间戳转换为指定格式的日期字符串
+function formatDate(timestamp) {
+  const date = new Date(timestamp * 1000); // 将时间戳转换为毫秒
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hours = String(date.getHours()).padStart(2, '0');
+  const minutes = String(date.getMinutes()).padStart(2, '0');
+  return `${year}-${month}-${day} ${hours}:${minutes}`;
+}
+
+onMounted(() => {
+  loadCustomizeColumns()
+  updateColumns()
+  getPlatforms()
+  getAllRgDataList()
+})
+
+// 保存customizeColumns数组到localStorage
+function saveCustomizeColumns() {
+  const jsonString = JSON.stringify(customizeColumns.value);
+  localStorage.setItem('customizeColumns2', jsonString);
+}
+
+// 从localStorage中获取customizeColumns数组
+function loadCustomizeColumns() {
+  const jsonString = localStorage.getItem('customizeColumns2');
+  if (jsonString) {
+    customizeColumns.value = JSON.parse(jsonString);
+  }
+}
 </script>
+<style>
+.tpc .el-time-spinner__wrapper {
+  width:100% !important;
+}
+</style>
+