Skip to content

DropdownMenu 下拉菜单

介绍

下拉菜单是一种常见的交互组件,用于显示一组选项供用户选择。它通常用于筛选数据、排序选项等场景。

导入

js
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'

用法

基础用法

基本的下拉菜单使用方式,包含多个可选择的条目。

vue
<template>
  <DropdownMenu>
    <DropdownMenuItem 
      v-model="value1"
      :options="[
        { text: '全部商品', value: 0 },
        { text: '新款商品', value: 1 },
        { text: '活动商品', value: 2 },
      ]"
      type="single-check"
    />
    <DropdownMenuItem 
      v-model="value2"
      :options="[
        { text: '默认排序', value: 'a' },
        { text: '好评排序', value: 'b' },
        { text: '销量排序', value: 'c' }, 
      ]"
      type="single-check"
    />
  </DropdownMenu>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'

const value1 = ref(0)
const value2 = ref('a')
</script>

自定义内容

可以自定义下拉菜单的内容,例如添加复选框等复杂交互元素。

vue
<template>
  <DropdownMenu ref="dropdownMenu1">
    <DropdownMenuItem title="筛选">
      <Cell title="热门推荐" touchable>
        <template #value>
          <CheckBox v-model="value3"></CheckBox>
        </template>
      </Cell>
      <Cell title="促销产品" touchable>
        <template #value>
          <CheckBox v-model="value4"></CheckBox>
        </template>
      </Cell>
      <FlexCol :padding="10">
        <Button type="primary" @click="dropdownMenu1?.close()">确定</Button>
      </FlexCol>
    </DropdownMenuItem>
    <DropdownMenuItem 
      v-model="value2"
      :options="[
        { text: '默认排序', value: 'a' },
        { text: '好评排序', value: 'b' },
        { text: '销量排序', value: 'c' }, 
      ]"
      type="single-check"
    />
    <template #extra>
      <DropdownMenuItem 
        v-model="value5"
        title="品牌"
        :options="[
          {text: 'Haier', value: 'haier'},
          {text: '卡萨帝', value: 'casarte'},
          {text: 'Leader', value: 'leader'},
        ]"
        type="mulit-check"
      />
      <DropdownMenuItem v-model="value3" title="热门" type="toggle" />
      <DropdownMenuItem v-model="value4" title="促销" type="toggle" />
    </template>
  </DropdownMenu>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'
import CheckBox from '@/components/form/CheckBox.vue'
import Cell from '@/components/basic/Cell.vue'
import FlexCol from '@/components/layout/FlexCol.vue'
import Button from '@/components/basic/Button.vue'

const dropdownMenu1 = ref()
const value2 = ref('a')
const value3 = ref(false)
const value4 = ref(false)
const value5 = ref<string[]>([])
</script>

自定义选中主色

可以通过 activeColor 属性自定义选中状态的颜色。

vue
<template>
  <DropdownMenu activeColor="danger">
    <DropdownMenuItem 
      v-model="value1"
      :options="[
        { text: '全部商品', value: 0 },
        { text: '新款商品', value: 1 },
        { text: '活动商品', value: 2 },
      ]"
      type="single-check"
    />
    <DropdownMenuItem 
      v-model="value2"
      :options="[
        { text: '默认排序', value: 'a' },
        { text: '好评排序', value: 'b' },
        { text: '销量排序', value: 'c' }, 
      ]"
      type="single-check"
    />
  </DropdownMenu>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'

const value1 = ref(0)
const value2 = ref('a')
</script>

向上展开

可以通过 direction 属性设置下拉菜单向上展开。

vue
<template>
  <DropdownMenu direction="up">
    <DropdownMenuItem 
      v-model="value1"
      :options="[
        { text: '全部商品', value: 0 },
        { text: '新款商品', value: 1 },
        { text: '活动商品', value: 2 },
      ]"
      type="single-check"
    />
    <DropdownMenuItem 
      v-model="value2"
      :options="[
        { text: '默认排序', value: 'a' },
        { text: '好评排序', value: 'b' },
        { text: '销量排序', value: 'c' }, 
      ]"
      type="single-check"
    />
  </DropdownMenu>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'

const value1 = ref(0)
const value2 = ref('a')
</script>

禁用条目

可以通过 disabled 属性禁用某个下拉菜单项。

vue
<template>
  <DropdownMenu>
    <DropdownMenuItem 
      v-model="value1"
      disabled
      :options="[
        { text: '全部商品', value: 0 },
        { text: '新款商品', value: 1 },
        { text: '活动商品', value: 2 },
      ]"
      type="single-check"
    />
    <DropdownMenuItem 
      v-model="value2"
      :options="[
        { text: '默认排序', value: 'a' },
        { text: '好评排序', value: 'b' },
        { text: '销量排序', value: 'c' }, 
      ]"
      type="single-check"
    />
  </DropdownMenu>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import DropdownMenu from '@/components/feedback/DropdownMenu.vue'
import DropdownMenuItem from '@/components/feedback/DropdownMenuItem.vue'

const value1 = ref(0)
const value2 = ref('a')
</script>

API 参考

下拉菜单容器组件。

Props

名称说明类型必填默认值
activeColor菜单标题和选项的选中态颜色string-'primary'
backgroundColor背景颜色string-'white'
itemStyle菜单选项的样式ViewStyle--
itemExtraStyle菜单额外选项的样式ViewStyle--
direction菜单的方向'up' | 'down'-'down'
duration动画时长,单位ms,设置为 0 可以禁用动画number-300

Slots

名称说明
default下拉菜单项的内容
extra额外的下拉菜单项,会显示在滚动区域

Methods

名称说明
close关闭所有打开的下拉菜单

下拉菜单的单个条目组件。

Props

名称说明类型必填默认值
modelValue选中的值string | number | boolean | undefined | (string | number)[]--
title条目标题文字string--
icon条目左侧图标名称或图片链接,等同于 Icon 组件的 icon 属性string--
disabled是否禁用boolean-false
options选项。如果为空,且传入boolean则为开关,否则点击条目,其他属性为下拉菜单DropdownMenuItem[]--
type类型'button' | 'toggle' | 'single-check' | 'mulit-check'-'single-check'
activated设置条目激活状态的方式 - default: 默认使用 modelValue 计算状态,不为空数组或者不为第一条数据则激活 - none: 没有激活状态 - true/false:手动设置激活状态boolean | 'default' | 'none'-'default'

Slots

名称说明
default下拉菜单的内容,当没有设置 options 时显示
icon条目左侧的图标
title条目的标题文本
arrow右侧的箭头图标

Events

名称说明参数
update:modelValue选中值变化时触发value: string | number | boolean | (string | number)[]
click当类型为 button 时,点击触发$event

Methods

名称说明
close关闭当前下拉菜单
open打开当前下拉菜单
toggle切换当前下拉菜单的显示状态

主题变量

名称类型默认值说明
DropdownMenuActiveColorstringprimary选中状态的颜色
DropdownMenuBackgroundColorstringwhite背景颜色
DropdownMenuItemTextMarginnumber6文本边距
DropdownMenuItemIconSizenumber25图标大小
DropdownMenuItemVerticalPaddingnumber20垂直内边距
DropdownMenuItemHorizontalPaddingnumber0水平内边距
DropdownMenuItemExtraBorderStylestringsolid额外菜单项的边框样式
DropdownMenuItemExtraBorderWidthnumber2额外菜单项的边框宽度
DropdownMenuItemExtraBorderColorstringtransparent额外菜单项的边框颜色
DropdownMenuItemExtraRadiusnumber40额外菜单项的圆角大小
DropdownMenuItemExtraMarginRightnumber10额外菜单项的右外边距
DropdownMenuItemExtraVerticalPaddingnumber2额外菜单项的垂直内边距
DropdownMenuItemExtraHorizontalPaddingnumber10额外菜单项的水平内边距