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的用法是把数组转换为字符串,且不会改变原始数组
则,本网页的数据属性就变为如下所示的情况
最后返回这个刚更新好的数据属性
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();
}