明树Git Lab

Commit 3a3ea0d7 authored by zfp1's avatar zfp1

update

parent 47bb4647
...@@ -9,8 +9,51 @@ const errorMessage = require('../utils/errorMessage'); ...@@ -9,8 +9,51 @@ const errorMessage = require('../utils/errorMessage');
async function regist(req, res, next) { async function regist(req, res, next) {
try { try {
const body = req.body; const { salt, passwordHash } = utils.saltHashPassword(req.body.password);
const ret = await userModule.create(body); const ret = await userModule.create({
...req.body,
salt,
password: passwordHash,
});
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function login(req, res, next) {
try {
if(req.body.encryptLogStr){
//避免差异 选用跟前端一样的包
let encryptLogStr = CryptoJS.AES.decrypt(req.body.encryptLogStr, "GFG5w5AP0Ja2rNaa").toString(CryptoJS.enc.Utf8);
let encArr = encryptLogStr.split(",");
req.body.mobile = encArr[0].trim();
req.body.password = encArr[1];
}
const { mobile, password } = req.body;
const user = await userModule.findOne({mobile});
console.log("----------------------", user)
if (!user) {
return res.sendError(errorMessage.loginError);
}
//判断删除状态 ,暂时不加
const check = utils.checkUserPassword({
reqPw: password,
salt: user.salt,
userPw: user.password,
});
if (!check) {
return res.sendError(errorMessage.loginError)
}
// 生成一个串 返回前端
let token = crypto.randomUUID();
user.token = token.split('-').join("");
let userStr = JSON.stringify(user);
await ioRedis.set(`token:${user.token}`, userStr, 'EX', sysConfig.tokenEx);
let ret = _.omit(user, ['password', 'salt']);
// let menus = await userModule.getRoleMenus(ret.roles, user.mobile);
// ret.menus = menus;
return res.sendData(ret); return res.sendData(ret);
} catch (error) { } catch (error) {
next(error); next(error);
...@@ -19,5 +62,6 @@ async function regist(req, res, next) { ...@@ -19,5 +62,6 @@ async function regist(req, res, next) {
module.exports = { module.exports = {
regist regist,
login,
} }
\ No newline at end of file
// 模型初始化 // 模型初始化
const User = require("./model/user"); const User = require("./model/user");
const Role = require("./model/role");
const Menu = require("./model/menu");
const RequestLog = require("./model/requestLog"); const RequestLog = require("./model/requestLog");
global.DB = { global.DB = {
User, User,
RequestLog RequestLog,
Role,
} }
...@@ -16,6 +19,30 @@ global.DB = { ...@@ -16,6 +19,30 @@ global.DB = {
/** /**
* 关联关系定义 * 关联关系定义
*/ */
User.hasMany(RequestLog, { foreignKey: 'userId' }); User.hasMany(RequestLog, { foreignKey: 'user_id' });
RequestLog.belongsTo(User, { foreignKey: 'userId' }); RequestLog.belongsTo(User, { foreignKey: 'user_id' });
User.belongsToMany(Role, {
through: 'system_user_role', // 中间表名
foreignKey: 'user_id', // 用户ID外键
otherKey: 'role_id' // 角色ID外键
});
Role.belongsToMany(User, {
through: 'system_user_role',
foreignKey: 'role_id',
otherKey: 'user_id'
});
Role.belongsToMany(Menu, {
through: 'systen_role_menu',
foreignKey: 'role_id',
otherKey: 'menu_id'
});
Menu.belongsToMany(Role, {
through: 'systen_role_menu',
foreignKey: 'menu_id',
otherKey: 'role_id'
});
...@@ -5,7 +5,7 @@ const { Sequelize } = require('sequelize'); ...@@ -5,7 +5,7 @@ const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(sysConfig.database || 'gzbjt', sysConfig.username || 'root', sysConfig.password ||'123456', { const sequelize = new Sequelize(sysConfig.database || 'gzbjt', sysConfig.username || 'root', sysConfig.password ||'123456', {
host: sysConfig.host || 'localhost', host: sysConfig.host || 'localhost',
dialect: 'mysql', dialect: 'mysql',
logging: console.log, // 显示日志(可选) logging: false, // 显示日志(可选)
pool: { pool: {
max: 5, // 连接池最大连接数 max: 5, // 连接池最大连接数
min: 0, min: 0,
......
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('./index');
const Menu = sequelize.define('Menu', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
},
level: DataTypes.INTEGER,
url: {
type: DataTypes.STRING,
unique: true,
comment: "菜单唯一标识"
},
key: {
type: DataTypes.STRING,
unique: true,
comment: "按钮唯一标识",
},
order: {
type: DataTypes.INTEGER,
defaultValue: 100,
},
parent_id: {
type: DataTypes.INTEGER,
default: null,
},
type: {
type: DataTypes.INTEGER,
comment: "类型: 1. 菜单, 2. 按钮",
default: 1
},
enable: {
type: DataTypes.BOOLEAN,
defaultValue: true,
comment: "true: 启用, false: 不启用"
},
}, {
tableName: 'system_menu', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
Menu.sync({
// force: false, // force: true 会删除已存在表并重新创建
alter: true
})
.then(() => {
console.log('Menu 表同步成功');
});
module.exports = Menu;
\ No newline at end of file
...@@ -9,11 +9,11 @@ const RequestLog = sequelize.define('User', { ...@@ -9,11 +9,11 @@ const RequestLog = sequelize.define('User', {
primaryKey: true, primaryKey: true,
autoIncrement: true autoIncrement: true
}, },
reqId: { reqid: {
type: DataTypes.STRING, type: DataTypes.STRING,
comment: "给每一个请求分配一个id" comment: "给每一个请求分配一个id"
}, },
userId: { user_id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
comment:"关联查询用" comment:"关联查询用"
}, },
......
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('./index');
const Role = sequelize.define('Role', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
commnet: "角色名称",
},
key: {
type: DataTypes.STRING,
commnet: "角色标识",
},
enable: {
type: DataTypes.BOOLEAN,
defaultValue: true,
comment: "true: 启用, false: 不启用"
},
}, {
tableName: 'system_role', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
Role.sync({
// force: false, // force: true 会删除已存在表并重新创建
alter: true
})
.then(() => {
console.log('Role 表同步成功');
});
module.exports = Role;
\ No newline at end of file
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('./index');
const Menu = require('./menu');
const Role = require('./role');
const RoleMenu = sequelize.define('RoleMenu', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
menu_id: {
type: DataTypes.INTEGER,
references: { model: Menu, key: 'id' }
},
role_id: {
type: DataTypes.INTEGER,
references: { model: Role, key: 'id' }
}
}, {
tableName: 'system_role_menu', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
RoleMenu.sync({
// force: false, // force: true 会删除已存在表并重新创建
alter: true
})
.then(() => {
console.log('RoleMenu 表同步成功');
});
module.exports = RoleMenu;
\ No newline at end of file
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('./index');
const User = sequelize.define('User', { const User = sequelize.define('User', {
// 定义字段 // 定义字段
id: { id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
primaryKey: true, primaryKey: true,
autoIncrement: true autoIncrement: true
}, },
username: { mobile: {
type: DataTypes.STRING(50), type: DataTypes.STRING(50),
allowNull: true allowNull: true
}, },
...@@ -24,17 +24,25 @@ const User = sequelize.define('User', { ...@@ -24,17 +24,25 @@ const User = sequelize.define('User', {
name: { name: {
type: DataTypes.STRING(50), type: DataTypes.STRING(50),
allowNull: true allowNull: true
} },
enable: {
type: DataTypes.BOOLEAN,
defaultValue: true,
comment: "true: 启用, false: 不启用"
},
}, { }, {
tableName: 'system_user', // 指定表名(如果与模型名不同) tableName: 'system_user', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置) timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
}); });
// 同步模型到数据库(创建表) // 同步模型到数据库(创建表)
User.sync({ force: false }) // force: true 会删除已存在表并重新创建 User.sync({
// force: false, // force: true 会删除已存在表并重新创建
alter: true
})
.then(() => { .then(() => {
console.log('User 表同步成功'); console.log('User 表同步成功');
}); });
module.exports = User; module.exports = User;
\ No newline at end of file \ No newline at end of file
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('./index');
const User = require('./user');
const Role = require('./role');
const UserRole = sequelize.define('UserRole', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
user_id: {
type: DataTypes.INTEGER,
references: { model: User, key: 'id' }
},
role_id: {
type: DataTypes.INTEGER,
references: { model: Role, key: 'id' }
}
}, {
tableName: 'system_user_role', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
UserRole.sync({
// force: false, // force: true 会删除已存在表并重新创建
alter: true
})
.then(() => {
console.log('UserRole 表同步成功');
});
module.exports = UserRole;
\ No newline at end of file
...@@ -4,7 +4,7 @@ const mongoose = require('mongoose'); ...@@ -4,7 +4,7 @@ const mongoose = require('mongoose');
// //
module.exports = async (req, res, next) => { module.exports = async (req, res, next) => {
req.reqId = new mongoose.Types.ObjectId(); req.reqid = new mongoose.Types.ObjectId();
/* --------------3. 记录所有进来的日志,是否记录响应的值有待 */ /* --------------3. 记录所有进来的日志,是否记录响应的值有待 */
requestLogModule.createRequestLog({ requestLogModule.createRequestLog({
...@@ -14,7 +14,7 @@ module.exports = async (req, res, next) => { ...@@ -14,7 +14,7 @@ module.exports = async (req, res, next) => {
...req.query, ...req.query,
...req.params, ...req.params,
}), }),
reqId: req.reqId, reqid: req.reqid,
user: req.user, user: req.user,
method: req.method, method: req.method,
headers: JSON.stringify(req.headers), headers: JSON.stringify(req.headers),
......
...@@ -5,7 +5,7 @@ const requestLogModule = require("../module/requestModule"); ...@@ -5,7 +5,7 @@ const requestLogModule = require("../module/requestModule");
// //
module.exports = async (req, res, next) => { module.exports = async (req, res, next) => {
req.reqId = crypto.randomUUID(); req.reqid = crypto.randomUUID();
/* 1. 处理token */ /* 1. 处理token */
if (!checkPath(req.path)) { if (!checkPath(req.path)) {
if (!(req.headers.authorization || req.headers.Authorization)) { if (!(req.headers.authorization || req.headers.Authorization)) {
...@@ -37,7 +37,7 @@ module.exports = async (req, res, next) => { ...@@ -37,7 +37,7 @@ module.exports = async (req, res, next) => {
...req.query, ...req.query,
...req.params, ...req.params,
}), }),
reqId: req.reqId, reqid: req.reqid,
userId: req.user && req.user.id, userId: req.user && req.user.id,
user: JSON.stringify(req.user), user: JSON.stringify(req.user),
method: req.method, method: req.method,
......
...@@ -5,7 +5,7 @@ const requestLogModule = require("../module/requestModule"); ...@@ -5,7 +5,7 @@ const requestLogModule = require("../module/requestModule");
module.exports = (req, res, next) => { module.exports = (req, res, next) => {
res['sendData'] = (data) => { res['sendData'] = (data) => {
requestLogModule.updateRequestLog({ requestLogModule.updateRequestLog({
reqId: req.reqId, reqid: req.reqid,
result: JSON.stringify(data), result: JSON.stringify(data),
msg: "success", msg: "success",
status: 200, status: 200,
...@@ -19,7 +19,7 @@ module.exports = (req, res, next) => { ...@@ -19,7 +19,7 @@ module.exports = (req, res, next) => {
res['sendError'] = (error) => { res['sendError'] = (error) => {
requestLogModule.updateRequestLog({ requestLogModule.updateRequestLog({
reqId: req.reqId, reqid: req.reqid,
result: JSON.stringify(error.message), result: JSON.stringify(error.message),
msg: "error", msg: "error",
status: 200, status: 200,
......
...@@ -5,7 +5,7 @@ async function createRequestLog(params) { ...@@ -5,7 +5,7 @@ async function createRequestLog(params) {
return DB.RequestLog.create(params); return DB.RequestLog.create(params);
} }
async function updateRequestLog(params) { async function updateRequestLog(params) {
return DB.RequestLog.update(params, {where: {reqId: params.reqId}}); return DB.RequestLog.update(params, {where: {reqid: params.reqid}});
} }
......
const _ = require("lodash");
...@@ -19,11 +19,22 @@ async function create(params) { ...@@ -19,11 +19,22 @@ async function create(params) {
return DB.User.create(params); return DB.User.create(params);
} }
async function findOne(params) {
if(_.isEmpty(params)) {
return null;
}
console.log(params, "====")
return DB.User.findOne(
{where: params, raw: true}
);
}
module.exports = { module.exports = {
create create,
findOne,
} }
\ No newline at end of file
...@@ -7,7 +7,7 @@ const userController = require('../controller/userController'); ...@@ -7,7 +7,7 @@ const userController = require('../controller/userController');
router.post('/regist', userController.regist); router.post('/regist', userController.regist);
// router.post('/login', userController.login); router.post('/login', userController.login);
// router.post('/checkUserToken', userController.checkUserToken); // router.post('/checkUserToken', userController.checkUserToken);
// router.post('/changePassword', userController.changePassword); // router.post('/changePassword', userController.changePassword);
......
...@@ -34,19 +34,19 @@ function buildTree(nodes) { ...@@ -34,19 +34,19 @@ function buildTree(nodes) {
// 遍历所有节点,并将它们添加到对应父节点的children数组中 // 遍历所有节点,并将它们添加到对应父节点的children数组中
nodes.forEach(node => { nodes.forEach(node => {
const parentId = String(node.parentId); const parent_id = String(node.parent_id);
if (parentId !== null) { if (parent_id !== null) {
// 确保父节点在映射中存在 // 确保父节点在映射中存在
if (nodeMap.has(parentId)) { if (nodeMap.has(parent_id)) {
// 将当前节点添加到父节点的children数组中 // 将当前节点添加到父节点的children数组中
nodeMap.get(parentId).children.push(nodeMap.get(String(node._id))); nodeMap.get(parent_id).children.push(nodeMap.get(String(node._id)));
nodeMap.get(parentId).children = _.orderBy(nodeMap.get(parentId).children, 'order') nodeMap.get(parent_id).children = _.orderBy(nodeMap.get(parent_id).children, 'order')
} }
} }
}); });
// 从映射中提取顶级节点(parentId为null) // 从映射中提取顶级节点(parent_id为null)
return _.orderBy(Array.from(nodeMap.values()).filter(node => node.parentId === null), 'order'); return _.orderBy(Array.from(nodeMap.values()).filter(node => node.parent_id === null), 'order');
} }
function disTree(tree) { function disTree(tree) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment