教师/管理员标识与课程专区
教师/管理员标识与课程专区
教师标识
在user表中添加字段identity,用来表示用户身份。identity=0 (“student”)表示用户为普通用户,identity=1(“teacher”)表示用户为教师。
mysql的set和enum:MySQL的复合数据类型:ENUM和SET - 前后端的那点小事 - SegmentFault 思否
课程专区&课件上传
课程专区
我想首先要想好数据库的设计。
- user增加Identity字段,用来表示用户身份。identity=0 (“student”)表示用户为普通用户,identity=1(“teacher”)表示用户为教师。
- 增加tag表,这个一方面是为了方面筛选出对应某个老师的帖子,一方面也为后面的自定tag奠定基础。
tag表有五个字段- tagID 就是tag表的主键,
- Name 是tag的名字,
- Value 是tag对应的值(这个是方便tag和老师对应起来,所以这个字段可以为null),
- 还有一个是type 是tag的类型,可以定为enum类型,其中‘job’的求职分区的专用tag,‘course’是课程专区的专用tag。
- 最后一个是Num,我的设想是统计使用这个tag发的帖子数,然后用户如果用下拉菜单选择的话可以用Num降序排列。
课件上传
经过诸多探索,目前决定使用wl-ui来实现我们的课件上传。这个组件有诸多好处,其中最大的好处的它使用的vue版本和我们原来的项目匹配,使用的UI组件也是element-ui,这也是和原本项目契合的。
昨天在调时wl-explore的项目的时候发现会报错,发现是这个项目已经是三四年前的老项目了,所以有很多组件过期了,于是我更新了package.json,后来就可以顺利跑通了。当然,这只是个开端,如果把这个用在SSE_MARKET才是最重要的。
经过一系列思考和探索发现wl-ui的这个其实也不是很适合,或者说需要改得更简单才能用。
经过修改,现在已经运用上了,但是改了很多东西。甚至是对于那个历史,出现了一些bug。这个似乎也能放弃掉,这样看来,自己重新写一个的时间和改这个的时间可能会差不多:face_with_head_bandage:.
实在是搞不清楚这个前端本来的文件系统,只能放弃掉历史记录,换一个简单的方法了。
看来这种大组件的前端库不能兴起是有其原因的,现在想来其实我重新自己写一个还不一定会更慢。不过既然目前已经搞好了,那就只好尽量对代码进行删减,使其变得简洁且符合当前的逻辑。
逻辑设计
上传的话,考虑到安全性的问题,还是先上传到后端go服务器,然后go服务器再上传到腾讯云的COS存储桶。
下载的话就可以前端直接下载。
目前的规划是每个老师一个文件夹,文件夹的名字也是自动生成的(目前的想法是手机号当作文件夹名称)。这些文件夹不是放在根目录,放在名为course的目录下。
对于用手机号做文件夹名这种做法,万一老师手机号输入的是真的手机号,就容易把这些信息泄露出去,虽然可以用某些机制从前端和后端隐去(但是这样无疑又增加了代码量),所以还是拿邮箱的@之前的字符串当作文件夹名称比较好。
代码编写
前端
前端分为文件管理(教师)和文件下载(同学)两个页面。
为了方便上传,要实现一种多文件上传的功能
后端
对于查询和下载功能:
后端从存储桶查询响应文件夹的文件列表,转换为恰当的json格式后传给前端显示。
对于上传功能:
之前有写过,稍微改一下。
手机端
现在电脑端已经编写完毕了,那手机端该如何进行?
现在主要的计划是完成课程专区,但是课件的话准备不搞课件管理。
手机端和电脑端大概用的也是相同的结构,不过在页面布置上要区别一下,与后端的交互逻辑应该是不用改的。
不过首先遇到的问题就是帖子列表的问题。手机端有一个长期想解决但还是没有解决的问题,就是帖子列表没有像手机端那样进行构件化,导致想改动一个地方,就要改动三个vue文件。现在加上课程专区的话就要四个了,这样是不好的。所以下定决心今晚(2023.10.27)把帖子列表进行构件化。
这个构件化其实也不复杂,但是肯定要牵扯到父组件和子组件的交互接口问题,还是会涉及到一些细节问题的。但是感觉自己已经算是有点经验的了,希望这个重构工程可以顺利进行。
对于html的分离还是比较简单的,只要把响应的部分复制粘贴过去PostList.vue即可。然而js和css的分离可能要花点细功夫,才能比较优雅地抽丝剥茧。
可以先搞css,在之前我已经把一些home、save、history页面的css搞在了一个PostList.css的文件里,现在需要把帖子列表之外的样式提取出来直接放到HomeView.vue,然后PostList.css就只存放和帖子列表的css。或者你会说css乱一点没所谓,但在实际的项目运行过程中,已经屡次因为css文件太乱导致的css类重名覆盖bug,也就是两个类重名,就会导致样式覆盖。所以,整理一下css不但可以防止此类bug的发生,自己想要修改的时候也可以清晰明了地查阅,而不是稀里糊涂地乱试。
比如下图的list和item类(展示分区的样式)是在PostList.css里面的,将它们剥离直接放到HomeView.vue的style中。
对于js,其实思路也大致相同,也就是从html中看响应的部分引用调用了哪些函数,然后进行剥离。不过情况大概是要复杂一些的,因为存在函数间相互调用和不同部分交叉交互的联系。为了简单起见,直接使用ref的方式调用。
昨天晚上已经完成了重构,今天准备完成剩下的部分(课程专区和文件管理),然后就可以着手部署上线了。不过我在想的是在上线之前要不要先通过邮件通知大家此次升级维护?这个一方面可以避免在升级部署过程中影响到大家的使用,另一方面可以借此机会让大家知道还有软工集市这回事。