From 53e7aa9670892fff70999c30a69d4d83c63923e7 Mon Sep 17 00:00:00 2001 From: 王彪总 Date: Sat, 10 Oct 2026 16:06:57 +0800 Subject: [PATCH] 业务线 小程序不用写死,从后端接口获取 --- components/grouped-picker/grouped-picker.vue | 54 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/components/grouped-picker/grouped-picker.vue b/components/grouped-picker/grouped-picker.vue index 0812cff..8f942a1 100644 --- a/components/grouped-picker/grouped-picker.vue +++ b/components/grouped-picker/grouped-picker.vue @@ -4,8 +4,10 @@ path 只有 1 层 → 只有侧栏(原型「植物」屏:乔木/灌木/竹类… 纯侧栏,没有 tab); path 有 2 层 → tab + 侧栏 + 平铺列表(原型「工具」屏:手工工具/电动工具/机械工具 → 剪切工具… → 太平剪); 配到 g3 → 再多一层吸顶分组标题(物料 类型→类别→明细→物料 折出来的形态)。 - 选择控件按原型:多选+数量时右侧是步进器(未选一个「+」,已选「− n +」,减到 1 再减即取消), - 不放勾选框;按钮是小白底圆角方框 + 浅灰描边(加减同款,不是圆形、不是灰底)。 + 选择控件:**多选行左侧一律保留勾选框**(勾选框只管选中/取消), + 带数量的字段右侧再加步进器管件数(未选一个「+」,已选「− n +」,减到 1 再减即取消), + 按钮是小圆角方框 + 浅灰描边 + 白底,「+」「−」同款。 + ⚠️ 原型弹层里没有勾选框(只有步进器),勾选框是按要求保留的、属于刻意覆盖原型。 行的勾选态由本组件的 draft 数据派生,不用 u-checkbox: u-checkbox 的勾选态是组件内部状态(u-checkbox.vue:199-221 只在 init 时从父组派生), 而 u-checkbox-group 是把每个子实例的内部 isChecked 回读成数组(u-checkbox-group.vue:95-112), @@ -42,14 +44,20 @@ {{ group.label }} + + + ✓ + {{ row.label }} {{ breadcrumb(row) }} - - + @@ -64,12 +72,8 @@ - - - ✓ - - + @@ -271,6 +275,20 @@ const deselect = (v) => { if (i > -1) draftSelected.value.splice(i, 1) delete draftQty[v] } +// 勾选框:只切选中态。取消会把该项的数量一起删掉,重新勾上从 1 起 +const onToggle = (row) => { + const v = String(row.value) + if (isSelected(row)) { + deselect(v) + return + } + if (isLocked(row)) { + uni.showToast({ title: `最多选择 ${props.maxCount} 项`, icon: 'none' }) + return + } + draftSelected.value.push(v) + if (props.needQuantity && !draftQty[v]) draftQty[v] = 1 +} // 「+」:未选先选中并置 1,已选则 +1 const onPlus = (row) => { if (isLocked(row)) { @@ -316,18 +334,10 @@ const switchSide = (idx) => { const onRowClick = (row) => { const v = String(row.value) if (props.multiple) { - // 整行点击也能选(不必非要点中那个「+」),选中就默认数量 1。 - // 带数量的字段点整行「取消」要禁用:取消统一走「−」,否则误点一下就把加好的数量清了 - if (isSelected(row)) { - if (!props.needQuantity) deselect(v) - return - } - if (isLocked(row)) { - uni.showToast({ title: `最多选择 ${props.maxCount} 项`, icon: 'none' }) - return - } - draftSelected.value.push(v) - if (props.needQuantity && !draftQty[v]) draftQty[v] = 1 + // 整行点击也能选(不必非要点中勾选框),选中就默认数量 1。 + // 带数量的字段点整行「取消」要禁用:取消统一走勾选框或「−」,否则误点一下就把加好的数量清了 + if (isSelected(row) && props.needQuantity) return + onToggle(row) return } // 单选:点行即确认并关闭,与底部 actionSheet 的即时选中语义一致 @@ -490,6 +500,8 @@ watch( } } +/* 多选勾选框(自绘,不用 u-checkbox —— 见文件头注释的幽灵勾选坑)。 + 原型弹层里没有勾选框,是按要求保留的,不要照着原型删掉 */ .gp-check { flex-shrink: 0; width: 36rpx; -- libgit2 0.21.4