'use strict'; const md5 = require('md5'); // const Excel = require('exceljs'); const excelUtils = require('../util/excelUtils'); const requestIp = require('request-ip'); const Controller = require('../extend/baseController'); class SysUserController extends Controller { tag() { return this.ctx.service.sysUserService; } async onePop() { const { ctx } = this; const pop = this.ctx.getUserPop(); const result = await this.tag().one(ctx.query.id, pop); ctx.logic(result, '查询失败'); } async batchAdd() { const { ctx, service } = this; const query = ctx.request.body; delete query._id; if (!query.dept1) { delete query.dept1; } if (!query.dept2) { delete query.dept2; } if (!query.dept3) { delete query.dept3; } if (!query.dept4) { delete query.dept4; } if (!query.dept5) { delete query.dept5; } ctx.body = await service.sysUserService.batchAdd(query); } async updatePwd() { const { ctx, service } = this; const query = ctx.query; const { oldPwd, pwd } = query; const user = ctx.user; if (user.loginPwd == md5(oldPwd)) { await service.sysUserService.update('' + user._id, { loginPwd: md5(pwd) }); // 添加log const IP = requestIp.getClientIp(ctx.request); const addQuery = {}; if (user.role._id != this.app.config.defaultAdminRoleId) { if (user.dept1) { addQuery.dept1 = user.dept1; } if (user.dept2) { addQuery.dept2 = user.dept2; } if (user.dept3) { addQuery.dept3 = user.dept3; } if (user.dept4) { addQuery.dept4 = user.dept4; } if (user.dept5) { addQuery.dept5 = user.dept5; } } addQuery.loginName = user.loginName; addQuery.role = user.role; // addQuery.tableName = 'user'; addQuery.type = '修改密码'; addQuery.detail = JSON.stringify(query); addQuery.ipAddress = IP; addQuery.state = 'PC'; await this.service.sysLogService.add(addQuery); ctx.success(); } else { ctx.error('原密码不正确'); } } async setPassword() { const { ctx, service } = this; const query = ctx.query; const { id } = query; const result = await service.sysUserService.update(id, { loginPwd: md5(this.app.config.defaultPassword) }); // 添加log const IP = requestIp.getClientIp(ctx.request); const addQuery = {}; if (ctx.user.role._id != this.app.config.defaultAdminRoleId) { if (ctx.user.dept1) { addQuery.dept1 = ctx.user.dept1; } if (ctx.user.dept2) { addQuery.dept2 = ctx.user.dept2; } if (ctx.user.dept3) { addQuery.dept3 = ctx.user.dept3; } if (ctx.user.dept4) { addQuery.dept4 = ctx.user.dept4; } if (ctx.user.dept5) { addQuery.dept5 = ctx.user.dept5; } } addQuery.loginName = ctx.user.loginName; addQuery.role = ctx.user.role; // addQuery.tableName = 'user'; addQuery.type = '重置密码'; addQuery.detail = JSON.stringify(query); addQuery.ipAddress = IP; addQuery.state = 'PC'; await this.service.sysLogService.add(addQuery); ctx.success(result); } async setOpenId() { const { ctx, service } = this; const query = ctx.query; const { id } = query; const result = await service.sysUserService.update(id, { openId: '' }); const result2 = await service.sysUserService.update(id, { appletsId: '' }); ctx.success(result); } async setAppletsId() { const { ctx, service } = this; const query = ctx.query; const { id } = query; const result = await service.sysUserService.update(id, { appletsId: '' }); ctx.success(result); } async upload() { const { ctx, service } = this; const result = await service.imageHandleService.upload(); ctx.logic(result, '上传失败'); } async listForPage() { const { ctx } = this; const user = ctx.user; const level = user.dept.level; // 判断当前的dept权限 和传入的5级权限 不能超过当前人dept if (!ctx.query.dept1) { delete ctx.query.dept1; } if (!ctx.query.dept2) { delete ctx.query.dept2; } if (!ctx.query.dept3) { delete ctx.query.dept3; } if (!ctx.query.dept4) { delete ctx.query.dept4; } if (!ctx.query.dept5) { delete ctx.query.dept5; } delete ctx.query.deptId; // admin的dept 存在冲突,所以它不需要结合 if (user.role._id != this.app.config.defaultAdminRoleId) { ctx.query['dept' + level] = user.dept._id; } // 根据type 决定查什么角色 if (ctx.query.type === 'admin') { ctx.query.role = this.app.config.defaultManagerRoleId; } else if ((ctx.query.type === 'user')) { ctx.query.role = this.app.config.defaultUserRoleId; } delete ctx.query.type; ctx.setRegexMongoSql('queryName', 'loginName'); // 判断如果当前是采集员看数据的话 只能看他自己 if (user.role._id + '' == this.app.config.defaultUserRoleId) { ctx.query.loginName = user.loginName; } ctx.setOrder('loginName'); const accoutStatus = ctx.query.accoutStatus; if (accoutStatus) { switch (accoutStatus) { case '0':// 未认证 ctx.query.$or = [{ file: { $exists: false } }, { file: { $in: '' } }]; break; case '1':// 已认证 未绑定 ctx.query.$and = [ { file: { $exists: true, $ne: '' } }, { $or: [{ openId: { $exists: false } }, { openId: { $in: '' } }] }, ]; break; case '2':// 已认证 已绑定 ctx.query.$and = [ { file: { $exists: true, $ne: '' } }, { openId: { $exists: true, $ne: '' } }, ]; break; default: break; } } delete ctx.query.accoutStatus; const deptLevel = ctx.query.deptLevel; if (deptLevel) { switch (deptLevel) { case '3':// 区 ctx.query.$and = [ // { dept1: user.dept1._id }, // { role: this.app.config.defaultManagerRoleId }, { dept3: { $exists: true } }, { dept4: { $exists: false } }, { dept5: { $exists: false } }, ]; break; case '4':// 街道 ctx.query.$and = [ // { dept1: user.dept1._id }, // { role: this.app.config.defaultManagerRoleId }, { dept4: { $exists: true } }, { dept5: { $exists: false } }, ]; break; case '5':// 村 ctx.query.$and = [ // { dept1: user.dept1._id }, // { role: this.app.config.defaultManagerRoleId }, { dept5: { $exists: true } }, ]; break; default: break; } } delete ctx.query.deptLevel; const result = await this.tag().listForPage(ctx.query, ctx.getUserPop()); ctx.success(result); } async exportExcelByUser() { const { ctx } = this; delete ctx.query.sessionId; const user = ctx.user; const level = user.dept.level; // admin的dept 存在冲突,所以它不需要结合 if (user.role._id != this.app.config.defaultAdminRoleId) { ctx.query['dept' + level] = user.dept._id; } // 根据type 决定查什么角色 const type = ctx.query.type; if (type === 'admin') { ctx.query.role = this.app.config.defaultManagerRoleId; } else if ((ctx.query.type === 'user')) { ctx.query.role = this.app.config.defaultUserRoleId; } delete ctx.query.type; // 判断如果当前是采集员看数据的话 只能看他自己 if (user.role._id + '' == this.app.config.defaultUserRoleId) { ctx.query.loginName = user.loginName; } ctx.setOrder('loginName'); const result = await this.tag().list(ctx.query, ctx.getUserPop()); if (result.length > 4 * 10000) { this.ctx.error('数据量过大,请联系管理员导出', 500); return; } const config = [{ sheetOptions: { pageSetup: { orientation: 'landscape', fitToHeight: true } }, sheetHeader: [ { headerName: '吉林省民政厅居家老年人巡视关爱探访系统' + (type === 'admin' ? '管理员账号' : '采集员账号'), headerConfig: { height: 40 }, }, ], sheetKey: [ { label: '序号', key: 'num', letter: 'A', width: 6 }, { label: '省', key: 'dept1.name', letter: 'B', width: 10 }, { label: '地市', key: 'dept2.name', letter: 'C', width: 20 }, { label: '县(市、区)', key: 'dept3.name', letter: 'D', width: 20 }, { label: '乡镇(街道)', key: 'dept4.name', letter: 'E', width: 20 }, { label: '村(居)民委员会', key: 'dept5.name', letter: 'F', width: 20 }, { label: '账号', key: 'loginName', letter: 'G', width: 20 }, { label: '角色', key: 'role.name', letter: 'H', width: 20 }, { label: '姓名', key: 'userName', letter: 'I', width: 10 }, { label: '性别', key: 'sex', letter: 'J', width: 6 }, { label: '所在单位', key: 'company', letter: 'K', width: 20 }, { label: '职务', key: 'job', letter: 'L', width: 20 }, { label: '政治面貌', key: 'politicalOutlook', letter: 'M', width: 20 }, { label: '常用联系电话', key: 'phone', letter: 'N', width: 20 }, ], sheetData: result, }]; const workbook = excelUtils.getExcel(config); if (!workbook) { this.ctx.error(); return; } this.ctx.set('Content-Type', 'application/vnd.openxmlformats'); this.ctx.set('Content-Disposition', "attachment;filename*=UTF-8' '" + encodeURIComponent(new Date().getTime()) + '.xlsx'); this.ctx.body = await workbook.xlsx.writeBuffer(); } async updateInfoWithUser() { const { ctx, service } = this; const query = ctx.request.body; const userId = ctx.user._id; delete query.id; if (userId) { const result = await service.sysUserService.update(userId, query); ctx.success(result); } else { ctx.error('修改用户信息失败,用户id 为空'); } } async deleteWithSub() { const { ctx } = this; const query = ctx.query; query.userId = ctx.user._id; const result = await this.tag().deleteWithSub(query); if (result) { ctx.error(result); } else { ctx.success(); } } // async valueByUser() { // const { ctx } = this; // const user = ctx.user; // const level = user.dept.level; // // 判断当前的dept权限 和传入的5级权限 不能超过当前人dept // if (!ctx.query.dept1) { // delete ctx.query.dept1; // } // if (!ctx.query.dept2) { // delete ctx.query.dept2; // } // if (!ctx.query.dept3) { // delete ctx.query.dept3; // } // if (!ctx.query.dept4) { // delete ctx.query.dept4; // } // if (!ctx.query.dept5) { // delete ctx.query.dept5; // } // delete ctx.query.deptId; // // // admin的dept 存在冲突,所以它不需要结合 // if (user.role._id != this.app.config.defaultAdminRoleId) { // ctx.query['dept' + level] = user.dept._id; // } // // ctx.query.role = this.app.config.defaultUserRoleId; // ctx.setRegexMongoSql('queryName', 'loginName'); // if (!ctx.query.userName) { // delete ctx.query.userName; // } else { // ctx.query.userName = { $regex: ctx.query.userName }; // } // // 判断如果当前是采集员看数据的话 只能看他自己 // if (user.role._id + '' == this.app.config.defaultUserRoleId) { // ctx.query.loginName = user.loginName; // } // ctx.setOrder('loginName'); // // const result = await this.tag().valueByUser(ctx.query); // // ctx.success(result); // } // 积分数据列表查询---倒序显示 async valueByUser() { const { ctx } = this; const user = ctx.user; const level = user.dept.level; // 判断当前的dept权限 和传入的5级权限 不能超过当前人dept if (!ctx.query.dept1) { delete ctx.query.dept1; } if (!ctx.query.dept2) { delete ctx.query.dept2; } if (!ctx.query.dept3) { delete ctx.query.dept3; } if (!ctx.query.dept4) { delete ctx.query.dept4; } if (!ctx.query.dept5) { delete ctx.query.dept5; } delete ctx.query.deptId; // admin的dept 存在冲突,所以它不需要结合 if (user.role._id != this.app.config.defaultAdminRoleId) { ctx.query['dept' + level] = user.dept._id; } // 判断如果当前是采集员看数据的话 只能看他自己 if (user.role._id + '' == this.app.config.defaultUserRoleId) { ctx.query.loginName = user.loginName; } if (!ctx.query.queryName) { delete ctx.query.queryName; } if (!ctx.query.userName) { delete ctx.query.userName; } const result = await this.tag().valueByUser(ctx.query); ctx.logic(result, '暂无积分数据'); } async valueByUserOne() { const { ctx } = this; const result = await this.tag().valueByUserOne(); ctx.success(result); } // 个人积分排名 async sumUserOne() { const { ctx } = this; const result = await this.tag().sumUserOne(); ctx.success(result); } } module.exports = SysUserController;