Showing
9 changed files
with
145 additions
and
32 deletions
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | </script> |
6 | 6 | <script lang="ts" setup> |
7 | 7 | import type { ECharts, EChartsOption } from 'echarts'; |
8 | - import { PropType, watch } from 'vue'; | |
8 | + import { watch } from 'vue'; | |
9 | 9 | import { nextTick, onMounted, onUnmounted, ref, unref, computed } from 'vue'; |
10 | 10 | import { init } from 'echarts'; |
11 | 11 | import { |
... | ... | @@ -26,29 +26,23 @@ |
26 | 26 | import { Tooltip } from 'ant-design-vue'; |
27 | 27 | import { useThrottleFn } from '@vueuse/shared'; |
28 | 28 | import { buildUUID } from '/@/utils/uuid'; |
29 | - import { FrontComponent } from '../help'; | |
30 | - | |
31 | - const props = defineProps({ | |
32 | - add: { | |
33 | - type: Function, | |
34 | - }, | |
35 | - layout: { | |
36 | - type: Object as PropType<DashboardComponentLayout>, | |
37 | - default: () => ({}), | |
38 | - }, | |
39 | - value: { | |
40 | - type: Object as PropType<DashBoardValue>, | |
41 | - default: () => ({ id: buildUUID() }), | |
42 | - }, | |
43 | - radio: { | |
44 | - type: Object as PropType<RadioRecord>, | |
45 | - default: () => DEFAULT_RADIO_RECORD, | |
46 | - }, | |
47 | - random: { | |
48 | - type: Boolean, | |
49 | - default: true, | |
50 | - }, | |
51 | - }); | |
29 | + import { FrontComponent } from '../../const/const'; | |
30 | + | |
31 | + const props = withDefaults( | |
32 | + defineProps<{ | |
33 | + add?: Function; | |
34 | + layout?: DashboardComponentLayout; | |
35 | + value?: DashBoardValue; | |
36 | + radio?: RadioRecord; | |
37 | + random?: boolean; | |
38 | + }>(), | |
39 | + { | |
40 | + layout: () => ({} as unknown as DashboardComponentLayout), | |
41 | + value: () => ({ id: buildUUID() }), | |
42 | + radio: () => DEFAULT_RADIO_RECORD, | |
43 | + random: true, | |
44 | + } | |
45 | + ); | |
52 | 46 | |
53 | 47 | const getControlsWidgetId = () => `widget-chart-${props.value.id}`; |
54 | 48 | ... | ... |
... | ... | @@ -4,9 +4,29 @@ |
4 | 4 | }; |
5 | 5 | </script> |
6 | 6 | <script lang="ts" setup> |
7 | - import { nextTick, onMounted, ref, unref } from 'vue'; | |
7 | + import { computed, nextTick, onMounted, ref, unref } from 'vue'; | |
8 | + import { RadioRecord } from '../../detail/config/util'; | |
8 | 9 | import { useScript } from '/@/hooks/web/useScript'; |
9 | 10 | import { BAI_DU_MAP_URL } from '/@/utils/fnUtils'; |
11 | + import { MapComponentLayout, MapComponentValue } from './map.config'; | |
12 | + import { | |
13 | + ClockCircleOutlined, | |
14 | + PlayCircleOutlined, | |
15 | + PauseCircleOutlined, | |
16 | + } from '@ant-design/icons-vue'; | |
17 | + import { Button, Tooltip } from 'ant-design-vue'; | |
18 | + import { useVisualBoardContext } from '../../hook/useVisualBoardContext'; | |
19 | + | |
20 | + const {} = useVisualBoardContext(); | |
21 | + | |
22 | + withDefaults( | |
23 | + defineProps<{ | |
24 | + value?: MapComponentValue; | |
25 | + layout?: MapComponentLayout; | |
26 | + radio?: RadioRecord; | |
27 | + }>(), | |
28 | + {} | |
29 | + ); | |
10 | 30 | |
11 | 31 | const wrapRef = ref<HTMLDivElement | null>(null); |
12 | 32 | const { toPromise } = useScript({ src: BAI_DU_MAP_URL }); |
... | ... | @@ -26,10 +46,47 @@ |
26 | 46 | onMounted(() => { |
27 | 47 | initMap(); |
28 | 48 | }); |
49 | + | |
50 | + const getTimeRange = computed(() => { | |
51 | + return ` - 从 ${'2020-10-20 10:10:10'} 到 ${'2020-10-20 10:10:10'}`; | |
52 | + }); | |
53 | + | |
54 | + const handleTrackSwitch = () => {}; | |
55 | + | |
56 | + const pauseFlag = ref(true); | |
57 | + | |
58 | + const handlePlay = () => { | |
59 | + pauseFlag.value = false; | |
60 | + }; | |
61 | + | |
62 | + const handlePause = () => { | |
63 | + pauseFlag.value = true; | |
64 | + }; | |
29 | 65 | </script> |
30 | 66 | |
31 | 67 | <template> |
32 | - <div class="w-full h-full flex justify-center items-center"> | |
68 | + <div class="w-full h-full flex justify-center items-center flex-col"> | |
69 | + <div class="w-[95%] flex"> | |
70 | + <Button type="text" class="!px-2 flex-auto !text-left truncate" @click="handleTrackSwitch"> | |
71 | + <div class="w-full truncate text-gray-500 flex items-center"> | |
72 | + <ClockCircleOutlined /> | |
73 | + <span class="mx-1">实时</span> | |
74 | + <Tooltip :title="getTimeRange.replace('-', '')"> | |
75 | + <span class="truncate"> | |
76 | + {{ getTimeRange }} | |
77 | + </span> | |
78 | + </Tooltip> | |
79 | + </div> | |
80 | + </Button> | |
81 | + <Button v-show="pauseFlag" type="text" class="!px-2 !text-gray-500" @click="handlePlay"> | |
82 | + <PlayCircleOutlined /> | |
83 | + <span>播放轨迹</span> | |
84 | + </Button> | |
85 | + <Button v-show="!pauseFlag" type="text" class="!px-2 !text-gray-500" @click="handlePause"> | |
86 | + <PauseCircleOutlined /> | |
87 | + <span>暂停播放</span> | |
88 | + </Button> | |
89 | + </div> | |
33 | 90 | <div ref="wrapRef" class="w-[95%] h-[95%]"></div> |
34 | 91 | </div> |
35 | 92 | </template> | ... | ... |
1 | -import { ComponentConfig } from '../help'; | |
1 | +import { FrontComponent } from '../../const/const'; | |
2 | +import { ComponentConfig } from '../../types/type'; | |
3 | + | |
4 | +export interface MapComponentLayout { | |
5 | + componentType?: FrontComponent; | |
6 | +} | |
7 | + | |
8 | +export interface MapComponentValue { | |
9 | + icon?: string; | |
10 | + track?: Recordable[]; | |
11 | +} | |
12 | + | |
13 | +interface Config { | |
14 | + layout?: MapComponentLayout; | |
15 | + value?: MapComponentValue; | |
16 | +} | |
17 | + | |
18 | +export const MaphistoryTrackConfig: Config = { | |
19 | + layout: { | |
20 | + componentType: FrontComponent.MAP_COMPONENT_TRACK_HISTORY, | |
21 | + }, | |
22 | +}; | |
23 | + | |
24 | +export const MapRealTrackConfig: Config = { | |
25 | + layout: { | |
26 | + componentType: FrontComponent.MAP_COMPONENT_TRACK_HISTORY, | |
27 | + }, | |
28 | +}; | |
2 | 29 | |
3 | 30 | export const transfromMapComponentConfig: ComponentConfig['transformConfig'] = ( |
4 | 31 | _componentConfig, | ... | ... |
1 | 1 | <script lang="ts" setup> |
2 | 2 | import { useUpdateCenter } from '../../hook/useUpdateCenter'; |
3 | 3 | import { FrontDataSourceRecord } from '../../types/type'; |
4 | + import { createVisualBoardContext } from '../../hook/useVisualBoardContext'; | |
4 | 5 | |
5 | 6 | const props = defineProps<{ |
6 | 7 | dataSource: FrontDataSourceRecord[]; |
... | ... | @@ -8,6 +9,8 @@ |
8 | 9 | |
9 | 10 | const { update, add, remove } = useUpdateCenter(); |
10 | 11 | |
12 | + createVisualBoardContext({ update, add, remove }); | |
13 | + | |
11 | 14 | defineExpose({ update }); |
12 | 15 | </script> |
13 | 16 | ... | ... |
... | ... | @@ -27,7 +27,11 @@ import ToggleSwitch from './ControlComponent/ToggleSwitch.vue'; |
27 | 27 | import SlidingSwitch from './ControlComponent/SlidingSwitch.vue'; |
28 | 28 | import SwitchWithIcon from './ControlComponent/SwitchWithIcon.vue'; |
29 | 29 | import MapComponent from './MapComponent/MapComponent.vue'; |
30 | -import { transfromMapComponentConfig } from './MapComponent/map.config'; | |
30 | +import { | |
31 | + MaphistoryTrackConfig, | |
32 | + MapRealTrackConfig, | |
33 | + transfromMapComponentConfig, | |
34 | +} from './MapComponent/map.config'; | |
31 | 35 | import { ComponentConfig } from '../types/type'; |
32 | 36 | import { FrontComponent, FrontComponentCategory } from '../const/const'; |
33 | 37 | |
... | ... | @@ -135,10 +139,20 @@ frontComponentMap.set(FrontComponent.CONTROL_COMPONENT_TOGGLE_SWITCH, { |
135 | 139 | transformConfig: transformControlConfig, |
136 | 140 | }); |
137 | 141 | |
138 | -frontComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK, { | |
142 | +frontComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK_REAL, { | |
139 | 143 | Component: MapComponent, |
140 | 144 | ComponentName: '实时轨迹', |
141 | - ComponentKey: FrontComponent.MAP_COMPONENT_TRACK, | |
145 | + ComponentKey: FrontComponent.MAP_COMPONENT_TRACK_REAL, | |
146 | + ComponentConfig: MapRealTrackConfig, | |
147 | + ComponentCategory: FrontComponentCategory.MAP, | |
148 | + transformConfig: transfromMapComponentConfig, | |
149 | +}); | |
150 | + | |
151 | +frontComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK_HISTORY, { | |
152 | + Component: MapComponent, | |
153 | + ComponentName: '历史轨迹', | |
154 | + ComponentKey: FrontComponent.MAP_COMPONENT_TRACK_HISTORY, | |
155 | + ComponentConfig: MaphistoryTrackConfig, | |
142 | 156 | ComponentCategory: FrontComponentCategory.MAP, |
143 | 157 | transformConfig: transfromMapComponentConfig, |
144 | 158 | }); | ... | ... |
... | ... | @@ -27,7 +27,8 @@ export enum FrontComponent { |
27 | 27 | CONTROL_COMPONENT_TOGGLE_SWITCH = 'control-component-toggle-switch', |
28 | 28 | CONTROL_COMPONENT_SWITCH_WITH_ICON = 'control-component-switch-with-icon', |
29 | 29 | CONTROL_COMPONENT_SLIDING_SWITCH = 'control-component-sliding-switch', |
30 | - MAP_COMPONENT_TRACK = 'map-component-track', | |
30 | + MAP_COMPONENT_TRACK_REAL = 'map-component-track-real', | |
31 | + MAP_COMPONENT_TRACK_HISTORY = 'map-component-track-history', | |
31 | 32 | } |
32 | 33 | |
33 | 34 | export enum Gradient { | ... | ... |
... | ... | @@ -7,7 +7,8 @@ import MapDataSourceForm from './MapDataSourceForm.vue'; |
7 | 7 | const dataSourceComponentMap = new Map<FrontComponent, Component>(); |
8 | 8 | |
9 | 9 | dataSourceComponentMap.set(FrontComponent.CONTROL_COMPONENT_TOGGLE_SWITCH, ControlDataSourceForm); |
10 | -dataSourceComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK, MapDataSourceForm); | |
10 | +dataSourceComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK_REAL, MapDataSourceForm); | |
11 | +dataSourceComponentMap.set(FrontComponent.MAP_COMPONENT_TRACK_HISTORY, MapDataSourceForm); | |
11 | 12 | |
12 | 13 | export const getDataSourceComponent = (frontId: FrontComponent) => { |
13 | 14 | if (dataSourceComponentMap.has(frontId)) return dataSourceComponentMap.get(frontId)!; | ... | ... |
1 | +import { inject, provide } from 'vue'; | |
2 | +import { UpdateCenter } from './useUpdateCenter'; | |
3 | + | |
4 | +const key = Symbol('visual-board-content'); | |
5 | + | |
6 | +type Instance = UpdateCenter; | |
7 | + | |
8 | +export function createVisualBoardContext(instance: Instance) { | |
9 | + provide(key, instance); | |
10 | +} | |
11 | + | |
12 | +export function useVisualBoardContext() { | |
13 | + return inject(key) as Instance; | |
14 | +} | ... | ... |