Commit e0bd31a64c8ea0452dba1c3e6b4f9a40594f587a
1 parent
e9932043
update Message
Message add closable func, and update params
Showing
6 changed files
with
97 additions
and
17 deletions
Show diff stats
examples/routers/message.vue
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | + <i-button @click.native="info">显示普通提示</i-button> | ||
| 3 | <i-button @click.native="success">显示成功提示</i-button> | 4 | <i-button @click.native="success">显示成功提示</i-button> |
| 4 | <i-button @click.native="warning">显示警告提示</i-button> | 5 | <i-button @click.native="warning">显示警告提示</i-button> |
| 5 | <i-button @click.native="error">显示错误提示</i-button> | 6 | <i-button @click.native="error">显示错误提示</i-button> |
| @@ -9,6 +10,17 @@ | @@ -9,6 +10,17 @@ | ||
| 9 | <script> | 10 | <script> |
| 10 | export default { | 11 | export default { |
| 11 | methods: { | 12 | methods: { |
| 13 | + info () { | ||
| 14 | +// this.$Message.info('这是一条普通提示'); | ||
| 15 | + this.$Message.success({ | ||
| 16 | + content: '这是一条普通提示2', | ||
| 17 | + duration: 500, | ||
| 18 | + onClose () { | ||
| 19 | + console.log(123) | ||
| 20 | + }, | ||
| 21 | + closable: true | ||
| 22 | + }) | ||
| 23 | + }, | ||
| 12 | success () { | 24 | success () { |
| 13 | this.$Message.success('这是一条成功的提示'); | 25 | this.$Message.success('这是一条成功的提示'); |
| 14 | }, | 26 | }, |
src/components/base/notification/notice.vue
| 1 | <template> | 1 | <template> |
| 2 | <transition :name="transitionName"> | 2 | <transition :name="transitionName"> |
| 3 | <div :class="classes" :style="styles"> | 3 | <div :class="classes" :style="styles"> |
| 4 | - <div :class="[baseClass + '-content']" ref="content" v-html="content"></div> | ||
| 5 | - <a :class="[baseClass + '-close']" @click="close" v-if="closable"> | ||
| 6 | - <i class="ivu-icon ivu-icon-ios-close-empty"></i> | ||
| 7 | - </a> | 4 | + <template v-if="type === 'notice'"> |
| 5 | + <div :class="[baseClass + '-content']" ref="content" v-html="content"></div> | ||
| 6 | + <a :class="[baseClass + '-close']" @click="close" v-if="closable"> | ||
| 7 | + <i class="ivu-icon ivu-icon-ios-close-empty"></i> | ||
| 8 | + </a> | ||
| 9 | + </template> | ||
| 10 | + <template v-if="type === 'message'"> | ||
| 11 | + <div :class="[baseClass + '-content']" ref="content"> | ||
| 12 | + <div :class="[baseClass + '-content-text']" v-html="content"></div> | ||
| 13 | + <a :class="[baseClass + '-close']" @click="close" v-if="closable"> | ||
| 14 | + <i class="ivu-icon ivu-icon-ios-close-empty"></i> | ||
| 15 | + </a> | ||
| 16 | + </div> | ||
| 17 | + </template> | ||
| 8 | </div> | 18 | </div> |
| 9 | </transition> | 19 | </transition> |
| 10 | </template> | 20 | </template> |
| @@ -19,6 +29,9 @@ | @@ -19,6 +29,9 @@ | ||
| 19 | type: Number, | 29 | type: Number, |
| 20 | default: 1.5 | 30 | default: 1.5 |
| 21 | }, | 31 | }, |
| 32 | + type: { | ||
| 33 | + type: String | ||
| 34 | + }, | ||
| 22 | content: { | 35 | content: { |
| 23 | type: String, | 36 | type: String, |
| 24 | default: '' | 37 | default: '' |
src/components/base/notification/notification.vue
| @@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
| 5 | :key="notice.name" | 5 | :key="notice.name" |
| 6 | :prefix-cls="prefixCls" | 6 | :prefix-cls="prefixCls" |
| 7 | :styles="notice.styles" | 7 | :styles="notice.styles" |
| 8 | + :type="notice.type" | ||
| 8 | :content="notice.content" | 9 | :content="notice.content" |
| 9 | :duration="notice.duration" | 10 | :duration="notice.duration" |
| 10 | :closable="notice.closable" | 11 | :closable="notice.closable" |
src/components/message/index.js
| @@ -28,7 +28,7 @@ function getMessageInstance () { | @@ -28,7 +28,7 @@ function getMessageInstance () { | ||
| 28 | return messageInstance; | 28 | return messageInstance; |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | -function notice (content, duration = defaultDuration, type, onClose) { | 31 | +function notice (content = '', duration = defaultDuration, type, onClose = function () {}, closable = false) { |
| 32 | if (!onClose) { | 32 | if (!onClose) { |
| 33 | onClose = function () { | 33 | onClose = function () { |
| 34 | 34 | ||
| @@ -52,7 +52,9 @@ function notice (content, duration = defaultDuration, type, onClose) { | @@ -52,7 +52,9 @@ function notice (content, duration = defaultDuration, type, onClose) { | ||
| 52 | <span>${content}</span> | 52 | <span>${content}</span> |
| 53 | </div> | 53 | </div> |
| 54 | `, | 54 | `, |
| 55 | - onClose: onClose | 55 | + onClose: onClose, |
| 56 | + closable: closable, | ||
| 57 | + type: 'message' | ||
| 56 | }); | 58 | }); |
| 57 | 59 | ||
| 58 | // 用于手动消除 | 60 | // 用于手动消除 |
| @@ -66,20 +68,50 @@ function notice (content, duration = defaultDuration, type, onClose) { | @@ -66,20 +68,50 @@ function notice (content, duration = defaultDuration, type, onClose) { | ||
| 66 | } | 68 | } |
| 67 | 69 | ||
| 68 | export default { | 70 | export default { |
| 69 | - info (content, duration, onClose) { | ||
| 70 | - return notice(content, duration, 'info', onClose); | 71 | + info (options) { |
| 72 | + const type = typeof options; | ||
| 73 | + if (type === 'string') { | ||
| 74 | + options = { | ||
| 75 | + content: options | ||
| 76 | + }; | ||
| 77 | + } | ||
| 78 | + return notice(options.content, options.duration, 'info', options.onClose, options.closable); | ||
| 71 | }, | 79 | }, |
| 72 | - success (content, duration, onClose) { | ||
| 73 | - return notice(content, duration, 'success', onClose); | 80 | + success (options) { |
| 81 | + const type = typeof options; | ||
| 82 | + if (type === 'string') { | ||
| 83 | + options = { | ||
| 84 | + content: options | ||
| 85 | + }; | ||
| 86 | + } | ||
| 87 | + return notice(options.content, options.duration, 'success', options.onClose, options.closable); | ||
| 74 | }, | 88 | }, |
| 75 | - warning (content, duration, onClose) { | ||
| 76 | - return notice(content, duration, 'warning', onClose); | 89 | + warning (options) { |
| 90 | + const type = typeof options; | ||
| 91 | + if (type === 'string') { | ||
| 92 | + options = { | ||
| 93 | + content: options | ||
| 94 | + }; | ||
| 95 | + } | ||
| 96 | + return notice(options.content, options.duration, 'warning', options.onClose, options.closable); | ||
| 77 | }, | 97 | }, |
| 78 | - error (content, duration, onClose) { | ||
| 79 | - return notice(content, duration, 'error', onClose); | 98 | + error (options) { |
| 99 | + const type = typeof options; | ||
| 100 | + if (type === 'string') { | ||
| 101 | + options = { | ||
| 102 | + content: options | ||
| 103 | + }; | ||
| 104 | + } | ||
| 105 | + return notice(options.content, options.duration, 'error', options.onClose, options.closable); | ||
| 80 | }, | 106 | }, |
| 81 | - loading (content, duration, onClose) { | ||
| 82 | - return notice(content, duration, 'loading', onClose); | 107 | + loading (options) { |
| 108 | + const type = typeof options; | ||
| 109 | + if (type === 'string') { | ||
| 110 | + options = { | ||
| 111 | + content: options | ||
| 112 | + }; | ||
| 113 | + } | ||
| 114 | + return notice(options.content, options.duration, 'loading', options.onClose, options.closable); | ||
| 83 | }, | 115 | }, |
| 84 | config (options) { | 116 | config (options) { |
| 85 | if (options.top) { | 117 | if (options.top) { |
src/components/notice/index.js
| @@ -71,7 +71,8 @@ function notice (type, options) { | @@ -71,7 +71,8 @@ function notice (type, options) { | ||
| 71 | transitionName: 'move-notice', | 71 | transitionName: 'move-notice', |
| 72 | content: content, | 72 | content: content, |
| 73 | onClose: onClose, | 73 | onClose: onClose, |
| 74 | - closable: true | 74 | + closable: true, |
| 75 | + type: 'notice' | ||
| 75 | }); | 76 | }); |
| 76 | } | 77 | } |
| 77 | 78 |
src/styles/components/message.less
| @@ -14,6 +14,18 @@ | @@ -14,6 +14,18 @@ | ||
| 14 | vertical-align: middle; | 14 | vertical-align: middle; |
| 15 | position: absolute; | 15 | position: absolute; |
| 16 | left: 50%; | 16 | left: 50%; |
| 17 | + | ||
| 18 | + &-close { | ||
| 19 | + position: absolute; | ||
| 20 | + right: 4px; | ||
| 21 | + top: 9px; | ||
| 22 | + color: #999; | ||
| 23 | + outline: none; | ||
| 24 | + | ||
| 25 | + i.@{icon-prefix-cls}{ | ||
| 26 | + .close-base(-3px); | ||
| 27 | + } | ||
| 28 | + } | ||
| 17 | } | 29 | } |
| 18 | 30 | ||
| 19 | &-notice-content { | 31 | &-notice-content { |
| @@ -25,6 +37,15 @@ | @@ -25,6 +37,15 @@ | ||
| 25 | box-shadow: @shadow-base; | 37 | box-shadow: @shadow-base; |
| 26 | background: #fff; | 38 | background: #fff; |
| 27 | display: block; | 39 | display: block; |
| 40 | + &-text{ | ||
| 41 | + display: inline-block; | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + &-notice-closable{ | ||
| 46 | + .@{message-prefix-cls}-notice-content-text{ | ||
| 47 | + padding-right: 32px; | ||
| 48 | + } | ||
| 28 | } | 49 | } |
| 29 | 50 | ||
| 30 | &-success .@{icon-prefix-cls} { | 51 | &-success .@{icon-prefix-cls} { |