rentease-backend-new/controllers/settingController.js

227 lines
5.3 KiB
JavaScript
Raw Permalink Normal View History

2026-04-20 06:43:09 +00:00
const { Setting, Category } = require('../models');
2026-05-09 09:01:41 +00:00
const { Op } = require('sequelize');
2026-04-22 06:48:32 +00:00
const response = require('../utils/response');
2026-04-20 06:43:09 +00:00
/**
* 获取系统设置
*/
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
};
2026-04-22 06:48:32 +00:00
response.success(res, '获取成功', defaultSettings);
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('获取设置失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '获取设置失败', error);
2026-04-20 06:43:09 +00:00
}
};
/**
* 更新系统设置
*/
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
});
}
}
2026-04-22 06:48:32 +00:00
response.success(res, '设置保存成功');
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('保存设置失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '保存设置失败', error);
2026-04-20 06:43:09 +00:00
}
};
/**
* 获取收支类目列表
*/
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']]
});
2026-04-22 06:48:32 +00:00
response.success(res, '获取成功', categories);
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('获取类目失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '获取类目失败', error);
2026-04-20 06:43:09 +00:00
}
};
/**
* 创建类目
*/
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) {
2026-04-22 06:48:32 +00:00
return response.badRequest(res, '类目编码已存在');
2026-04-20 06:43:09 +00:00
}
const category = await Category.create({
name,
code,
type,
sort: sort || 0,
tenantId,
createBy: userId,
updateBy: userId
});
2026-04-22 06:48:32 +00:00
response.success(res, '创建成功', category);
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('创建类目失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '创建类目失败', error);
2026-04-20 06:43:09 +00:00
}
};
/**
* 更新类目
*/
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) {
2026-04-22 06:48:32 +00:00
return response.notFound(res, '类目不存在');
2026-04-20 06:43:09 +00:00
}
// 检查编码是否与其他类目冲突
if (code && code !== category.code) {
const existing = await Category.findOne({
2026-04-22 06:48:32 +00:00
where: { code, tenantId, isDeleted: 0, id: { [Op.ne]: id } }
2026-04-20 06:43:09 +00:00
});
if (existing) {
2026-04-22 06:48:32 +00:00
return response.badRequest(res, '类目编码已存在');
2026-04-20 06:43:09 +00:00
}
}
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
});
2026-04-22 06:48:32 +00:00
response.success(res, '更新成功', category);
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('更新类目失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '更新类目失败', error);
2026-04-20 06:43:09 +00:00
}
};
/**
* 删除类目
*/
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) {
2026-04-22 06:48:32 +00:00
return response.notFound(res, '类目不存在');
2026-04-20 06:43:09 +00:00
}
// 默认类目不允许删除
if (category.isDefault) {
2026-04-22 06:48:32 +00:00
return response.badRequest(res, '默认类目不能删除');
2026-04-20 06:43:09 +00:00
}
await category.update({
isDeleted: 1,
updateBy: userId
});
2026-04-22 06:48:32 +00:00
response.success(res, '删除成功');
2026-04-20 06:43:09 +00:00
} catch (error) {
console.error('删除类目失败:', error);
2026-04-22 06:48:32 +00:00
response.serverError(res, '删除类目失败', error);
2026-04-20 06:43:09 +00:00
}
};
module.exports = {
getSettings,
updateSettings,
getCategories,
createCategory,
updateCategory,
deleteCategory
};