|
|
@@ -303,6 +303,70 @@ const handleSpreadPrint = () => {
|
|
|
previewSpread.print()
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 将 OADate 格式转换为标准日期格式
|
|
|
+ * @param value 需要转换的值
|
|
|
+ * @returns 转换后的日期字符串(YYYY-MM-DD)或原值
|
|
|
+ */
|
|
|
+const convertOADate = (value: any): any => {
|
|
|
+ if (typeof value !== 'string') return value;
|
|
|
+
|
|
|
+ // 匹配 /OADate(数字)/ 格式
|
|
|
+ const oaDatePattern = /^\/OADate\(([^)]+)\)\/$/;
|
|
|
+ const match = value.match(oaDatePattern);
|
|
|
+
|
|
|
+ if (!match) return value;
|
|
|
+
|
|
|
+ try {
|
|
|
+ const oaDateValue = parseFloat(match[1]);
|
|
|
+ // OADate 是从 1899-12-30 开始的天数(包含小数部分表示时间)
|
|
|
+ const excelEpoch = new Date(1899, 11, 30); // 1899-12-30
|
|
|
+ const convertedDate = new Date(excelEpoch.getTime() + oaDateValue * 24 * 60 * 60 * 1000);
|
|
|
+
|
|
|
+ // 格式化为 YYYY-MM-DD
|
|
|
+ const year = convertedDate.getFullYear();
|
|
|
+ const month = String(convertedDate.getMonth() + 1).padStart(2, '0');
|
|
|
+ const day = String(convertedDate.getDate()).padStart(2, '0');
|
|
|
+
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
+ } catch (error) {
|
|
|
+ console.warn('OADate 转换失败:', value, error);
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 递归处理对象中的所有 OADate 格式字段
|
|
|
+ * @param obj 需要处理的对象
|
|
|
+ * @returns 处理后的对象
|
|
|
+ */
|
|
|
+const processOADateFields = (obj: any): any => {
|
|
|
+ if (obj === null || obj === undefined) return obj;
|
|
|
+
|
|
|
+ // 处理数组
|
|
|
+ if (Array.isArray(obj)) {
|
|
|
+ return obj.map(item => processOADateFields(item));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理对象
|
|
|
+ if (typeof obj === 'object') {
|
|
|
+ const result: any = {};
|
|
|
+ for (const key in obj) {
|
|
|
+ if (obj.hasOwnProperty(key)) {
|
|
|
+ result[key] = processOADateFields(obj[key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理字符串(检查是否为 OADate 格式)
|
|
|
+ if (typeof obj === 'string') {
|
|
|
+ return convertOADate(obj);
|
|
|
+ }
|
|
|
+
|
|
|
+ return obj;
|
|
|
+};
|
|
|
+
|
|
|
const handleSave = () => {
|
|
|
loading.value = true;
|
|
|
|
|
|
@@ -343,6 +407,9 @@ const handleSave = () => {
|
|
|
//let dataSource = previewSpread.getActiveSheet().getDataSource().rT;
|
|
|
|
|
|
if (dataSource) {
|
|
|
+ // 处理 OADate 格式的日期字段
|
|
|
+ dataSource = processOADateFields(dataSource);
|
|
|
+
|
|
|
DynamicTbValApi.saveAllColValue(insId.value, dataSource).then(res => {
|
|
|
if (res) {
|
|
|
ElMessage.success('保存成功')
|