CmsWing源码分析(9)用户首页(一)
2021/12/5 14:18:18
本文主要是介绍CmsWing源码分析(9)用户首页(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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(); }
这篇关于CmsWing源码分析(9)用户首页(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享