明树Git Lab

Commit 9f80b93c authored by zfp1's avatar zfp1

update

parent 70bfeb8f
const ExcelJS = require('exceljs');
const _ = require('lodash');
async function upload(req, res, next) {
try {
console.log(req.file, req.body);
// let nginxpath = _.last(String(req.file.path).split('/mnt/vdb1'));
let ret = await DB.File.create({
originalname: req.file.originalname,
mimetype: req.file.mimetype,
filename: req.file.filename,
path: req.file.path,
// nginxpath,
size: req.file.size,
});
res.sendData(ret);
} catch (error) {
next(error);
}
}
async function batchUpload(req, res, next) {
try {
let ret = [];
for (let index = 0; index < req.files.length; index++) {
const element = req.files[index];
// let nginxpath = _.last(String(element.path).split('/mnt/vdb1'));
ret.push({
originalname: element.originalname,
mimetype: element.mimetype,
filename: element.filename,
path: element.path,
size: element.size,
// nginxpath,
})
}
let data = await DB.File.insertMany(ret);
res.sendData(data);
} catch (error) {
next(error);
}
}
module.exports = {
upload,
batchUpload
}
\ No newline at end of file
const errorMessage = require("../utils/errorMessage");
const userModule = require('../module/userModule');
async function createPosition(req, res, next) {
try {
const body = req.body;
const ret = await DB.Position.create(body);
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function updatePosition(req, res, next) {
try {
let body = req.body;
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
const ret = await DB.Position.update(body, { where: { id: body.id } });
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function deletePosition(req, res, next) {
try {
if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound);
}
const ret = await DB.Position.update({ del: 1 }, { where: { id: req.body.id } });
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function listPosition(req, res, next) {
try {
let search = {where: {del: 0}};
let page = req.body.page || 1;
let limit = req.body.pageSize || 10;
let offset = (page - 1) * limit;
if (req.body.name) {
search.where = {
[Op.or]: [
{ name: { [Op.like]: `%${req.body.name}%` } }
],
del: 0,
}
}
search.limit = limit;
search.offset = offset;
let ret = await DB.Position.findAndCountAll(search);
return res.sendData(ret);
} catch (error) {
next(error);
}
}
module.exports = {
createPosition,
listPosition,
deletePosition,
updatePosition,
}
\ No newline at end of file
// 模型初始化 // 模型初始化
const User = require("./model/user"); const User = require("./model/system/user");
const Role = require("./model/role"); const Role = require("./model/system/role");
const UserRole = require("./model/userRole"); const UserRole = require("./model/system/userRole");
const Menu = require("./model/menu"); const Menu = require("./model/system/menu");
const RoleMenu = require("./model/roleMenu"); const RoleMenu = require("./model/system/roleMenu");
const Depart = require("./model/depart"); const Depart = require("./model/system/depart");
const UserDepart = require("./model/userDepart"); const UserDepart = require("./model/system/userDepart");
const RequestLog = require("./model/requestLog"); const RequestLog = require("./model/system/requestLog");
const File = require("./model/system/file");
const Position = require("./model/system/position");
/** /**
* 业务表 * 业务表
...@@ -24,7 +26,8 @@ global.DB = { ...@@ -24,7 +26,8 @@ global.DB = {
RoleMenu, RoleMenu,
Depart, Depart,
UserDepart, UserDepart,
File,
Position,
} }
...@@ -77,3 +80,17 @@ Depart.belongsToMany(User, { ...@@ -77,3 +80,17 @@ Depart.belongsToMany(User, {
otherKey: 'userId', otherKey: 'userId',
as: 'users' as: 'users'
}); });
User.belongsToMany(Position, {
through: 'system_user_position', // 中间表名
foreignKey: 'userId', // 用户ID外键
otherKey: 'posiId', // 角色ID外键
as: 'positions',
});
Position.belongsToMany(User, {
through: 'system_user_position',
foreignKey: 'posiId',
otherKey: 'userId',
as: 'users'
});
Project (项目主表)
ProjectStage (项目阶段表)
ProjectApproval (立项信息表)
Contract (合同信息表)
InvestmentApproval (投资评价及批复信息表)
Investor (投资主体单位落实信息表)
CompanyApproval (项目公司落实批复信息表)
Compliance (项目合法合规性信息表)
\ No newline at end of file
// models/Project.js
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const Project = sequelize.define('Project', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(500),
comment: "名字"
},
code: {
type: DataTypes.STRING(100),
comment: "项目代码"
},
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'system_project', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
Project.sync({
// force: false,
// force: true ,//会删除已存在表并重新创建
alter: true
})
.then(() => {
console.log('Project 表同步成功');
});
module.exports = Project;
\ No newline at end of file
// models/ProjectStage.js
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const ProjectStage = sequelize.define('ProjectStage', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'system_project', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
ProjectStage.sync({
// force: false,
// force: true ,//会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('ProjectStage 表同步成功');
});
module.exports = ProjectStage;
\ No newline at end of file
// models/Depart.js // models/Depart.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const Depart = sequelize.define('Depart', { const Depart = sequelize.define('Depart', {
// 定义字段 // 定义字段
......
// models/File.js
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const File = sequelize.define('File', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
originalname: {
type: DataTypes.STRING,
comment: "原始名称"
},
filename: {
type: DataTypes.STRING,
comment: "存储的文件名"
},
size: {
type: DataTypes.INTEGER,
},
mimetype: {
type: DataTypes.STRING
},
url: {
type: DataTypes.STRING,
},
path: {
type: DataTypes.STRING,
},
nginxpath: {
type: DataTypes.STRING,
},
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'system_file', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
File.sync({
// force: false,
// force: true ,//会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('File 表同步成功');
});
module.exports = File;
\ No newline at end of file
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const Menu = sequelize.define('Menu', { const Menu = sequelize.define('Menu', {
// 定义字段 // 定义字段
......
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
/**
* 不确定是否需要,职位表只完成了自身的增删改查接口
* 未完成:TODO:
* 1. 创建用户时候,会选择角色(考虑多个)需要创建userPosition关联关系
* 2. 更新用户时候,需要考虑职位变更,跟设置角色、部门处理类似
* 3. 职位列表是否考虑 统计职位人数
*/
const Position = sequelize.define('Position', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING,
commnet: "职位名称",
},
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'system_position', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
Position.sync({
force: false, // force: true 会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('Position 表同步成功');
});
module.exports = Position;
\ No newline at end of file
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const RequestLog = sequelize.define('User', { const RequestLog = sequelize.define('User', {
// 定义字段 // 定义字段
......
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const Role = sequelize.define('Role', { const Role = sequelize.define('Role', {
// 定义字段 // 定义字段
......
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const Menu = require('./menu'); const Menu = require('./menu');
const Role = require('./role'); const Role = require('./role');
......
// models/User.js // models/User.js
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', {
// 定义字段 // 定义字段
......
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const User = require('./user'); const User = require('./user');
const Depart = require('./depart'); const Depart = require('./depart');
......
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const User = require('./user');
const Position = require('./position');
const UserPosition = sequelize.define('UserPosition', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
userId: {
type: DataTypes.INTEGER,
references: { model: User, key: 'id' }
},
posiId: {
type: DataTypes.INTEGER,
references: { model: UserPosition, key: 'id' }
}
}, {
tableName: 'system_user_position', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
UserPosition.sync({
// force: false, // force: true 会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('UserPosition 表同步成功');
});
module.exports = UserPosition;
\ No newline at end of file
// models/User.js // models/User.js
const { DataTypes } = require('sequelize'); const { DataTypes } = require('sequelize');
const sequelize = require('./index'); const sequelize = require('../index');
const User = require('./user'); const User = require('./user');
const Role = require('./role'); const Role = require('./role');
......
const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const crypto = require('crypto');
const fs = require('fs');
const _ = require('lodash');
const moment = require('moment');
const fileController = require('../controller/fileController');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
let path = sysConfig.file.storagePath + '/' + moment().format('YYYYMMDD');
if (!fs.existsSync(path)) {
fs.mkdirSync(path, { recursive: true });
}
cb(null, path);
},
filename: function (req, file, cb) {
let ext = path.extname(file.originalname); // 获取文件扩展名
let basename = path.basename(file.originalname, ext); // 获取文件名主体
file.originalname = Buffer.from(basename, 'latin1').toString('utf8') + ext;
basename = moment().format('YYYYMMDDHHmmss') + '_' + crypto.randomUUID().split('-').join("");
cb(null, basename + ext)
}
})
const upload = multer({ storage: storage })
router.post('/upload', upload.single('file'), fileController.upload);
router.post('/batch/upload', upload.array('files'), fileController.batchUpload);
module.exports = router;
\ No newline at end of file
...@@ -3,11 +3,11 @@ const router = express.Router(); ...@@ -3,11 +3,11 @@ const router = express.Router();
const userRouter = require("./userRouter"); const userRouter = require("./userRouter");
// const menuRouter = require("./menuRouter"); const fileRouter = require("./fileRouter");
router.use('/user', userRouter); // 用户 角色 router.use('/user', userRouter); // 用户 角色 菜单
// router.use('/menu', menuRouter); // 菜单 router.use('/file', fileRouter); //
......
...@@ -7,6 +7,7 @@ const userController = require('../controller/userController'); ...@@ -7,6 +7,7 @@ const userController = require('../controller/userController');
const roleController = require('../controller/roleController'); const roleController = require('../controller/roleController');
const menuController = require('../controller/menuController'); const menuController = require('../controller/menuController');
const departController = require('../controller/departController'); const departController = require('../controller/departController');
const positionController = require('../controller/positionController'); //职位
/** /**
* 用户 * 用户
...@@ -54,4 +55,12 @@ router.post('/depart/listDepart', departController.listDepart); ...@@ -54,4 +55,12 @@ router.post('/depart/listDepart', departController.listDepart);
router.post('/depart/treeDepart', departController.treeDepart); router.post('/depart/treeDepart', departController.treeDepart);
router.post('/depart/getDepart', departController.getDepart); router.post('/depart/getDepart', departController.getDepart);
/**
* 职位
*/
router.post('/position/createPosition', positionController.createPosition);
router.post('/position/listPosition', positionController.listPosition);
router.post('/position/deletePosition', positionController.deletePosition);
router.post('/position/updatePosition', positionController.updatePosition);
module.exports = router; module.exports = router;
\ No newline at end of file
...@@ -11,7 +11,7 @@ const parameter = require('./middleware/parameter'); ...@@ -11,7 +11,7 @@ const parameter = require('./middleware/parameter');
const request = require('./middleware/request'); const request = require('./middleware/request');
const response = require('./middleware/response'); const response = require('./middleware/response');
// const requestLogModule = require("./module/requestLogModule"); const requestModule = require("./module/requestModule");
//系统数据库 //系统数据库
...@@ -52,7 +52,7 @@ app.use(function(req, res, next) { ...@@ -52,7 +52,7 @@ app.use(function(req, res, next) {
app.use(function (err, req, res, next) { app.use(function (err, req, res, next) {
console.log(err) console.log(err)
// 记录下错误日志 // 记录下错误日志
requestLogModule.createRequestLog({ requestModule.createRequestLog({
url: req.path, url: req.path,
params: JSON.stringify({ params: JSON.stringify({
...req.body, ...req.body,
......
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