Compare commits
3 Commits
d11406d741
...
777cca7944
| Author | SHA1 | Date |
|---|---|---|
|
|
777cca7944 | |
|
|
c2b1e0e861 | |
|
|
797449b43f |
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -76,10 +88,7 @@
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
smooth: true,
|
smooth: true,
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (!!e) return e
|
|
||||||
return 0
|
|
||||||
}),
|
|
||||||
type: 'line',
|
type: 'line',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import echarts from '/@/utils/lib/echarts'
|
import echarts from '/@/utils/lib/echarts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -32,6 +32,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -39,7 +52,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -52,7 +64,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -77,10 +89,7 @@
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
smooth: true,
|
smooth: true,
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (!!e) return e
|
|
||||||
return 0
|
|
||||||
}),
|
|
||||||
type: 'line',
|
type: 'line',
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -75,10 +87,7 @@
|
||||||
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -77,10 +89,7 @@
|
||||||
{
|
{
|
||||||
symbolSize: 20,
|
symbolSize: 20,
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
dataZoom: [
|
dataZoom: [
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -75,10 +87,7 @@
|
||||||
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -75,10 +87,7 @@
|
||||||
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -75,10 +87,7 @@
|
||||||
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -75,10 +87,7 @@
|
||||||
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
grid: { left: '5%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color: '#5ab1ef',
|
color: '#5ab1ef',
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -77,10 +89,7 @@
|
||||||
{
|
{
|
||||||
symbolSize: 20,
|
symbolSize: 20,
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
dataZoom: [
|
dataZoom: [
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
|
|
@ -31,6 +31,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -38,7 +51,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -51,7 +63,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -77,10 +89,7 @@
|
||||||
{
|
{
|
||||||
symbolSize: 20,
|
symbolSize: 20,
|
||||||
type: 'scatter',
|
type: 'scatter',
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (e === 0) return null
|
|
||||||
return e
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
dataZoom: [
|
dataZoom: [
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import echarts from '/@/utils/lib/echarts'
|
import echarts from '/@/utils/lib/echarts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -32,6 +32,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -39,7 +52,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -52,7 +64,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -77,10 +89,7 @@
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
smooth: true,
|
smooth: true,
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (!!e) return e
|
|
||||||
return 0
|
|
||||||
}),
|
|
||||||
type: 'line',
|
type: 'line',
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
<FormItem label="日期">
|
<FormItem label="日期">
|
||||||
<RangePicker
|
<RangePicker
|
||||||
:disabledDate="disabledDate"
|
:disabledDate="disabledDate"
|
||||||
@change="onChange('time')"
|
@change="onChangTime"
|
||||||
v-model:value="formState.time"
|
v-model:value="formState.time"
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
@ -89,6 +89,7 @@
|
||||||
:extra="name"
|
:extra="name"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 空气湿度 -->
|
<!-- 空气湿度 -->
|
||||||
|
|
@ -97,6 +98,7 @@
|
||||||
:data="statisData.air_humidity"
|
:data="statisData.air_humidity"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 光照强度 -->
|
<!-- 光照强度 -->
|
||||||
|
|
@ -105,11 +107,13 @@
|
||||||
:data="statisData.illumination"
|
:data="statisData.illumination"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 降雨量 -->
|
<!-- 降雨量 -->
|
||||||
<Rainfall
|
<Rainfall
|
||||||
:extra="name"
|
:extra="name"
|
||||||
|
:time="formState.time"
|
||||||
:data="statisData.daily_rainfall"
|
:data="statisData.daily_rainfall"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
|
@ -121,6 +125,7 @@
|
||||||
:data="statisData.wind_speed"
|
:data="statisData.wind_speed"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 风力 -->
|
<!-- 风力 -->
|
||||||
|
|
@ -129,6 +134,7 @@
|
||||||
:data="statisData.wind_degree"
|
:data="statisData.wind_degree"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 风向 -->
|
<!-- 风向 -->
|
||||||
|
|
@ -137,6 +143,7 @@
|
||||||
:data="statisData.wind_direction"
|
:data="statisData.wind_direction"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- 噪声 -->
|
<!-- 噪声 -->
|
||||||
|
|
@ -145,6 +152,7 @@
|
||||||
:data="statisData.noise"
|
:data="statisData.noise"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- PM10 -->
|
<!-- PM10 -->
|
||||||
|
|
@ -153,6 +161,7 @@
|
||||||
:data="statisData.pm10"
|
:data="statisData.pm10"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- PM25 -->
|
<!-- PM25 -->
|
||||||
|
|
@ -161,6 +170,7 @@
|
||||||
:data="statisData.pm25"
|
:data="statisData.pm25"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
<!-- CO2 -->
|
<!-- CO2 -->
|
||||||
|
|
@ -169,6 +179,7 @@
|
||||||
:data="statisData.co2"
|
:data="statisData.co2"
|
||||||
class="md:w-386px w-full !mr-4 !mb-4"
|
class="md:w-386px w-full !mr-4 !mb-4"
|
||||||
:loading="false"
|
:loading="false"
|
||||||
|
:time="formState.time"
|
||||||
:company="formState.time_interval"
|
:company="formState.time_interval"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -265,6 +276,11 @@
|
||||||
if (e === 'time_interval') formState.time = undefined
|
if (e === 'time_interval') formState.time = undefined
|
||||||
getPoint()
|
getPoint()
|
||||||
}
|
}
|
||||||
|
const onChangTime = (e) => {
|
||||||
|
if (e === null) formState.time_interval = 'day'
|
||||||
|
else formState.time_interval = ''
|
||||||
|
getPoint()
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getBase()
|
getBase()
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { Card } from 'ant-design-vue'
|
import { Card } from 'ant-design-vue'
|
||||||
import { Ref, ref, watch } from 'vue'
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import echarts from '/@/utils/lib/echarts'
|
import echarts from '/@/utils/lib/echarts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -36,6 +36,19 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
})
|
})
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
@ -43,7 +56,6 @@
|
||||||
() => props.data,
|
() => props.data,
|
||||||
(e) => {
|
(e) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
const format = props.company === 'day' ? 'HH:mm' : 'YYYY-MM-DD'
|
|
||||||
setOptions({
|
setOptions({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
|
@ -56,7 +68,7 @@
|
||||||
},
|
},
|
||||||
xAxis: {
|
xAxis: {
|
||||||
type: 'category',
|
type: 'category',
|
||||||
data: Object.keys(e).map((e) => dayjs(e).format(format)),
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
axisTick: {
|
axisTick: {
|
||||||
show: false,
|
show: false,
|
||||||
},
|
},
|
||||||
|
|
@ -81,10 +93,7 @@
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
smooth: true,
|
smooth: true,
|
||||||
data: Object.values(e).map((e) => {
|
data: Object.values(e),
|
||||||
if (!!e) return e
|
|
||||||
return 0
|
|
||||||
}),
|
|
||||||
type: 'line',
|
type: 'line',
|
||||||
areaStyle: {
|
areaStyle: {
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
:options="baseDate"
|
:options="baseDate"
|
||||||
v-model:value="formState.base_id"
|
v-model:value="formState.base_id"
|
||||||
placeholder="请选择基地"
|
placeholder="请选择基地"
|
||||||
/>
|
></Select>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Col>
|
</Col>
|
||||||
<Col
|
<Col
|
||||||
|
|
@ -31,11 +31,11 @@
|
||||||
>
|
>
|
||||||
<FormItem label="检测点">
|
<FormItem label="检测点">
|
||||||
<Select
|
<Select
|
||||||
@select="onChange('')"
|
@select="onChange('device_id')"
|
||||||
placeholder="请选择检测点"
|
placeholder="请选择检测点"
|
||||||
:options="pointDate"
|
:options="pointDate"
|
||||||
v-model:value="formState.device_id"
|
v-model:value="formState.device_id"
|
||||||
/>
|
></Select>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Col>
|
</Col>
|
||||||
<Col
|
<Col
|
||||||
|
|
@ -47,7 +47,11 @@
|
||||||
:xxl="{ span: 4 }"
|
:xxl="{ span: 4 }"
|
||||||
>
|
>
|
||||||
<FormItem label="日期">
|
<FormItem label="日期">
|
||||||
<RangePicker @change="onChange('time')" v-model:value="formState.time" />
|
<RangePicker
|
||||||
|
:disabledDate="disabledDate"
|
||||||
|
@change="onChangTime"
|
||||||
|
v-model:value="formState.time"
|
||||||
|
></RangePicker>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Col>
|
</Col>
|
||||||
<Col
|
<Col
|
||||||
|
|
@ -108,6 +112,7 @@
|
||||||
:loading="false"
|
:loading="false"
|
||||||
:title="currentActiveLable"
|
:title="currentActiveLable"
|
||||||
:data="chartData"
|
:data="chartData"
|
||||||
|
:time="formState.time"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
@ -146,7 +151,6 @@
|
||||||
message,
|
message,
|
||||||
} from 'ant-design-vue'
|
} from 'ant-design-vue'
|
||||||
import type { FormInstance } from 'ant-design-vue'
|
import type { FormInstance } from 'ant-design-vue'
|
||||||
|
|
||||||
const RadioButton = Radio.Button
|
const RadioButton = Radio.Button
|
||||||
const RadioGroup = Radio.Group
|
const RadioGroup = Radio.Group
|
||||||
|
|
||||||
|
|
@ -246,6 +250,9 @@
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const disabledDate = (current) => {
|
||||||
|
return current && current > dayjs().endOf('day')
|
||||||
|
}
|
||||||
// 获取基地数据
|
// 获取基地数据
|
||||||
const getBase = async () => {
|
const getBase = async () => {
|
||||||
const res = await getGriculturalDeviceBasic({ device_type: 2 })
|
const res = await getGriculturalDeviceBasic({ device_type: 2 })
|
||||||
|
|
@ -306,6 +313,12 @@
|
||||||
getPoint()
|
getPoint()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onChangTime = (e) => {
|
||||||
|
if (e === null) formState.time_interval = 'day'
|
||||||
|
else formState.time_interval = ''
|
||||||
|
getPoint()
|
||||||
|
}
|
||||||
|
|
||||||
const handleSetting = () => {
|
const handleSetting = () => {
|
||||||
openDrawer(true, {
|
openDrawer(true, {
|
||||||
isUpdate: false,
|
isUpdate: false,
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,14 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// import { Ref, ref, watch } from 'vue';
|
// import { Ref, ref, watch } from 'vue';
|
||||||
import { SvgIcon } from '/@/components/Icon/index';
|
import { SvgIcon } from '/@/components/Icon/index'
|
||||||
defineProps({
|
defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => {},
|
default: () => {},
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
||||||
|
|
@ -3,59 +3,101 @@
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
@register="registerDrawer"
|
@register="registerDrawer"
|
||||||
showFooter
|
showFooter
|
||||||
:title="getTitle"
|
title="设置"
|
||||||
width="500px"
|
width="500px"
|
||||||
@ok="handleSubmit"
|
@ok="handleSubmit"
|
||||||
>
|
>
|
||||||
<a-form>
|
<div v-for="(item, index) in Title" :key="index" class="mt-10px">
|
||||||
<div class="text-20px font-medium">温度</div>
|
<div class="text-20px font-semibold">{{ enumName[item] }}</div>
|
||||||
<div class="mt-30px flex">
|
<div class="mt-30px flex" v-for="(item1, index1) in setFormat(item)" :key="index1">
|
||||||
<div class="w-90px leading-32px">Ⅰ级预警:</div>
|
<div class="w-90px leading-42px">{{ enumName1[item1] }}:</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="flex w-full items-center" v-for="item in 3" :key="item">
|
<div
|
||||||
<a-form-item>
|
class="flex w-full items-center mt-10px"
|
||||||
<a-input suffix="℃" />
|
v-for="(item2, index2) in roulsDate.value[item][item1]"
|
||||||
</a-form-item>
|
:key="index2"
|
||||||
<div class="mb-24px px-10px">-</div>
|
>
|
||||||
<a-form-item>
|
<Input
|
||||||
<a-input suffix="℃" />
|
type="number"
|
||||||
</a-form-item>
|
v-model:value="item2.min"
|
||||||
|
placeholder="请输入"
|
||||||
|
:suffix="enumCompany[item]"
|
||||||
|
/>
|
||||||
|
<div class="mx-10px">-</div>
|
||||||
|
<Input
|
||||||
|
type="number"
|
||||||
|
v-model:value="item2.max"
|
||||||
|
placeholder="请输入"
|
||||||
|
:suffix="enumCompany[item]"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a-form>
|
</div>
|
||||||
</BasicDrawer>
|
</BasicDrawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { defineComponent, ref, computed, unref } from 'vue';
|
import { getDeviceWarningRules } from '/@/api/sys/user'
|
||||||
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
|
import { ref, computed } from 'vue'
|
||||||
import { Form, Input } from 'ant-design-vue';
|
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'
|
||||||
|
import { Input } from 'ant-design-vue'
|
||||||
|
import { editDeviceWarningRules } from '/@/api/sys/user'
|
||||||
|
const emits = defineEmits(['success', 'register'])
|
||||||
|
const enumName = {
|
||||||
|
conductivity: '电导率',
|
||||||
|
humidity: '湿度',
|
||||||
|
temperature: '温度',
|
||||||
|
k: '氮',
|
||||||
|
n: '磷',
|
||||||
|
p: '钾',
|
||||||
|
}
|
||||||
|
const enumCompany = {
|
||||||
|
temperature: '℃',
|
||||||
|
conductivity: 'us/cm',
|
||||||
|
humidity: '%',
|
||||||
|
k: 'mg/kg',
|
||||||
|
n: 'mg/kg',
|
||||||
|
p: 'mg/kg',
|
||||||
|
}
|
||||||
|
const enumName1 = {
|
||||||
|
1: 'Ⅰ级预警',
|
||||||
|
2: 'Ⅱ级预警',
|
||||||
|
3: 'Ⅲ级预警',
|
||||||
|
4: 'Ⅳ级预警',
|
||||||
|
}
|
||||||
|
const roulsDate = ref(null)
|
||||||
|
const Title = computed(() => {
|
||||||
|
if (!roulsDate.value) return []
|
||||||
|
return Object.keys(roulsDate.value.value)
|
||||||
|
})
|
||||||
|
const setFormat = (e: string) => {
|
||||||
|
if (!roulsDate.value) return []
|
||||||
|
return Object.keys(roulsDate.value.value[e])
|
||||||
|
}
|
||||||
|
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async () => {
|
||||||
|
setDrawerProps({ confirmLoading: false })
|
||||||
|
|
||||||
export default defineComponent({
|
const res = await getDeviceWarningRules({})
|
||||||
components: {
|
roulsDate.value = res.find((e) => e.slug === 'device_warning_rule_soil')
|
||||||
BasicDrawer,
|
})
|
||||||
[Form.name]: Form,
|
|
||||||
[Form.Item.name]: Form.Item,
|
|
||||||
[Input.name]: Input,
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
|
|
||||||
setDrawerProps({ confirmLoading: false });
|
|
||||||
// 需要在setFieldsValue之前先填充treeData,否则Tree组件可能会报key not exist警告
|
|
||||||
});
|
|
||||||
|
|
||||||
const getTitle = '设置';
|
const handleSubmit = async () => {
|
||||||
|
if (!roulsDate.value) return
|
||||||
async function handleSubmit() {}
|
try {
|
||||||
|
const params = {
|
||||||
return {
|
slug: roulsDate.value.slug,
|
||||||
getTitle,
|
value: roulsDate.value.value,
|
||||||
registerDrawer,
|
}
|
||||||
handleSubmit,
|
console.log(params)
|
||||||
};
|
const res = await editDeviceWarningRules(params)
|
||||||
},
|
console.log(res)
|
||||||
});
|
closeDrawer()
|
||||||
|
emits('success')
|
||||||
|
} finally {
|
||||||
|
setDrawerProps({ confirmLoading: false })
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,17 @@
|
||||||
<template #title>
|
<template #title>
|
||||||
<div class="text-18px font-extrabold">{{ title }}</div>
|
<div class="text-18px font-extrabold">{{ title }}</div>
|
||||||
</template>
|
</template>
|
||||||
<template #extra>普润镇桔博园-设备间旁边</template>
|
<template #extra></template>
|
||||||
<div ref="chartRef" :style="{ width, height }"></div>
|
<div ref="chartRef" :style="{ width, height }"></div>
|
||||||
</Card>
|
</Card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { Card } from 'ant-design-vue';
|
import dayjs from 'dayjs'
|
||||||
import { Ref, ref, watch } from 'vue';
|
import { Card } from 'ant-design-vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts';
|
import { Ref, ref, watch, computed } from 'vue'
|
||||||
import echarts from '/@/utils/lib/echarts';
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
|
import echarts from '/@/utils/lib/echarts'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
loading: Boolean,
|
loading: Boolean,
|
||||||
title: {
|
title: {
|
||||||
|
|
@ -27,77 +28,104 @@
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '300px',
|
default: '300px',
|
||||||
},
|
},
|
||||||
});
|
data: {
|
||||||
const chartRef = ref<HTMLDivElement | null>(null);
|
type: Object as PropType<object>,
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
|
default: () => {},
|
||||||
|
},
|
||||||
|
company: {
|
||||||
|
type: String as PropType<string>,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
time: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const format = computed(() => {
|
||||||
|
if (props.time) {
|
||||||
|
const start_time = dayjs(props.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
const end_time = dayjs(props.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
if (start_time === end_time) return 'HH:mm'
|
||||||
|
}
|
||||||
|
if (props.company === 'day') return 'HH:mm'
|
||||||
|
return 'YYYY-MM-DD'
|
||||||
|
})
|
||||||
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
watch(
|
watch(
|
||||||
() => props.loading,
|
() => props.data,
|
||||||
() => {
|
(e) => {
|
||||||
if (props.loading) {
|
if (e) {
|
||||||
return;
|
setOptions({
|
||||||
}
|
tooltip: {
|
||||||
setOptions({
|
trigger: 'axis',
|
||||||
tooltip: {
|
axisPointer: {
|
||||||
trigger: 'axis',
|
|
||||||
axisPointer: {
|
|
||||||
lineStyle: {
|
|
||||||
width: 1,
|
|
||||||
color: '#019680',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: [...new Array(18)].map((_item, index) => `${index + 6}:00`),
|
|
||||||
axisTick: {
|
|
||||||
show: false,
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
yAxis: [
|
|
||||||
{
|
|
||||||
type: 'value',
|
|
||||||
axisTick: {
|
|
||||||
show: false,
|
|
||||||
},
|
|
||||||
splitLine: {
|
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
type: 'dashed',
|
width: 1,
|
||||||
|
color: '#019680',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
xAxis: {
|
||||||
grid: { left: '1%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
type: 'category',
|
||||||
series: [
|
data: Object.keys(e).map((e) => dayjs(e).format(format.value)),
|
||||||
{
|
axisTick: {
|
||||||
smooth: true,
|
show: false,
|
||||||
data: [11, 22, 40, 18, 3, 55, 66, 33, 14, 30, 66, 44, 22, 11, 40, 20, 50, 33, 22, 11],
|
|
||||||
type: 'line',
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{
|
|
||||||
offset: 0,
|
|
||||||
color: '#d7f3f2',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
offset: 1,
|
|
||||||
color: '#ebf9f9',
|
|
||||||
},
|
|
||||||
]),
|
|
||||||
},
|
},
|
||||||
itemStyle: {
|
axisLine: {
|
||||||
color: '#5ab1ef',
|
show: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
yAxis: [
|
||||||
});
|
{
|
||||||
|
type: 'value',
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: 'dashed',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
grid: { left: '1%', right: '1%', top: '2 %', bottom: 0, containLabel: true },
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
smooth: true,
|
||||||
|
data: Object.values(e),
|
||||||
|
type: 'line',
|
||||||
|
areaStyle: {
|
||||||
|
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||||
|
{
|
||||||
|
offset: 0,
|
||||||
|
color: '#d7f3f2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
offset: 1,
|
||||||
|
color: '#ebf9f9',
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
itemStyle: {
|
||||||
|
color: '#5ab1ef',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
dataZoom: [
|
||||||
|
{
|
||||||
|
type: 'inside', //slider表示有滑动块的,inside表示内置的
|
||||||
|
show: false,
|
||||||
|
xAxisIndex: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
immediate: true,
|
immediate: true,
|
||||||
},
|
},
|
||||||
);
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,85 @@
|
||||||
<template>
|
<template>
|
||||||
<PageWrapper>
|
<PageWrapper>
|
||||||
<a-card>
|
<Card>
|
||||||
<BasicForm
|
<Form ref="formRef" :model="formState">
|
||||||
autoFocusFirstItem
|
<Row :gutter="[16, 16]">
|
||||||
:labelWidth="0"
|
<Col
|
||||||
:schemas="schemas"
|
:xs="{ span: 24 }"
|
||||||
:rowProps="{ gutter: [16, 0] }"
|
:sm="{ span: 12 }"
|
||||||
:showActionButtonGroup="false"
|
:md="{ span: 8 }"
|
||||||
/>
|
:lg="{ span: 6 }"
|
||||||
|
:xl="{ span: 6 }"
|
||||||
|
:xxl="{ span: 4 }"
|
||||||
|
>
|
||||||
|
<FormItem label="基地">
|
||||||
|
<Select
|
||||||
|
@select="onChange('base_id')"
|
||||||
|
:fieldNames="{ label: 'name', value: 'id' }"
|
||||||
|
:options="baseDate"
|
||||||
|
v-model:value="formState.base_id"
|
||||||
|
placeholder="请选择基地"
|
||||||
|
></Select>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col
|
||||||
|
:xs="{ span: 24 }"
|
||||||
|
:sm="{ span: 12 }"
|
||||||
|
:md="{ span: 8 }"
|
||||||
|
:lg="{ span: 6 }"
|
||||||
|
:xl="{ span: 6 }"
|
||||||
|
:xxl="{ span: 4 }"
|
||||||
|
>
|
||||||
|
<FormItem label="检测点">
|
||||||
|
<Select
|
||||||
|
@select="onChange('')"
|
||||||
|
placeholder="请选择检测点"
|
||||||
|
:options="pointDate"
|
||||||
|
v-model:value="formState.device_id"
|
||||||
|
></Select>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col
|
||||||
|
:xs="{ span: 24 }"
|
||||||
|
:sm="{ span: 12 }"
|
||||||
|
:md="{ span: 8 }"
|
||||||
|
:lg="{ span: 6 }"
|
||||||
|
:xl="{ span: 6 }"
|
||||||
|
:xxl="{ span: 4 }"
|
||||||
|
>
|
||||||
|
<FormItem label="日期">
|
||||||
|
<RangePicker
|
||||||
|
:disabledDate="disabledDate"
|
||||||
|
@change="onChangTime"
|
||||||
|
v-model:value="formState.time"
|
||||||
|
></RangePicker>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
<Col
|
||||||
|
:xs="{ span: 24 }"
|
||||||
|
:sm="{ span: 12 }"
|
||||||
|
:md="{ span: 8 }"
|
||||||
|
:lg="{ span: 6 }"
|
||||||
|
:xl="{ span: 6 }"
|
||||||
|
:xxl="{ span: 4 }"
|
||||||
|
>
|
||||||
|
<FormItem>
|
||||||
|
<RadioGroup
|
||||||
|
@change="onChange('time_interval')"
|
||||||
|
button-style="solid"
|
||||||
|
v-model:value="formState.time_interval"
|
||||||
|
>
|
||||||
|
<RadioButton value="day">今天</RadioButton>
|
||||||
|
<RadioButton value="week">近一周</RadioButton>
|
||||||
|
<RadioButton value="month">近一个月</RadioButton>
|
||||||
|
</RadioGroup>
|
||||||
|
</FormItem>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Form>
|
||||||
|
<!-- -->
|
||||||
<div class="flex justify-between">
|
<div class="flex justify-between">
|
||||||
<span class="text-xl">预警数据统计</span>
|
<span class="text-xl">预警数据统计</span>
|
||||||
<a-button @click="handleSetting">设置</a-button>
|
<Button @click="handleSetting">设置</Button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-20px flex">
|
<div class="mt-20px flex">
|
||||||
<EarlyWarningItem
|
<EarlyWarningItem
|
||||||
|
|
@ -26,7 +95,7 @@
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
class="flex items-center mr-28px font-medium text-[#828fa2] mt-24px cursor-pointer"
|
class="flex items-center mr-28px font-medium text-[#828fa2] mt-24px cursor-pointer"
|
||||||
:class="{ active: item.value == activeKey }"
|
:class="{ active: item.value == activeKey }"
|
||||||
@click="onChangeTag(item)"
|
@click="onChangeTag(item.value)"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="w-16px h-16px"
|
class="w-16px h-16px"
|
||||||
|
|
@ -37,225 +106,233 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-20px">
|
<div class="mt-20px">
|
||||||
<LineCharts :loading="false" :title="currentActiveLable" />
|
<LineCharts
|
||||||
|
:company="formState.time_interval"
|
||||||
|
:extra="extra"
|
||||||
|
:loading="false"
|
||||||
|
:title="currentActiveLable"
|
||||||
|
:data="chartData"
|
||||||
|
:time="formState.time"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</a-card>
|
</Card>
|
||||||
<FormDrawer @register="registerDrawer" @success="handleSuccess" />
|
<FormDrawer @register="registerDrawer" @success="handleSuccess" />
|
||||||
</PageWrapper>
|
</PageWrapper>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts" setup>
|
||||||
import { PageWrapper } from '/@/components/Page';
|
import dayjs from 'dayjs'
|
||||||
import { defineComponent, ref, computed } from 'vue';
|
import { formatDataByObject, getWeek, getMonth } from '/@/utils/index'
|
||||||
import { BasicForm, FormSchema } from '/@/components/Form/index';
|
import { PageWrapper } from '/@/components/Page'
|
||||||
import { Card, Button } from 'ant-design-vue';
|
import { ref, reactive, onMounted, computed } from 'vue'
|
||||||
import { ColEx } from '/@/components/Form/src/types';
|
import EarlyWarningItem from './components/EarlyWarningItem.vue'
|
||||||
import EarlyWarningItem from './components/EarlyWarningItem.vue';
|
import icon1 from '/@/assets/images/icon_1.png'
|
||||||
import icon1 from '/@/assets/images/icon_1.png';
|
import uicon1 from '/@/assets/images/uicon_1.png'
|
||||||
import uicon1 from '/@/assets/images/uicon_1.png';
|
import LineCharts from './components/LineCharts.vue'
|
||||||
import LineCharts from './components/LineCharts.vue';
|
import FormDrawer from './components/FormDrawer.vue'
|
||||||
import FormDrawer from './components/FormDrawer.vue';
|
import { useDrawer } from '/@/components/Drawer'
|
||||||
import { useDrawer } from '/@/components/Drawer';
|
|
||||||
const valueSelectA = ref<string[]>([]);
|
|
||||||
|
|
||||||
|
import {
|
||||||
|
getGriculturalDeviceBasic,
|
||||||
|
getaGriculturalDevicePoint,
|
||||||
|
getAmonitoringData,
|
||||||
|
getDeviceWarningNums,
|
||||||
|
} from '/@/api/sys/user'
|
||||||
|
import {
|
||||||
|
Card,
|
||||||
|
Form,
|
||||||
|
FormItem,
|
||||||
|
Select,
|
||||||
|
Row,
|
||||||
|
Col,
|
||||||
|
Radio,
|
||||||
|
RangePicker,
|
||||||
|
Button,
|
||||||
|
message,
|
||||||
|
} from 'ant-design-vue'
|
||||||
|
import type { FormInstance } from 'ant-design-vue'
|
||||||
|
const RadioButton = Radio.Button
|
||||||
|
const RadioGroup = Radio.Group
|
||||||
|
const [registerDrawer, { openDrawer }] = useDrawer()
|
||||||
|
const formRef = ref<FormInstance>()
|
||||||
|
const formState = reactive({
|
||||||
|
base_id: undefined, //基地
|
||||||
|
device_id: undefined, //监控点
|
||||||
|
time: undefined, //时间
|
||||||
|
time_interval: 'day',
|
||||||
|
})
|
||||||
|
const baseDate = ref([])
|
||||||
|
const pointDate = ref<any>([])
|
||||||
|
const statisData = ref<any>({})
|
||||||
|
// 预警数量
|
||||||
|
const earlyNums = ref<any>({})
|
||||||
|
// 选中
|
||||||
|
const activeKey = ref('conductivity')
|
||||||
interface EarlyWarningItem {
|
interface EarlyWarningItem {
|
||||||
icon: String;
|
icon: String
|
||||||
title: String;
|
title: String
|
||||||
value: String;
|
value: String | Number
|
||||||
}
|
}
|
||||||
|
const earlyWarningList = computed(() => {
|
||||||
const colProps: Partial<ColEx> = {
|
const arr: EarlyWarningItem[] = [
|
||||||
xs: 24,
|
{
|
||||||
sm: 12,
|
icon: 'yujing1',
|
||||||
md: 8,
|
title: 'Ⅰ级预警',
|
||||||
lg: 6,
|
value: '',
|
||||||
xl: 6,
|
|
||||||
xxl: 4,
|
|
||||||
};
|
|
||||||
|
|
||||||
const schemas: FormSchema[] = [
|
|
||||||
{
|
|
||||||
field: 'field1',
|
|
||||||
component: 'Select',
|
|
||||||
label: '',
|
|
||||||
colProps,
|
|
||||||
componentProps: {
|
|
||||||
placeholder: '基地',
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
label: '选项2',
|
|
||||||
value: '1',
|
|
||||||
key: '1',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
onChange: (e: any) => {
|
|
||||||
console.log(e);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
icon: 'yujing2',
|
||||||
field: 'field1',
|
title: 'Ⅱ级预警',
|
||||||
component: 'Select',
|
value: '',
|
||||||
label: '',
|
|
||||||
colProps,
|
|
||||||
componentProps: {
|
|
||||||
placeholder: '检测点',
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
label: '选项2',
|
|
||||||
value: '1',
|
|
||||||
key: '1',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
onChange: (e: any) => {
|
|
||||||
console.log(e);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
icon: 'yujing3',
|
||||||
field: 'time',
|
title: 'Ⅲ级预警',
|
||||||
component: 'RangePicker',
|
value: '',
|
||||||
label: '',
|
|
||||||
colProps,
|
|
||||||
componentProps: {
|
|
||||||
placeholder: ['开始日期', '结束日期'],
|
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
icon: 'yujing4',
|
||||||
field: 'disclosure',
|
title: 'Ⅳ级预警',
|
||||||
component: 'RadioButtonGroup',
|
value: '',
|
||||||
label: '',
|
|
||||||
colProps: colProps,
|
|
||||||
componentProps: {
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
label: '今天',
|
|
||||||
value: '1',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '近一周',
|
|
||||||
value: '2',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: '近一个月',
|
|
||||||
value: '3',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
},
|
]
|
||||||
];
|
Object.values(earlyNums.value).forEach((v: number | string, index: number) => {
|
||||||
|
arr[index].value = v
|
||||||
const earlyWarningList: EarlyWarningItem[] = [
|
})
|
||||||
{
|
return arr
|
||||||
icon: 'yujing1',
|
})
|
||||||
title: 'Ⅰ级预警',
|
const currentActiveLable = computed(
|
||||||
value: '1',
|
() => tagMenus.find((e) => e.value === activeKey.value)?.lable ?? '',
|
||||||
},
|
)
|
||||||
{
|
const chartData = computed(() => statisData.value[activeKey.value])
|
||||||
icon: 'yujing2',
|
const extra = computed(() => {
|
||||||
title: 'Ⅱ级预警',
|
const name1 = baseDate.value?.find((e: any) => e.id === formState.base_id)?.name
|
||||||
value: '1',
|
const name2 = pointDate.value?.find((e: any) => e.value === formState.device_id)?.label ?? ''
|
||||||
},
|
return name1 + '-' + name2
|
||||||
{
|
})
|
||||||
icon: 'yujing3',
|
|
||||||
title: 'Ⅲ级预警',
|
|
||||||
value: '1',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: 'yujing4',
|
|
||||||
title: 'Ⅳ级预警',
|
|
||||||
value: '100',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const tagMenus = [
|
const tagMenus = [
|
||||||
{
|
|
||||||
lable: '温度',
|
|
||||||
value: 0,
|
|
||||||
icon: icon1,
|
|
||||||
icon1: uicon1,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
lable: '电导率',
|
lable: '电导率',
|
||||||
value: 1,
|
value: 'conductivity',
|
||||||
icon: icon1,
|
icon: icon1,
|
||||||
icon1: uicon1,
|
icon1: uicon1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
lable: '水分',
|
lable: '湿度',
|
||||||
value: 2,
|
value: 'humidity',
|
||||||
|
icon: icon1,
|
||||||
|
icon1: uicon1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
lable: '温度',
|
||||||
|
value: 'temperature',
|
||||||
icon: icon1,
|
icon: icon1,
|
||||||
icon1: uicon1,
|
icon1: uicon1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
lable: '氮',
|
lable: '氮',
|
||||||
value: 3,
|
value: 'k',
|
||||||
icon: icon1,
|
icon: icon1,
|
||||||
icon1: uicon1,
|
icon1: uicon1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
lable: '磷',
|
lable: '磷',
|
||||||
value: 4,
|
value: 'n',
|
||||||
icon: icon1,
|
icon: icon1,
|
||||||
icon1: uicon1,
|
icon1: uicon1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
lable: '钾',
|
lable: '钾',
|
||||||
value: 5,
|
value: 'p',
|
||||||
icon: icon1,
|
icon: icon1,
|
||||||
icon1: uicon1,
|
icon1: uicon1,
|
||||||
},
|
},
|
||||||
];
|
]
|
||||||
|
|
||||||
export default defineComponent({
|
const disabledDate = (current) => {
|
||||||
components: {
|
return current && current > dayjs().endOf('day')
|
||||||
[Card.name]: Card,
|
}
|
||||||
[Button.name]: Button,
|
// 获取基地数据
|
||||||
BasicForm,
|
const getBase = async () => {
|
||||||
PageWrapper,
|
const res = await getGriculturalDeviceBasic({ device_type: 2 })
|
||||||
EarlyWarningItem,
|
baseDate.value = res
|
||||||
LineCharts,
|
if (!formState.base_id) formState.base_id = res?.[0]?.id ?? undefined
|
||||||
FormDrawer,
|
getPoint()
|
||||||
},
|
}
|
||||||
|
// 获取监控点数据
|
||||||
|
const getPoint = async () => {
|
||||||
|
const res = await getaGriculturalDevicePoint({
|
||||||
|
device_type: 2,
|
||||||
|
agricultural_basic: formState.base_id,
|
||||||
|
})
|
||||||
|
pointDate.value = formatDataByObject(res)
|
||||||
|
if (!formState.device_id) formState.device_id = pointDate.value?.[0]?.value ?? undefined
|
||||||
|
getDate()
|
||||||
|
getNums()
|
||||||
|
}
|
||||||
|
// 获取数据
|
||||||
|
const getDate = async () => {
|
||||||
|
const params = {
|
||||||
|
device_id: formState.device_id,
|
||||||
|
start_time: '',
|
||||||
|
end_time: '',
|
||||||
|
}
|
||||||
|
if (formState.time) {
|
||||||
|
params.start_time = dayjs(formState.time?.[0]).format('YYYY-MM-DD')
|
||||||
|
params.end_time = dayjs(formState.time?.[1]).format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
if (formState.time_interval === 'week') {
|
||||||
|
const { WeekStartDate, WeekEndDate } = getWeek()
|
||||||
|
params.start_time = WeekStartDate
|
||||||
|
params.end_time = WeekEndDate
|
||||||
|
} else if (formState.time_interval === 'month') {
|
||||||
|
const { MonthStartDate, MonthEndDate } = getMonth()
|
||||||
|
params.start_time = MonthStartDate
|
||||||
|
params.end_time = MonthEndDate
|
||||||
|
} else if (formState.time_interval === 'day') {
|
||||||
|
params.start_time = ''
|
||||||
|
params.end_time = ''
|
||||||
|
}
|
||||||
|
const res = await getAmonitoringData(params)
|
||||||
|
statisData.value = res
|
||||||
|
}
|
||||||
|
// 获取预警数量
|
||||||
|
const getNums = async () => {
|
||||||
|
let res = await getDeviceWarningNums({
|
||||||
|
base: formState.base_id,
|
||||||
|
device: formState.device_id,
|
||||||
|
status: 0,
|
||||||
|
})
|
||||||
|
earlyNums.value = res
|
||||||
|
}
|
||||||
|
const onChange = (e: string | undefined) => {
|
||||||
|
if (e === 'base_id') formState.device_id = undefined
|
||||||
|
if (e === 'time') formState.time_interval = ''
|
||||||
|
if (e === 'time_interval') formState.time = undefined
|
||||||
|
getPoint()
|
||||||
|
}
|
||||||
|
|
||||||
setup() {
|
const onChangTime = (e) => {
|
||||||
const activeKey = ref(1);
|
if (e === null) formState.time_interval = 'day'
|
||||||
|
else formState.time_interval = ''
|
||||||
|
getPoint()
|
||||||
|
}
|
||||||
|
|
||||||
const [registerDrawer, { openDrawer }] = useDrawer();
|
const handleSetting = () => {
|
||||||
|
openDrawer(true, {
|
||||||
const currentActiveLable = computed(
|
isUpdate: false,
|
||||||
() => tagMenus.find((e) => e.value == activeKey.value)?.lable ?? '',
|
})
|
||||||
);
|
}
|
||||||
|
const handleSuccess = () => {
|
||||||
function onChangeTag(item) {
|
message.success('操作成功')
|
||||||
activeKey.value = item.value;
|
}
|
||||||
}
|
//
|
||||||
|
const onChangeTag = (e: string) => {
|
||||||
function handleSetting() {
|
activeKey.value = e
|
||||||
openDrawer(true, {
|
}
|
||||||
isUpdate: false,
|
onMounted(() => {
|
||||||
});
|
getBase()
|
||||||
}
|
})
|
||||||
|
|
||||||
function handleSuccess() {
|
|
||||||
// reload();
|
|
||||||
console.log('=========');
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
activeKey,
|
|
||||||
valueSelectA,
|
|
||||||
schemas,
|
|
||||||
earlyWarningList,
|
|
||||||
tagMenus,
|
|
||||||
currentActiveLable,
|
|
||||||
registerDrawer,
|
|
||||||
onChangeTag,
|
|
||||||
handleSetting,
|
|
||||||
handleSuccess,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue