index.vue 1.06 KB
<template>
  <Select
    v-bind="$attrs"
    v-model="formValue"
    :options="options"
    :fallback-option="false"
    :field-names="{ value: 'id', label: 'name' }"
    :placeholder="placeholder"
    :allow-search="true"
  />
</template>

<script lang="ts" setup>
  import { Select } from '@arco-design/web-vue';
  import { useSelectionStore } from '@/store';
  import { useVModels } from '@vueuse/core';
  import { storeToRefs } from 'pinia';
  import { computed } from 'vue';
  import { filter } from 'lodash';

  type propType = { modelValue?: number | string | number[]; placeholder?: string; filtrate?: (value: any) => boolean };

  const props = withDefaults(defineProps<propType>(), {
    filtrate: () => true,
    placeholder: '请选择',
  });
  const emits = defineEmits(['update:modelValue', 'update:loading']);

  const { getProjectOptions } = storeToRefs(useSelectionStore());

  const options = computed(() => filter(getProjectOptions.value, props.filtrate));

  const { modelValue: formValue } = useVModels(props, emits);
</script>

<style lang="less" scoped></style>