fix(file): 修复日期格式文件名被误转换导致创建失败的问题

newDateString 函数在处理请求参数时会将所有符合日期格式的字符串
(如 "2026-01-15")转换为完整日期时间格式("2026-01-15 00:00:00"),
导致文件名中出现冒号,触发后端文件名校验错误。

修复方案:
- 直接调用时(key=null),保持原有行为用于显示格式化
- 递归处理对象属性时,仅对白名单字段(times、*_at)进行转换
- 其他字段(如 name)保持原值不转换

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kuaifan 2026-01-20 22:33:45 +00:00
parent 9097369b0c
commit 3482e4b1a8

View File

@ -2409,24 +2409,37 @@ const timezone = require("dayjs/plugin/timezone");
* 对象中有Date格式的转成指定格式 * 对象中有Date格式的转成指定格式
* @param value 支持类型dayjsDatestring * @param value 支持类型dayjsDatestring
* @param format 默认格式YYYY-MM-DD HH:mm:ss * @param format 默认格式YYYY-MM-DD HH:mm:ss
* @param key 当前字段名用于白名单判断
* @returns {*} * @returns {*}
*/ */
newDateString(value, format = "YYYY-MM-DD HH:mm:ss") { newDateString(value, format = "YYYY-MM-DD HH:mm:ss", key = null) {
if (value === null) { if (value === null) {
return value; return value;
} }
if (value instanceof dayjs || value instanceof Date || $A.isDateString(value)) { // Date/dayjs 对象直接转换
value = $A.dayjs(value).format(format); if (value instanceof dayjs || value instanceof Date) {
} else if ($A.isJson(value)) { return $A.dayjs(value).format(format);
}
// 字符串日期处理:
// 1. 直接调用key=null始终转换用于显示格式化
// 2. 递归调用key有值仅白名单字段转换避免文件名等被误转换
if ($A.isDateString(value)) {
if (key === null || key === 'times' || /_at$/i.test(key)) {
return $A.dayjs(value).format(format);
}
return value;
}
// 对象:递归处理
if ($A.isJson(value)) {
value = Object.assign({}, value) value = Object.assign({}, value)
for (let key in value) { for (let k in value) {
if (!value.hasOwnProperty(key)) continue; if (!value.hasOwnProperty(k)) continue;
value[key] = $A.newDateString(value[key], format); value[k] = $A.newDateString(value[k], format, k);
} }
} else if ($A.isArray(value)) { } else if ($A.isArray(value)) {
value = Object.assign([], value) value = Object.assign([], value)
value.forEach((val, index) => { value.forEach((val, index) => {
value[index] = $A.newDateString(val, format); value[index] = $A.newDateString(val, format, key);
}); });
} }
return value; return value;