Kaynağa Gözat

Merge branch 'develop' of http://192.168.0.253:3000/bozzysadmb/ISCS-Client-V1.0 into develop

pm 4 ay önce
ebeveyn
işleme
055780bb70
2 değiştirilmiş dosya ile 115 ekleme ve 8 silme
  1. 115 5
      src/components/MyTask.tsx
  2. 0 3
      src/components/ProcessDesigner.tsx

+ 115 - 5
src/components/MyTask.tsx

@@ -5,11 +5,66 @@ import { Button, Space, Table as AntdTable, Input, message, Modal, Form as AntdF
 import { UploadOutlined, LockOutlined, KeyOutlined } from '@ant-design/icons';
 import type { ColumnsType } from 'antd/es/table';
 import { toast } from 'sonner';
+import dayjs, { Dayjs } from 'dayjs';
 import { myTaskApi, MyTaskVO, MyTaskPageParam, PageResponse, MyTaskNodeDetailVO, UpdateNodeApprovalParam } from '../api/mytask';
 import { dateFormatter } from '../utils/formatTime';
 import { DICT_TYPE, getDictLabel } from '../utils/dict';
 import { setConfAndFields2, FormCreateData } from '../utils/formCreate';
 
+// 辅助函数:将表单值中的日期字符串转换为 dayjs 对象
+const convertDateValues = (formValues: any, fields: any[]): any => {
+  const fieldTypeMap: { [key: string]: string } = {};
+  
+  // 建立字段名到类型的映射
+  fields.forEach((field: any) => {
+    const fieldObj = typeof field === 'string' ? JSON.parse(field) : field;
+    const fieldName = fieldObj.name || fieldObj.field;
+    if (fieldName) {
+      fieldTypeMap[fieldName] = fieldObj.type;
+    }
+  });
+  
+  // 转换日期值
+  const convertedValues: any = {};
+  Object.keys(formValues).forEach((fieldName) => {
+    const fieldType = fieldTypeMap[fieldName];
+    const value = formValues[fieldName];
+    
+    if (fieldType === 'date' || fieldType === 'datetime') {
+      // 日期或日期时间类型
+      if (typeof value === 'string' && value.trim() !== '') {
+        const dayjsValue = dayjs(value);
+        convertedValues[fieldName] = dayjsValue.isValid() ? dayjsValue : undefined;
+      } else if (value && typeof value === 'object' && 'isValid' in value) {
+        // 已经是 dayjs 对象
+        convertedValues[fieldName] = value;
+      } else {
+        convertedValues[fieldName] = undefined;
+      }
+    } else if (fieldType === 'daterange') {
+      // 日期范围类型
+      if (Array.isArray(value) && value.length === 2) {
+        const [start, end] = value;
+        const startDayjs = typeof start === 'string' && start ? dayjs(start) : (start && typeof start === 'object' && 'isValid' in start ? start : null);
+        const endDayjs = typeof end === 'string' && end ? dayjs(end) : (end && typeof end === 'object' && 'isValid' in end ? end : null);
+        if (startDayjs && (typeof startDayjs === 'object' && 'isValid' in startDayjs ? startDayjs.isValid() : true) && 
+            endDayjs && (typeof endDayjs === 'object' && 'isValid' in endDayjs ? endDayjs.isValid() : true)) {
+          convertedValues[fieldName] = [startDayjs, endDayjs];
+        } else {
+          convertedValues[fieldName] = undefined;
+        }
+      } else {
+        convertedValues[fieldName] = undefined;
+      }
+    } else {
+      // 其他类型直接使用原值
+      convertedValues[fieldName] = value;
+    }
+  });
+  
+  return convertedValues;
+};
+
 export default function MyTask() {
   const navigate = useNavigate();
   
@@ -584,7 +639,10 @@ export default function MyTask() {
       // 获取 formId(可能为 0,所以需要明确检查 undefined 和 null)
       const formId = detailDataWithWorkInfo.formId;
       // formId 可能是数字(包括 0)或字符串,只要不是 undefined、null 或空字符串,就认为有 formId
-      const hasFormId = formId !== undefined && formId !== null && formId !== '' && (typeof formId === 'number' || (typeof formId === 'string' && formId.trim() !== ''));
+      const hasFormId = formId !== undefined && formId !== null && (
+        typeof formId === 'number' || 
+        (typeof formId === 'string' && formId !== '' && formId.trim() !== '')
+      );
       
       // 检查是否有 formData(已提交的表单数据)
       const hasFormData = detailDataWithWorkInfo.formData && (
@@ -645,12 +703,56 @@ export default function MyTask() {
             
             // 解析 fields 中的每个字段,提取 value 值用于回显
             const formValues: any = {};
+            const fieldTypeMap: { [key: string]: string } = {}; // 存储字段名到类型的映射
+            
+            // 先解析所有字段,建立字段类型映射
+            fieldsStringArray.forEach((fieldString: string) => {
+              try {
+                const fieldObj = typeof fieldString === 'string' ? JSON.parse(fieldString) : fieldString;
+                const fieldName = fieldObj.name || fieldObj.field;
+                if (fieldName) {
+                  fieldTypeMap[fieldName] = fieldObj.type;
+                }
+              } catch (e) {
+                console.error('MyTask: 解析字段 JSON 失败', e, fieldString);
+              }
+            });
+            
+            // 提取值并转换日期类型
             fieldsStringArray.forEach((fieldString: string) => {
               try {
                 const fieldObj = typeof fieldString === 'string' ? JSON.parse(fieldString) : fieldString;
                 const fieldName = fieldObj.name || fieldObj.field;
                 if (fieldName && fieldObj.value !== undefined && fieldObj.value !== null) {
-                  formValues[fieldName] = fieldObj.value;
+                  const fieldType = fieldTypeMap[fieldName];
+                  let value = fieldObj.value;
+                  
+                  // 如果是日期类型,转换为 dayjs 对象
+                  if (fieldType === 'date' || fieldType === 'datetime') {
+                    if (typeof value === 'string' && value.trim() !== '') {
+                      const dayjsValue = dayjs(value);
+                      formValues[fieldName] = dayjsValue.isValid() ? dayjsValue : undefined;
+                    } else {
+                      formValues[fieldName] = undefined;
+                    }
+                  } else if (fieldType === 'daterange') {
+                    // 日期范围类型,转换为 dayjs 数组
+                    if (Array.isArray(value) && value.length === 2) {
+                      const [start, end] = value;
+                      const startDayjs = typeof start === 'string' && start ? dayjs(start) : null;
+                      const endDayjs = typeof end === 'string' && end ? dayjs(end) : null;
+                      if (startDayjs && startDayjs.isValid() && endDayjs && endDayjs.isValid()) {
+                        formValues[fieldName] = [startDayjs, endDayjs];
+                      } else {
+                        formValues[fieldName] = undefined;
+                      }
+                    } else {
+                      formValues[fieldName] = undefined;
+                    }
+                  } else {
+                    // 其他类型直接使用原值
+                    formValues[fieldName] = value;
+                  }
                 }
               } catch (e) {
                 console.error('MyTask: 解析字段 JSON 失败', e, fieldString);
@@ -663,10 +765,13 @@ export default function MyTask() {
             setConfAndFields2(setFormData, conf, fields);
             console.log('MyTask: 表单配置已设置(从 formData)');
             
+            // 转换日期值为 dayjs 对象
+            const convertedFormValues = convertDateValues(formValues, fieldsStringArray);
+            
             // 回填表单值
             setTimeout(() => {
-              detailForm.setFieldsValue(formValues);
-              console.log('MyTask: 表单数据已回填(从 formData)', formValues);
+              detailForm.setFieldsValue(convertedFormValues);
+              console.log('MyTask: 表单数据已回填(从 formData)', convertedFormValues);
             }, 100);
           } else {
             console.warn('MyTask: formData 中缺少 conf 或 fields', { conf: !!conf, fields: !!fields });
@@ -753,9 +858,14 @@ export default function MyTask() {
               // 如果有表单数据值,回填到表单(在表单配置设置后)
               if (detailDataWithWorkInfo.formData) {
                 try {
-                  const formValues = typeof detailDataWithWorkInfo.formData === 'string' 
+                  let formValues = typeof detailDataWithWorkInfo.formData === 'string' 
                     ? JSON.parse(detailDataWithWorkInfo.formData) 
                     : detailDataWithWorkInfo.formData;
+                  
+                  // 转换日期值为 dayjs 对象
+                  const fieldsArray = Array.isArray(fields) ? fields : [];
+                  formValues = convertDateValues(formValues, fieldsArray);
+                  
                   // 延迟一下,确保表单字段已经渲染
                   setTimeout(() => {
                     detailForm.setFieldsValue(formValues);

+ 0 - 3
src/components/ProcessDesigner.tsx

@@ -989,7 +989,6 @@ export default function ProcessDesigner() {
       });
 
       const exportData = {
-        generatedAt: new Date().toISOString(),
         nodeCount: nodes.length,
         edgeCount: edges.length,
         adjacency,
@@ -1898,7 +1897,6 @@ export default function ProcessDesigner() {
       });
 
       const exportData = {
-        generatedAt: new Date().toISOString(),
         nodeCount: nodes.length,
         edgeCount: edges.length,
         adjacency,
@@ -2008,7 +2006,6 @@ export default function ProcessDesigner() {
     });
 
     const exportData = {
-      generatedAt: new Date().toISOString(),
       nodeCount: nodes.length,
       edgeCount: edges.length,
       adjacency,