adapters.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import _ from 'lodash-es';
  2. import { ModuleData, ShowStyle } from './types';
  3. import { ModulePositionMap, ModuleSizeMap } from './options';
  4. /** 将原本的 formData 格式化为 api.saveOrUpdate 需要的格式 */
  5. export function parseFormDataToParams(formData: Record<string, number | string | undefined>) {
  6. const params = {};
  7. _.forEach(formData, (v: string | undefined, k) => {
  8. if (!v) return;
  9. return _.set(params, k, v);
  10. });
  11. return params;
  12. }
  13. /** 将 api.list 返回的数据格式化,格式化之后可以支持对应的表单使用,该方法会修改源数据 */
  14. export function parseModuleData(listData: { moduleData: ModuleData; showStyle: ShowStyle }) {
  15. _.forEach(listData.showStyle, (v, k) => {
  16. listData[`showStyle.${k}`] = _.get(
  17. {
  18. ...ModuleSizeMap,
  19. ...ModulePositionMap,
  20. },
  21. v,
  22. v
  23. );
  24. });
  25. return listData;
  26. }
  27. /** 根据配置中的 formatter 将文本格式并返回 */
  28. export function getFormattedText(data: any, formatter: string, defaultValue?: any): string {
  29. // e.g. 'pre${prop[0].name}suf' => ['pre${prop[0].name}suf', 'prop[0].name']
  30. const exp = /\$\{([\w|\.|\[|\]]*)\}/g;
  31. const res = exp.exec(formatter);
  32. if (!res) return formatter;
  33. const [__, prop] = res;
  34. const val = defaultValue === undefined ? '-' : defaultValue;
  35. const txt = _.get(data, prop);
  36. return formatter.replace(exp, _.isNil(txt) ? val : txt);
  37. }
  38. /** 获取 formatter 需要取的源 prop,用于在一些不支持 formatter 的组件中使用 */
  39. export function getRawProp(formatter: string): string {
  40. // e.g. 'pre${prop[0].name}suf' => ['pre${prop[0].name}suf', 'prop[0].name']
  41. const exp = /\$\{([\w|\.|\[|\]]*)\}/g;
  42. const res = exp.exec(formatter);
  43. if (!res) return '';
  44. const [__, prop] = res;
  45. return prop;
  46. }