function.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. //菜单点击监听事件
  2. function clickItem(obj){
  3. if($(obj).hasClass("layui-nav-itemed")){
  4. $.each($(".layui-nav-item"), (index, item) => {
  5. $(item).find("a cite img").attr("src", "/images/indeHome/" + $(item).attr("title") + ".png");
  6. });
  7. $(obj).find("a cite img").attr("src", "/images/indeHome/" + $(obj).attr("title") + "_click.png");
  8. //个人信息特殊处理
  9. if($(obj).find("a cite").text() == "个人信息"){
  10. iframeClick(obj);
  11. }
  12. }else{
  13. $(obj).find("a cite img").attr("src", "/images/indeHome/" + $(obj).attr("title") + ".png");
  14. }
  15. }
  16. //iframe选择
  17. function iframeClick(obj){
  18. //上一级名称
  19. var parentName = $(obj).parent().parent().prev().find("cite").text();
  20. //点击名称
  21. var thisClickName = $(obj).find("cite").text();
  22. //路径上参数
  23. var idVal = $(obj).attr("idVal");
  24. $(".select_button").removeClass("check_div");
  25. var flag = false;
  26. $.each($(".select_button"), (index, item) => {
  27. if(index > 0){
  28. if($(item).find("span").html().indexOf(thisClickName) != -1){
  29. flag = true;
  30. return false;
  31. }
  32. }
  33. });
  34. if(flag){
  35. $(".center_top div[name="+ thisClickName +"]").click();
  36. } else {
  37. if(parentName == "报价单"){
  38. $(".center_top").append("<div onClick='switchMenu(this)' name="+ thisClickName +" src='/page/demandForSingleIndex?idVal="+ idVal +"' class=\"select_button check_div\">\n" +
  39. " <span>"+ thisClickName +"</span>\n" +
  40. " <div class=\"close_button\" onclick='removeThis(this)'><i class=\"layui-icon layui-icon-close\"></i></div>\n" +
  41. " </div>");
  42. $("iframe").attr("src", "/page/demandForSingleIndex?idVal=" + idVal);
  43. }
  44. if(thisClickName == "个人信息"){
  45. $(".center_top").append("<div onClick='switchMenu(this)' name='个人信息' src='/page/personalIndex' class=\"select_button check_div\">\n" +
  46. " <span>"+ thisClickName +"</span>\n" +
  47. " <div class=\"close_button\" onclick='removeThis(this)'><i class=\"layui-icon layui-icon-close\"></i></div>\n" +
  48. " </div>");
  49. $("iframe").attr("src", "/page/personalIndex");
  50. }
  51. }
  52. }
  53. //头部菜单切换
  54. function switchMenu(obj){
  55. $(".select_button").removeClass("check_div");
  56. $(obj).addClass("check_div")
  57. var srcVal = $(obj).attr("src");
  58. $("iframe").attr("src", srcVal);
  59. }
  60. //删除顶部选中菜单
  61. function removeThis(obj){
  62. window.event.cancelBubble = true;//阻止冒泡
  63. $(obj).parent().prev().click();
  64. $(obj).parent().remove();
  65. }
  66. //聊天显示
  67. var clickMessageType = false;
  68. function messageShow(){
  69. countSum = 0;//消息数量;
  70. $(".message_num").html(countSum);
  71. clickMessageType = true;
  72. layer.open({
  73. type: 1,
  74. title: false,
  75. offset: ["1366px","auto"],
  76. closeBtn: 2,
  77. anim: 2,
  78. shadeClose: true,
  79. content: $(".van-popup"),
  80. end: () => {
  81. clickMessageType = false;
  82. }
  83. })
  84. var height = $(".right_el_scrollbar")[0].scrollHeight;
  85. $(".chat__room-content-scroll .el-scrollbar__wrap").scrollTop(height);
  86. }
  87. //注册并登录环信账号
  88. function registerUser(){
  89. var options = {
  90. username: username.toLowerCase(),
  91. password: '123456',
  92. nickname: nickname,
  93. appKey: WebIM.config.appkey,
  94. success: function () { },
  95. error: function (err) {
  96. let errorData = JSON.parse(err.data);
  97. },
  98. };
  99. conn.registerUser(options);
  100. var options1 = {
  101. user: username.toLowerCase(),
  102. pwd: '123456',
  103. appKey: WebIM.config.appkey
  104. };
  105. conn.open(options1);
  106. //
  107. setTimeout(function (){
  108. let options = {
  109. nickname: nickname,
  110. avatarurl: headImg,
  111. }
  112. //修改用户信息
  113. conn.updateOwnUserInfo(options);
  114. //查询列表
  115. conn.getSessionList().then((res) => {
  116. console.log(res)
  117. $(".left_el_scrollbar div").remove();//删除所有记录重新渲染
  118. $.each(res.data.channel_infos, (index, item) => {
  119. var dataVal = JSON.parse(item.meta.payload);//最新消息
  120. var time = item.meta.timestamp;//发送消息时间戳
  121. var timeVal;//时间选择 如果大于当前时间则显示yyyy-mm-dd 如果相等显示mm:ss
  122. var userMap = {};
  123. var fromTo = dataVal.from;
  124. if(dataVal.from == username.toLowerCase()){
  125. fromTo = dataVal.to;
  126. }
  127. conn.fetchUserInfoById([fromTo], ['nickname', 'avatarurl']).then((res) => {
  128. $.each(res.data, (index, itemVal) => {
  129. userMap.nickname = itemVal.nickname;
  130. userMap.avatarurl = itemVal.avatarurl;
  131. });
  132. if(format(time).split("|")[0] == format(Date.parse(new Date())).split("|")[0]){
  133. timeVal = format(time).split("|")[1]
  134. } else {
  135. timeVal = format(time).split("|")[0]
  136. }
  137. //判断是图片还是文字
  138. if(dataVal.bodies[0].type == "txt"){
  139. $(".left_el_scrollbar").append("<div id='"+ fromTo +"' name='"+ userMap.nickname +"' onclick='clickMessage(this)' class=\"chat__room-session-item\"><img\n" +
  140. " src=\""+ userMap.avatarurl +"\"\n" +
  141. " alt=\""+ userMap.nickname +"头像\"><span class=\"chat__room-session-item-unread\"\n" +
  142. " style=\"display: none;\">0</span>\n" +
  143. " <div class=\"chat__room-user\"><p class=\"chat__room-user-title\"><span\n" +
  144. " title=\""+ userMap.nickname +"\">"+ userMap.nickname +"</span><span>"+ timeVal +"</span></p>\n" +
  145. " <p title=\""+ dataVal.bodies[0].msg +"\">"+ dataVal.bodies[0].msg +"</p></div>\n" +
  146. " </div>");
  147. } else {
  148. $(".left_el_scrollbar").append("<div id='"+ fromTo +"' name='"+ userMap.nickname +"' onclick='clickMessage(this)' class=\"chat__room-session-item\"><img\n" +
  149. " src=\""+ userMap.avatarurl +"\"\n" +
  150. " alt=\""+ userMap.nickname +"头像\"><span class=\"chat__room-session-item-unread\"\n" +
  151. " style=\"display: none;\">0</span>\n" +
  152. " <div class=\"chat__room-user\"><p class=\"chat__room-user-title\"><span\n" +
  153. " title=\""+ userMap.nickname +"\">"+ userMap.nickname +"</span><span>"+ timeVal +"</span></p>\n" +
  154. " <p title=\"[图片]\">[图片]</p></div>\n" +
  155. " </div>");
  156. }
  157. });
  158. });
  159. })
  160. },2000);
  161. }
  162. // 单聊发送文本消息
  163. function sendPrivateText(textVal) {
  164. if(userID == null){
  165. layer.msg("暂未选择聊天对象", {icon: 2});
  166. return false;
  167. }
  168. let id = conn.getUniqueId(); // 生成本地消息id
  169. let msg = new WebIM.message('txt', id); // 创建文本消息
  170. msg.set({
  171. msg: textVal, // 消息内容
  172. to: userID, // 接收消息对象(用户id)
  173. chatType: 'singleChat', // 设置为单聊
  174. success: function (id, serverMsgId) {
  175. $(".right_el_scrollbar").append("<div class=\"chat__room-message chat__room-message-reverse\"\n" +
  176. " cid=\""+ id +"\"><img\n" +
  177. " src=\""+ headImg +"\"\n" +
  178. " alt=\"avatar\" class=\"avatar\">\n" +
  179. " <div class=\"chat__room-message-text\">\n" +
  180. " <div class=\"chat__room-message-text-info\"><!----><!---->\n" +
  181. " <div class=\"chat__room-message-text-wrapper\"><p>"+ textVal +"</p>\n" +
  182. " <p style=\"display: none;\"></p><i class=\"arrow\"></i></div>\n" +
  183. " </div>\n" +
  184. " <span>"+ formatNotss(Date.parse(new Date())) +"</span></div><!----></div>")
  185. var height = $(".right_el_scrollbar")[0].scrollHeight;
  186. $(".chat__room-content-scroll .el-scrollbar__wrap").scrollTop(height + 200);
  187. },
  188. fail: function(e){
  189. console.log("失败");
  190. }
  191. });
  192. conn.send(msg.body);
  193. $(".chat__room-info-input textarea").val("");
  194. }
  195. //消息切换
  196. function clickMessage(obj){
  197. conn.mr_cache = [];
  198. var id = $(obj).attr("id");
  199. var name = $(obj).attr("name");
  200. var avatarUrl = $(obj).find("img").attr("src");
  201. userID = id;
  202. $(".chat__room-info-title h4").html(name);
  203. $(".right_el_scrollbar div").remove();
  204. $(obj).find(".chat__room-session-item-unread").html(0);
  205. $(obj).find(".chat__room-session-item-unread").hide();
  206. var options = {
  207. queue: id, //需特别注意queue属性值为大小写字母混合,以及纯大写字母,会导致拉取漫游为空数组,因此注意将属性值装换为纯小写
  208. isGroup: false,
  209. count: 10,
  210. success: function(res){
  211. //获取拉取成功的历史消息
  212. $.each(res, (index, item) => {
  213. var time = item.time;
  214. if(item.from != username.toLowerCase()){
  215. messageLoad(item, avatarUrl, time);
  216. } else {
  217. messageLoad(item, headImg, time);
  218. }
  219. var height = $(".right_el_scrollbar")[0].scrollHeight;
  220. $(".chat__room-content-scroll .el-scrollbar__wrap").scrollTop(height);
  221. });
  222. },
  223. fail: function(){}
  224. }
  225. conn.fetchHistoryMessages(options);
  226. var height = $(".right_el_scrollbar")[0].scrollHeight;
  227. console.log(height)
  228. $(".right_el_scrollbar").scrollTop(height);
  229. }
  230. //全屏预览图片
  231. function clickImg(obj){
  232. var imgUrl = $(obj).attr("src");
  233. layer.open({
  234. type: 1,
  235. title: false,
  236. area: ['80%', '80%'],
  237. closeBtn: 2,
  238. anim: 2,
  239. content: "<img src='"+ imgUrl +"' width='100%' height='100%'/>"
  240. })
  241. }
  242. //消息渲染
  243. function messageLoad(item, img, time){
  244. if(item.contentsType == "TEXT"){
  245. //判断是否是自己的消息
  246. if(item.from == username.toLowerCase()){
  247. $(".right_el_scrollbar").append("<div class=\"chat__room-message chat__room-message-reverse\"\n" +
  248. " cid=\""+ item.id +"\"><img\n" +
  249. " src=\""+ img +"\"\n" +
  250. " alt=\"avatar\" class=\"avatar\">\n" +
  251. " <div class=\"chat__room-message-text\">\n" +
  252. " <div class=\"chat__room-message-text-info\"><!----><!---->\n" +
  253. " <div class=\"chat__room-message-text-wrapper\"><p>"+ item.data +"</p>\n" +
  254. " <p style=\"display: none;\"></p><i class=\"arrow\"></i></div>\n" +
  255. " </div>\n" +
  256. " <span>"+ formatNotss(parseInt(time)) +"</span></div><!----></div>")
  257. } else {
  258. $(".right_el_scrollbar").append("<div class=\"chat__room-message\"\n" +
  259. " cid=\""+ item.id +"\"><img\n" +
  260. " src=\""+ img +"\"\n" +
  261. " alt=\"avatar\" class=\"avatar\">\n" +
  262. " <div class=\"chat__room-message-text\">\n" +
  263. " <div class=\"chat__room-message-text-info\"><!----><!---->\n" +
  264. " <div class=\"chat__room-message-text-wrapper\"><p>"+ item.data +"</p>\n" +
  265. " <p style=\"display: none;\"></p><i class=\"arrow\"></i></div>\n" +
  266. " </div>\n" +
  267. " <span>"+ formatNotss(parseInt(time)) +"</span></div><!----></div>")
  268. }
  269. } else {
  270. //判断是否是自己的消息
  271. if(item.from == username.toLowerCase()){
  272. $(".right_el_scrollbar").append("<div class=\"chat__room-message chat__room-message-reverse\"\n" +
  273. " ><img\n" +
  274. " src=\""+ img +"\"\n" +
  275. " alt=\"avatar\" class=\"avatar\"><!---->\n" +
  276. " <div class=\"chat__room-message-img\">\n" +
  277. " <div class=\"el-image\"><img onclick='clickImg(this)' alt=\"fileImage\"\n" +
  278. " src=\""+ item.url +"\"\n" +
  279. " class=\"el-image__inner el-image__preview\"\n" +
  280. " style=\"object-fit: cover;\"><!--v-if--></div>\n" +
  281. " <span>"+ formatNotss(parseInt(time)) +"</span></div>\n" +
  282. " </div>")
  283. } else {
  284. $(".right_el_scrollbar").append("<div class=\"chat__room-message\"\n" +
  285. " ><img\n" +
  286. " src=\""+ img +"\"\n" +
  287. " alt=\"avatar\" class=\"avatar\"><!---->\n" +
  288. " <div class=\"chat__room-message-img\">\n" +
  289. " <div class=\"el-image\"><img onclick='clickImg(this)' alt=\"fileImage\"\n" +
  290. " src=\""+ item.url +"\"\n" +
  291. " class=\"el-image__inner el-image__preview\"\n" +
  292. " style=\"object-fit: cover;\"><!--v-if--></div>\n" +
  293. " <span>"+ formatNotss(parseInt(time)) +"</span></div>\n" +
  294. " </div>")
  295. }
  296. }
  297. }