对比新文件 |
| | |
| | | // 水温深度选择器配置 |
| | | export const deepCOnfig = [ |
| | | { label: '10米', value: 10 }, |
| | | { label: '20米', value: 20 }, |
| | | { label: '30米', value: 30 }, |
| | | { label: '40米', value: 40 }, |
| | | { label: '50米', value: 50 }, |
| | | { label: '60米', value: 60 }, |
| | | { label: '70米', value: 70 }, |
| | | { label: '80米', value: 80 }, |
| | | { label: '90米', value: 90 }, |
| | | { label: '100米', value: 100 }, |
| | | ] |
| | | |
| | | // 水温报表配置 |
| | | export const deepTableConfig = [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150 ] |
| | |
| | | pointCode: '监控点编号', |
| | | pointType: '监控类型', |
| | | waterWidth: '水面宽度', |
| | | waterDistance: '起点距', |
| | | address: '详细地址', |
| | | createTimeView: '创建时间', |
| | | imageUrl: '图片', |
| | |
| | | pointType: '监控点类型', |
| | | parentId: '父级监控点', |
| | | waterWidth: '水面宽度', |
| | | waterDistance: '起点距', |
| | | address: '详细地址', |
| | | imageUrl: '图片', |
| | | remark: '备注' |
| | |
| | | pointType: '', |
| | | parentId: '', |
| | | waterWidth: '', |
| | | waterDistance: '', |
| | | address: '', |
| | | imageUrl: '', |
| | | remark: '' |
| | |
| | | pointCode: '', |
| | | pointType: '', |
| | | waterWidth: '', |
| | | waterDistance: '', |
| | | address: '', |
| | | imageUrl: '', |
| | | remark: '' |
| | |
| | | <el-form-item :label="formLabel.waterWidth" prop="waterWidth"> |
| | | <el-input v-model="form.waterWidth" :placeholder="'请输入'+formLabel.waterWidth"/> |
| | | </el-form-item> |
| | | <el-form-item></el-form-item> |
| | | <el-form-item :label="formLabel.waterDistance" prop="waterDistance"> |
| | | <el-input v-model="form.waterDistance" :placeholder="'请输入'+formLabel.waterDistance"/> |
| | | </el-form-item> |
| | | <el-form-item label="图片" prop="imageUrl" style="flex: 1"> |
| | | <upload-icons @uploadData="uploadData" :imageList="form.imageUrl" :limit="1"></upload-icons> |
| | | <span style="display: block;">(请上传1张设备图片)</span> |
| | |
| | | <div class="val"><span>{{ item.waterLevel }}</span>m</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">流速:</div> |
| | | <div class="name">表面流速:</div> |
| | | <div class="val"><span>{{ item.flowVelocity }}</span>m/s</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">瞬时流量:</div> |
| | | <div class="val"><span>{{ item.newFlow }}</span>m³/h</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">累计流量:</div> |
| | | <div class="val"><span>{{ item.totalFlow }}</span>m³</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">水面宽度:</div> |
| | | <div class="val"><span>{{ item.waterWidth }}</span>m</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">平均流速:</div> |
| | | <div class="val"><span>{{ item.avgVelocity }}</span>m/s</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">过水面积:</div> |
| | | <div class="val"><span>{{ item.waterArea }}</span>m³</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">雷达流速:</div> |
| | | <div class="val"><span>{{ item.radarVelocity }}</span>m/s</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">实时流量:</div> |
| | | <div class="val"><span>{{ item.newFlow }}</span>m³/h</div> |
| | | </div> |
| | | <div class="info-item"> |
| | | <div class="name">起点距:</div> |
| | | <div class="val"><span>{{ item.radarDistance }}</span>m</div> |
| | | </div> |
| | | </div> |
| | | <div class="info-btn"> |
| | | <div class="fullScreen" v-if="item.url" @click="handleFullScreen(index)"> |
| | |
| | | import moment from "moment"; |
| | | import { getGraphicData } from '@/api/screen/graphic/index.js' |
| | | import { debounce } from '@/utils/tool.js' |
| | | |
| | | const deepCOnfig = [ |
| | | { label: '10米', value: 10 }, |
| | | { label: '20米', value: 20 }, |
| | | { label: '30米', value: 30 }, |
| | | { label: '40米', value: 40 }, |
| | | { label: '50米', value: 50 }, |
| | | { label: '60米', value: 60 }, |
| | | { label: '70米', value: 70 }, |
| | | { label: '80米', value: 80 }, |
| | | { label: '90米', value: 90 }, |
| | | { label: '100米', value: 100 }, |
| | | ] |
| | | import {deepCOnfig} from '@/config/index.js' |
| | | |
| | | const menuList = ref([]) |
| | | const timeType = ref(1) //时间类型 1日 2周 3月 4季 5年 |
| | |
| | | <div class="home"> |
| | | <div class="home-bg"></div> |
| | | <div class="home-c"> |
| | | <div class="point" v-for="(item, index) in monitorList" :key="index" :style="{left: item.left, top: item.top}"> |
| | | <div class="point" v-for="(item, index) in monitorList" :key="index" |
| | | :style="{left: item.left, top: item.top}"> |
| | | <div class="point-address" @click="handleShow(index)"></div> |
| | | <div class="point-message" v-show="item.showMsg"> |
| | | <div class="msg-box"> |
| | |
| | | <div class="num"> |
| | | <div class="item"> |
| | | <div class="item-t">水温:</div> |
| | | <div class="item-num"><span>{{item.waterTemperature}}</span>°C</div> |
| | | <div class="item-num"><span>{{ item?.dataList?.find(f => f.code === selectDeep[index]).value }}</span>°C</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="item-t">水位:</div> |
| | | <div class="item-num"><span>{{ item.waterLevel }}</span>m</div> |
| | | <div class="item-num"> |
| | | <el-select |
| | | v-model="selectDeep[index]" |
| | | class="val-select" |
| | | placeholder="Select" |
| | | style="width: 10rem" |
| | | > |
| | | <el-option |
| | | v-for="item in item?.dataList" |
| | | :key="item.code" |
| | | :label='item.code' |
| | | :value="item.code" |
| | | /> |
| | | </el-select> |
| | | m |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="shebei"> |
| | |
| | | import {ref, onMounted} from "vue"; |
| | | |
| | | const monitorList = ref([]) |
| | | const selectDeep = ref([]) |
| | | |
| | | // 标点配置 |
| | | const config = [ |
| | |
| | | let data = res.data.list.filter(el => el.parentId !== 0) |
| | | if(data.length > 2) data = data.splice(0, 1) |
| | | monitorList.value = data.map((item, index) => { |
| | | selectDeep.value[index] = item?.dataList[0].code |
| | | return { |
| | | ...item, |
| | | ...config[index] |
| | |
| | | <style scoped lang="scss"> |
| | | .home{ |
| | | height: 100%; |
| | | |
| | | .home-bg{ |
| | | position: absolute; |
| | | left: 0; |
| | |
| | | background-size: 100% 100%; |
| | | z-index: 11; |
| | | } |
| | | |
| | | .home-c{ |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | z-index: 20; |
| | | |
| | | .point{ |
| | | position: absolute; |
| | | |
| | | .point-address{ |
| | | width: 35px; |
| | | height: 40px; |
| | | background: url("@/assets/images/point.png") no-repeat; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .point-message{ |
| | | width: 500px; |
| | | height: 180px; |
| | |
| | | top: -60px; |
| | | padding: 30px 50px; |
| | | color: #fff; |
| | | |
| | | .msg-box{ |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | flex-direction: column; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .msg-t{ |
| | | font-size: 26px; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .num{ |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 50px; |
| | | gap: 30px; |
| | | |
| | | .item{ |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | span{ |
| | | display: inline-block; |
| | | padding: 0 30px; |
| | | padding: 0 20px; |
| | | font-size: 22px; |
| | | font-weight: bold; |
| | | } |
| | | .val-select{ |
| | | padding: 0 20px; |
| | | :deep(.el-select__wrapper){ |
| | | background-color: transparent; |
| | | box-shadow: 0 0 0 1px #fff inset; |
| | | font-size: 20px; |
| | | .el-select__caret{ |
| | | color: #fff; |
| | | } |
| | | .el-select__placeholder{ |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | import {ref, onMounted} from "vue"; |
| | | import {getTemperaturePointList} from "@/api/screen/index.js"; |
| | | import {getTemptureReportList, exportTemptureReportList} from "@/api/screen/report/index.js"; |
| | | import Table from '@/components/Table/index.vue' |
| | | import { exportBlobFile } from '@/utils/index.js' |
| | | import { deepTableConfig } from '@/config/index.js' |
| | | |
| | | const cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', checkStrictly: true, expandTrigger: 'hover', emitPath: false }; //级联选择器配置 |
| | | const typeOption = ref([]) |
| | |
| | | pointId: '', |
| | | createTimeRange: '' |
| | | }) |
| | | const tableRef = ref(null); //表格实例 |
| | | const state = { |
| | | total: 0, |
| | | page: 1, |
| | | pageSize: 10, |
| | | } |
| | | let tableHead = [ |
| | | { prop: 'waterTemperature', label: '水温(℃)' }, |
| | | { prop: 'waterLevel', label: '水位(m)', }, |
| | | { prop: 'pointName', label: '采集点' }, |
| | | { prop: 'createTimeView', label: '采集时间' }, |
| | | ] |
| | | const tableData = ref([]) |
| | | |
| | | // 获取监测点 |
| | | const getPoint = () => { |
| | |
| | | }) |
| | | } |
| | | |
| | | const getTableData = () => { |
| | | let data = { |
| | | limit: state.pageSize, |
| | | page: state.page, |
| | | ...searchData |
| | | } |
| | | getTemptureReportList(data).then(res => { |
| | | tableData.value = res.data.list.map(item => { |
| | | let obj = {} |
| | | item.dataList.forEach(dl => { |
| | | obj[dl.code] = dl.value |
| | | }) |
| | | return { |
| | | ...item, |
| | | ...obj |
| | | } |
| | | }) |
| | | console.log(tableData.value) |
| | | state.total = res.data.total |
| | | }) |
| | | } |
| | | |
| | | // 分页按钮 |
| | | const paginationFun = (data) => { |
| | | state.page = data.page |
| | | getTableData() |
| | | } |
| | | |
| | | // 导出报表 |
| | | const exportData = () => { |
| | | let data = { |
| | | limit: tableRef.value.state.limit, |
| | | page: tableRef.value.state.page, |
| | | limit: state.pageSize, |
| | | page: state.page, |
| | | ...searchData |
| | | } |
| | | if(timeVal.value && timeVal.value.length > 0) { |
| | |
| | | } else { |
| | | searchData.createTimeRange = '' |
| | | } |
| | | tableRef.value.getData() |
| | | getTableData() |
| | | } |
| | | |
| | | onMounted(() => { |
| | | const newArr = deepTableConfig.map(item => { |
| | | return { |
| | | prop: `${item}`, |
| | | label: `${item}m` |
| | | } |
| | | }) |
| | | tableHead.splice(1, 0, ...newArr) |
| | | getPoint() |
| | | getTableData() |
| | | }) |
| | | </script> |
| | | |
| | |
| | | <el-button type="success" size="large" style="width: 6rem" @click="exportData">一键导出</el-button> |
| | | </div> |
| | | <div class="report-table"> |
| | | <Table ref="tableRef" :getList="getTemptureReportList" :headList="tableHead" :searchData="searchData"></Table> |
| | | <el-table |
| | | :data="tableData" |
| | | style="width: 100%; height: 85%" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | align="center" |
| | | width="80px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | v-for="(item, index) in tableHead" |
| | | :key="index" |
| | | :prop="item.prop" |
| | | :label="item.label" |
| | | > |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pagination" v-show="state.total > 0"> |
| | | <div class="pagination-total">共{{state.total}}条</div> |
| | | <pagination |
| | | layout="prev, pager, next, jumper" |
| | | :total="state.total" |
| | | :page="state.page" |
| | | :limit="state.pageSize" |
| | | @pagination="paginationFun" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | border-radius: 8px; |
| | | padding: 20px; |
| | | } |
| | | .pagination{ |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | .pagination-total{ |
| | | color: #fff; |
| | | } |
| | | .pagination-container{ |
| | | background: transparent; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | import {getStatisticsData, getStatisticsAlarm} from '@/api/screen/statics/index.js' |
| | | import {getTemperaturePointList} from '@/api/screen/index.js' |
| | | import moment from "moment"; |
| | | import {deepCOnfig} from '@/config/index.js' |
| | | |
| | | const cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', expandTrigger: 'hover', emitPath: false }; //级联选择器配置 |
| | | const deepCOnfig = [ |
| | | { label: '10米', value: 10 }, |
| | | { label: '20米', value: 20 }, |
| | | { label: '30米', value: 30 }, |
| | | { label: '40米', value: 40 }, |
| | | { label: '50米', value: 50 }, |
| | | { label: '60米', value: 60 }, |
| | | { label: '70米', value: 70 }, |
| | | { label: '80米', value: 80 }, |
| | | { label: '90米', value: 90 }, |
| | | { label: '100米', value: 100 }, |
| | | ] |
| | | |
| | | |
| | | const menuList = ref([]) |