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

【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、查询事件的后端处理

相关文章:

  • Vim查看文件十六进制方法
  • 4. 数据类型
  • Linux开发工具(apt,vim,gcc)
  • git cherry-pick (28)
  • 生产环境问题排查:日志分析与性能瓶颈定位(二)
  • react+taro 开发第五个小程序,解决拼音的学习
  • 从上下文学习和微调看语言模型的泛化:一项对照研究
  • 我的概要设计模板(以图书管理系统为例)
  • 中国区域30m/15天植被覆盖度数据集(2010-2022)
  • 【Pandas】pandas DataFrame reset_index
  • 关于udp——mqtt运行注意事项
  • js鼠标事件大全
  • 6.4 计算机网络面试题
  • 每日算法刷题Day22 6.4:leetcode二分答案3道题,用时1h30min
  • 华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能
  • 硬件学习笔记--66 MCU的DMA简介
  • macOS 上使用 Homebrew 安装redis-cli
  • 力扣面试150题--岛屿数量
  • K8S主机漏洞扫描时检测到kube-服务目标SSL证书已过期漏洞的一种永久性修复方法
  • 机器学习基础相关问题
  • 昆山网站建设公司/免费站推广网站2022
  • 济南槐荫区做网站的/网络推广最好的网站有哪些
  • 做海购的网站/廊坊快速排名优化
  • 网站分辨率做多大/如何在手机上开自己的网站
  • 国外flash网站模板/品牌策略包括哪些内容
  • 兰州网站建设王道下拉強/地推十大推广app平台