mirror of
https://github.com/ialley-workshop-open/uni-halo.git
synced 2026-06-12 21:29:31 +08:00
v1.0.0-beta 源码正式开源
This commit is contained in:
@@ -0,0 +1,290 @@
|
||||
<template>
|
||||
<!-- 提示框 -->
|
||||
<view :animation="animation" v-if="show" @click="onclick" @tap="onclick" class="tm-alerts text-size-n "
|
||||
:class="[color_tmeme,(outlined||outlined=='true')?'outlined':'','round-'+round,black_tmeme?'bk':'',
|
||||
text=='true'||text?'text':'',
|
||||
`mx-${margin[0]} my-${margin[1]} shadow-${color_tmeme}-${shadow}`
|
||||
]"
|
||||
>
|
||||
<view class=" flex-start" :class="[dense===true||dense=='true'?'py-16 px-32':'py-32 px-32']">
|
||||
|
||||
<view v-if="leftIcon&&leftIcon!='true'" class="body-left ">
|
||||
<tm-icons :color="(text||outlined)?color_tmeme:iconColor" :dense="true" :name="leftIcon" size="32"></tm-icons>
|
||||
</view>
|
||||
|
||||
<view v-if="valueType===true" @click.stop="openUrl(label)" class="body-center text-overflow">{{label[rangKey]?label[rangKey]:label}}</view>
|
||||
<view v-if="valueType===false" class="tm--alerts--id body-center" :style="{height:sliderwidth.height}">
|
||||
<swiper v-if="sliderwidth.width" :vertical="vertical" :style="{height:sliderwidth.height,width:sliderwidth.width}" :interval="interval_vs" circular autoplay :duration="duration_vs" >
|
||||
<swiper-item @click.stop="openUrl(item)" v-for="(item,index) in label" :key="index" class="body-center text-overflow" style="line-height: 50upx;" :style="{height:sliderwidth.height}">
|
||||
{{item[rangKey]?item[rangKey]:item}}
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view>
|
||||
<view v-if="url && !close" class="body-right text-align-right">
|
||||
<tm-icons :color="(text||outlined)?color_tmeme:iconColor" :dense="true" :name="rightIcon" size="28"></tm-icons>
|
||||
</view>
|
||||
<view v-if="close" class="body-right text-align-right">
|
||||
<tm-icons @click="closeview" :color="(text||outlined)?color_tmeme:iconColor" :dense="true" name="icon-times" size="28"></tm-icons>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* 消息提示框
|
||||
* @property {String | Boolean} dense = [true|false] 默认:true,是否减小边距。
|
||||
* @property {Array} margin = [] 默认:[32,24],边距。
|
||||
* @property {String|Number} shadow = [] 默认:6,投影
|
||||
* @property {String|Number} round = [] 默认:4,圆角
|
||||
* @property {String|Number} duration = [] 默认:500,轮播速度。
|
||||
* @property {String|Number} interval = [] 默认:1500,轮播间隙。
|
||||
* @property {String | Boolean} outlined = [true|false] 默认:false,是否为边框样式
|
||||
* @property {String | Boolean} text = [true|false] 默认:false,是否为文本模式,即减淡背景颜色。
|
||||
* @property {String | Array} label = [true|false] 默认:"",当为数组时,自动变成轮播信息。
|
||||
* @property {String | Boolean} black = [true|false] 默认:false,是否开启暗黑模式
|
||||
* @property {String} color = [] 默认:primary,主题颜色名称
|
||||
* @property {String} icon-color = [] 默认:white,图标的主题颜色名称
|
||||
* @property {Boolean} url = [true|false] 默认:false,是否显示打开链接图标
|
||||
* @property {String} left-icon = [] 默认:"icon-lightbulb",左边图标名称
|
||||
* @property {String} right-icon = [] 默认:"icon-angle-right",右边图标名称
|
||||
* @property {String} rang-key = [] 默认:"text",当label娄数组时需要提供此值。
|
||||
* @property {String | Boolean} ani = [true|false] 默认:false,是否禁用动画,
|
||||
* @property {String | Boolean} vertical = [true|false] 默认:false,是否是纵向。
|
||||
* @property {String | Boolean} close = [true|false] 默认:false, 是否显示关闭图标,
|
||||
* @property {Function} click 整个组件点击事件
|
||||
* @example <tm-alerts label="9"></tm-alerts>
|
||||
*/
|
||||
import tmIcons from "@/tm-vuetify/components/tm-icons/tm-icons.vue"
|
||||
|
||||
export default {
|
||||
components:{tmIcons},
|
||||
name:"tm-alerts",
|
||||
model:{
|
||||
prop:'value',
|
||||
event:'input'
|
||||
},
|
||||
props: {
|
||||
// 是否减小边距。
|
||||
dense: {
|
||||
type: String | Boolean,
|
||||
default: true
|
||||
},
|
||||
// 是否为边框样式,
|
||||
outlined: {
|
||||
type: String | Boolean,
|
||||
default: false
|
||||
},
|
||||
// 边距。
|
||||
margin: {
|
||||
type: Array,
|
||||
default: ()=>{
|
||||
return [32,24];
|
||||
}
|
||||
},
|
||||
shadow: {
|
||||
type: String|Number,
|
||||
default: 4
|
||||
},
|
||||
round: {
|
||||
type: String|Number,
|
||||
default: 3
|
||||
},
|
||||
// 是否为文本模式,即减淡背景颜色。
|
||||
text: {
|
||||
type: String | Boolean,
|
||||
default: false
|
||||
},
|
||||
// 当为数组时,自动变成轮播信息。
|
||||
label:{
|
||||
type:String | Array,
|
||||
default:""
|
||||
},
|
||||
// 当label娄数组时需要提供此值。
|
||||
rangKey:{
|
||||
type:String,
|
||||
default:"text"
|
||||
},
|
||||
// 是否开启暗黑模式
|
||||
black: {
|
||||
type: String | Boolean,
|
||||
default: null
|
||||
},
|
||||
// 主题颜色名称
|
||||
color: {
|
||||
type: String,
|
||||
default: 'primary'
|
||||
},
|
||||
// 图标主题颜色名称
|
||||
iconColor: {
|
||||
type: String,
|
||||
default: 'white'
|
||||
},
|
||||
// 是否显示为打开链接的消息提醒。
|
||||
url: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 左边图标名称
|
||||
leftIcon: {
|
||||
type: String,
|
||||
default: 'icon-lightbulb'
|
||||
},
|
||||
// 右边图标名称
|
||||
rightIcon: {
|
||||
type: String,
|
||||
default: 'icon-angle-right'
|
||||
},
|
||||
//是否禁用动画,
|
||||
ani: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 是否显示关闭图标
|
||||
close: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
// 跟随主题色的改变而改变。
|
||||
fllowTheme:{
|
||||
type:Boolean|String,
|
||||
default:true
|
||||
},
|
||||
duration:{
|
||||
type:Number,
|
||||
default:1000
|
||||
},
|
||||
vertical:{
|
||||
type:Boolean,
|
||||
default:false
|
||||
},
|
||||
//间隔,单位ms
|
||||
interval:{
|
||||
type:Number,
|
||||
default:1500
|
||||
},
|
||||
value: {
|
||||
type: Boolean|String,
|
||||
default: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
animation: null,
|
||||
outid: 'alert-88',
|
||||
sliderwidth:{height:0,width:0},
|
||||
};
|
||||
},
|
||||
computed:{
|
||||
// valueType:true,//默认是string.
|
||||
valueType:function(){
|
||||
|
||||
if(Array.isArray(this.label)){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
black_tmeme: function() {
|
||||
if (this.black !== null) return this.black;
|
||||
return this.$tm.vx.state().tmVuetify.black;
|
||||
},
|
||||
color_tmeme:function(){
|
||||
if(this.$tm.vx.state().tmVuetify.color!==null&&this.$tm.vx.state().tmVuetify.color && this.fllowTheme){
|
||||
return this.$tm.vx.state().tmVuetify.color;
|
||||
}
|
||||
return this.color;
|
||||
},
|
||||
duration_vs:function () {
|
||||
return this.duration;
|
||||
},
|
||||
interval_vs:function () {
|
||||
return this.interval;
|
||||
},
|
||||
show:{
|
||||
get:function(){
|
||||
return this.value;
|
||||
},
|
||||
set:function(val){
|
||||
this.$emit('input',val)
|
||||
this.$emit('update:value',val)
|
||||
},
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
let t= this;
|
||||
this.$Querey('.tm--alerts--id',this,50).then(res=>{
|
||||
let wh = res[0];
|
||||
t.sliderwidth = {
|
||||
height:uni.upx2px(50)+'px',width:(wh.width||0)+'px'
|
||||
}
|
||||
}).catch(e=>{})
|
||||
|
||||
},
|
||||
methods: {
|
||||
onclick(e) {
|
||||
this.$emit('click', e);
|
||||
},
|
||||
openUrl(e) {
|
||||
this.$emit('click', e);
|
||||
if(typeof e !== 'object' || !e['url']) return;
|
||||
|
||||
let urls = getCurrentPages();
|
||||
let url = e.url;
|
||||
if (urls.length >= 5) {
|
||||
uni.redirectTo({
|
||||
url:url,
|
||||
fail: e => {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: url,
|
||||
fail: e => {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
closeview(e) {
|
||||
let t = this;
|
||||
var animation = uni.createAnimation({
|
||||
duration: 500,
|
||||
timingFunction: 'ease'
|
||||
});
|
||||
this.animation = animation;
|
||||
animation
|
||||
.scale(0.7, 0.7)
|
||||
.opacity(0)
|
||||
.step();
|
||||
this.outid = setTimeout(() => {
|
||||
t.show = false;
|
||||
t.animation = null;
|
||||
}, 500);
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.tm-alerts {
|
||||
|
||||
.gs {
|
||||
width: 50upx;
|
||||
min-width: 70upx;
|
||||
}
|
||||
|
||||
.body-left,
|
||||
.body-right {
|
||||
@extend .gs;
|
||||
}
|
||||
|
||||
.body-center {
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user