NodeSelector.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <script setup lang="ts">
  2. import {computed, ref} from 'vue'
  3. import environment from '@/api/environment'
  4. import {useGettext} from 'vue3-gettext'
  5. const {$gettext} = useGettext()
  6. const props = defineProps(['target', 'map', 'hidden_local'])
  7. const emit = defineEmits(['update:target'])
  8. const data = ref([])
  9. const data_map = ref({})
  10. environment.get_list().then(r => {
  11. data.value = r.data
  12. r.data.forEach(node => {
  13. data_map[node.id] = node
  14. })
  15. })
  16. const value = computed({
  17. get() {
  18. return props.target
  19. },
  20. set(v) {
  21. if (typeof props.map === 'object') {
  22. v.forEach(id => {
  23. if (id !== 0) props.map[id] = data_map[id].name
  24. })
  25. }
  26. emit('update:target', v)
  27. }
  28. })
  29. </script>
  30. <template>
  31. <a-checkbox-group v-model:value="value" style="width: 100%">
  32. <a-row :gutter="[16,16]">
  33. <a-col :span="8" v-if="!hidden_local">
  34. <a-checkbox :value="0">{{ $gettext('Local') }}</a-checkbox>
  35. <a-tag color="blue">{{ $gettext('Online') }}</a-tag>
  36. </a-col>
  37. <a-col :span="8" v-for="node in data">
  38. <a-checkbox :value="node.id">{{ node.name }}</a-checkbox>
  39. <a-tag color="blue" v-if="node.status">{{ $gettext('Online') }}</a-tag>
  40. <a-tag color="error" v-else>{{ $gettext('Offline') }}</a-tag>
  41. </a-col>
  42. </a-row>
  43. </a-checkbox-group>
  44. </template>
  45. <style scoped lang="less">
  46. </style>