“primary”,
“success”,
“warning”,
“danger”,
“info”,
].includes(val);
},
},
size: {
type: String as PropType,
},
icon: {
type: String,
default: “”,
},
loading: Boolean,
disabled: Boolean,
round: Boolean,
},
emits: [“click”],
setup(props, ctx) {
const classs = computed(() => [
“z-button”,
“z-button–” + props.type,
props.size ? “z-button–” + props.size : “”,
{
“is-disabled”: props.disabled, // 状态全部以 is-开头
“is-loading”: props.loading,
“is-round”: props.round,
},
]);
const handleClick = (e) => {
ctx.emit(“click”, e);
};
return {
classs,
handleClick,
};
},
});
#2.button样式处理
@include b(button) {
// BEM规范
display: inline-block;
cursor: pointer;
outline: none;
border: #fafafa;
border-radius: 5px;
user-select: none;
min-height: 40px;
line-height: 1;
vertical-align: middle;
& [class*=“#{$namespace}-icon-”] { // 处理icon 和文字间距
&+span {
margin-left: 5px;
}
}
@include when(disabled) { // 针对不同类型处理
&,
&:hover,
&:focus {
cursor: not-allowed
}
}
@include when(round) {
border-radius: 20px;
padding: 12px 23px;
}
@include when(loading) {
pointer-events: none;
}
@include m(primary) { //渲染不同类型的button
@include button-variant($–color-white, $–color-primary, $–color-primary)
}
@include m(success) {
@include button-variant($–color-white, $–color-success, $–color-success)
}
@include m(warning) {
@include button-variant($–color-white, $–color-warning, $–color-warning)
}
@include m(danger) {
@include button-variant($–color-white, $–color-danger, $–color-danger)
}
@include m(info) {
@include button-variant($–color-white, $–color-info, $–color-info)
}
}
提供scss的辅助方法,方便后续使用
@mixin button-variant($color, $background-color, $border-color) {
color: $color;
background: $background-color;
border-color: $border-color;
}
#3.Button组件试用
<z-button :loading=“buttonLoading” @click=“buttonClick”>珠峰架构