点击弹窗
parent
a246f09958
commit
b46e7810a9
|
|
@ -160,6 +160,21 @@ export function getDeviceBaseDataStatics(params, mode: ErrorMessageMode = 'none'
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:设备数据-基地+设备类型V2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export function getDeviceBaseDataStaticsV2(params, mode: ErrorMessageMode = 'none') {
|
||||||
|
return defHttp.get(
|
||||||
|
{
|
||||||
|
url: '/api/device-base-data-statics-v2',
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
errorMessageMode: mode,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @description:获取指定设备下面的基地
|
* @description:获取指定设备下面的基地
|
||||||
*"1": "监控设备",
|
*"1": "监控设备",
|
||||||
|
|
@ -264,6 +279,20 @@ export function getRiceShrimpPrice(params?, mode: ErrorMessageMode = 'none') {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:重点产业报表 - 稻虾价格 - 周
|
||||||
|
*/
|
||||||
|
export function getRiceShrimpWeekPrice(params?, mode: ErrorMessageMode = 'none') {
|
||||||
|
return defHttp.get(
|
||||||
|
{
|
||||||
|
url: '/api/charts/rice-shrimp-weekly-price',
|
||||||
|
params,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
errorMessageMode: mode,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @description:农作物产业分类
|
* @description:农作物产业分类
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
<DXCY v-if="leftType == 'DXCY'" width="810px" height="600px" />
|
<DXCY v-if="leftType == 'DXCY'" width="810px" height="600px" />
|
||||||
<DXLX v-if="leftType == 'DXLX'" width="810px" height="600px" />
|
<DXLX v-if="leftType == 'DXLX'" width="810px" height="600px" />
|
||||||
<DZWZ v-if="leftType == 'DZWZ'" width="810px" height="600px" />
|
<DZWZ v-if="leftType == 'DZWZ'" width="810px" height="600px" />
|
||||||
|
<DXJGWEEK v-if="leftType == 'DXJG'" width="810px" height="600px" />
|
||||||
</div>
|
</div>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -31,12 +32,14 @@
|
||||||
import DXCY from './components/DXCY.vue'
|
import DXCY from './components/DXCY.vue'
|
||||||
import DXLX from './components/DXLX.vue'
|
import DXLX from './components/DXLX.vue'
|
||||||
import DZWZ from './components/DZWZ.vue'
|
import DZWZ from './components/DZWZ.vue'
|
||||||
|
import DXJGWEEK from './components/DXJGWEEK.vue'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
[Modal.name]: Modal,
|
[Modal.name]: Modal,
|
||||||
DXCY,
|
DXCY,
|
||||||
DZWZ,
|
DZWZ,
|
||||||
DXLX,
|
DXLX,
|
||||||
|
DXJGWEEK,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
visible: {
|
visible: {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,207 @@
|
||||||
|
<template>
|
||||||
|
<div class="modelRef">
|
||||||
|
<a-modal
|
||||||
|
v-bind="getBindValue"
|
||||||
|
:bodyStyle="{ background: '#233741', color: '#fff' }"
|
||||||
|
destroyOnClose
|
||||||
|
:width="1250"
|
||||||
|
wrapClassName="cu-map-modal"
|
||||||
|
:getContainer="getContainer"
|
||||||
|
>
|
||||||
|
<template #closeIcon>
|
||||||
|
<img
|
||||||
|
class="w-22px h-22px inline text-0"
|
||||||
|
src="../../assets/images/model-close-icon.png"
|
||||||
|
alt=""
|
||||||
|
srcset=""
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<div class="w-full">
|
||||||
|
<div class="flex items-center justify-between px-14px relative flex-none">
|
||||||
|
<div
|
||||||
|
class="flex items-center bg-clip-text text-transparent bg-gradient-to-t from-[#76E9F0] to-[#A7E6EE]"
|
||||||
|
>
|
||||||
|
<span class="block w-8.5px h-8.5px rounded-full bg-[#6CCDDA]"></span>
|
||||||
|
<span class="ml-10.5px text-18px font-pmzd">{{ boxTitle }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="absolute left-100px right-100px text-center">
|
||||||
|
<div
|
||||||
|
class="text-center bg-clip-text text-transparent bg-gradient-to-t from-[#76E9F0] to-[#A7E6EE] text-14px font-bold"
|
||||||
|
>{{ props.parmas.base_name }}</div
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-3 gap-3 mt-30px">
|
||||||
|
<div v-for="(item, i) in chartList" :key="i">
|
||||||
|
<LineChart :data="item" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { Modal } from 'ant-design-vue'
|
||||||
|
import { defineComponent, computed, ref, unref, watchEffect, watch } from 'vue'
|
||||||
|
import LineChart from './components/LineCharts.vue'
|
||||||
|
import { getDeviceBaseDataStaticsV2 } from '/@/api/sys/other'
|
||||||
|
|
||||||
|
const defaultList = {
|
||||||
|
2: [
|
||||||
|
{
|
||||||
|
key: 'temperature',
|
||||||
|
unit: ' ℃',
|
||||||
|
name: '温度',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'conductivity',
|
||||||
|
unit: 'us/cm',
|
||||||
|
name: '电导率 ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'humidity',
|
||||||
|
unit: '%',
|
||||||
|
name: '湿度',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'n',
|
||||||
|
unit: 'mg/kg',
|
||||||
|
name: '氮',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'p',
|
||||||
|
unit: 'mg/kg',
|
||||||
|
name: '磷',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'k',
|
||||||
|
unit: 'mg/kg',
|
||||||
|
name: '钾',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
3: [
|
||||||
|
{
|
||||||
|
key: 'turbidity',
|
||||||
|
unit: 'NTU',
|
||||||
|
name: '浊度',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'chlorine',
|
||||||
|
unit: 'mg/L',
|
||||||
|
name: '余氯',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'ph',
|
||||||
|
unit: 'PH',
|
||||||
|
name: 'PH值',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'temperature',
|
||||||
|
unit: '℃',
|
||||||
|
name: '温度',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'oxygen',
|
||||||
|
unit: 'mg/L',
|
||||||
|
name: '溶解氧',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'conductivity',
|
||||||
|
unit: 'uS/cm',
|
||||||
|
name: '电导率',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
[Modal.name]: Modal,
|
||||||
|
LineChart,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
parmas: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup(props, { attrs }) {
|
||||||
|
const modelVisible = ref(false)
|
||||||
|
const chartList = ref([])
|
||||||
|
|
||||||
|
const currentList = computed(() => {
|
||||||
|
return defaultList[props.parmas.device_type]
|
||||||
|
})
|
||||||
|
const boxTitle = computed(() => {
|
||||||
|
return props.parmas.device_type == 3 ? '水质监测数据' : '土壤监测数'
|
||||||
|
})
|
||||||
|
|
||||||
|
const getContainer = () => {
|
||||||
|
if (document.body.clientWidth < 3000) return document.body
|
||||||
|
return document.body.querySelector(`.modelRef`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getBindValue = computed(() => {
|
||||||
|
const attr = {
|
||||||
|
...attrs,
|
||||||
|
...unref(props),
|
||||||
|
visible: unref(modelVisible),
|
||||||
|
maskClosable: false,
|
||||||
|
}
|
||||||
|
return attr
|
||||||
|
})
|
||||||
|
|
||||||
|
async function getData() {
|
||||||
|
const resData = await getDeviceBaseDataStaticsV2({
|
||||||
|
device_columns: props.parmas.desList,
|
||||||
|
base_id: props.parmas.base_id,
|
||||||
|
device_type: props.parmas.device_type,
|
||||||
|
})
|
||||||
|
|
||||||
|
const arr = []
|
||||||
|
|
||||||
|
for (const key in resData) {
|
||||||
|
arr.push({
|
||||||
|
key,
|
||||||
|
...(currentList.value.find((item) => item.key == key) ?? {}),
|
||||||
|
...resData[key],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
chartList.value = arr
|
||||||
|
}
|
||||||
|
|
||||||
|
watchEffect(() => {
|
||||||
|
modelVisible.value = !!props.visible
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
(val) => {
|
||||||
|
if (val) {
|
||||||
|
getData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
chartList,
|
||||||
|
boxTitle,
|
||||||
|
props,
|
||||||
|
getContainer,
|
||||||
|
getBindValue,
|
||||||
|
modelVisible,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.cu-map-modal {
|
||||||
|
.ant-modal {
|
||||||
|
top: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
},
|
},
|
||||||
width: {
|
width: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
default: '200px',
|
default: '100%',
|
||||||
},
|
},
|
||||||
height: {
|
height: {
|
||||||
type: String as PropType<string>,
|
type: String as PropType<string>,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,16 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, reactive, ref, Ref, onBeforeMount, onBeforeUnmount, watch } from 'vue'
|
import {
|
||||||
|
defineComponent,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
Ref,
|
||||||
|
onBeforeMount,
|
||||||
|
onBeforeUnmount,
|
||||||
|
watch,
|
||||||
|
onMounted,
|
||||||
|
} from 'vue'
|
||||||
import Box from './Box.vue'
|
import Box from './Box.vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import { getRiceShrimpPrice } from '/@/api/sys/other'
|
import { getRiceShrimpPrice } from '/@/api/sys/other'
|
||||||
|
|
@ -256,6 +265,14 @@
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getInstance()
|
||||||
|
?.getZr()
|
||||||
|
?.on('click', () => {
|
||||||
|
rootEmitter.emit('leftModel:click', 'DXJG')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tabList,
|
tabList,
|
||||||
currentTab,
|
currentTab,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,172 @@
|
||||||
|
<template>
|
||||||
|
<Box title="稻虾每周价格(元/斤)">
|
||||||
|
<div class="h-full flex flex-col">
|
||||||
|
<div class="flex-1" ref="chartRef"> </div>
|
||||||
|
<div class="text-right">
|
||||||
|
<Pagination
|
||||||
|
v-model:current="current"
|
||||||
|
v-model:pageSize="pageSize"
|
||||||
|
:total="52"
|
||||||
|
:showSizeChanger="false"
|
||||||
|
@change="changePage"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Box>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, reactive, ref, Ref, onBeforeMount } from 'vue'
|
||||||
|
import Box from './Box.vue'
|
||||||
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
|
import { getRiceShrimpWeekPrice } from '/@/api/sys/other'
|
||||||
|
import { chartLineColors } from './colors'
|
||||||
|
import { Pagination } from 'ant-design-vue'
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
Box,
|
||||||
|
Pagination,
|
||||||
|
},
|
||||||
|
setup() {
|
||||||
|
const current = ref(1)
|
||||||
|
const pageSize = ref(10)
|
||||||
|
|
||||||
|
const Data = reactive({
|
||||||
|
x_axis: [],
|
||||||
|
series: [],
|
||||||
|
})
|
||||||
|
|
||||||
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
|
|
||||||
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
||||||
|
function changePage(page: number) {
|
||||||
|
current.value = page
|
||||||
|
chartsInit()
|
||||||
|
}
|
||||||
|
|
||||||
|
// let legendData = [] as any
|
||||||
|
|
||||||
|
function formatChartData() {
|
||||||
|
const obj = {
|
||||||
|
legendData: [] as any,
|
||||||
|
series: [] as any,
|
||||||
|
}
|
||||||
|
|
||||||
|
Data.series.forEach(({ name, data }, index) => {
|
||||||
|
const color = chartLineColors[index % chartLineColors.length]
|
||||||
|
obj.legendData.push(name + '')
|
||||||
|
obj.series.push({
|
||||||
|
name: name,
|
||||||
|
data: data.slice((current.value - 1) * pageSize.value, current.value * pageSize.value),
|
||||||
|
type: 'line',
|
||||||
|
smooth: false,
|
||||||
|
itemStyle: {
|
||||||
|
color: color.itemColor,
|
||||||
|
},
|
||||||
|
areaStyle: {
|
||||||
|
color: color.areaColor,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// legendData = obj.legendData
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
const chartsInit = () => {
|
||||||
|
const obj = formatChartData()
|
||||||
|
setOptions({
|
||||||
|
grid: { left: '2%', right: '20px', top: '10%', bottom: '2%', containLabel: true },
|
||||||
|
legend: {
|
||||||
|
data: obj.legendData,
|
||||||
|
top: '0%',
|
||||||
|
right: '0',
|
||||||
|
textStyle: {
|
||||||
|
color: '#ffffff',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
lineStyle: {
|
||||||
|
width: 1,
|
||||||
|
color: '#019680',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: Data.x_axis.slice(
|
||||||
|
(current.value - 1) * pageSize.value,
|
||||||
|
current.value * pageSize.value,
|
||||||
|
),
|
||||||
|
boundaryGap: false,
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
color: '#fff',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: 'value',
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
// min: 0,
|
||||||
|
nameTextStyle: {
|
||||||
|
color: '#fff',
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: 'solid',
|
||||||
|
color: '#8EEEFF',
|
||||||
|
opacity: 0.3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
axisLabel: {
|
||||||
|
color: '#fff',
|
||||||
|
formatter: (e) => {
|
||||||
|
return e
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
series: obj.series,
|
||||||
|
animationDuration: 2000,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getData() {
|
||||||
|
const resData = await getRiceShrimpWeekPrice()
|
||||||
|
|
||||||
|
Data.x_axis = resData.x_axis
|
||||||
|
Data.series = resData.series
|
||||||
|
|
||||||
|
chartsInit()
|
||||||
|
}
|
||||||
|
|
||||||
|
onBeforeMount(() => {
|
||||||
|
getData()
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
changePage,
|
||||||
|
chartRef,
|
||||||
|
current,
|
||||||
|
pageSize,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.active {
|
||||||
|
@apply font-bold text-15px text-[#76E9F0];
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
<template>
|
||||||
|
<div class="bg-[#1D2D35] p-10px">
|
||||||
|
<div class="text-base">{{ props.data.name }}({{ props.data.unit }})</div>
|
||||||
|
<div ref="chartRef" class="w-full h-300px"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import { Ref, ref, watch, reactive } from 'vue'
|
||||||
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
|
import { chartLineColors } from './colors'
|
||||||
|
const props = defineProps({
|
||||||
|
loading: Boolean,
|
||||||
|
|
||||||
|
data: {
|
||||||
|
type: Object as PropType<object>,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
|
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
const Data = reactive({
|
||||||
|
x_axis: [],
|
||||||
|
series: [],
|
||||||
|
})
|
||||||
|
|
||||||
|
function formatChartData(otherData) {
|
||||||
|
const obj = {
|
||||||
|
legendData: [] as any,
|
||||||
|
series: [] as any,
|
||||||
|
}
|
||||||
|
|
||||||
|
otherData.series.forEach(({ name, data }, index) => {
|
||||||
|
const color = chartLineColors[index % chartLineColors.length]
|
||||||
|
obj.legendData.push(name + '')
|
||||||
|
obj.series.push({
|
||||||
|
name: name,
|
||||||
|
data: data,
|
||||||
|
type: 'line',
|
||||||
|
smooth: false,
|
||||||
|
itemStyle: {
|
||||||
|
color: color.itemColor,
|
||||||
|
},
|
||||||
|
areaStyle: {
|
||||||
|
color: color.areaColor,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(e) => {
|
||||||
|
if (e) {
|
||||||
|
console.log(e)
|
||||||
|
|
||||||
|
console.log({
|
||||||
|
x_axis: e.x_axis,
|
||||||
|
series: e.series,
|
||||||
|
})
|
||||||
|
|
||||||
|
Data.x_axis = e.x_axis
|
||||||
|
Data.series = e.series
|
||||||
|
|
||||||
|
const obj = formatChartData({
|
||||||
|
x_axis: e.x_axis,
|
||||||
|
series: e.series,
|
||||||
|
})
|
||||||
|
|
||||||
|
setOptions({
|
||||||
|
grid: { left: '2%', right: '20px', top: '10%', bottom: '2%', containLabel: true },
|
||||||
|
legend: {
|
||||||
|
data: obj.legendData,
|
||||||
|
top: '0%',
|
||||||
|
right: '0',
|
||||||
|
textStyle: {
|
||||||
|
color: '#ffffff',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
lineStyle: {
|
||||||
|
width: 1,
|
||||||
|
color: '#019680',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: Data.x_axis.map((item) => dayjs(item).format('HH:mm')),
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
axisLine: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: 'value',
|
||||||
|
axisTick: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
splitLine: {
|
||||||
|
lineStyle: {
|
||||||
|
type: 'dashed',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
series: obj.series,
|
||||||
|
// dataZoom: [
|
||||||
|
// {
|
||||||
|
// type: 'inside', //slider表示有滑动块的,inside表示内置的
|
||||||
|
// show: false,
|
||||||
|
// xAxisIndex: 0,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
immediate: true,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -49,7 +49,16 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, reactive, ref, Ref, onBeforeMount, computed, toRefs } from 'vue'
|
import {
|
||||||
|
defineComponent,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
Ref,
|
||||||
|
onBeforeMount,
|
||||||
|
computed,
|
||||||
|
toRefs,
|
||||||
|
onMounted,
|
||||||
|
} from 'vue'
|
||||||
import Box from './Box.vue'
|
import Box from './Box.vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import { getAgriculturalDeviceBasic, getDeviceBaseDataStatics } from '/@/api/sys/other'
|
import { getAgriculturalDeviceBasic, getDeviceBaseDataStatics } from '/@/api/sys/other'
|
||||||
|
|
@ -115,7 +124,7 @@
|
||||||
|
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
|
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions, getInstance } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
||||||
const currentTabValue = computed(
|
const currentTabValue = computed(
|
||||||
() => Data.tabList.find((e) => e.id == Data.currentTab)?.name ?? '',
|
() => Data.tabList.find((e) => e.id == Data.currentTab)?.name ?? '',
|
||||||
|
|
@ -284,6 +293,19 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getInstance()
|
||||||
|
?.getZr()
|
||||||
|
?.on('click', () => {
|
||||||
|
rootEmitter.emit('rightModel:click', {
|
||||||
|
base_id: props.baseId ?? Data.currentTab,
|
||||||
|
device_type: 3,
|
||||||
|
desList: desList.map(({ key }) => key).join(','),
|
||||||
|
baseName: currentTabValue.value,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
currentMenuObj,
|
currentMenuObj,
|
||||||
...toRefs(Data),
|
...toRefs(Data),
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,16 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, reactive, ref, Ref, onBeforeMount, computed, toRefs } from 'vue'
|
import {
|
||||||
|
defineComponent,
|
||||||
|
reactive,
|
||||||
|
ref,
|
||||||
|
Ref,
|
||||||
|
onBeforeMount,
|
||||||
|
computed,
|
||||||
|
toRefs,
|
||||||
|
onMounted,
|
||||||
|
} from 'vue'
|
||||||
import Box from './Box.vue'
|
import Box from './Box.vue'
|
||||||
import { useECharts } from '/@/hooks/web/useECharts'
|
import { useECharts } from '/@/hooks/web/useECharts'
|
||||||
import { getAgriculturalDeviceBasic, getDeviceBaseDataStatics } from '/@/api/sys/other'
|
import { getAgriculturalDeviceBasic, getDeviceBaseDataStatics } from '/@/api/sys/other'
|
||||||
|
|
@ -115,7 +124,7 @@
|
||||||
|
|
||||||
const chartRef = ref<HTMLDivElement | null>(null)
|
const chartRef = ref<HTMLDivElement | null>(null)
|
||||||
|
|
||||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
const { setOptions, getInstance } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||||
|
|
||||||
const currentTabValue = computed(
|
const currentTabValue = computed(
|
||||||
() => Data.tabList.find((e) => e.id == Data.currentTab)?.name ?? '',
|
() => Data.tabList.find((e) => e.id == Data.currentTab)?.name ?? '',
|
||||||
|
|
@ -280,6 +289,19 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getInstance()
|
||||||
|
?.getZr()
|
||||||
|
?.on('click', () => {
|
||||||
|
rootEmitter.emit('rightModel:click', {
|
||||||
|
base_id: props.baseId ?? Data.currentTab,
|
||||||
|
device_type: 2,
|
||||||
|
desList: desList.map(({ key }) => key).join(','),
|
||||||
|
baseName: currentTabValue.value,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...toRefs(Data),
|
...toRefs(Data),
|
||||||
currentTabValue,
|
currentTabValue,
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<div class="mr-10px">
|
<div class="mr-10px">
|
||||||
<!-- <JK :width="`${addW + 440}px`" height="390px" /> -->
|
<JK :width="`${addW + 440}px`" height="390px" />
|
||||||
<SBYXZT class="mt-10px" :width="`${addW + 440}px`" height="314px" />
|
<SBYXZT class="mt-10px" :width="`${addW + 440}px`" height="314px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="">
|
<div class="">
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
:baseData="baseData"
|
:baseData="baseData"
|
||||||
/>
|
/>
|
||||||
<LeftModal v-model:visible="leftMapModal" :footer="null" :type="leftType" />
|
<LeftModal v-model:visible="leftMapModal" :footer="null" :type="leftType" />
|
||||||
|
<RightModal v-model:visible="rightMapModal" :footer="null" :parmas="rightParmas" />
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
</ScaleScreen>
|
</ScaleScreen>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -86,6 +87,7 @@
|
||||||
import { Modal } from 'ant-design-vue'
|
import { Modal } from 'ant-design-vue'
|
||||||
import MapModal from './MapModal.vue'
|
import MapModal from './MapModal.vue'
|
||||||
import LeftModal from './LeftModal.vue'
|
import LeftModal from './LeftModal.vue'
|
||||||
|
import RightModal from './RightModal.vue'
|
||||||
import { createVContext } from './useVContext'
|
import { createVContext } from './useVContext'
|
||||||
import mitt from '/@/utils/mitt'
|
import mitt from '/@/utils/mitt'
|
||||||
import Build from './components/cavas'
|
import Build from './components/cavas'
|
||||||
|
|
@ -119,6 +121,7 @@
|
||||||
Footer,
|
Footer,
|
||||||
MapModal,
|
MapModal,
|
||||||
LeftModal,
|
LeftModal,
|
||||||
|
RightModal,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
const cavsRef = ref<HTMLDivElement | null>(null)
|
const cavsRef = ref<HTMLDivElement | null>(null)
|
||||||
|
|
@ -131,6 +134,8 @@
|
||||||
leftType: '',
|
leftType: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const rightParmas = reactive({})
|
||||||
|
|
||||||
const addW = computed(() => (isScroll.value ? 10 : 0))
|
const addW = computed(() => (isScroll.value ? 10 : 0))
|
||||||
|
|
||||||
async function getWarning() {
|
async function getWarning() {
|
||||||
|
|
@ -192,6 +197,7 @@
|
||||||
const visibleMapModal = ref<boolean>(false)
|
const visibleMapModal = ref<boolean>(false)
|
||||||
|
|
||||||
const leftMapModal = ref<boolean>(false)
|
const leftMapModal = ref<boolean>(false)
|
||||||
|
const rightMapModal = ref<boolean>(false)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
updateSize()
|
updateSize()
|
||||||
|
|
@ -212,6 +218,14 @@
|
||||||
obj.leftType = e
|
obj.leftType = e
|
||||||
leftMapModal.value = true
|
leftMapModal.value = true
|
||||||
})
|
})
|
||||||
|
vEmitter.on('rightModel:click', (e) => {
|
||||||
|
rightParmas.base_id = e.base_id
|
||||||
|
rightParmas.desList = e.desList
|
||||||
|
rightParmas.device_type = e.device_type
|
||||||
|
rightParmas.base_name = e.baseName
|
||||||
|
|
||||||
|
rightMapModal.value = true
|
||||||
|
})
|
||||||
vEmitter.on('map:click', () => {
|
vEmitter.on('map:click', () => {
|
||||||
// visibleMapModal.value = true
|
// visibleMapModal.value = true
|
||||||
})
|
})
|
||||||
|
|
@ -229,12 +243,14 @@
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
rightParmas,
|
||||||
cavsRef,
|
cavsRef,
|
||||||
...toRefs(obj),
|
...toRefs(obj),
|
||||||
addW,
|
addW,
|
||||||
isScroll,
|
isScroll,
|
||||||
visibleMapModal,
|
visibleMapModal,
|
||||||
leftMapModal,
|
leftMapModal,
|
||||||
|
rightMapModal,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue