Browse Source

feat:水雨情月报

master
waibao2 5 days ago
parent
commit
d29d2b56da
  1. 3
      src/assets/styles/ruoyi.scss
  2. 148
      src/components/ZhengBian/index.vue
  3. 16
      src/config/stationConfig.js
  4. 3
      src/layout/components/AppMain.vue
  5. 76
      src/views/data/history/index.vue
  6. 458
      src/views/report/jbmonth/index.vue
  7. 24
      src/views/statistic/rain/jslmonth.vue
  8. 155
      src/views/syslog/alarm/index.vue
  9. 238
      src/views/syslog/zbmessage/index.vue

3
src/assets/styles/ruoyi.scss

@ -83,6 +83,9 @@
.ml20 { .ml20 {
margin-left: 20px; margin-left: 20px;
} }
.mt50 {
margin-top: 50px;
}
.mb50 { .mb50 {
margin-bottom: 50px; margin-bottom: 50px;
} }

148
src/components/ZhengBian/index.vue

@ -36,7 +36,7 @@
<br /> <br />
<el-form-item label="对比站点"> <el-form-item label="对比站点">
<el-tree-select filterable multiple show-checkbox collapse-tags :props="{ value: 'id', label: 'name' }" @change="changeCompareStnmIds" v-model="compareStation" style="width: 240px" :data="compareTreeSelectOptions" node-key="id" placeholder="请选择对比测站名称" /> <el-tree-select filterable multiple show-checkbox collapse-tags :props="{ value: 'id', label: 'name' }" @update:modelValue="changeCompareStnmIds" v-model="compareStation" style="width: 240px" :data="compareTreeSelectOptions" node-key="id" placeholder="请选择对比测站名称" :render-after-expand="false" />
<!-- <el-select-v2 collapse-tags multiple filterable clearable v-model="compareStation" @change="changeCompareStnmIds" :options="stationOptions" :props="defaultProps" placeholder="请选择对比测站名称" style="width: 360px" /> --> <!-- <el-select-v2 collapse-tags multiple filterable clearable v-model="compareStation" @change="changeCompareStnmIds" :options="stationOptions" :props="defaultProps" placeholder="请选择对比测站名称" style="width: 360px" /> -->
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -44,6 +44,27 @@
<el-button type="success" plain icon="Edit" @click="updateData">数据修改</el-button> <el-button type="success" plain icon="Edit" @click="updateData">数据修改</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form ref="formRef" :model="form" :inline="true" @submit.native.prevent>
<el-form-item label="数据修改" prop="updateType">
<el-select v-model="form.updateType" placeholder="请选择数据修改方式">
<el-option v-for="dict in update_type_options" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="开始时间" prop="startTime" v-if="form.updateType!='2'&&form.updateType!=null">
<el-date-picker v-model="form.startTime" type="datetime" placeholder="选择开始时间" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endTime" v-if="form.updateType!='2'&&form.updateType!=null">
<el-date-picker v-model="form.endTime" type="datetime" placeholder="选择结束时间" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="替换值" prop="value1" v-if="form.updateType=='1'">
<el-input-number v-model="form.value1" placeholder="请输入替换值" controls-position="right" style="width:160px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(formRef)" v-loading='btnLoading'> </el-button>
</el-form-item>
</el-form>
</el-card> </el-card>
<splitpanes v-loading="fullscreenLoading" element-loading-text="正在加载页面......" :horizontal="device === 'mobile'" class="el-card-p card-shadow carder-border mt10 pad10 default-theme container-box" :push-other-panes="false"> <splitpanes v-loading="fullscreenLoading" element-loading-text="正在加载页面......" :horizontal="device === 'mobile'" class="el-card-p card-shadow carder-border mt10 pad10 default-theme container-box" :push-other-panes="false">
<pane :size="firstSize" :min-size="SPLITPANES_CONFIG.MIN_SIZE" max-size="40" ref="firstPane" class="mr10"> <pane :size="firstSize" :min-size="SPLITPANES_CONFIG.MIN_SIZE" max-size="40" ref="firstPane" class="mr10">
@ -82,23 +103,6 @@
</splitpanes> </splitpanes>
<!-- :rules="rules" --> <!-- :rules="rules" -->
<el-dialog class="custom-dialog" title="数据修改" v-model="open" width="500px" append-to-body> <el-dialog class="custom-dialog" title="数据修改" v-model="open" width="500px" append-to-body>
<el-form ref="formRef" :model="form" label-width="150">
<el-form-item label="修改方式" prop="updateType">
<el-select v-model="form.updateType" placeholder="请选择修改方式">
<el-option v-for="dict in update_type_options" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="开始时间" prop="startTime" v-if="form.updateType!='2'&&form.updateType!=null">
<el-date-picker v-model="form.startTime" type="datetime" placeholder="选择开始时间" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endTime" v-if="form.updateType!='2'&&form.updateType!=null">
<el-date-picker v-model="form.endTime" type="datetime" placeholder="选择结束时间" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss">
</el-date-picker>
</el-form-item>
<el-form-item label="替换值" prop="value1" v-if="form.updateType=='1'">
<el-input v-model="form.value1" placeholder="请输入替换值" style="width:220px" />
</el-form-item>
<div style="width:80%;margin: 0 auto;" v-if="form.updateType=='2'"> <div style="width:80%;margin: 0 auto;" v-if="form.updateType=='2'">
<el-upload class="upload-demo" drag :headers="headers" :action='uploadUrl' :on-success="handleFileSuccess" accept=".xls, .xlsx" multiple> <el-upload class="upload-demo" drag :headers="headers" :action='uploadUrl' :on-success="handleFileSuccess" accept=".xls, .xlsx" multiple>
<el-icon class="el-icon--upload"><upload-filled /></el-icon> <el-icon class="el-icon--upload"><upload-filled /></el-icon>
@ -112,13 +116,7 @@
</template> </template>
</el-upload> </el-upload>
</div> </div>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm(formRef)" v-loading='btnLoading'> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -136,7 +134,7 @@
import useAppStore from '@/store/modules/app' import useAppStore from '@/store/modules/app'
import { getStationConfig } from '@/config/stationConfig' import { getStationConfig } from '@/config/stationConfig'
const device = computed(() => useAppStore().device); const device = computed(() => useAppStore().device);
const route = useRoute();
const props = defineProps({ const props = defineProps({
stationType: { stationType: {
type: String, type: String,
@ -264,6 +262,52 @@
dataType: staticType.value, dataType: staticType.value,
chartType: echartType.value chartType: echartType.value
}); });
let routeQuery = ref(null)
const getRouteQuery = () => {
routeQuery.value = route.query;
if (JSON.stringify(routeQuery.value) !== '{}') {
queryParams.startTime = routeQuery.value.startTime
queryParams.endTime = routeQuery.value.endTime
queryParams.stnm = routeQuery.value.name //
// name
const targetName = routeQuery.value.name;
// treeSelectOptions stnmId
if (treeSelectOptions.value.length > 0) {
const matchedNode = findNodeByName(treeSelectOptions.value, targetName);
if (matchedNode) {
queryParams.stnmId = matchedNode.stnmId;
queryParams.stnmIds = queryParams.stnmId;
}
} else {
// treeSelectOptions
watch(() => treeSelectOptions.value, (newVal) => {
if (newVal.length > 0 && !queryParams.stnmId) {
const matchedNode = findNodeByName(newVal, targetName);
if (matchedNode) {
queryParams.stnmId = matchedNode.stnmId;
queryParams.stnmIds = queryParams.stnmId;
}
}
}, { immediate: true });
}
}
}
//
const findNodeByName = (nodes, name) => {
for (let node of nodes) {
if (node.name === name) {
return node;
}
if (node.children && node.children.length > 0) {
const found = findNodeByName(node.children, name);
if (found) return found;
}
}
return null;
};
const timeType = computed(() => { const timeType = computed(() => {
return staticType.value == '0' ? 'hour' : "day" return staticType.value == '0' ? 'hour' : "day"
}) })
@ -307,8 +351,8 @@
// :stnmId:ID,options:options,stnm: // :stnmId:ID,options:options,stnm:
const handleStationChange = async (stnmId, options, stnm) => { const handleStationChange = async (stnmId, options, stnm) => {
queryParams.stnmId = stnmId
queryParams.stnm = stnm queryParams.stnm = stnm
queryParams.stnmId = stnmId
queryParams.stnmIds = stnmId queryParams.stnmIds = stnmId
const data = options.filter(item => item.stnmId != stnmId) const data = options.filter(item => item.stnmId != stnmId)
// const data = options // const data = options
@ -345,12 +389,32 @@
let res = await proxy.axiosGet('basic/stype/getNewTreeStationType/', { 'type': proxy.stationType, 'isState': queryParams.isState }); let res = await proxy.axiosGet('basic/stype/getNewTreeStationType/', { 'type': proxy.stationType, 'isState': queryParams.isState });
if (res.code == 0) { if (res.code == 0) {
treeSelectOptions.value = res.data treeSelectOptions.value = res.data
if (JSON.stringify(routeQuery.value) !== '{}') {
const matchedNode = findNodeByName(res.data, routeQuery.value.name);
if (matchedNode) {
queryParams.stnmId = matchedNode.stnmId;
queryParams.stnmIds = queryParams.stnmId;
queryParams.stnm = matchedNode.name;
} else {
// name使
const firstLeaf = findFirstLeafNode(res.data);
if (firstLeaf) {
queryParams.stnmId = firstLeaf.stnmId;
queryParams.stnmIds = queryParams.stnmId;
queryParams.stnm = firstLeaf.name;
}
}
}
// stnmId // stnmId
if (treeSelectOptions.value.length > 0) { else {
const firstLeafNode = findFirstLeafNode(treeSelectOptions.value); // 使
if (firstLeafNode) { const firstLeaf = findFirstLeafNode(res.data);
queryParams.stnmId = firstLeafNode.stnmId; if (firstLeaf) {
queryParams.stnmId = firstLeaf.stnmId;
queryParams.stnmIds = queryParams.stnmId; queryParams.stnmIds = queryParams.stnmId;
queryParams.stnm = firstLeaf.name;
}
}
await Promise.all([ await Promise.all([
drawTable1(), drawTable1(),
drawTable2(), drawTable2(),
@ -359,8 +423,6 @@
]); ]);
} }
}
}
} catch (error) { } catch (error) {
} finally { } finally {
@ -689,14 +751,12 @@
handleQuery() handleQuery()
} }
// //
let compareStation = ref() let compareStation = ref([])
const changeCompareStnmIds = (val) => { const changeCompareStnmIds = (val) => {
console.log(val, '======val') compareStation.value = val
// compareStation.value = val let list = [queryParams.stnmId, ...val];
let str = list.join(',')
// let list = [queryParams.stnmId, ...val]; queryParams.stnmIds = str
// let str = list.join(',')
// queryParams.stnmIds = str
} }
// //
@ -715,11 +775,7 @@
} }
/**************************************************** 数据修改弹窗 ******************************************************/ /**************************************************** 数据修改弹窗 ******************************************************/
let formRef = ref(null) let formRef = ref(null)
//
const cancel = () => {
open.value = false;
reset();
}
const reset = () => { const reset = () => {
Object.assign(form, {}); Object.assign(form, {});
proxy.resetForm("formRef"); proxy.resetForm("formRef");
@ -785,6 +841,8 @@
} }
onMounted(() => { onMounted(() => {
getRouteQuery()
getTreeStation() getTreeStation()
getCompareTreeStation() getCompareTreeStation()
}) })

16
src/config/stationConfig.js

@ -14,20 +14,30 @@ export const STATION_CONFIGS = {
// 建德配置 // 建德配置
jiande: { jiande: {
showStationType: false, showStationType: false,
stationTypes: [], stationTypes: [
{ label: '水文测站', value: '0' },
{ label: '气象站', value: '1' }
],
showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据) showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据)
}, },
// 青田配置 // 青田配置
qingtian: { qingtian: {
showStationType: false, showStationType: false,
stationTypes: [], stationTypes: [
{ label: '水文测站', value: '0' },
{ label: '气象站', value: '1' }
],
showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据) showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据)
}, },
// 赣县配置 // 赣县配置
ganxian: { ganxian: {
showStationType: false, showStationType: false,
stationTypes: [], stationTypes: [
{ label: '水文测站', value: '0' },
{ label: '气象站', value: '1' }
],
showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据) showDeviceStcd: true,// 是否显示设备编码(遥测数据-设备数据)
} }
}; };

3
src/layout/components/AppMain.vue

@ -34,7 +34,8 @@ const tagsViewStore = useTagsViewStore()
.hasTagsView { .hasTagsView {
.app-main { .app-main {
/* 84 = navbar + tags-view = 50 + 34 */ /* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 84px); /* min-height: calc(100vh - 84px); */
min-height: calc(100vh - 50px);
} }
.fixed-header + .app-main { .fixed-header + .app-main {

76
src/views/data/history/index.vue

@ -2,14 +2,15 @@
<div class="app-container app-container-bg"> <div class="app-container app-container-bg">
<el-card class="first-card" ref='firstCard' shadow="always"> <el-card class="first-card" ref='firstCard' shadow="always">
<el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent> <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
<el-form-item label="测站属性" prop="propety"> <el-form-item label="测站属性" prop="isState">
<el-select v-model="propety" style="width: 240px;" placeholder="请选择测站属性" @change="propChange">
<el-option v-for="item in propsList" :key="item.value" :label="item.label" :value="item.value"> <el-select v-model="queryParams.isState" placeholder="请选择测站属性" style="width:160px" @change="propChange">
<el-option v-for="item in mainTypes" :key="item.value" :label="item.label" :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="测站名称" prop="stnmId"> <el-form-item label="测站名称" prop="stnmId">
<el-select v-model="queryParams.stnmId" style="width: 240px;" placeholder="请选择" @change="handleQuery"> <el-select v-model="queryParams.stnmId" style="width: 240px;" placeholder="请选择" @change="changeStnmId">
<el-option v-for="item in stationList" :key="item.stnmId" :label="item.stnm" :value="item.stnmId"> <el-option v-for="item in stationList" :key="item.stnmId" :label="item.stnm" :value="item.stnmId">
</el-option> </el-option>
</el-select> </el-select>
@ -72,9 +73,10 @@
stnmId: '', stnmId: '',
stationType: "A", stationType: "A",
startTime: dateTime.value[0], startTime: dateTime.value[0],
endTime: dateTime.value[1] endTime: dateTime.value[1],
isState: "0",
stcd: ''
}) })
let propety = ref('0')
// //
const stationList = ref([]) const stationList = ref([])
@ -82,8 +84,8 @@
if (val === undefined || val === null) { if (val === undefined || val === null) {
val = '0' // val = '0' //
} }
propety.value = val; queryParams.isState = val;
queryParams.prop = val // queryParams.prop = val
try { try {
console.log(queryParams, val) console.log(queryParams, val)
let res = await proxy.axiosGet('/basic/station/queryStnmandStnmId', queryParams); let res = await proxy.axiosGet('/basic/station/queryStnmandStnmId', queryParams);
@ -92,12 +94,17 @@
stationList.value = data; stationList.value = data;
queryParams.stnmId = data[0].stnmId queryParams.stnmId = data[0].stnmId
getStcdList() getStcdList()
getEchartsData()
} }
} catch (error) { } catch (error) {
} }
} }
//
const changeStnmId = (val) => {
queryParams.stnmId = val
getStcdList()
}
// //
const stcdList = ref([]) const stcdList = ref([])
const getStcdList = async () => { const getStcdList = async () => {
@ -106,39 +113,55 @@
if (res.code == 0) { if (res.code == 0) {
let data = res.data let data = res.data
stcdList.value = data; stcdList.value = data;
queryParams.stcd = data[0]
getEchartsData()
} }
} catch (error) { } catch (error) {
} }
} }
const unitList = [{ const unitList = [
{
label: "雨量(mm)", label: "雨量(mm)",
value: "A" value: "A"
}, { },
{
label: "水位(m)", label: "水位(m)",
value: "B" value: "B"
}, { },
{
label: "水位(m)", label: "水位(m)",
value: "C" value: "C"
}, { },
{
label: "流量(m³/s)",
value: "E"
},
{
label: "风速(m/s)", label: "风速(m/s)",
value: "S" value: "S"
}, { },
{
label: "温度(℃)", label: "温度(℃)",
value: "T" value: "T"
}, { },
{
label: "湿度(%)", label: "湿度(%)",
value: "R" value: "R"
}, { },
{
label: "电压(V)", label: "电压(V)",
value: "V" value: "V"
}, { },
{
label: "风向", label: "风向",
value: "U" value: "U"
}, { },
{
label: "", label: "",
value: "Y" value: "Y"
},] },
]
let color1 = ['#1075fd', '#0fec7d', '#d364fd', '#5cffea', let color1 = ['#1075fd', '#0fec7d', '#d364fd', '#5cffea',
'#f2b622', '#fc3c54', '#EE1289', '#ee9c9c', '#f2b622', '#fc3c54', '#EE1289', '#ee9c9c',
'#06e8d6', '#de79c2', '#bebe0f', '#00F5FF', '#06e8d6', '#de79c2', '#bebe0f', '#00F5FF',
@ -153,8 +176,10 @@
const echartsData = ref([]) const echartsData = ref([])
const getEchartsData = async () => { const getEchartsData = async () => {
fullscreenLoading.value = true fullscreenLoading.value = true
// /history/data/historydataDetail //
// /history/data/historydata //
try { try {
let url = '/history/data/historydata' let url = '/history/data/historydataDetail'
let res = await proxy.axiosPost2(url, queryParams); let res = await proxy.axiosPost2(url, queryParams);
if (res.code == 0) { if (res.code == 0) {
const seriesMap = res.data const seriesMap = res.data
@ -193,6 +218,7 @@
}) })
echartsData.value = result echartsData.value = result
console.log(echartsData.value, 'echartsData.value')
} }
} catch (error) { } catch (error) {
@ -219,15 +245,15 @@
const showDeviceStcd = computed(() => { const showDeviceStcd = computed(() => {
return currentStationConfig.value.showDeviceStcd; return currentStationConfig.value.showDeviceStcd;
}); });
//
const mainTypes = computed(() => {
return currentStationConfig.value.stationTypes;
});
onMounted(() => { onMounted(() => {
propChange('0') propChange('0')
}) })
const propsList = ref([
{ label: '水文测站', value: '0' },
{ label: '气象站', value: '1' }
])
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

458
src/views/report/jbmonth/index.vue

@ -0,0 +1,458 @@
<template>
<div class="app-container app-container-bg">
<el-card class="first-card" ref='firstCard' shadow="always">
<el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
<el-form-item label="开始时间" prop="year">
<el-date-picker style="width: 100px" v-model="queryParams.year" type="year" value-format="YYYY" format="YYYY" placeholder="选择年份">
</el-date-picker>
</el-form-item>
<el-form-item label="月份" prop="month">
<el-select clearable v-model="queryParams.month" filterable placeholder="请选择月份" style="width: 100px">
<el-option v-for="item in monthList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="雨量统计年">
<el-date-picker style="width: 90px" v-model="queryParams.startDate" type="year" value-format="YYYY" format="YYYY" placeholder="起">
</el-date-picker>
<el-date-picker style="width: 90px" v-model="queryParams.endDate" type="year" value-format="YYYY" format="YYYY" placeholder="止">
</el-date-picker>
</el-form-item>
<el-form-item label="河道统计年">
<el-date-picker style="width: 90px" v-model="queryParams.startDateRiver" type="year" value-format="YYYY" format="YYYY" placeholder="起">
</el-date-picker>
<el-date-picker style="width: 90px" v-model="queryParams.endDateRiver" type="year" value-format="YYYY" format="YYYY" placeholder="止">
</el-date-picker>
</el-form-item>
<el-form-item label="水库统计年">
<el-date-picker style="width: 90px" v-model="queryParams.startDateRsvr" type="year" value-format="YYYY" format="YYYY" placeholder="起">
</el-date-picker>
<el-date-picker style="width: 90px" v-model="queryParams.endDateRsvr" type="year" value-format="YYYY" format="YYYY" placeholder="止">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
<el-button type="warning" icon="Download" @click="handleExport">下载</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="el-card-p card-shadow carder-border mt10 pad10 container-box scroll-bar" v-loading="fullscreenLoading">
<div class="briefing" v-if="showBriefing">
<div class="briefing-title text-center mt20">水雨情简报</div>
<div class="briefing-qishu mt10 mb10 text-center">{{briefingData.qishu}}</div>
<div class="briefing-name-date">
<div class="briefing-name">{{stationName}}</div>
<div class="briefing-date">{{briefingData.newDate}}</div>
</div>
<hr style="color: red;height: 2px;border-top: 2px solid red;" />
<div class="briefing-content">
<div class="content-title text-center mt50 mb50">{{briefingData.title}}</div>
<p class="content-text1 paragraph suojin">{{briefingData.str1}}</p>
<div class="suojin">
<p class="type-title ">雨情</p>
<p class="paragraph ">{{briefingData.rainStr1}}</p>
<p class="paragraph ">{{briefingData.rainStr2}}</p>
<p>详见附表一</p>
</div>
<div class="suojin">
<p class="type-title ">水情</p>
<p>江河水情</p>
<p class="paragraph ">{{briefingData.waterStr1}}</p>
<p>详见附表二</p>
<div class="fubiao biao1">
<div class="main-table-header">
<div class="table-title">
<span>表1 主要河网控制站特征水位表</span>
</div>
<div class="table-time mb5">
<div>
<span>单位: m(国家85)</span>
</div>
</div>
</div>
<el-table class="report-table" :data="briefingData.biao1" border style="width:100%">
<el-table-column prop="area" label="区域" :align="alignment"></el-table-column>
<el-table-column prop="stnm" label="站名" :align="alignment"></el-table-column>
<el-table-column prop="nvalue" label="当前水位" :align="alignment"></el-table-column>
<el-table-column prop="value" label="平均水位" :align="alignment"></el-table-column>
<el-table-column label="最高水位" :align="alignment">
<el-table-column prop="maxValue" label="水位" :align="alignment">
</el-table-column>
<el-table-column prop="maxTm" label="时间" :align="alignment" width="180"></el-table-column>
</el-table-column>
<el-table-column label="最低水位" :align="alignment">
<el-table-column prop="minValue" label="水位" :align="alignment">
</el-table-column>
<el-table-column prop="minTm" label="时间" :align="alignment" width="180"></el-table-column>
</el-table-column>
<el-table-column prop="jjsw" label="警戒水位" :align="alignment"> </el-table-column>
<el-table-column prop="bzsw" label="保证水位" :align="alignment"></el-table-column>
</el-table>
</div>
<p>水库水情</p>
<p class="paragraph">{{briefingData.waterStr2}}</p>
<p>详见附表三</p>
<div class="fubiao biao2">
<div class="main-table-header">
<div class="table-title">
<span>表2 <span>{{briefingData.yearmonth}}</span>大中型及小()()型水库水位特征表</span>
</div>
<div class="table-time mb5">
<div>
<span>水位单位m国家85 蓄水量单位万方</span>
</div>
</div>
</div>
<el-table class="report-table" :data="briefingData.biao2" border>
<el-table-column prop="type" label="类型" :align="alignment"></el-table-column>
<el-table-column prop="stnm" label="站名" :align="alignment"></el-table-column>
<el-table-column prop="value1" label="当前水位" :align="alignment"></el-table-column>
<el-table-column prop="value2" label="平均水位" :align="alignment"></el-table-column>
<el-table-column label="最高水位" :align="alignment">
<el-table-column prop="maxValue" label="水位" :align="alignment"></el-table-column>
<el-table-column prop="maxXs" label="蓄水量" :align="alignment"></el-table-column>
<el-table-column prop="maxTm" label="时间" :align="alignment" width="180"></el-table-column>
</el-table-column>
<el-table-column label="最低水位" :align="alignment">
<el-table-column prop="minValue" label="水位" :align="alignment"></el-table-column>
<el-table-column prop="minXs" label="蓄水量" :align="alignment"></el-table-column>
<el-table-column prop="minTm" label="时间" :align="alignment" width="180"></el-table-column>
</el-table-column>
<el-table-column prop="kzsw" label="控制水位" :align="alignment"> </el-table-column>
</el-table>
</div>
<div class="fubiao fubiao1">
<div class="main-table-header">
<div class="table-title">
<span>附表一 <span>{{briefingData.yearmonth}}</span>余姚市降水量分析表</span>
</div>
<div class="table-time mb5">
<div>
<span>单位: mm</span>
</div>
</div>
</div>
<el-table class="report-table" :data="briefingData.fubiao1" border>
<el-table-column prop="area" label="地区" :align="alignment" width="200"></el-table-column>
<el-table-column prop="stnm" label="站名" :align="alignment" width="200"></el-table-column>
<el-table-column :align="alignment">
<template #header>
<span>{{queryParams.month}}月降水量</span>
</template>
<el-table-column prop="value1" :align="alignment">
<template #header>
<span>{{queryParams.year}}</span>
</template>
</el-table-column>
<el-table-column prop="value2" label="常年同期" :align="alignment"></el-table-column>
<el-table-column prop="value3" label="偏多(%)" :align="alignment"></el-table-column>
</el-table-column>
<el-table-column :align="alignment">
<template #header>
<span>{{briefingData.interval}}月累计降水量</span>
</template>
<el-table-column prop="value4" :align="alignment">
<template #header>
<span>{{queryParams.year}}</span>
</template>
</el-table-column>
<el-table-column prop="value5" label="常年同期" :align="alignment"></el-table-column>
<el-table-column prop="value6" label="偏多(%)" :align="alignment"></el-table-column>
</el-table-column>
<el-table-column label="去年同期" :align="alignment">
<el-table-column prop="value7" :align="alignment">
<template #header>
<span>{{queryParams.month}}</span>
</template>
</el-table-column>
<el-table-column prop="value8" :align="alignment">
<template #header>
<span>{{briefingData.interval}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column :align="alignment">
<template #header>
<span>{{queryParams.month}}月降水量历年极值</span>
</template>
<el-table-column prop="value9" label="最大值" :align="alignment"></el-table-column>
<el-table-column prop="value10" label="出现年份" :align="alignment"></el-table-column>
<el-table-column prop="value11" label="最小值" :align="alignment"></el-table-column>
<el-table-column prop="value12" label="出现年份" :align="alignment"></el-table-column>
</el-table-column>
</el-table>
<p class=" suojin fuzhu" id="zhu1">{{briefingData.zhu1}}</p>
</div>
<div class="fubiao fubiao2">
<div class="main-table-header">
<div class="table-title">
<span>附表二 <span>{{briefingData.nextMonthDate}}</span>余姚市主要江河控制站水情表</span>
</div>
<div class="table-time mb5">
<div>
<span>单位: m</span>
</div>
</div>
</div>
<el-table class="report-table" :data="briefingData.fubiao2" border>
<el-table-column prop="area" label="片区" :align="alignment" width="200"></el-table-column>
<el-table-column prop="stnm" label="站名" :align="alignment" width="200"></el-table-column>
<el-table-column :align="alignment">
<template #header>
<span>{{queryParams.year}}</span>
</template>
<el-table-column prop="value1" :align="alignment">
<template #header>
<span>{{briefingData.nextMonth}}月1日8时水位</span>
</template>
</el-table-column>
<el-table-column prop="value2" :align="alignment">
<template #header>
<span>{{queryParams.month}}月1日8时水位</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="value3" label="水位变化值" :align="alignment"></el-table-column>
<el-table-column prop="value4" label="常年同期" :align="alignment"></el-table-column>
<el-table-column prop="value5" label="警戒水位" :align="alignment"></el-table-column>
<el-table-column prop="value6" label="基面" :align="alignment"></el-table-column>
</el-table>
<p class=" suojin fuzhu" id="zhu2">{{briefingData.zhu2}}</p>
</div>
<div class="fubiao fubiao3">
<div class="main-table-header">
<div class="table-title">
<span>附表三 <span>{{briefingData.nextMonthDate}}</span>中型及重要小()型水库蓄水情况表</span>
</div>
<div class="table-time mb5">
<div>
<span>水位m蓄水量万方 </span>
</div>
</div>
</div>
<el-table id="el-table3" class="report-table" :data="briefingData.fubiao3" border show-summary :summary-method="getSummaries" :span-method="getSpanMethod">
<el-table-column prop="type" label="类型" :align="alignment" width="200"></el-table-column>
<el-table-column prop="stnm" label="水库名称" :align="alignment" width="200"></el-table-column>
<el-table-column label="控制蓄水" :align="alignment">
<el-table-column prop="value1" label="水位" :align="alignment"></el-table-column>
<el-table-column prop="value2" label="蓄水量" :align="alignment"></el-table-column>
</el-table-column>
<el-table-column :align="alignment">
<template #header>
<span>{{briefingData.nextMonth}}月1日8时</span>
</template>
<el-table-column prop="value3" label="水位" :align="alignment"></el-table-column>
<el-table-column prop="value4" label="蓄水量" :align="alignment"></el-table-column>
</el-table-column>
<el-table-column prop="value5" label="占控制蓄水的比例(%)" :align="alignment"></el-table-column>
<el-table-column label="常年同期" :align="alignment">
<el-table-column prop="value6" label="水位" :align="alignment"></el-table-column>
<el-table-column prop="value7" label="蓄水量" :align="alignment"></el-table-column>
</el-table-column>
<el-table-column prop="value8" label="蓄水增量" :align="alignment"></el-table-column>
</el-table>
<p class=" suojin fuzhu" id="zhu3">{{briefingData.zhu3}}</p>
</div>
</div>
</div>
</div>
<el-empty v-else description="暂无数据" />
</div>
</div>
</template>
<script setup>
import dayjs from 'dayjs'
import { reactive, ref, computed } from 'vue'
const { proxy } = getCurrentInstance()
const queryParams = reactive({
year: dayjs().format('YYYY'),
endDate: dayjs().format('YYYY'),
startDate: '1963',
month: 1,
startDateRiver: '1963',
endDateRiver: dayjs().format('YYYY'),
startDateRsvr: '1963',
endDateRsvr: dayjs().format('YYYY'),
})
const monthList = ref([
{ label: '一月', value: 1, },
{ label: '二月', value: 2, },
{ label: '三月', value: 3, },
{ label: '四月', value: 4, },
{ label: '五月', value: 5, },
{ label: '六月', value: 6, },
{ label: '七月', value: 7, },
{ label: '八月', value: 8, },
{ label: '九月', value: 9, },
{ label: '十月', value: 10, },
{ label: '十一月', value: 11, },
{ label: '十二月', value: 12, }
])
const stationName = '余姚水文站'
const fullscreenLoading = ref(false)
const showBriefing = ref(false)
const briefingData = ref({})
const alignment = 'center'
//
const handleQuery = async () => {
fullscreenLoading.value = true
showBriefing.value = false
try {
const res = await proxy.axiosGet('/report/jbmonth', queryParams)
if (res.code == 0) {
let data = res.data
data.newDate = dayjs(data.date).format('YYYY年MM月DD日')
data.title = data.yearmonth + "余姚市水雨情概况"
data.zhu1 = `注:各站资料统计年限为${queryParams.startDate}${queryParams.endDate}年;平均雨量采用加权平均法计算。`
data.zhu2 = `注:各站资料统计年限为${queryParams.startDateRiver}${queryParams.endDateRiver}年。`
data.zhu3 = `注:各站资料统计年限为${queryParams.startDateRsvr}${queryParams.endDateRsvr}年。`
briefingData.value = data
showBriefing.value = true
}
} finally {
fullscreenLoading.value = false
}
}
import { h } from 'vue'
//
const getSummaries = (param) => {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
//
sums[index] = h('div', '合计');
return;
}
// stnm
if (index === 1) {
sums[index] = '';
return;
}
const prop = column.property;
// /
const isWaterLevelColumn = ['value1', 'value3', 'value6'].includes(prop);
if (isWaterLevelColumn) {
sums[index] = '/';
return;
}
// value2, value4, value7, value8
let values = data.map(item => {
const val = item[prop];
return val !== null && val !== undefined && !isNaN(val) ? Number(val) : 0;
});
if (values.every(v => v === 0)) {
sums[index] = '/';
} else {
const sum = values.reduce((prev, curr) => prev + curr, 0);
sums[index] = sum.toFixed(2); //
}
});
return sums;
};
//
const unsubscribe = watch(() => briefingData.value, async (newVal) => {
if (newVal && newVal.fubiao3) {
await nextTick()
const tds = document.querySelectorAll(
"#el-table3 .el-table__footer-wrapper tr>td"
);
if (tds.length >= 2) {
tds[0].colSpan = 2;
tds[0].style.textAlign = "center";
tds[1].style.display = "none";
}
}
}, { deep: true })
//
const handleExport = () => {
window.download('/report/jbmonthexport?year=' + queryParams.year + '&month=' + queryParams.month +
'&startDate=' + queryParams.startDate + '&endDate=' + queryParams.endDate +
"&startDateRiver=" + queryParams.startDateRiver + "&endDateRiver=" + queryParams.endDateRiver +
"&startDateRsvr=" + queryParams.startDateRsvr + "&endDateRsvr=" + queryParams.endDateRsvr, {},
queryParams.year + '年' + queryParams.month + `月水雨情简报.doc`)
}
</script>
<style scoped lang="scss">
.briefing {
width: 92%;
margin: 0 auto;
.briefing-title {
font-family: SimSun;
color: red;
font-size: 50px;
letter-spacing: 10px;
font-weight: bold;
}
.briefing-qishu {
font-family: KaiTi;
font-size: 18px
}
.briefing-name-date {
display: flex;
justify-content: space-between;
}
/* 简报主体内容 */
.briefing-content {
font-family: FangSong;
.suojin {
text-indent: 2em;
}
.content-title {
font-size: 40px;
letter-spacing: 5px;
}
.paragraph {
font-size: 20px;
letter-spacing: 2px;
line-height: 1.6;
}
.type-title {
font-size: 32px;
height: 50px;
font-weight: bold;
}
.table-title {
font-family: SimHei;
font-size: 18px;
font-weight: bold;
}
.table-time {
justify-content: flex-end;
}
}
.fuzhu {
font-size: 12px;
letter-spacing: 1px;
}
}
:deep(.el-scrollbar__view) {
display: inline !important;
}
</style>

24
src/views/statistic/rain/jslmonth.vue

@ -392,18 +392,18 @@
} }
const interval_options = ref([ const interval_options = ref([
{ value: "01", label: "1月" }, { value: 1, label: "1月" },
{ value: "02", label: "2月" }, { value: 2, label: "2月" },
{ value: "03", label: "3月" }, { value: 3, label: "3月" },
{ value: "04", label: "4月" }, { value: 4, label: "4月" },
{ value: "05", label: "5月" }, { value: 5, label: "5月" },
{ value: "06", label: "6月" }, { value: 6, label: "6月" },
{ value: "07", label: "7月" }, { value: 7, label: "7月" },
{ value: "08", label: "8月" }, { value: 8, label: "8月" },
{ value: "09", label: "9月" }, { value: 9, label: "9月" },
{ value: "10", label: "10月" }, { value: 10, label: "10月" },
{ value: "11", label: "11月" }, { value: 11, label: "11月" },
{ value: "12", label: "12月" }, { value: 12, label: "12月" },
{ value: "all", label: "全年" }, { value: "all", label: "全年" },
]) ])
</script> </script>

155
src/views/syslog/alarm/index.vue

@ -79,11 +79,17 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<el-dialog class="custom-dialog" :title="viewChartTitle" v-model="viewChartOpen" width="1200px" append-to-body>
<div style="height:500px">
<TimeBarChart v-loading="echartsLoading" :legendData='legendData' :xAxisData="xAxisData" :seriesData="seriesData" :textTitle="textTitle" :unit="unit" :echartType="echartType" />
</div>
</el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { parseTime } from '@/utils/ruoyi'
import ESelectSingle from '@/components/ESelectSingle/index.vue' import ESelectSingle from '@/components/ESelectSingle/index.vue'
import TimeBarChart from '@/components/ChartsDataZoom/index.vue'
import { import {
ref, ref,
reactive, reactive,
@ -169,7 +175,7 @@
let single = ref(true) let single = ref(true)
let multiple = ref(true) let multiple = ref(true)
const handleSelectionChange = (selection) => { const handleSelectionChange = (selection) => {
ids.value = selection.map(item => item.id) ids.value = selection.map(item => item.isDeal == 'n')
names.value = selection.map(item => item.stnm) names.value = selection.map(item => item.stnm)
single.value = selection.length !== 1 single.value = selection.length !== 1
multiple.value = !selection.length multiple.value = !selection.length
@ -205,7 +211,7 @@
const stnmIds = row.stnmId; const stnmIds = row.stnmId;
proxy.$modal.confirm('是否确认整编站点名称为"' + stnms + '"的数据项?').then(async function () { proxy.$modal.confirm('是否确认整编站点名称为"' + stnms + '"的数据项?').then(async function () {
let res = await proxy.axiosPost('/abnormal/data/zhengbian', form); let res = await proxy.axiosPost('/abnormal/data/zhengbian', form);
if (res.code === 200) { if (res.code === 0) {
proxy.$modal.msgSuccess("整编成功"); proxy.$modal.msgSuccess("整编成功");
getList(); getList();
} }
@ -225,7 +231,7 @@
) )
const stationList = ref([]) const stationList = ref([])
const getStnmandStnmId = async () => { const getStnmandStnmId = async () => {
let res = await proxy.axiosGet('/basic/warnlevel/queryStnmandStnmId'); let res = await proxy.axiosGet('/basic/station/queryStnmandStnmId');
if (res.code === 200) { if (res.code === 200) {
stationList.value = res.data stationList.value = res.data
} }
@ -262,10 +268,149 @@
getList(); getList();
btnLoading.value = false btnLoading.value = false
} }
} catch (error) { } finally {
btnLoading.value = false btnLoading.value = false
} }
} }
/********************************************* 查看弹窗 ****************************************************/
const legendData = ref([])
const xAxisData = ref([])
const seriesData = ref([])
const echartsLoading = ref(false)
const textTitle = computed(() => {
if (rowLine.value.tableName.includes('rsvr')) {
return '水位过程线';
} else if (rowLine.value.tableName.includes('rain')) {
return '雨量过程线';
} else if (rowLine.value.tableName.includes('river')) {
return '水位过程线';
} else if (rowLine.value.tableName.includes('tide')) {
return '潮位过程线';
}
});
const unit = computed(() => {
if (rowLine.value.tableName.includes('rsvr')) {
return 'm';
} else if (rowLine.value.tableName.includes('rain')) {
return 'mm';
} else if (rowLine.value.tableName.includes('river')) {
return 'm';
} else if (rowLine.value.tableName.includes('tide')) {
return 'm';
}
});
const echartType = computed(() => {
if (rowLine.value.tableName.includes('rsvr')) {
return 'line';
} else if (rowLine.value.tableName.includes('rain')) {
return 'bar';
} else if (rowLine.value.tableName.includes('river')) {
return 'line';
} else if (rowLine.value.tableName.includes('tide')) {
return 'line';
}
});
let viewChartTitle = ref('趋势图')
let viewChartOpen = ref(false)
let rowLine = ref(null)
//
const handleShow = (row) => {
viewChartTitle.value = `${row.stnm}趋势图`
rowLine.value = row
viewChartOpen.value = true
let url = ''
if (row.tableName.includes('rsvr')) {
url = '/ycrsvrdata/';
} else if (row.tableName.includes('rain')) {
url = '/ycraindata/';
} else if (row.tableName.includes('river')) {
url = '/ycriverdata/';
} else if (row.tableName.includes('tide')) {
url = '/yctidedata/';
}
let params = {
startTime: dayjs(row.tm).subtract(3, 'hour').format('YYYY-MM-DD HH:mm:ss'),
endTime: dayjs(row.tm).add(3, 'hour').format('YYYY-MM-DD HH:mm:ss'),
stnmIds: row.stnmId,
chartType: echartType.value,
tm: row.tm,
value: row.value,
xindao: 1
}
console.log(url, params)
getViewChart(url, params)
}
const getViewChart = async (url, params) => {
echartsLoading.value = true
try {
let res = await proxy.axiosPost2(`${url}chartdata`, params);
if (res.code === 0) {
legendData.value = res.data.legend
// seriesdata
if (res.data.series && res.data.series.length > 0) {
// seriesdata
xAxisData.value = res.data.series[0].data.map(item => {
// item
if (typeof item === 'object' && item !== null) {
// tm, time, or the first element
const timeValue = item.tm || item.time || item[0];
return dayjs(timeValue).format('YYYY-MM-DD HH:mm');
} else {
// item
return dayjs(item).format('YYYY-MM-DD HH:mm');
}
});
}
seriesData.value = res.data.series
}
} finally {
echartsLoading.value = false
}
}
/********************************************* 确认弹窗 ****************************************************/
//
const handleQR = (row) => {
let params = {
stnmId: row.stnmId,
tm: parseTime(row.tm)
}
proxy.$modal.confirm('是否确认?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
let res = await proxy.axiosPost('/abnormal/data/dealmsg', params);
if (res.code === 0) {
proxy.$modal.msgSuccess(res.msg);
await getList();
}
}).catch(() => {
proxy.$modal.msg('取消确认');
});
}
const handleConfirm = () => {
if (ids.value.length == 0) {
proxy.$modal.msgWarning("选中的数据已经确认过了!")
return;
}
proxy.$modal.confirm('是否把勾选的进行确认?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
let res = await proxy.axiosPost('/abnormal/data/dealmsgbatch', JSON.stringify(ids.value));
if (res.code === 0) {
proxy.$modal.msgSuccess('批量确认成功');
await getList();
}
}).catch(() => {
proxy.$modal.msg('取消确认');
});
}
onMounted(() => { onMounted(() => {
getList() getList()
getStnmandStnmId() getStnmandStnmId()

238
src/views/syslog/zbmessage/index.vue

@ -4,12 +4,12 @@
<el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent> <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent>
<el-form-item label="站点" prop="stnmId"> <el-form-item label="站点" prop="stnmId">
<el-select clearable filterable v-model="queryParams.stnmId" placeholder="请选择站点" @change="dataChange"> <el-select clearable filterable v-model="queryParams.stnmId" placeholder="请选择站点" @change="dataChange">
<el-option v-for="dict in stationList" :key="dict.stnmId" :label="dict.stnm" :value="dict.stnmId"></el-option> <el-option v-for="dict in stationList" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="归属地区" prop="code"> <el-form-item label="归属地区" prop="code">
<el-select class="menu-panel-select-item" v-model="queryParams.code" filterable placeholder="请选择" style="width: 200px" :popper-append-to-body="false"> <el-select class="menu-panel-select-item" v-model="queryParams.code" filterable placeholder="请选择" style="width: 200px" :popper-append-to-body="false">
<el-option v-for="item in stcdAreaOption" :label="item.fullName" :value="item.code" :key="item.code"></el-option> <el-option v-for="item in stcdAreaOption" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -37,8 +37,14 @@
<el-table class="table-box" v-table-height v-loading="loading" :data="dataList" @selection-change="handleSelectionChange"> <el-table class="table-box" v-table-height v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="60" :align="alignment" label="序号" /> <el-table-column type="index" width="60" :align="alignment" label="序号" />
<el-table-column label="站点名称" :align="alignment" prop="stnm" /> <el-table-column label="站点名称" :align="alignment" prop="stnm" />
<el-table-column label="时间" :align="alignment" prop="startTime" /> <el-table-column label="时间" :align="alignment" prop="date" />
<el-table-column label="数据类型" :align="alignment" prop="type"> </el-table-column> <el-table-column label="数据类型" :align="alignment" prop="type">
<template #default="scope">
<div v-for="item in types">
<span v-if="item.value === scope.row.type">{{item.label}}</span>
</div>
</template>
</el-table-column>
<el-table-column label="未处理" :align="alignment" prop="dealValue" /> <el-table-column label="未处理" :align="alignment" prop="dealValue" />
<el-table-column label="已处理" :align="alignment" prop="unDealValue" /> <el-table-column label="已处理" :align="alignment" prop="unDealValue" />
<el-table-column label="数据插补" :align="alignment" prop="errOneValue" /> <el-table-column label="数据插补" :align="alignment" prop="errOneValue" />
@ -51,9 +57,9 @@
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.page" v-model:limit="queryParams.limit" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.page" v-model:limit="queryParams.limit" @pagination="getList" />
</div> </div>
<el-dialog class="custom-dialog" :title="title" v-model="open" width="500px" append-to-body> <el-dialog class="custom-dialog" :title="title" v-model="open" width="1200px" append-to-body>
<el-table v-loading="loadingDetail" border :data="dataListDetail" height="500"> <el-table v-loading="detailsLoading" border :data="dataListDetail" height="500">
<el-table-column min-width="50" :align="alignment" label="序号"> </el-table-column> <el-table-column type="index" min-width="50" :align="alignment" label="序号"> </el-table-column>
<el-table-column label="站点名称" :align="alignment" prop="stnm" /> <el-table-column label="站点名称" :align="alignment" prop="stnm" />
<el-table-column label="时间" :align="alignment" width="180"> <el-table-column label="时间" :align="alignment" width="180">
<template #default="scope"> <template #default="scope">
@ -75,10 +81,10 @@
<span v-if="scope.row.isDeal == 'y'" class="green">已确认</span> <span v-if="scope.row.isDeal == 'y'" class="green">已确认</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" :align="alignment" class-name="small-padding fixed-width" width="120"> <el-table-column label="操作" :align="alignment" class-name="small-padding fixed-width" width="150">
<template #default="scope"> <template #default="scope">
<el-button type="text" icon="View" @click="handleShow(scope.row)">详情</el-button> <el-button type="text" icon="View" @click="handleShowDetails(scope.row)">详情</el-button>
<el-button v-if="scope.row.isDeal !== 'y'" type="text" icon="Check" @click="handleUpdate(scope.row)">确认</el-button> <el-button v-if="scope.row.isDeal !== 'y'" type="text" icon="Check" @click="handleConfim(scope.row)">确认</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -86,13 +92,15 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { parseTime } from '@/utils/ruoyi'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { import {
ref, ref,
reactive, reactive,
onMounted, onMounted,
} from 'vue' } from 'vue'
const router = useRouter();
const { const {
proxy proxy
} = getCurrentInstance() } = getCurrentInstance()
@ -109,6 +117,9 @@
isDeal: 'n', isDeal: 'n',
type: 'yc_pd_rain', type: 'yc_pd_rain',
}) })
const loading = ref(false) const loading = ref(false)
const total = ref(0) const total = ref(0)
const dataList = ref([]) const dataList = ref([])
@ -116,7 +127,7 @@
loading.value = true; loading.value = true;
try { try {
const res = await proxy.axiosGet('/zb/message/infoList', queryParams) const res = await proxy.axiosGet('/zb/message/infoList', queryParams)
if (res.code == 200) { if (res.code == 0) {
dataList.value = res.data dataList.value = res.data
total.value = res.count total.value = res.count
} }
@ -150,163 +161,104 @@
/** 新增按钮操作 */ /** 新增按钮操作 */
const open = ref(false) const open = ref(false)
const title = ref("") const title = ref("")
const handleAdd = () => {
reset();
open.value = true;
title.value = "添加警戒水位信息"; const handleShow = (row) => {
} open.value = true
/** 修改按钮操作 */ title.value = `${row.stnm}详情[${row.date}]`
const form = reactive({}) getDialogDetails(row)
const rules = reactive({})
const handleUpdate = async (row) => {
reset();
let id = row.id || ids.value
try {
let res = await proxy.axiosGet('/basic/warnlevel/' + id);
if (res.code === 200) {
Object.assign(form, res.data);
open.value = true;
title.value = "修改警戒水位信息";
}
} catch (error) {
console.log(error)
}
}
/** 删除按钮操作 */
const handleDelete = (row) => {
let stnms = row.stnm || names.value
const stnmIds = row.id || ids.value;
proxy.$modal.confirm('是否确认删除站点名称为"' + stnms + '"的数据项?').then(async function () {
let res = await proxy.axiosDelete('/basic/warnlevel/' + stnmIds);
if (res.code === 200) {
proxy.$modal.msgSuccess("删除成功");
getList();
}
})
} }
/** 导出按钮操作 */
const handleExport = async () => { const dataListDetail = ref([])
var p = { const detailsLoading = ref(false)
pageNum: 1, const getDialogDetails = async (row) => {
pageSize: 9999, let params = {
stnm: queryParams.stnm stnmId: row.stnmId,
tm: row.date,
type: row.type,
} }
var res = await proxy.axiosGet('/basic/warnlevel/list', p); detailsLoading.value = true
if (res.code === 200) { dataListDetail.value = []
var table = []; try {
table.push({ let res = await proxy.axiosGet('/zb/message/detail', params);
A: "站点编码", if (res.code === 0) {
B: "站点名称", dataListDetail.value = res.data;
C: "开始日期",
D: "结束日期",
E: "警戒水位值"
});
res.rows.forEach(d => {
var row = {
A: d.staid,
B: d.stnm,
C: d.startTime,
D: d.endTime,
E: d.value
};
table.push(row);
});
var header = ["A", "B", "C", "D", "E"];
var fileName = "警戒水位列表";
proxy.exportExcel(header, table, fileName);
} }
} finally {
detailsLoading.value = false
} }
/************************************************************* 弹窗 ***************************************/
let formRef = ref(null)
let biaoshi = ref(
[{
flag: '水库水位',
value: '1'
}, {
flag: '河道水位',
value: '2'
}]
)
const stationList = ref([])
const getStnmandStnmId = async () => {
let res = await proxy.axiosGet('/basic/warnlevel/queryStnmandStnmId');
if (res.code === 200) {
stationList.value = res.data
} }
//
const handleConfim = (row) => {
let params = {
stnmId: row.stnmId,
type: row.type,
tm: parseTime(row.tm)
} }
// proxy.$modal.confirm('是否确认?', '提示', {
const cancel = () => { confirmButtonText: '确定',
open.value = false; cancelButtonText: '取消',
reset(); type: 'warning'
}).then(async () => {
let res = await proxy.axiosPost('/zb/message/dealmsg', params);
if (res.code === 0) {
proxy.$modal.msgSuccess('已确认,稍后将会自动刷新统计数据');
await getDialogDetails();
} }
const reset = () => { }).catch(() => {
Object.assign(form, { proxy.$modal.msg('取消确认');
tm: null,
stnmId: null,
correctionValue: null,
}); });
proxy.resetForm("formRef");
} }
/** 提交按钮 */ const handleShowDetails = (row) => {
const submitForm = async (formEl) => { let params = {
if (!formEl) return startTime: dayjs(row.tm).subtract(3, 'hour').format('YYYY-MM-DD HH:mm:ss'),
await formEl.validate((valid, fields) => { endTime: dayjs(row.tm).add(3, 'hour').format('YYYY-MM-DD HH:mm:ss'),
if (valid) { stnmId: row.stnmId,
if (form.id != null) { name: row.stnm,
editMethod();
} else {
addMethod();
} }
let path = '';
if (row.type.indexOf("rsvr") > -1) {
path = "/rsvr";
} else if (row.type.indexOf("river") > -1) {
path = "/river";
} else if (row.type.indexOf("rain") > -1) {
path = "/rain";
} else if (row.type.indexOf("tide") > -1) {
path = "/tide";
} }
router.push({
path: '/zhengbian' + path,
query: params
}) })
}
const btnLoading = ref(false)
//
const addMethod = async () => {
btnLoading.value = true
try {
let res = await proxy.axiosPost('/basic/warnlevel', form);
if (res.code === 200) {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
btnLoading.value = false
}
} catch (error) {
btnLoading.value = false
}
}
//
const editMethod = async () => {
btnLoading.value = true
try {
let res = await proxy.axiosPut('/basic/warnlevel', form);
if (res.code === 200) {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
btnLoading.value = false
}
} catch (error) {
btnLoading.value = false
}
}
}
// //
const stcdAreaOption = ref([]) const stcdAreaOption = ref([])
const getDivision = async () => { const getDivision = async () => {
try { try {
const res = await proxy.axiosGet('/basic/info/getDivision') const res = await proxy.axiosGet('/basic/storage/info/getDivision')
stcdAreaOption.value = res.data; stcdAreaOption.value = res.data;
} catch (error) { } catch (error) {
} }
} }
//
const stationList = ref([])
const getStnmandStnmId = async () => {
let res = await proxy.axiosGet('/basic/stype/getTreeStation2New/ALL');
if (res.code === 0) {
stationList.value = res.data[0].children[0].children
}
}
onMounted(() => { onMounted(() => {
getList() getList()
getStnmandStnmId() getStnmandStnmId()
// getDivision() getDivision()
}) })
const types = ref([ const types = ref([
{ {

Loading…
Cancel
Save