import { useState } from 'react'; import { commonQueryValue, getColumnsValue, getColumnsValueByLogic, } from '../../services/common/CommonController'; import { startLoading } from '../Loading'; export function useXFormList(str: any, addCondition: any, module: string) { //标记,用来判断传的是通过配置文件获取还是通过logic获取 const isStr = typeof str === 'string'; const [formConfig, setFormConfig] = useState({ formJson: [], columnJson: [], }); const [queryList, setQueryList] = useState([]); const [totalPage, setTotalPage] = useState(0); const [condition, setCondition] = useState(); const [visible, setVisible] = useState(false); const filterParams = (conditionParams: any) => { const condition: any = {}; for (const key in conditionParams) { if ( Object.prototype.hasOwnProperty.call(conditionParams, key) && conditionParams[key] ) { condition[key] = conditionParams[key]; } } return condition; }; //加载数据 const loadData = async ( conditionParams: any, pageNo: number, config?: any, ) => { try { setVisible(false); let condition: any = filterParams(conditionParams); if (addCondition) { condition = { ...condition, ...addCondition }; } const queryParamsObj = isStr ? { queryParamsName: str, queryParams: null } : { queryParamsName: null, queryParams: config || formConfig }; const queryParam = { pageNo: pageNo, pageSize: 20, conditionParams: condition, ...queryParamsObj, }; setCondition(condition); const result = await commonQueryValue(queryParam, module); console.log('这里是结果', result); if (result.data) { setQueryList(pageNo > 1 ? [...queryList, ...result.data] : result.data); setTotalPage(result.totalPage); } } catch (error) { console.log(error); } }; /** * * 初始化数据 */ const initData = async () => { const loading = startLoading(); let result: any; try { if (isStr) { //如果是通过配置文件获取,先从内存拿,拿不到就去请求 const value = localStorage.getItem(str); result = value ? JSON.parse(value) : await getColumnsValue(str, module); localStorage.setItem(str, JSON.stringify(result)) } else { //通过logic获取的,直接去请求,是要传变量的,所以不要放到内存里面以免影响性能 result = await getColumnsValueByLogic(str, module); } setFormConfig(result); await loadData(condition, 1, result); } catch (error) { console.log(error); } finally { loading.close(); } }; return { formConfig, queryList, totalPage, visible, setVisible, condition, loadData, initData, }; }