Commit 27a900c7e4573a906e64f89835f1ccec87a64d39

Authored by ww
1 parent 444958fc

perf: visual board out of const && types

... ... @@ -4,11 +4,18 @@
4 4 };
5 5 </script>
6 6 <script lang="ts" setup>
7   - import { ControlComponentValue } from './control.config';
  7 + import { RadioRecord } from '../../detail/config/util';
8 8
9   - const props = defineProps<{
10   - value?: ControlComponentValue;
11   - }>();
  9 + interface VisualComponentProps<Layout = Recordable, Value = Recordable> {
  10 + value?: Value;
  11 + layout?: Layout;
  12 + radio?: RadioRecord;
  13 + random?: boolean;
  14 + add?: (key: string, method: Fn) => void;
  15 + update?: () => void;
  16 + remove?: (key: string) => void;
  17 + }
  18 + const props = defineProps<VisualComponentProps>();
12 19
13 20 const emit = defineEmits(['update:value', 'change']);
14 21
... ...
1 1 import { EChartsOption } from 'echarts';
2   -import { FrontComponent } from '../help';
  2 +import { FrontComponent } from '../../const/const';
3 3 import { fontSize, RadioRecord } from '../../detail/config/util';
4 4 import { Gradient, visualOptionField } from '../../detail/config/visualOptions';
5 5 import {
... ...
1 1 <script lang="ts" setup>
2   - import { useSlots } from 'vue';
3 2 import { useUpdateCenter } from '../../hook/useUpdateCenter';
4 3 import { FrontDataSourceRecord } from '../../types/type';
5 4
... ... @@ -7,10 +6,8 @@
7 6 dataSource: FrontDataSourceRecord[];
8 7 }>();
9 8
10   - const slot = useSlots();
11   -
12 9 const { update, add, remove } = useUpdateCenter();
13   - console.log({ dataSource: props.dataSource });
  10 +
14 11 defineExpose({ update });
15 12 </script>
16 13
... ... @@ -21,15 +18,12 @@
21 18 <div class="widget-content">
22 19 <div
23 20 v-for="item in props.dataSource"
24   - :key="item.uuid"
  21 + :key="item.id"
25 22 :style="{ width: `${item.width || 100}%`, height: `${item.height || 100}%` }"
26 23 class="widget-item"
27 24 >
28 25 <div class="widget-box">
29   - <div
30   - class="widget-controls-container"
31   - :style="{ height: slot.footer ? 'calc(100% - 20px)' : '100%' }"
32   - >
  26 + <div class="widget-controls-container">
33 27 <slot
34 28 name="controls"
35 29 :record="item"
... ... @@ -38,12 +32,6 @@
38 32 :update="update"
39 33 ></slot>
40 34 </div>
41   - <div class="widget-value">
42   - <slot name="value" :record="item"></slot>
43   - </div>
44   - <div class="widget-label">
45   - <slot name="label" :record="item"></slot>
46   - </div>
47 35 </div>
48 36 </div>
49 37 </div>
... ... @@ -92,7 +80,7 @@
92 80 .widget-controls-container {
93 81 flex: 1 1 auto;
94 82 width: 100%;
95   - height: calc(100% - 20px);
  83 + height: 100%;
96 84 display: flex;
97 85 align-items: center;
98 86 justify-content: center;
... ...
1   -import { Component } from 'vue';
2 1 import {
3 2 TextComponent1Config,
4 3 TextComponent3Config,
... ... @@ -7,7 +6,7 @@ import {
7 6 TextComponentDefaultConfig,
8 7 transformTextComponentConfig,
9 8 } from './TextComponent/config';
10   -import { ComponentInfo, DataComponentRecord, DataSource } from '/@/api/dataBoard/model';
  9 +import { ComponentInfo } from '/@/api/dataBoard/model';
11 10 import { transformPictureConfig } from './PictureComponent/pictureComponent.config';
12 11 import {
13 12 DashboardComponentLayout,
... ... @@ -29,50 +28,8 @@ import SlidingSwitch from './ControlComponent/SlidingSwitch.vue';
29 28 import SwitchWithIcon from './ControlComponent/SwitchWithIcon.vue';
30 29 import MapComponent from './MapComponent/MapComponent.vue';
31 30 import { transfromMapComponentConfig } from './MapComponent/map.config';
32   -
33   -export enum FrontComponentCategory {
34   - TEXT = 'text',
35   - PICTURE = 'picture',
36   - INSTRUMENT = 'instrument',
37   - CONTROL = 'control',
38   - MAP = 'map',
39   -}
40   -
41   -export const FrontComponentCategoryName = {
42   - [FrontComponentCategory.TEXT]: '文本组件',
43   - [FrontComponentCategory.INSTRUMENT]: '仪表组件',
44   - [FrontComponentCategory.CONTROL]: '控制组件',
45   - [FrontComponentCategory.PICTURE]: '图片组件',
46   - [FrontComponentCategory.MAP]: '地图组件',
47   -};
48   -
49   -export enum FrontComponent {
50   - TEXT_COMPONENT_1 = 'text-component-1',
51   - TEXT_COMPONENT_2 = 'text-component-2',
52   - TEXT_COMPONENT_3 = 'text-component-3',
53   - TEXT_COMPONENT_4 = 'text-component-4',
54   - TEXT_COMPONENT_5 = 'text-component-5',
55   - INSTRUMENT_COMPONENT_1 = 'instrument-component-1',
56   - INSTRUMENT_COMPONENT_2 = 'instrument-component-2',
57   - DIGITAL_DASHBOARD_COMPONENT = 'digital-dashboard-component',
58   - PICTURE_COMPONENT_1 = 'picture-component-1',
59   - CONTROL_COMPONENT_TOGGLE_SWITCH = 'control-component-toggle-switch',
60   - CONTROL_COMPONENT_SWITCH_WITH_ICON = 'control-component-switch-with-icon',
61   - CONTROL_COMPONENT_SLIDING_SWITCH = 'control-component-sliding-switch',
62   - MAP_COMPONENT_TRACK = 'map-component-track',
63   -}
64   -
65   -export interface ComponentConfig {
66   - Component: Component;
67   - ComponentKey: FrontComponent;
68   - ComponentConfig?: Recordable;
69   - ComponentCategory: FrontComponentCategory;
70   - transformConfig: (
71   - componentConfig: Recordable,
72   - record: DataComponentRecord,
73   - dataSourceRecord: DataSource
74   - ) => Recordable;
75   -}
  31 +import { ComponentConfig } from '../types/type';
  32 +import { FrontComponent, FrontComponentCategory } from '../const/const';
76 33
77 34 export const frontComponentDefaultConfigMap = new Map<FrontComponent, Partial<ComponentInfo>>();
78 35
... ...
  1 +export enum FrontComponentCategory {
  2 + TEXT = 'text',
  3 + PICTURE = 'picture',
  4 + INSTRUMENT = 'instrument',
  5 + CONTROL = 'control',
  6 + MAP = 'map',
  7 +}
  8 +
  9 +export const FrontComponentCategoryName = {
  10 + [FrontComponentCategory.TEXT]: '文本组件',
  11 + [FrontComponentCategory.INSTRUMENT]: '仪表组件',
  12 + [FrontComponentCategory.CONTROL]: '控制组件',
  13 + [FrontComponentCategory.PICTURE]: '图片组件',
  14 + [FrontComponentCategory.MAP]: '地图组件',
  15 +};
  16 +
  17 +export enum FrontComponent {
  18 + TEXT_COMPONENT_1 = 'text-component-1',
  19 + TEXT_COMPONENT_2 = 'text-component-2',
  20 + TEXT_COMPONENT_3 = 'text-component-3',
  21 + TEXT_COMPONENT_4 = 'text-component-4',
  22 + TEXT_COMPONENT_5 = 'text-component-5',
  23 + INSTRUMENT_COMPONENT_1 = 'instrument-component-1',
  24 + INSTRUMENT_COMPONENT_2 = 'instrument-component-2',
  25 + DIGITAL_DASHBOARD_COMPONENT = 'digital-dashboard-component',
  26 + PICTURE_COMPONENT_1 = 'picture-component-1',
  27 + CONTROL_COMPONENT_TOGGLE_SWITCH = 'control-component-toggle-switch',
  28 + CONTROL_COMPONENT_SWITCH_WITH_ICON = 'control-component-switch-with-icon',
  29 + CONTROL_COMPONENT_SLIDING_SWITCH = 'control-component-sliding-switch',
  30 + MAP_COMPONENT_TRACK = 'map-component-track',
  31 +}
... ...
... ... @@ -11,8 +11,8 @@
11 11 import type { ComponentInfo, DataSource } from '/@/api/dataBoard/model';
12 12 import { useMessage } from '/@/hooks/web/useMessage';
13 13 import { DataBoardLayoutInfo } from '../../types/type';
14   - import { FrontComponent } from '../../components/help';
15 14 import { getDataSourceComponent } from './DataSourceForm/help';
  15 + import { FrontComponent } from '../../const/const';
16 16
17 17 type DataSourceFormEL = { [key: string]: Nullable<FormActionType> };
18 18
... ...
... ... @@ -12,7 +12,7 @@
12 12 import { decode } from '../../config/config';
13 13 import { ComponentInfo } from '/@/api/dataBoard/model';
14 14 import { useCalcGridLayout } from '../../hook/useCalcGridLayout';
15   - import { FrontComponent } from '../../components/help';
  15 + import { FrontComponent } from '../../const/const';
16 16
17 17 interface DataComponentRouteParams extends RouteParams {
18 18 id: string;
... ... @@ -23,8 +23,6 @@
23 23 }>();
24 24
25 25 const emit = defineEmits(['update', 'create', 'register']);
26   - const activeKey = ref('basicConfig');
27   -
28 26 const ROUTE = useRoute();
29 27
30 28 const { createMessage } = useMessage();
... ... @@ -70,7 +68,6 @@
70 68 unref(isEdit) ? handleUpdateComponent(value) : handleAddComponent(value);
71 69 resetForm();
72 70 } catch (error: unknown) {
73   - if (unref(activeKey) !== 'basicConfig') activeKey.value = 'basicConfig';
74 71 window.console.error(error);
75 72 }
76 73 };
... ... @@ -138,7 +135,7 @@
138 135 @cancel="resetForm"
139 136 >
140 137 <section>
141   - <Tabs v-model:activeKey="activeKey" type="card">
  138 + <Tabs type="card">
142 139 <Tabs.TabPane key="basicConfig" tab="基础配置">
143 140 <BasicConfiguration
144 141 ref="basicConfigurationEl"
... ...
1 1 import { Component } from 'vue';
2   -import { FrontComponent } from '../../../components/help';
  2 +import { FrontComponent } from '../../../const/const';
3 3 import BasicDataSourceForm from './BasicDataSourceForm.vue';
4 4 import ControlDataSourceForm from './ControlDataSourceForm.vue';
5 5
... ...
1 1 <script lang="ts" setup>
2 2 import { Tabs, List } from 'ant-design-vue';
3 3 import VisualWidgetSelect from './VisualWidgetSelect.vue';
  4 + import { getComponentDefaultConfig } from '../../components/help';
  5 + import { frontComponentMap } from '../../components/help';
  6 + import { computed } from 'vue';
4 7 import {
5 8 FrontComponent,
6 9 FrontComponentCategory,
7 10 FrontComponentCategoryName,
8   - getComponentDefaultConfig,
9   - } from '../../components/help';
10   - import { frontComponentMap } from '../../components/help';
11   - import { computed } from 'vue';
  11 + } from '../../const/const';
12 12
13 13 interface DataSource {
14 14 category: string;
... ...
... ... @@ -44,7 +44,7 @@
44 44 import trendIcon from '/@/assets/svg/trend.svg';
45 45 import backIcon from '/@/assets/images/back.png';
46 46 import { useCalcGridLayout } from '../hook/useCalcGridLayout';
47   - import { FrontComponent } from '../components/help';
  47 + import { FrontComponent } from '../const/const';
48 48
49 49 const ROUTE = useRoute();
50 50
... ...
  1 +import { Component } from 'vue';
1 2 import { Layout } from 'vue3-grid-layout';
  3 +import { FrontComponent, FrontComponentCategory } from '../const/const';
  4 +import { RadioRecord } from '../detail/config/util';
2 5 import { DataComponentRecord, DataSource } from '/@/api/dataBoard/model';
3 6
4 7 export type FrontDataSourceRecord = DataSource;
... ... @@ -8,3 +11,25 @@ export type DataBoardLayoutInfo = Layout & {
8 11 width?: number;
9 12 height?: number;
10 13 };
  14 +
  15 +export interface ComponentConfig {
  16 + Component: Component;
  17 + ComponentKey: FrontComponent;
  18 + ComponentConfig?: Recordable;
  19 + ComponentCategory: FrontComponentCategory;
  20 + transformConfig: (
  21 + componentConfig: Recordable,
  22 + record: DataComponentRecord,
  23 + dataSourceRecord: DataSource
  24 + ) => Recordable;
  25 +}
  26 +
  27 +export interface VisualComponentProps<Layout = Recordable, Value = Recordable> {
  28 + value?: Value;
  29 + layout?: Layout;
  30 + radio?: RadioRecord;
  31 + random?: boolean;
  32 + add?: (key: string, method: Fn) => void;
  33 + update?: () => void;
  34 + remove?: (key: string) => void;
  35 +}
... ...