diff --git a/resources/assets/js/pages/manage/components/ChatInput/index.vue b/resources/assets/js/pages/manage/components/ChatInput/index.vue index b12a3e602..e63ab0194 100755 --- a/resources/assets/js/pages/manage/components/ChatInput/index.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/index.vue @@ -271,7 +271,6 @@ export default { showEmoji: false, emojiQuickShow: false, - emojiQuickTimer: null, emojiQuickKey: '', emojiQuickItems: [], @@ -296,7 +295,12 @@ export default { isSpecVersion: this.checkIOSVersion(), - timer: null, + emojiTimer: null, + scrollTimer: null, + selectTimer: null, + textTimer: null, + fileTimer: null, + moreTimer: null, fullInput: false, fullQuill: null, @@ -363,20 +367,13 @@ export default { 'cacheDialogs', 'dialogMsgs', - - 'keyboardType', - 'keyboardHeight', ]), - isEnterSend({enterSend, keyboardType, keyboardHeight, windowTouch}) { + isEnterSend({enterSend}) { if (typeof enterSend === "boolean") { return enterSend; } else { - // 如果是触屏设备而且虚拟键盘高度小于120时,考虑是实体键盘按键所以回车发送 - if (windowTouch && keyboardType === "show" && keyboardHeight < 120) { - return true; - } - return !windowTouch + return true; } }, @@ -586,8 +583,8 @@ export default { }, isFocus(val) { - if (this.timerScroll) { - clearInterval(this.timerScroll); + if (this.scrollTimer) { + clearInterval(this.scrollTimer); } if (val) { this.$emit('on-focus') @@ -596,11 +593,11 @@ export default { // ios11.0-11.3 对scrollTop及scrolIntoView解释有bug // 直接执行会导致输入框滚到底部被遮挡 } else if (this.windowPortrait) { - this.timerScroll = setInterval(() => { + this.scrollTimer = setInterval(() => { if (this.quill?.hasFocus()) { this.windowScrollY > 0 && $A.scrollIntoViewIfNeeded(this.$refs.editor); } else { - clearInterval(this.timerScroll); + clearInterval(this.scrollTimer); } }, 200); } @@ -701,8 +698,8 @@ export default { if (!range && document.activeElement) { // 修复光标会超出的问题 if (['ql-editor', 'ql-clipboard'].includes(document.activeElement.className)) { - this.timer && clearTimeout(this.timer) - this.timer = setTimeout(_ => { + this.selectTimer && clearTimeout(this.selectTimer) + this.selectTimer = setTimeout(_ => { this.quill.setSelection(document.activeElement.className === 'ql-editor' ? 0 : this.quill.getLength()) }, 100) return @@ -713,22 +710,26 @@ export default { // Update model if text changes this.quill.on('text-change', _ => { - if (this.maxlength > 0 && this.quill.getLength() > this.maxlength) { - this.quill.deleteText(this.maxlength, this.quill.getLength()); - } - let html = this.$refs.editor.firstChild.innerHTML - html = html.replace(/^(

\s*<\/p>)+|(

\s*<\/p>)+$/gi, '') - html = html.replace(/^(

<\/p>)+|(

<\/p>)+$/gi, '') - this.updateEmojiQuick(html) - this._content = html - this.$emit('input', this._content) - this.$nextTick(_ => { - const range = this.quill.getSelection(); - if (range) { - const endText = this.quill.getText(range.index); - /^\n\n$/.test(endText) && this.quill.deleteText(range.index, 1); + this.textTimer && clearTimeout(this.textTimer) + this.textTimer = setTimeout(_ => { + console.log(11); + if (this.maxlength > 0 && this.quill.getLength() > this.maxlength) { + this.quill.deleteText(this.maxlength, this.quill.getLength()); } - }) + let html = this.$refs.editor.firstChild.innerHTML + html = html.replace(/^(

\s*<\/p>)+|(

\s*<\/p>)+$/gi, '') + html = html.replace(/^(

<\/p>)+|(

<\/p>)+$/gi, '') + this.updateEmojiQuick(html) + this._content = html + this.$emit('input', this._content) + this.$nextTick(_ => { + const range = this.quill.getSelection(); + if (range) { + const endText = this.quill.getText(range.index); + /^\n\n$/.test(endText) && this.quill.deleteText(range.index, 1); + } + }) + }, 100) }) // Clipboard Matcher (保留图片跟空格,清除其余所以样式) @@ -761,6 +762,17 @@ export default { return delta }) + // Set enterkeyhint + this.$nextTick(_ => { + this.quill.root.addEventListener('keydown', e => { + if (e.key === '\r\r' && e.keyCode === 229) { + const length = this.quill.getSelection(true).index; + this.quill.insertText(length, "\r\n"); + } + }); + this.quill.root.setAttribute('enterkeyhint', 'send') + }) + // Ready event this.$emit('on-ready', this.quill) @@ -857,8 +869,8 @@ export default { this.emojiQuickShow = false return } - this.emojiQuickTimer && clearTimeout(this.emojiQuickTimer) - this.emojiQuickTimer = setTimeout(_ => { + this.emojiTimer && clearTimeout(this.emojiTimer) + this.emojiTimer = setTimeout(_ => { text = text.replace(/ /g," ") text = text.replace(/<[^>]+>/g, "") if (text @@ -1481,8 +1493,8 @@ export default { const {owner_id, type} = this.dialogData const permission = type === 'group' && [0, this.userId].includes(owner_id) if (this.taskId > 0 || permission) { - this.__getMoreTimer && clearTimeout(this.__getMoreTimer) - this.__getMoreTimer = setTimeout(_ => { + this.moreTimer && clearTimeout(this.moreTimer) + this.moreTimer = setTimeout(_ => { this.$store.dispatch("call", { url: 'users/search', data: {