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