找回密码
 立即注册

QQ登录

只需一步,快速开始

phoben 讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-7-23 21:22  /   查看:18932  /  回复:78
本帖最后由 phoben 于 2023-2-28 11:59 编辑

PC版演示动图1.gif



因业务需要,要在应用中内置一个类似微信群的功能,需要根据项目自动创建群,自动拉取对应业务人员入群。
除此之外,还支持以下功能:

  • 编辑成员
  • @特定人员(企业微信会推送提醒)
  • 移动端能打开回复
  • 有未读消息提醒
  • 能隐藏群,有新消息时自动显示出来
  • 能支持表情和附件
  • 仿IM的我方和对方消息左右区分
  • 聊天框拉取项目信息



如果你恰好需要也在系统内实现这么一个功能,尤其是专为业务而生的聊天群,可以参考此贴;




一、数据库构建


       先看看数据库该怎么构建比较合理,这里我选择了用主子表的方式,主表存群信息,子表存聊天记录!


主表字段设计如下:
ID:系统自增
消息数量:记录群消息条数
群名称:文本字符
群成员:逗号隔开的用户名
隐藏成员:逗号隔开的用户名
关联项目类型:自定义项目类型编号,用来区分这个群是针对什么类型的业务;
项目编号:自定义项目编号,用来绑定某个业务编号;


子表字段设计如下:
ID:系统自增ID
群ID:所属主表ID
消息内容:具体的消息文本
已读人:逗号隔开的用户名
附件:文本字符串
特别提醒:逗号隔开的用户名
数据表设计没有什么特殊的,咱们功能少,其实不需要太多字段;


二、设计界面

最终界面效果如下:
PC版采用弹窗的方式
image.png98401488.png

移动端会收到消息提醒,点击卡片消息,则跳转到聊天窗口:
image.png346143187.png

image.png149248961.png

界面设计的难点剖析:
  • 双方信息需要左右分开:类似微信等IM软件,自己的消息颜色和位置都是不一样的;
  • 手机端和PC端共用一个页面:上面两张图其实是一个页面(如果做两个页面,每次维护起来非常麻烦);
  • @指定人的交互设计:这里需要用到一个插件,然后选择对应的人,最重要的是需要一点JS改变输入框的水印文字;


@指定人效果

image.png918789062.png

    首先来说页面怎么布局
    因为PC端和移动端共用聊天页面,但是明显PC端的右侧,是多了一个群列表的显示,所以我们需要做嵌套处理
    新建两个页面如下:
image.png611619567.png

项目聊天室   =>  这个页面是用来给PC端用的
聊天室          =>  这个页面是用来给手机端用的


PC页面里面用“页面容器”嵌入手机端页面即可。
实际上大家看到的PC弹窗中的聊天区域是子页面,如下图:
image.png386627806.png

设计器中的布局:
image.png383485717.png


聊天室子页面:
image.png424423522.png =>

布局这下大家清楚了,这里面没太多难点,就是需要做一些列隐藏的动态效果
例如:点击右上角图标可收起隐藏详情信息、点击“@”图标展开成员列表、成员列表失去焦点自动收起....
这些都是活字格自带的功能(除了成员列表用的是本人发布的一款插件“FYMENU”),只需要细心调整即可。

最终效果动图(手机端):

移动端消息回复演示动图.gif

图中的@效果运用了一些JS,这里分享给大家:
  1. var text  = "@" + Forguncy.Page.getCell("九宫格").getValue()
  2. $(".inputSend textarea").attr("placeholder",text);
复制代码


页面布局就告一段落,如果大家还有不明白的,可以留言交流。
剩下的环节,就是具体功能逻辑的实现了,这里总结出来给大家参考:

Q:如何实现发送消息?
A:发送消息可以写成服务端命令,传入群ID、消息内容、附件、@对象几个关键参数,然后就往数据表里增加数据即可;

image.png13111876.png image.png199582823.png

Q:如何实现@某个人并提醒?
A:前端刚说过了如何@一个或多个人,我是用FYMENU插件实现的,将特别提醒的对象用户名,用逗号隔开,直接传入发送消息的服务端命令里,然后在命令里检测这些人,给他们推送一条卡片消息即可

image.png555333861.png

Q:如何实现隐藏群?
A:隐藏群依靠一个字段实现,就是主表中的隐藏成员字段来记录隐藏该群的成员用户名,用逗号隔开,在前端页面,只需要在表格筛选里,把隐藏名单里有当前用户的筛掉就可以;


image.png380192565.png

PC端隐藏群动图

PC端聊天动图2.gif

如果还有不明白的,欢迎在下方提问,我会挑一些更新在帖子上祝大家工作顺利!

image.png592706603.png

评分

参与人数 13金币 +2554 满意度 +55 收起 理由
lijiakeji + 5
zoner + 5
爆笑虫子 + 5
太阳国度 + 5
棠诗鲮 + 5
和家 + 5
陈工 + 5
13794930121 + 5
Simon.hu + 666 赞一个!
Chelsey.Wang + 1888 很给力!
孤狼 + 5
随风 + 5
lovert + 5

查看全部评分

78 个回复

倒序浏览
phoben讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-8-1 21:53:41
推荐
本帖最后由 phoben 于 2023-2-28 12:00 编辑
aatest 发表于 2021-7-24 13:20
这个有有个很大的缺陷的, 其他人发送消息了, 本人的页面需要刷新才能看到别人发的消息吧。  如果是用表格 ...

tcp只能单向通信,如果实现通知,必须用socket,目前活字格服务端没有这个功能,希望官方能够尽早安排上!

从活字格8开始,官方已支持“服务端通知”功能
本质上就是socket协议,大家可以实现实时聊天了!!!

评分

参与人数 2满意度 +10 收起 理由
dlxubo + 5
随风 + 5

查看全部评分

回复 使用道具 举报
aatest
高级会员   /  发表于:2021-7-24 13:20:06
推荐
这个有有个很大的缺陷的, 其他人发送消息了, 本人的页面需要刷新才能看到别人发的消息吧。  如果是用表格定时刷新,貌似又会有其他问题,你这个实现了 消息实时刷新?
回复 使用道具 举报
lovert
银牌会员   /  发表于:2021-7-23 23:00:30
推荐
太牛了吧,明天把腾讯干倒
回复 使用道具 举报
phoben讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-7-24 00:31:25
5#
lh123 发表于 2021-7-23 22:08
你的作品真的太棒了。ui非常好看

谢谢夸奖
回复 使用道具 举报
phoben讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-7-24 00:31:33
6#
lovert 发表于 2021-7-23 23:00
太牛了吧,明天把腾讯干倒

别忘了投票哦
回复 使用道具 举报
liucy
中级会员   /  发表于:2021-7-24 09:04:46
7#
太牛了!必须投票
回复 使用道具 举报
phoben讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-7-24 09:12:07
8#
liucy 发表于 2021-7-24 09:04
太牛了!必须投票

谢谢支持!
回复 使用道具 举报
aatest
高级会员   /  发表于:2021-7-24 13:23:55
10#
已投
回复 使用道具 举报
renho活字格认证
银牌会员   /  发表于:2021-7-24 13:31:56
11#
膜拜大佬
回复 使用道具 举报
15285159209
中级会员   /  发表于:2021-7-24 23:40:42
12#
厉害啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部