fix(audit): 修复审计日志时区差并支持供应商单号搜索与展示
- 解决审计日志 8 小时时区差:后端输出带时区 UTC ISO 字符串,前端 formatTime 增加 UTC 自动解析换算 - 审计日志支持单号检索:list_audit_logs 关联 DouyuTask 匹配供应商单号、外部单号、UID、昵称等 - 列表摘要与详情抽屉优化:摘要直观展示供应商单号与外部单号,抽屉增加专用供应商订单列表并支持一键复制 - 增加测试用例覆盖时间格式与单号反向检索
This commit is contained in:
@@ -7,12 +7,22 @@ dayjs.extend(timezone);
|
||||
|
||||
/**
|
||||
* 将后端返回的 ISO 时间字符串格式化为本地可读格式。
|
||||
* 后端统一输出带时区的 ISO 字符串(如 2026-06-22T15:51:26+00:00),
|
||||
* 此函数自动转为本地时区并格式化为 "YYYY-MM-DD HH:mm:ss"。
|
||||
* 兼容带时区(如 2026-06-22T15:51:26+00:00 / 2026-06-22T15:51:26Z)与
|
||||
* 不带时区后缀的 UTC 时间字符串(如 2026-06-22T15:51:26 / 2026-06-22 15:51:26),
|
||||
* 自动转为本地时区并格式化为 "YYYY-MM-DD HH:mm:ss"。
|
||||
*/
|
||||
function normalizeUtcDateStr(val: string): string {
|
||||
let raw = val.trim();
|
||||
if (/^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?$/.test(raw)) {
|
||||
raw = raw.replace(' ', 'T') + 'Z';
|
||||
}
|
||||
return raw;
|
||||
}
|
||||
|
||||
export function formatTime(val: string | null | undefined): string {
|
||||
if (!val) return '-';
|
||||
return dayjs(val).format('YYYY-MM-DD HH:mm:ss');
|
||||
const d = dayjs(normalizeUtcDateStr(val));
|
||||
return d.isValid() ? d.format('YYYY-MM-DD HH:mm:ss') : val;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,5 +30,7 @@ export function formatTime(val: string | null | undefined): string {
|
||||
*/
|
||||
export function formatTimeShort(val: string | null | undefined): string {
|
||||
if (!val) return '-';
|
||||
return dayjs(val).format('MM-DD HH:mm');
|
||||
const d = dayjs(normalizeUtcDateStr(val));
|
||||
return d.isValid() ? d.format('MM-DD HH:mm') : val;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user