257 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			257 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								<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>
							 |