layim+signalr2.0線上輕聊版解決方案

来源:http://www.cnblogs.com/tangxf/archive/2017/10/21/7703630.html
-Advertisement-
Play Games

本內容有版許可權制,僅提供學習交流參考等等,請勿隨便轉載或者代碼商用。 1 /** layui-v2.1.5 MIT License By http://www.layui.com */; 2 layui.define(["layer", "laytpl", "upload"], function ( ...


本內容有版許可權制,僅提供學習交流參考等等,請勿隨便轉載或者代碼商用。

     

  1 /** layui-v2.1.5 MIT License By http://www.layui.com */;
  2 layui.define(["layer", "laytpl", "upload"], function (i) {
  3     var a = "3.7.2 Pro",
  4         e = layui.$,
  5         t = layui.layer,
  6         n = layui.laytpl,
  7         l = layui.device(),
  8         s = "layui-show",
  9         o = "layim-this",
 10         d = 20,
 11         r = {},
 12         c = function () {
 13             this.v = a, e("body").on("click", "*[layim-event]", function (i) {
 14                 var a = e(this),
 15                     t = a.attr("layim-event");
 16                 ti[t] ? ti[t].call(this, a, i) : ""
 17             })
 18         };
 19     //layer+皮膚(Taffy,2017-10-17)
 20     t.config({
 21         skin: 'layer-ext-seaning'
 22     });
 23     c.prototype.config = function (i) {
 24         var a = [];
 25         if (layui.each(Array(5), function (i) {
 26             a.push(layui.cache.dir + "css/modules/layim/skin/" + (i + 1) + ".jpg")
 27         }), i = i || {}, i.skin = i.skin || [], layui.each(i.skin, function (i, e) {
 28             a.unshift(e)
 29         }), i.skin = a, i = e.extend({
 30             isfriend: !0,
 31             isgroup: !0,
 32             voice: "default.mp3"
 33         }, i), window.JSON && window.JSON.parse) return H(i), this
 34     }, c.prototype.on = function (i, a) {
 35         return "function" == typeof a && (r[i] ? r[i].push(a) : r[i] = [a]), this
 36     }, c.prototype.cache = function () {
 37         return j
 38     }, c.prototype.chat = function (i) {
 39         if (window.JSON && window.JSON.parse) return z(i), this
 40     }, c.prototype.setChatMin = function () {
 41         return N(), this
 42     }, c.prototype.setChatStatus = function (i) {
 43         var a = _();
 44         if (a) {
 45             var e = a.elem.find(".layim-chat-status");
 46             return e.html(i), this
 47         }
 48     }, c.prototype.getMessage = function (i) {
 49         return K(i), this
 50     }, c.prototype.notice = function (i) {
 51         return J(i), this
 52     }, c.prototype.add = function (i) {
 53         return M(i), this
 54     }, c.prototype.setFriendGroup = function (i) {
 55         return M(i, "setGroup"), this
 56     }, c.prototype.msgbox = function (i) {
 57         return V(i), this
 58     }, c.prototype.addList = function (i) {
 59         return U(i), this
 60     }, c.prototype.removeList = function (i) {
 61         return W(i), this
 62     }, c.prototype.setFriendStatus = function (i, a) {
 63         var t = e(".layim-friend" + i);
 64         t["online" === a ? "removeClass" : "addClass"]("layim-list-gray")
 65     }, c.prototype.content = function (i) {
 66         return layui.data.content(i)
 67     };
 68     var u = function (i) {
 69         var a = {
 70             friend: "該分組下暫無好友",
 71             group: "暫無群組",
 72             history: "暫無歷史會話"
 73         };
 74         return i = i || {}, i.item = i.item || "d." + i.type, ["{{# var length = 0; layui.each(" + i.item + ", function(i, data){ length++; }}", '<li layim-event="chat" data-type="' + i.type + '" data-index="{{ ' + (i.index || "i") + ' }}" data-id={{data.id}} class="layim-' + ("history" === i.type ? "{{i}}" : i.type + "{{data.id}}") + ' {{ data.status === "offline" ? "layim-list-gray" : "" }}"><img src="{{ data.avatar }}"><span>{{ data.username||data.groupname||data.name||"佚名" }}</span><p>{{ data.remark||data.sign||"" }}</p><span class="layim-msg-status">new</span></li>', "{{# }); if(length === 0){ }}", '<li class="layim-null">' + (a[i.type] || "暫無數據") + "</li>", "{{# } }}"].join("")
 75     },
 76         y = ['<div class="layui-layim-main">', '<div class="layui-layim-info">', '<div class="layui-layim-user">{{ d.mine.username }}</div>', '<div class="layui-layim-status">', '{{# if(d.mine.status === "online"){ }}', '<span class="layui-icon layim-status-online" layim-event="status" lay-type="show">&#xe617;</span>', '{{# } else if(d.mine.status === "hide") { }}', '<span class="layui-icon layim-status-hide" layim-event="status" lay-type="show">&#xe60f;</span>', "{{# } }}", '<ul class="layui-anim layim-menu-box">', '<li {{d.mine.status === "online" ? "class=layim-this" : ""}} layim-event="status" lay-type="online"><i class="layui-icon">&#xe618;</i><cite class="layui-icon layim-status-online">&#xe617;</cite>線上</li>', '<li {{d.mine.status === "hide" ? "class=layim-this" : ""}} layim-event="status" lay-type="hide"><i class="layui-icon">&#xe618;</i><cite class="layui-icon layim-status-hide">&#xe60f;</cite>隱身</li>', "</ul>", "</div>", '<input class="layui-layim-remark" placeholder="編輯簽名" value="{{ d.mine.remark||d.mine.sign||"" }}">', "</div>", '<ul class="layui-unselect layui-layim-tab{{# if(!d.base.isfriend || !d.base.isgroup){ }}', " layim-tab-two", '{{# } }}">', '<li class="layui-icon', "{{# if(!d.base.isfriend){ }}", " layim-hide", "{{# } else { }}", " layim-this", "{{# } }}", '" title="聯繫人" layim-event="tab" lay-type="friend">&#xe612;</li>', '<li class="layui-icon', "{{# if(!d.base.isgroup){ }}", " layim-hide", "{{# } else if(!d.base.isfriend) { }}", " layim-this", "{{# } }}", '" title="群組" layim-event="tab" lay-type="group">&#xe613;</li>', '<li class="layui-icon" title="歷史會話" layim-event="tab" lay-type="history">&#xe611;</li>', "</ul>", '<ul class="layui-unselect layim-tab-content {{# if(d.base.isfriend){ }}layui-show{{# } }} layim-list-friend">', '{{# layui.each(d.friend, function(index, item){ var spread = d.local["spread"+index]; }}', "<li>", '<h5 layim-event="spread" lay-type="{{ spread }}"><i class="layui-icon">{{# if(spread === "true"){ }}&#xe61a;{{# } else {  }}&#xe602;{{# } }}</i><span>{{ item.groupname||"未命名分組"+index }}</span><em>(<cite class="layim-count"> {{ (item.list||[]).length }}</cite>)</em></h5>', '<ul class="layui-layim-list {{# if(spread === "true"){ }}', " layui-show", '{{# } }}">', u({
 77             type: "friend",
 78             item: "item.list",
 79             index: "index"
 80         }), "</ul>", "</li>", "{{# }); if(d.friend.length === 0){ }}", '<li><ul class="layui-layim-list layui-show"><li class="layim-null">暫無聯繫人</li></ul>', "{{# } }}", "</ul>", '<ul class="layui-unselect layim-tab-content {{# if(!d.base.isfriend && d.base.isgroup){ }}layui-show{{# } }}">', "<li>", '<ul class="layui-layim-list layui-show layim-list-group">', u({
 81             type: "group"
 82         }), "</ul>", "</li>", "</ul>", '<ul class="layui-unselect layim-tab-content  {{# if(!d.base.isfriend && !d.base.isgroup){ }}layui-show{{# } }}">', "<li>", '<ul class="layui-layim-list layui-show layim-list-history">', u({
 83             type: "history"
 84         }), "</ul>", "</li>", "</ul>", '<ul class="layui-unselect layim-tab-content">', "<li>", '<ul class="layui-layim-list layui-show" id="layui-layim-search"></ul>', "</li>", "</ul>", '<ul class="layui-unselect layui-layim-tool">', '<li class="layui-icon layim-tool-search" layim-event="search" title="搜索">&#xe615;</li>', "{{# if(d.base.msgbox){ }}", '<li class="layui-icon layim-tool-msgbox" layim-event="msgbox" title="消息盒子">&#xe645;<span class="layui-anim"></span></li>', "{{# } }}", "{{# if(d.base.find){ }}", '<li class="layui-icon layim-tool-find" layim-event="find" title="查找">&#xe608;</li>', "{{# } }}", '<li class="layui-icon layim-tool-skin" layim-event="skin" title="更換背景">&#xe61b;</li>', "{{# if(!d.base.copyright){ }}", '<li class="layui-icon layim-tool-about" layim-event="about" title="關於">&#xe60b;</li>', "{{# } }}", "</ul>", '<div class="layui-layim-search"><input><label class="layui-icon" layim-event="closeSearch">&#x1007;</label></div>', "</div>"].join(""),
 85         m = ['<ul class="layui-layim-skin">', "{{# layui.each(d.skin, function(index, item){ }}", '<li><img layim-event="setSkin" src="{{ item }}"></li>', "{{# }); }}", '<li layim-event="setSkin"><cite>簡約</cite></li>', "</ul>"].join(""),
 86         f = ['<div class="layim-chat layim-chat-{{d.data.type}}{{d.first ? " layui-show" : ""}}">', '<div class="layui-unselect layim-chat-title">', '<div class="layim-chat-other">', '<img class="layim-{{ d.data.type }}{{ d.data.id }}" src="{{ d.data.avatar }}"><span class="layim-chat-username" layim-event="{{ d.data.type==="group" ? "groupMembers" : "" }}">{{ d.data.name||"佚名" }} {{d.data.temporary ? "<cite>臨時會話</cite>" : ""}} {{# if(d.data.type==="group"){ }} <em class="layim-chat-members"></em><i class="layui-icon">&#xe61a;</i> {{# } }}</span>', '<p class="layim-chat-status"></p>', "</div>", "</div>", '<div class="layim-chat-main">', "<ul></ul>", "</div>", '<div class="layim-chat-footer">', '<div class="layui-unselect layim-chat-tool" data-json="{{encodeURIComponent(JSON.stringify(d.data))}}">', '<span class="layui-icon layim-tool-face" title="選擇表情" layim-event="face">&#xe60c;</span>', "{{# if(d.base && d.base.uploadImage){ }}", '<span class="layui-icon layim-tool-image" title="上傳圖片" layim-event="image">&#xe60d;<input type="file" name="file"></span>', "{{# }; }}", "{{# if(d.base && d.base.uploadFile){ }}", '<span class="layui-icon layim-tool-image" title="發送文件" layim-event="image" data-type="file">&#xe61d;<input type="file" name="file"></span>', "{{# }; }}", "{{# if(d.base && d.base.isAudio){ }}", '<span class="layui-icon layim-tool-audio" title="發送網路音頻" layim-event="media" data-type="audio">&#xe6fc;</span>', "{{# }; }}", "{{# if(d.base && d.base.isVideo){ }}", '<span class="layui-icon layim-tool-video" title="發送網路視頻" layim-event="media" data-type="video">&#xe6ed;</span>', "{{# }; }}", "{{# layui.each(d.base.tool, function(index, item){ }}", '<span class="layui-icon layim-tool-{{item.alias}}" title="{{item.title}}" layim-event="extend" lay-filter="{{ item.alias }}">{{item.icon}}</span>', "{{# }); }}", "{{# if(d.base && d.base.chatLog){ }}", '<span class="layim-tool-log" layim-event="chatLog"><i class="layui-icon">&#xe60e;</i>聊天記錄</span>', "{{# }; }}", "</div>", '<div class="layim-chat-textarea"><textarea></textarea></div>', '<div class="layim-chat-bottom">', '<div class="layim-chat-send">', "{{# if(!d.base.brief){ }}", '<span class="layim-send-close" layim-event="closeThisChat">關閉</span>', "{{# } }}", '<span class="layim-send-btn" layim-event="send">發送</span>', '<span class="layim-send-set" layim-event="setSend" lay-type="show"><em class="layui-edge"></em></span>', '<ul class="layui-anim layim-menu-box">', '<li {{d.local.sendHotKey !== "Ctrl+Enter" ? "class=layim-this" : ""}} layim-event="setSend" lay-type="Enter"><i class="layui-icon">&#xe618;</i>按Enter鍵發送消息</li>', '<li {{d.local.sendHotKey === "Ctrl+Enter" ? "class=layim-this" : ""}} layim-event="setSend"  lay-type="Ctrl+Enter"><i class="layui-icon">&#xe618;</i>按Ctrl+Enter鍵發送消息</li>', "</ul>", "</div>", "</div>", "</div>", "</div>"].join(""),
 87         p = ['<div class="layim-add-box">', '<div class="layim-add-img"><img class="layui-circle" src="{{ d.data.avatar }}"><p>{{ d.data.name||"" }}</p></div>', '<div class="layim-add-remark">', '{{# if(d.data.type === "friend" && d.type === "setGroup"){ }}', "<p>選擇分組</p>", '{{# } if(d.data.type === "friend"){ }}', '<select class="layui-select" id="LAY_layimGroup">', "{{# layui.each(d.data.group, function(index, item){ }}", '<option value="{{ item.id }}">{{ item.groupname }}</option>', "{{# }); }}", "</select>", "{{# } }}", '{{# if(d.data.type === "group"){ }}', "<p>請輸入驗證信息</p>", '{{# } if(d.type !== "setGroup"){ }}', '<textarea id="LAY_layimRemark" placeholder="驗證信息" class="layui-textarea"></textarea>', "{{# } }}", "</div>", "</div>"].join(""),
 88         h = ['<li {{ d.mine ? "class=layim-chat-mine" : "" }} {{# if(d.cid){ }}data-cid="{{d.cid}}"{{# } }}>', '<div class="layim-chat-user"><img src="{{ d.avatar }}"><cite>', "{{# if(d.mine){ }}", '<i>{{ layui.data.date(d.timestamp) }}</i>{{ d.username||"佚名" }}', "{{# } else { }}", '{{ d.username||"佚名" }}<i>{{ layui.data.date(d.timestamp) }}</i>', "{{# } }}", "</cite></div>", '<div class="layim-chat-text">{{ layui.data.content(d.content||"&nbsp") }}</div>', "</li>"].join(""),
 89         v = '<li class="layim-{{ d.data.type }}{{ d.data.id }} layim-chatlist-{{ d.data.type }}{{ d.data.id }} layim-this" layim-event="tabChat"><img src="{{ d.data.avatar }}"><span>{{ d.data.name||"佚名" }}</span>{{# if(!d.base.brief){ }}<i class="layui-icon" layim-event="closeChat">&#x1007;</i>{{# } }}</li>',
 90         g = function (i) {
 91             return i < 10 ? "0" + (0 | i) : i
 92         };
 93     layui.data.date = function (i) {
 94         var a = new Date(i || new Date);
 95         return a.getFullYear() + "-" + g(a.getMonth() + 1) + "-" + g(a.getDate()) + " " + g(a.getHours()) + ":" + g(a.getMinutes()) + ":" + g(a.getSeconds())
 96     }, layui.data.content = function (i) {
 97         var a = function (i) {
 98             return new RegExp("\\n*\\[" + (i || "") + "(code|pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*", "g")
 99         };
100         return i = (i || "").replace(/&(?!#?[a-zA-Z0-9]+;)/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;").replace(/"/g, "&quot;").replace(/@(\S+)(\s+?|$)/g, '@<a href="javascript:;">$1</a>$2').replace(/face\[([^\s\[\]]+?)\]/g, function (i) {
101             var a = i.replace(/^face/g, "");
102             return '<img alt="' + a + '" title="' + a + '" src="' + X[a] + '">'
103         }).replace(/img\[([^\s]+?)\]/g, function (i) {
104             return '<img class="layui-layim-photos" src="' + i.replace(/(^img\[)|(\]$)/g, "") + '">'
105         }).replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g, function (i) {
106             var a = (i.match(/file\(([\s\S]+?)\)\[/) || [])[1],
107                 e = (i.match(/\)\[([\s\S]*?)\]/) || [])[1];
108             return a ? '<a class="layui-layim-file" href="' + a + '" download target="_blank"><i class="layui-icon">&#xe61e;</i><cite>' + (e || a) + "</cite></a>" : i
109         }).replace(/audio\[([^\s]+?)\]/g, function (i) {
110             return '<div class="layui-unselect layui-layim-audio" layim-event="playAudio" data-src="' + i.replace(/(^audio\[)|(\]$)/g, "") + '"><i class="layui-icon">&#xe652;</i><p>音頻消息</p></div>'
111         }).replace(/video\[([^\s]+?)\]/g, function (i) {
112             return '<div class="layui-unselect layui-layim-video" layim-event="playVideo" data-src="' + i.replace(/(^video\[)|(\]$)/g, "") + '"><i class="layui-icon">&#xe652;</i></div>'
113         }).replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g, function (i) {
114             var a = (i.match(/a\(([\s\S]+?)\)\[/) || [])[1],
115                 e = (i.match(/\)\[([\s\S]*?)\]/) || [])[1];
116             return a ? '<a href="' + a + '" target="_blank">' + (e || a) + "</a>" : i
117         }).replace(a(), "<$1 $2>").replace(a("/"), "</$1>").replace(/\n/g, "<br>")
118     };
119     var x, b, w, k, C, S = function (i, a, n) {
120         return i = i || {}, e.ajax({
121             url: i.url,
122             type: i.type || "get",
123             data: i.data,
124             dataType: i.dataType || "json",
125             cache: !1,
126             success: function (i) {
127                 0 == i.code ? a && a(i.data || {}) : t.msg(i.msg || (n || "Error") + ": LAYIM_NOT_GET_DATA", {
128                     time: 5e3
129                 })
130             }, error: function (i, a) {
131                 window.console && console.log && console.error("LAYIM_DATE_ERROR:" + a)
132             }
133         })
134     },
135         j = {
136             message: {},
137             chat: []
138         },
139         H = function (i) {
140             var a = i.init || {};
141             return mine = a.mine || {}, local = layui.data("layim")[mine.id] || {}, obj = {
142                 base: i,
143                 local: local,
144                 mine: mine,
145                 history: local.history || {}
146             }, create = function (a) {
147                 var t = a.mine || {},
148                     l = layui.data("layim")[t.id] || {},
149                     s = {
150                         base: i,
151                         local: l,
152                         mine: t,
153                         friend: a.friend || [],
154                         group: a.group || [],
155                         history: l.history || {}
156                     };
157                 j = e.extend(j, s), L(n(y).render(s)), (l.close || i.min) && T(), layui.each(r.ready, function (i, a) {
158                     a && a(s)
159                 })
160             }, j = e.extend(j, obj), i.brief ? layui.each(r.ready, function (i, a) {
161                 a && a(obj)
162             }) : void (a.url ? S(a, create, "INIT") : create(a))
163         },
164         L = function (i) {
165             return t.open({
166                 type: 1,
167                 area: ["260px", "520px"],
168                 skin: "layui-box layui-layim",
169                 title: "&#8203;",
170                 offset: "rb",
171                 id: "layui-layim",
172                 shade: !1,
173                 anim: 2,
174                 resize: !1,
175                 content: i,
176                 success: function (i) {
177                     x = i, R(i), j.base.right && i.css("margin-left", "-" + j.base.right), b && t.close(b.attr("times"));
178                     var a = [],
179                         n = i.find(".layim-list-history");
180                     n.find("li").each(function () {
181                         a.push(e(this).prop("outerHTML"))
182                     }), a.length > 0 && (a.reverse(), n.html(a.join(""))), A(), ti.sign()
183                 }, cancel: function (i) {
184                     T();
185                     var a = layui.data("layim")[j.mine.id] || {};
186                     return a.close = !0, layui.data("layim", {
187                         key: j.mine.id,
188                         value: a
189                     }), !1
190                 }
191             })
192         },
193         A = function () {
194             x.on("contextmenu", function (i) {
195                 return i.cancelBubble = !0, i.returnValue = !1, !1
196             });
197             var i = function () {
198                 t.closeAll("tips")
199             };
200             x.find(".layim-list-history").on("contextmenu", "li", function (a) {
201                 var n = e(this),
202                     l = '<ul data-id="' + n[0].id + '" data-index="' + n.data("index") + '"><li layim-event="menuHistory" data-type="one">移除該會話</li><li layim-event="menuHistory" data-type="all">清空全部會話列表</li></ul>';
203                 n.hasClass("layim-null") || (t.tips(l, this, {
204                     tips: 1,
205                     time: 0,
206                     anim: 5,
207                     fixed: !0,
208                     skin: "layui-box layui-layim-contextmenu",
209                     success: function (i) {
210                         var a = function (i) {
211                             ii(i)
212                         };
213                         i.off("mousedown", a).on("mousedown", a)
214                     }
215                 }), e(document).off("mousedown", i).on("mousedown", i), e(window).off("resize", i).on("resize", i))
216             })
217         },
218         T = function (i) {
219             return b && t.close(b.attr("times")), x && x.hide(), j.mine = j.mine || {}, t.open({
220                 type: 1,
221                 title: !1,
222                 id: "layui-layim-close",
223                 skin: "layui-box layui-layim-min layui-layim-close",
224                 shade: !1,
225                 closeBtn: !1,
226                 anim: 2,
227                 offset: "rb",
228                 resize: !1,
229                 content: '<img src="' + (j.mine.avatar || layui.cache.dir + "css/modules/layim/skin/logo.jpg") + '"><span>' + (i || j.base.title || "我的LayIM") + "</span>",
230                 move: "#layui-layim-close img",
231                 success: function (i, a) {
232                     b = i, j.base.right && i.css("margin-left", "-" + j.base.right), i.on("click", function () {
233                         t.close(a), x.show();
234                         var i = layui.data("layim")[j.mine.id] || {};
235                         delete i.close, layui.data("layim", {
236                             key: j.mine.id,
237                             value: i
238                         })
239                     })
240                 }
241             })
242         },
243         z = function (i) {
244             i = i || {};
245             var a = e("#layui-layim-chat"),
246                 l = {
247                     data: i,
248                     base: j.base,
249                     local: j.local
250                 };
251             if (!i.id) return t.msg("非法用戶");
252             if (a[0]) {
253                 var s = w.find(".layim-chat-list"),
254                     o = s.find(".layim-chatlist-" + i.type + i.id),
255                     d = w.find(".layui-layer-max").hasClass("layui-layer-maxmin"),
256                     c = a.children(".layim-chat-box");
257                 return "none" === w.css("display") && w.show(), k && t.close(k.attr("times")), 1 !== s.find("li").length || o[0] || (d || w.css("width", 800), s.css({
258                     height: w.height()
259                 }).show(), c.css("margin-left", "200px")), o[0] || (s.append(n(v).render(l)), c.append(n(f).render(l)), I(i), E()), O(s.find(".layim-chatlist-" + i.type + i.id)), o[0] || P(), $(i), Q(), C
260             }
261             l.first = !0;
262             var u = C = t.open({
263                 type: 1,
264                 area: "600px",
265                 skin: "layui-box layui-layim-chat",
266                 id: "layui-layim-chat",
267                 title: "&#8203;",
268                 shade: !1,
269                 maxmin: !0,
270                 offset: i.offset || "auto",
271                 anim: i.anim || 0,
272                 closeBtn: !j.base.brief && 1,
273                 content: n('<ul class="layui-unselect layim-chat-list">' + v + '</ul><div class="layim-chat-box">' + f + "</div>").render(l),
274                 success: function (a) {
275                     w = a, a.css({
276                         "min-width": "500px",
277                         "min-height": "420px"
278                     }), I(i), "function" == typeof i.success && i.success(a), Q(), R(a), $(i), P(), q(), layui.each(r.chatChange, function (i, a) {
279                         a && a(_())
280                     }), a.on("dblclick", ".layui-layim-photos", function () {
281                         var i = this.src;
282                         t.close(z.photosIndex), t.photos({
283                             photos: {
284                                 data: [{
285                                     alt: "大圖模式",
286                                     src: i
287                                 }]
288                             },
289                             shade: .01,
290                             closeBtn: 2,
291                             anim: 0,
292                             resize: !1,
293                             success: function (i, a) {
294                                 z.photosIndex = a
295                             }
296                         })
297                     })
298                 }, full: function (i) {
299                     t.style(u, {
300                         width: "100%",
301                         height: "100%"
302                     }, !0), E()
303                 }, resizing: E,
304                 restore: E,
305                 min: function () {
306                     return N(), !1
307                 }, end: function () {
308                     t.closeAll("tips"), w = null
309                 }
310             });
311             return u
312         },
313         I = function (i) {
314             e(".layim-" + i.type + i.id).each(function () {
315                 e(this).hasClass("layim-list-gray") && layui.layim.setFriendStatus(i.id, "offline")
316             })
317         },
318         E = function () {
319             var i = w.find(".layim-chat-list"),
320                 a = w.find(".layim-chat-main"),
321                 e = w.height();
322             i.css({
323                 height: e
324             }), a.css({
325                 height: e - 20 - 80 - 158
326             })
327         },
328         N = function (i) {
329             var a = i || _().data,
330                 n = layui.layim.cache().base;
331             w && !i && w.hide(), t.close(N.index), N.index = t.open({
332                 type: 1,
333                 title: !1,
334                 skin: "layui-box layui-layim-min",
335                 shade: !1,
336                 closeBtn: !1,
337                 anim: a.anim || 2,
338                 offset: "b",
339                 move: "#layui-layim-min",
340                 resize: !1,
341                 area: ["182px", "50px"],
342                 content: '<img id="layui-layim-min" src="' + a.avatar + '"><span>' + a.name + "</span>",
343                 success: function (a, l) {
344                     i || (k = a), n.minRight && t.style(l, {
345                         left: e(window).width() - a.outerWidth() - parseFloat(n.minRight)
346                     }), a.find(".layui-layer-content span").on("click", function () {
347                         t.close(l), i ? layui.each(j.chat, function (i, a) {
348                             z(a)
349                         }) : w.show(), i && (j.chat = [], Z())
350                     }), a.find(".layui-layer-content img").on("click", function (i) {
351                         ii(i)
352                     })
353                 }
354             })
355         },
356         M = function (i, a) {
357             return i = i || {}, t.close(M.index), M.index = t.open({
358                 type: 1,
359                 area: "430px",
360                 title: {
361                     friend: "添加好友",
362                     group: "加入群組"
363                 }[i.type] || "",
364                 shade: !1,
365                 resize: !1,
366                 btn: a ? ["確認", "取消"] : ["發送申請", "關閉"],
367                 content: n(p).render({
368                     data: {
369                         name: i.username || i.groupname,
370                         avatar: i.avatar,
371                         group: i.group || parent.layui.layim.cache().friend || [],
372                         type: i.type
373                     },
374                     type: a
375                 }),
376                 yes: function (e, t) {
377                     var n = t.find("#LAY_layimGroup"),
378                         l = t.find("#LAY_layimRemark");
379                     a ? i.submit && i.submit(n.val(), e) : i.submit && i.submit(n.val(), l.val(), e)
380                 }
381             })
382         },
383         O = function (i, a) {
384             i = i || e(".layim-chat-list ." + o);
385             var n = i.index() === -1 ? 0 : i.index(),
386                 l = ".layim-chat",
387                 d = w.find(l).eq(n),
388                 c = w.find(".layui-layer-max").hasClass("layui-layer-maxmin");
389             if (a) {
390                 i.hasClass(o) && O(0 === n ? i.next() : i.prev());
391                 var u = w.find(l).length;
392                 return 1 === u ? t.close(C) : (i.remove(), d.remove(), 2 === u && (w.find(".layim-chat-list").hide(), c || w.css("width", "600px"), w.find(".layim-chat-box").css("margin-left", 0)), !1)
393             }
394             i.addClass(o).siblings().removeClass(o), d.addClass(s).siblings(l).removeClass(s), d.find("textarea").focus(), layui.each(r.chatChange, function (i, a) {
395                 a && a(_())
	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...