当前位置: 首页 > article >正文

【uniapp开发】picker组件的使用

项目uniapp,结合fastadmin后端开发

picker组件的官方文档说明

https://en.uniapp.dcloud.io/component/picker.html#普通选择器

先看效果:

 

1、实现设备类型的筛选;2、实现设备状态的筛选;

前端代码(节选)

<template><view class="camera-list-container"><!-- 搜索栏 --><view class="search-bar"><uni-search-bar v-model="keyword" @confirm="search"></uni-search-bar></view><!-- 筛选栏 --><view class="filter-bar"><!-- 分类筛选 --><view class="filter-item"><picker:range="typeList"range-key="name":value="selectedTypeIndex"@change="handleTypeChange"mode="selector"><view class="uni-input">{{ typeList[selectedTypeIndex].name }}<uni-icons type="down" size="24" class="picker-icon"></uni-icons></view></picker></view><!-- 状态筛选 --><view class="filter-item"><picker:range="statusList"range-key="name":value="selectedStatusIndex"@change="handleStatusChange"mode="selector"><view class="uni-input">{{ statusList[selectedStatusIndex].name }}<uni-icons type="down" size="24" class="picker-icon"></uni-icons></view></picker></view></view><!-- 相机列表 --><view class="camera-items"><view class="camera-item" v-for="(item, index) in cameraList" :key="index"><view class="camera-img-container"><image :src="item.image || 'https://3f.gde.cc/uploads/20250527/83e99b5e7f4979dc4868aed335fa265d.jpg'" mode="aspectFill" class="camera-img"></image></view><view class="camera-info"><text class="name">{{ item.name }}</text><text class="name">可借数量:{{item.stock}}</text><text class="price">¥{{ item.rent_price }}/天</text><text class="status" :class="item.stock > 0 ? 'available' : 'unavailable'">{{ item.status_zh }}</text></view><view class="checkbox-container"><uni-number-box :min="0" :max="(item.stock)" :value="selectedQuantities.get(item.id) || 0"@change="handleQuantityChange(item, $event)":disabled="item.stock <= 0"></uni-number-box></view></view></view><!-- 加载更多 --><uni-load-more :status="loadStatus" @clickload="loadMore"></uni-load-more><!-- 底部租用工具栏 --><view v-if="totalSelectedQuantity > 0" class="bottom-toolbar"><view class="toolbar-left"><text>已选 {{ totalSelectedQuantity }} 台设备</text><text class="total-price">总计: ¥{{ totalPrice }}/天</text></view><view class="toolbar-right" @click="rentSelectedDevices"><text>立即预约</text></view></view></view>
</template><script setup>
import { ref, computed, onMounted, watch } from 'vue'
import request from '@/utils/http.js'
import request2 from '@/utils/http2.js'const keyword = ref('')
const selectType = ref({ id: 0, name: '产品分类' })
const selectStatus = ref({ id: '', name: '设备状态' })
const page = ref(1)
const cameraList = ref([])
const loadStatus = ref('loading')// 新增:选中项索引
const selectedTypeIndex = ref(0); // 初始全部分类
const selectedStatusIndex = ref(0); // 初始全部状态// 筛选数据
const typeList = ref([])const statusList = ref([])// 修改筛选事件处理
const handleTypeChange = (e) => {selectedTypeIndex.value = e.detail.value;fetchCameraList(true); // 切换分类时刷新列表
};const handleStatusChange = (e) => {selectedStatusIndex.value = e.detail.value;fetchCameraList(true); // 切换状态时刷新列表
};// 获取相机列表
const fetchCameraList = async (isRefresh = false) => {if (isRefresh) {page.value = 1cameraList.value = []selectedQuantities.value.clear() // 刷新时清空选中数量}try {const res = await request2({url: '/api/ffep/device/index',method: 'POST',data:{keyword: keyword.value,type: typeList.value[selectedTypeIndex.value].id, // 使用value作为参数status: statusList.value[selectedStatusIndex.value].id, // 使用value作为参数}})if (res.code) {cameraList.value = [...cameraList.value, ...res.data.list]page.value++loadStatus.value = res.data.list.length < res.data.pageSize ? 'noMore' : 'loading'} else {uni.showToast({ title: res.msg || '获取失败', icon: 'none' })loadStatus.value = 'error'}} catch (error) {uni.showToast({ title: '网络错误', icon: 'none' })loadStatus.value = 'error'}
}// 页面初始化
onMounted(() => {request2({url: '/api/ffep/device/init',method: 'POST',}).then(res=>{typeList.value = [{id:0,name:'全部类型'},...res.data.typeList]statusList.value = [{id:0,name:'全部状态'},...res.data.statusList] fetchCameraList()})uni.setNavigationBarTitle({title:'IT设备借用/领用/归还'})
})</script>

画几个重点:

1、如果数据源是二维数组,需要指定标签的名称;

 

 

2、如果接口没有默认选项,要补一个

 

3、事件改变

 

 

后端处理:

1、picker需要的数据接口

    public function init(){$typelist = CategoryModel::field('id,name')->select();$statuslist = (new ApplyModel())->getStatusList();foreach ($statuslist as $key=>$val){$statusList[] = ['id'=>$key,'name'=>$val];}return $this->success('ok',['typeList'=>$typelist,'statusList' => $statusList,]);}

返回的数据格式:

 

 2、查询事件的后端处理

http://www.lryc.cn/news/2403852.html

相关文章:

  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
  • 如何评估大语言模型效果
  • go-zero微服务入门案例
  • Python控制台输出彩色字体指南
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
  • 开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情
  • html、css(javaweb第一天)
  • 解决数据库重启问题
  • 前后端交互过程中—各类文件/图片的上传、下载、显示转换
  • SparkSQL 优化实操
  • 【vLLM 学习】Cpu Offload Lmcache
  • 数据库同步是什么意思?数据库架构有哪些?
  • 【数据结构】详解算法复杂度:时间复杂度和空间复杂度
  • Rest-Assured API 测试:基于 Java 和 TestNG 的接口自动化测试
  • 多模型协同:基于 SAM 分割 + YOLO 检测 + ResNet 分类的工业开关状态实时监控方案
  • 【分销系统商城】
  • LangChainGo入门指南:Go语言实现与OpenAI/Qwen模型集成实战
  • 5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
  • react public/index.html文件使用env里面的变量
  • chili3d 笔记17 c++ 编译hlr 带隐藏线工程图
  • 创建一个纯直线组成的字体库
  • 接口不是json的内容能用Jsonpath获取吗,如果不能,我们选用什么方法处理呢?
  • 使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)
  • Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)
  • Linux进程(中)
  • 【计算机组成原理】计算机硬件的基本组成、详细结构、工作原理
  • npm error Cannot read properties of null (reading ‘matches‘)
  • MVC分层架构模式深入剖析
  • 【方案分享】蓝牙Beacon定位精度优化(包含KF、EKF与UKF卡尔曼滤波算法详解)
  • 新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案