后台:账号管理

This commit is contained in:
luying
2021-11-25 16:11:46 +08:00
parent cc819c48a7
commit e7566b8af5
7 changed files with 63 additions and 67 deletions

View File

@@ -16,6 +16,11 @@ export default class FooBoot implements IBoot {
// this is the last chance to modify the config. // this is the last chance to modify the config.
await this.connectDB(this.app) await this.connectDB(this.app)
await this.connectGMDB(this.app); await this.connectGMDB(this.app);
this.app.config.realEnv = this.app.config.env;
if(this.app.config.env == 'local') {
this.app.config.realEnv = 'development';
}
} }
configDidLoad() { configDidLoad() {

View File

@@ -5,8 +5,8 @@ export default class UserController extends Controller {
public async getuserlist() { public async getuserlist() {
const { ctx } = this; const { ctx } = this;
const { field, value } = ctx.request.body; const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
ctx.body = await ctx.service.users.getuserlist(field, value); ctx.body = await ctx.service.users.getuserlist(page, pageSize, sortField, sortOrder, form);
} }
public async createRole() { public async createRole() {

View File

@@ -210,9 +210,7 @@ export default class Game extends Service {
const total = await NoticeModel.countByCondition( form ) const total = await NoticeModel.countByCondition( form )
return ctx.service.utils.resResult(STATUS.SUCCESS, { return ctx.service.utils.resResult(STATUS.SUCCESS, {
list: list.map(cur => { list: list.map(cur => {
let env = this.app.config.env; return { ...cur, showEndTime: cur.showEndTime.getTime(), showStartTime: cur.showStartTime.getTime(), env: this.app.config.realEnv }
if(env == 'local') env = 'development';
return { ...cur, showEndTime: cur.showEndTime.getTime(), showStartTime: cur.showStartTime.getTime(), env}
}), total }), total
}); });
} }

View File

@@ -21,6 +21,7 @@ import { CreateHeroes, deletRole } from '@pubUtils/roleUtil';
import { RScriptRecordModel } from '@db/RScriptRecord'; import { RScriptRecordModel } from '@db/RScriptRecord';
import { DicWar } from '@pubUtils/dictionary/DicWar'; import { DicWar } from '@pubUtils/dictionary/DicWar';
import { SkinModel } from '@db/Skin'; import { SkinModel } from '@db/Skin';
import { SearchUserParam } from '@domain/backEndField/search';
// import { resResult } from '@pubUtils/util'; // import { resResult } from '@pubUtils/util';
@@ -34,49 +35,22 @@ export default class GMUsers extends Service {
/** /**
* 根据类型等搜索玩家 * 根据类型等搜索玩家
*/ */
public async getuserlist(field: string = 'all', value: string = '') { public async getuserlist(page: number, pageSize: number, sortField: string, sortOrder: string, form: SearchUserParam) {
const { ctx } = this; const { ctx } = this;
let arr = new Array(), flag = 0; const users = await UserModel.findByCondition(page, pageSize, sortField, sortOrder, form);
if (value == '') field = 'all'; const total = await UserModel.countByCondition( form )
let valueArr = value.split(',');
for (let i of valueArr) { let list = [];
if (field == 'uid') { for (let user of users) {
let d = parseInt(i); let role = await RoleModel.findAllByUid(user.uid);
if (isNaN(d)) { let sms = await smsModel.findByTel(user.tel);
flag = 1; break;
} else { list.push({ ...user, role, isFixed: sms ? sms.isFixed : false, code: sms ? sms.code : "", env: ctx.app.config.realEnv });
arr.push(d);
}
} else if (field == 'username' || field == 'tel') {
arr.push(i);
} else if (field == 'all') {
break;
} else {
flag = 1; break;
}
} }
if (flag) { return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total })
return ctx.service.utils.resResult(STATUS.WRONG_PARMS);
}
let users = await UserModel.findUserByField(field, valueArr);
if (users) {
let list = new Array();
for (let user of users) {
let role = await RoleModel.findAllByUid(user.uid);
let sms = await smsModel.findByTel(user.tel);
list.push({ ...user, role, isFixed: sms ? sms.isFixed : false, code: sms ? sms.code : "" });
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { list })
} else {
console.error('userlist not found');
return ctx.service.utils.resResult(STATUS.INTERNAL_ERR);
}
} }
public async createRole(uid: number, serverId: number, roleName: string) { public async createRole(uid: number, serverId: number, roleName: string) {
@@ -602,7 +576,7 @@ export default class GMUsers extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS); return ctx.service.utils.resResult(STATUS.SUCCESS);
} catch (e) { } catch (e) {
console.error(e.stack) console.error((<Error>e).stack)
} }
} }
@@ -625,7 +599,7 @@ export default class GMUsers extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS); return ctx.service.utils.resResult(STATUS.SUCCESS);
} catch (e) { } catch (e) {
console.error(e.stack) console.error((<Error>e).stack)
} }
} }
@@ -649,7 +623,7 @@ export default class GMUsers extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS); return ctx.service.utils.resResult(STATUS.SUCCESS);
} catch (e) { } catch (e) {
console.error(e.stack) console.error((<Error>e).stack)
} }
} }

View File

@@ -4,6 +4,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { genCode, aesEncryptcfb, aesDecryptcfb } from '../pubUtils/util'; import { genCode, aesEncryptcfb, aesDecryptcfb } from '../pubUtils/util';
import { LoginValidateData37, ChannelInfo } from '../domain/sdk'; import { LoginValidateData37, ChannelInfo } from '../domain/sdk';
import { SearchUserParam } from '@domain/backEndField/search';
const bcrypt = require('bcrypt'); const bcrypt = require('bcrypt');
const SALT_WORK_FACTOR = 5 const SALT_WORK_FACTOR = 5
@@ -107,10 +108,6 @@ export default class User extends BaseModel {
@prop({ required: true, default: false }) @prop({ required: true, default: false })
blocked: boolean; blocked: boolean;
// 用户权限0-普通用户1-测试用户
@prop({ required: true, default: 0 })
auth: number;
// 个推CID // 个推CID
@prop({ required: false, default: "" }) @prop({ required: false, default: "" })
getuiCID: string; getuiCID: string;
@@ -278,21 +275,41 @@ export default class User extends BaseModel {
return user; return user;
} }
public static async findUserByField(field: string, value?: Array<number | string>) { public static async updatePlayTime(userCode: string, isGuest: boolean, todayPlayTime: number, playTime: number) {
let searchObj = {}; const user: UserType = await UserModel.findOneAndUpdate({ userCode }, { $set: { guestTime: isGuest?playTime: 0, todayPlayTime: todayPlayTime, playTime } }, { new: true }).lean({ getters: true });
if (field != 'all') {
searchObj[field] = {
$in: value
};
}
const user: UserType[] = await UserModel.find(searchObj).select('uid tel username serverType auth').lean({ getters: true });
return user; return user;
} }
public static async updatePlayTime(userCode: string, isGuest: boolean, todayPlayTime: number, playTime: number) { private static getSearchObj(form: SearchUserParam) {
const user: UserType = await UserModel.findOneAndUpdate({ userCode }, { $set: { guestTime: isGuest?playTime: 0, todayPlayTime: todayPlayTime, playTime } }, { new: true }).lean({ getters: true }); let searchObj = {};
return user; if(form['uid']) searchObj['uid'] = form.uid;
if(form['tel']) searchObj['tel'] = form.tel;
if(form.channelType && form.channelType != 'normal') searchObj['channelType'] = form.channelType;
return searchObj
}
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchUserParam = {}) {
let searchObj = this.getSearchObj(form);
let sort = {};
if(sortField && sortOrder) {
if(sortOrder == 'ascend') {
sort[sortField] = 1;
} else if (sortOrder == 'descend') {
sort[sortField] = -1;
}
}
const result: UserType[] = await UserModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).select('-_id -__v -password -salt -token').lean({ getters: true, virtuals: true });
return result;
}
public static async countByCondition(form: SearchUserParam = {}) {
let searchObj = this.getSearchObj(form);
const result = await UserModel.count(searchObj);
return result;
} }
} }

View File

@@ -0,0 +1,5 @@
export interface SearchUserParam {
uid?: number;
tel?: string;
channelType?: string;
}

View File

@@ -662,14 +662,11 @@ export function getFloorStatus(gachaId: number, floor: Floor[]) {
export async function checkWhiteListWithUid(uid: number) { export async function checkWhiteListWithUid(uid: number) {
let user = await UserModel.findUserByUid(uid); let user = await UserModel.findUserByUid(uid);
if(!user) return false; if(!user) return false;
let { tel, ip, auth } = user; let { tel, ip } = user;
return await checkWhiteList(tel, ip, auth); return await checkWhiteList(tel, ip);
} }
export async function checkWhiteList(tel: string, ip: string, auth: number) { export async function checkWhiteList(tel: string, ip: string) {
if(auth == 1) {
return true;
}
if(tel) { if(tel) {
let result = await WhiteListModel.checkTel(tel); let result = await WhiteListModel.checkTel(tel);
if(!!result) return true; if(!!result) return true;