2021SC@SDUSC
早在第一篇博客中,我就声明过,我在小组中主要需要分析用户行为相关
用户行为分析,一般就是指从各个维度去看用户对于产品在某些指标上的反馈。
用户首页的种种功能,是能够让用户获取反馈的前提
这一部分的代码,主要集中在user.js这个文件中
用户首页分为普通用户和管理员用户两种模式
这次主要分析的是管理员用户
使用的数据库为member
constructor(ctx) { super(ctx); this.db = this.model('cmswing/member'); this.tactive = 'user'; }
将数据库中的start和length强制转化为int类型
async userlistAction() { const gets = this.get(); const start = parseInt(gets.start); const length = parseInt(gets.length); const draw = gets.draw; const key = gets['search[value]'];
对用户最后登陆时间和登录IP做出更新
然后将其作为用户列表的数据存储进来
const userList = await this.db.join({ table: 'customer', join: 'left', as: 'u', on: ['id', 'user_id'] }).field('id,username,score,login,last_login_ip,last_login_time,status,u.real_name,u.group_id,u.balance').limit(start, length).where({username: ['like', '%' + key + '%'], status: ['>', -1]}).order('id DESC').countSelect(); userList.data.forEach(v => { v.last_login_time = times(v.last_login_time); v.last_login_ip = _int2iP(v.last_login_ip); });
join的用法是把数组转换为字符串,且不会改变原始数组
具体可以参考JavaScript Array join() 方法
则,本网页的数据属性就变为如下所示的情况
最后返回这个刚更新好的数据属性
const data = { 'draw': draw, 'recordsTotal': userList.count, 'recordsFiltered': userList.count, 'data': userList.data }; return this.json(data); }
从数据库中获取当前使用者的ID,初始化一个用户对象
如果,这个用户属于管理者,则有权限显示接下来的内容
接着可以开始获取会员组的名单、管理员组的名单
最后将此页面标题设为“个人信息”
async showuserAction() { const id = this.get('id'); const user = await this.model('member').find(id); this.assign('user', user); if (user.is_admin == 1) { const roleid = await this.model('auth_user_role').where({user_id: user.id}).getField('role_id', true); this.assign('roleid', roleid); } const usergroup = await this.model('member_group').select(); this.assign('usergroup', usergroup); const role = await this.model('auth_role').where({status: 1}).select(); this.assign('role', role); this.meta_title = '个人信息'; return this.display(); }
第一次见到可以让管理员添加用户的功能.....不会让普通用户很不安吗?
首先验证输入的密码和传输过去的密码是否一致,不一致就返回错误
成功了的话,就将输入密码确立为这个数
async adduserAction() { if (this.isPost) { const data = this.post(); if (data.password != data.repassword) { return this.fail('两次填入的密码不一致'); } data.password = encryptPassword(data.password);
reg应该是指操作时间
然后对需要建立的用户是否是一个vip进行判断
data.reg_time = new Date().getTime(); if (data.vip == 1) { data.overduedate = new Date(data.overduedate).getTime(); } else { data.overduedate = think.isEmpty(data.overduedate) ? 0 : data.overduedate; } console.log(data);
强制将用户的数据中的status设置为1
如果添加的是管理员,添加到self.db中
否则,直接添加到当前数据库
data.status = 1; const self = this; let res; if (data.is_admin == 1) { res = await this.db.transaction(async() => { const userId = await self.db.add(data); return await self.model('auth_user_role').db(self.db.db()).add({ user_id: userId, role_id: data.role_id }); }); } else { res = await this.db.add(data); }
之后就是大快人心的对添加是否成功做出判断
if (res) { return this.success({name: '添加成功!'}); } else { return this.fail('添加失败!'); }
如果一开始就没能接收到数据库的返还内容
就可以随便显示一个页面了
标题为“添加用户”
else { // 会员组 const usergroup = await this.model('member_group').select(); this.assign('usergroup', usergroup); // 获取管理组 const role = await this.model('auth_role').where({status: 1}).select(); this.assign('role', role); this.meta_title = '添加用户'; return this.display(); }