|
|
<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>
|