| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <!-- eslint-disable vue/multi-word-component-names -->
- <template>
- <!-- Header部分 -->
- <div v-if="headerConfig.show" class="w-100% flex content__header">
- <!-- 选择下拉框,自动填充剩余空间,这种实现是因为 Select 不支持 suffix -->
- <Dropdown
- v-if="headerConfig.showSelector"
- class="flex-grow-1 content__header_left"
- :trigger="['click']"
- :bordered="false"
- @open-change="visible = $event"
- >
- <div class="w-100% flex flex-items-center" @click.prevent>
- <SwapOutlined class="w-30px" />
- <div class="flex-grow-1">
- {{ selectedDeviceLabel }}
- </div>
- <CaretUpOutlined class="w-30px" v-if="visible" />
- <CaretDownOutlined class="w-30px" v-else />
- </div>
- <template #overlay>
- <Menu :selected-keys="[selectedDeviceID]" @click="selectHandler">
- <MenuItem v-for="item in options" :key="item.value" :title="item.label">
- {{ item.label }}
- </MenuItem>
- </Menu>
- </template>
- </Dropdown>
- <template v-if="headerConfig.showSlot">
- <div class="flex flex-items-center flex-grow-1 content__header_right">
- <SwapOutlined class="w-30px" />
- <div class="flex-grow-1">
- {{ selectedDeviceSlot }}
- </div>
- </div>
- </template>
- </div>
- </template>
- <script lang="ts" setup>
- import { onMounted, onUnmounted, ref } from 'vue';
- import { Config } from '../../../deviceManager/configurationTable/types';
- import { useInitDevices } from '../hooks/useInit';
- import { MenuItem } from 'ant-design-vue';
- const props = defineProps<{
- moduleData: Config['moduleData'];
- deviceType: Config['deviceType'];
- }>();
- const emit = defineEmits(['select']);
- const visible = ref(false);
- const headerConfig = props.moduleData.header;
- const { selectedDeviceID, selectedDevice, selectedDeviceSlot, selectedDeviceLabel, options, fetchDevices } = useInitDevices(
- props.deviceType,
- props.moduleData
- );
- let interval: any = null;
- function selectHandler({ key }) {
- selectedDeviceID.value = key;
- emit('select', selectedDevice);
- }
- onMounted(() => {
- fetchDevices({ init: true });
- interval = setInterval(() => {
- fetchDevices();
- }, 600000);
- });
- onUnmounted(() => {
- clearInterval(interval);
- });
- </script>
- <style scoped>
- .costume-header__header {
- height: 30px;
- background-image: linear-gradient(90deg, #3df6ff44, transparent 20%, transparent 80%, #3df6ff44);
- }
- .costume-header__header_left {
- border-left: 3px solid;
- border-right: 3px solid;
- border-image-source: linear-gradient(to top, #185f7188, #3df6ff, #185f7188);
- border-image-slice: 1;
- }
- .costume-header__header_right {
- border-right: 3px solid;
- border-image-source: linear-gradient(to top, #185f7188, #3df6ff, #185f7188);
- border-image-slice: 1;
- }
- ::v-deep .zxm-select:not(.zxm-select-customize-input) .zxm-select-selector {
- /* background-color: transparent; */
- color: #fff;
- }
- ::v-deep .zxm-select-arrow {
- color: #fff;
- }
- ::v-deep .zxm-select-selection-item {
- color: #fff !important;
- }
- ::v-deep .zxm-select-selection-placeholder {
- color: #fff !important;
- }
- </style>
|