110 lines
2.6 KiB
JavaScript
110 lines
2.6 KiB
JavaScript
/**
|
|
* 基础模型类
|
|
* @file BaseModel.js
|
|
* @description 所有模型的基类,提供通用方法
|
|
*/
|
|
const { Model } = require('sequelize');
|
|
|
|
class BaseModel extends Model {
|
|
/**
|
|
* 获取模型的安全信息(排除敏感字段)
|
|
* @param {Array} excludeFields 要排除的字段
|
|
* @returns {Object} 安全信息对象
|
|
*/
|
|
getSafeInfo(excludeFields = ['password', 'pin', 'secret']) {
|
|
const data = this.get({ plain: true });
|
|
if (Array.isArray(excludeFields)) {
|
|
excludeFields.forEach(field => {
|
|
delete data[field];
|
|
});
|
|
}
|
|
return data;
|
|
}
|
|
|
|
/**
|
|
* 转换为JSON格式
|
|
* @param {Array} excludeFields 要排除的字段
|
|
* @returns {Object} JSON对象
|
|
*/
|
|
toJSON(excludeFields = ['password', 'pin', 'secret']) {
|
|
return this.getSafeInfo(excludeFields);
|
|
}
|
|
|
|
/**
|
|
* 格式化金额(分转元)
|
|
* @param {Number} amount 金额(分)
|
|
* @returns {String} 格式化后的金额
|
|
*/
|
|
formatAmount(amount) {
|
|
if (amount === null || amount === undefined) return '0.00';
|
|
return (amount / 100).toFixed(2);
|
|
}
|
|
|
|
/**
|
|
* 解析金额(元转分)
|
|
* @param {String|Number} amount 金额(元)
|
|
* @returns {Number} 金额(分)
|
|
*/
|
|
parseAmount(amount) {
|
|
if (typeof amount === 'string') {
|
|
return Math.round(parseFloat(amount) * 100);
|
|
}
|
|
return Math.round(amount * 100);
|
|
}
|
|
|
|
/**
|
|
* 格式化日期
|
|
* @param {Date} date 日期
|
|
* @param {String} format 格式
|
|
* @returns {String} 格式化后的日期
|
|
*/
|
|
formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
|
|
if (!date) return null;
|
|
const moment = require('moment');
|
|
return moment(date).format(format);
|
|
}
|
|
|
|
/**
|
|
* 检查字段是否已更改
|
|
* @param {String} field 字段名
|
|
* @returns {Boolean} 是否已更改
|
|
*/
|
|
isFieldChanged(field) {
|
|
return this.changed(field);
|
|
}
|
|
|
|
/**
|
|
* 获取原始值
|
|
* @param {String} field 字段名
|
|
* @returns {*} 原始值
|
|
*/
|
|
getOriginalValue(field) {
|
|
return this._previousDataValues[field];
|
|
}
|
|
|
|
/**
|
|
* 软删除(如果模型支持)
|
|
*/
|
|
async softDelete() {
|
|
if (this.constructor.rawAttributes.deleted_at) {
|
|
this.deleted_at = new Date();
|
|
await this.save();
|
|
} else {
|
|
throw new Error('模型不支持软删除');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 恢复软删除(如果模型支持)
|
|
*/
|
|
async restore() {
|
|
if (this.constructor.rawAttributes.deleted_at) {
|
|
this.deleted_at = null;
|
|
await this.save();
|
|
} else {
|
|
throw new Error('模型不支持软删除');
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = BaseModel; |