From 4ad83c0f38ec94f0a00595bf1e2147ac2afca875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=A6=82=E6=91=B8=E9=B1=BC=E5=8E=BB?= <1780903673@qq.com> Date: Sat, 23 Nov 2024 00:00:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=20Coll?= =?UTF-8?q?apse=20=E4=BD=BF=E7=94=A8=20toggleAall=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E4=BC=9A=E8=A7=A6=E5=8F=91=20before-expand?= =?UTF-8?q?=20=E9=92=A9=E5=AD=90=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/component/collapse.md | 95 ++++++++++++++---- src/pages/collapse/Index.vue | 42 ++++---- .../components/common/abstracts/variable.scss | 2 +- .../components/wd-collapse-item/index.scss | 5 + .../components/wd-collapse-item/types.ts | 11 ++- .../wd-collapse-item/wd-collapse-item.vue | 97 +++++++++++-------- .../components/wd-collapse/types.ts | 2 +- .../components/wd-collapse/wd-collapse.vue | 31 +++--- 8 files changed, 183 insertions(+), 102 deletions(-) diff --git a/docs/component/collapse.md b/docs/component/collapse.md index 2a74575d7..7e7d683dd 100644 --- a/docs/component/collapse.md +++ b/docs/component/collapse.md @@ -54,20 +54,13 @@ const value = ref(['item1']) ```html - + {{ item.body }} ``` ```ts - import { useToast } from '@/uni_modules/wot-design-uni' const toast = useToast() const value = ref(['item1']) @@ -152,14 +145,37 @@ Collapse 查看更多的模式下,可以使用插槽定义自己想要的折 ``` +## 嵌套使用 + +`collapse`可以嵌套使用,同时由于`collapse-item`的内容容器存在默认的`padding`,所以嵌套的`collapse`需要设置`custom-body-style`或者`custom-body-class`来覆盖默认样式。 + +:::tip 注意 +`custom-body-style`和`custom-body-class`在`$LOWEST_VERSION$`及以上版本支持。 +::: + +```html + + + + {{ item.body }} + + + +``` + +```ts +const collapseRoot = ref(['0']) +const collapseList = ref>([['item1'], ['item2'], ['item3'], ['item4'], ['item5']]) +``` + ## CollapseItem Attributes | 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 | | ------------- | ----------------------------------------------------------- | -------- | ------ | ------ | -------- | | name | 折叠栏的标识符 | string | - | - | - | -| title | 折叠栏的标题, 支持同名 slot 自定义内容 | string | - | '' | - | +| title | 折叠栏的标题, 支持同名 slot 自定义内容 | string | - | '' | - | | disabled | 禁用折叠栏 | boolean | - | false | - | -| before-expend | 打开前的回调函数,返回 false 可以阻止打开,支持返回 Promise | Function | - | false | - | +| before-expend | 打开前的回调函数,返回 false 可以阻止打开,支持返回 Promise | Function | - | - | - | ### `before-expend` 执行时会传递以下回调参数: @@ -185,22 +201,63 @@ Collapse 查看更多的模式下,可以使用插槽定义自己想要的折 ## Methods -| 方法名 | 说明 | 参数 | 最低版本 | +| 方法名 | 说明 | 参数 | 最低版本 | +| --------- | -------------------------------------------------------------------------------- | ------------------------------------ | -------- | +| toggleAll | 切换所有面板展开状态,传 `true` 为全部展开,`false` 为全部收起,不传参为全部切换 | `options?: CollapseToggleAllOptions` | 0.2.6 | + +### CollapseToggleAllOptions 参数说明 + +| 参数名 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | -| toggleAll | 切换所有面板展开状态,传 `true` 为全部展开,`false` 为全部收起,不传参为全部切换 | _options?: boolean \| object_ | 0.2.6 | +| expanded | 是否展开,true 为展开,false 为收起 | boolean | - | +| skipDisabled | 是否跳过禁用项 | boolean | false | + +### toggleAll 方法示例 + +```html + + ... + +``` + +```ts +import { ref } from 'vue' +import type { CollapseInstance } from '@/uni_modules/wot-design-uni/components/wd-collapse/types' + +const collapseRef = ref() + +// 全部切换 +collapseRef.value?.toggleAll() +// 全部展开 +collapseRef.value?.toggleAll(true) +// 全部收起 +collapseRef.value?.toggleAll(false) + +// 全部全部切换,并跳过禁用项 +collapseRef.value?.toggleAll({ + skipDisabled: true +}) +// 全部选中,并跳过禁用项 +collapseRef.value?.toggleAll({ + expanded: true, + skipDisabled: true +}) +``` ## Collapse Slot -| name | 说明 | 最低版本 | -| ---- | ---------------------------------------------------- | -------- | -| title |标题,便于开发者自定义标题(非 viewmore 使用) | 1.2.27 | -| more | 查看更多,便于开发者自定义查看更多类型的展开收起样式 | - | +| name | 说明 | 最低版本 | +| ----- | ---------------------------------------------------- | -------- | +| title | 标题,便于开发者自定义标题(非 viewmore 使用) | 1.2.27 | +| more | 查看更多,便于开发者自定义查看更多类型的展开收起样式 | - | ## CollapseItem 外部样式类 -| 类名 | 说明 | 最低版本 | -| ------------ | ----------------------- | -------- | -| custom-class | collapseItem 根节点样式 | - | +| 类名 | 说明 | 最低版本 | +| ----------------- | ------------------------------ | ---------------- | +| custom-class | collapseItem 根节点样式 | - | +| custom-body-style | 自定义折叠面板内容容器的样式 | $LOWEST_VERSION$ | +| custom-body-class | 自定义折叠面板内容容器的样式类 | $LOWEST_VERSION$ | **注意:组件内插槽样式不生效,因此使用插槽时需注意添加外部样式类** diff --git a/src/pages/collapse/Index.vue b/src/pages/collapse/Index.vue index 4390b25b4..647c36124 100644 --- a/src/pages/collapse/Index.vue +++ b/src/pages/collapse/Index.vue @@ -2,12 +2,19 @@ - - toggleAll + + 全部切换 + 全部展开 + 全部收起 + 全部切换跳过禁用 + + 全部选中跳过禁用 + - + {{ item.body }} @@ -105,7 +112,8 @@ const itemList = ref[]>([ { title: '标签2', name: 'item2', - body: '一般情况下,买家只能向商户申请退款,商户确认可以退款后,可以通过接口或者商户平台向微信支付发起退款申请。' + body: '一般情况下,买家只能向商户申请退款,商户确认可以退款后,可以通过接口或者商户平台向微信支付发起退款申请。', + disabled: true }, { title: '标签3', @@ -161,27 +169,6 @@ function handleChange7({ value }: any) { console.log(value) } -/** - -function handleChange1({ value }: any) { - console.log(value) -} -function handleChange2({ value }: any) { - console.log(value) -} -function handleChange3({ value }: any) { - console.log(value) -} -function handleChange4({ value }: any) { - console.log(value) -} -function handleChange5({ value }: any) { - console.log(value) -} -function handleChange6({ value }: any) { - console.log(value) -} - /** * 折叠面板展开前回调方法 * @param e @@ -208,4 +195,9 @@ function beforeExpend(name: string) { :deep(.more-slot) { color: red; } + +:deep(.custom-button) { + margin-right: 16px; + margin-bottom: 16px; +} diff --git a/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss b/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss index 1bff0b921..4db43c39f 100644 --- a/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss +++ b/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss @@ -270,7 +270,7 @@ $-checkbox-button-disabled-border: var(--wot-checkbox-button-disabled-border, rg /* collapse */ $-collapse-side-padding: var(--wot-collapse-side-padding, $-size-side-padding) !default; // 左右间距 -$-collapse-body-padding: var(--wot-collapse-body-padding, 14px 25px) !default; // body padding +$-collapse-body-padding: var(--wot-collapse-body-padding, 14px $-size-side-padding) !default; // body padding $-collapse-header-padding: var(--wot-collapse-header-padding, 13px $-size-side-padding) !default; // 头部padding $-collapse-title-color: var(--wot-collapse-title-color, rgba(0, 0, 0, 0.85)) !default; // 标题颜色 $-collapse-title-fs: var(--wot-collapse-title-fs, 16px) !default; // 标题字号 diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss index 038c72e5b..49fe86787 100644 --- a/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss @@ -39,6 +39,11 @@ padding: $-collapse-header-padding; overflow: hidden; user-select: none; + + @include when(expanded) { + @include halfPixelBorder('bottom'); + } + } @include e(title) { diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts index e2056b9c7..07b28f6ec 100644 --- a/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts @@ -1,10 +1,18 @@ import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' import { baseProps, makeBooleanProp, makeRequiredProp, makeStringProp } from '../common/props' -export type CollapseItemBeforeExpand = (name: string) => void +export type CollapseItemBeforeExpand = (name: string) => boolean | Promise export const collapseItemProps = { ...baseProps, + /** + * 自定义折叠栏内容容器样式类名 + */ + customBodyClass: makeStringProp(''), + /** + * 自定义折叠栏内容容器样式 + */ + customBodyStyle: makeStringProp(''), /** * 折叠栏的标题, 可通过 slot 传递自定义内容 */ @@ -33,7 +41,6 @@ export type CollapseItemExpose = { getExpanded: () => boolean /** * 更新展开状态 - * @returns Promise */ updateExpand: () => Promise } diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue b/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue index 47d8bb8a2..2dd0e3731 100644 --- a/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue @@ -1,13 +1,16 @@