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

Uniapp微信小程序:自封装自定义插槽下拉选择器|简化使用方法,支持抓取任意字段,数据回显同时预选回显项,支持多种格式的数据源(个人学习记录)

封装组件template view classgeneral-picker-simple slot :showTextsimpleSelectedText :openPickeropenSimplePicker up-button typeinfo tapopenSimplePicker {{ simpleSelectedText }} /up-button /slot /view !-- 配置选择器预选中索引 -- up-picker :showpickerShow :columns[list] confirmhandleConfirm cancelhandleCancel :keyNameshowKey :titletitle :confirmColorconfirmColor :cancelColorcancelColor closehandleClose closeOnClickOverlay :defaultIndex[pickerDefaultIndex] /up-picker /template script setup import { ref, watch, computed, nextTick } from vue; // 组件参数定义 const props defineProps({ list: { type: Array, default: () [] }, title: { type: String, default: 请选择 }, confirmColor: { type: String, default: #1989fa }, cancelColor: { type: String, default: #999 }, showKey: { type: String, default: text }, valueKey: { type: String, default: id }, modelValue: { type: [String, Number], default: }, placeholder: { type: String, default: 请选择 } }); // 事件定义 const emit defineEmits([update:modelValue, select, cancel]); // 内部状态 const pickerShow ref(false); const rawSelectedText ref(); const pickerDefaultIndex ref(0); // 选择器预选中索引 // 自动补占位符的展示文本 const simpleSelectedText computed(() { return rawSelectedText.value || props.placeholder; }); // 更新选中文本 const updateSelectedText (newVal) { if (!newVal || props.list.length 0) { rawSelectedText.value ; pickerDefaultIndex.value 0; return; } // 兼容类型匹配查找选项 const findItem props.list.find(item { if (typeof item string) return item newVal; const itemValue item[props.valueKey] ; const targetValue newVal ; return itemValue targetValue; }); if (findItem) { rawSelectedText.value typeof findItem string ? findItem : (findItem[props.showKey] || ); calcPickerIndex(newVal); } else { rawSelectedText.value ; pickerDefaultIndex.value 0; } }; // 计算选择器预选中索引 const calcPickerIndex (targetValue) { if (!targetValue || props.list.length 0) { pickerDefaultIndex.value 0; return; } const targetIndex props.list.findIndex(item { if (typeof item string) return item targetValue; const itemValue item[props.valueKey] ; const targetVal targetValue ; return itemValue targetVal; }); pickerDefaultIndex.value targetIndex -1 ? targetIndex : 0; }; // 监听选中值变化 watch(() props.modelValue, (newVal) { nextTick(() updateSelectedText(newVal)); }, { immediate: true }); // 监听数据源变化 watch(() props.list, () { if (props.modelValue) nextTick(() updateSelectedText(props.modelValue)); }, { deep: true }); // 打开选择器 const openSimplePicker () { nextTick(() { calcPickerIndex(props.modelValue); pickerShow.value true; }); }; // 确认选择 const handleConfirm (e) { let result { showText: , formValue: }; if (typeof e.value[0] string) { result.showText e.value[0]; result.formValue e.value[0]; } else { result.showText e.value[0][props.showKey] || ; result.formValue e.value[0][props.valueKey] || ; } rawSelectedText.value result.showText; emit(update:modelValue, result.formValue); emit(select, result.formValue, result.showText); pickerShow.value false; }; // 取消/关闭选择器 const handleCancel () { emit(cancel); pickerShow.value false; }; const handleClose () { emit(cancel); pickerShow.value false; }; // 暴露方法 defineExpose({ openSimplePicker }); /script style scoped .general-picker-simple { display: inline-block; } /style示例代码template view classdemo-container !-- 示例1默认按钮 纯文本数组 -- view classdemo-block view classdemo-title 默认按钮模式纯文本数组/view !-- 纯文本数组选择器默认按钮样式 -- GeneralPicker :listtextOptions title请选择文本选项 v-modelselectedTextValue selecthandleTextSelect / view classselected-tip当前选中值{{ selectedTextValue }}/view /view !-- 示例2自定义按钮 对象数组 -- view classdemo-block view classdemo-title 自定义按钮模式对象数组/view !-- 对象数组选择器插槽自定义按钮 -- GeneralPicker :listobjectOptions title请选择对象选项 showKeyname valueKeyid v-modelselectedObjectId selecthandleObjectSelect template #default{ showText, openPicker } view classcustom-select-btn tapopenPicker {{ showText }} /view /template /GeneralPicker view classselected-tip当前选中ID{{ selectedObjectId }}/view /view /view /template script setup import { ref } from vue; import GeneralPicker from /components/GeneralPicker.vue; // 确认组件实际路径 // 数据源定义 // 纯文本数组数据源适用于简单文本选择 const textOptions ref([选项一, 选项二, 选项三]); // 对象数组数据源适用于需要区分展示文本和实际值的场景 const objectOptions ref([{ name: 选项一, id: 1 }, { name: 选项二, id: 2 }, { name: 选项三, id: 3 } ]); // 选中值绑定 // 纯文本数组选中值 const selectedTextValue ref(选项二); // 对象数组选中ID实际业务值 const selectedObjectId ref(2); // 事件处理 /** * 纯文本选择回调 */ const handleTextSelect (value, text) { console.log(纯文本模式选中, { value, text }); }; /** * 对象数组选择回调 */ const handleObjectSelect (id, text) { console.log(自定义按钮模式选中, { id, text }); }; /script style langscss scoped .demo-container { padding: 30rpx; } .demo-block { margin-bottom: 40rpx; padding-bottom: 20rpx; border-bottom: 1px solid #f0f0f0; } .demo-title { font-size: 32rpx; font-weight: bold; margin: 20rpx 0; color: #333; } .selected-tip { margin-top: 10rpx; line-height: 2; color: #666; padding-left: 10rpx; } .custom-select-btn { padding: 20rpx 40rpx; background: #f5f5f5; border-radius: 8rpx; color: #333; display: inline-block; margin: 20rpx 0; :active { background: #e8e8e8; } } /style依赖组件Uview-Plus组件文档https://www.cnblogs.com/zhangyouwu/p/18561086

相关文章:

Uniapp微信小程序:自封装自定义插槽下拉选择器|简化使用方法,支持抓取任意字段,数据回显同时预选回显项,支持多种格式的数据源(个人学习记录)

封装组件&#xff1a;<template><view class"general-picker-simple"><slot :showText"simpleSelectedText" :openPicker"openSimplePicker"><up-button type"info" tap"openSimplePicker">{{ simp…...

服务器预约系统linux小项目-第一节课

一、项目介绍我们现在做的项目是一个预约系统。系统主要由 服务器端&#xff08;server&#xff09;、管理员端&#xff08;admin&#xff09;、客户端&#xff08;cli&#xff09; 和 MySQL 数据库 组成。其中&#xff1a;server 是系统核心&#xff0c;负责处理客户端请求、连…...

OpenClaw 超级 AI 实战专栏【实战案例】(十)OpenClaw 电商自动化系统:比价 + 库存监控 + 自动调价

目录 一、系统整体设计 技术栈 二、完整代码实现 1. 环境准备与依赖安装 2. 项目目录结构 3. 配置文件(config/.env) 4. 工具类实现 (1)数据库操作(utils/db_operate.py) (2)请求工具(utils/request_utils.py) 5. 核心功能模块 (1)比价模块(core/price…...

OpenClaw 超级 AI 实战专栏【实战案例】(九)OpenClaw 生产环境部署全攻略:性能优化 + 安全加固 + 监控运维

目录 一、生产环境定位与架构设计 1.1 适用场景 1.2 推荐生产架构 二、环境准备与标准化安装 2.1 系统要求 2.2 一键安装依赖(生产脚本) 三、生产配置文件(必须固化) 3.1 OpenClaw 生产配置 config_prod.py 四、进程守护(生产 724 必备) 4.1 Supervisor 配置 /…...

条码管理系统+WMS:物料入库扫码即建档,库存盘点1小时完成

“这批物料入库建档还没完成&#xff1f;”“月底盘点要全员加班两三天&#xff0c;还总出现账实不符”“急需的物料找了半天找不到&#xff0c;生产线停工等料”——物料管理是制造业生产保障的核心环节&#xff0c;而传统物料管理模式中&#xff0c;入库建档繁琐、盘点低效、…...

461.汉明距离

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 class Solution {public int hammingDistance(int x, int y) {return Integer.bitCount(x^y);} }...

AI赋能森林火防助力开启智慧守护新篇章,基于最新以注意力为核心的YOLOv12全系列【n/s/m/l/x】参数模型开发构建AI智能化森林火防无人机巡检场景下森林火点、烟雾异常检测预警系统

森林&#xff0c;作为地球生态系统的核心组成部分&#xff0c;不仅为无数生物提供了栖息之所&#xff0c;还对调节气候、保持水土、净化空气等起着至关重要的作用。然而&#xff0c;森林火灾这一“无情杀手”&#xff0c;始终是森林面临的重大威胁。每年&#xff0c;因各种意外…...

2026 最新解读:AI 在数字资产管理中的 5 大应用场景与实践路径

核心要点 问题&#xff1a; 为什么越来越多企业在 2026 年开始用 AI 管理数字资产&#xff1f; 答案&#xff1a; 当图片、视频和内容素材的规模超过人工可控范围时&#xff0c;管理问题会直接转化为业务问题。AI 能在内容理解、搜索、复用、协作和安全等关键环节提供系统性能…...

零基础也能懂!OpenClaw 2026.3.8 (原Clawdbot)最全安装

文章目录一、OpenClaw是甚&#xff1f;二、准备工作三、安装OpenClaw四、运行初始化向导四、查看服务五、访问Web UI面板常见错误一、OpenClaw是甚&#xff1f; 如果你在寻找一个真正能帮你“干活”的AI&#xff0c;而不仅仅是一个聊天窗口&#xff0c;那么OpenClaw绝对是2026年…...

iOS 卡顿线上监控

一、核心原理主线程卡顿 RunLoop 超时 监听 kCFRunLoopBeforeSources / kCFRunLoopAfterWaiting 两个状态&#xff0c; 超过 300ms 没反应 → 判定卡顿 → 抓堆栈 当前页面。测试结果&#xff1a;用.dSYM看更详细的信息&#xff1a;二、完整代码&#xff08;复制即用&#xf…...

使用Python进行简单编程

实验一&#xff1a;&#xff08;1&#xff09;交互式&#xff1a;&#xff08;2&#xff09;文件式&#xff1a;实验2 &#xff08;1&#xff09;交互式&#xff08;2&#xff09;文件式实验3&#xff08;1&#xff09;交互式(2)文件式实验4&#xff08;1)文件式交互式…...

90度皮带转弯机(CAD)

90度皮带转弯机作为物流输送系统中的关键设备&#xff0c;其核心作用在于实现物料输送路径的灵活转向。在传统直线输送场景中&#xff0c;若需改变物料流向&#xff0c;通常需通过多段直线设备拼接或增设机械臂等复杂结构&#xff0c;这不仅占用大量空间&#xff0c;还会增加设…...

2026实测:CSDN发文按钮消失?1分钟极速找回!

&#x1f50d;2026实测&#xff1a;CSDN发文按钮消失&#xff1f;1分钟极速找回&#xff01; &#x1f4dd;摘要&#xff1a;小白友好&#xff01;CSDN发文按钮找不到/不显示&#xff1f;覆盖缓存清理、权限排查、编辑器误操作全场景&#xff0c;含可复制代码排错流程图&#x…...

2026 独立开发者 AI 工具栈:我的选择和理由

做独立开发者一年半了&#xff0c;工具栈换了好几轮。从最开始什么都试&#xff0c;到现在基本稳定下来。分享一下我目前在用的 AI 相关工具&#xff0c;每个都说说为什么选它、花多少钱。 完整工具栈类别工具月费用途编程 IDECursor Pro135日常写代码终端 AIClaude Code0&…...

leetcode 1405. Longest Happy String 最长快乐字符串-耗时100

Problem: 1405. Longest Happy String 最长快乐字符串 耗时100%&#xff0c;首先按照greedy的策略&#xff0c;每次最多加两个字符&#xff0c;优先队列拿到数量最多的字符&#xff0c;不停的拼起来&#xff0c;延迟放入pre&#xff0c;先拿到cnt和ch再放入pre 最后考虑到某个…...

2026精选课题-基于springboot智慧生活分享平台的设计与实现

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/学生代理交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

2026精选课题-基于springboot在线旅游网站系统的设计与实现

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/学生代理交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

跃迁Web3数字金融合伙人:Cber经纪人体系全景解析与CMC核心权益拆解

K线背后&#xff0c;真正值钱的往往不是一次买卖&#xff0c;而是关系的复利 加密行业走到今天&#xff0c;单靠“能交易”“币够多”“活动够猛”已经很难撑起长期护城河。行情火热时&#xff0c;人人都像《华尔街》里举着电话咆哮的交易员&#xff0c;恨不得下一分钟就抓住一…...

2026 毕业论文降重 降 AIGC 工具全测评:9 款神器破解毕业焦虑

又到了一年一度的毕业季&#xff0c;知网、维普的重复率检测与 AIGC 疑似度筛查&#xff0c;成了压在无数本科生心头的两座大山。一边是导师对原创性的严苛要求&#xff0c;一边是 AI 写作留下的痕迹难以消除&#xff0c;不少同学在 “改了又查、查了又改” 的循环中熬到深夜。…...

deepseek公式格式

作为一名长期深耕 AI 领域的开发者&#xff0c;你一定遇到过这种“降智”时刻&#xff1a;DeepSeek-R1 给出的推导过程精妙绝伦&#xff0c;满屏的 LaTeX 公式极其专业&#xff0c;但当你试图将其整理成排版精美的文档或 CSDN 博客时&#xff0c;噩梦开始了。直接复制导致公式乱…...

高级java每日一道面试题-2025年8月30日-业务篇[LangChain4j]-如何实现金融文档的自动分析和摘要(如财报、研报)?

在Java生态中&#xff0c;利用LangChain4j实现金融文档&#xff08;如财报、研报&#xff09;的自动分析与摘要&#xff0c;是一个典型的RAG&#xff08;检索增强生成&#xff09;应用场景。这类文档具有篇幅长、专业术语密集、数据表格多、对精确性要求高等特点&#xff0c;因…...

Using Vulkan -- Window System Integration (WSI)

由于 Vulkan API 可不显示结果即可使用&#xff0c;WSI通过可选 Vulkan 扩展提供。多数实现会包含 WSI 支持。WSI 设计用于将各平台窗口机制与 Vulkan 核心 API 隔离开。 设置可呈现图像的步骤 表面&#xff08;Surface&#xff09; VkSurfaceKHR对象与平台无关&#xff0c;设…...

高级java每日一道面试题-2025年8月29日-业务篇[LangChain4j]-如何构建金融知识问答系统?如何处理时效性问题?

基于 LangChain4j 构建金融知识问答系统及时效性处理策略 一、金融知识问答系统的特点与挑战 金融领域知识问答系统面临的核心挑战在于&#xff1a; 领域专精性&#xff1a;金融术语密集、概念复杂&#xff0c;涉及股票、债券、衍生品、财报分析、监管政策等专业内容。准确性要…...

第16章 Android平台构建:《暗黑王朝》的跨平台部署与调试

第16章 Android平台构建&#xff1a;《暗黑王朝》的跨平台部署与调试 在《暗黑王朝》的跨平台开发战略中&#xff0c;Android平台占据了核心地位。与iOS的封闭生态不同&#xff0c;Android的开放性带来了更广阔的市场覆盖&#xff0c;同时也意味着更复杂的碎片化挑战。截至202…...

二叉树的构造、合并与二叉搜索树

文章目录二叉树的构造、合并与二叉搜索树1. 引入&#xff1a;为什么要学习这些&#xff1f;2. 二叉树的构造2.1 从中序与后序遍历构造二叉树2.2 从前序与中序遍历构造二叉树3. 二叉树的合并4. 二叉搜索树&#xff08;BST&#xff09;——从无序到有序4.1 从一个生活场景引入4.2…...

27.3k stars!Fish Speech:开源 TTS 的天花板,10 秒克隆任意声音!

Fish Speech&#xff1a;开源 TTS 的天花板&#xff0c;10 秒克隆任意声音 语音合成这件事&#xff0c;曾经是大厂的专属游乐场。现在&#xff0c;一个开源项目用 2700 万行代码和 1000 万小时音频数据&#xff0c;把这道门彻底踹开了。 一、它解决了什么问题&#xff1f; 长期…...

c++基础+类和对象

引用一旦被赋值&#xff0c;就不能再赋其他值&#xff1f;&#xff1f;如下图返回返回值的引用意思是返回返回值本身在主函数中调用func函数&#xff0c;该函数返回a的引用&#xff08;a的别名&#xff09;&#xff0c;出函数后a会被销毁&#xff0c;相当于返回野指针被引用的数…...

2026 SiteGround 官网人工在线客服聊天指南

由于Siteground 近年来为了降低人工压力&#xff0c;隐藏了直接的聊天入口。 不过即便没有登录账号&#xff0c;你依然可以通过“售前咨询&#xff08;Sales Chat&#xff09;”的方式找到人工客服。即使你是Siteground 老用户&#xff0c;你可能也并不知道本文提到的这些技巧。…...

高通 QCS8550 边缘智能实践:基于 Qwen2.5-7B 与 Agent+RAG 构建本地化知识助手

1. 高通QCS8550与边缘智能的黄金组合 第一次拿到高通QCS8550开发板时&#xff0c;我完全没想到这块巴掌大的板子能流畅运行70亿参数的大模型。作为高通面向边缘计算推出的旗舰级处理器&#xff0c;QCS8550采用4nm制程工艺&#xff0c;集成了Kryo CPU、Adreno GPU和Hexagon NPU三…...

StructBERT文本相似度模型在网络安全中的应用:恶意文本与钓鱼内容识别

StructBERT文本相似度模型在网络安全中的应用&#xff1a;恶意文本与钓鱼内容识别 最近和几个做安全的朋友聊天&#xff0c;他们都在抱怨一个事儿&#xff1a;现在的网络攻击越来越“聪明”了。钓鱼邮件写得跟真的一样&#xff0c;恶意脚本的注释伪装得人畜无害&#xff0c;社…...