Files
aiot-platform-ui/apps/web-antd/src/utils/formCreate.ts

60 lines
1.7 KiB
TypeScript
Raw Normal View History

/**
* https://github.com/xaboy/form-create-designer 封装的工具类
*/
// TODO @芋艿:后续这些 form-create 的优化;另外需要使用 form-create-helper 会好点
import { isRef } from 'vue';
import formCreate from '@form-create/ant-design-vue';
// 编码表单 Conf
2025-06-28 00:22:16 +08:00
export const encodeConf = (designerRef: any) => {
return JSON.stringify(designerRef.value.getOption());
};
// 编码表单 Fields
2025-06-28 00:22:16 +08:00
export const encodeFields = (designerRef: any) => {
const rule = JSON.parse(designerRef.value.getJson());
const fields: string[] = [];
rule.forEach((item: unknown) => {
fields.push(JSON.stringify(item));
});
return fields;
};
// 解码表单 Fields
export const decodeFields = (fields: string[]) => {
const rule: object[] = [];
fields.forEach((item) => {
rule.push(formCreate.parseJson(item));
});
return rule;
};
// 设置表单的 Conf 和 Fields适用 FcDesigner 场景
export const setConfAndFields = (
2025-06-28 00:22:16 +08:00
designerRef: any,
conf: string,
fields: string | string[],
) => {
designerRef.value.setOption(formCreate.parseJson(conf));
2025-06-28 00:22:16 +08:00
// 处理 fields 参数类型,确保传入 decodeFields 的是 string[] 类型
const fieldsArray = Array.isArray(fields) ? fields : [fields];
designerRef.value.setRule(decodeFields(fieldsArray));
};
// 设置表单的 Conf 和 Fields适用 form-create 场景
export const setConfAndFields2 = (
2025-06-28 00:22:16 +08:00
detailPreview: any,
conf: string,
fields: string[],
2025-06-28 00:22:16 +08:00
value?: any,
) => {
if (isRef(detailPreview)) {
detailPreview = detailPreview.value;
}
detailPreview.option = formCreate.parseJson(conf);
detailPreview.rule = decodeFields(fields);
if (value) {
detailPreview.value = value;
}
};