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 | 1 | <template> |
| 2 | 2 | <div> |
| 3 | + <i-button @click.native="info">显示普通提示</i-button> | |
| 3 | 4 | <i-button @click.native="success">显示成功提示</i-button> |
| 4 | 5 | <i-button @click.native="warning">显示警告提示</i-button> |
| 5 | 6 | <i-button @click.native="error">显示错误提示</i-button> |
| ... | ... | @@ -9,6 +10,17 @@ |
| 9 | 10 | <script> |
| 10 | 11 | export default { |
| 11 | 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 | 24 | success () { |
| 13 | 25 | this.$Message.success('这是一条成功的提示'); |
| 14 | 26 | }, | ... | ... |
src/components/base/notification/notice.vue
| 1 | 1 | <template> |
| 2 | 2 | <transition :name="transitionName"> |
| 3 | 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 | 18 | </div> |
| 9 | 19 | </transition> |
| 10 | 20 | </template> |
| ... | ... | @@ -19,6 +29,9 @@ |
| 19 | 29 | type: Number, |
| 20 | 30 | default: 1.5 |
| 21 | 31 | }, |
| 32 | + type: { | |
| 33 | + type: String | |
| 34 | + }, | |
| 22 | 35 | content: { |
| 23 | 36 | type: String, |
| 24 | 37 | default: '' | ... | ... |
src/components/base/notification/notification.vue
src/components/message/index.js
| ... | ... | @@ -28,7 +28,7 @@ function getMessageInstance () { |
| 28 | 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 | 32 | if (!onClose) { |
| 33 | 33 | onClose = function () { |
| 34 | 34 | |
| ... | ... | @@ -52,7 +52,9 @@ function notice (content, duration = defaultDuration, type, onClose) { |
| 52 | 52 | <span>${content}</span> |
| 53 | 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 | 68 | } |
| 67 | 69 | |
| 68 | 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 | 116 | config (options) { |
| 85 | 117 | if (options.top) { | ... | ... |
src/components/notice/index.js
src/styles/components/message.less
| ... | ... | @@ -14,6 +14,18 @@ |
| 14 | 14 | vertical-align: middle; |
| 15 | 15 | position: absolute; |
| 16 | 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 | 31 | &-notice-content { |
| ... | ... | @@ -25,6 +37,15 @@ |
| 25 | 37 | box-shadow: @shadow-base; |
| 26 | 38 | background: #fff; |
| 27 | 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 | 51 | &-success .@{icon-prefix-cls} { | ... | ... |