jeecgBootUniapp/src/pages-production/shishishuju/chart/lssjChart.vue

200 lines
5.3 KiB
Vue
Raw Normal View History

<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationStyle: 'custom',
navigationBarTitleText: '历史数据图表',
},
}
</route>
<template>
<PageLayout :navbarShow="false" class="page-layout">
<view style="color: blue;font-size:18px;text-align: center;margin: 10px;width: 100%;">
<wd-text :text="jldData.jldname+ '日报数据'" style="color: blue;font-size:18px;"></wd-text>
</view>
<view>
<uni-datetime-picker type="datetimerange" v-model="lssjTimeRange" @change="getTime" start-placeholder="开始时间"
end-placeholder="结束时间" />
</view>
<view style="text-align: center;padding: 5px;">
<wd-button custom-class="custom-value" size="small" plain clickable @click="handleForward">前一天</wd-button>
<wd-button custom-class="custom-value" size="small" plain clickable @click="handleNext">后一天</wd-button>
<wd-button custom-class="custom-value" size="small" plain clickable @click="handleQuery">查询数据</wd-button>
<wd-button custom-class="custom-value" size="small" plain clickable @click="handleDrawLine">生成曲线</wd-button>
</view>
<view>
<scroll-view direction="vertical" style="height: 200px;">
<wd-table :data="chartData" height="200px">
<wd-table-col prop="createTime" label="日期" align="center"></wd-table-col>
<wd-table-col prop="jldName" label="计量点名称" align="center"></wd-table-col>
<wd-table-col prop="ql" label="今日流量(m³)" align="center">
</wd-table-col>
</wd-table>
</scroll-view>
</view>
<view v-if="drawLineFlag">
<cxc-szcx-multiLineChart :data-list="chartData" x-field="createTime"
:y-fields="lineFields"></cxc-szcx-multiLineChart>
</view>
</PageLayout>
</template>
<script setup>
import {
queryJldRbDataByJldID
} from '@/api/production'
import {
formatDate
} from '@/utils/dateTime.ts';
import {
ref,
onMounted,
computed,
nextTick,
watchEffect,
onUnmounted,
} from 'vue';
const lineFields = ref([
{
name: '日流量',
field: 'jrl',
min: '0',
max: '50000',
unit: 'm³'
}
])
const props = defineProps({
jldData: {
type: Object,
default: () => {}
}
})
const chartData = ref([])
const drawLineFlag = ref(false)
function handleQuery() {
const jldid = props.jldData.id;
queryJldRbDataByJldID({
jldId: jldid,
startTime: startTime.value,
endTime: endTime.value
}).then(res => {
chartData.value = JSON.parse(res.result)
chartData.value.forEach(item => {
item.createTime = formatDate(item.createTime, "YYYY-MM-DD HH:mm ss")
})
console.log(123, chartData.value)
})
}
function handleDrawLine() {
drawLineFlag.value = true
}
// 前一天 - 以当前选择的起始日期为基准计算
function handleForward() {
// 使用当前选择的开始时间作为基准,而不是系统当前时间
lssjTimeRange.value = getDefaultTimeRange(-1);
}
// 后一天
function handleNext() {
// 获取当前选择的开始时间
const currentStart = new Date(startTime.value);
// 获取今天8点的时间对象
const today8AM = new Date();
today8AM.setHours(8, 0, 0, 0);
// 允许切换到今天及之前的日期范围
if (currentStart < today8AM || isSameDay(currentStart, today8AM)) {
lssjTimeRange.value = getDefaultTimeRange(1);
} else {
// 可添加提示:已经是最新数据
uni.showToast({
title: '已是最新数据',
icon: 'none',
duration: 1500
});
}
}
// 获取指定日期偏移的时间范围每天8:00至次日7:59
const getDefaultTimeRange = (days) => {
// 防止原日期对象被污染,使用当前选择的开始时间作为基准
var baseDate;
if (startTime.value && new Date(startTime.value).toString() !== 'Invalid Date') {
baseDate = new Date(startTime.value);
} else {
// 如果选择的时间无效,则使用当前时间作为 fallback
baseDate = new Date();
}
// 计算目标日期(基础日期 + 偏移天数)
const targetDate = new Date(baseDate);
targetDate.setDate(baseDate.getDate() + days);
// 构建开始时间目标日期的8:00:00
const start = new Date(targetDate);
start.setHours(8, 0, 0, 0);
// 构建结束时间:目标日期+1天的7:59:59
const end = new Date(targetDate);
end.setDate(targetDate.getDate() + 1);
end.setHours(7, 59, 59, 0);
// 格式化时间字符串
const formattedStart = formatDate(start, 'YYYY-MM-DD HH:mm:ss');
const formattedEnd = formatDate(end, 'YYYY-MM-DD HH:mm:ss');
// 更新响应式变量
startTime.value = formattedStart;
endTime.value = formattedEnd;
return [formattedStart, formattedEnd];
};
// 辅助函数:判断两个日期是否是同一天
const isSameDay = (date1, date2) => {
return date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() === date2.getDate();
};
onMounted(() => {
// 设置默认时间范围 需要延时等控件渲染好
setTimeout(() => {
lssjTimeRange.value = getDefaultTimeRange(0)
}, 500)
console.log(lssjTimeRange.value);
})
const startTime = ref('')
const endTime = ref('')
const lssjTimeRange = ref([])
// 时间选择变化
const getTime = (e) => {
if (e && e.length === 2) {
startTime.value = formatDate(e[0], 'YYYY-MM-DD HH:mm:ss')
endTime.value = formatDate(e[1], 'YYYY-MM-DD HH:mm:ss')
// updateChart()
}
}
</script>
<style scoped>
</style>