82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import dayjs from "dayjs";
|
||
import { Request, Response } from "express";
|
||
|
||
export function filterObjEmptyVal(obj: { [key: string]: any }) {
|
||
if (!obj) return {};
|
||
if (Array.isArray(obj))
|
||
throw Error("你传入了一个数组,需要的是一个Object对象");
|
||
|
||
let emptyObj = {};
|
||
|
||
for (let [key, value] of Object.entries(obj)) {
|
||
if (value || value === 0) emptyObj[key] = value;
|
||
}
|
||
return emptyObj;
|
||
}
|
||
|
||
export function getNowDateStr() {
|
||
return dayjs().format("YYYY-MM-DD HH:mm:ss");
|
||
}
|
||
|
||
export function buildTree(items, parentId = 0) {
|
||
return items
|
||
.filter((item) => item.parentId === parentId)
|
||
.map((item) => ({
|
||
...item,
|
||
children: buildTree(items, item.id),
|
||
}));
|
||
}
|
||
|
||
export function getPaginationParams(req: Request): {
|
||
pageSize: number;
|
||
pageNumber: number;
|
||
} {
|
||
const { pageSize = 10, pageNumber = 1 } =
|
||
req.method === "GET" ? req.query : req.body;
|
||
|
||
return {
|
||
pageSize: Math.max(1, parseInt(pageSize as string, 10)),
|
||
pageNumber: Math.max(1, parseInt(pageNumber as string, 10)),
|
||
};
|
||
}
|
||
|
||
/** 统一错误处理 */
|
||
export function handleError(res: Response, error: any) {
|
||
const message = error instanceof Error ? error.message : "未知错误";
|
||
res.status(500).json({
|
||
code: 500,
|
||
msg: message,
|
||
});
|
||
}
|
||
|
||
/** 处理日期参数 */
|
||
export default function parseRangDate(req: Request) {
|
||
let { startDate: reqStart, endDate: reqEnd } =
|
||
req.method === "GET" ? req.query : req.body;
|
||
const dateFormat = "YYYY-MM-DD HH:mm:ss";
|
||
|
||
if (!reqStart && !reqEnd) return {};
|
||
|
||
// 验证必填参数
|
||
if (!reqStart) reqStart = dayjs().startOf("day").toDate();
|
||
|
||
// 处理起始日期
|
||
const start = dayjs(reqStart as string, dateFormat);
|
||
if (!start.isValid()) throw new Error("起始日期格式错误");
|
||
|
||
// 处理结束日期
|
||
let end = start;
|
||
if (reqEnd) {
|
||
end = dayjs(reqEnd as string, dateFormat);
|
||
if (!end.isValid()) throw new Error("结束日期格式错误");
|
||
if (end.isBefore(start)) throw new Error("结束日期不能早于起始日期");
|
||
}
|
||
|
||
// 生成时间范围
|
||
|
||
return {
|
||
startDate: start.format("YYYY-MM-DD HH:mm:ss"),
|
||
endDate: (reqEnd ? end : dayjs()).format("YYYY-MM-DD HH:mm:ss"),
|
||
};
|
||
}
|