内部人员管理系统复盘
简介
一般的人员管理系统(后台管理系统+小程序或H5)包括:
人员信息管理(人员信息多字段增删改查)
内部活动报名管理(活动信息增删改查、批量报名/取消报名、活动签到、活动剪影编辑展示与存储)
内部知识库管理(文件上传、文件预览、文件下载、文件搜索、文件查看记录)
内部积分管理(积分排名展示、积分记录查询、积分数据导出、积分兑换)
内部用户权限管理(用户角色管理、用户权限管理、机构层级管理)
PC端与小程序端用户登录(PC端通过小程序扫码登录、小程序通过微信登录)
全栈开发过程中的重点功能点
1.活动剪影内容的编辑展示与存储(富文本编辑器)
编辑
在内容的编辑功能用主流的富文本编辑器就可以,如wangEditor
、quill
、tinymce
等。
我这边使用的是wangEditor
,它的文档和api非常详细,而且有丰富的插件,非常适合当前的需求。
存储
存储有两种思路方案:
将富文本编辑器里的html代码弄成string字符串存储到数据库中,前端渲染时直接将html代码渲染到富文本编辑器中。
图片的话采用每次上传都将图片上传到服务器,然后在html里使用的是图片url的方式。
图片和文字分开存储,图片存在服务器文件夹里,文字(包括图片的链接)存到数据库里(longtext)。
弊端是当图片较多时会走特别多请求,还要兼顾图片是否上传但是又在文章中删除的情况,需要一个删除图片接口在这种情况下调用。
直接将富文本编辑器里的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是在小程序端与后台管理系统(网页端)之间建立一个长连接,当小程序端登录后,后台管理系统(网页端)就能够收到小程序端的登录信息,然后将用户信息存到本地缓存中,这样就能够在后台管理系统(网页端)上使用用户信息了。
小程序
对于小程序来说都是扫码获取二维码的信息,把这个信息通过后端接口进行请求,告诉后端是哪个用户扫码登录了,然后后端将这个用户信息再传给网页端,
这就是正常的扫码登录流程。