import { BizValueType, ButtonAccess } from '@/components'; import column from '@/utils/column'; import { formLayout } from '@/utils/formLayout'; import { useIntl } from '@@/exports'; import { DrawerForm, ModalForm, ProCard, ProDescriptions, ProFormDependency, } from '@ant-design/pro-components'; import { useState } from 'react'; import { BizDetailProps } from './typing'; export default function BizDetail< BizVO extends Record, Func extends Record, >(props: BizDetailProps) { const { row, rowId, rowKey, permission, intlPrefix, formType, method, methodUpper, func, formContext, trigger, fieldProps, initValues, isMobile, columns, positionKey, showDetail = true, } = props; const [open, setOpen] = useState(false); const intl = useIntl(); let rest = { title: intl.formatMessage({ id: intlPrefix + '.modal.view.title', }), autoFocusFirstInput: true, submitTimeout: 2000, open: fieldProps?.open || open, onOpenChange: fieldProps?.onOpenChange || setOpen, request: async (): Promise => { const { data } = await func?.[`show${methodUpper}`]({ [`${method}ShowQry`]: { [`${rowKey}`]: rowId, }, }); const extra = await initValues?.(rowId!); return { [`${rowKey}`]: rowId, [`${method}VO`]: data, ...extra, isMobile, }; }, }; const renderForm = () => { if (formType === 'drawer' || formType === 'step') { return ( {...fieldProps} {...formLayout(isMobile)} width={isMobile ? '100%' : '85%'} drawerProps={{ destroyOnHidden: true, }} submitter={{ searchConfig: { resetText: '关闭', }, submitButtonProps: { style: { display: 'none', }, }, }} {...rest} > {columns && showDetail && ( {(data, form) => { return ( params={{ data: data[`${method}VO`] }} request={async (params) => Promise.resolve({ success: true, data: params?.data, }) } columns={[...columns]} column={column(data.isMobile, formContext)} /> {formContext && ( { const { data } = await func?.[ `show${methodUpper}` ]({ [`${method}ShowQry`]: { [`${rowKey}`]: rowId, }, }); form.setFieldValue(`${method}VO`, data); }, ), onChange: (key) => { form.setFieldValue('activeKey', key); }, }} /> )} ); }} )} ); } if (formType === 'modal') { return ( {...fieldProps} {...formLayout(isMobile)} modalProps={{ destroyOnHidden: true, }} submitter={{ searchConfig: { resetText: '关闭', }, submitButtonProps: { style: { display: 'none', }, }, }} {...rest} > {columns && ( {(data, form) => { return ( params={{ data: data[`${method}VO`] }} request={async (params) => Promise.resolve({ success: true, data: params?.data, }) } columns={[...columns]} column={column(data.isMobile, formContext)} /> {formContext && ( { const { data } = await func?.[ `show${methodUpper}` ]({ [`${method}ShowQry`]: { [`${rowKey}`]: rowId, }, }); form.setFieldValue(`${method}VO`, data); }, ), onChange: (key) => { form.setFieldValue('activeKey', key); }, }} /> )} ); }} )} ); } }; const renderTrigger = () => { if (trigger) { return (
{ setOpen(true); }} > {trigger?.(row)}
); } return ( { setOpen(true); }} positionKey={positionKey} > {intl.formatMessage({ id: intlPrefix + '.modal.view.button', })} ); }; return ( <> {renderTrigger()} {renderForm()} ); }