| | |
| | | <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 ? contentFav : contentDefault }}</text> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | /** |
| | | * Fav 收藏按钮 |
| | | * @description 用于收藏功能,可点击切换选中、不选中的状态 |
| | | * @tutorial https://ext.dcloud.net.cn/plugin?id=864 |
| | | * @property {Boolean} star = [true|false] 按钮是否带星星 |
| | | * @property {String} bgColor 未收藏时的背景色 |
| | | * @property {String} bgColorChecked 已收藏时的背景色 |
| | | * @property {String} fgColor 未收藏时的文字颜色 |
| | | * @property {String} fgColorChecked 已收藏时的文字颜色 |
| | | * @property {Boolean} circle = [true|false] 是否为圆角 |
| | | * @property {Boolean} checked = [true|false] 是否为已收藏 |
| | | * @property {Object} contentText = [true|false] 收藏按钮文字 |
| | | * @event {Function} click 点击 fav按钮触发事件 |
| | | * @example <uni-fav :checked="true"/> |
| | | */ |
| | | |
| | | import { |
| | | initVueI18n |
| | | } from '@dcloudio/uni-i18n' |
| | | import messages from './i18n/index.js' |
| | | const { t } = initVueI18n(messages) |
| | | |
| | | export default { |
| | | name: "UniFav", |
| | | // TODO 兼容 vue3,需要注册事件 |
| | | emits: ['click'], |
| | | 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: "" |
| | | }; |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | contentDefault() { |
| | | return this.contentText.contentDefault || t("uni-fav.collect") |
| | | }, |
| | | contentFav() { |
| | | return this.contentText.contentFav || t("uni-fav.collected") |
| | | }, |
| | | }, |
| | | 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; |
| | | /* #ifdef H5 */ |
| | | cursor: pointer; |
| | | /* #endif */ |
| | | } |
| | | |
| | | .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: 12px; |
| | | } |
| | | </style> |
| | | <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 ? contentFav : contentDefault }}</text>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | |
|
| | | /**
|
| | | * Fav 收藏按钮
|
| | | * @description 用于收藏功能,可点击切换选中、不选中的状态
|
| | | * @tutorial https://ext.dcloud.net.cn/plugin?id=864
|
| | | * @property {Boolean} star = [true|false] 按钮是否带星星
|
| | | * @property {String} bgColor 未收藏时的背景色
|
| | | * @property {String} bgColorChecked 已收藏时的背景色
|
| | | * @property {String} fgColor 未收藏时的文字颜色
|
| | | * @property {String} fgColorChecked 已收藏时的文字颜色
|
| | | * @property {Boolean} circle = [true|false] 是否为圆角
|
| | | * @property {Boolean} checked = [true|false] 是否为已收藏
|
| | | * @property {Object} contentText = [true|false] 收藏按钮文字
|
| | | * @event {Function} click 点击 fav按钮触发事件
|
| | | * @example <uni-fav :checked="true"/>
|
| | | */
|
| | |
|
| | | import {
|
| | | initVueI18n
|
| | | } from '@dcloudio/uni-i18n'
|
| | | import messages from './i18n/index.js'
|
| | | const { t } = initVueI18n(messages)
|
| | |
|
| | | export default {
|
| | | name: "UniFav",
|
| | | // TODO 兼容 vue3,需要注册事件
|
| | | emits: ['click'],
|
| | | 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: ""
|
| | | };
|
| | | }
|
| | | }
|
| | | },
|
| | | computed: {
|
| | | contentDefault() {
|
| | | return this.contentText.contentDefault || t("uni-fav.collect")
|
| | | },
|
| | | contentFav() {
|
| | | return this.contentText.contentFav || t("uni-fav.collected")
|
| | | },
|
| | | },
|
| | | 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;
|
| | | /* #ifdef H5 */
|
| | | cursor: pointer;
|
| | | /* #endif */
|
| | | }
|
| | |
|
| | | .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: 12px;
|
| | | }
|
| | | </style>
|