257 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
<template>
 | 
						||
	<view class="u-alert-tips" v-if="show" :class="[
 | 
						||
		!show ? 'u-close-alert-tips': '',
 | 
						||
		type ? 'u-alert-tips--bg--' + type + '-light' : '',
 | 
						||
		type ? 'u-alert-tips--border--' + type + '-disabled' : '',
 | 
						||
	]" :style="{
 | 
						||
		backgroundColor: bgColor,
 | 
						||
		borderColor: borderColor
 | 
						||
	}">
 | 
						||
		<view class="u-icon-wrap">
 | 
						||
			<u-icon v-if="showIcon" :name="uIcon" :size="description ? 40 : 32" class="u-icon" :color="uIconType" :custom-style="iconStyle"></u-icon>
 | 
						||
		</view>
 | 
						||
		<view class="u-alert-content" @tap.stop="click">
 | 
						||
			<view class="u-alert-title" :style="[uTitleStyle]">
 | 
						||
				{{title}}
 | 
						||
			</view>
 | 
						||
			<view v-if="description" class="u-alert-desc" :style="[descStyle]">
 | 
						||
				{{description}}
 | 
						||
			</view>
 | 
						||
		</view>
 | 
						||
		<view class="u-icon-wrap">
 | 
						||
			<u-icon @click="close" v-if="closeAble && !closeText" hoverClass="u-type-error-hover-color" name="close" color="#c0c4cc"
 | 
						||
			 :size="22" class="u-close-icon" :style="{
 | 
						||
				top: description ? '18rpx' : '24rpx'
 | 
						||
			}"></u-icon>
 | 
						||
		</view>
 | 
						||
		<text v-if="closeAble && closeText" class="u-close-text" :style="{
 | 
						||
			top: description ? '18rpx' : '24rpx'
 | 
						||
		}">{{closeText}}</text>
 | 
						||
	</view>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
	/**
 | 
						||
	 * alertTips 警告提示
 | 
						||
	 * @description 警告提示,展现需要关注的信息
 | 
						||
	 * @tutorial https://uviewui.com/components/alertTips.html
 | 
						||
	 * @property {String} title 显示的标题文字
 | 
						||
	 * @property {String} description 辅助性文字,颜色比title浅一点,字号也小一点,可选
 | 
						||
	 * @property {String} type 关闭按钮(默认为叉号icon图标)
 | 
						||
	 * @property {String} icon 图标名称
 | 
						||
	 * @property {Object} icon-style 图标的样式,对象形式
 | 
						||
	 * @property {Object} title-style 标题的样式,对象形式
 | 
						||
	 * @property {Object} desc-style 描述的样式,对象形式
 | 
						||
	 * @property {String} close-able 用文字替代关闭图标,close-able为true时有效
 | 
						||
	 * @property {Boolean} show-icon 是否显示左边的辅助图标
 | 
						||
	 * @property {Boolean} show 显示或隐藏组件
 | 
						||
	 * @event {Function} click 点击组件时触发
 | 
						||
	 * @event {Function} close 点击关闭按钮时触发
 | 
						||
	 */
 | 
						||
	export default {
 | 
						||
		name: 'u-alert-tips',
 | 
						||
		props: {
 | 
						||
			// 显示文字
 | 
						||
			title: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 主题,success/warning/info/error
 | 
						||
			type: {
 | 
						||
				type: String,
 | 
						||
				default: 'warning'
 | 
						||
			},
 | 
						||
			// 辅助性文字
 | 
						||
			description: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 是否可关闭
 | 
						||
			closeAble: {
 | 
						||
				type: Boolean,
 | 
						||
				default: false
 | 
						||
			},
 | 
						||
			// 关闭按钮自定义文本
 | 
						||
			closeText: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 是否显示图标
 | 
						||
			showIcon: {
 | 
						||
				type: Boolean,
 | 
						||
				default: false
 | 
						||
			},
 | 
						||
			// 文字颜色,如果定义了color值,icon会失效
 | 
						||
			color: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 背景颜色
 | 
						||
			bgColor: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 边框颜色
 | 
						||
			borderColor: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// 是否显示
 | 
						||
			show: {
 | 
						||
				type: Boolean,
 | 
						||
				default: true
 | 
						||
			},
 | 
						||
			// 左边显示的icon
 | 
						||
			icon: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			// icon的样式
 | 
						||
			iconStyle: {
 | 
						||
				type: Object,
 | 
						||
				default() {
 | 
						||
					return {}
 | 
						||
				}
 | 
						||
			},
 | 
						||
			// 标题的样式
 | 
						||
			titleStyle: {
 | 
						||
				type: Object,
 | 
						||
				default() {
 | 
						||
					return {}
 | 
						||
				}
 | 
						||
			},
 | 
						||
			// 描述文字的样式
 | 
						||
			descStyle: {
 | 
						||
				type: Object,
 | 
						||
				default() {
 | 
						||
					return {}
 | 
						||
				}
 | 
						||
			},
 | 
						||
		},
 | 
						||
		data() {
 | 
						||
			return {
 | 
						||
			}
 | 
						||
		},
 | 
						||
		computed: {
 | 
						||
			uTitleStyle() {
 | 
						||
				let style = {};
 | 
						||
				// 如果有描述文字的话,标题进行加粗
 | 
						||
				style.fontWeight = this.description ? 500 : 'normal';
 | 
						||
				// 将用户传入样式对象和style合并,传入的优先级比style高,同属性会被覆盖
 | 
						||
				return this.$u.deepMerge(style, this.titleStyle);
 | 
						||
			},
 | 
						||
			uIcon() {
 | 
						||
				// 如果有设置icon名称就使用,否则根据type主题,推定一个默认的图标
 | 
						||
				return this.icon ? this.icon : this.$u.type2icon(this.type);
 | 
						||
			},
 | 
						||
			uIconType() {
 | 
						||
				// 如果有设置图标的样式,优先使用,没有的话,则用type的样式
 | 
						||
				return Object.keys(this.iconStyle).length ? '' : this.type;
 | 
						||
			}
 | 
						||
		},
 | 
						||
		methods: {
 | 
						||
			// 点击内容
 | 
						||
			click() {
 | 
						||
				this.$emit('click');
 | 
						||
			},
 | 
						||
			// 点击关闭按钮
 | 
						||
			close() {
 | 
						||
				this.$emit('close');
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
</script>
 | 
						||
 | 
						||
<style lang="scss" scoped>
 | 
						||
	@import "../../libs/css/style.components.scss";
 | 
						||
	
 | 
						||
	.u-alert-tips {
 | 
						||
		@include vue-flex;
 | 
						||
		align-items: center;
 | 
						||
		padding: 16rpx 30rpx;
 | 
						||
		border-radius: 8rpx;
 | 
						||
		position: relative;
 | 
						||
		transition: all 0.3s linear;
 | 
						||
		border: 1px solid #fff;
 | 
						||
		
 | 
						||
		&--bg--primary-light {
 | 
						||
			background-color: $u-type-primary-light;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--bg--info-light {
 | 
						||
			background-color: $u-type-info-light;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--bg--success-light {
 | 
						||
			background-color: $u-type-success-light;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--bg--warning-light {
 | 
						||
			background-color: $u-type-warning-light;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--bg--error-light {
 | 
						||
			background-color: $u-type-error-light;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--border--primary-disabled {
 | 
						||
			border-color: $u-type-primary-disabled;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--border--success-disabled {
 | 
						||
			border-color: $u-type-success-disabled;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--border--error-disabled {
 | 
						||
			border-color: $u-type-error-disabled;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--border--warning-disabled {
 | 
						||
			border-color: $u-type-warning-disabled;
 | 
						||
		}
 | 
						||
		
 | 
						||
		&--border--info-disabled {
 | 
						||
			border-color: $u-type-info-disabled;
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	.u-close-alert-tips {
 | 
						||
		opacity: 0;
 | 
						||
		visibility: hidden;
 | 
						||
	}
 | 
						||
 | 
						||
	.u-icon {
 | 
						||
		margin-right: 16rpx;
 | 
						||
	}
 | 
						||
 | 
						||
	.u-alert-title {
 | 
						||
		font-size: 28rpx;
 | 
						||
		color: $u-main-color;
 | 
						||
	}
 | 
						||
 | 
						||
	.u-alert-desc {
 | 
						||
		font-size: 26rpx;
 | 
						||
		text-align: left;
 | 
						||
		color: $u-content-color;
 | 
						||
	}
 | 
						||
 | 
						||
	.u-close-icon {
 | 
						||
		position: absolute;
 | 
						||
		top: 20rpx;
 | 
						||
		right: 20rpx;
 | 
						||
	}
 | 
						||
 | 
						||
	.u-close-hover {
 | 
						||
		color: red;
 | 
						||
	}
 | 
						||
	
 | 
						||
	.u-close-text {
 | 
						||
		font-size: 24rpx;
 | 
						||
		color: $u-tips-color;
 | 
						||
		position: absolute;
 | 
						||
		top: 20rpx;
 | 
						||
		right: 20rpx;
 | 
						||
		line-height: 1;
 | 
						||
	}
 | 
						||
</style>
 |