Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: 新增Collapse组件 #535

Merged
merged 27 commits into from
Apr 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d78536d
feat(component): init collapse component
asbstty Mar 19, 2022
42b268a
feat(component): complete the basic function of the collapse component
asbstty Mar 24, 2022
69d3915
feat: improve collapse component
asbstty Mar 24, 2022
998eaf4
feat(component): complete the collapse component development
asbstty Mar 26, 2022
36519de
Merge branch 'develop' into feature/collapse
asbstty Mar 26, 2022
fc0f8f7
feat(component): add style files of the collapse component
asbstty Mar 26, 2022
2b5fcbc
chore: add submodule
asbstty Mar 27, 2022
9dfeb9d
docs: update collapse props description
asbstty Mar 28, 2022
108c7b3
refactor: change the panel slide logic
asbstty Mar 30, 2022
125a5d8
refactor: merge code from develop
asbstty Mar 30, 2022
867b8bf
refactor: optimize code format
asbstty Mar 30, 2022
c069410
refactor: change slide-down component from render to jsx style
asbstty Mar 30, 2022
ea03805
refactor: change the name of the demo panel
asbstty Apr 1, 2022
b4704cd
refactor: add expandOnRowClick demo
asbstty Apr 2, 2022
edc5f99
Merge branch 'develop' into feature/collapse
asbstty Apr 2, 2022
1406fb5
refactor: add submodule commit
asbstty Apr 2, 2022
d6b5599
refactor: optimize code based on the pull request suggestion
asbstty Apr 7, 2022
9c8a867
refactor: add submodule
asbstty Apr 7, 2022
a52b5ed
refactor: merge code from develop branch
asbstty Apr 7, 2022
bc05fbf
refactor: change import
asbstty Apr 7, 2022
c53c948
test: update test snapshot
asbstty Apr 7, 2022
2b32112
Merge branch 'develop' into feature/collapse
asbstty Apr 7, 2022
89cf6ec
refactor: import usePrefixClass from new hook
asbstty Apr 7, 2022
e4ea8e8
test: optimize collapse demos
asbstty Apr 8, 2022
c73acaa
refactor: merge code from develop branch
asbstty Apr 8, 2022
3bd1ae7
refactor: add submodule
asbstty Apr 8, 2022
f3c2530
chore: update snapshot
uyarn Apr 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions examples/collapse/collapse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
:: BASE_DOC ::

## API
### Collapse Props

名称 | 类型 | 默认值 | 说明 | 必传
-- | -- | -- | -- | --
borderless | Boolean | false | 是否为无边框模式 | N
defaultExpandAll | Boolean | false | 默认是否展开全部 | N
disabled | Boolean | - | 是否禁用面板展开/收起操作 | N
expandIcon | Boolean / Slot / Function | true | 展开图标。值为 undefined 或 false 则不显示展开图标;值为 true 显示默认图标;值类型为函数,则表示完全自定义展开图标。TS 类型:`boolean | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
expandIconPlacement | String | left | 展开图标的位置,左侧或右侧。可选项:left/right | N
expandMutex | Boolean | false | 每个面板互斥展开,每次只展开一个面板 | N
expandOnRowClick | Boolean | true | 是否允许点击整行标题展开面板 | N
value | Array | - | 展开的面板集合。支持语法糖 `v-model` 或 `v-model:value`。TS 类型:`CollapseValue` `type CollapseValue = Array<string | number>`。[详细类型定义](https://github.com/Tencent/tdesign-vue-next/tree/develop/src/collapse/type.ts) | N
defaultValue | Array | - | 展开的面板集合。非受控属性。TS 类型:`CollapseValue` `type CollapseValue = Array<string | number>`。[详细类型定义](https://github.com/Tencent/tdesign-vue-next/tree/develop/src/collapse/type.ts) | N
onChange | Function | | TS 类型:`(value: CollapseValue) => void`<br/>切换面板时触发,返回变化的值 | N

### Collapse Events

名称 | 参数 | 描述
-- | -- | --
change | `(value: CollapseValue)` | 切换面板时触发,返回变化的值

### CollapsePanel Props

名称 | 类型 | 默认值 | 说明 | 必传
-- | -- | -- | -- | --
content | String / Slot / Function | - | 折叠面板内容。TS 类型:`string | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
default | String / Slot / Function | - | 折叠面板内容,同 content。TS 类型:`string | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
destroyOnCollapse | Boolean | false | 当前面板处理折叠状态时,是否销毁面板内容 | N
disabled | Boolean | undefined | 禁止当前面板展开,优先级大于 Collapse 的同名属性 | N
expandIcon | Boolean / Slot / Function | true | 当前折叠面板展开图标,优先级大于 Collapse 的同名属性。TS 类型:`boolean | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
header | String / Slot / Function | - | 面板头内容。TS 类型:`string | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
headerRightContent | String / Slot / Function | - | 面板头的右侧区域,一般用于呈现面板操作。TS 类型:`string | TNode`。[通用类型定义](https://github.com/Tencent/tdesign-vue-next/blob/develop/src/common.ts) | N
value | String / Number | - | 当前面板唯一标识,如果值为空则取当前面下标兜底作为唯一标识 | N
63 changes: 63 additions & 0 deletions examples/collapse/demos/base.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<template>
<div class="tdesign-collapse">
<t-collapse :default-value="[1]" @change="handlePanelChange">
<t-collapse-panel header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel destroy-on-collapse header="设置默认展开项">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel header="自定义折叠面板内容">
<div class="tdesign-demo-block-column" style="width: 80%">
<t-tag-input v-model="tags1" clearable @paste="onPaste" @enter="onTagInputEnter" />

<t-tag-input :value="tags2" label="Controlled: " clearable @change="onChange" />

<t-tag-input :default-value="tags3" label="UnControlled: " clearable />
</div>
</t-collapse-panel>
<t-collapse-panel header="嵌套折叠面板">
<t-collapse default-expand-all>
<t-collapse-panel header="子面板1"> 这是子面板1 </t-collapse-panel>
<t-collapse-panel header="子面板2"> 这是子面板2 </t-collapse-panel>
<t-collapse-panel header="子面板3"> 这是子面板3 </t-collapse-panel>
<t-collapse-panel header="子面板4"> 这是子面板4 </t-collapse-panel>
</t-collapse>
</t-collapse-panel>
</t-collapse>
<div style="margin-top: 10px">当前展开项:{{ currentItem }}</div>
</div>
</template>
<script setup>
import { ref } from 'vue';

const currentItem = ref([1]);
const tags1 = ref(['Vue', 'React']);
const tags2 = ref(['Vue', 'React']);
const tags3 = ref(['Vue', 'React']);
const handlePanelChange = (val) => {
console.log('val>>>>>>', val);
currentItem.value = val;
};

const onTagInputEnter = (val, context) => {
console.log(val, context);
};
const onChange = (val, context) => {
console.log(val, context);
tags2.value = val;
};
const onPaste = (context) => {
console.log(context);
};
</script>
<style lang="less">
.accordion-demo {
background-color: #f9f9f9;
}
.button-area {
margin-top: 20px;
display: flex;
align-items: center;
}
</style>
41 changes: 41 additions & 0 deletions examples/collapse/demos/icon.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<template>
<div class="tdesign-collapse">
<t-collapse :expand-icon="showArrow" :expand-icon-placement="direction" :expand-on-row-click="!onlyIcon">
<t-collapse-panel value="0" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="1">
<template #header>这是一个折叠标题</template>
<template #default
>这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。</template
>
</t-collapse-panel>
<t-collapse-panel value="2">
<template #header>这是一个折叠标题</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="3" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
</t-collapse>
<div class="button-area">
<t-checkbox v-model="showArrow">显示箭头</t-checkbox>
<t-radio-group v-model="direction">
<t-radio value="left">左边</t-radio>
<t-radio value="right">右边</t-radio>
</t-radio-group>
</div>
<div style="margin-top: 10px">
<t-checkbox v-model="onlyIcon">仅图标响应点击</t-checkbox>
</div>
</div>
</template>

<script setup>
import { ref } from 'vue';

const showArrow = ref(true);
const direction = ref('left');
const disable = ref(false);
const onlyIcon = ref(false);
</script>
32 changes: 32 additions & 0 deletions examples/collapse/demos/mutex.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<template>
<div class="tdesign-collapse">
<t-collapse v-model="currentItem" expand-mutex @Change="handlePanelChange">
<t-collapse-panel value="0" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="1">
<template #header>这是一个折叠标题</template>
<template #default
>这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。</template
>
</t-collapse-panel>
<t-collapse-panel value="2">
<template #header>这是一个折叠标题</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="3" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
</t-collapse>
<div style="margin-top: 10px">当前展开项:{{ currentItem }}</div>
</div>
</template>

<script setup>
import { ref } from 'vue';

const currentItem = ref([]);
const handlePanelChange = (val) => {
console.log(val);
};
</script>
36 changes: 36 additions & 0 deletions examples/collapse/demos/other.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<template>
<div class="tdesign-collapse">
<t-collapse :disabled="disabled" :borderless="borderless" @Change="handlePanelChange">
<t-collapse-panel value="0" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="1">
<template #header>这是一个折叠标题</template>
<template #default
>这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。</template
>
</t-collapse-panel>
<t-collapse-panel value="2">
<template #header>这是一个折叠标题</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="3" header="这是一个折叠标题">
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
</t-collapse>
<div class="button-area">
<t-checkbox v-model="disabled">全部禁用</t-checkbox>
<t-checkbox v-model="borderless">无边框模式</t-checkbox>
</div>
</div>
</template>

<script setup>
import { ref } from 'vue';

const disabled = ref(false);
const borderless = ref(false);
const handlePanelChange = (val) => {
console.log('panel>>>>>>', val);
};
</script>
43 changes: 43 additions & 0 deletions examples/collapse/demos/rightSlot.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<template>
<div class="tdesign-collapse">
<t-collapse>
<t-collapse-panel value="0" header="这是一个折叠标题可以设置右侧操作区域" :disabled="disable0">
<template #headerRightContent>
<t-checkbox v-model="disable0">禁用</t-checkbox>
<t-button size="small">操作</t-button>
</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="1" header="这是一个折叠标题可以设置右侧操作区域" :disabled="disable1">
<template #headerRightContent>
<t-checkbox v-model="disable1">禁用</t-checkbox>
<t-button size="small">操作</t-button>
</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="2" header="这是一个折叠标题可以设置右侧操作区域" :disabled="disable2">
<template #headerRightContent>
<t-checkbox v-model="disable2">禁用</t-checkbox>
<t-button size="small">操作</t-button>
</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
<t-collapse-panel value="3" header="这是一个折叠标题可以设置右侧操作区域" :disabled="disable3">
<template #headerRightContent>
<t-checkbox v-model="disable3">禁用</t-checkbox>
<t-button size="small">操作</t-button>
</template>
这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。
</t-collapse-panel>
</t-collapse>
</div>
</template>

<script setup>
import { ref } from 'vue';

const disable0 = ref(false);
const disable1 = ref(true);
const disable2 = ref(false);
const disable3 = ref(true);
</script>
9 changes: 8 additions & 1 deletion site/site.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,13 @@ export default {
path: '/vue-next/components/calendar',
component: () => import('@/examples/calendar/calendar.md'),
},
{
title: 'Collapse 折叠面板',
name: 'collapse',
docType: 'data',
path: '/vue-next/components/collapse',
component: () => import('@/examples/collapse/collapse.md')
},
{
title: 'Comment 评论',
name: 'comment',
Expand Down Expand Up @@ -400,7 +407,7 @@ export default {
docType: 'data',
path: '/vue-next/components/tree',
component: () => import('@/examples/tree/tree.md'),
},
}
],
},
{
Expand Down
43 changes: 43 additions & 0 deletions src/collapse/collapse-panel-props.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/* eslint-disable */

/**
* 该文件为脚本自动生成文件,请勿随意修改。如需修改请联系 PMC
* */

import { TdCollapsePanelProps } from '../collapse/type';
import { PropType } from 'vue';

export default {
/** 折叠面板内容 */
content: {
type: [String, Function] as PropType<TdCollapsePanelProps['content']>,
},
/** 折叠面板内容,同 content */
default: {
type: [String, Function] as PropType<TdCollapsePanelProps['default']>,
},
/** 当前面板处理折叠状态时,是否销毁面板内容 */
destroyOnCollapse: Boolean,
/** 禁止当前面板展开,优先级大于 Collapse 的同名属性 */
disabled: {
type: Boolean,
default: undefined,
},
/** 当前折叠面板展开图标,优先级大于 Collapse 的同名属性 */
expandIcon: {
type: [Boolean, Function] as PropType<TdCollapsePanelProps['expandIcon']>,
default: true,
},
/** 面板头内容 */
header: {
type: [String, Function] as PropType<TdCollapsePanelProps['header']>,
},
/** 面板头的右侧区域,一般用于呈现面板操作 */
headerRightContent: {
type: [String, Function] as PropType<TdCollapsePanelProps['headerRightContent']>,
},
/** 当前面板唯一标识,如果值为空则取当前面下标兜底作为唯一标识 */
value: {
type: [String, Number] as PropType<TdCollapsePanelProps['value']>,
},
};
Loading