286 lines
5.9 KiB
JavaScript
286 lines
5.9 KiB
JavaScript
|
|
const { Setting, Category } = require('../models');
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 获取系统设置
|
||
|
|
*/
|
||
|
|
const getSettings = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
|
||
|
|
const settings = await Setting.findAll({
|
||
|
|
where: { tenantId }
|
||
|
|
});
|
||
|
|
|
||
|
|
// 转换为键值对格式
|
||
|
|
const settingsMap = {};
|
||
|
|
settings.forEach(setting => {
|
||
|
|
settingsMap[setting.key] = setting.value;
|
||
|
|
});
|
||
|
|
|
||
|
|
// 设置默认值
|
||
|
|
const defaultSettings = {
|
||
|
|
expireReminderDays: '30',
|
||
|
|
enableExpiredReminder: 'true',
|
||
|
|
...settingsMap
|
||
|
|
};
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '获取成功',
|
||
|
|
data: defaultSettings
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('获取设置失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '获取设置失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 更新系统设置
|
||
|
|
*/
|
||
|
|
const updateSettings = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
const userId = req.user.id;
|
||
|
|
const settings = req.body;
|
||
|
|
|
||
|
|
// 批量更新或创建设置
|
||
|
|
for (const [key, value] of Object.entries(settings)) {
|
||
|
|
if (key === 'id' || key === 'createTime' || key === 'updateTime') continue;
|
||
|
|
|
||
|
|
const [setting, created] = await Setting.findOrCreate({
|
||
|
|
where: { key, tenantId },
|
||
|
|
defaults: {
|
||
|
|
key,
|
||
|
|
value: String(value),
|
||
|
|
tenantId,
|
||
|
|
createBy: userId,
|
||
|
|
updateBy: userId
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!created) {
|
||
|
|
await setting.update({
|
||
|
|
value: String(value),
|
||
|
|
updateBy: userId
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '设置保存成功'
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('保存设置失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '保存设置失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 获取收支类目列表
|
||
|
|
*/
|
||
|
|
const getCategories = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
const { type } = req.query;
|
||
|
|
|
||
|
|
const where = {
|
||
|
|
tenantId,
|
||
|
|
isDeleted: 0,
|
||
|
|
status: 'active'
|
||
|
|
};
|
||
|
|
|
||
|
|
if (type) {
|
||
|
|
where.type = type;
|
||
|
|
}
|
||
|
|
|
||
|
|
const categories = await Category.findAll({
|
||
|
|
where,
|
||
|
|
order: [['sort', 'ASC'], ['id', 'ASC']]
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '获取成功',
|
||
|
|
data: categories
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('获取类目失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '获取类目失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 创建类目
|
||
|
|
*/
|
||
|
|
const createCategory = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
const userId = req.user.id;
|
||
|
|
const { name, code, type, sort } = req.body;
|
||
|
|
|
||
|
|
// 检查编码是否已存在
|
||
|
|
const existing = await Category.findOne({
|
||
|
|
where: { code, tenantId, isDeleted: 0 }
|
||
|
|
});
|
||
|
|
|
||
|
|
if (existing) {
|
||
|
|
return res.status(400).json({
|
||
|
|
code: 400,
|
||
|
|
message: '类目编码已存在'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
const category = await Category.create({
|
||
|
|
name,
|
||
|
|
code,
|
||
|
|
type,
|
||
|
|
sort: sort || 0,
|
||
|
|
tenantId,
|
||
|
|
createBy: userId,
|
||
|
|
updateBy: userId
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '创建成功',
|
||
|
|
data: category
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('创建类目失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '创建类目失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 更新类目
|
||
|
|
*/
|
||
|
|
const updateCategory = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
const userId = req.user.id;
|
||
|
|
const { id } = req.params;
|
||
|
|
const { name, code, type, sort, status } = req.body;
|
||
|
|
|
||
|
|
const category = await Category.findOne({
|
||
|
|
where: { id, tenantId, isDeleted: 0 }
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!category) {
|
||
|
|
return res.status(404).json({
|
||
|
|
code: 404,
|
||
|
|
message: '类目不存在'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 检查编码是否与其他类目冲突
|
||
|
|
if (code && code !== category.code) {
|
||
|
|
const existing = await Category.findOne({
|
||
|
|
where: { code, tenantId, isDeleted: 0, id: { $ne: id } }
|
||
|
|
});
|
||
|
|
|
||
|
|
if (existing) {
|
||
|
|
return res.status(400).json({
|
||
|
|
code: 400,
|
||
|
|
message: '类目编码已存在'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
await category.update({
|
||
|
|
name: name || category.name,
|
||
|
|
code: code || category.code,
|
||
|
|
type: type || category.type,
|
||
|
|
sort: sort !== undefined ? sort : category.sort,
|
||
|
|
status: status || category.status,
|
||
|
|
updateBy: userId
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '更新成功',
|
||
|
|
data: category
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('更新类目失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '更新类目失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 删除类目
|
||
|
|
*/
|
||
|
|
const deleteCategory = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const tenantId = req.user.tenantId;
|
||
|
|
const userId = req.user.id;
|
||
|
|
const { id } = req.params;
|
||
|
|
|
||
|
|
const category = await Category.findOne({
|
||
|
|
where: { id, tenantId, isDeleted: 0 }
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!category) {
|
||
|
|
return res.status(404).json({
|
||
|
|
code: 404,
|
||
|
|
message: '类目不存在'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 默认类目不允许删除
|
||
|
|
if (category.isDefault) {
|
||
|
|
return res.status(400).json({
|
||
|
|
code: 400,
|
||
|
|
message: '默认类目不能删除'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
await category.update({
|
||
|
|
isDeleted: 1,
|
||
|
|
updateBy: userId
|
||
|
|
});
|
||
|
|
|
||
|
|
res.json({
|
||
|
|
code: 200,
|
||
|
|
message: '删除成功'
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('删除类目失败:', error);
|
||
|
|
res.status(500).json({
|
||
|
|
code: 500,
|
||
|
|
message: '删除类目失败',
|
||
|
|
error: error.message
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
getSettings,
|
||
|
|
updateSettings,
|
||
|
|
getCategories,
|
||
|
|
createCategory,
|
||
|
|
updateCategory,
|
||
|
|
deleteCategory
|
||
|
|
};
|