Skip to content

内部人员管理系统复盘

简介

一般的人员管理系统(后台管理系统+小程序或H5)包括:

  1. 人员信息管理(人员信息多字段增删改查)

  2. 内部活动报名管理(活动信息增删改查、批量报名/取消报名、活动签到、活动剪影编辑展示与存储)

  3. 内部知识库管理(文件上传、文件预览、文件下载、文件搜索、文件查看记录)

  4. 内部积分管理(积分排名展示、积分记录查询、积分数据导出、积分兑换)

  5. 内部用户权限管理(用户角色管理、用户权限管理、机构层级管理)

  6. PC端与小程序端用户登录(PC端通过小程序扫码登录、小程序通过微信登录)

全栈开发过程中的重点功能点

1.活动剪影内容的编辑展示与存储(富文本编辑器)

编辑

在内容的编辑功能用主流的富文本编辑器就可以,如wangEditorquilltinymce等。

我这边使用的是wangEditor,它的文档和api非常详细,而且有丰富的插件,非常适合当前的需求。

存储

存储有两种思路方案:

  1. 将富文本编辑器里的html代码弄成string字符串存储到数据库中,前端渲染时直接将html代码渲染到富文本编辑器中。

    图片的话采用每次上传都将图片上传到服务器,然后在html里使用的是图片url的方式。

    图片和文字分开存储,图片存在服务器文件夹里,文字(包括图片的链接)存到数据库里(longtext)。

    弊端是当图片较多时会走特别多请求,还要兼顾图片是否上传但是又在文章中删除的情况,需要一个删除图片接口在这种情况下调用。

  2. 直接将富文本编辑器里的html代码包括图片弄成一个完整的html文件,当作正常的文件上传到服务器当中

    图片是base64编码的格式,直接与文字一起存到服务器的数据库中。

    弊端是图片是base64编码的(base64格式下的图片大小比原本图片大小大概多三分之一),如果图片多会导致整个html文件大小过大。

展示

在网页端展示时:直接将html代码渲染到富文本编辑器中即可。

在小程序端展示时

如果是使用第一种存储方案,小程序就需要先去通过接口请求数据库中对应的文章html字符串,然后通过vue中的v-html指令渲染到页面上。

如果是使用第二种存储方案,小程序直接就通过web-view组件去展示,直接将文章的后端html地址传给该组件就能够直接展示,前提是在小程序后台管理那边设置业务域名白名单成功,不然也没得展示。

2.文件上传与预览

文件上传

文件上传主要还是单文件上传大文件分片上传断点续传,考虑到一般内部使用的系统基本也不可能有重复的文件要上传,所以就没搞快传功能。

使用单文件上传还是大文件分片上传的文件大小边界设定是10MB,小于10MB的文件使用单文件上传,大于10MB的文件使用大文件分片上传。

单文件上传

用UI库里的组件uploader或者自己自定义上传请求到服务器,服务器接收二进制文件并且存到本地或者存到对应oss服务器中,上传成功后将文件的url存到数据库中。

注意自定义请求中不要自己设定请求头,因为上传组件已经帮你设定好了请求头,否则会导致文件上传失败(报400错误)。

大文件分片上传

先将文件切割成若干个小文件,然后将这些同一个文件分割出来的小文件上传到服务器,服务器接收这些小文件时做好统一的标识,可以将这些小文件存到同一个文件夹中。

等到前端将小文件上传完(可以是前端传点参数告诉后端是否上传完毕)后再将这些小文件进行拼接,最后拼接成一个完整的文件。

断点续传

断点续传就是在上传文件时,如果上传失败或者中途中断,可以从上次中断的地方继续上传,而不是从头开始上传。

首先需要得到这个文件的唯一标识,才能知道是不是这个文件中断没传完,可以使用MD5算法得到文件的唯一标识。

还需要大文件分片上传时尽量按顺序上传,这样就可以直接在服务器中找到上次中断的地方,然后前端从对应的小文件块继续上传后续的小文件块。

文件预览

文件预览就要分成很多类,因为文件有很多类型,如图片、视频、PPT、word文档、PDF等等。

图片

图片的预览在网页与小程序中都直接使用image组件就可以了,因为图片的预览是直接在小程序端展示,所以不需要后端做什么处理,直接将图片的url传给image组件就可以了。

视频

视频的预览有限制,比如网页端的video元素正常只能预览h264编码格式的视频,小程序也不支持H.265(HEVC)编码的视频播放‌。

在当前这个项目中没有搞视频文件上传后端后进行转码存储,而是直接在前端进行限制,使用MP4Box这个库对视频进行分析,如果分析出视频不是h264的就不让用户上传。

后端使用静态资源请求处理器ResourceHttpRequestHandler能够自动将视频文件进行分片,前端就能够不需要下载整个文件再预览,而是有进度条的加载,加快用户的预览体验。

PPT、word文档、PDF

这些文件的预览在小程序中可以使用web-view组件,将文件的url传给该组件就能够直接展示,前提是在小程序后台管理那边设置业务域名白名单成功,不然也没得展示。

在网页端预览的话,需要使用vue-office库,它能够直接预览这三种文件。

3.扫码登录

这个项目的后台管理系统(网页端)设计成只能通过小程序扫码登录,需要再小程序上登录后,再扫码登录后台管理系统。

一般扫码有两种开发方案,一种是轮询,另一种是websocket。

轮询

轮询是在后台管理系统(网页端)上每隔一段时间去请求后端接口,看是否有用户登录,如果有用户登录就将用户信息返回给后台管理系统(网页端),然后后台管理系统(网页端)就能够拿到用户信息,然后将用户信息存到本地缓存中,这样就能够在后台管理系统(网页端)上使用用户信息了。

websocket

websocket是在小程序端与后台管理系统(网页端)之间建立一个长连接,当小程序端登录后,后台管理系统(网页端)就能够收到小程序端的登录信息,然后将用户信息存到本地缓存中,这样就能够在后台管理系统(网页端)上使用用户信息了。

小程序

对于小程序来说都是扫码获取二维码的信息,把这个信息通过后端接口进行请求,告诉后端是哪个用户扫码登录了,然后后端将这个用户信息再传给网页端,

这就是正常的扫码登录流程。