Browse Source

代码提交

cxs 4 months ago
parent
commit
d5cb66a06f

+ 39 - 7
src/views/alarm/allData/index.vue

@@ -31,7 +31,7 @@
           <el-table-column v-bind="item" :fixed="item.fixed" :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)}}
+                <div :style="getStatus(scope.row) ? 'color: red;' : ''">{{ formatDate(scope.row.data_time_i) }}</div>
               </template>
             </template>
           </el-table-column>
@@ -162,7 +162,7 @@
         </el-tabs>
         <div class="selected-list-box">
           <div class="disposition-title" style="margin-top: 0px">已选要素</div>
-          <div class="selected-list-c">
+          <div class="selected-list-c" ref="scrollContainer">
             <template v-for="(item,index) in copiedCustomizeColumns" :key="item.id">
               <div  :class="selectedItemIndex===index?'selected-item-tag-active':'selected-item-tag'" @click="changeSelected(index)"
                     draggable="true"
@@ -196,7 +196,7 @@ import SelectItem from "@/components/SelectItem/index.vue";
 import {ref, reactive, onMounted, onDeactivated, onActivated, computed} from "vue";
 import { ColumnProps } from "@/components/ProTable/interface";
 import {ElTable} from "element-plus";
-import {getDataItemList, getPlatformList, getRgDataList} from "@/api/modules/allData";
+import {getAs_status, getDataItemList, getPlatformList, getRgDataList} from "@/api/modules/allData";
 import { Platform} from "@/api/interface";
 import {useUserStore} from "@/stores/modules/user";
 const tableRef = ref<InstanceType<typeof ElTable>>();
@@ -205,6 +205,9 @@ const dialog = reactive<any>({
   title: ''
 });
 
+const scrollContainer = ref<HTMLElement | null>(null);
+const scrollPosition = ref(0);
+
 const cancel = () => {
   dialog.visible = false;
 }
@@ -261,7 +264,7 @@ const handleQuery = () => {
 const resetQuery = () => {
   const allCodes = platformList.value.map(item => item.as_code);
   pageable.value.as_code_list = allCodes
-  selectedData.value = []
+  selectedData.value = allCodes
   pageable.value.pageNum = 1;
   pageable.value.time_order =0
   pageable.value.data_order =[]
@@ -445,6 +448,10 @@ const changeMoveUp = () =>{
     copiedCustomizeColumns.value[selectedItemIndex.value - 1] = copiedCustomizeColumns.value[selectedItemIndex.value]
     copiedCustomizeColumns.value[selectedItemIndex.value] = temp
     selectedItemIndex.value--
+
+    if (scrollContainer.value) {
+      scrollContainer.value.scrollTop -= 50;
+    }
   }
 }
 
@@ -455,6 +462,10 @@ const changeMoveDown = ()=>{
     copiedCustomizeColumns.value[selectedItemIndex.value + 1] = copiedCustomizeColumns.value[selectedItemIndex.value]
     copiedCustomizeColumns.value[selectedItemIndex.value] = temp
     selectedItemIndex.value++
+
+    if (scrollContainer.value) {
+      scrollContainer.value.scrollTop += 50;
+    }
   }
 }
 
@@ -469,6 +480,7 @@ const drop = (event, index) => {
   // 移动数组中的元素来更新顺序
   const draggedItem = copiedCustomizeColumns.value.splice(draggedIndex, 1)[0];
   copiedCustomizeColumns.value.splice(index, 0, draggedItem);
+  selectedItemIndex.value = index
 };
 
 const changeRemove= ()=>{
@@ -557,9 +569,10 @@ const getList = async () => {
     pageable.value.total=0
     return;
   }
+  getStations_Status();
   const { data } = await getDataItemList(pageable.value);
   processTableData.value = data.list
-  
+
   pageable.value.total = data.total
 };
 
@@ -617,12 +630,30 @@ function formatDate(timestamp) {
 onMounted(() => {
   const allCodes = platformList.value.map(item => item.as_code);
   pageable.value.as_code_list = allCodes
-
+  selectedData.value = allCodes
   loadCustomizeColumns()
   updateColumns()
   getAllRgDataList()
 })
 
+const statusList = ref([])
+// 更新站状态
+const getStations_Status =async () => {
+  const {data} = await getAs_status();
+  statusList.value = data.list
+}
+
+const getStatus=(item)=>{
+  const level_main = item.as_code + "|LEVEL_MAIN"
+  const found_main = statusList.value.find(item => item.key === level_main);
+  if(found_main.as_link ===2){
+   return true
+  }else {
+    return false
+  }
+}
+
+
 // 保存customizeColumns数组到localStorage
 function saveCustomizeColumns() {
   const jsonString = JSON.stringify(customizeColumns.value);
@@ -645,11 +676,12 @@ onActivated(() => {
   }, 30 * 1000);
 });
 
+
+
 onDeactivated(() => {
   clearInterval(intervalId);
 });
 
-
 const renderHeader = ({ column }: { column: any }) => {
   const span = document.createElement('span');
   span.innerText = column.label;

+ 2 - 2
src/views/alarm/allWeather/index.vue

@@ -164,7 +164,7 @@ const resetQuery = () => {
   const allCodes = platformList.value.map(item => item.as_code);
   pageable.value.as_code_list = allCodes
 
-  selectedData.value = []
+  selectedData.value = allCodes
 
   as_code_list.value = '';
   pageable.value.pageNum = 1;
@@ -242,8 +242,8 @@ let intervalId;
 onMounted(() => {
   const allCodes = platformList.value.map(item => item.as_code);
   pageable.value.as_code_list = allCodes
+  selectedData.value = allCodes
   getList();
-
 });
 
 onActivated(() => {

+ 83 - 114
src/views/query/deviceHealth/index.vue

@@ -6,55 +6,30 @@
         <div class="header-button-lf">
           <el-form :model="pageable" label-width="auto" :inline="true">
             <el-form-item label="自动站:">
-              <el-checkbox v-model="isStand" label="多站"/>
-
-              <!--多站选择-->
-              <SelectItem v-show="isStand"   :select-data="selectedData" :select-list="platformList" :is-checkbox="false" @update:selectedItems="selectedItems" style="width: 200px;margin:0 10px"> </SelectItem>
-              <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>
-
               <!--单站选择-->
-              <SelectItem v-show="!isStand"  :select-data="selectedData" :select-list="platformList" :is-checkbox="true" @update:selectedItems="selectedItems2" style="width: 200px;margin:0 10px"></SelectItem>
+              <SelectItem :select-data="selectedData" :select-list="platformList" :is-checkbox="true" @update:selectedItems="selectedItems2" style="width: 200px;margin:0 10px"></SelectItem>
+              <el-switch
+                v-model="hot"
+                inline-prompt
+                active-text="正点"
+                size="default"
+                inactive-text="分钟"
+                @change="changeHot"
+                style="margin: 0 20px;"
+              />
 
-              <el-form-item label="观测时间:" v-if="!isStand">
-                <el-switch
-                  v-model="hot"
-                  inline-prompt
-                  active-text="正点"
-                  size="default"
-                  inactive-text="分钟"
-                  @change="changeHot"
-                />
+              <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 label="观测时间:">
                 <span class="form-item__label">日界:</span>
                 <el-switch
                   v-model="points"
@@ -64,27 +39,7 @@
                   inactive-text="18点"
                   @change="changePoints"
                 />
-
-                <el-date-picker
-                  style="margin-left: 10px"
-                  v-model="singleTime"
-                  type="daterange"
-                  range-separator="至"
-                  start-placeholder="开始时间"
-                  end-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-date-picker style="margin-left: 10px" v-model="singleTime" type="date" placeholder="请选择" @change="changeTime" />
               </el-form-item>
 
             </el-form-item>
@@ -201,8 +156,8 @@ const isStand =ref(true)
 const as_code_list = ref(undefined);
 const hot = ref(true);
 const points =ref(userForm.value.role_id==='预报员' ? false : true);
-const singleTime =ref(undefined)
-const multiTime =ref(undefined)
+const singleTime =ref()
+const multiTime =ref()
 
 const dragStart = (event, index) => {
   event.dataTransfer.effectAllowed = 'move';
@@ -315,28 +270,33 @@ const timeSpaceList= [
 ]
 
 const changePoints=(row)=>{
-  singleTime.value =undefined
-  pageable.value.begin_time = undefined
-  pageable.value.end_time = undefined
-
+  changeTime(singleTime.value)
+  getList();
 }
-const changeTime =(time)=> {
-  const [start, end] = time;
-
-  const startTime2 = new Date(start).getTime();
-  const endTime2= new Date(end).getTime();
+const changeTime = (time) => {
+  console.log(time)
+  const timeStamp = new Date(time).getTime();
   if (points.value) {
     //0点
-    const startTime = startTime2 + 60 * 1000; // 添加1分钟(60秒)
-    const endTime = endTime2 + 24 * 60 * 60 * 1000; // 添加一天(24小时)
+    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 = startTime2 + 18 * 60 * 60 * 1000 + 60 * 1000;// 添加18小时和1分钟(18*60*60秒+60秒)
-    const endTimeStamp = endTime2 + 18 * 60 * 60 * 1000 + 60 * 1000;// 添加18小时和1分钟(18*60*60秒+60秒)
-    pageable.value.begin_time = startTimeStamp / 1000
-    pageable.value.end_time = endTimeStamp / 1000
+    // 前一天的18:01:00
+    const previousDay = new Date(time);
+    previousDay.setDate(previousDay.getDate() - 1); // 设置为前一天
+    previousDay.setHours(18, 1, 0, 0); // 设置时间为18:01:00
+    const startTimeStamp = previousDay.getTime(); // 获取前一天18:01:00的时间戳
+
+    // 当天的18:00:00
+    const nextDay = new Date(time);
+    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;
   }
 }
 
@@ -711,9 +671,7 @@ const cancel = () => {
 }
 
 onMounted(() => {
-  const allCodes = platformList.value.map(item => item.as_code);
-  pageable.value.as_code_list = allCodes
-
+  initSingle();
   loadCustomizeColumns()
   updateColumns()
   getSensorList()
@@ -810,33 +768,7 @@ const selectedItems2 =(data)=>{
 
 //重置功能
 const resetQuery = () => {
-  const allCodes = platformList.value.map(item => item.as_code);
-  pageable.value.as_code_list = allCodes
-  selectedData.value = []
-
-  isStand.value = true
-  as_code_list.value = undefined;
-  hot.value = true;
-  points.value = userForm.value.role_id==='预报员' ? false : true;
-  singleTime.value=undefined;
-  multiTime.value = undefined;
-
-
-  pageable.value.time_order = 1
-  pageable.value.time_space =60
-  pageable.value.begin_time =undefined
-  pageable.value.end_time = undefined
-  pageable.value.data_type = false
-  pageable.value.state_list =[
-    "STATE_PART",
-    "STATE_SENSOR",
-    "STATE_ARTIFICIAL"
-  ]
-
-  pageable.value.pageNum = 1
-  pageable.value.pageSize =24
-  pageable.value.total =0
-
+  initSingle();
   processTableData.value = []
   getList();
 };
@@ -885,6 +817,43 @@ function findLabelByValue(noticeTypeList, value) {
   const item = noticeTypeList.find(item => item.value === value);
   return item ? item.label : null;
 }
+
+
+// 单站
+const initSingle=()=>{
+  pageable.value = {
+    time_space:60,
+    begin_time: undefined,
+    end_time: undefined,
+    data_type: false,
+    time_order: 0,
+    as_code_list:[],
+    data_items:[],
+    state_list: [
+      "STATE_PART",
+      "STATE_SENSOR",
+      "STATE_ARTIFICIAL"
+    ],
+    pageNum: 1,
+    pageSize: 24
+  }
+  //站点数据
+  if (platformList.value && platformList.value.length > 0) {
+    pageable.value.as_code_list = [platformList.value[0].as_code];
+  } else {
+    pageable.value.as_code_list =  [];
+  }
+  selectedData.value = pageable.value.as_code_list
+  //正点
+  hot.value = true
+  pageable.value.time_space = 60
+  points.value = userForm.value.role_id === '预报员' ? false : true;
+  const singleTime2 = ref(new Date());
+  singleTime.value= singleTime2.value.setHours(0, 0, 0, 0);
+  changeTime(singleTime.value)
+  pageable.value.data_items = [...customizeColumns.value];
+}
+
 </script>
 
 <style scoped lang="scss">

+ 102 - 81
src/views/query/queryObservationData/index.vue

@@ -7,43 +7,41 @@
           <el-form :model="pageable" label-width="auto" :inline="true">
             <el-form-item label="自动站:">
               <el-checkbox v-model="isStand" @change="changeStand" label="多站" />
+              <!--多选自动站-->
               <SelectItem v-show="isStand" :select-data="selectedData" :select-list="platformList" :is-checkbox="false"
-                @update:selectedItems="selectedItems" style="width: 200px;margin:0 10px"> </SelectItem>
+                          @update:selectedItems="selectedItems" style="width: 200px;margin:0 10px"> </SelectItem>
 
+              <!--单站自动站选择-->
+              <SelectItem v-show="!isStand" :select-data="selectedData" :select-list="platformList" :is-checkbox="true"
+                          @update:selectedItems="selectedItems2" style="width: 200px;margin:0 10px"> </SelectItem>
+
+              <!--正点和分钟-->
+              <el-switch v-model="hot" inline-prompt active-text="正点" size="default" inactive-text="分钟" @change="changeHot"  style="margin-right: 20px;"/>
+
+              <!--数据密度-->
+              <el-form-item v-if="!hot" label="数据密度:">
+                <el-select v-model="pageable.time_space" style="width: 100px" 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 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">
+                                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="选择日期时间">
+                                @change="changeMultiTime" format="YYYY-MM-DD HH:mm" placeholder="选择日期时间">
                 </el-date-picker>
               </el-form-item>
 
-              <!--单站选择-->
-
-              <SelectItem v-show="!isStand" :select-data="selectedData" :select-list="platformList" :is-checkbox="true"
-                @update:selectedItems="selectedItems2" style="width: 200px;margin:0 10px"> </SelectItem>
-
-
-              
+              <!--单选自动站 观测时间-->
               <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__label2">日界:</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-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: 100px" 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>
@@ -260,19 +258,12 @@ const dialog = reactive<any>({
 });
 
 const changeStand = () => {
-  pageable.value = {
-    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
+  if(isStand.value){
+    initMany()
+  }else {
+    initSingle()
   }
-  pageable.value.data_items = [...customizeColumns.value];
+  getList()
 }
 
 const dragStart = (event, index) => {
@@ -410,16 +401,15 @@ const pageable = ref<any>({
   total: 0
 });
 
-const isStand = ref(true)
+const isStand = ref(false)
 const as_code_list = ref(undefined);
 const hot = ref(true);
 const points = ref(userForm.value.role_id === '预报员' ? false : true);
-const singleTime = ref(undefined)
-const multiTime = ref(undefined)
+const singleTime = ref()
+const multiTime = ref()
 
 
 const changeHot = (row) => {
-  console.log(row)
   if (row) {
     pageable.value.time_space = 60
   } else {
@@ -441,12 +431,13 @@ const changeMultiTime = (time) => {
 
 
 const changePoints = (row) => {
-  singleTime.value = undefined
-  pageable.value.begin_time = undefined
-  pageable.value.end_time = undefined
-
+  changeTime(singleTime.value)
+  getList();
 }
+
+//
 const changeTime = (time) => {
+  console.log(time)
   const timeStamp = new Date(time).getTime();
   if (points.value) {
     //0点
@@ -470,22 +461,8 @@ const changeTime = (time) => {
     pageable.value.begin_time = startTimeStamp / 1000;
     pageable.value.end_time = endTimeStamp / 1000;
   }
-
-
-
-
-}
-
-const changeAslist = (row) => {
-  if (row) {
-    pageable.value.as_code_list = [row]
-  } else {
-    pageable.value.as_code_list = []
-  }
-
 }
 
-
 // 查询功能
 const handleQuery = () => {
   if (isStand.value) {
@@ -522,8 +499,6 @@ const selectedItems = (data) => {
   }
 };
 
-
-
 //搜索站号
 const selectedItems2 = (data) => {
   if (data.length > 0) {
@@ -537,25 +512,7 @@ const selectedItems2 = (data) => {
 
 //重置功能
 const resetQuery = () => {
-  const allCodes = platformList.value.map(item => item.as_code);
-  pageable.value.as_code_list = allCodes
-  selectedData.value = []
-
-  isStand.value = true
-  as_code_list.value = undefined;
-  hot.value = true;
-  points.value = userForm.value.role_id === '预报员' ? false : true;
-  singleTime.value = undefined;
-  multiTime.value = undefined;
-  pageable.value.time_order = 0
-  pageable.value.time_space = 60
-  pageable.value.begin_time = undefined
-  pageable.value.end_time = undefined
-  pageable.value.pageNum = 1
-  pageable.value.pageSize = 20
-  pageable.value.total = 0
-  pageable.value.data_items = [...customizeColumns.value];
-  processTableData.value = []
+  initSingle();
   getList();
 };
 
@@ -820,12 +777,15 @@ function formatDate(timestamp) {
   const day = String(date.getDate()).padStart(2, '0');
   const hours = String(date.getHours()).padStart(2, '0');
   const minutes = String(date.getMinutes()).padStart(2, '0');
+  if (isStand.value && hot.value) {
+    return `${year}-${month}-${day} ${hours}`;
+  }
+  // 否则显示年月日小时分钟
   return `${year}-${month}-${day} ${hours}:${minutes}`;
 }
 
 onMounted(() => {
-  const allCodes = platformList.value.map(item => item.as_code);
-  pageable.value.as_code_list = allCodes
+  initSingle()
   loadCustomizeColumns()
   updateColumns()
   getAllRgDataList()
@@ -853,6 +813,67 @@ const renderHeader = ({ column }: { column: any }) => {
   document.body.removeChild(span);
 };
 
+
+// 单站
+const initSingle=()=>{
+  pageable.value = {
+    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
+  }
+  //站点数据
+  if (platformList.value && platformList.value.length > 0) {
+    pageable.value.as_code_list = [platformList.value[0].as_code];
+  } else {
+    pageable.value.as_code_list =  [];
+  }
+  selectedData.value = pageable.value.as_code_list
+  //正点
+  hot.value = true
+  pageable.value.time_space = 60
+  points.value = userForm.value.role_id === '预报员' ? false : true;
+  const singleTime2 = ref(new Date());
+  singleTime.value= singleTime2.value.setHours(0, 0, 0, 0);
+  changeTime(singleTime.value)
+  pageable.value.data_items = [...customizeColumns.value];
+}
+
+// 多站
+const initMany=()=>{
+  pageable.value = {
+    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 allCodes = platformList.value.map(item => item.as_code);
+  pageable.value.as_code_list = allCodes
+  selectedData.value = pageable.value.as_code_list
+  //正点
+  hot.value = true
+  pageable.value.time_space = 60
+  points.value = userForm.value.role_id === '预报员' ? false : true;
+  const singleTime2 = ref(new Date());
+  multiTime.value= singleTime2.value.setHours(0, 0, 0, 0);
+  changeMultiTime(multiTime.value)
+
+  pageable.value.data_items = [...customizeColumns.value];
+}
+
 </script>
 <style lang="scss" scoped >
 .tpc .el-time-spinner__wrapper {