EasyTalk 项目介绍

来源:互联网 发布:中昌数据什么时候开盘 编辑:程序博客网 时间:2024/06/08 03:08

EasyTalk 项目介绍

GitHub 地址
https://github.com/yangqingxian/thinkphp/tree/feature/EasyTalk

下载地址:
https://github.com/yangqingxian/thinkphp.git

设计初衷

自己动手设计该系统主要是公司内部需要一个能发布一些常见问题的系统,可以方便员工查看一些东西,该系统主要需要实现的功能有:

  • 可以限制人员编辑(针对人员)
  • 可以设置问题可修改和不可修改(针对问题)
  • 问题下可增加插件
  • 问题下可留言
  • 支持模糊搜索
  • 支持部门搜索
  • 提问可以@别人回答
  • 提问支持打标签
  • 支持标签搜索
  • 支持图片内容上传显示

然后又为了能使该系统能贴合进公司现有的管理系统,所以还需要加上员工使用邮箱和密码进行登录,或者直接从现有管理系统中通过token进行登录.本来是本着去找开源项目直接该的心态去完成这个任务的,但是本人性格实在是......不是自己的东西用起来总是感觉不方便,所以宁可自己从头开始搭建了,于是就用了10天时间完成了这个系统的第一版,大体能使用了,但是可能还存在这样或者那样的错误,继续迭代吧.

主要实现功能

每个用户在登录后都可以进行问题的发布,在问题中可以进行附件上传,图片上传等,而且在其中可以设置标签,@他人等功能,并且在其中可以设置可以编辑的人员,该人员具有编辑,删除该问题的权限.在问题发布成功后,用户可以进行回复,该回复会以socket的方式通知在线用户.

采用软件与服务

  • 开发框架:thinkphp 3.2.3
  • 数据库:MongoDB
  • 文件存储:OSS
  • 消息通信:WorkMan
  • 文本编辑js插件:umeditor
  • 辅助js:fist
  • 前端框架:Bootstrap

其中PHP操作MongoDB采用的扩展库是MongoDB,不是Mongo,所以请确保你有安装MongoDB扩展.

主体设计理念

本着不引入session的理念,所以在用户登录成功后,均使用用户的user_id/user_name/department_id/department_name以及后台的一个KEY组成token,在用户的所有操作中都需要提交这些字段值,在后台验证成功后才可以进行相应的操作,否则会视用户为违规操作,跳转到登录页面重新登录.

上传操作中,会先将附件上传至临时目录,在用户点击确认后,才会将附件转移到最终保存目录,所以只需定期清理临时文件夹就可以减少OSS上的文件冗余.

为了减少用户在多个页面之间进行跳转,而导致socket重连,所以在首页中引入iframe,所有操作均在该iframe中进行完成,保证除非用户关闭窗口,否则不会与后台socket进行重连.

而在iframe中,为了保证高度的自适应,所以是在嵌套iframe的页面中设置了两个隐藏域:

<input type="hidden" id="pageName" name="pageName"><input type="hidden" id="count" name="count">

再来通过在各个页面中修改这两个隐藏域的值,再来根据该隐藏域的值设置iframe的高度,以此来达到每个页面的高度随着内容进行修改的功能.

界面展示

登录页面

这里写图片描述

首页

这里写图片描述

新增问题页面

这里写图片描述

问题详细展示

这里写图片描述

@消息查看页面

这里写图片描述

发布问题回复页面

这里写图片描述

文件结构与功能

文件目录1 文件目录2 文件目录3 文件名称 文件功能 Application Home Controller FatherController 所有控制器父类,封装公共函数与统一验证 IndexController 首页控制器,负责读取用户未读消息数量并显示 MessageController 消息类控制器,负责接收用户回复与显示消息 QuestionController 文章(问题)控制器,主要负责文章的增删改查 UploadController 上传控制器,主要负责附件,图片的上传 UsersController 登录控制器,主要负责用户的登录 Fist static css common.css 公共样式文件 js addQuestion.js 新增问题时的js文件 editQuestion.js 编辑问题时执行的js文件 message.js socket通信时执行的js文件 search.js 搜索框相关的js操作 sendMessage.js 用户回复时执行的js操作 temp header.jpg 用户暂时统一采用该头像 template/Home/View Index index.html 首页,其中嵌套iframe Message getMessage.html 用户回复消息展示页面 getResponse.html 用户@消息展示页面 Question add.html 新增问题页面 detail.html 问题详细信息展示页面 edit.html 问题编辑页面 lst.html 问题列表展示页面 Users login.html 用户登录页面 ThinkPHP/Library Vendor MongoDB MongoDBOperate 采用MongoDB扩展编写的MongoDB数据库操作类 BaseOperate 底层操作类的基类,主要负责提供单例模式中的类实例对象 QuestionOperate 问题的底层操作类,为了减少控制器中代码数量,所以大部分功能均在该类中实现 MessageOperate 消息的底层操作类 OSS Common.class.php OSS配置类 Attachment.class.php 文件,图片上传到OSS时的类 umeditor umeditor.config.js umeditor配置文件 dialogs image image.js umeditor中图片上传操作js web-msg-sender Question.php 借助WorkerMan实现的socket通信

数据结构

该软件主要有4个数据库,各个数据库名称与主要功能如下:

  • Question:问题表,主要存储问题主体
  • Message:回复消息,主要存储一个用户对另一个用户的消息回复
  • Response:@他人的消息存储
  • Assistance:辅助参数存储

"Question"数据结构

字段名称 数据类型 说明 _id objectID MongoDB自动生成的内容 title string 问题标题 department array 该问题主要面向的部门 content string 问题内容主体 attachment array 附件地址 question_tag string 问题标题 info_user_ids array @人员名单 edit_user_ids array 可编辑该问题的人员名单 user_id int 该问题创建者id user_name string 创建者姓名 department_id string 创建者所属部门id department_name string 创建者所属部门名字 token string 验证令牌 create_time string 该问题创建时间

"Message"数据结构

字段名称 数据类型 说明 _id ObjectId 唯一标识 user_response string 用户回复消息内容主体 user_name string 发送该回复消息人姓名 user_id int 发送该回复消息人id department_id int 发送该回复消息人部门id department_name string 发送该回复消息部门名称 info_user_id array 接受该@消息的人id create_time string 创建时间 state int 是否已读,0为未读,1为已读

"Response"数据结构

字段名称 数据类型 说明 _id ObjectId 唯一标识 user_id int 接收该@消息的人id Question_id ObjectId 该@消息起源于哪个问题 title string 该问题标题 state int 是否已读 create_time string 创建时间 from_user_id int 该@消息由哪个用户发出的
原创粉丝点击