uni-tag.vue
4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<template>
<view :class="[
'uni-tag--' + type,
disabled === true || disabled === 'true' ? 'uni-tag--disabled' : '',
inverted === true || inverted === 'true' ? type + '-uni-tag--inverted' : '',
circle === true || circle === 'true' ? 'uni-tag--circle' : '',
mark === true || mark === 'true' ? 'uni-tag--mark' : '',
'uni-tag--' + size
]" @click="onClick()" class="uni-tag" v-if="text">
<text :class="[type === 'default' ? 'uni-tag--default':'uni-tag-text',inverted === true || inverted === 'true' ? 'uni-tag-text--'+type : '',size === 'small' ? 'uni-tag-text--small':'' ]">{{ text }}</text>
</view>
</template>
<script>
/**
* Tag 标签
* @description 用于展示1个或多个文字标签,可点击切换选中、不选中的状态
* @tutorial https://ext.dcloud.net.cn/plugin?id=35
* @property {String} text 标签内容
* @property {String} size = [normal|small] 大小尺寸
* @value normal 正常
* @value small 小尺寸
* @property {String} type = [default|primary|success|warning|error|royal] 颜色类型
* @value default 灰色
* @value primary 蓝色
* @value success 绿色
* @value warning 黄色
* @value error 红色
* @value royal 紫色
* @property {Boolean} disabled = [true|false] 是否为禁用状态
* @property {Boolean} inverted = [true|false] 是否无需背景颜色(空心标签)
* @property {Boolean} circle = [true|false] 是否为圆角
* @event {Function} click 点击 Tag 触发事件
*/
export default {
name: "UniTag",
props: {
type: {
// 标签类型default、primary、success、warning、error、royal
type: String,
default: "default"
},
size: {
// 标签大小 normal, small
type: String,
default: "normal"
},
// 标签内容
text: {
type: String,
default: ""
},
disabled: {
// 是否为禁用状态
type: [Boolean, String],
default: false
},
inverted: {
// 是否为空心
type: [Boolean, String],
default: false
},
circle: {
// 是否为圆角样式
type: [Boolean, String],
default: false
},
mark: {
// 是否为标记样式
type: [Boolean, String],
default: false
}
},
methods: {
onClick() {
if (this.disabled === true || this.disabled === "true") {
return;
}
this.$emit("click");
}
}
};
</script>
<style scoped>
.uni-tag {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
padding: 0px 16px;
height: 30px;
line-height: 30px;
justify-content: center;
color: #333;
border-radius: 3px;
background-color: #f8f8f8;
border-width: 1rpx;
border-style: solid;
border-color: #f8f8f8;
}
.uni-tag--circle {
border-radius: 15px;
}
.uni-tag--mark {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-top-right-radius: 15px;
border-bottom-right-radius: 15px;
}
.uni-tag--disabled {
opacity: 0.5;
}
.uni-tag--small {
height: 20px;
padding: 0px 8px;
line-height: 20px;
font-size: 12px;
}
.uni-tag--default {
color: #333;
font-size: 14px;
}
.uni-tag-text--small {
font-size: 12px !important;
}
.uni-tag-text {
color: #fff;
font-size: 14px;
}
.uni-tag-text--primary {
color: #007aff !important;
}
.uni-tag-text--success {
color: #4cd964 !important;
}
.uni-tag-text--warning {
color: #f0ad4e !important;
}
.uni-tag-text--error {
color: #dd524d !important;
}
.uni-tag--primary {
color: #fff;
background-color: #007aff;
border-width: 1rpx;
border-style: solid;
border-color: #007aff;
}
.primary-uni-tag--inverted {
color: #007aff;
background-color: #ffffff;
border-width: 1rpx;
border-style: solid;
border-color: #007aff;
}
.uni-tag--success {
color: #fff;
background-color: #4cd964;
border-width: 1rpx;
border-style: solid;
border-color: #4cd964;
}
.success-uni-tag--inverted {
color: #4cd964;
background-color: #ffffff;
border-width: 1rpx;
border-style: solid;
border-color: #4cd964;
}
.uni-tag--warning {
color: #fff;
background-color: #f0ad4e;
border-width: 1rpx;
border-style: solid;
border-color: #f0ad4e;
}
.warning-uni-tag--inverted {
color: #f0ad4e;
background-color: #ffffff;
border-width: 1rpx;
border-style: solid;
border-color: #f0ad4e;
}
.uni-tag--error {
color: #fff;
background-color: #dd524d;
border-width: 1rpx;
border-style: solid;
border-color: #dd524d;
}
.error-uni-tag--inverted {
color: #dd524d;
background-color: #ffffff;
border-width: 1rpx;
border-style: solid;
border-color: #dd524d;
}
.uni-tag--inverted {
color: #333;
background-color: #ffffff;
border-width: 1rpx;
border-style: solid;
border-color: #f8f8f8;
}
</style>