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;