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