刘光辉
8 小时以前 0dfe84494048ce27ba8449831782128412d3eb13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { cloneDeep } from 'lodash-es';
 
export type DynamicModelActionType = 'add' | 'detail' | 'edit';
 
export interface OpenDynamicModelOptions {
  id?: string;
  menuId?: string;
  modelId: string;
  onSuccess?: (data?: any) => void;
  params?: Record<string, any>;
  success?: (data?: any) => void;
  title?: string;
}
 
export interface DynamicModelOpenContext {
  isDataManage?: boolean;
  isPreview?: boolean;
}
 
export interface ParsedDynamicModelConfig {
  columnData: Record<string, any>;
  formConf: Record<string, any>;
  fullName: string;
  webType: number | string;
}
 
export function validateDynamicModelActionOptions(action: DynamicModelActionType, options?: OpenDynamicModelOptions) {
  if (!options?.modelId) throw new Error('缺少模型 id');
  if ((action === 'edit' || action === 'detail') && !options.id) throw new Error('缺少数据 id');
}
 
export function parseTargetDynamicModelConfig(configData: any): ParsedDynamicModelConfig {
  if (!configData) throw new Error('打开表单失败');
  if (`${configData.webType}` === '4') throw new Error('不支持打开数据接口类型');
  if (!configData.formData) throw new Error('目标表单配置异常');
 
  try {
    return {
      columnData: configData.columnData ? JSON.parse(configData.columnData) : {},
      formConf: JSON.parse(configData.formData),
      fullName: configData.fullName || '',
      webType: configData.webType,
    };
  } catch {
    throw new Error('目标表单配置异常');
  }
}
 
export function buildDynamicModelOpenData(
  action: DynamicModelActionType,
  input: {
    context: DynamicModelOpenContext;
    options: OpenDynamicModelOptions;
    target: ParsedDynamicModelConfig;
  },
) {
  const { context, options, target } = input;
  const formConf = cloneDeep(target.formConf);
  const menuId = options.menuId || '';
  const useFormPermission = !!menuId && !!target.columnData.useFormPermission;
  const title = action === 'detail' ? options.title || '' : options.title || target.fullName;
  const id = action === 'add' ? '' : options.id;
 
  const baseData = {
    formConf,
    id,
    isDataManage: !!context.isDataManage,
    isPreview: !!context.isPreview,
    menuId,
    modelId: options.modelId,
    onSuccess: options.onSuccess || options.success,
    title,
    useFormPermission,
  };
 
  if (action === 'detail') {
    return {
      ...baseData,
      hideExtra: !!context.isDataManage,
    };
  }
 
  return {
    ...baseData,
    allList: [],
    formData: options.params || undefined,
    showMoreBtn: action === 'edit' ? false : ![3, 5].includes(Number(target.columnData.type)),
  };
}