import { getDateTimeUnit } from '@jnpf/utils';
|
|
import dayjs from 'dayjs';
|
import { cloneDeep } from 'lodash-es';
|
|
export function refreshFlowEditTime(fields: any[], formData: any, config: any, now = new Date()) {
|
if (String(config.opType) !== '-1' || !config.id || config.disabled || config.readonly) return formData;
|
|
const data = cloneDeep(formData);
|
const operates = config.formOperates || [];
|
const current = dayjs(now);
|
|
const canWrite = (id: string) => {
|
const operate = operates.find((item) => item.id === id);
|
return !operate || !!operate.write;
|
};
|
const visit = (items: any[], record: any, tableName = '') => {
|
for (const item of items || []) {
|
const fieldName = item.__vModel__;
|
const fieldConfig = item.__config__;
|
if (!fieldConfig) continue;
|
|
const operateId = tableName ? `${tableName}-${fieldName}` : fieldName;
|
if (fieldConfig.jnpfKey === 'table') {
|
if (fieldName && canWrite(operateId) && Array.isArray(record[fieldName])) {
|
for (const row of record[fieldName]) {
|
if (row && typeof row === 'object') visit(fieldConfig.children, row, fieldName);
|
}
|
}
|
continue;
|
}
|
|
if (fieldName && fieldConfig.updateOnFlowEdit && canWrite(operateId)) {
|
if (fieldConfig.jnpfKey === 'datePicker') record[fieldName] = current.startOf(getDateTimeUnit(item.format)).valueOf();
|
if (fieldConfig.jnpfKey === 'timePicker') record[fieldName] = current.format(item.format || 'HH:mm:ss');
|
}
|
if (Array.isArray(fieldConfig.children)) visit(fieldConfig.children, record, tableName);
|
}
|
};
|
visit(fields, data);
|
return data;
|
}
|