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