VisualConfiguration.vue 2.81 KB
<script lang="ts" setup>
  import { Tabs, List } from 'ant-design-vue';
  import VisualWidgetSelect from './VisualWidgetSelect.vue';
  import TextComponent from '../../components/TextComponent/TextComponent.vue';
  import { textComponentConfig } from '../../components/TextComponent/config';
  import { instrumentComponentConfig } from '../../components/InstrumentComponent';
  import { pictureComponentList } from '../../components/PictureComponent';
  import { getComponentDefaultConfig } from '../config/help';
  import { WidgetComponentType } from '../config/visualOptions';
  const props = defineProps<{
    value: string;
  }>();
  const emit = defineEmits(['update:value', 'change']);

  const grid = { gutter: 10, column: 1, xs: 1, sm: 2, md: 2, lg: 3, xl: 3, xxl: 4 };

  const handleCheck = (checked: WidgetComponentType) => {
    const defaultConfig = getComponentDefaultConfig(checked);
    emit('update:value', checked);
    emit('change', defaultConfig);
  };
</script>

<template>
  <section>
    <Tabs>
      <Tabs.TabPane key="1" tab="文本组件">
        <List :grid="grid" :data-source="textComponentConfig">
          <template #renderItem="{ item }">
            <List.Item class="!flex !justify-center">
              <VisualWidgetSelect
                :checked-id="props.value"
                :control-id="item.id"
                @change="handleCheck"
              >
                <TextComponent :layout="item" :value="item.value" />
              </VisualWidgetSelect>
            </List.Item>
          </template>
        </List>
      </Tabs.TabPane>
      <Tabs.TabPane key="2" tab="图片组件">
        <List :grid="grid" :data-source="pictureComponentList">
          <template #renderItem="{ item }">
            <List.Item class="!flex !justify-center">
              <VisualWidgetSelect
                :checked-id="props.value"
                :control-id="item.id"
                @change="handleCheck"
              >
                <component :is="item.component" />
              </VisualWidgetSelect>
            </List.Item>
          </template>
        </List>
      </Tabs.TabPane>
      <Tabs.TabPane key="3" tab="仪表组件">
        <List :grid="grid" :data-source="instrumentComponentConfig">
          <template #renderItem="{ item }">
            <List.Item class="!flex !justify-center">
              <VisualWidgetSelect
                :checked-id="props.value"
                :control-id="item.id"
                @change="handleCheck"
              >
                <component
                  :is="item.component"
                  :random="true"
                  :layout="item.layout"
                  :value="item.value"
                />
              </VisualWidgetSelect>
            </List.Item>
          </template>
        </List>
      </Tabs.TabPane>
    </Tabs>
  </section>
</template>