diff --git a/examples/routers/message.vue b/examples/routers/message.vue index df768d4..ecde42f 100644 --- a/examples/routers/message.vue +++ b/examples/routers/message.vue @@ -13,12 +13,19 @@ info () { // this.$Message.info('这是一条普通提示'); this.$Message.success({ - content: '这是一条普通提示2', + // content: '这是一条普通提示2', duration: 500, onClose () { // console.log(123) }, - closable: true + closable: true, + render (h) { + return h('Button',{ + props: { + type: 'primary' + } + }, '这是render出来的'); + } }) }, success () { diff --git a/examples/routers/notice.vue b/examples/routers/notice.vue index d09dd08..31b0125 100644 --- a/examples/routers/notice.vue +++ b/examples/routers/notice.vue @@ -1,6 +1,7 @@ <template> <div> <p>带描述信息</p> + <Button @click="normal(false)">普通</Button> <Button @click="info(false)">消息</Button> <Button @click="success(false)">成功</Button> <Button @click="warning(false)">警告</Button> @@ -16,15 +17,30 @@ <script> export default { methods: { + normal (nodesc) { + this.$Notice.open({ + title: 'google', + duration: 0, + desc: nodesc ? '' : '这里是通知描述这里,是通知描述这里是通知描述这里,是通知描述这里,是通知描述这里是通知描述这里是通知描述', + render (h) { + return h('span', {}, 'sdsdfsdf'); + } + }); + }, info (nodesc) { this.$Notice.info({ - title: '这是通知标题', - desc: nodesc ? '' : '这里是通知描述这里,是通知描述这里是通知描述这里,是通知描述这里,是通知描述这里是通知描述这里是通知描述' + // title: '这是通知标题', + duration: 0, + desc: nodesc ? '' : '这里是通知描述这里,是通知描述这里是通知描述这里,是通知描述这里,是通知描述这里是通知描述这里是通知描述', + render (h) { + return h('span', {}, 'sdsdfsdf'); + } }); }, success (nodesc) { this.$Notice.success({ title: '这是通知标题', + duration: 0, desc: nodesc ? '' : '这里是通知描述这里,是通知描述这里是通知描述这里,是通知描述这里,是通知描述这里是通知描述这里是通知描述' }); }, diff --git a/src/components/base/notification/index.js b/src/components/base/notification/index.js index 0c06aa2..134c036 100644 --- a/src/components/base/notification/index.js +++ b/src/components/base/notification/index.js @@ -5,7 +5,6 @@ Notification.newInstance = properties => { const _props = properties || {}; const Instance = new Vue({ - data: _props, render (h) { return h(Notification, { props: _props diff --git a/src/components/base/notification/notice.vue b/src/components/base/notification/notice.vue index 2a52d39..39e60a5 100644 --- a/src/components/base/notification/notice.vue +++ b/src/components/base/notification/notice.vue @@ -2,7 +2,12 @@ <transition :name="transitionName" @enter="handleEnter" @leave="handleLeave"> <div :class="classes" :style="styles"> <template v-if="type === 'notice'"> - <div :class="[baseClass + '-content']" ref="content" v-html="content"></div> + <div :class="contentClasses" ref="content" v-html="content"></div> + <div :class="contentWithIcon" ref="content"> + <render-cell + :render="renderFunc" + ></render-cell> + </div> <a :class="[baseClass + '-close']" @click="close" v-if="closable"> <i class="ivu-icon ivu-icon-ios-close-empty"></i> </a> @@ -10,6 +15,11 @@ <template v-if="type === 'message'"> <div :class="[baseClass + '-content']" ref="content"> <div :class="[baseClass + '-content-text']" v-html="content"></div> + <div :class="[baseClass + '-content-text']"> + <render-cell + :render="renderFunc" + ></render-cell> + </div> <a :class="[baseClass + '-close']" @click="close" v-if="closable"> <i class="ivu-icon ivu-icon-ios-close-empty"></i> </a> @@ -19,7 +29,11 @@ </transition> </template> <script> + import RenderCell from '../render'; export default { + components: { + RenderCell + }, props: { prefixCls: { type: String, @@ -36,6 +50,10 @@ type: String, default: '' }, + withIcon: Boolean, + render: { + type: Function + }, styles: { type: Object, default: function() { @@ -71,6 +89,9 @@ baseClass () { return `${this.prefixCls}-notice`; }, + renderFunc () { + return this.render || function () {}; + }, classes () { return [ this.baseClass, @@ -82,7 +103,22 @@ ]; }, contentClasses () { - return `${this.baseClass}-content`; + return [ + `${this.baseClass}-content`, + this.render !== undefined ? `${this.baseClass}-content-with-render` : '' + ]; + }, + contentWithIcon () { + return [ + this.withIcon ? `${this.prefixCls}-content-with-icon` : '', + this.render && !this.title && this.withIcon ? `${this.prefixCls}-content-with-render-notitle` : '' + ]; + }, + messageClasses () { + return [ + `${this.baseClass}-content`, + this.render !== undefined ? `${this.baseClass}-content-with-render` : '' + ]; } }, methods: { @@ -124,7 +160,8 @@ // check if with desc in Notice component if (this.prefixCls === 'ivu-notice') { - this.withDesc = this.$refs.content.querySelectorAll(`.${this.prefixCls}-desc`)[0].innerHTML !== ''; + let desc = this.$refs.content.querySelectorAll(`.${this.prefixCls}-desc`)[0]; + this.withDesc = this.render ? true : (desc ? desc.innerHTML !== '' : false); } }, beforeDestroy () { diff --git a/src/components/base/notification/notification.vue b/src/components/base/notification/notification.vue index f3750f6..70afd06 100644 --- a/src/components/base/notification/notification.vue +++ b/src/components/base/notification/notification.vue @@ -8,6 +8,8 @@ :type="notice.type" :content="notice.content" :duration="notice.duration" + :render="notice.render" + :withIcon="notice.withIcon" :closable="notice.closable" :name="notice.name" :transition-name="notice.transitionName" diff --git a/src/components/message/index.js b/src/components/message/index.js index 563a527..31ba4a6 100644 --- a/src/components/message/index.js +++ b/src/components/message/index.js @@ -31,7 +31,7 @@ function getMessageInstance () { return messageInstance; } -function notice (content = '', duration = defaults.duration, type, onClose = function () {}, closable = false) { +function notice (content = '', duration = defaults.duration, type, onClose = function () {}, closable = false, render = function () {}) { const iconType = iconTypes[type]; // if loading @@ -50,6 +50,7 @@ function notice (content = '', duration = defaults.duration, type, onClose = fun <span>${content}</span> </div> `, + render: render, onClose: onClose, closable: closable, type: 'message' @@ -89,7 +90,7 @@ export default { content: options }; } - return notice(options.content, options.duration, type, options.onClose, options.closable); + return notice(options.content, options.duration, type, options.onClose, options.closable, options.render); }, config (options) { if (options.top || options.top === 0) { diff --git a/src/components/notice/index.js b/src/components/notice/index.js index 7736222..a03dd22 100644 --- a/src/components/notice/index.js +++ b/src/components/notice/index.js @@ -33,6 +33,7 @@ function notice (type, options) { const desc = options.desc || ''; const noticeKey = options.name || `${prefixKey}${name}`; const onClose = options.onClose || function () {}; + const render = options.render; // todo const btn = options.btn || null; const duration = (options.duration === 0) ? 0 : options.duration || defaultDuration; @@ -42,9 +43,12 @@ function notice (type, options) { let content; - const with_desc = desc === '' ? '' : ` ${prefixCls}-with-desc`; + let withIcon; + + const with_desc = (options.render && !title) ? '' : desc === '' ? '' : ` ${prefixCls}-with-desc`; if (type == 'normal') { + withIcon = false; content = ` <div class="${prefixCls}-custom-content ${prefixCls}-with-normal${with_desc}"> <div class="${prefixCls}-title">${title}</div> @@ -53,6 +57,7 @@ function notice (type, options) { `; } else { const iconType = iconTypes[type]; + withIcon = true; content = ` <div class="${prefixCls}-custom-content ${prefixCls}-with-icon ${prefixCls}-with-${type}${with_desc}"> <span class="${prefixCls}-icon ${prefixCls}-icon-${type}"> @@ -63,13 +68,14 @@ function notice (type, options) { </div> `; } - instance.notice({ name: noticeKey.toString(), duration: duration, styles: {}, transitionName: 'move-notice', content: content, + withIcon: withIcon, + render: render, onClose: onClose, closable: true, type: 'notice' diff --git a/src/styles/components/notice.less b/src/styles/components/notice.less index 651e7c4..34b4e20 100644 --- a/src/styles/components/notice.less +++ b/src/styles/components/notice.less @@ -11,10 +11,17 @@ position: fixed; z-index: @zindex-notification; + &-content-with-icon{ + margin-left: 51px; + } + &-with-desc&-with-icon &-title{ + margin-left: 51px; + } + &-notice { margin-bottom: @notice-margin-bottom; padding: @notice-padding; - //border: 1px solid @border-color-split; + border: 1px solid @border-color-split; border-radius: @border-radius-small; box-shadow: @shadow-base; background: #fff; @@ -34,6 +41,12 @@ } } + &-content-with-render{ + .ivu-notice-desc{ + display: none; + } + } + &-with-desc{ .@{notice-prefix-cls}-notice-close{ top: 11px; @@ -41,8 +54,13 @@ } } + &-content-with-render-notitle{ + margin-left: 26px; + } + &-title { font-size: @font-size-base; + line-height: @font-size-base + 3; //fixed the bug that the bottom of some letters were hidden just like 'g' color: @title-color; padding-right: 10px; overflow: hidden; @@ -53,9 +71,6 @@ font-weight: bold; margin-bottom: 8px; } - &-with-desc&-with-icon &-title{ - margin-left: 51px; - } &-desc { font-size: 12px; -- libgit2 0.21.4