This commit is contained in:
fan
2021-03-11 22:46:11 +08:00
parent daeec230ab
commit a947018393
14 changed files with 216 additions and 54 deletions
+59 -19
View File
@@ -6951,6 +6951,7 @@ var editor_component = normalizeComponent(
/* harmony default export */ var messagesvue_type_script_lang_js_ = ({ /* harmony default export */ var messagesvue_type_script_lang_js_ = ({
name: "LemonMessages", name: "LemonMessages",
components: {}, components: {},
@@ -6970,6 +6971,13 @@ var editor_component = normalizeComponent(
return hoursTimeFormat(val); return hoursTimeFormat(val);
} }
}, },
loadingText: {
type: [String, Function]
},
loadendText: {
type: [String, Function],
default: "暂无更多消息"
},
messages: { messages: {
type: Array, type: Array,
default: function _default() { default: function _default() {
@@ -6978,6 +6986,7 @@ var editor_component = normalizeComponent(
} }
}, },
data: function data() { data: function data() {
this._lockScroll = false;
return { return {
_loading: false, _loading: false,
_loadend: false _loadend: false
@@ -6995,7 +7004,13 @@ var editor_component = normalizeComponent(
} }
}, [h("div", { }, [h("div", {
"class": ["lemon-messages__load", "lemon-messages__load--".concat(this._loadend ? "end" : "ing")] "class": ["lemon-messages__load", "lemon-messages__load--".concat(this._loadend ? "end" : "ing")]
}, [this._loadend ? this._renderLoadEnd() : this._renderLoading()]), this.messages.map(function (message, index) { }, [h("span", {
"class": "lemon-messages__loadend"
}, [isString(this.loadendText) ? this.loadendText : this.loadendText()]), h("span", {
"class": "lemon-messages__loading"
}, [this.loadingText ? isString(this.loadingText) ? this.loadingText : this.loadingText() : h("i", {
"class": "lemon-icon-loading lemonani-spin"
})])]), this.messages.map(function (message, index) {
var node = []; var node = [];
var tagName = "lemon-message-".concat(message.type); var tagName = "lemon-message-".concat(message.type);
var prev = _this.messages[index - 1]; var prev = _this.messages[index - 1];
@@ -7044,48 +7059,52 @@ var editor_component = normalizeComponent(
}, },
watch: {}, watch: {},
methods: { methods: {
_renderLoading: function _renderLoading() {
var h = this.$createElement;
return h("i", {
"class": "lemon-icon-loading lemonani-spin"
});
},
_renderLoadEnd: function _renderLoadEnd() {
var h = this.$createElement;
return h("span", ["\u6682\u65E0\u66F4\u591A\u6D88\u606F"]);
},
loaded: function loaded() { loaded: function loaded() {
this._loadend = true; this._loadend = true;
this.$forceUpdate(); this.$forceUpdate();
}, },
resetLoadState: function resetLoadState() { resetLoadState: function resetLoadState() {
var _this2 = this;
this._lockScroll = true;
this._loading = false; this._loading = false;
this._loadend = false; this._loadend = false;
setTimeout(function () {
_this2._lockScroll = false;
}, 200);
}, },
_handleScroll: function () { _handleScroll: function () {
var _handleScroll2 = _asyncToGenerator( var _handleScroll2 = _asyncToGenerator(
/*#__PURE__*/ /*#__PURE__*/
regeneratorRuntime.mark(function _callee2(e) { regeneratorRuntime.mark(function _callee2(e) {
var _this2 = this; var _this3 = this;
var target, hst; var target, hst;
return regeneratorRuntime.wrap(function _callee2$(_context2) { return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) { while (1) {
switch (_context2.prev = _context2.next) { switch (_context2.prev = _context2.next) {
case 0: case 0:
if (!this._lockScroll) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
target = e.target; target = e.target;
contextmenu.hide(); contextmenu.hide();
if (!(target.scrollTop == 0 && this._loading == false && this._loadend == false)) { if (!(target.scrollTop == 0 && this._loading == false && this._loadend == false)) {
_context2.next = 8; _context2.next = 10;
break; break;
} }
this._loading = true; this._loading = true;
_context2.next = 6; _context2.next = 8;
return this.$nextTick(); return this.$nextTick();
case 6: case 8:
hst = target.scrollHeight; hst = target.scrollHeight;
this.$emit("reach-top", this.$emit("reach-top",
/*#__PURE__*/ /*#__PURE__*/
@@ -7098,12 +7117,12 @@ var editor_component = normalizeComponent(
switch (_context.prev = _context.next) { switch (_context.prev = _context.next) {
case 0: case 0:
_context.next = 2; _context.next = 2;
return _this2.$nextTick(); return _this3.$nextTick();
case 2: case 2:
target.scrollTop = target.scrollHeight - hst; target.scrollTop = target.scrollHeight - hst;
_this2._loading = false; _this3._loading = false;
_this2._loadend = !!isEnd; _this3._loadend = !!isEnd;
case 5: case 5:
case "end": case "end":
@@ -7118,7 +7137,7 @@ var editor_component = normalizeComponent(
}; };
}()); }());
case 8: case 10:
case "end": case "end":
return _context2.stop(); return _context2.stop();
} }
@@ -7818,6 +7837,8 @@ var renderDrawerContent = function renderDrawerContent() {};
type: Boolean, type: Boolean,
default: false default: false
}, },
loadingText: [String, Function],
loadendText: [String, Function],
/** /**
* 消息时间格式化规则 * 消息时间格式化规则
@@ -8312,6 +8333,8 @@ var renderDrawerContent = function renderDrawerContent() {};
}, [h("lemon-messages", { }, [h("lemon-messages", {
"ref": "messages", "ref": "messages",
"attrs": { "attrs": {
"loading-text": this.loadingText,
"loadend-text": this.loadendText,
"hide-time": this.hideMessageTime, "hide-time": this.hideMessageTime,
"hide-name": this.hideMessageName, "hide-name": this.hideMessageName,
"time-format": this.messageTimeFormat, "time-format": this.messageTimeFormat,
@@ -8856,6 +8879,23 @@ var renderDrawerContent = function renderDrawerContent() {};
return this.$refs.editor.getFormatValue(); return this.$refs.editor.getFormatValue();
}, },
/**
* 清空某个联系人的消息切换到该联系人时会重新触发pull-messages事件
*/
clearMessages: function clearMessages(contactId) {
if (contactId) {
delete allMessages[contactId];
this.CacheMessageLoaded.remove(contactId);
this.CacheDraft.remove(contactId);
} else {
allMessages = {};
this.CacheMessageLoaded.remove();
this.CacheDraft.remove();
}
return true;
},
/** /**
* 返回所有消息 * 返回所有消息
* @return {Object<Contact.id,Message>} * @return {Object<Contact.id,Message>}
+1 -1
View File
File diff suppressed because one or more lines are too long
+59 -19
View File
@@ -6960,6 +6960,7 @@ var editor_component = normalizeComponent(
/* harmony default export */ var messagesvue_type_script_lang_js_ = ({ /* harmony default export */ var messagesvue_type_script_lang_js_ = ({
name: "LemonMessages", name: "LemonMessages",
components: {}, components: {},
@@ -6979,6 +6980,13 @@ var editor_component = normalizeComponent(
return hoursTimeFormat(val); return hoursTimeFormat(val);
} }
}, },
loadingText: {
type: [String, Function]
},
loadendText: {
type: [String, Function],
default: "暂无更多消息"
},
messages: { messages: {
type: Array, type: Array,
default: function _default() { default: function _default() {
@@ -6987,6 +6995,7 @@ var editor_component = normalizeComponent(
} }
}, },
data: function data() { data: function data() {
this._lockScroll = false;
return { return {
_loading: false, _loading: false,
_loadend: false _loadend: false
@@ -7004,7 +7013,13 @@ var editor_component = normalizeComponent(
} }
}, [h("div", { }, [h("div", {
"class": ["lemon-messages__load", "lemon-messages__load--".concat(this._loadend ? "end" : "ing")] "class": ["lemon-messages__load", "lemon-messages__load--".concat(this._loadend ? "end" : "ing")]
}, [this._loadend ? this._renderLoadEnd() : this._renderLoading()]), this.messages.map(function (message, index) { }, [h("span", {
"class": "lemon-messages__loadend"
}, [isString(this.loadendText) ? this.loadendText : this.loadendText()]), h("span", {
"class": "lemon-messages__loading"
}, [this.loadingText ? isString(this.loadingText) ? this.loadingText : this.loadingText() : h("i", {
"class": "lemon-icon-loading lemonani-spin"
})])]), this.messages.map(function (message, index) {
var node = []; var node = [];
var tagName = "lemon-message-".concat(message.type); var tagName = "lemon-message-".concat(message.type);
var prev = _this.messages[index - 1]; var prev = _this.messages[index - 1];
@@ -7053,48 +7068,52 @@ var editor_component = normalizeComponent(
}, },
watch: {}, watch: {},
methods: { methods: {
_renderLoading: function _renderLoading() {
var h = this.$createElement;
return h("i", {
"class": "lemon-icon-loading lemonani-spin"
});
},
_renderLoadEnd: function _renderLoadEnd() {
var h = this.$createElement;
return h("span", ["\u6682\u65E0\u66F4\u591A\u6D88\u606F"]);
},
loaded: function loaded() { loaded: function loaded() {
this._loadend = true; this._loadend = true;
this.$forceUpdate(); this.$forceUpdate();
}, },
resetLoadState: function resetLoadState() { resetLoadState: function resetLoadState() {
var _this2 = this;
this._lockScroll = true;
this._loading = false; this._loading = false;
this._loadend = false; this._loadend = false;
setTimeout(function () {
_this2._lockScroll = false;
}, 200);
}, },
_handleScroll: function () { _handleScroll: function () {
var _handleScroll2 = _asyncToGenerator( var _handleScroll2 = _asyncToGenerator(
/*#__PURE__*/ /*#__PURE__*/
regeneratorRuntime.mark(function _callee2(e) { regeneratorRuntime.mark(function _callee2(e) {
var _this2 = this; var _this3 = this;
var target, hst; var target, hst;
return regeneratorRuntime.wrap(function _callee2$(_context2) { return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) { while (1) {
switch (_context2.prev = _context2.next) { switch (_context2.prev = _context2.next) {
case 0: case 0:
if (!this._lockScroll) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
target = e.target; target = e.target;
contextmenu.hide(); contextmenu.hide();
if (!(target.scrollTop == 0 && this._loading == false && this._loadend == false)) { if (!(target.scrollTop == 0 && this._loading == false && this._loadend == false)) {
_context2.next = 8; _context2.next = 10;
break; break;
} }
this._loading = true; this._loading = true;
_context2.next = 6; _context2.next = 8;
return this.$nextTick(); return this.$nextTick();
case 6: case 8:
hst = target.scrollHeight; hst = target.scrollHeight;
this.$emit("reach-top", this.$emit("reach-top",
/*#__PURE__*/ /*#__PURE__*/
@@ -7107,12 +7126,12 @@ var editor_component = normalizeComponent(
switch (_context.prev = _context.next) { switch (_context.prev = _context.next) {
case 0: case 0:
_context.next = 2; _context.next = 2;
return _this2.$nextTick(); return _this3.$nextTick();
case 2: case 2:
target.scrollTop = target.scrollHeight - hst; target.scrollTop = target.scrollHeight - hst;
_this2._loading = false; _this3._loading = false;
_this2._loadend = !!isEnd; _this3._loadend = !!isEnd;
case 5: case 5:
case "end": case "end":
@@ -7127,7 +7146,7 @@ var editor_component = normalizeComponent(
}; };
}()); }());
case 8: case 10:
case "end": case "end":
return _context2.stop(); return _context2.stop();
} }
@@ -7827,6 +7846,8 @@ var renderDrawerContent = function renderDrawerContent() {};
type: Boolean, type: Boolean,
default: false default: false
}, },
loadingText: [String, Function],
loadendText: [String, Function],
/** /**
* 消息时间格式化规则 * 消息时间格式化规则
@@ -8321,6 +8342,8 @@ var renderDrawerContent = function renderDrawerContent() {};
}, [h("lemon-messages", { }, [h("lemon-messages", {
"ref": "messages", "ref": "messages",
"attrs": { "attrs": {
"loading-text": this.loadingText,
"loadend-text": this.loadendText,
"hide-time": this.hideMessageTime, "hide-time": this.hideMessageTime,
"hide-name": this.hideMessageName, "hide-name": this.hideMessageName,
"time-format": this.messageTimeFormat, "time-format": this.messageTimeFormat,
@@ -8865,6 +8888,23 @@ var renderDrawerContent = function renderDrawerContent() {};
return this.$refs.editor.getFormatValue(); return this.$refs.editor.getFormatValue();
}, },
/**
* 清空某个联系人的消息切换到该联系人时会重新触发pull-messages事件
*/
clearMessages: function clearMessages(contactId) {
if (contactId) {
delete allMessages[contactId];
this.CacheMessageLoaded.remove(contactId);
this.CacheDraft.remove(contactId);
} else {
allMessages = {};
this.CacheMessageLoaded.remove();
this.CacheDraft.remove();
}
return true;
},
/** /**
* 返回所有消息 * 返回所有消息
* @return {Object<Contact.id,Message>} * @return {Object<Contact.id,Message>}
+1 -1
View File
File diff suppressed because one or more lines are too long
+30
View File
@@ -396,6 +396,27 @@
<td width="100">default</td> <td width="100">default</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td width="150">theme</td>
<td width="350">主题</td>
<td width="150">default | blue</td>
<td width="100">default</td>
<td></td>
</tr>
<tr>
<td width="150">loadingText</td>
<td width="350">消息加载文字</td>
<td width="150">String | Function</td>
<td width="100"></td>
<td></td>
</tr>
<tr>
<td width="150">loadendText</td>
<td width="350">消息加载结束文字</td>
<td width="150">String | Function</td>
<td width="100">暂无更多消息</td>
<td></td>
</tr>
<tr> <tr>
<td width="150">avatarCricle</td> <td width="150">avatarCricle</td>
<td width="350">使用圆形头像</td> <td width="350">使用圆形头像</td>
@@ -594,6 +615,15 @@
<td>-</td> <td>-</td>
<td></td> <td></td>
</tr> </tr>
<tr>
<td>clearMessages</td>
<td>
清空某个联系人的本地消息记录重新切换到该联系人时会再次触发pull-messages事件Contact.id为空则清空所有
</td>
<td>Function(Contact.id)=>Boolean</td>
<td>-</td>
<td></td>
</tr>
<tr> <tr>
<td>getMessages</td> <td>getMessages</td>
<td>返回所有本地消息传入 Contact.id 则只返回与该联系人的消息</td> <td>返回所有本地消息传入 Contact.id 则只返回与该联系人的消息</td>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>Lemon IMUI</title><link href=css/index.6fdb6837.css rel=preload as=style><link href=js/chunk-vendors.e4810482.js rel=preload as=script><link href=js/index.94c3664b.js rel=preload as=script><link href=css/index.6fdb6837.css rel=stylesheet></head><body><noscript><strong>We're sorry but flat-im doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.e4810482.js></script><script src=js/index.94c3664b.js></script></body></html> <!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>Lemon IMUI</title><link href=css/index.5b3d3f23.css rel=preload as=style><link href=js/chunk-vendors.e4810482.js rel=preload as=script><link href=js/index.7d134a38.js rel=preload as=script><link href=css/index.5b3d3f23.css rel=stylesheet></head><body><noscript><strong>We're sorry but flat-im doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.e4810482.js></script><script src=js/index.7d134a38.js></script></body></html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -1
View File
@@ -151,7 +151,10 @@ export default {
IMUI.openDrawer(params); IMUI.openDrawer(params);
}, },
handlePullMessages(contact, next) { handlePullMessages(contact, next) {
next(MessagesData[contact.id], true); const { IMUI } = this.$refs;
setTimeout(() => {
next(MessagesData[contact.id], true);
}, 3000);
}, },
handleChangeContact() {}, handleChangeContact() {},
handleSend(message, next, file) { handleSend(message, next, file) {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "lemon-imui", "name": "lemon-imui",
"version": "1.6.15", "version": "1.7.0",
"main": "dist/index.umd.min.js", "main": "dist/index.umd.min.js",
"description": "基于 VUE2.0 的 IM 聊天组件", "description": "基于 VUE2.0 的 IM 聊天组件",
"homepage": "http://june000.gitee.io/lemon-im/", "homepage": "http://june000.gitee.io/lemon-im/",
+20 -1
View File
@@ -16,7 +16,7 @@ import lastContentRender from "../lastContentRender";
import MemoryCache from "utils/cache/memory"; import MemoryCache from "utils/cache/memory";
const allMessages = {}; let allMessages = {};
const emojiMap = {}; const emojiMap = {};
const toPx = val => { const toPx = val => {
return isString(val) ? val : `${val}px`; return isString(val) ? val : `${val}px`;
@@ -51,6 +51,8 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
loadingText: [String, Function],
loadendText: [String, Function],
/** /**
* 消息时间格式化规则 * 消息时间格式化规则
*/ */
@@ -495,6 +497,8 @@ export default {
<div class="lemon-vessel__left"> <div class="lemon-vessel__left">
<lemon-messages <lemon-messages
ref="messages" ref="messages"
loading-text={this.loadingText}
loadend-text={this.loadendText}
hide-time={this.hideMessageTime} hide-time={this.hideMessageTime}
hide-name={this.hideMessageName} hide-name={this.hideMessageName}
time-format={this.messageTimeFormat} time-format={this.messageTimeFormat}
@@ -956,6 +960,21 @@ export default {
getEditorValue() { getEditorValue() {
return this.$refs.editor.getFormatValue(); return this.$refs.editor.getFormatValue();
}, },
/**
* 清空某个联系人的消息,切换到该联系人时会重新触发pull-messages事件
*/
clearMessages(contactId) {
if (contactId) {
delete allMessages[contactId];
this.CacheMessageLoaded.remove(contactId);
this.CacheDraft.remove(contactId);
} else {
allMessages = {};
this.CacheMessageLoaded.remove();
this.CacheDraft.remove();
}
return true;
},
/** /**
* 返回所有消息 * 返回所有消息
* @return {Object<Contact.id,Message>} * @return {Object<Contact.id,Message>}
+38 -8
View File
@@ -1,5 +1,6 @@
<script> <script>
import { hoursTimeFormat } from "utils"; import { hoursTimeFormat } from "utils";
import { isString } from "utils/validate";
import contextmenu from "../directives/contextmenu"; import contextmenu from "../directives/contextmenu";
export default { export default {
name: "LemonMessages", name: "LemonMessages",
@@ -20,12 +21,20 @@ export default {
return hoursTimeFormat(val); return hoursTimeFormat(val);
}, },
}, },
loadingText: {
type: [String, Function],
},
loadendText: {
type: [String, Function],
default: "暂无更多消息",
},
messages: { messages: {
type: Array, type: Array,
default: () => [], default: () => [],
}, },
}, },
data() { data() {
this._lockScroll = false;
return { return {
_loading: false, _loading: false,
_loadend: false, _loadend: false,
@@ -40,7 +49,20 @@ export default {
`lemon-messages__load--${this._loadend ? "end" : "ing"}`, `lemon-messages__load--${this._loadend ? "end" : "ing"}`,
]} ]}
> >
{this._loadend ? this._renderLoadEnd() : this._renderLoading()} <span class="lemon-messages__loadend">
{isString(this.loadendText) ? this.loadendText : this.loadendText()}
</span>
<span class="lemon-messages__loading">
{this.loadingText ? (
isString(this.loadingText) ? (
this.loadingText
) : (
this.loadingText()
)
) : (
<i class="lemon-icon-loading lemonani-spin" />
)}
</span>
</div> </div>
{this.messages.map((message, index) => { {this.messages.map((message, index) => {
const node = []; const node = [];
@@ -89,21 +111,20 @@ export default {
}, },
watch: {}, watch: {},
methods: { methods: {
_renderLoading() {
return <i class="lemon-icon-loading lemonani-spin" />;
},
_renderLoadEnd() {
return <span>暂无更多消息</span>;
},
loaded() { loaded() {
this._loadend = true; this._loadend = true;
this.$forceUpdate(); this.$forceUpdate();
}, },
resetLoadState() { resetLoadState() {
this._lockScroll = true;
this._loading = false; this._loading = false;
this._loadend = false; this._loadend = false;
setTimeout(() => {
this._lockScroll = false;
}, 200);
}, },
async _handleScroll(e) { async _handleScroll(e) {
if (this._lockScroll) return;
const { target } = e; const { target } = e;
contextmenu.hide(); contextmenu.hide();
if ( if (
@@ -152,6 +173,15 @@ export default {
text-align center text-align center
color #999 color #999
line-height 30px line-height 30px
.lemon-messages__loading
.lemon-messages__loadend
display none
+m(ing) +m(ing)
font-size 22px .lemon-icon-loading
font-size 22px
.lemon-messages__loading
display block
+m(end)
.lemon-messages__loadend
display block
</style> </style>