更新记录

1.0.0(2026-04-08)

自定义插槽实现多级下拉菜单弹窗筛选功能


平台兼容性

uni-app(5.06)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
3以上 × × × × × × × × × × ×

其他

多语言 暗黑模式 宽屏模式

完整流程

  1. 用户点击 筛选栏的"目录"按钮 → 触发 openCatalogPicker() 方法
  2. 方法执行 catalogPicker.value.show() → 调用 uni-data-picker 组件的内置 show() 方法
  3. 组件响应 弹出选择器弹窗,显示 catalogTreeData 树形数据
  4. 用户选择 点击某个选项 → 触发 @change 事件 → 执行 onCatalogChange() 方法
  5. 数据处理onCatalogChange() 中更新 selectedCatalogValue.valuecatalogPickerValue.value
  6. 界面更新 筛选条件变化,computed 属性重新计算,列表自动刷新
<!-- 筛选栏 -->
<view class="filter-bar">
    <!-- 目录筛选 -->
    <view class="filter-item" @click="openCatalogPicker">
        <text class="filter-text" :class="{ active: selectedCatalogValue }">目录</text>
        <uni-icons :type="selectedCatalogValue ? 'up' : 'down'" size="14"
            :color="selectedCatalogValue ? '#6366f1' : '#333'" class="filter-icon" />
    </view>

    <!-- 类型筛选 -->
    <view class="filter-item" @click="openTypePicker">
        <text class="filter-text" :class="{ active: selectedType }">类型</text>
        <uni-icons :type="selectedType ? 'up' : 'down'" size="14"
            :color="selectedType ? '#6366f1' : '#333'" class="filter-icon" />
    </view>

    <!-- 状态筛选 -->
    <view class="filter-item" @click="openFeaturedPicker">
        <text class="filter-text" :class="{ active: selectedFeatured }">状态</text>
        <uni-icons :type="selectedFeatured ? 'up' : 'down'" size="14"
            :color="selectedFeatured ? '#6366f1' : '#333'" class="filter-icon" />
    </view>

    <!-- 排序筛选 -->
    <view class="filter-item" @click="openSortPicker">
        <text class="filter-text" :class="{ active: selectedSort }">排序</text>
        <uni-icons :type="selectedSort ? 'up' : 'down'" size="14"
            :color="selectedSort ? '#6366f1' : '#333'" class="filter-icon" />
    </view>

    <!-- 重置按钮 -->
    <view class="filter-item reset-item" @click="resetFilters">
        <text class="reset-text">重置</text>
    </view>
</view>

<!-- 目录选择器 -->
<uni-data-picker ref="catalogPicker" v-model="catalogPickerValue" :localdata="catalogTreeData"
    popup-title="选择目录" @change="onCatalogChange" :clear-icon="false" :multiple="false"
    class="picker-hidden-input">
</uni-data-picker>

<!-- 类型选择器 -->
<uni-data-picker ref="typePicker" v-model="typePickerValue" :localdata="typeList" popup-title="选择类型"
    @change="onTypeChange" :clear-icon="false" :multiple="false" class="picker-hidden-input">
</uni-data-picker>

<!-- 状态选择器 -->
<uni-data-picker ref="featuredPicker" v-model="featuredPickerValue" :localdata="featuredListData"
    popup-title="选择状态" @change="onFeaturedChange" :clear-icon="false" :multiple="false"
    class="picker-hidden-input">
</uni-data-picker>

<!-- 排序选择器 -->
<uni-data-picker ref="sortPicker" v-model="sortPickerValue" :localdata="sortListData" popup-title="排序方式"
    @change="onSortChange" :clear-icon="false" :multiple="false" class="picker-hidden-input">
</uni-data-picker>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。