vdesign-ui 0.1.24-beta → 0.2.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/activityviews/index.vue +1 -1
- package/dist/components/checkbox/checkbox-group/index.vue +2 -1
- package/dist/components/checkbox/index.vue +19 -20
- package/dist/components/dialog/index.vue +15 -11
- package/dist/components/footer/index.vue +5 -1
- package/dist/components/footnav/footnav-item/index.vue +10 -37
- package/dist/components/footnav/index.vue +13 -27
- package/dist/components/headnav/index.vue +52 -35
- package/dist/components/icon/font/iconfont.css +16 -16
- package/dist/components/icon/font/iconfont.js +1 -1
- package/dist/components/icon/index.vue +26 -18
- package/dist/components/input/index.vue +84 -109
- package/dist/components/input/search/index.vue +18 -22
- package/dist/components/input/stepper/index.vue +32 -26
- package/dist/components/input/style.less +20 -32
- package/dist/components/list/index.vue +57 -69
- package/dist/components/list/style.less +20 -92
- package/dist/components/loading/index.vue +17 -8
- package/dist/components/pagebreak/index.vue +12 -11
- package/dist/components/radio/index.vue +164 -135
- package/dist/components/radio/radio-group/index.vue +40 -52
- package/dist/components/selector/style.less +4 -0
- package/dist/components/step-item/index.vue +2 -2
- package/dist/components/tabs/index.vue +55 -32
- package/dist/components/tabs/tab/index.vue +13 -16
- package/dist/components/tag/index.vue +18 -4
- package/dist/components/tag/style.less +2 -2
- package/dist/components/title/index.vue +11 -8
- package/dist/components/title/style.less +6 -0
- package/dist/vdesign-ui.common.js +954 -939
- package/dist/vdesign-ui.css +1 -1
- package/dist/vdesign-ui.umd.js +954 -939
- package/dist/vdesign-ui.umd.min.js +3 -3
- package/package.json +1 -1
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
<div class="vd-tabs">
|
|
3
3
|
<div class="vd-tabs__wrap" :class="menuClasses" ref="tabsWrap">
|
|
4
4
|
<div :class="[barType,scrollspy]" ref="tabsContainer">
|
|
5
|
-
<div v-for="(item, index) in navList" :key="index" :class="tabClasses(item)" @click="handleChange(index)">
|
|
6
|
-
<span class="vd-tabs-text-cell" :class="ellipsisClasses">
|
|
5
|
+
<div v-for="(item, index) in navList" :key="index" :class="[tabClasses(item), lineClasses]" @click="handleChange(index)">
|
|
6
|
+
<span class="vd-tabs-text-cell" :class="ellipsisClasses">
|
|
7
|
+
{{ item.title }}
|
|
7
8
|
<vd-icon class="vd-tabs-arrow" v-if="item.arrow" name="icon_btn_moredown"></vd-icon>
|
|
8
9
|
</span>
|
|
9
10
|
</div>
|
|
10
11
|
</div>
|
|
11
12
|
<div class="vd-tabs-menu--right" v-if="menu">
|
|
12
|
-
<vd-icon :name="
|
|
13
|
+
<vd-icon :name="menuIconComputed" class="vd-tabs-menu-btn" @click="emitMenuClick"></vd-icon>
|
|
13
14
|
</div>
|
|
14
15
|
</div>
|
|
15
16
|
<div class="vd-tabs__content">
|
|
@@ -28,7 +29,11 @@ export default {
|
|
|
28
29
|
type: String,
|
|
29
30
|
default: "primary",
|
|
30
31
|
},
|
|
31
|
-
menu
|
|
32
|
+
// 将 menu 作为一个字段,同时控制显示和图标名称
|
|
33
|
+
menu: {
|
|
34
|
+
type: [Boolean, String],
|
|
35
|
+
default: false,
|
|
36
|
+
},
|
|
32
37
|
ellipsis: {
|
|
33
38
|
type: Boolean,
|
|
34
39
|
default: true,
|
|
@@ -36,31 +41,40 @@ export default {
|
|
|
36
41
|
actBorder: Boolean,
|
|
37
42
|
backgroundColor: Boolean,
|
|
38
43
|
divider: Boolean,
|
|
39
|
-
menuIcon: {
|
|
40
|
-
type: String,
|
|
41
|
-
default: 'icon_tab_morelist',
|
|
42
|
-
},
|
|
43
44
|
},
|
|
44
45
|
data() {
|
|
45
46
|
return {
|
|
46
|
-
currentValue: this.value,
|
|
47
|
-
navList: [],
|
|
47
|
+
currentValue: this.value, // 当前选中的标签名
|
|
48
|
+
navList: [], // 标签导航列表
|
|
49
|
+
tabs: [], // 已注册的标签
|
|
48
50
|
};
|
|
49
51
|
},
|
|
50
52
|
watch: {
|
|
53
|
+
// 监听 value 变化,更新 currentValue
|
|
51
54
|
value(val) {
|
|
52
55
|
this.currentValue = val;
|
|
53
56
|
},
|
|
54
57
|
},
|
|
55
58
|
computed: {
|
|
59
|
+
// 计算菜单按钮的图标,根据 menu 属性的类型决定图标
|
|
60
|
+
menuIconComputed() {
|
|
61
|
+
if (typeof this.menu === 'string') {
|
|
62
|
+
return this.menu;
|
|
63
|
+
} else {
|
|
64
|
+
return 'icon_tab_morelist'; // 默认的菜单图标名称
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
// 计算滚动监视的类名
|
|
56
68
|
scrollspy() {
|
|
57
69
|
return `${prefixCls}--complete`
|
|
58
70
|
},
|
|
71
|
+
// 计算标签文字是否需要省略号的类名
|
|
59
72
|
ellipsisClasses() {
|
|
60
73
|
return {
|
|
61
74
|
[`${prefixCls}-text--ellipsis`]: this.ellipsis,
|
|
62
75
|
};
|
|
63
76
|
},
|
|
77
|
+
// 计算标签包裹器的类名,根据 menu、backgroundColor 和 divider 属性来确定
|
|
64
78
|
menuClasses() {
|
|
65
79
|
return {
|
|
66
80
|
[`${prefixCls}-menu`]: this.menu,
|
|
@@ -68,11 +82,13 @@ export default {
|
|
|
68
82
|
"vd-hairline--bottom": this.divider,
|
|
69
83
|
};
|
|
70
84
|
},
|
|
85
|
+
// 计算标签下方线条的类名
|
|
71
86
|
lineClasses() {
|
|
72
87
|
return {
|
|
73
88
|
[`${prefixCls}__line`]: !this.actBorder,
|
|
74
89
|
};
|
|
75
90
|
},
|
|
91
|
+
// 根据 tabsType 属性计算标签类型的类名
|
|
76
92
|
barType() {
|
|
77
93
|
return {
|
|
78
94
|
[`${prefixCls}-${this.tabsType}-bar`]: this.tabsType,
|
|
@@ -80,45 +96,54 @@ export default {
|
|
|
80
96
|
},
|
|
81
97
|
},
|
|
82
98
|
methods: {
|
|
99
|
+
// 当菜单按钮被点击时触发事件
|
|
83
100
|
emitMenuClick() {
|
|
84
101
|
this.$emit('menu-click');
|
|
85
102
|
},
|
|
103
|
+
// 计算每个标签项的类名
|
|
86
104
|
tabClasses(item) {
|
|
87
105
|
return {
|
|
88
106
|
[`${prefixCls}-${this.tabsType}`]: true,
|
|
89
107
|
[`${prefixCls}-${this.tabsType}-active`]: item.name === this.currentValue,
|
|
90
108
|
};
|
|
91
109
|
},
|
|
92
|
-
|
|
93
|
-
|
|
110
|
+
// 注册新的标签到 tabs 数组中
|
|
111
|
+
registerTab(tab) {
|
|
112
|
+
if (!this.tabs.includes(tab)) {
|
|
113
|
+
this.tabs.push(tab);
|
|
114
|
+
this.updateNav();
|
|
115
|
+
}
|
|
94
116
|
},
|
|
117
|
+
// 从 tabs 数组中注销一个标签
|
|
118
|
+
unregisterTab(tab) {
|
|
119
|
+
const index = this.tabs.indexOf(tab);
|
|
120
|
+
if (index !== -1) {
|
|
121
|
+
this.tabs.splice(index, 1);
|
|
122
|
+
this.updateNav();
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
// 根据已注册的标签更新导航列表
|
|
95
126
|
updateNav() {
|
|
96
|
-
this.navList = this.
|
|
97
|
-
title:
|
|
98
|
-
name:
|
|
99
|
-
arrow:
|
|
127
|
+
this.navList = this.tabs.map((tab, index) => ({
|
|
128
|
+
title: tab.title,
|
|
129
|
+
name: tab.name != null ? tab.name : index,
|
|
130
|
+
arrow: tab.arrow,
|
|
100
131
|
}));
|
|
101
|
-
|
|
132
|
+
// 如果当前没有选中的标签且导航列表不为空,则将第一个标签设为当前值
|
|
133
|
+
if (!this.currentValue && this.navList.length) {
|
|
102
134
|
this.currentValue = this.navList[0].name;
|
|
103
135
|
}
|
|
104
|
-
this.updateStatus();
|
|
105
|
-
},
|
|
106
|
-
updateStatus() {
|
|
107
|
-
this.getTabs().forEach((tab) => {
|
|
108
|
-
tab.show = tab.computedName === this.currentValue;
|
|
109
|
-
});
|
|
110
136
|
},
|
|
111
137
|
handleChange(index) {
|
|
112
138
|
const nav = this.navList[index];
|
|
113
139
|
const name = nav.name;
|
|
114
140
|
if (this.currentValue !== name) {
|
|
115
141
|
this.currentValue = name;
|
|
116
|
-
this.$emit(
|
|
117
|
-
this.$emit(
|
|
118
|
-
this.
|
|
119
|
-
this.adjustTabPosition(index);
|
|
142
|
+
this.$emit("input", name); // 触发 input 事件,更新父组件中的 v-model 绑定值
|
|
143
|
+
this.$emit("change", { index, title: nav.title, name }); // 触发 change 事件,传递标签的详细信息
|
|
144
|
+
this.adjustTabPosition(index); // 调整选中标签的位置
|
|
120
145
|
}
|
|
121
|
-
this.$emit("click", { index, title: nav.title, name });
|
|
146
|
+
this.$emit("click", { index, title: nav.title, name }); // 触发 click 事件,传递标签的详细信息
|
|
122
147
|
},
|
|
123
148
|
adjustTabPosition(index) {
|
|
124
149
|
const container = this.$refs.tabsContainer;
|
|
@@ -133,13 +158,11 @@ export default {
|
|
|
133
158
|
},
|
|
134
159
|
},
|
|
135
160
|
mounted() {
|
|
136
|
-
|
|
161
|
+
// 组件挂载后更新导航列表
|
|
162
|
+
// this.updateNav();
|
|
137
163
|
},
|
|
138
164
|
};
|
|
139
165
|
</script>
|
|
140
|
-
|
|
141
|
-
<style lang="less"></style>
|
|
142
|
-
|
|
143
166
|
<style lang="less">
|
|
144
167
|
@import "./style.less";
|
|
145
168
|
</style>
|
|
@@ -20,35 +20,32 @@ export default {
|
|
|
20
20
|
},
|
|
21
21
|
data() {
|
|
22
22
|
return {
|
|
23
|
-
show: false,
|
|
24
23
|
};
|
|
25
24
|
},
|
|
26
25
|
watch: {
|
|
27
|
-
|
|
28
|
-
this.updateNav();
|
|
29
|
-
},
|
|
30
|
-
name() {
|
|
31
|
-
this.updateNav();
|
|
32
|
-
},
|
|
26
|
+
|
|
33
27
|
},
|
|
34
28
|
computed: {
|
|
29
|
+
isActive() {
|
|
30
|
+
return this.computedName === this.$parent.currentValue;
|
|
31
|
+
},
|
|
35
32
|
tabClasses() {
|
|
36
33
|
return {
|
|
37
34
|
'vd-tab': true,
|
|
38
|
-
'vd-tab-active': this.
|
|
35
|
+
'vd-tab-active': this.isActive,
|
|
39
36
|
};
|
|
40
37
|
},
|
|
41
38
|
computedName() {
|
|
42
|
-
return this.name
|
|
43
|
-
|
|
39
|
+
return this.name != null
|
|
40
|
+
? this.name
|
|
41
|
+
: this.$parent.tabs.indexOf(this);
|
|
42
|
+
},
|
|
44
43
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
this.$parent.updateNav();
|
|
48
|
-
},
|
|
44
|
+
created() {
|
|
45
|
+
this.$parent.registerTab(this);
|
|
49
46
|
},
|
|
50
|
-
|
|
51
|
-
this.
|
|
47
|
+
beforeDestroy() {
|
|
48
|
+
this.$parent.unregisterTab(this);
|
|
52
49
|
},
|
|
53
50
|
};
|
|
54
51
|
</script>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
<div class="vd-tag" :class="classes">
|
|
2
|
+
<div class="vd-tag" :class="classes" @click="handleClick">
|
|
4
3
|
<slot>{{ text }}</slot>
|
|
5
4
|
</div>
|
|
6
5
|
</template>
|
|
@@ -14,10 +13,20 @@ export default {
|
|
|
14
13
|
type: {
|
|
15
14
|
type: String,
|
|
16
15
|
// white、dark、blue、cyan、green、olive、yellow、orange、red、pink、purple
|
|
17
|
-
default: ''
|
|
16
|
+
default: '',
|
|
17
|
+
validator(value) {
|
|
18
|
+
return [
|
|
19
|
+
'white', 'dark', 'blue', 'cyan', 'green',
|
|
20
|
+
'olive', 'yellow', 'orange', 'red', 'pink', 'purple',
|
|
21
|
+
].includes(value);
|
|
22
|
+
},
|
|
18
23
|
},
|
|
19
24
|
size: {
|
|
20
25
|
type: String,
|
|
26
|
+
required: true,
|
|
27
|
+
validator(value) {
|
|
28
|
+
return ['s', 'l'].includes(value);
|
|
29
|
+
},
|
|
21
30
|
},
|
|
22
31
|
borders: {
|
|
23
32
|
type: Boolean,
|
|
@@ -41,7 +50,12 @@ export default {
|
|
|
41
50
|
return classes
|
|
42
51
|
|
|
43
52
|
},
|
|
44
|
-
}
|
|
53
|
+
},
|
|
54
|
+
methods: {
|
|
55
|
+
handleClick(event) {
|
|
56
|
+
this.$emit('click', event);
|
|
57
|
+
},
|
|
58
|
+
},
|
|
45
59
|
}
|
|
46
60
|
</script>
|
|
47
61
|
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
border-radius: calc(var(--radius-tag-bg) * 1px);
|
|
7
7
|
padding: 0 calc(var(--spacing-tag-padding_y) * 1px);
|
|
8
8
|
|
|
9
|
-
&--
|
|
9
|
+
&--s{
|
|
10
10
|
font-size: calc(var(--en-single-f-b-s-fontSize) * 1px);
|
|
11
11
|
font-weight: var(--en-single-f-b-s-fontWeight);
|
|
12
12
|
height: calc(var(--height-tag-s) * 1px);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
&--
|
|
15
|
+
&--l{
|
|
16
16
|
font-size: calc(var(--en-single-f-b-r-fontSize) * 1px);
|
|
17
17
|
font-weight: var(--en-single-f-b-r-fontWeight);
|
|
18
18
|
height: calc(var(--height-tag-m) * 1px);
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
<div :class="['vd-title', wrapClasses]" @click="handleClick">
|
|
3
3
|
<div class="vd-title--left">
|
|
4
4
|
<div class="vd-title-content">
|
|
5
|
-
<vd-icon v-if="leftIcon" :name="leftIcon"
|
|
5
|
+
<vd-icon v-if="leftIcon" :name="leftIcon" :class="leftIconClasses"></vd-icon>
|
|
6
6
|
<span :class="['vd-title-inner__title', innerTitleClasses]">{{ title }}</span>
|
|
7
|
-
<vd-icon v-if="rightIcon" :name="rightIcon"
|
|
7
|
+
<vd-icon v-if="rightIcon" :name="rightIcon" :class="rightIconClasses"></vd-icon>
|
|
8
8
|
</div>
|
|
9
9
|
<p v-if="subText" :class="['vd-title__subtext', subTextClasses]">{{ subText }}</p>
|
|
10
10
|
</div>
|
|
@@ -22,18 +22,20 @@ const prefixCls = 'vd-title';
|
|
|
22
22
|
export default {
|
|
23
23
|
name: 'vd-title',
|
|
24
24
|
props: {
|
|
25
|
+
type: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: 'primary'
|
|
28
|
+
},
|
|
25
29
|
title: String,
|
|
26
30
|
leftIcon: String,
|
|
27
31
|
rightIcon: String,
|
|
28
32
|
arrow: Boolean,
|
|
29
33
|
subText: String,
|
|
30
34
|
guideText: String,
|
|
31
|
-
|
|
32
|
-
type:
|
|
33
|
-
default:
|
|
34
|
-
}
|
|
35
|
-
leftSvg: Boolean,
|
|
36
|
-
rightSvg: Boolean,
|
|
35
|
+
sticky: {
|
|
36
|
+
type: Boolean,
|
|
37
|
+
default: false
|
|
38
|
+
}
|
|
37
39
|
|
|
38
40
|
},
|
|
39
41
|
data() {
|
|
@@ -46,6 +48,7 @@ export default {
|
|
|
46
48
|
return {
|
|
47
49
|
[`${prefixCls}-${this.type}`]: this.type,
|
|
48
50
|
[`${prefixCls}-${this.type}-double`]: this.subText,
|
|
51
|
+
[`${prefixCls}--sticky`]: this.sticky
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
},
|