125 lines
2.6 KiB
Vue
125 lines
2.6 KiB
Vue
|
<template>
|
||
|
<view :class="[circle === true || circle === 'true' ? 'uni-fav--circle' : '']" :style="[{ backgroundColor: checked ? bgColorChecked : bgColor }]"
|
||
|
@click="onClick" class="uni-fav">
|
||
|
<!-- #ifdef MP-ALIPAY -->
|
||
|
<view class="uni-fav-star" v-if="!checked && (star === true || star === 'true')">
|
||
|
<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" size="14" type="star-filled" />
|
||
|
</view>
|
||
|
<!-- #endif -->
|
||
|
<!-- #ifndef MP-ALIPAY -->
|
||
|
<uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-star" size="14" type="star-filled"
|
||
|
v-if="!checked && (star === true || star === 'true')" />
|
||
|
<!-- #endif -->
|
||
|
<text :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-text">{{ checked ? contentText.contentFav : contentText.contentDefault }}</text>
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import uniIcons from "../uni-icons/uni-icons.vue";
|
||
|
export default {
|
||
|
name: "UniFav",
|
||
|
components: {
|
||
|
uniIcons
|
||
|
},
|
||
|
props: {
|
||
|
star: {
|
||
|
type: [Boolean, String],
|
||
|
default: true
|
||
|
},
|
||
|
bgColor: {
|
||
|
type: String,
|
||
|
default: "#eeeeee"
|
||
|
},
|
||
|
fgColor: {
|
||
|
type: String,
|
||
|
default: "#666666"
|
||
|
},
|
||
|
bgColorChecked: {
|
||
|
type: String,
|
||
|
default: "#007aff"
|
||
|
},
|
||
|
fgColorChecked: {
|
||
|
type: String,
|
||
|
default: "#FFFFFF"
|
||
|
},
|
||
|
circle: {
|
||
|
type: [Boolean, String],
|
||
|
default: false
|
||
|
},
|
||
|
checked: {
|
||
|
type: Boolean,
|
||
|
default: false
|
||
|
},
|
||
|
contentText: {
|
||
|
type: Object,
|
||
|
default () {
|
||
|
return {
|
||
|
contentDefault: "收藏",
|
||
|
contentFav: "已收藏"
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
watch: {
|
||
|
checked() {
|
||
|
if (uni.report) {
|
||
|
if (this.checked) {
|
||
|
uni.report("收藏", "收藏");
|
||
|
} else {
|
||
|
uni.report("取消收藏", "取消收藏");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
onClick() {
|
||
|
this.$emit("click");
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
$fav-height: 25px;
|
||
|
|
||
|
.uni-fav {
|
||
|
/* #ifndef APP-NVUE */
|
||
|
display: flex;
|
||
|
/* #endif */
|
||
|
flex-direction: row;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
width: 60px;
|
||
|
height: $fav-height;
|
||
|
line-height: $fav-height;
|
||
|
text-align: center;
|
||
|
border-radius: 3px;
|
||
|
}
|
||
|
|
||
|
.uni-fav--circle {
|
||
|
border-radius: 30px;
|
||
|
}
|
||
|
|
||
|
.uni-fav-star {
|
||
|
/* #ifndef APP-NVUE */
|
||
|
display: flex;
|
||
|
/* #endif */
|
||
|
height: $fav-height;
|
||
|
line-height: 24px;
|
||
|
margin-right: 3px;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
}
|
||
|
|
||
|
.uni-fav-text {
|
||
|
/* #ifndef APP-NVUE */
|
||
|
display: flex;
|
||
|
/* #endif */
|
||
|
height: $fav-height;
|
||
|
line-height: $fav-height;
|
||
|
align-items: center;
|
||
|
justify-content: center;
|
||
|
font-size: $uni-font-size-base;
|
||
|
}
|
||
|
</style>
|