controller
import { BaseController } from '../../../lib/base/controller';
import routerDecorator from '../../../lib/router';
import { Context } from 'egg';
/**
* 系統-用戶
*/
@routerDecorator.prefix('/admin/sys/user', [ 'add', 'delete', 'update', 'info', 'list', 'page' ])
export default class SysUserController extends BaseController {
constructor (ctx: Context) {
super(ctx);
this.setEntity(this.ctx.repo.sys.User);
const option = {
keyWordLikeFields: [ 'name' ],
};
this.setPageOption(option);
this.setService(this.service.sys.user);
}
}複製代碼
entity
import { Entity, PrimaryGeneratedColumn, Column, Index } from 'typeorm';
import { BaseEntity } from '../../lib/base/entity';
/**
* 系統用戶
*/
@Entity({ name: 'sys_user' })
export default class SysUser extends BaseEntity {
// ID
@PrimaryGeneratedColumn({ type: 'bigint' })
id: number;
// 姓名
@Column({ nullable: true })
name: string;
// 用戶名
@Index({ unique: true })
@Column()
username: string;
// 密碼
@Column()
password: string;
// 密碼版本
@Column({ default: 1 })
passwordV: number;
// 暱稱
@Column({ nullable: true })
nickName: string;
// 頭像
@Column({ nullable: true })
headImg: string;
// 手機
@Index()
@Column({ nullable: true })
phone: string;
// 郵箱
@Column({ nullable: true })
email: string;
// 備註
@Column({ nullable: true, length: 500 })
remark: string;
// 狀態 0:禁用 1:啓用
@Column({ default: 1, type: 'tinyint' })
status: number;
}
複製代碼
service
import { BaseService } from '../../lib/base/service';
import * as _ from 'lodash';
import * as md5 from 'md5';
/**
* 系統-用戶
*/
export default class SysUserService extends BaseService {
/**
* 分頁查詢
* @param param
*/
async page (param) {
const { keyWord } = param;
const sql = `
SELECT
a.*,
GROUP_CONCAT(c.name) AS roleName
FROM
sys_user a
LEFT JOIN sys_user_role b ON a.id = b.userId
LEFT JOIN sys_role c ON b.roleId = c.id
WHERE 1 = 1
${ this.setSql(keyWord, 'and (a.name LIKE ? or a.username LIKE ?)', [ `%${ keyWord }%`, `%${ keyWord }%` ]) }
GROUP BY a.id
`;
return this.sqlRenderPage(sql, param);
}
/**
*
* @param param
*/
async add (param) {
const exists = await this.getRepo().sys.User.findOne({ username: param.username });
if (!_.isEmpty(exists)) {
throw new Error('business 用戶名已經存在~');
}
param.password = md5('123456'); // 默認密碼 建議未改密碼不能登錄
await this.getRepo().sys.User.save(param);
await this.updateUserRole(param);
}
/**
* 更新用戶角色關係
* @param user
*/
async updateUserRole (user) {
await this.getRepo().sys.User_role.delete({ userId: user.id });
if (user.roleIdList) {
for (const roleId of user.roleIdList) {
await this.getRepo().sys.User_role.save({ userId: user.id, roleId });
}
}
await this.service.sys.perms.refreshPerms(user.id);
}
}複製代碼