import { getLogicData } from '../../utils/util'; import { Form } from 'antd-mobile'; import { useMemo } from 'react'; import { useSetState } from 'ahooks'; export function useXForm(formJson: Array, loadData: any) { const [fromItem] = Form.useForm(); const onFinish = (values: any) => { loadData(values, 1); }; // ---------------------动态表单数据处理------------------------------------ // 过滤掉仅用于新增/修改场景的表单项 以及多个下拉框得组 const realJsonData = useMemo(() => { return formJson.filter((item: any) => !item.isOnlyAddOrEdit); }, [formJson]); // 多层下拉框组 数据储存,各组数量 const [SelectsData, setSelectsData] = useSetState(null); // 级联下拉框选择执行函数 const selectsItemCheck = (groupName: any, index: any, value: any) => { const SelectsArray = SelectsData.SelectsArray; // 获取当前下拉框子下拉框的数据 SelectsArray[groupName][index + 1] = SelectsData.SelectsArray[groupName][ index ].filter((item: any) => item.value === value)[0].children; // 清空子下拉框的子们的数据源 for (let i = index + 2; i <= SelectsData.SelectsNumber[groupName]; i++) { SelectsArray[groupName][i] = []; } setSelectsData({ SelectsArray: SelectsArray, }); }; const initForm = async () => { const selectSate = formJson.filter( (item: any) => !item.isOnlyAddOrEdit && item.group, ); const groupName = [...new Set(selectSate.map((item: any) => item.group))]; // 初始化数据组 const SelectsArrayData: any = {}; const SelectsNumberData: any = {}; for (const row of groupName) { SelectsArrayData[row] = []; const SelectsItem: any = []; for (const item of selectSate) { if (item.groupIndex === 1) { if (item.keyName.substring(0, 6) === 'logic@') { // 请求logic const data: any = await getLogicData(item.keyName, {}); SelectsArrayData[item.group][item.groupIndex] = data.data; } else { SelectsArrayData[item.group][item.groupIndex] = JSON.parse( item.keyName, ); } } if (item.group === row) { SelectsItem.push(item); } } SelectsNumberData[row] = SelectsItem.length ? SelectsItem.length : 0; } setSelectsData({ SelectsArray: SelectsArrayData, SelectsNumber: SelectsNumberData, }); } return { fromItem, SelectsData, onFinish, initForm, realJsonData, selectsItemCheck } }