2023-12-25 17:56:30 +08:00
|
|
|
|
<template>
|
2024-05-31 18:06:24 +08:00
|
|
|
|
<view v-if="showNotice" class="tn-notice-bar-class tn-notice-bar" :style="{
|
2023-12-25 17:56:30 +08:00
|
|
|
|
borderRadius: radius + 'rpx'
|
2024-05-31 18:06:24 +08:00
|
|
|
|
}">
|
|
|
|
|
<block v-if="mode === 'horizontal' && circular">
|
|
|
|
|
<tn-row-notice :backgroundColor="backgroundColor" :fontColor="fontColor" :fontSize="fontSize"
|
|
|
|
|
:fontUnit="fontUnit" :list="list" :show="show" :playStatus="playStatus" :leftIcon="leftIcon"
|
|
|
|
|
:leftIconName="leftIconName" :leftIconSize="leftIconSize" :rightIcon="rightIcon"
|
|
|
|
|
:rightIconName="rightIconName" :rightIconSize="rightIconSize" :leftIconType="leftIconType"
|
|
|
|
|
:closeBtn="closeBtn" :autoplay="autoplay" :radius="radius" :padding="padding" :speed="speed"
|
|
|
|
|
@click="click" @close="close" @clickLeft="clickLeftIcon" @clickRight="clickRightIcon"></tn-row-notice>
|
|
|
|
|
</block>
|
|
|
|
|
<block v-if="mode === 'vertical' || (mode === 'horizontal' && !circular)">
|
|
|
|
|
<tn-column-notice :backgroundColor="backgroundColor" :fontColor="fontColor" :fontSize="fontSize"
|
|
|
|
|
:fontUnit="fontUnit" :list="list" :show="show" :mode="mode" :playStatus="playStatus"
|
|
|
|
|
:leftIcon="leftIcon" :leftIconName="leftIconName" :leftIconSize="leftIconSize" :rightIcon="rightIcon"
|
|
|
|
|
:rightIconName="rightIconName" :rightIconSize="rightIconSize" :closeBtn="closeBtn" :autoplay="autoplay"
|
|
|
|
|
:radius="radius" :padding="padding" :duration="duration" :leftIconType="leftIconType" @click="click"
|
|
|
|
|
@close="close" @clickLeft="clickLeftIcon" @clickRight="clickRightIcon" @end="end"></tn-column-notice>
|
|
|
|
|
</block>
|
|
|
|
|
</view>
|
2023-12-25 17:56:30 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2024-05-31 18:06:24 +08:00
|
|
|
|
import componentsColorMixin from '../../libs/mixin/components_color.js'
|
|
|
|
|
export default {
|
|
|
|
|
name: 'tn-notice-bar',
|
|
|
|
|
mixins: [componentsColorMixin],
|
|
|
|
|
props: {
|
|
|
|
|
// 显示的内容
|
|
|
|
|
list: {
|
|
|
|
|
type: Array,
|
|
|
|
|
default () {
|
|
|
|
|
return []
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 是否显示
|
|
|
|
|
show: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
|
|
|
|
},
|
|
|
|
|
// 播放状态
|
|
|
|
|
// play -> 播放 paused -> 暂停
|
|
|
|
|
playStatus: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'play'
|
|
|
|
|
},
|
|
|
|
|
// 滚动方向
|
|
|
|
|
// horizontal -> 水平滚动 vertical -> 垂直滚动
|
|
|
|
|
mode: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'horizontal'
|
|
|
|
|
},
|
|
|
|
|
// 是否显示左边图标
|
|
|
|
|
leftIcon: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
|
|
|
|
},
|
|
|
|
|
// 是否显示左边图标
|
|
|
|
|
leftIconType: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'icon'
|
|
|
|
|
},
|
|
|
|
|
// 左边图标的名称
|
|
|
|
|
leftIconName: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'sound'
|
|
|
|
|
},
|
|
|
|
|
// 左边图标的大小
|
|
|
|
|
leftIconSize: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 34
|
|
|
|
|
},
|
|
|
|
|
// 是否显示右边的图标
|
|
|
|
|
rightIcon: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false
|
|
|
|
|
},
|
|
|
|
|
// 右边图标的名称
|
|
|
|
|
rightIconName: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: 'right'
|
|
|
|
|
},
|
|
|
|
|
// 右边图标的大小
|
|
|
|
|
rightIconSize: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 26
|
|
|
|
|
},
|
|
|
|
|
// 是否显示关闭按钮
|
|
|
|
|
closeBtn: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: false
|
|
|
|
|
},
|
|
|
|
|
// 圆角
|
|
|
|
|
radius: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 0
|
|
|
|
|
},
|
|
|
|
|
// 内边距
|
|
|
|
|
padding: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: '18rpx 24rpx'
|
|
|
|
|
},
|
|
|
|
|
// 自动播放
|
|
|
|
|
autoplay: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
|
|
|
|
},
|
|
|
|
|
// 滚动周期
|
|
|
|
|
duration: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 2000
|
|
|
|
|
},
|
|
|
|
|
// 水平滚动时的速度,即每秒滚动多少rpx
|
|
|
|
|
speed: {
|
|
|
|
|
type: Number,
|
|
|
|
|
default: 160
|
|
|
|
|
},
|
|
|
|
|
// 水平滚动的时候是否采用衔接的模式
|
|
|
|
|
circular: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
|
|
|
|
},
|
|
|
|
|
// 没有数据时是否显示通知
|
|
|
|
|
autoHidden: {
|
|
|
|
|
type: Boolean,
|
|
|
|
|
default: true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
// 当设置了show为false,或者autoHidden为true且list为空时,不显示通知
|
|
|
|
|
showNotice() {
|
|
|
|
|
if (this.show === false || (this.autoHidden && this.list.length === 0)) return false
|
|
|
|
|
else return true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// 点击了通知栏
|
|
|
|
|
click(index) {
|
|
|
|
|
this.$emit('click', index)
|
|
|
|
|
},
|
|
|
|
|
// 点击了关闭按钮
|
|
|
|
|
close() {
|
|
|
|
|
this.$emit('close')
|
|
|
|
|
},
|
|
|
|
|
// 点击了左边图标
|
|
|
|
|
clickLeftIcon() {
|
|
|
|
|
this.$emit('clickLeft')
|
|
|
|
|
},
|
|
|
|
|
// 点击了右边图标
|
|
|
|
|
clickRightIcon() {
|
|
|
|
|
this.$emit('clickRight')
|
|
|
|
|
},
|
|
|
|
|
// 一个周期滚动结束
|
|
|
|
|
end() {
|
|
|
|
|
this.$emit('end')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-12-25 17:56:30 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
2024-05-31 18:06:24 +08:00
|
|
|
|
.tn-notice-bar {
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
</style>
|