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