| <template> | 
|     <u-transition | 
|         mode="fade" | 
|         :show="show" | 
|     > | 
|         <view | 
|             class="u-alert" | 
|             :class="[`u-alert--${type}--${effect}`]" | 
|             @tap.stop="clickHandler" | 
|             :style="[$u.addStyle(customStyle)]" | 
|         > | 
|             <view | 
|                 class="u-alert__icon" | 
|                 v-if="showIcon" | 
|             > | 
|                 <u-icon | 
|                     :name="iconName" | 
|                     size="18" | 
|                     :color="iconColor" | 
|                 ></u-icon> | 
|             </view> | 
|             <view | 
|                 class="u-alert__content" | 
|                 :style="[{ | 
|                     paddingRight: closable ? '20px' : 0 | 
|                 }]" | 
|             > | 
|                 <text | 
|                     class="u-alert__content__title" | 
|                     v-if="title" | 
|                     :style="[{ | 
|                         fontSize: $u.addUnit(fontSize), | 
|                         textAlign: center ? 'center' : 'left' | 
|                     }]" | 
|                     :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]" | 
|                 >{{ title }}</text> | 
|                 <text | 
|                     class="u-alert__content__desc" | 
|                     v-if="description" | 
|                     :style="[{ | 
|                         fontSize: $u.addUnit(fontSize), | 
|                         textAlign: center ? 'center' : 'left' | 
|                     }]" | 
|                     :class="[effect === 'dark' ? 'u-alert__text--dark' : `u-alert__text--${type}--light`]" | 
|                 >{{ description }}</text> | 
|             </view> | 
|             <view | 
|                 class="u-alert__close" | 
|                 v-if="closable" | 
|                 @tap.stop="closeHandler" | 
|             > | 
|                 <u-icon | 
|                     name="close" | 
|                     :color="iconColor" | 
|                     size="15" | 
|                 ></u-icon> | 
|             </view> | 
|         </view> | 
|     </u-transition> | 
| </template> | 
|   | 
| <script> | 
|     import props from './props.js'; | 
|     /** | 
|      * Alert  警告提示 | 
|      * @description 警告提示,展现需要关注的信息。 | 
|      * @tutorial https://www.uviewui.com/components/alertTips.html | 
|      *  | 
|      * @property {String}            title       显示的文字  | 
|      * @property {String}            type        使用预设的颜色  (默认 'warning' ) | 
|      * @property {String}            description 辅助性文字,颜色比title浅一点,字号也小一点,可选   | 
|      * @property {Boolean}            closable    关闭按钮(默认为叉号icon图标)  (默认 false ) | 
|      * @property {Boolean}            showIcon    是否显示左边的辅助图标   ( 默认 false ) | 
|      * @property {String}            effect      多图时,图片缩放裁剪的模式  (默认 'light' ) | 
|      * @property {Boolean}            center        文字是否居中  (默认 false ) | 
|      * @property {String | Number}    fontSize    字体大小  (默认 14 ) | 
|      * @property {Object}            customStyle    定义需要用到的外部样式 | 
|      * @event    {Function}        click       点击组件时触发 | 
|      * @example  <u-alert :title="title"  type = "warning" :closable="closable" :description = "description"></u-alert> | 
|      */ | 
|     export default { | 
|         name: 'u-alert', | 
|         mixins: [uni.$u.mpMixin, uni.$u.mixin, props], | 
|         data() { | 
|             return { | 
|                 show: true | 
|             } | 
|         }, | 
|         computed: { | 
|             iconColor() { | 
|                 return this.effect === 'light' ? this.type : '#fff' | 
|             }, | 
|             // 不同主题对应不同的图标 | 
|             iconName() { | 
|                 switch (this.type) { | 
|                     case 'success': | 
|                         return 'checkmark-circle-fill'; | 
|                         break; | 
|                     case 'error': | 
|                         return 'close-circle-fill'; | 
|                         break; | 
|                     case 'warning': | 
|                         return 'error-circle-fill'; | 
|                         break; | 
|                     case 'info': | 
|                         return 'info-circle-fill'; | 
|                         break; | 
|                     case 'primary': | 
|                         return 'more-circle-fill'; | 
|                         break; | 
|                     default:  | 
|                         return 'error-circle-fill'; | 
|                 } | 
|             } | 
|         }, | 
|         methods: { | 
|             // 点击内容 | 
|             clickHandler() { | 
|                 this.$emit('click') | 
|             }, | 
|             // 点击关闭按钮 | 
|             closeHandler() { | 
|                 this.show = false | 
|             } | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     @import "../../libs/css/components.scss"; | 
|   | 
|     .u-alert { | 
|         position: relative; | 
|         background-color: $u-primary; | 
|         padding: 8px 10px; | 
|         @include flex(row); | 
|         align-items: center; | 
|         border-top-left-radius: 4px; | 
|         border-top-right-radius: 4px; | 
|         border-bottom-left-radius: 4px; | 
|         border-bottom-right-radius: 4px; | 
|   | 
|         &--primary--dark { | 
|             background-color: $u-primary; | 
|         } | 
|   | 
|         &--primary--light { | 
|             background-color: #ecf5ff; | 
|         } | 
|   | 
|         &--error--dark { | 
|             background-color: $u-error; | 
|         } | 
|   | 
|         &--error--light { | 
|             background-color: #FEF0F0; | 
|         } | 
|   | 
|         &--success--dark { | 
|             background-color: $u-success; | 
|         } | 
|   | 
|         &--success--light { | 
|             background-color: #f5fff0; | 
|         } | 
|   | 
|         &--warning--dark { | 
|             background-color: $u-warning; | 
|         } | 
|   | 
|         &--warning--light { | 
|             background-color: #FDF6EC; | 
|         } | 
|   | 
|         &--info--dark { | 
|             background-color: $u-info; | 
|         } | 
|   | 
|         &--info--light { | 
|             background-color: #f4f4f5; | 
|         } | 
|   | 
|         &__icon { | 
|             margin-right: 5px; | 
|         } | 
|   | 
|         &__content { | 
|             @include flex(column); | 
|             flex: 1; | 
|   | 
|             &__title { | 
|                 color: $u-main-color; | 
|                 font-size: 14px; | 
|                 font-weight: bold; | 
|                 color: #fff; | 
|                 margin-bottom: 2px; | 
|             } | 
|   | 
|             &__desc { | 
|                 color: $u-main-color; | 
|                 font-size: 14px; | 
|                 flex-wrap: wrap; | 
|                 color: #fff; | 
|             } | 
|         } | 
|   | 
|         &__title--dark, | 
|         &__desc--dark { | 
|             color: #FFFFFF; | 
|         } | 
|   | 
|         &__text--primary--light, | 
|         &__text--primary--light { | 
|             color: $u-primary; | 
|         } | 
|   | 
|         &__text--success--light, | 
|         &__text--success--light { | 
|             color: $u-success; | 
|         } | 
|   | 
|         &__text--warning--light, | 
|         &__text--warning--light { | 
|             color: $u-warning; | 
|         } | 
|   | 
|         &__text--error--light, | 
|         &__text--error--light { | 
|             color: $u-error; | 
|         } | 
|   | 
|         &__text--info--light, | 
|         &__text--info--light { | 
|             color: $u-info; | 
|         } | 
|   | 
|         &__close { | 
|             position: absolute; | 
|             top: 11px; | 
|             right: 10px; | 
|         } | 
|     } | 
| </style> |