|
@@ -1,6 +1,6 @@
|
|
|
<!-- eslint-disable vue/multi-word-component-names -->
|
|
|
<template>
|
|
|
- <CostumeHeader :api="fetchOptions" @change="selectDeviceByID">
|
|
|
+ <CostumeHeader v-model:value="selectedDeviceID" :options="options">
|
|
|
<!-- <div class="w-200px flex flex-items-center">
|
|
|
<RightCircleOutlined class="w-30px" />
|
|
|
<div class="flex-grow-1">
|
|
@@ -10,79 +10,75 @@
|
|
|
</CostumeHeader>
|
|
|
<LineMulti
|
|
|
:option="chartOption"
|
|
|
- :prop-type-arr="
|
|
|
- new Map([
|
|
|
- ['valueA', '值A'],
|
|
|
- ['valueB', '值B'],
|
|
|
- ])
|
|
|
- "
|
|
|
+ :prop-type-arr="propTypeArr"
|
|
|
x-axis-prop-type="x"
|
|
|
- :chart-data="[
|
|
|
- { valueA: 1, valueB: 3, x: 2 },
|
|
|
- { valueA: 2, valueB: 1, x: 3 },
|
|
|
- { valueA: 1, valueB: 1, x: 4 },
|
|
|
- { valueA: 3, valueB: 2, x: 5 },
|
|
|
- { valueA: 2, valueB: 1, x: 6 },
|
|
|
- { valueA: 1, valueB: 2, x: 7 },
|
|
|
- ]"
|
|
|
+ :chart-data="chartData"
|
|
|
height="140px"
|
|
|
class="worksurface-chart"
|
|
|
/>
|
|
|
<div class="flex justify-around">
|
|
|
- <MiniBoard v-for="item in configs" :key="item.prop" :label="item.label" :value="selectedDevice[item.prop]" layout="label-top" type="B" />
|
|
|
+ <MiniBoard
|
|
|
+ v-for="(label, prop) in configs.list"
|
|
|
+ :key="`vhccws-${prop}`"
|
|
|
+ :label="label"
|
|
|
+ :value="get(selectedDevice, prop)"
|
|
|
+ layout="label-top"
|
|
|
+ type="B"
|
|
|
+ />
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts" setup>
|
|
|
- import { onMounted, ref } from 'vue';
|
|
|
- import { list as cfgList } from '@/views/vent/deviceManager/configurationTable/configuration.api';
|
|
|
- import { list } from '@/views/vent/deviceManager/deviceTable/device.api';
|
|
|
- import CostumeHeader from './CostumeHeader.vue';
|
|
|
- import { RightCircleOutlined } from '@ant-design/icons-vue';
|
|
|
- import MiniBoard from './MiniBoard.vue';
|
|
|
import LineMulti from '/@/components/chart/LineMulti.vue';
|
|
|
+ import CostumeHeader from './CostumeHeader.vue';
|
|
|
+ import { computed, onMounted, ref } from 'vue';
|
|
|
import { EChartsOption } from 'echarts';
|
|
|
+ import { useInitConfig, useInitDevices } from '../hooks/useInit';
|
|
|
+ import { get } from '../../billboard/utils';
|
|
|
+ import _ from 'lodash-es';
|
|
|
+ import MiniBoard from './MiniBoard.vue';
|
|
|
// import mapComponent from './components/3Dmap/index.vue';
|
|
|
|
|
|
// 设备类别,是个枚举 TODO: 将手动换为自动获取类别
|
|
|
const devicekind = 'fanlocal';
|
|
|
|
|
|
- const configs = ref<{ prop: string; label: string }[]>([]);
|
|
|
- function fetchConfig() {
|
|
|
- cfgList({
|
|
|
- deviceType: 'devicekind',
|
|
|
- }).then(({ records }) => {
|
|
|
- const moduleData = JSON.parse(records[0]?.moduleData);
|
|
|
- configs.value = Object.keys(moduleData).map((k) => {
|
|
|
- return {
|
|
|
- prop: k,
|
|
|
- label: moduleData[k],
|
|
|
- };
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
+ const { configs, fetchConfig } = useInitConfig(devicekind);
|
|
|
+ const { options, selectedDevice, selectedDeviceID, fetchDevices } = useInitDevices(devicekind);
|
|
|
|
|
|
- const devices = ref<any[]>([]);
|
|
|
- const selectedDevice = ref<any>({});
|
|
|
- function selectDeviceByID(id: string) {
|
|
|
- selectedDevice.value = devices.value.find((e) => {
|
|
|
- return e.id === id;
|
|
|
- });
|
|
|
- }
|
|
|
- // 获取全部局扇的数据,并以选项格式返回给 Header 消费
|
|
|
- function fetchOptions() {
|
|
|
- return list({
|
|
|
- devicekind,
|
|
|
- }).then(({ records }) => {
|
|
|
- devices.value = records;
|
|
|
- selectDeviceByID(records[0]?.id);
|
|
|
- return records.map((e) => {
|
|
|
- return {
|
|
|
- label: e.strinstallpos,
|
|
|
- key: e.id,
|
|
|
- };
|
|
|
+ onMounted(() => {
|
|
|
+ fetchConfig();
|
|
|
+ fetchDevices();
|
|
|
+ });
|
|
|
+
|
|
|
+ const chartData = ref<any[]>([
|
|
|
+ { valueA: 1, valueB: 3, x: 2 },
|
|
|
+ { valueA: 2, valueB: 1, x: 3 },
|
|
|
+ { valueA: 1, valueB: 1, x: 4 },
|
|
|
+ { valueA: 3, valueB: 2, x: 5 },
|
|
|
+ { valueA: 2, valueB: 1, x: 6 },
|
|
|
+ { valueA: 1, valueB: 2, x: 7 },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const propTypeArr = computed(() => {
|
|
|
+ if (configs.value.chart) {
|
|
|
+ const map = new Map();
|
|
|
+ _.forEach(configs.value.chart || [], (label, prop) => {
|
|
|
+ map.set(prop, label);
|
|
|
});
|
|
|
- });
|
|
|
- }
|
|
|
+
|
|
|
+ return map;
|
|
|
+ } else {
|
|
|
+ return new Map([
|
|
|
+ ['valueA', '值A'],
|
|
|
+ ['valueB', '值B'],
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ function fetchChartData() {}
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ fetchChartData();
|
|
|
+ });
|
|
|
|
|
|
// 图表相关
|
|
|
const chartOption: EChartsOption = {
|
|
@@ -112,10 +108,6 @@
|
|
|
backgroundColor: '#081f33',
|
|
|
// backgroundColor: '#0091ff12',
|
|
|
};
|
|
|
-
|
|
|
- onMounted(() => {
|
|
|
- fetchConfig();
|
|
|
- });
|
|
|
</script>
|
|
|
<style scoped lang="less">
|
|
|
@import '@/design/vent/color.less';
|