Skip to content

Commit 0f54676

Browse files
authored
feat: 按钮组增加了一个props (#4032)
* feat(bttonFroup): 处理了按钮组,增加了一个 merge 功能,但是存在其他问题 * feat: add demo * feat(button): 添加版本信息
1 parent f454a59 commit 0f54676

File tree

10 files changed

+133
-2
lines changed

10 files changed

+133
-2
lines changed

examples/sites/demos/apis/button-group.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,21 @@ export default {
110110
mode: ['pc', 'mobile-first'],
111111
pcDemo: 'text-value-field',
112112
mfDemo: ''
113+
},
114+
// displayMode
115+
{
116+
name: 'display-mode',
117+
type: "'default' | 'merged'",
118+
defaultValue: "'default'",
119+
desc: {
120+
'zh-CN': '按钮组显示模式,可选值为"default"和"merged",默认为"default"。当设置为"merged"时,按钮组内的按钮将合并显示,形成一个整体的外观。',
121+
'en-US': 'Button group display mode, optional values are "default" and "merged", the default is "default". When set to "merged", the buttons in the button group will be merged to form an overall appearance.'
122+
},
123+
mode: ['pc','mobile-first'],
124+
pcDemo: 'display-mode',
125+
meta: {
126+
stable: '3.29.0'
127+
}
113128
}
114129
],
115130
events: [
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<div>
3+
<!-- 默认模式 -->
4+
<tiny-button-group :data="groupData" v-model="checkedVal" />
5+
<br>
6+
<br>
7+
8+
<!-- 圆角合并模式 -->
9+
<tiny-button-group :data="groupData" v-model="checkedVal" display-mode="merged" />
10+
</div>
11+
</template>
12+
13+
<script>
14+
import { TinyButtonGroup } from "@opentiny/vue";
15+
16+
export default {
17+
components: {
18+
TinyButtonGroup,
19+
},
20+
data() {
21+
return {
22+
checkedVal: "Button1",
23+
groupData: [
24+
{ text: "Button1", value: "Button1" },
25+
{ text: "Button2", value: "Button2" },
26+
{ text: "Button3", value: "Button3" },
27+
],
28+
};
29+
},
30+
};
31+
</script>

examples/sites/demos/mobile-first/app/button-group/webdoc/button-group.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,19 @@ export default {
5252
'en-US': '<p>bbutton click</p>'
5353
},
5454
codeFiles: ['enumeration.vue']
55+
},
56+
{
57+
demoId: 'display-mode',
58+
name: {
59+
'zh-CN': '按钮组显示模式',
60+
'en-US': 'button mode'
61+
},
62+
desc: {
63+
'zh-CN':
64+
'<p>通过 <code>display-mode</code> 属性设置按钮组显示模式,可选值有 <code>default</code>(默认)和 <code>merged</code>(选块合并)。</p>',
65+
'en-US': '<p>button mode</p>'
66+
},
67+
codeFiles: ['display-mode.vue']
5568
}
5669
]
5770
}

examples/sites/demos/pc/app/button-group/display-mode.spec.ts

Whitespace-only changes.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<template>
2+
<div>
3+
<!-- 默认模式 -->
4+
<tiny-button-group :data="groupData" v-model="checkedVal" />
5+
<br>
6+
<br>
7+
8+
<!-- 圆角合并模式 -->
9+
<tiny-button-group :data="groupData" v-model="checkedVal" display-mode="merged" />
10+
</div>
11+
</template>
12+
13+
<script>
14+
import { TinyButtonGroup } from "@opentiny/vue";
15+
16+
export default {
17+
components: {
18+
TinyButtonGroup,
19+
},
20+
data() {
21+
return {
22+
checkedVal: "Button1",
23+
groupData: [
24+
{ text: "Button1", value: "Button1" },
25+
{ text: "Button2", value: "Button2" },
26+
{ text: "Button3", value: "Button3" },
27+
],
28+
};
29+
},
30+
};
31+
</script>

examples/sites/demos/pc/app/button-group/webdoc/button-group.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@ export default {
149149
'en-US': '<p>The <code>change</code> event is triggered when the selected button is changed. </p>'
150150
},
151151
codeFiles: ['change-event.vue']
152+
},
153+
{
154+
demoId: 'display-mode',
155+
name: {
156+
'zh-CN': '按钮组显示模式',
157+
'en-US': 'Button Group Display Mode'
158+
},
159+
desc: {
160+
'zh-CN':
161+
'<p>通过 <code>display-mode</code> 属性设置按钮组显示模式,可选值有 <code>default</code>(默认)和 <code>merged</code>(选块合并)。</p>',
162+
'en-US':
163+
'<p>Set the display mode of the button group through the <code>display-mode</code> attribute. The optional values are: <code>default</code> (default) and <code>merged</code> (merged).</p>'
164+
},
165+
codeFiles: ['display-mode.vue']
152166
}
153167
],
154168
features: [

packages/renderless/types/button-group.type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { handleChange, handleClick, moreNodeClick, getItemClass } from '../
55

66
export type IButtonGroupProps = ExtractPropTypes<typeof buttonGroupProps>
77

8+
89
export interface IButtonGroupItemClass {
910
disabled?: boolean
1011
plain?: boolean

packages/theme/src/button-group/index.less

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,23 @@
200200
}
201201
}
202202
}
203+
.@{button-group-prefix-cls}--merged {
204+
// 第一个按钮:左圆角
205+
.@{group-item-prefix-cls} li:first-child > button {
206+
border-top-left-radius: var(--tv-ButtonGroup-border-radius);
207+
border-bottom-left-radius: var(--tv-ButtonGroup-border-radius);
208+
border-top-right-radius: 0;
209+
border-bottom-right-radius: 0;
210+
}
211+
// 最后一个按钮:右圆角
212+
.@{group-item-prefix-cls} li:last-child > button {
213+
border-top-left-radius: 0;
214+
border-bottom-left-radius: 0;
215+
border-top-right-radius: var(--tv-ButtonGroup-border-radius);
216+
border-bottom-right-radius: var(--tv-ButtonGroup-border-radius);
217+
}
218+
// 中间按钮:直角
219+
.@{group-item-prefix-cls} li > button {
220+
border-radius: 0;
221+
}
222+
}

packages/vue/src/button-group/src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ export const buttonGroupProps = {
4444
border: {
4545
type: Boolean,
4646
default: true
47+
},
48+
displayMode: {
49+
type: String as PropType<'default' | 'merged'>,
50+
default: 'default',
51+
validator: (val: string) => ['default', 'merged'].includes(val)
4752
}
4853
}
4954

packages/vue/src/button-group/src/pc.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<template>
1313
<div
1414
class="tiny-button-group"
15-
:class="[size ? 'tiny-button-group--' + size : '', border ? '' : 'tiny-button-group--borderless']"
15+
:class="[size ? 'tiny-button-group--' + size : '', border ? '' : 'tiny-button-group--borderless', displayMode === 'merged' ? 'tiny-button-group--merged' : '']"
1616
>
1717
<slot>
1818
<template v-if="data.length > 0">
@@ -134,7 +134,8 @@ export default defineComponent({
134134
'textField',
135135
'showMore',
136136
'showEdit',
137-
'border'
137+
'border',
138+
'displayMode'
138139
],
139140
components: {
140141
TinyPopover: Popover,

0 commit comments

Comments
 (0)