This commit is contained in:
张成
2025-11-21 16:53:49 +08:00
commit 8309808835
286 changed files with 32656 additions and 0 deletions

168
config/template/db.ejs Normal file
View File

@@ -0,0 +1,168 @@
const dayjs = require("dayjs");
const Sequelize = require("sequelize");
const config ={
"username": "<%=dbConfig.username%>",
"password": "<%=dbConfig.password%>",
"database": "<%=dbConfig.database%>",
"host": "<%=dbConfig.host%>",
"port": <%=dbConfig.port%>,
"dialect": "<%=dbConfig.dialect%>"
}
let model = {};
const logEditField = (oldRow, newRow) => {
let str = ``;
oldRow = oldRow.toJSON ? oldRow.toJSON() : oldRow;
newRow = newRow ? newRow.toJSON() : newRow;
let keyRows = Object.keys(oldRow);
for (let i = 0; i < keyRows.length; i++) {
let key = keyRows[i];
if (key !== "create_time" && key !== "last_modify_time" && oldRow[key] !== newRow[key]) {
let oldVal = oldRow[key];
if (typeof oldVal === "string") {
oldVal = oldVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
}
let newVal = newRow[key];
if (typeof newVal === "string") {
newVal = newVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
}
str += ` ${key} 从<span class="bold"> ${oldVal} </span> 变更为 <span class="bold"> ${newVal} </span><br>`;
}
}
return str;
};
const logCreateField = (oldRow) => {
let str = ``;
oldRow = oldRow.toJSON ? oldRow.toJSON() : oldRow;
let keyRows = Object.keys(oldRow);
for (let i = 0; i < keyRows.length; i++) {
let key = keyRows[i];
if (key !== "create_time" && key !== "last_modify_time") {
let newVal = oldRow[key];
if (typeof newVal === "string") {
newVal = newVal.replace(/<p>/g, "").replace(/<\/p>/g, "");
}
str += `<span class="bold"> ${key} </span> 为 <span class="bold"> ${newVal} </span><br>`;
}
}
return str;
};
let sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
dialect: config.dialect,
pool: {
max: 5,
min: 0,
idle: 10000,
},
dialectOptions: {
charset: "utf8mb4",
collate: "utf8mb4_unicode_ci",
supportBigNumbers: true,
bigNumberStrings: true,
},
});
const define = (name, attributes) => {
let attrs = {};
for (let key in attributes) {
let value = attributes[key];
if (typeof value === "object" && value["type"]) {
value.allowNull = value.allowNull || false;
attrs[key] = value;
} else {
attrs[key] = {
type: value,
allowNull: false,
};
}
}
attrs.create_time = {
type: Sequelize.DATE,
allowNull: false,
defaultValue: sequelize.literal("CURRENT_TIMESTAMP"),
comment: "创建时间",
get() {
return dayjs(this.getDataValue("create_time")).format("YYYY-MM-DD HH:mm:ss");
},
};
attrs.last_modify_time = {
type: Sequelize.DATE,
allowNull: false,
comment: "最后更新时间",
defaultValue: sequelize.literal("CURRENT_TIMESTAMP"),
get() {
return dayjs(this.getDataValue("last_modify_time")).format("YYYY-MM-DD HH:mm:ss");
},
};
model[name] = sequelize.define(name, attrs, {
tableName: name,
timestamps: false,
hooks: {
beforeValidate: (obj) => {
let now = Date.now();
if (obj.isNewRecord) {
obj.create_time = now;
obj.last_modify_time = now;
} else {
obj.last_modify_time = now;
}
},
afterCreate: async (obj) => {
let tableName = obj._modelOptions.tableName;
if (tableName !== "sys_log") {
let logStr = logCreateField(obj);
await model["sys_log"].create({ table_name: tableName, operate: "新增", content: logStr });
}
},
afterDestroy: async (obj) => {
let id = obj.id;
let tableName = obj._modelOptions.tableName;
if (tableName !== "sys_log") {
await model["sys_log"].create({ table_name: tableName, operate: "删除", content: `用户删除id为 <span class="bold"> ${id} </span>` });
}
},
beforeUpdate: async (obj) => {
let tableName = obj._modelOptions.tableName;
if (tableName !== "sys_log") {
let id = obj.id;
let tableName = obj._modelOptions.tableName;
let updateRow = await model[tableName].findOne({ where: { id } });
let logStr = logEditField(updateRow, obj);
await model["sys_log"].create({ table_name: tableName, operate: "修改", content: logStr });
}
},
},
});
return model[name];
};
let exp = {
sequelize,
define,
sync: () => {
if (process.env.NODE_ENV !== "production") {
sequelize.sync({ force: false });
} else {
throw new Error("Cannot sync() when NODE_ENV is set to 'production'.");
}
},
};
module.exports = exp;