shop-wx/doc/wot-design-uni/docs/component/collapse.md

300 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Collapse 折叠面板
将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容。
## 基本使用
`v-model` 为绑定值,可以为 array 类型(普通折叠)、 string 类型(手风琴)和 boolean 类型收起展开查看更多。CollapseItem 的 `name` 为必填, `title` 选填且可通过 `slot` 自定义。`name` 用于标识该折叠栏。
```typescript
const value = ref<string[]>(['item1'])
```
```html
<wd-collapse v-model="value">
<wd-collapse-item title="标签1" name="item1">这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item title="标签2" name="item2">这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item name="item3">
<template #title="{ expanded, disabled, isFirst }">
<view class="header">
<text style="color: red">通过 slot 自定义标题</text>
<text>{{ expanded ? '我展开了' : '我已收起' }}</text>
</view>
</template>
这是一条简单的示例文字。
</wd-collapse-item>
</wd-collapse>
```
```css
.header {
display: flex;
align-items: center;
justify-content: space-between;
}
```
## 手风琴
设置 `accordion` 属性。
```html
<wd-collapse v-model="value" accordion>
<wd-collapse-item title="标签1" name="item1">这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item title="标签2" name="item2">这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item title="标签3" name="item3">这是一条简单的示例文字。</wd-collapse-item>
</wd-collapse>
```
## 禁用
给 CollapseItem 设置 `disabled` 属性,禁用某个折叠栏。
```html
<wd-collapse v-model="value">
<wd-collapse-item title="标签1" name="item1">这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item title="标签2" name="item2" disabled>这是一条简单的示例文字。</wd-collapse-item>
<wd-collapse-item title="标签3" name="item3">这是一条简单的示例文字。</wd-collapse-item>
</wd-collapse>
```
## 异步更新
通过给`wd-collapse-item`组件传入 `beforeExpend` 函数可以在打开面板前进行校验和处理,返回 true 表示允许打开,返回 false 表示禁止打开。支持返回 Promise 进行例如调用接口获取面板数据的操作。
```html
<wd-collapse v-model="value">
<wd-collapse-item v-for="(item, index) in itemList" :before-expend="beforeExpend" :key="index" :title="item.title" :name="item.name">
{{ item.body }}
</wd-collapse-item>
</wd-collapse>
```
```ts
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref<string[]>(['item1'])
const itemList = ref<Record<string, any>[]>([
{
title: '标签1',
name: 'item1',
body: '如订单处于暂停状态,进入“我的订单”页面,找到要取消的订单,点击“取消订单”按钮;选择订单取消原因后,点击“下一步”提交申请即可。'
},
{
title: '标签1',
name: 'item2',
body: '一般情况下,买家只能向商户申请退款,商户确认可以退款后,可以通过接口或者商户平台向微信支付发起退款申请。'
},
{
title: '标签1',
name: 'item3',
body: '将收到的有质量问题的商品照片或者订单截图上传到微信公众账号(微信关注联华华商公众号),我们的工作人员会尽快帮您处理。'
},
{
title: '标签1',
name: 'item4',
body: '七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。'
},
{
title: '标签1',
name: 'item5',
body: 'Q1:优惠券使用详情?详情页面【我的】-【我的优惠】-【优惠券规则说明】。'
}
])
/**
* 折叠面板展开前回调方法
* @param e
*/
function beforeExpend(name) {
const index = itemList.value.findIndex((item) => {
return item.name === name
})
if (index > -1) {
itemList.value[index].body =
'Q1:七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。七天无理由退换货制度所有商品在不影响二次销售的情况下7天内以快递单签收为准均接受客户退换货。'
}
return new Promise((reslove, reject) => {
toast.loading('加载中')
setTimeout(() => {
toast.close()
reslove(true)
}, 500)
})
}
```
## 查看更多
Collapse 可以单独使用,通过设置 `viewmore` 属性,将其转化为查看更多的折叠类型,同时可以设置 `line-num` 修改收起时的显示行数。这时候的 `value` 为 boolean 类型。
```html
<wd-collapse viewmore v-model="value">
这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。
</wd-collapse>
```
## 查看更多-使用插槽
Collapse 查看更多的模式下,可以使用插槽定义自己想要的折叠处样式,使用 `use-more-slot` 设置插槽开启。并且可以使用外部样式类 `custom-more-slot-class` 为自定义插槽设置样式。
```scss
:deep(.more-slot) {
color: red;
}
```
```html
<wd-collapse viewmore v-model="value" @change="handleChange" use-more-slot custom-more-slot-class="more-slot">
具名插槽:这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。
<template #more>
<view>显示全部</view>
</template>
</wd-collapse>
```
## 嵌套使用
`collapse`可以嵌套使用,同时由于`collapse-item`的内容容器存在默认的`padding`,所以嵌套的`collapse`需要设置`custom-body-style`或者`custom-body-class`来覆盖默认样式。
**_以下为示例也可以自行调整样式。_**
:::tip 注意
`custom-body-style`和`custom-body-class`在`1.4.0`及以上版本支持。
:::
```html
<view class="collapse">
<wd-collapse v-model="collapseRoot">
<wd-collapse-item custom-body-style="padding:0 0 0 14px" v-for="item in 5" :key="item" :title="`标签${item}`" :name="`${item}`">
<wd-collapse v-model="collapseList[item - 1]">
<wd-collapse-item
v-for="(item, index) in itemList"
:custom-class="index === 0 ? 'no-border' : ''"
:key="index"
:title="item.title"
:name="item.name"
>
{{ item.body }}
</wd-collapse-item>
</wd-collapse>
</wd-collapse-item>
</wd-collapse>
</view>
```
```css
.collapse {
:deep() {
.no-border {
&::after {
display: none;
}
}
}
}
```
```ts
const collapseRoot = ref<string[]>(['0'])
const collapseList = ref<Array<string[]>>([['item1'], ['item2'], ['item3'], ['item4'], ['item5']])
```
## CollapseItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ----------------------------------------------------------- | -------- | ------ | ------ | -------- |
| name | 折叠栏的标识符 | string | - | - | - |
| title | 折叠栏的标题, 支持同名 slot 自定义内容 | string | - | '' | - |
| disabled | 禁用折叠栏 | boolean | - | false | - |
| before-expend | 打开前的回调函数,返回 false 可以阻止打开,支持返回 Promise | Function | - | - | - |
### `before-expend` 执行时会传递以下回调参数:
| 参数名 | 说明 | 类型 |
| ------ | ---------- | -------- |
| name | 唯一标识符 | `String` |
## Collapse Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ------------------------------------ | ------------------------ | ------ | ------ | -------- |
| value | 绑定值 | string / array / boolean | - | - | - |
| accordion | 手风琴 | boolean | - | false | - |
| viewmore | 查看更多的折叠面板 | boolean | - | false | - |
| useMoreSlot | 查看更多的自定义插槽使用标志 | boolean | - | false | - |
| line-num | 查看更多的折叠面板,收起时的显示行数 | number | - | 2 | - |
## Collapse Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------- | -------- |
| change | 绑定值变化时触发 | `{ value }` | - |
## Methods
| 方法名 | 说明 | 参数 | 最低版本 |
| --------- | -------------------------------------------------------------------------------- | ------------------------------------ | -------- |
| toggleAll | 切换所有面板展开状态,传 `true` 为全部展开,`false` 为全部收起,不传参为全部切换 | `options?: CollapseToggleAllOptions` | 0.2.6 |
### CollapseToggleAllOptions 参数说明
| 参数名 | 说明 | 类型 | 默认值 |
| ------------ | ----------------------------------- | ------- | ------ |
| expanded | 是否展开true 为展开false 为收起 | boolean | - |
| skipDisabled | 是否跳过禁用项 | boolean | false |
### toggleAll 方法示例
```html
<wd-collapse ref="collapse">...</wd-collapse>
```
```ts
import { ref } from 'vue'
import type { CollapseInstance } from '@/uni_modules/wot-design-uni/components/wd-collapse/types'
const collapseRef = ref<CollapseInstance>()
// 全部切换
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 | 查看更多,便于开发者自定义查看更多类型的展开收起样式 | - |
## CollapseItem 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------------- | ------------------------------ | ---------------- |
| custom-class | collapseItem 根节点样式 | - |
| custom-body-style | 自定义折叠面板内容容器的样式 | 1.4.0 |
| custom-body-class | 自定义折叠面板内容容器的样式类 | 1.4.0 |
## Collapse 外部样式类
| 类名 | 说明 | 最低版本 |
| ---------------------- | ---------------------------------- | -------- |
| custom-class | collapse 根节点样式 | - |
| custom-more-slot-class | 查看更多模式下的插槽外部自定义样式 | - |