From c53fc4edf8587a1ba44d5a57139baee3dcaba0b0 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期三, 25 十二月 2024 19:51:45 +0800
Subject: [PATCH] 参数配置

---
 src/views/monitorData/gasData/index.vue |  640 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 328 insertions(+), 312 deletions(-)

diff --git a/src/views/monitorData/gasData/index.vue b/src/views/monitorData/gasData/index.vue
index 1baa150..2495ad5 100644
--- a/src/views/monitorData/gasData/index.vue
+++ b/src/views/monitorData/gasData/index.vue
@@ -1,89 +1,89 @@
 <template>
-    <div class="system-gas-container">
-        <el-card shadow="hover">
-            <div class="system-menu-search mb15">
-                <el-form :inline="true" style="display: flex;align-items: flex-start;flex-wrap: wrap" >
-                    <el-form-item label="日期:" >
-                        <el-date-picker
-                            v-model="state.tableData.listQuery.searchParams.time"
-                            type="datetimerange"
-                            format="YYYY-MM-DD HH:mm:ss"
-                            range-separator="~"
-                            start-placeholder="开始时间"
-                            end-placeholder="结束时间"
-                            @change = "chooseTime"
-                        />
-                    </el-form-item>
-                    <el-form-item label="气体:">
-                        <el-select
-                            v-model="state.tableData.listQuery.searchParams.gas"
-                            class="w100"
-                            style="max-width: 180px"
-                            size="default"
-                        >
-                            <el-option v-for="item in state.tableData.gasList" :key="item.id" :label="item.name" :value="item.id"></el-option>
-                        </el-select>
-                    </el-form-item>
-                  <el-form-item label="方位:">
-                    <el-select
-                        v-model="state.tableData.listQuery.searchParams.position"
-                        class="w100"
-                        style="max-width: 180px"
-                        size="default"
-                    >
-                      <el-option v-for="item in state.tableData.positionList" :key="item.label" :label="item.value" :value="item.label"></el-option>
-                    </el-select>
-                  </el-form-item>
+  <div class="system-gas-container">
+    <el-card shadow="hover">
+      <div class="system-menu-search mb15">
+        <el-form :inline="true" style="display: flex;align-items: flex-start;flex-wrap: wrap" >
+          <el-form-item label="日期:" >
+            <el-date-picker
+                v-model="state.tableData.listQuery.searchParams.time"
+                type="datetimerange"
+                format="YYYY-MM-DD HH:mm:ss"
+                range-separator="~"
+                start-placeholder="开始时间"
+                end-placeholder="结束时间"
+                @change = "chooseTime"
+            />
+          </el-form-item>
+          <el-form-item label="气体:">
+            <el-select
+                v-model="state.tableData.listQuery.searchParams.gas"
+                class="w100"
+                style="max-width: 180px"
+                size="default"
+            >
+              <el-option v-for="item in state.tableData.gasList" :key="item.id" :label="item.name" :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="方位:">
+            <el-select
+                v-model="state.tableData.listQuery.searchParams.position"
+                class="w100"
+                style="max-width: 180px"
+                size="default"
+            >
+              <el-option v-for="item in state.tableData.positionList" :key="item.label" :label="item.value" :value="item.label"></el-option>
+            </el-select>
+          </el-form-item>
 
-                    <el-button size="default" type="primary" class="ml10" @click="search()">
-                        <el-icon>
-                            <ele-Search />
-                        </el-icon>
-                        查询
-                    </el-button>
-                    <el-button size="default" class="ml10" @click="reset()">
-                        <el-icon>
-                            <RefreshLeft />
-                        </el-icon>
-                        重置
-                    </el-button>
-                    <vue3-json-excel
-                        class="ml10"
-                        :json-data="state.tableData.excelData"
-                        :fields="fields"
-                        name="气体数据.xls"
-                    >
-                      <el-button  type="primary" :icon="Download" size="default">导出</el-button>
-                    </vue3-json-excel>
-                </el-form>
-            </div>
-            <div :id="gasChart" style="height: 500px;width: auto"></div>
-            <el-table :data="state.tableData.data" style="width: 100%;margin-top: 20px" v-loading="loading">
-                <el-table-column type="index" label="序号" width="80" />
-                <el-table-column align="center" prop="time" label="采集时间"/>
-                <el-table-column align="center" prop="windSpeed" label="风速"/>
-                <el-table-column align="center" prop="windDirection" label="风向"/>
-                <el-table-column align="center" prop="name" label="气体名称"/>
-                <el-table-column align="center" prop="gasValue" label="气体浓度"/>
-                <el-table-column align="center" prop="position" label="方位"/>
-            </el-table>
-            <br />
-            <el-pagination
-                @size-change="onHandleSizeChange"
-                @current-change="onHandleCurrentChange"
-                class="page-position"
-                :pager-count="5"
-                :page-sizes="[10, 20, 30]"
-                v-model:current-page="state.tableData.listQuery.pageIndex"
-                background
-                v-model:page-size="state.tableData.listQuery.pageSize"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="state.tableData.total">
-            </el-pagination>
-            <br />
-            <br />
-        </el-card>
-    </div>
+          <el-button size="default" type="primary" class="ml10" @click="search()">
+            <el-icon>
+              <ele-Search />
+            </el-icon>
+            查询
+          </el-button>
+          <el-button size="default" class="ml10" @click="reset()">
+            <el-icon>
+              <RefreshLeft />
+            </el-icon>
+            重置
+          </el-button>
+          <vue3-json-excel
+              class="ml10"
+              :json-data="state.tableData.excelData"
+              :fields="fields"
+              name="气体数据.xls"
+          >
+            <el-button  type="primary" :icon="Download" size="default">导出</el-button>
+          </vue3-json-excel>
+        </el-form>
+      </div>
+      <div :id="gasChart" style="height: 500px;width: auto"></div>
+      <el-table :data="state.tableData.data" style="width: 100%;margin-top: 20px" v-loading="loading">
+        <el-table-column type="index" label="序号" width="80" />
+        <el-table-column align="center" prop="time" label="采集时间"/>
+        <el-table-column align="center" prop="windSpeed" label="风速"/>
+        <el-table-column align="center" prop="windDirection" label="风向"/>
+        <el-table-column align="center" prop="name" label="气体名称"/>
+        <el-table-column align="center" prop="gasValue" label="气体浓度"/>
+        <el-table-column align="center" prop="position" label="方位"/>
+      </el-table>
+      <br />
+      <el-pagination
+          @size-change="onHandleSizeChange"
+          @current-change="onHandleCurrentChange"
+          class="page-position"
+          :pager-count="5"
+          :page-sizes="[10, 20, 30]"
+          v-model:current-page="state.tableData.listQuery.pageIndex"
+          background
+          v-model:page-size="state.tableData.listQuery.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="state.tableData.total">
+      </el-pagination>
+      <br />
+      <br />
+    </el-card>
+  </div>
 </template>
 
 <script setup lang="ts">
@@ -97,38 +97,38 @@
 import {Download} from "@element-plus/icons-vue";
 
 const state = reactive<TableGasState>({
-    tableData: {
-        data: [],
-        total: 0,
-        loading: false,
-        listQuery: {
-            pageIndex: 1,
-            pageSize: 10,
-            searchParams:{
-                startTime: '',
-                endTime: '',
-                time: [],
-                gas: '',
-                position: null
-            }
-        },
-        gasList: [],
-        positionList: [
-          {
-            value: '方位1',
-            label: 1
-          },
-          {
-            value: '方位2',
-            label: 2
-          },
-          {
-            value: '方位3',
-            label: 3
-          },
-        ],
-      excelData: []
-    }
+  tableData: {
+    data: [],
+    total: 0,
+    loading: false,
+    listQuery: {
+      pageIndex: 1,
+      pageSize: 10,
+      searchParams:{
+        startTime: '',
+        endTime: '',
+        time: [],
+        gas: '',
+        position: null
+      }
+    },
+    gasList: [],
+    positionList: [
+      {
+        value: '方位1',
+        label: 1
+      },
+      {
+        value: '方位2',
+        label: 2
+      },
+      {
+        value: '方位3',
+        label: 3
+      },
+    ],
+    excelData: []
+  }
 });
 const fields = ref({
   'time':'dataReceivingTime',
@@ -160,22 +160,22 @@
 const gasChart = ref("eChartgasN" + Date .now() + Math .random())
 
 const chooseTime = (val: any) => {
-    let sTime = Date.parse(new Date(val[0]));
-    let eTime = Date.parse(new Date(val[1]));
-    const datadiff = eTime - sTime + 86400000;
-    const time = 7 * 24 * 60 * 60 * 1000;
-    if (sTime > eTime) {
-        return false;
-    } else {
-        if (datadiff > time) {
-            ElMessage({
-                type: 'error',
-                message: '查询时间范围7天内',
-            })
-            getNowTime();
-            return false;
-        }
+  let sTime = Date.parse(new Date(val[0]));
+  let eTime = Date.parse(new Date(val[1]));
+  const datadiff = eTime - sTime + 86400000;
+  const time = 7 * 24 * 60 * 60 * 1000;
+  if (sTime > eTime) {
+    return false;
+  } else {
+    if (datadiff > time) {
+      ElMessage({
+        type: 'error',
+        message: '查询时间范围7天内',
+      })
+      getNowTime();
+      return false;
     }
+  }
 }
 const loading = ref(false);
 const dataZoomEnd = ref();
@@ -185,94 +185,110 @@
 const myChart = shallowRef(null)
 onMounted(
     () => {
-        getNowTime();
-        getAllGas();
+      getNowTime();
+      getAllGas();
     }
 );
 const getNowTime = () => {
-    let isDate = new Date()
-    let sTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}`
-    let eTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}`
-    sTime = `${sTime} 00:00:00`
-    eTime = `${eTime} ` + moment().format('HH:mm:ss')
-    state.tableData.listQuery.searchParams.time = [sTime,eTime];
+  let isDate = new Date()
+  let sTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}`
+  let eTime = `${isDate.getFullYear()}-${isDate.getMonth() + 1}-${isDate.getDate()}`
+  sTime = `${sTime} 00:00:00`
+  eTime = `${eTime} ` + moment().format('HH:mm:ss')
+  state.tableData.listQuery.searchParams.time = [sTime,eTime];
 }
 const initInfoData = async () => {
-    await exportGasData();
-    //折线图
-    const chartParam = {
-        startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'),
-        endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss'),
-        gasName: state.tableData.listQuery.searchParams.gas,
-        position: state.tableData.listQuery.searchParams.position
-    }
-    let resChart = await gasDataApi().getGasLineChart(chartParam);
-    if(resChart.data.code == 100) {
-        if (resChart.data.data) {
-            xData.value = resChart.data.data.map((item: any) => {
-                return item.time;
-            })
-            yData.value = resChart.data.data.map((item: any) => {
-                return item.gasValue;
-            })
-            dataZoomEnd.value = xData.value.length > 25 ? 30 : 100;
-        }else {
-            xData.value = [];
-            yData.value = [];
-            markLines.value = 0;
-            dataZoomEnd.value = 100;
+  await exportGasData();
+  //折线图
+  const chartParam = {
+    startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'),
+    endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss'),
+    gasName: state.tableData.listQuery.searchParams.gas,
+    position: state.tableData.listQuery.searchParams.position
+  }
+  let resChart = await gasDataApi().getGasLineChart(chartParam);
+  if(resChart.data.code == 100) {
+    if (resChart.data.data) {
+      xData.value = resChart.data.data.map((item: any) => {
+        return item.time;
+      })
+      if(resChart.data.data && resChart.data.data.length > 0){
+        const gasNewValue = resChart.data.data[0].gasCategoryConfigurationRespDTO
+        if(resChart.data.data && gasNewValue && gasNewValue != null ){
+          resChart.data.data.forEach(item => {
+            item.gasValue = ((Number(item.gasValue) - Number(gasNewValue.concentration)) * Number(gasNewValue.multiplication)).toFixed(2)
+          })
         }
-        initCharts();
+      }
+      yData.value = resChart.data.data.map((item: any) => {
+        return item.gasValue;
+      })
+      dataZoomEnd.value = xData.value.length > 25 ? 30 : 100;
     }else {
-        ElMessage({
-            type: 'warning',
-            message: resChart.data.msg
-        });
+      xData.value = [];
+      yData.value = [];
+      markLines.value = 0;
+      dataZoomEnd.value = 100;
     }
+    initCharts();
+  }else {
+    ElMessage({
+      type: 'warning',
+      message: resChart.data.msg
+    });
+  }
 
-    loading.value = true;
-    //表格
-    const pageParam = {
-        pageIndex: state.tableData.listQuery.pageIndex,
-        pageSize: state.tableData.listQuery.pageSize,
-        searchParams: {
-            startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'),
-            endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss'),
-            gasName: state.tableData.listQuery.searchParams.gas,
-            position: state.tableData.listQuery.searchParams.position
-        }
+  loading.value = true;
+  //表格
+  const pageParam = {
+    pageIndex: state.tableData.listQuery.pageIndex,
+    pageSize: state.tableData.listQuery.pageSize,
+    searchParams: {
+      startTime: moment(state.tableData.listQuery.searchParams.time[0]).format('YYYY-MM-DD HH:mm:ss'),
+      endTime: moment(state.tableData.listQuery.searchParams.time[1]).format('YYYY-MM-DD HH:mm:ss'),
+      gasName: state.tableData.listQuery.searchParams.gas,
+      position: state.tableData.listQuery.searchParams.position
     }
-    let res = await gasDataApi().getGasLinePage(pageParam);
-    if(res.data.code == 100) {
-        state.tableData.data = res.data.data;
-        state.tableData.total = res.data.total == null ? 0 :res.data.total;
-        state.tableData.listQuery.pageIndex = res.data.pageIndex;
-        state.tableData.listQuery.pageSize = res.data.pageSize;
-        loading.value = false;
-    }else {
-        ElMessage({
-            type: 'warning',
-            message: res.data.msg
-        });
+  }
+  let res = await gasDataApi().getGasLinePage(pageParam);
+  if(res.data.code == 100) {
+    state.tableData.data = res.data.data;
+    if(res.data.data && res.data.data.length > 0){
+      const gasNewValue =  state.tableData.data[0].gasCategoryConfigurationRespDTO
+      if(res.data.data && gasNewValue && gasNewValue != null ){
+        state.tableData.data.forEach(item => {
+          item.gasValue = ((Number(item.gasValue) - Number(gasNewValue.concentration)) * Number(gasNewValue.multiplication)).toFixed(2)
+        })
+      }
     }
+    state.tableData.total = res.data.total == null ? 0 :res.data.total;
+    state.tableData.listQuery.pageIndex = res.data.pageIndex;
+    state.tableData.listQuery.pageSize = res.data.pageSize;
+    loading.value = false;
+  }else {
+    ElMessage({
+      type: 'warning',
+      message: res.data.msg
+    });
+  }
 };
 
 const getAllGas = async () => {
-    let res = await gasManageApi().getGas({});
-    if(res.data.code == 100) {
-        state.tableData.gasList = res.data.data;
-        console.log("气体",state.tableData.gasList)
-        //默认选择第一个气体
-        state.tableData.listQuery.searchParams.gas = state.tableData.gasList[0].id;
-        markLines.value = state.tableData.gasList[0].threshold;
-        await initInfoData();
+  let res = await gasManageApi().getGas({});
+  if(res.data.code == 100) {
+    state.tableData.gasList = res.data.data;
+    console.log("气体",state.tableData.gasList)
+    //默认选择第一个气体
+    state.tableData.listQuery.searchParams.gas = state.tableData.gasList[0].id;
+    markLines.value = state.tableData.gasList[0].threshold;
+    await initInfoData();
 
-    }else {
-        ElMessage({
-            type: 'warning',
-            message: res.data.msg
-        });
-    }
+  }else {
+    ElMessage({
+      type: 'warning',
+      message: res.data.msg
+    });
+  }
 };
 const exportGasData = async () => {
   const pageParam = {
@@ -304,132 +320,132 @@
 }
 
 const onHandleSizeChange = (val: number) => {
-    state.tableData.listQuery.pageSize = val;
-    initInfoData();
+  state.tableData.listQuery.pageSize = val;
+  initInfoData();
 };
 // 分页改变
 const onHandleCurrentChange = (val: number) => {
-    state.tableData.listQuery.pageIndex = val;
-    initInfoData();
+  state.tableData.listQuery.pageIndex = val;
+  initInfoData();
 };
 const search = () => {
-    state.tableData.listQuery.pageIndex = 1;
-    const gasObj = state.tableData.gasList.filter(item => {
-        return item.id == state.tableData.listQuery.searchParams.gas
-    });
-    markLines.value = gasObj[0].threshold;
-    initInfoData();
+  state.tableData.listQuery.pageIndex = 1;
+  const gasObj = state.tableData.gasList.filter(item => {
+    return item.id == state.tableData.listQuery.searchParams.gas
+  });
+  markLines.value = gasObj[0].threshold;
+  initInfoData();
 }
 const reset = () => {
-    getNowTime();
-    state.tableData.listQuery.searchParams.gas = state.tableData.gasList[0].id;
-    markLines.value = state.tableData.gasList[0].threshold;
-    state.tableData.listQuery.pageIndex = 1;
-    state.tableData.listQuery.searchParams.position = null;
-    initInfoData();
+  getNowTime();
+  state.tableData.listQuery.searchParams.gas = state.tableData.gasList[0].id;
+  markLines.value = state.tableData.gasList[0].threshold;
+  state.tableData.listQuery.pageIndex = 1;
+  state.tableData.listQuery.searchParams.position = null;
+  initInfoData();
 }
 
 const initCharts = () => {
-    if (myChart.value != null && myChart.value != "" && myChart.value != undefined) {
-        myChart.value.dispose();
-    }
-     myChart.value = echarts.init(document.getElementById(gasChart.value));
-    // 指定图表的配置项和数据
-    const option = {
-        tooltip: {
-            trigger: "axis",
-            axisPointer: {
-                type: 'shadow'
+  if (myChart.value != null && myChart.value != "" && myChart.value != undefined) {
+    myChart.value.dispose();
+  }
+  myChart.value = echarts.init(document.getElementById(gasChart.value));
+  // 指定图表的配置项和数据
+  const option = {
+    tooltip: {
+      trigger: "axis",
+      axisPointer: {
+        type: 'shadow'
+      },
+    },
+    xAxis: {
+      show: true,
+      type: 'category',
+      data: xData.value
+    },
+    yAxis: {
+      show: true,
+      type: 'value',
+      max: Math.max(markLines.value,...yData.value),
+      min: Math.min(markLines.value,...yData.value)
+    },
+    graphic: {
+      type: 'text',     // 类型:文本
+      left: 'center',
+      top: 'middle',
+      silent: true,     // 不响应事件
+      invisible: yData.value.length > 0,   // 有数据就隐藏
+      style: {
+        fill: '#9d9d9d',
+        fontWeight: 'bold',
+        text: '暂无数据',
+        fontFamily: 'Microsoft YaHei',
+        fontSize: '25px'
+      }
+    },
+    series: [
+      {
+        // name : '总计',
+        data: yData.value,
+        type: 'line',
+        markLine: {//图表标线
+          symbol: "none",
+          data: [{
+            label: {
+              position: 'end', // 表现内容展示的位置
+              color: 'red'  // 展示内容颜色
             },
-        },
-        xAxis: {
-            show: true,
-            type: 'category',
-            data: xData.value
-        },
-        yAxis: {
-            show: true,
-            type: 'value',
-            max: Math.max(markLines.value,...yData.value),
-            min: Math.min(markLines.value,...yData.value)
-        },
-        graphic: {
-            type: 'text',     // 类型:文本
-            left: 'center',
-            top: 'middle',
-            silent: true,     // 不响应事件
-            invisible: yData.value.length > 0,   // 有数据就隐藏
-            style: {
-                fill: '#9d9d9d',
-                fontWeight: 'bold',
-                text: '暂无数据',
-                fontFamily: 'Microsoft YaHei',
-                fontSize: '25px'
+            yAxis: markLines.value == 0 ? '':markLines.value ,
+            lineStyle: {
+              color: "red",
+              width: markLines.value == 0 ? 0: 1, // 0 的时候可以隐藏线
+              type: "solid" // 实线,不写默认虚线
             }
+          },],//type: 'average', 平均值,  min最小值,  max 最大值,  median中位数
         },
-        series: [
-            {
-                // name : '总计',
-                data: yData.value,
-                type: 'line',
-                markLine: {//图表标线
-                    symbol: "none",
-                    data: [{
-                        label: {
-                            position: 'end', // 表现内容展示的位置
-                            color: 'red'  // 展示内容颜色
-                        },
-                        yAxis: markLines.value == 0 ? '':markLines.value ,
-                        lineStyle: {
-                            color: "red",
-                            width: markLines.value == 0 ? 0: 1, // 0 的时候可以隐藏线
-                            type: "solid" // 实线,不写默认虚线
-                        }
-                    },],//type: 'average', 平均值,  min最小值,  max 最大值,  median中位数
-                },
-            },
-        ],
-        dataZoom: [
-            {
-                type: 'slider',
-                show: dataZoomEnd.value == 100 ? false : true,
-                realtime: true,
-                start: 0,
-                end: dataZoomEnd.value
-            },
-            {
-                type: 'inside',
-                realtime: true,
-                start: 0,
-                end: dataZoomEnd.value
-            },
-        ]
-    };
-    // 使用刚指定的配置项和数据显示图表。
-    myChart.value.setOption(option,true);
-    //自适应宽度
-    window.addEventListener('resize',function () {
-        myChart.value.resize();
-    })
+      },
+    ],
+    dataZoom: [
+      {
+        type: 'slider',
+        show: dataZoomEnd.value == 100 ? false : true,
+        realtime: true,
+        start: 0,
+        end: dataZoomEnd.value
+      },
+      {
+        type: 'inside',
+        realtime: true,
+        start: 0,
+        end: dataZoomEnd.value
+      },
+    ]
+  };
+  // 使用刚指定的配置项和数据显示图表。
+  myChart.value.setOption(option,true);
+  //自适应宽度
+  window.addEventListener('resize',function () {
+    myChart.value.resize();
+  })
 }
 </script>
 <style scoped lang="scss">
 .yellow{
-    width: 80px;
-    height: 30px;
-    background-color: rgb(255,223,37);
-    line-height: 30px;
-    color: white;
-    box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
-    padding: 3px
+  width: 80px;
+  height: 30px;
+  background-color: rgb(255,223,37);
+  line-height: 30px;
+  color: white;
+  box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
+  padding: 3px
 }
 .red{
-    width: 80px;
-    height: 30px;
-    background-color: rgb(239,90,161);
-    line-height: 30px;
-    color: white;
-    box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
-    padding: 3px
+  width: 80px;
+  height: 30px;
+  background-color: rgb(239,90,161);
+  line-height: 30px;
+  color: white;
+  box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
+  padding: 3px
 }
 </style>

--
Gitblit v1.9.2