@topthink/components 1.0.56 → 1.0.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/editor-widget-ebec8493.js +356 -0
- package/es/editor-widget-ebec8493.js.map +1 -0
- package/es/form-74ef0417.js +2 -0
- package/es/form-74ef0417.js.map +1 -0
- package/es/form-8925a750.js +231 -0
- package/es/form-8925a750.js.map +1 -0
- package/es/form-9c0e638a.js +230 -1
- package/es/form-9c0e638a.js.map +1 -1
- package/es/index-2b97b70d.js +2 -0
- package/es/index-2b97b70d.js.map +1 -0
- package/es/index-303e1845.js +560 -0
- package/es/index-303e1845.js.map +1 -0
- package/es/index-4f51cece.js +1304 -19
- package/es/index-4f51cece.js.map +1 -1
- package/es/index-563b11c6.js +67 -0
- package/es/index-563b11c6.js.map +1 -0
- package/es/index-6ae8237d.js +67 -0
- package/es/index-6ae8237d.js.map +1 -0
- package/es/index-7a7c06a9.js +40 -0
- package/es/index-7a7c06a9.js.map +1 -0
- package/es/index-9869b1c6.js +1350 -0
- package/es/index-9869b1c6.js.map +1 -0
- package/es/index-a214613e.js +40 -0
- package/es/index-a214613e.js.map +1 -0
- package/es/index-d964165a.js +529 -9
- package/es/index-d964165a.js.map +1 -1
- package/es/index.js +1 -1
- package/package.json +7 -5
- package/types/components/lazy/form/widgets/editor-widget.d.ts +5 -0
- package/types/index.d.ts +1 -1
- package/types/utils/is-record.d.ts +1 -0
- package/types/errors/unauthorized.d.ts +0 -4
- /package/types/components/lazy/{form.d.ts → form/index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-563b11c6.js","sources":["../src/utils/message.ts","../src/components/modal/message.tsx","../src/hooks/use-state-with-callback.ts","../src/components/modal/show.tsx","../src/components/tooltip.tsx","../src/components/lazy/table/context.ts","../src/components/button.tsx","../src/components/modal/confirm.tsx","../src/components/modal/index.tsx","../src/utils/toast.tsx","../src/utils/is-record.ts","../src/request.ts","../src/hooks/use-safe-state.ts","../src/hooks/use-unmounted-ref.ts","../src/utils/wait-pay-complete.tsx","../src/components/result.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/space.tsx","../src/components/steps.tsx","../src/components/statistic.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/image-zoom.tsx","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/table.tsx","../src/hooks/use-overlay-state.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-callback-ref.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-debounce.ts"],"sourcesContent":["import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions<T = any> extends SweetAlertOptions<T> {\r\n\r\n}\r\n\r\nconst defaultOptions: MessageOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n};\r\n\r\nconst Message = {\r\n confirm: async <T = any>(options: MessageOptions<T>) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options,\r\n async preConfirm(data) {\r\n if (options.preConfirm) {\r\n try {\r\n return await options.preConfirm(data);\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n CustomSwal.showValidationMessage(e.message);\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n success: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'success',\r\n timer: 2000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 5000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n close: (result?: SweetAlertResult) => {\r\n CustomSwal.close(result);\r\n },\r\n defaults: defaultOptions\r\n};\r\n\r\nexport default Message;\r\n","import {\r\n ComponentType,\r\n createContext,\r\n Fragment,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport useStateWithCallback from '../../hooks/use-state-with-callback';\r\nimport { ModalProps } from 'react-bootstrap';\r\n\r\ninterface MessageContextType {\r\n container?: ModalProps['container'];\r\n}\r\n\r\nconst MessageContext = createContext<MessageContextType>({});\r\n\r\ntype MessageWrapProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n destroy: () => void\r\n message: T\r\n}\r\n\r\nexport type MessageProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n message: T\r\n state: {\r\n show: boolean\r\n onHide: () => void\r\n onExited: () => void\r\n container?: ModalProps['container']\r\n }\r\n}\r\n\r\nexport function wrapMessage<T = {}, P = any>(Component: ComponentType<MessageProps<T, P>>): ComponentType<MessageWrapProps<T, P>> {\r\n\r\n return ({ resolve, destroy, message }) => {\r\n\r\n const [show, setShow] = useStateWithCallback(true);\r\n const context = useContext(MessageContext);\r\n\r\n const handleResolve = useCallback((value: P | void) => {\r\n setShow(false, () => {\r\n resolve(value);\r\n });\r\n }, [setShow, resolve]);\r\n\r\n const state = useMemo(() => {\r\n return {\r\n show,\r\n onHide: () => handleResolve(),\r\n onExited: () => destroy(),\r\n container: context.container\r\n };\r\n }, [show, handleResolve, destroy]);\r\n\r\n return <Component\r\n resolve={handleResolve}\r\n state={state}\r\n message={message}\r\n />;\r\n };\r\n}\r\n\r\nexport function createMessage<T = {}, P = any>(Component: ComponentType<MessageWrapProps<T, P>>): (message: T) => Promise<P | void> {\r\n return (message) => {\r\n return new Promise<P | void>((resolve) => {\r\n const component = <Component\r\n resolve={resolve}\r\n destroy={() => {\r\n hide(component);\r\n }}\r\n message={message}\r\n />;\r\n\r\n show(component);\r\n });\r\n };\r\n}\r\n\r\ntype State = Set<ReactNode>\r\n\r\nlet listener: (state: State) => void = () => void 0;\r\n\r\nlet memoryState: State = new Set();\r\n\r\nexport const show = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.add(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport const hide = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.delete(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport default function Message(props: MessageContextType) {\r\n const [state, setState] = useState<State>(memoryState);\r\n useEffect(() => {\r\n listener = setState;\r\n }, []);\r\n\r\n return <MessageContext.Provider value={props}>\r\n {Array.from(state).map((message, index) => <Fragment key={`message-${index}`}>{message}</Fragment>)}\r\n </MessageContext.Provider>;\r\n}\r\n","import { SetStateAction, useEffect, useRef, useState } from 'react';\n\nexport default function useStateWithCallback<S>(initState: S): [S, (value: SetStateAction<S>, callback: () => void) => void] {\n const callbackRef = useRef<Function | null>(null);\n\n const [state, setState] = useState(initState);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current();\n callbackRef.current = null;\n }\n }, [state]);\n\n const setCallbackState = (value: SetStateAction<S>, callback: () => void) => {\n callbackRef.current = typeof callback === 'function' ? callback : null;\n setState(value);\n };\n\n return [state, setCallbackState];\n}\n","import { createMessage, MessageProps, wrapMessage } from './message';\r\nimport { ComponentType } from 'react';\r\n\r\nexport default function show<T, P = any>(Component: ComponentType<MessageProps<any, T>>, options?: P) {\r\n return createMessage(wrapMessage(Component))(options);\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const TableContext = createContext(false);\r\n","import { Button as BsButton, ButtonProps as BsButtonProps, Spinner } from 'react-bootstrap';\r\nimport { forwardRef, useContext } from 'react';\r\nimport Tooltip from './tooltip';\r\nimport { TableContext } from './lazy/table/context';\r\n\r\nexport interface ButtonProps extends BsButtonProps {\r\n loading?: boolean;\r\n percent?: number;\r\n tooltip?: string;\r\n}\r\n\r\nconst Button = forwardRef<any, ButtonProps>((\r\n {\r\n loading,\r\n percent,\r\n disabled,\r\n children,\r\n tooltip,\r\n variant,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n\r\n const inTable = useContext(TableContext);\r\n\r\n if (inTable && !variant) {\r\n variant = 'link';\r\n }\r\n\r\n if (loading) {\r\n disabled = true;\r\n children = <>\r\n <Spinner ref={ref} as='span' size='sm' role='status' aria-hidden='true' animation='border' />\r\n {percent ? <span className='ms-2'>{percent}%</span> : null}\r\n </>;\r\n }\r\n\r\n const button = <BsButton ref={ref} {...props} variant={variant} disabled={disabled}>{children}</BsButton>;\r\n\r\n if (tooltip) {\r\n return <Tooltip tooltip={tooltip}>\r\n <span className={'d-inline-block'}>{button}</span>\r\n </Tooltip>;\r\n }\r\n\r\n return button;\r\n});\r\n\r\nexport default Button;\r\n","import { FC } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { createMessage, MessageProps, wrapMessage } from './message';\r\nimport Button from '../button';\r\n\r\ninterface ConfirmOptions {\r\n title?: string;\r\n message: string;\r\n okText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nconst Confirm: FC<MessageProps<ConfirmOptions, true>> = function({\r\n state,\r\n message: {\r\n title,\r\n message,\r\n okText,\r\n cancelText\r\n },\r\n resolve,\r\n}) {\r\n return <Modal centered {...state} >\r\n <Modal.Header>\r\n <Modal.Title as='h5'>{title || '确认'}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>{message}</Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={() => resolve()}>{cancelText || '取消'}</Button>\r\n <Button onClick={() => resolve(true)}>{okText || '确定'}</Button>\r\n </Modal.Footer>\r\n </Modal>;\r\n};\r\n\r\nexport default function confirm(options: ConfirmOptions) {\r\n return createMessage(wrapMessage(Confirm))(options);\r\n}\r\n","import { Modal as ReactModal, ModalProps as ReactModalProps } from 'react-bootstrap';\r\nimport { ElementType, MouseEvent, ReactNode, useMemo, useState } from 'react';\r\nimport Button, { ButtonProps } from '../button';\r\nimport show from './show';\r\nimport confirm from './confirm';\r\nimport Message, { MessageProps } from './message';\r\n\r\nexport interface ModalProps extends Pick<\r\n ReactModalProps,\r\n 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'\r\n> {\r\n children: ReactNode;\r\n header?: ReactNode;\r\n footer?: ReactNode | ((args: { okButton: ReactNode, cancelButton: ReactNode }) => ReactNode);\r\n okText?: string;\r\n cancelText?: string;\r\n closable?: boolean;\r\n show?: boolean;\r\n onOk?: (e: MouseEvent) => void;\r\n onCancel?: (e: MouseEvent) => void;\r\n okButtonProps?: ButtonProps;\r\n bodyAs?: ElementType;\r\n headerAs?: ElementType;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nconst Modal = ({\r\n header,\r\n children,\r\n footer,\r\n closable = true,\r\n show,\r\n cancelText = '取消',\r\n okText = '确定',\r\n onOk,\r\n onCancel,\r\n onHide,\r\n okButtonProps,\r\n bodyAs,\r\n headerAs = 'h5',\r\n confirmLoading = false,\r\n ...rest\r\n}: ModalProps) => {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const okButton = useMemo(() => {\r\n return <Button loading={loading || confirmLoading} variant={'primary'} onClick={async (e) => {\r\n setLoading(true);\r\n try {\r\n await onOk?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }} {...okButtonProps}>{okText}</Button>;\r\n }, [okButtonProps, okText, onOk, onHide, loading, confirmLoading]);\r\n\r\n const cancelButton = useMemo(() => {\r\n return <Button variant='secondary' onClick={(e) => {\r\n onCancel?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n }}>{cancelText}</Button>;\r\n }, [onCancel, onHide, cancelText]);\r\n\r\n switch (typeof footer) {\r\n case 'undefined':\r\n footer = <>\r\n {cancelButton}\r\n {okButton}\r\n </>;\r\n break;\r\n case 'function':\r\n footer = footer({ okButton, cancelButton });\r\n break;\r\n }\r\n\r\n return <ReactModal {...rest} onHide={onHide} show={show}>\r\n {header && <ReactModal.Header closeButton={closable}>\r\n <ReactModal.Title as={headerAs}>{header}</ReactModal.Title>\r\n </ReactModal.Header>}\r\n <ReactModal.Body as={bodyAs}>{children}</ReactModal.Body>\r\n {footer && <ReactModal.Footer>{footer}</ReactModal.Footer>}\r\n </ReactModal>;\r\n};\r\n\r\nModal.Message = Message;\r\nModal.confirm = confirm;\r\nModal.show = show;\r\nexport default Modal;\r\nexport { MessageProps };\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\nimport { NotificationProps } from 'rc-notification/es/Notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nconst defaultOptions: NotificationProps & {\r\n getContainer?: () => HTMLElement;\r\n} = {};\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n ...defaultOptions,\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\nconst types = ['error', 'success', 'info'] as const;\r\n\r\ntype ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {\r\n defaults: typeof defaultOptions;\r\n};\r\n\r\nconst Toast = types.reduce((toast, type) => {\r\n toast[type] = (content: string, options?: NoticeContent) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n return toast;\r\n}, {} as any);\r\n\r\nToast.defaults = defaultOptions;\r\n\r\nexport default Toast as ToastType;\r\n","export default function isRecord(data: any): data is Record<string, string> {\r\n return data && (typeof data === 'object');\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Toast from './utils/toast';\r\nimport isRecord from './utils/is-record';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'retry-axios' {\r\n interface RetryConfig {\r\n retryDecider?: () => boolean;\r\n }\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n authTokenName?: string;\r\n }\r\n}\r\n\r\nrax.attach();\r\n\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: ({ config, response }) => {\r\n if (config.raxConfig?.retryDecider && !config.raxConfig.retryDecider()) {\r\n return false;\r\n }\r\n return config.method?.toUpperCase() === 'GET' && response?.status === 449;\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.defaults.authTokenName = 'authorization';\r\naxios.interceptors.request.use(\r\n config => {\r\n const key = config.authTokenName;\r\n if (key) {\r\n const token = localStorage.getItem(key);\r\n\r\n if (token) {\r\n config.headers = {\r\n Authorization: `Bearer ${token}`,\r\n ...config.headers,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nexport const showRequestError = (e: any) => {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Toast.error(errors as string);\r\n } else {\r\n throw e;\r\n }\r\n};\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true,\r\n arrayFormat: 'bracket',\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import { useCallback, useState } from 'react';\r\nimport type { Dispatch, SetStateAction } from 'react';\r\nimport useUnmountedRef from './use-unmounted-ref';\r\n\r\nfunction useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];\r\n\r\nfunction useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];\r\n\r\nfunction useSafeState<S>(initialState?: S | (() => S)) {\r\n const unmountedRef = useUnmountedRef();\r\n const [state, setState] = useState(initialState);\r\n const setCurrentState = useCallback((currentState) => {\r\n /** if component is unmounted, stop update */\r\n if (unmountedRef.current) return;\r\n setState(currentState);\r\n }, []);\r\n\r\n return [state, setCurrentState] as const;\r\n}\r\n\r\nexport default useSafeState;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useUnmountedRef = () => {\r\n const unmountedRef = useRef(false);\r\n useEffect(() => {\r\n unmountedRef.current = false;\r\n return () => {\r\n unmountedRef.current = true;\r\n };\r\n }, []);\r\n return unmountedRef;\r\n};\r\n\r\nexport default useUnmountedRef;\r\n","import show from '../components/modal/show';\r\nimport Modal, { MessageProps } from '../components/modal';\r\nimport { useEffect, useRef } from 'react';\r\nimport request from '../request';\r\nimport useSafeState from '../hooks/use-safe-state';\r\n\r\ninterface PayResult {\r\n pay_url: string;\r\n order_no: string;\r\n}\r\n\r\ninterface Options {\r\n result: PayResult;\r\n checkUrl: string;\r\n onComplete?: () => void;\r\n}\r\n\r\nconst WaitModal = function({ state, message, resolve }: MessageProps<Options>) {\r\n\r\n const open = useRef(true);\r\n const { result, checkUrl, onComplete } = message;\r\n const [checking, setChecking] = useSafeState(false);\r\n\r\n useEffect(() => {\r\n request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry(err) {\r\n return open.current && err.response?.status === 449;\r\n }\r\n }\r\n }).then(() => {\r\n onComplete?.();\r\n resolve();\r\n }).catch(() => null);\r\n }, []);\r\n\r\n return <Modal\r\n {...state}\r\n centered\r\n onHide={() => {\r\n open.current = false;\r\n state.onHide();\r\n }}\r\n backdrop='static'\r\n header='支付结果'\r\n okText='已完成支付'\r\n okButtonProps={{ loading: checking }}\r\n onOk={async (e) => {\r\n e.preventDefault();\r\n try {\r\n setChecking(true);\r\n await request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry() {\r\n return false;\r\n }\r\n }\r\n });\r\n onComplete?.();\r\n resolve();\r\n } catch {\r\n // ignore\r\n } finally {\r\n setChecking(false);\r\n }\r\n }}\r\n cancelText='取消'\r\n >\r\n 请在新打开的页面上进行支付,支付完成后再关闭此窗口\r\n </Modal>;\r\n};\r\n\r\nexport default function waitPayComplete(options: Options) {\r\n const { result } = options;\r\n window.open(result.pay_url);\r\n show(WaitModal, options);\r\n}\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean | number;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'primary',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap $height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ $height: number }>`\r\n position: relative;\r\n height: ${props => `${props.$height}px`};\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n direction?: 'vertical' | 'horizontal';\r\n className?: string;\r\n}\r\n\r\n\r\nexport default function Space({ children, className, size = 'small', direction = 'horizontal' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container className={className} $direction={direction} $size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ $size: number, $direction: string }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.$size}px;\r\n\r\n ${props => props.$direction === 'vertical' && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: inherit;\r\n `}\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazySteps = lazy(() => import('./lazy/steps'));\r\nconst LazyStep = lazy(() => import('./lazy/steps').then(({ Step }) => ({ default: Step })));\r\n\r\nexport default function Steps(props: ComponentProps<typeof LazySteps>) {\r\n return <Suspense fallback={null}>\r\n <LazySteps {...props} />\r\n </Suspense>;\r\n}\r\n\r\nconst Step = function(props: ComponentProps<typeof LazyStep>) {\r\n return <Suspense fallback={null}>\r\n <LazyStep {...props} />\r\n </Suspense>;\r\n};\r\n\r\nSteps.Step = Step;\r\n\r\nexport { Step };\r\n","import { ReactNode } from 'react';\r\nimport Card from './card';\r\nimport styled from 'styled-components';\r\n\r\nexport interface StatisticProps {\r\n title: ReactNode;\r\n content: ReactNode;\r\n footer?: ReactNode;\r\n}\r\n\r\nexport default function Statistic({ title, content, footer }: StatisticProps) {\r\n\r\n return <Card>\r\n <Title>{title}</Title>\r\n <Content>{content}</Content>\r\n {footer && <Footer>{footer}</Footer>}\r\n </Card>;\r\n}\r\n\r\nconst Footer = styled.div`\r\n margin-top: 9px;\r\n padding-top: 10px;\r\n border-top: 1px solid #f0f0f0;\r\n color: rgba(0, 0, 0, .65);\r\n`;\r\n\r\nconst Content = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n margin-bottom: 4px;\r\n color: rgba(0, 0, 0, .45);\r\n font-size: 1.1rem;\r\n`;\r\n\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList: ReactNode[] = [];\r\n let jumpPrev: ReactNode = null;\r\n let jumpNext: ReactNode = null;\r\n let firstPager: ReactNode = null;\r\n let lastPager: ReactNode = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n options?: Intl.NumberFormatOptions;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true, options = {} }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let opt;\r\n\r\n if (currency) {\r\n opt = {\r\n style: 'currency',\r\n currency: 'CNY'\r\n };\r\n } else {\r\n opt = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, { ...opt, ...options });\r\n }, [currency, locale, options]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean;\r\n}\r\n\r\nexport default function LoadingButton({ loading, disabled, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading || disabled}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazyImageZoom = lazy(() => import('./lazy/image-zoom'));\r\n\r\nexport default function ImageZoom(props: ComponentProps<typeof LazyImageZoom>) {\r\n return <Suspense fallback={null}>\r\n <LazyImageZoom {...props} />\r\n </Suspense>;\r\n}\r\n","import request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport Button, { ButtonProps } from './button';\r\nimport useSafeState from '../hooks/use-safe-state';\r\nimport Modal from './modal';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useSafeState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Modal.confirm({ message: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n showRequestError(e);\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomFormType } from './lazy/form';\r\n\r\nconst LazyForm = lazy(() => import('./lazy/form'));\r\n\r\nconst Form: CustomFormType = forwardRef((props, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyForm {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Form;\r\n\r\nexport type { FormProps, FormType } from './lazy/form';\r\n","import { ComponentProps, forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomTableType } from './lazy/table';\r\n\r\nconst LazyTable = lazy(() => import('./lazy/table'));\r\n\r\nconst Table: CustomTableType = forwardRef((props: ComponentProps<typeof LazyTable>, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyTable {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Table;\r\n\r\nexport type { TableProps, Columns, TableType } from './lazy/table';\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n MouseEvent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle\r\n} from 'react';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\nimport Modal, { ModalProps } from './modal';\r\nimport { ButtonProps } from 'react-bootstrap';\r\nimport Button from './button';\r\n\r\nexport interface ModalButtonProps extends Omit<ButtonProps, 'as'> {\r\n text: ReactNode;\r\n modalProps?: Omit<ModalProps, 'children' | 'confirmLoading' | 'onOk'>;\r\n onOk?: () => any;\r\n onShow?: () => void;\r\n confirmLoading?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n onOk,\r\n modalProps,\r\n children,\r\n onShow,\r\n confirmLoading,\r\n as = Button,\r\n ...props\r\n}, ref) => {\r\n\r\n const { state, show, hide } = useOverlayState({ onShow });\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: hide\r\n }));\r\n\r\n const handleOk = async (e: MouseEvent) => {\r\n if (onOk) {\r\n const result = await onOk();\r\n if (result === false) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n const button = createElement(as, {\r\n ...props,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal\r\n header={text}\r\n {...modalProps}\r\n {...state}\r\n confirmLoading={confirmLoading}\r\n onOk={handleOk}\r\n >\r\n {children}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps, ModalType } from './modal-button';\r\nimport { ReactNode, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport interface ModalFormProps<T = any> extends FormProps<T> {\r\n text: ReactNode;\r\n buttonProps?: Omit<ModalButtonProps, 'text' | 'modalProps' | 'confirmLoading' | 'onOk'>;\r\n modalProps?: ModalButtonProps['modalProps'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n onSuccess,\r\n buttonProps,\r\n modalProps,\r\n children,\r\n ...props\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const ref = useRef<ModalType>(null);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n return false;\r\n }, []);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n ref.current?.close();\r\n }, [onSuccess]);\r\n\r\n return <ModalButton\r\n ref={ref}\r\n text={text}\r\n {...buttonProps}\r\n modalProps={modalProps}\r\n onOk={handleOk}\r\n confirmLoading={loading}\r\n >\r\n <Form\r\n {...props}\r\n onSubmitting={setLoading}\r\n ref={form}\r\n onSuccess={handleSuccess}\r\n >\r\n {children}\r\n <input type='submit' hidden />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n try {\r\n execute();\r\n } catch {\r\n\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(async () => {\r\n try {\r\n if (currentParams) {\r\n await execute(...currentParams);\r\n } else {\r\n await execute();\r\n }\r\n } catch {\r\n\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n","import { DependencyList, useCallback, useEffect, useRef } from 'react';\r\n\r\nexport default function useCallbackRef<T extends (...args: any[]) => any>(\r\n callback: T | undefined,\r\n deps: DependencyList = [],\r\n) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return useCallback(((...args) => callbackRef.current?.(...args)) as T, deps);\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport useCallbackRef from './use-callback-ref';\r\n\r\nexport interface UseControllableStateProps<T> {\r\n value?: T;\r\n defaultValue?: T | (() => T);\r\n onChange?: (value: T) => void;\r\n shouldUpdate?: (prev: T, next: T) => boolean;\r\n}\r\n\r\nexport default function useControllableState<T>(props: UseControllableStateProps<T>) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n shouldUpdate = (prev, next) => prev !== next,\r\n } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\r\n\r\n const [uncontrolledState, setUncontrolledState] = useState(defaultValue as T);\r\n const controlled = valueProp !== undefined;\r\n const value = controlled ? valueProp : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) {\r\n return;\r\n }\r\n\r\n if (!controlled) {\r\n setUncontrolledState(nextValue);\r\n }\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue] as [T, Dispatch<SetStateAction<T>>];\r\n}\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n"],"names":["CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","data","preConfirm","e","Error","showValidationMessage","message","success","toast","position","timer","showConfirmButton","error","close","result","defaults","MessageContext","createContext","wrapMessage","Component","_ref","resolve","destroy","show","setShow","initState","callbackRef","useRef","state","setState","useState","useEffect","current","value","callback","useStateWithCallback","context","useContext","handleResolve","useCallback","useMemo","onHide","onExited","container","_jsx","createMessage","Promise","component","hide","listener","memoryState","Set","modal","add","delete","Tooltip","tooltip","children","placement","OverlayTrigger","overlay","BsTooltip","id","uniqueId","TableContext","Button","forwardRef","ref","loading","percent","disabled","variant","props","_jsxs","Spinner","as","size","role","animation","className","button","BsButton","Confirm","title","okText","cancelText","Modal","centered","Header","Title","Body","Footer","onClick","header","footer","closable","onOk","onCancel","okButtonProps","bodyAs","headerAs","confirmLoading","rest","setLoading","okButton","defaultPrevented","cancelButton","_Fragment","ReactModal","closeButton","noticeInstance","Provider","Array","from","map","index","Fragment","notice","type","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","content","Alert","Toast","reduce","isRecord","rax","attach","axios","raxConfig","retryDelay","backoffType","shouldRetry","config","response","retryDecider","method","toUpperCase","status","maxContentLength","Infinity","maxBodyLength","baseURL","authTokenName","interceptors","request","use","key","token","localStorage","getItem","headers","Authorization","reject","location","window","href","undefined","isAxiosError","errors","isRequestError","showRequestError","Object","values","join","url","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","arrayFormat","useSafeState","initialState","unmountedRef","useUnmountedRef","currentState","WaitModal","open","checkUrl","onComplete","checking","setChecking","order_no","err","then","catch","backdrop","preventDefault","waitPayComplete","pay_url","Container","styled","div","Icon","Extra","IconMap","info","warning","Result","extra","Dimmer","active","inverted","Loader","wrap","Wrap","$height","Card","BsCard","classNames","entries","_ref2","name","Space","direction","small","middle","large","items","Children","child","Item","$direction","$size","css","LazySteps","lazy","import","LazyStep","Step","default","Steps","Suspense","fallback","Statistic","Content","noop","isInteger","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","setCurrent","pageSize","setPageSize","allPages","handleChange","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","i","push","BsPagination","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","opt","minimumFractionDigits","Intl","format","LoadingButton","LazyImageZoom","ImageZoom","RequestButton","onSuccess","fetching","setFetching","handleClick","createElement","LazyForm","Form","LazyTable","Table","useOverlayState","onShow","arguments","length","visible","setVisible","setKey","exit","ModalButton","text","modalProps","useImperativeHandle","ModalForm","buttonProps","form","handleOk","submit","handleSuccess","onSubmitting","hidden","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","useCallbackRef","deps","_len","args","_key","useControllableState","valueProp","defaultValue","shouldUpdate","prev","next","onChangeProp","shouldUpdateProp","uncontrolledState","setUncontrolledState","controlled","setValue","nextValue","useDebounce","wait","debouncedCallbackRef","debounce"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import e from"sweetalert2/dist/sweetalert2.js";import t from"sweetalert2-react-content";import{jsx as n,jsxs as r,Fragment as o}from"react/jsx-runtime";import{useRef as i,useState as a,useEffect as s,createContext as c,Fragment as l,useContext as d,useCallback as u,useMemo as f,forwardRef as h,Children as m,lazy as p,Suspense as g,createElement as y,useImperativeHandle as b}from"react";import{OverlayTrigger as x,Tooltip as v,Spinner as w,Button as k,Modal as C,Alert as N,Card as z,Pagination as S}from"react-bootstrap";import{uniqueId as P,values as j,debounce as B}from"lodash";import T from"axios";import $ from"query-string";import*as E from"retry-axios";import L from"rc-notification";import F,{css as H}from"styled-components";import A from"classnames";import{useAsyncCallback as D}from"react-async-hook";const M=t(e),O={confirmButtonText:"确定",cancelButtonText:"取消"},I={confirm:async e=>{const{isConfirmed:t}=await M.fire({...O,icon:"warning",showCancelButton:!0,...e,async preConfirm(t){if(e.preConfirm)try{return await e.preConfirm(t)}catch(e){return e instanceof Error&&M.showValidationMessage(e.message),!1}return!0}});return t},success:e=>{M.fire({...O,toast:!0,position:"top",icon:"success",timer:2e3,showConfirmButton:!1,...e})},error:e=>{M.fire({...O,toast:!0,position:"top",icon:"error",timer:5e3,showConfirmButton:!1,...e})},close:e=>{M.close(e)},defaults:O};const U=c({});function R(e){return t=>{let{resolve:r,destroy:o,message:c}=t;const[l,h]=function(e){const t=i(null),[n,r]=a(e);return s((()=>{t.current&&(t.current(),t.current=null)}),[n]),[n,(e,n)=>{t.current="function"==typeof n?n:null,r(e)}]}(!0),m=d(U),p=u((e=>{h(!1,(()=>{r(e)}))}),[h,r]),g=f((()=>({show:l,onHide:()=>p(),onExited:()=>o(),container:m.container})),[l,p,o]);return n(e,{resolve:p,state:g,message:c})}}function _(e){return t=>new Promise((r=>{const o=n(e,{resolve:r,destroy:()=>{Y(o)},message:t});G(o)}))}let q=()=>{},V=new Set;const G=e=>{V=new Set(V),V.add(e),q(V)},Y=e=>{V=new Set(V),V.delete(e),q(V)};function J(e,t){return _(R(e))(t)}function K(e){let{tooltip:t,children:r,placement:o="bottom"}=e;return n(x,{placement:o,overlay:n(v,{id:P(),children:t}),children:r})}const Q=c(!1),W=h(((e,t)=>{let{loading:i,percent:a,disabled:s,children:c,tooltip:l,variant:u,...f}=e;d(Q)&&!u&&(u="link"),i&&(s=!0,c=r(o,{children:[n(w,{ref:t,as:"span",size:"sm",role:"status","aria-hidden":"true",animation:"border"}),a?r("span",{className:"ms-2",children:[a,"%"]}):null]}));const h=n(k,{ref:t,...f,variant:u,disabled:s,children:c});return l?n(K,{tooltip:l,children:n("span",{className:"d-inline-block",children:h})}):h})),X=function(e){let{state:t,message:{title:o,message:i,okText:a,cancelText:s},resolve:c}=e;return r(C,{centered:!0,...t,children:[n(C.Header,{children:n(C.Title,{as:"h5",children:o||"确认"})}),n(C.Body,{children:i}),r(C.Footer,{children:[n(W,{variant:"secondary",onClick:()=>c(),children:s||"取消"}),n(W,{onClick:()=>c(!0),children:a||"确定"})]})]})};const Z=e=>{let{header:t,children:i,footer:s,closable:c=!0,show:l,cancelText:d="取消",okText:u="确定",onOk:h,onCancel:m,onHide:p,okButtonProps:g,bodyAs:y,headerAs:b="h5",confirmLoading:x=!1,...v}=e;const[w,k]=a(!1),N=f((()=>n(W,{loading:w||x,variant:"primary",onClick:async e=>{k(!0);try{await(h?.(e)),e.defaultPrevented||p?.()}finally{k(!1)}},...g,children:u})),[g,u,h,p,w,x]),z=f((()=>n(W,{variant:"secondary",onClick:e=>{m?.(e),e.defaultPrevented||p?.()},children:d})),[m,p,d]);switch(typeof s){case"undefined":s=r(o,{children:[z,N]});break;case"function":s=s({okButton:N,cancelButton:z})}return r(C,{...v,onHide:p,show:l,children:[t&&n(C.Header,{closeButton:c,children:n(C.Title,{as:b,children:t})}),n(C.Body,{as:y,children:i}),s&&n(C.Footer,{children:s})]})};let ee;Z.Message=function(e){const[t,r]=a(V);return s((()=>{q=r}),[]),n(U.Provider,{value:e,children:Array.from(t).map(((e,t)=>n(l,{children:e},`message-${t}`)))})},Z.confirm=function(e){return _(R(X))(e)},Z.show=J;const te={};const ne=e=>{let{type:t,...r}=e;!function(e){if(ee)return e(ee);L.newInstance({...te,prefixCls:"notification",maxCount:5,style:{top:20,right:20}},(t=>{ee?e(ee):(ee=t,e(t))}))}((e=>{r.duration=3;let o=t;if("error"===t)o="danger",r.duration=r.closable?0:5;r.content=n(N,{variant:o,children:r.content}),e.notice(r)}))},re=["error","success","info"].reduce(((e,t)=>(e[t]=(e,n)=>{ne({...n,type:t,content:e})},e)),{});function oe(e){return e&&"object"==typeof e}re.defaults=te,E.attach(),T.defaults.raxConfig={retryDelay:2e3,backoffType:"static",shouldRetry:e=>{let{config:t,response:n}=e;return!(t.raxConfig?.retryDecider&&!t.raxConfig.retryDecider())&&("GET"===t.method?.toUpperCase()&&449===n?.status)}},T.defaults.maxContentLength=1/0,T.defaults.maxBodyLength=1/0,T.defaults.baseURL="/api",T.defaults.authTokenName="authorization",T.interceptors.request.use((e=>{const t=e.authTokenName;if(t){const n=localStorage.getItem(t);n&&(e.headers={Authorization:`Bearer ${n}`,...e.headers})}return e}),(e=>Promise.reject(e))),T.interceptors.response.use((e=>(201===e.status&&e.data.location&&(window.location.href=e.data.location,e.data=void 0),e)),(e=>{if(T.isAxiosError(e)&&e.response){const{data:t,status:n}=e.response;401===n?(e.errors="Unauthorized",re.error("Unauthorized")):oe(t)?422===n?e.errors=t:"message"in t&&(e.errors=t.message):e.errors=t}return Promise.reject(e)}));const ie=T.isAxiosError,ae=e=>{if(!T.isAxiosError(e))throw e;{let t=e.errors;"string"!=typeof e.errors&&(t=Object.values(e.errors).join("<br />")),re.error(t)}},se=async function(e){e="string"==typeof e?{url:e}:e;const{data:t}=await T.request({paramsSerializer:function(e){return $.stringify(e,{sort:!1,skipNull:!0,skipEmptyString:!0,arrayFormat:"bracket"})},...e});return t};se.defaults=T.defaults,se.interceptors=T.interceptors;function ce(e){const t=(()=>{const e=i(!1);return s((()=>(e.current=!1,()=>{e.current=!0})),[]),e})(),[n,r]=a(e);return[n,u((e=>{t.current||r(e)}),[])]}const le=function(e){let{state:t,message:r,resolve:o}=e;const a=i(!0),{result:c,checkUrl:l,onComplete:d}=r,[u,f]=ce(!1);return s((()=>{se({url:l,method:"post",data:{order_no:c.order_no},raxConfig:{shouldRetry:e=>a.current&&449===e.response?.status}}).then((()=>{d?.(),o()})).catch((()=>null))}),[]),n(Z,{...t,centered:!0,onHide:()=>{a.current=!1,t.onHide()},backdrop:"static",header:"支付结果",okText:"已完成支付",okButtonProps:{loading:u},onOk:async e=>{e.preventDefault();try{f(!0),await se({url:l,method:"post",data:{order_no:c.order_no},raxConfig:{shouldRetry:()=>!1}}),d?.(),o()}catch{}finally{f(!1)}},cancelText:"取消",children:"请在新打开的页面上进行支付,支付完成后再关闭此窗口"})};function de(e){const{result:t}=e;window.open(t.pay_url),J(le,e)}const ue=F.div`
|
|
2
|
+
padding: 48px 32px;
|
|
3
|
+
`,fe=F.div`
|
|
4
|
+
margin-bottom: 24px;
|
|
5
|
+
text-align: center;
|
|
6
|
+
font-size: 72px;
|
|
7
|
+
`,he=F.div`
|
|
8
|
+
color: rgba(0, 0, 0, .85);
|
|
9
|
+
font-size: 24px;
|
|
10
|
+
line-height: 1.8;
|
|
11
|
+
text-align: center;
|
|
12
|
+
`,me=F.div`
|
|
13
|
+
margin-top: 32px;
|
|
14
|
+
text-align: center;
|
|
15
|
+
`,pe={success:n("i",{className:"bi bi-check-circle-fill text-success"}),error:n("i",{className:"bi bi-exclamation-circle-fill text-danger"}),info:n("i",{className:"bi bi-info-circle-fill text-info"}),warning:n("i",{className:"bi bi-exclamation-triangle-fill text-warning"})};function ge(e){let{status:t,title:o,icon:i,extra:a}=e;return!i&&t&&(i=pe[t]),r(ue,{children:[i&&n(fe,{children:i}),o&&n(he,{children:o}),a&&n(me,{children:a})]})}F.div`
|
|
16
|
+
position: relative;
|
|
17
|
+
`;const ye=F.div`
|
|
18
|
+
display: ${e=>e.active?"flex":"none"};
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0 !important;
|
|
21
|
+
left: 0 !important;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
text-align: center;
|
|
25
|
+
vertical-align: middle;
|
|
26
|
+
padding: 1em;
|
|
27
|
+
background-color: ${e=>e.inverted?"rgba(255, 255, 255, .85)":"rgba(0, 0, 0, .85)"};
|
|
28
|
+
opacity: ${e=>e.active?1:0};
|
|
29
|
+
line-height: 1;
|
|
30
|
+
animation-fill-mode: both;
|
|
31
|
+
animation-duration: .5s;
|
|
32
|
+
transition: background-color .5s linear;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
user-select: none;
|
|
37
|
+
will-change: opacity;
|
|
38
|
+
z-index: 990;
|
|
39
|
+
`;function be(e){let{loading:t=!0,children:o,variant:i="primary",animation:a="border",wrap:s,...c}=e;return t?(o&&(o=n("p",{className:"mt-3 text-secondary",children:o})),o=r(ye,{inverted:!0,active:!0,children:[n(w,{animation:a,variant:i,...c}),o]}),s?n(xe,{$height:"number"==typeof s?s:150,children:o}):o):null}const xe=F.div`
|
|
40
|
+
position: relative;
|
|
41
|
+
height: ${e=>`${e.$height}px`};
|
|
42
|
+
`;function ve(e){let{children:t,title:i,className:a,...s}=e;return n(z,{className:A("border-0 shadow-sm mb-3",a),...s,children:r("div",{className:"card-body",children:[i&&r(o,{children:[n("h5",{children:i}),n("hr",{})]}),t]})})}function we(e){let{errors:t}=e;return t?n(N,{variant:"danger",children:n("ul",{className:"mb-0",children:"string"==typeof t?n("li",{children:t}):Object.entries(t).map((e=>{let[t,r]=e;return n("li",{children:r},t)}))})}):null}function ke(e){let{children:t,className:r,size:o="small",direction:i="horizontal"}=e;"string"==typeof o&&(o={small:8,middle:16,large:24}[o]);const a=m.map(t,(e=>{if(e)return n(Ne,{children:e})}));return n(Ce,{className:r,$direction:i,$size:o,children:a})}const Ce=F.div`
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
gap: ${e=>e.$size}px;
|
|
46
|
+
|
|
47
|
+
${e=>"vertical"===e.$direction&&H`
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
align-items: inherit;
|
|
51
|
+
`}
|
|
52
|
+
`,Ne=F.div`
|
|
53
|
+
|
|
54
|
+
`,ze=p((()=>import("./steps-afba29a7.js"))),Se=p((()=>import("./steps-afba29a7.js").then((e=>{let{Step:t}=e;return{default:t}}))));function Pe(e){return n(g,{fallback:null,children:n(ze,{...e})})}const je=function(e){return n(g,{fallback:null,children:n(Se,{...e})})};function Be(e){let{title:t,content:o,footer:i}=e;return r(ve,{children:[n(Ee,{children:t}),n($e,{children:o}),i&&n(Te,{children:i})]})}Pe.Step=je;const Te=F.div`
|
|
55
|
+
margin-top: 9px;
|
|
56
|
+
padding-top: 10px;
|
|
57
|
+
border-top: 1px solid #f0f0f0;
|
|
58
|
+
color: rgba(0, 0, 0, .65);
|
|
59
|
+
`,$e=F.div`
|
|
60
|
+
color: rgba(0, 0, 0, .85);
|
|
61
|
+
font-size: 24px;
|
|
62
|
+
`,Ee=F.div`
|
|
63
|
+
margin-bottom: 4px;
|
|
64
|
+
color: rgba(0, 0, 0, .45);
|
|
65
|
+
font-size: 1.1rem;
|
|
66
|
+
`;function Le(){}function Fe(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}function He(e){let{total:t=0,onChange:r=Le,defaultCurrent:o=1,defaultPageSize:i=10,className:c,...l}=e;const[d,h]=a(o),[m,p]=a(i);s((()=>{Fe(l.current)&&h(l.current)}),[l.current]),s((()=>{Fe(l.pageSize)&&p(l.pageSize)}),[l.pageSize]);const g=f((()=>Math.floor((t-1)/m)+1),[t,m]),y=u((e=>()=>{e!==d&&(h(e),r(e,m))}),[r,d,m]),b=d-1>0?d-1:0,x=d+1<g?d+1:g,v=[];let w=null,k=null,C=null,N=null;if(g<=7)for(let e=1;e<=g;e+=1){const t=d===e;v.push(n(S.Item,{active:t,onClick:y(e),children:e},e))}else{N=n(S.Last,{onClick:y(g)},"last"),C=n(S.First,{onClick:y(1)},"first"),w=n(S.Prev,{onClick:y(b)},"prev"),k=n(S.Next,{onClick:y(x)},"next");let e=Math.max(1,d-2),t=Math.min(d+2,g);d-1<=2&&(t=5),g-d<=2&&(e=g-4);for(let r=e;r<=t;r+=1){const e=d===r;v.push(n(S.Item,{active:e,onClick:y(r),children:r},r))}d-1>=4&&3!==d&&v.unshift(w),g-d>=4&&d!==g-2&&v.push(k),1!==e&&v.unshift(C),t!==g&&v.push(N)}return n(S,{className:c,children:v})}function Ae(e){let{className:t,value:r,locale:i="zh-CN",currency:a=!0,options:s={}}=e;const c=f((()=>{let e;return e=a?{style:"currency",currency:"CNY"}:{minimumFractionDigits:2},new Intl.NumberFormat(i,{...e,...s})}),[a,i,s]);return t?n("span",{className:t,children:c.format(r)}):n(o,{children:c.format(r)})}function De(e){let{loading:t,disabled:r,children:o,...i}=e;return n(k,{...i,disabled:t||r,children:t?"Loading…":o})}const Me=p((()=>import("./image-zoom-912e2b3b.js")));function Oe(e){return n(g,{fallback:null,children:n(Me,{...e})})}function Ie(e){let{url:t,method:n,confirm:r,onSuccess:o,children:i,disabled:a,as:s=W,...c}=e;const[l,d]=ce(!1),f=u((async e=>{e.preventDefault();try{if(d(!0),r&&!await Z.confirm({message:r}))return;const e="string"==typeof t?{url:t,method:n}:{method:n,...t},i=await se(e);o&&o(i)}catch(e){ae(e)}finally{d(!1)}}),[t,n,d]);return y(s,{...c,disabled:a||l,onClick:f},i)}const Ue=p((()=>import("./form-74ef0417.js"))),Re=h(((e,t)=>n(g,{fallback:null,children:n(Ue,{...e,ref:t})}))),_e=p((()=>import("./index-7a7c06a9.js"))),qe=h(((e,t)=>n(g,{fallback:null,children:n(_e,{...e,ref:t})})));let Ve=0;function Ge(){let{onHide:e,onShow:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const[n,r]=a(!1),[o,i]=a(`visible-${Ve}`),s=u((()=>{r(!1),e&&e()}),[r,e]),c=u((()=>{i("visible-"+ ++Ve)}),[i,Ve]),l=u((()=>{r(!0),t&&t()}),[r,t]),d={show:n,onHide:s,onExited:c,key:o};return{visible:n,show:l,hide:s,state:d}}const Ye=h(((e,t)=>{let{text:i,onOk:a,modalProps:s,children:c,onShow:l,confirmLoading:d,as:u=W,...f}=e;const{state:h,show:m,hide:p}=Ge({onShow:l});b(t,(()=>({close:p})));const g=y(u,{...f,onClick:m},i);return r(o,{children:[g,n(Z,{header:i,...s,...h,confirmLoading:d,onOk:async e=>{if(a){!1===await a()&&e.preventDefault()}},children:c})]})}));function Je(e){let{text:t,onSuccess:o,buttonProps:s,modalProps:c,children:l,...d}=e;const[f,h]=a(!1),m=i(null),p=i(null),g=u((()=>(p.current?.submit(),!1)),[]),y=u((e=>{o&&o(e),m.current?.close()}),[o]);return n(Ye,{ref:m,text:t,...s,modalProps:c,onOk:g,confirmLoading:f,children:r(Re,{...d,onSubmitting:h,ref:p,onSuccess:y,children:[l,n("input",{type:"submit",hidden:!0})]})})}function Ke(e){let{manual:t,refreshDeps:n,...r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{execute:o,currentParams:i,error:a,...c}=D((async t=>(e="string"==typeof e?{url:e}:e,await se({...e,...t}))),r);s((()=>{if(!t&&!n)try{o()}catch{}}),[]),s((()=>{n&&l()}),n);const l=u((async()=>{try{i?await o(...i):await o()}catch{}}),[o,i]);if(a&&ie(a)){const e=a.errors;a=new Error("string"==typeof e?e:j(e).join(""))}return{refresh:l,execute:o,error:a,...c}}function Qe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=i(e);return s((()=>{n.current=e})),u((function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.current?.(...t)}),t)}function We(e){const{value:t,defaultValue:n,onChange:r,shouldUpdate:o=((e,t)=>e!==t)}=e,i=Qe(r),s=Qe(o),[c,l]=a(n),d=void 0!==t,u=d?t:c,f=Qe((e=>{const t="function"==typeof e?e(u):e;s(u,t)&&(d||l(t),i(t))}),[d,i,u,s]);return[u,f]}function Xe(e,t,n){const r=i(e),o=i(B(e,t,n));return s((()=>{r.current=e})),s((()=>{o.current=B((function(){r.current(...arguments)}),t,n)}),[t,n]),o.current}export{W as B,ve as C,we as E,Re as F,Oe as I,be as L,I as M,Ae as N,He as P,ge as R,ke as S,Q as T,Xe as a,We as b,re as c,Pe as d,je as e,Be as f,De as g,Ie as h,oe as i,qe as j,Je as k,Ye as l,Z as m,K as n,Ke as o,Ge as p,ie as q,se as r,ae as s,ce as u,de as w};
|
|
67
|
+
//# sourceMappingURL=index-6ae8237d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-6ae8237d.js","sources":["../src/utils/message.ts","../src/components/modal/message.tsx","../src/hooks/use-state-with-callback.ts","../src/components/modal/show.tsx","../src/components/tooltip.tsx","../src/components/lazy/table/context.ts","../src/components/button.tsx","../src/components/modal/confirm.tsx","../src/components/modal/index.tsx","../src/utils/toast.tsx","../src/utils/is-record.ts","../src/request.ts","../src/hooks/use-safe-state.ts","../src/hooks/use-unmounted-ref.ts","../src/utils/wait-pay-complete.tsx","../src/components/result.tsx","../src/components/dimmer.tsx","../src/components/loader.tsx","../src/components/card.tsx","../src/components/error.tsx","../src/components/space.tsx","../src/components/steps.tsx","../src/components/statistic.tsx","../src/components/pagination.tsx","../src/components/number-format.tsx","../src/components/loading-button.tsx","../src/components/image-zoom.tsx","../src/components/request-button.tsx","../src/components/form.tsx","../src/components/table.tsx","../src/hooks/use-overlay-state.ts","../src/components/modal-button.tsx","../src/components/modal-form.tsx","../src/hooks/use-request.ts","../src/hooks/use-callback-ref.ts","../src/hooks/use-controllable-state.ts","../src/hooks/use-debounce.ts"],"sourcesContent":["import Swal from 'sweetalert2/dist/sweetalert2.js';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { SweetAlertOptions, SweetAlertResult } from 'sweetalert2';\r\n\r\nconst CustomSwal = withReactContent(Swal);\r\n\r\ninterface MessageOptions<T = any> extends SweetAlertOptions<T> {\r\n\r\n}\r\n\r\nconst defaultOptions: MessageOptions = {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n};\r\n\r\nconst Message = {\r\n confirm: async <T = any>(options: MessageOptions<T>) => {\r\n const { isConfirmed } = await CustomSwal.fire({\r\n ...defaultOptions,\r\n icon: 'warning',\r\n showCancelButton: true,\r\n ...options,\r\n async preConfirm(data) {\r\n if (options.preConfirm) {\r\n try {\r\n return await options.preConfirm(data);\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n CustomSwal.showValidationMessage(e.message);\r\n }\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n });\r\n\r\n return isConfirmed;\r\n },\r\n success: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'success',\r\n timer: 2000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n error: (options: MessageOptions) => {\r\n CustomSwal.fire({\r\n ...defaultOptions,\r\n toast: true,\r\n position: 'top',\r\n icon: 'error',\r\n timer: 5000,\r\n showConfirmButton: false,\r\n ...options\r\n });\r\n },\r\n close: (result?: SweetAlertResult) => {\r\n CustomSwal.close(result);\r\n },\r\n defaults: defaultOptions\r\n};\r\n\r\nexport default Message;\r\n","import {\r\n ComponentType,\r\n createContext,\r\n Fragment,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useState\r\n} from 'react';\r\nimport useStateWithCallback from '../../hooks/use-state-with-callback';\r\nimport { ModalProps } from 'react-bootstrap';\r\n\r\ninterface MessageContextType {\r\n container?: ModalProps['container'];\r\n}\r\n\r\nconst MessageContext = createContext<MessageContextType>({});\r\n\r\ntype MessageWrapProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n destroy: () => void\r\n message: T\r\n}\r\n\r\nexport type MessageProps<T, P = void> = {\r\n resolve: (value: P | void) => void\r\n message: T\r\n state: {\r\n show: boolean\r\n onHide: () => void\r\n onExited: () => void\r\n container?: ModalProps['container']\r\n }\r\n}\r\n\r\nexport function wrapMessage<T = {}, P = any>(Component: ComponentType<MessageProps<T, P>>): ComponentType<MessageWrapProps<T, P>> {\r\n\r\n return ({ resolve, destroy, message }) => {\r\n\r\n const [show, setShow] = useStateWithCallback(true);\r\n const context = useContext(MessageContext);\r\n\r\n const handleResolve = useCallback((value: P | void) => {\r\n setShow(false, () => {\r\n resolve(value);\r\n });\r\n }, [setShow, resolve]);\r\n\r\n const state = useMemo(() => {\r\n return {\r\n show,\r\n onHide: () => handleResolve(),\r\n onExited: () => destroy(),\r\n container: context.container\r\n };\r\n }, [show, handleResolve, destroy]);\r\n\r\n return <Component\r\n resolve={handleResolve}\r\n state={state}\r\n message={message}\r\n />;\r\n };\r\n}\r\n\r\nexport function createMessage<T = {}, P = any>(Component: ComponentType<MessageWrapProps<T, P>>): (message: T) => Promise<P | void> {\r\n return (message) => {\r\n return new Promise<P | void>((resolve) => {\r\n const component = <Component\r\n resolve={resolve}\r\n destroy={() => {\r\n hide(component);\r\n }}\r\n message={message}\r\n />;\r\n\r\n show(component);\r\n });\r\n };\r\n}\r\n\r\ntype State = Set<ReactNode>\r\n\r\nlet listener: (state: State) => void = () => void 0;\r\n\r\nlet memoryState: State = new Set();\r\n\r\nexport const show = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.add(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport const hide = (modal: ReactNode) => {\r\n memoryState = new Set(memoryState);\r\n memoryState.delete(modal);\r\n\r\n listener(memoryState);\r\n};\r\n\r\nexport default function Message(props: MessageContextType) {\r\n const [state, setState] = useState<State>(memoryState);\r\n useEffect(() => {\r\n listener = setState;\r\n }, []);\r\n\r\n return <MessageContext.Provider value={props}>\r\n {Array.from(state).map((message, index) => <Fragment key={`message-${index}`}>{message}</Fragment>)}\r\n </MessageContext.Provider>;\r\n}\r\n","import { SetStateAction, useEffect, useRef, useState } from 'react';\n\nexport default function useStateWithCallback<S>(initState: S): [S, (value: SetStateAction<S>, callback: () => void) => void] {\n const callbackRef = useRef<Function | null>(null);\n\n const [state, setState] = useState(initState);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current();\n callbackRef.current = null;\n }\n }, [state]);\n\n const setCallbackState = (value: SetStateAction<S>, callback: () => void) => {\n callbackRef.current = typeof callback === 'function' ? callback : null;\n setState(value);\n };\n\n return [state, setCallbackState];\n}\n","import { createMessage, MessageProps, wrapMessage } from './message';\r\nimport { ComponentType } from 'react';\r\n\r\nexport default function show<T, P = any>(Component: ComponentType<MessageProps<any, T>>, options?: P) {\r\n return createMessage(wrapMessage(Component))(options);\r\n}\r\n","import { OverlayTrigger, OverlayTriggerProps, Tooltip as BsTooltip } from 'react-bootstrap';\r\nimport { uniqueId } from 'lodash';\r\n\r\ninterface TooltipProps {\r\n tooltip: string;\r\n children: OverlayTriggerProps['children'];\r\n placement?: OverlayTriggerProps['placement'];\r\n}\r\n\r\nexport default function Tooltip({ tooltip, children, placement = 'bottom' }: TooltipProps) {\r\n\r\n return <OverlayTrigger\r\n placement={placement}\r\n overlay={\r\n <BsTooltip id={uniqueId()}>\r\n {tooltip}\r\n </BsTooltip>\r\n }\r\n >\r\n {children}\r\n </OverlayTrigger>;\r\n}\r\n","import { createContext } from 'react';\r\n\r\nexport const TableContext = createContext(false);\r\n","import { Button as BsButton, ButtonProps as BsButtonProps, Spinner } from 'react-bootstrap';\r\nimport { forwardRef, useContext } from 'react';\r\nimport Tooltip from './tooltip';\r\nimport { TableContext } from './lazy/table/context';\r\n\r\nexport interface ButtonProps extends BsButtonProps {\r\n loading?: boolean;\r\n percent?: number;\r\n tooltip?: string;\r\n}\r\n\r\nconst Button = forwardRef<any, ButtonProps>((\r\n {\r\n loading,\r\n percent,\r\n disabled,\r\n children,\r\n tooltip,\r\n variant,\r\n ...props\r\n },\r\n ref\r\n) => {\r\n\r\n const inTable = useContext(TableContext);\r\n\r\n if (inTable && !variant) {\r\n variant = 'link';\r\n }\r\n\r\n if (loading) {\r\n disabled = true;\r\n children = <>\r\n <Spinner ref={ref} as='span' size='sm' role='status' aria-hidden='true' animation='border' />\r\n {percent ? <span className='ms-2'>{percent}%</span> : null}\r\n </>;\r\n }\r\n\r\n const button = <BsButton ref={ref} {...props} variant={variant} disabled={disabled}>{children}</BsButton>;\r\n\r\n if (tooltip) {\r\n return <Tooltip tooltip={tooltip}>\r\n <span className={'d-inline-block'}>{button}</span>\r\n </Tooltip>;\r\n }\r\n\r\n return button;\r\n});\r\n\r\nexport default Button;\r\n","import { FC } from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { createMessage, MessageProps, wrapMessage } from './message';\r\nimport Button from '../button';\r\n\r\ninterface ConfirmOptions {\r\n title?: string;\r\n message: string;\r\n okText?: string;\r\n cancelText?: string;\r\n}\r\n\r\nconst Confirm: FC<MessageProps<ConfirmOptions, true>> = function({\r\n state,\r\n message: {\r\n title,\r\n message,\r\n okText,\r\n cancelText\r\n },\r\n resolve,\r\n}) {\r\n return <Modal centered {...state} >\r\n <Modal.Header>\r\n <Modal.Title as='h5'>{title || '确认'}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>{message}</Modal.Body>\r\n <Modal.Footer>\r\n <Button variant='secondary' onClick={() => resolve()}>{cancelText || '取消'}</Button>\r\n <Button onClick={() => resolve(true)}>{okText || '确定'}</Button>\r\n </Modal.Footer>\r\n </Modal>;\r\n};\r\n\r\nexport default function confirm(options: ConfirmOptions) {\r\n return createMessage(wrapMessage(Confirm))(options);\r\n}\r\n","import { Modal as ReactModal, ModalProps as ReactModalProps } from 'react-bootstrap';\r\nimport { ElementType, MouseEvent, ReactNode, useMemo, useState } from 'react';\r\nimport Button, { ButtonProps } from '../button';\r\nimport show from './show';\r\nimport confirm from './confirm';\r\nimport Message, { MessageProps } from './message';\r\n\r\nexport interface ModalProps extends Pick<\r\n ReactModalProps,\r\n 'style' | 'container' | 'backdrop' | 'centered' | 'size' | 'scrollable' | 'fullscreen' | 'onHide' | 'onShow' | 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited'\r\n> {\r\n children: ReactNode;\r\n header?: ReactNode;\r\n footer?: ReactNode | ((args: { okButton: ReactNode, cancelButton: ReactNode }) => ReactNode);\r\n okText?: string;\r\n cancelText?: string;\r\n closable?: boolean;\r\n show?: boolean;\r\n onOk?: (e: MouseEvent) => void;\r\n onCancel?: (e: MouseEvent) => void;\r\n okButtonProps?: ButtonProps;\r\n bodyAs?: ElementType;\r\n headerAs?: ElementType;\r\n confirmLoading?: boolean;\r\n}\r\n\r\nconst Modal = ({\r\n header,\r\n children,\r\n footer,\r\n closable = true,\r\n show,\r\n cancelText = '取消',\r\n okText = '确定',\r\n onOk,\r\n onCancel,\r\n onHide,\r\n okButtonProps,\r\n bodyAs,\r\n headerAs = 'h5',\r\n confirmLoading = false,\r\n ...rest\r\n}: ModalProps) => {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const okButton = useMemo(() => {\r\n return <Button loading={loading || confirmLoading} variant={'primary'} onClick={async (e) => {\r\n setLoading(true);\r\n try {\r\n await onOk?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n }} {...okButtonProps}>{okText}</Button>;\r\n }, [okButtonProps, okText, onOk, onHide, loading, confirmLoading]);\r\n\r\n const cancelButton = useMemo(() => {\r\n return <Button variant='secondary' onClick={(e) => {\r\n onCancel?.(e);\r\n if (!e.defaultPrevented) {\r\n onHide?.();\r\n }\r\n }}>{cancelText}</Button>;\r\n }, [onCancel, onHide, cancelText]);\r\n\r\n switch (typeof footer) {\r\n case 'undefined':\r\n footer = <>\r\n {cancelButton}\r\n {okButton}\r\n </>;\r\n break;\r\n case 'function':\r\n footer = footer({ okButton, cancelButton });\r\n break;\r\n }\r\n\r\n return <ReactModal {...rest} onHide={onHide} show={show}>\r\n {header && <ReactModal.Header closeButton={closable}>\r\n <ReactModal.Title as={headerAs}>{header}</ReactModal.Title>\r\n </ReactModal.Header>}\r\n <ReactModal.Body as={bodyAs}>{children}</ReactModal.Body>\r\n {footer && <ReactModal.Footer>{footer}</ReactModal.Footer>}\r\n </ReactModal>;\r\n};\r\n\r\nModal.Message = Message;\r\nModal.confirm = confirm;\r\nModal.show = show;\r\nexport default Modal;\r\nexport { MessageProps };\r\n","import { Alert } from 'react-bootstrap';\r\nimport { NoticeContent, NotificationInstance } from 'rc-notification/lib/Notification';\r\nimport Notification from 'rc-notification';\r\nimport { NotificationProps } from 'rc-notification/es/Notification';\r\n\r\nlet noticeInstance: NotificationInstance | null;\r\n\r\nconst defaultOptions: NotificationProps & {\r\n getContainer?: () => HTMLElement;\r\n} = {};\r\n\r\nfunction getNoticeInstance(callback: (instance: NotificationInstance) => void) {\r\n if (noticeInstance) {\r\n return callback(noticeInstance);\r\n }\r\n\r\n Notification.newInstance({\r\n ...defaultOptions,\r\n prefixCls: 'notification',\r\n maxCount: 5,\r\n style: {\r\n top: 20,\r\n right: 20\r\n }\r\n }, (instance) => {\r\n if (noticeInstance) {\r\n callback(noticeInstance);\r\n return;\r\n }\r\n noticeInstance = instance;\r\n callback(instance);\r\n });\r\n}\r\n\r\n\r\nconst notice = ({ type, ...options }: { type: string } & NoticeContent) => {\r\n getNoticeInstance((instance) => {\r\n options.duration = 3;\r\n let variant = type;\r\n switch (type) {\r\n case 'error':\r\n variant = 'danger';\r\n options.duration = options.closable ? 0 : 5;\r\n break;\r\n }\r\n\r\n options.content = <Alert variant={variant}>{options.content}</Alert>;\r\n\r\n instance.notice(options);\r\n });\r\n};\r\n\r\nconst types = ['error', 'success', 'info'] as const;\r\n\r\ntype ToastType = Record<typeof types[number], (content: string, options?: NoticeContent) => void> & {\r\n defaults: typeof defaultOptions;\r\n};\r\n\r\nconst Toast = types.reduce((toast, type) => {\r\n toast[type] = (content: string, options?: NoticeContent) => {\r\n notice({\r\n ...options,\r\n type,\r\n content\r\n });\r\n };\r\n return toast;\r\n}, {} as any);\r\n\r\nToast.defaults = defaultOptions;\r\n\r\nexport default Toast as ToastType;\r\n","export default function isRecord(data: any): data is Record<string, string> {\r\n return data && (typeof data === 'object');\r\n}\r\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport queryString from 'query-string';\r\nimport * as rax from 'retry-axios';\r\nimport { RetryConfig } from 'retry-axios';\r\nimport Toast from './utils/toast';\r\nimport isRecord from './utils/is-record';\r\n\r\nexport type Errors = string | {\r\n [key: string]: string\r\n}\r\n\r\ndeclare module 'retry-axios' {\r\n interface RetryConfig {\r\n retryDecider?: () => boolean;\r\n }\r\n}\r\n\r\ndeclare module 'axios' {\r\n interface AxiosError {\r\n errors: Errors;\r\n }\r\n\r\n interface AxiosRequestConfig {\r\n raxConfig?: RetryConfig;\r\n authTokenName?: string;\r\n }\r\n}\r\n\r\nrax.attach();\r\n\r\naxios.defaults.raxConfig = {\r\n retryDelay: 2000,\r\n backoffType: 'static',\r\n shouldRetry: ({ config, response }) => {\r\n if (config.raxConfig?.retryDecider && !config.raxConfig.retryDecider()) {\r\n return false;\r\n }\r\n return config.method?.toUpperCase() === 'GET' && response?.status === 449;\r\n }\r\n};\r\naxios.defaults.maxContentLength = Infinity;\r\naxios.defaults.maxBodyLength = Infinity;\r\naxios.defaults.baseURL = '/api';\r\naxios.defaults.authTokenName = 'authorization';\r\naxios.interceptors.request.use(\r\n config => {\r\n const key = config.authTokenName;\r\n if (key) {\r\n const token = localStorage.getItem(key);\r\n\r\n if (token) {\r\n config.headers = {\r\n Authorization: `Bearer ${token}`,\r\n ...config.headers,\r\n };\r\n }\r\n }\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\naxios.interceptors.response.use(\r\n response => {\r\n if (response.status === 201 && response.data.location) {\r\n window.location.href = response.data.location;\r\n response.data = undefined; //防止多次跳转\r\n }\r\n\r\n return response;\r\n },\r\n e => {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response) {\r\n const { data, status } = e.response;\r\n if (status === 401) {\r\n e.errors = 'Unauthorized';\r\n Toast.error('Unauthorized');\r\n } else {\r\n if (isRecord(data)) {\r\n if (status === 422) {\r\n e.errors = data;\r\n } else if ('message' in data) {\r\n e.errors = data['message'];\r\n }\r\n } else {\r\n e.errors = data as string;\r\n }\r\n }\r\n }\r\n }\r\n return Promise.reject(e);\r\n }\r\n);\r\n\r\nexport type RequestConfig = AxiosRequestConfig | string\r\nexport type RequestInstance = AxiosInstance\r\nexport const isRequestError = axios.isAxiosError;\r\n\r\nexport const showRequestError = (e: any) => {\r\n if (axios.isAxiosError(e)) {\r\n let errors = e.errors;\r\n if (typeof e.errors !== 'string') {\r\n errors = Object.values(e.errors).join('<br />');\r\n }\r\n Toast.error(errors as string);\r\n } else {\r\n throw e;\r\n }\r\n};\r\n\r\nconst request = async function <T = any>(config: RequestConfig) {\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n const { data } = await axios.request<T>({\r\n paramsSerializer: function(params) {\r\n return queryString.stringify(params, {\r\n sort: false,\r\n skipNull: true,\r\n skipEmptyString: true,\r\n arrayFormat: 'bracket',\r\n });\r\n },\r\n ...config\r\n });\r\n\r\n return data;\r\n};\r\n\r\nrequest.defaults = axios.defaults;\r\nrequest.interceptors = axios.interceptors;\r\n\r\nexport default request;\r\n","import { useCallback, useState } from 'react';\r\nimport type { Dispatch, SetStateAction } from 'react';\r\nimport useUnmountedRef from './use-unmounted-ref';\r\n\r\nfunction useSafeState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];\r\n\r\nfunction useSafeState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];\r\n\r\nfunction useSafeState<S>(initialState?: S | (() => S)) {\r\n const unmountedRef = useUnmountedRef();\r\n const [state, setState] = useState(initialState);\r\n const setCurrentState = useCallback((currentState) => {\r\n /** if component is unmounted, stop update */\r\n if (unmountedRef.current) return;\r\n setState(currentState);\r\n }, []);\r\n\r\n return [state, setCurrentState] as const;\r\n}\r\n\r\nexport default useSafeState;\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useUnmountedRef = () => {\r\n const unmountedRef = useRef(false);\r\n useEffect(() => {\r\n unmountedRef.current = false;\r\n return () => {\r\n unmountedRef.current = true;\r\n };\r\n }, []);\r\n return unmountedRef;\r\n};\r\n\r\nexport default useUnmountedRef;\r\n","import show from '../components/modal/show';\r\nimport Modal, { MessageProps } from '../components/modal';\r\nimport { useEffect, useRef } from 'react';\r\nimport request from '../request';\r\nimport useSafeState from '../hooks/use-safe-state';\r\n\r\ninterface PayResult {\r\n pay_url: string;\r\n order_no: string;\r\n}\r\n\r\ninterface Options {\r\n result: PayResult;\r\n checkUrl: string;\r\n onComplete?: () => void;\r\n}\r\n\r\nconst WaitModal = function({ state, message, resolve }: MessageProps<Options>) {\r\n\r\n const open = useRef(true);\r\n const { result, checkUrl, onComplete } = message;\r\n const [checking, setChecking] = useSafeState(false);\r\n\r\n useEffect(() => {\r\n request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry(err) {\r\n return open.current && err.response?.status === 449;\r\n }\r\n }\r\n }).then(() => {\r\n onComplete?.();\r\n resolve();\r\n }).catch(() => null);\r\n }, []);\r\n\r\n return <Modal\r\n {...state}\r\n centered\r\n onHide={() => {\r\n open.current = false;\r\n state.onHide();\r\n }}\r\n backdrop='static'\r\n header='支付结果'\r\n okText='已完成支付'\r\n okButtonProps={{ loading: checking }}\r\n onOk={async (e) => {\r\n e.preventDefault();\r\n try {\r\n setChecking(true);\r\n await request({\r\n url: checkUrl,\r\n method: 'post',\r\n data: { order_no: result.order_no },\r\n raxConfig: {\r\n shouldRetry() {\r\n return false;\r\n }\r\n }\r\n });\r\n onComplete?.();\r\n resolve();\r\n } catch {\r\n // ignore\r\n } finally {\r\n setChecking(false);\r\n }\r\n }}\r\n cancelText='取消'\r\n >\r\n 请在新打开的页面上进行支付,支付完成后再关闭此窗口\r\n </Modal>;\r\n};\r\n\r\nexport default function waitPayComplete(options: Options) {\r\n const { result } = options;\r\n window.open(result.pay_url);\r\n show(WaitModal, options);\r\n}\r\n","import { ReactNode } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n padding: 48px 32px;\r\n`;\r\n\r\nconst Icon = styled.div`\r\n margin-bottom: 24px;\r\n text-align: center;\r\n font-size: 72px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n line-height: 1.8;\r\n text-align: center;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-top: 32px;\r\n text-align: center;\r\n`;\r\n\r\nconst IconMap = {\r\n success: <i className='bi bi-check-circle-fill text-success' />,\r\n error: <i className='bi bi-exclamation-circle-fill text-danger' />,\r\n info: <i className='bi bi-info-circle-fill text-info' />,\r\n warning: <i className='bi bi-exclamation-triangle-fill text-warning' />,\r\n};\r\n\r\ninterface ResultProps {\r\n status?: keyof typeof IconMap\r\n icon?: ReactNode\r\n title?: string\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function Result({ status, title, icon, extra }: ResultProps) {\r\n\r\n if (!icon && status) {\r\n icon = IconMap[status];\r\n }\r\n\r\n return <Container>\r\n {icon && <Icon>{icon}</Icon>}\r\n {title && <Title>{title}</Title>}\r\n {extra && <Extra>{extra}</Extra>}\r\n </Container>;\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Dimmable = styled.div`\r\n position: relative;\r\n`;\r\n\r\ninterface DimmerProps {\r\n active?: boolean\r\n inverted?: boolean\r\n}\r\n\r\nconst Dimmer = styled.div<DimmerProps>`\r\n display: ${props => props.active ? 'flex' : 'none'};\r\n position: absolute;\r\n top: 0 !important;\r\n left: 0 !important;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n vertical-align: middle;\r\n padding: 1em;\r\n background-color: ${props => props.inverted ? 'rgba(255, 255, 255, .85)' : 'rgba(0, 0, 0, .85)'};\r\n opacity: ${props => props.active ? 1 : 0};\r\n line-height: 1;\r\n animation-fill-mode: both;\r\n animation-duration: .5s;\r\n transition: background-color .5s linear;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n user-select: none;\r\n will-change: opacity;\r\n z-index: 990;\r\n`;\r\n\r\nexport default Dimmer;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Spinner, SpinnerProps } from 'react-bootstrap';\r\nimport Dimmer from './dimmer';\r\nimport styled from 'styled-components';\r\n\r\ninterface LoaderProps {\r\n loading?: boolean;\r\n animation?: SpinnerProps['animation'];\r\n wrap?: boolean | number;\r\n}\r\n\r\nexport default function Loader({\r\n loading = true,\r\n children,\r\n variant = 'primary',\r\n animation = 'border',\r\n wrap,\r\n ...props\r\n}: PropsWithChildren<LoaderProps & Omit<SpinnerProps, 'animation'>>): JSX.Element | null {\r\n if (!loading) {\r\n return null;\r\n }\r\n\r\n if (children) {\r\n children = <p className='mt-3 text-secondary'>{children}</p>;\r\n }\r\n\r\n children = <Dimmer inverted active>\r\n <Spinner animation={animation} variant={variant} {...props} />\r\n {children}\r\n </Dimmer>;\r\n\r\n if (wrap) {\r\n return <Wrap $height={typeof wrap === 'number' ? wrap : 150}>\r\n {children}\r\n </Wrap>;\r\n }\r\n\r\n return children as JSX.Element;\r\n}\r\n\r\nconst Wrap = styled.div<{ $height: number }>`\r\n position: relative;\r\n height: ${props => `${props.$height}px`};\r\n`;\r\n","import { PropsWithChildren } from 'react';\r\nimport { Card as BsCard, CardProps as BsCardProps } from 'react-bootstrap';\r\nimport classNames from 'classnames';\r\n\r\ninterface CardProps extends BsCardProps {\r\n title?: string;\r\n}\r\n\r\nexport default function Card({ children, title, className, ...props }: PropsWithChildren<CardProps>) {\r\n\r\n return <BsCard className={classNames('border-0 shadow-sm mb-3', className)} {...props}>\r\n <div className='card-body'>\r\n {title && <>\r\n <h5>{title}</h5>\r\n <hr />\r\n </>}\r\n {children}\r\n </div>\r\n </BsCard>;\r\n}\r\n","import { Alert } from 'react-bootstrap';\r\nimport { Errors } from '../request';\r\n\r\nexport default function Error({ errors }: { errors?: Errors }) {\r\n if (!errors) {\r\n return null;\r\n }\r\n return <Alert variant='danger'>\r\n <ul className='mb-0'>\r\n {typeof errors === 'string'\r\n ? <li>{errors}</li>\r\n : Object.entries(errors).map(([name, error]) => <li key={name}>{error}</li>)\r\n }\r\n </ul>\r\n </Alert>;\r\n}\r\n","import { Children, ReactNode } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\ninterface SpaceProps {\r\n children: ReactNode;\r\n size?: 'small' | 'middle' | 'large' | number;\r\n direction?: 'vertical' | 'horizontal';\r\n className?: string;\r\n}\r\n\r\n\r\nexport default function Space({ children, className, size = 'small', direction = 'horizontal' }: SpaceProps) {\r\n\r\n if (typeof size === 'string') {\r\n size = {\r\n small: 8,\r\n middle: 16,\r\n large: 24\r\n }[size];\r\n }\r\n\r\n const items = Children.map(children, (child) => {\r\n if (child) {\r\n return <Item>{child}</Item>;\r\n }\r\n });\r\n\r\n return <Container className={className} $direction={direction} $size={size}>\r\n {items}\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.div<{ $size: number, $direction: string }>`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: ${props => props.$size}px;\r\n\r\n ${props => props.$direction === 'vertical' && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: inherit;\r\n `}\r\n`;\r\n\r\nconst Item = styled.div`\r\n\r\n`;\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazySteps = lazy(() => import('./lazy/steps'));\r\nconst LazyStep = lazy(() => import('./lazy/steps').then(({ Step }) => ({ default: Step })));\r\n\r\nexport default function Steps(props: ComponentProps<typeof LazySteps>) {\r\n return <Suspense fallback={null}>\r\n <LazySteps {...props} />\r\n </Suspense>;\r\n}\r\n\r\nconst Step = function(props: ComponentProps<typeof LazyStep>) {\r\n return <Suspense fallback={null}>\r\n <LazyStep {...props} />\r\n </Suspense>;\r\n};\r\n\r\nSteps.Step = Step;\r\n\r\nexport { Step };\r\n","import { ReactNode } from 'react';\r\nimport Card from './card';\r\nimport styled from 'styled-components';\r\n\r\nexport interface StatisticProps {\r\n title: ReactNode;\r\n content: ReactNode;\r\n footer?: ReactNode;\r\n}\r\n\r\nexport default function Statistic({ title, content, footer }: StatisticProps) {\r\n\r\n return <Card>\r\n <Title>{title}</Title>\r\n <Content>{content}</Content>\r\n {footer && <Footer>{footer}</Footer>}\r\n </Card>;\r\n}\r\n\r\nconst Footer = styled.div`\r\n margin-top: 9px;\r\n padding-top: 10px;\r\n border-top: 1px solid #f0f0f0;\r\n color: rgba(0, 0, 0, .65);\r\n`;\r\n\r\nconst Content = styled.div`\r\n color: rgba(0, 0, 0, .85);\r\n font-size: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n margin-bottom: 4px;\r\n color: rgba(0, 0, 0, .45);\r\n font-size: 1.1rem;\r\n`;\r\n\r\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { Pagination as BsPagination } from 'react-bootstrap';\r\n\r\nfunction noop() {\r\n}\r\n\r\n\r\nfunction isInteger(value: any): value is number {\r\n return (\r\n typeof value === 'number' && isFinite(value) && Math.floor(value) === value\r\n );\r\n}\r\n\r\nexport interface PaginationProps {\r\n className?: string\r\n total: number\r\n current?: number\r\n defaultCurrent?: number\r\n pageSize?: number\r\n defaultPageSize?: number,\r\n onChange?: (current: number, pageSize: number) => void\r\n}\r\n\r\nexport default function Pagination({\r\n total = 0,\r\n onChange = noop,\r\n defaultCurrent = 1,\r\n defaultPageSize = 10,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n\r\n const [current, setCurrent] = useState(defaultCurrent);\r\n const [pageSize, setPageSize] = useState(defaultPageSize);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.current)) {\r\n setCurrent(props.current);\r\n }\r\n }, [props.current]);\r\n\r\n useEffect(() => {\r\n if (isInteger(props.pageSize)) {\r\n setPageSize(props.pageSize);\r\n }\r\n }, [props.pageSize]);\r\n\r\n const allPages = useMemo(() => {\r\n return Math.floor((total - 1) / pageSize) + 1;\r\n }, [total, pageSize]);\r\n\r\n const handleChange = useCallback((p: number) => {\r\n return () => {\r\n if (p !== current) {\r\n setCurrent(p);\r\n onChange(p, pageSize);\r\n }\r\n };\r\n }, [onChange, current, pageSize]);\r\n\r\n const pageBufferSize = 2;\r\n const prevPage = current - 1 > 0 ? current - 1 : 0;\r\n const nextPage = current + 1 < allPages ? current + 1 : allPages;\r\n\r\n const pagerList: ReactNode[] = [];\r\n let jumpPrev: ReactNode = null;\r\n let jumpNext: ReactNode = null;\r\n let firstPager: ReactNode = null;\r\n let lastPager: ReactNode = null;\r\n\r\n if (allPages <= 3 + pageBufferSize * 2) {\r\n for (let i = 1; i <= allPages; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n } else {\r\n lastPager = <BsPagination.Last key='last' onClick={handleChange(allPages)} />;\r\n firstPager = <BsPagination.First key='first' onClick={handleChange(1)} />;\r\n jumpPrev = <BsPagination.Prev key='prev' onClick={handleChange(prevPage)} />;\r\n jumpNext = <BsPagination.Next key='next' onClick={handleChange(nextPage)} />;\r\n\r\n let left = Math.max(1, current - pageBufferSize);\r\n let right = Math.min(current + pageBufferSize, allPages);\r\n\r\n if (current - 1 <= pageBufferSize) {\r\n right = 1 + pageBufferSize * 2;\r\n }\r\n\r\n if (allPages - current <= pageBufferSize) {\r\n left = allPages - pageBufferSize * 2;\r\n }\r\n\r\n for (let i = left; i <= right; i += 1) {\r\n const active = current === i;\r\n pagerList.push(\r\n <BsPagination.Item key={i} active={active} onClick={handleChange(i)}>{i}</BsPagination.Item>\r\n );\r\n }\r\n\r\n if (current - 1 >= pageBufferSize * 2 && current !== 1 + 2) {\r\n pagerList.unshift(jumpPrev);\r\n }\r\n if (\r\n allPages - current >= pageBufferSize * 2 &&\r\n current !== allPages - 2\r\n ) {\r\n pagerList.push(jumpNext);\r\n }\r\n\r\n if (left !== 1) {\r\n pagerList.unshift(firstPager);\r\n }\r\n if (right !== allPages) {\r\n pagerList.push(lastPager);\r\n }\r\n }\r\n\r\n return <BsPagination className={className}>\r\n {pagerList}\r\n </BsPagination>;\r\n\r\n}\r\n","import { useMemo } from 'react';\r\n\r\ninterface Props {\r\n value: number;\r\n currency?: boolean;\r\n locale?: string;\r\n className?: string;\r\n options?: Intl.NumberFormatOptions;\r\n}\r\n\r\nexport default function NumberFormat({ className, value, locale = 'zh-CN', currency = true, options = {} }: Props) {\r\n\r\n const formatter = useMemo(() => {\r\n\r\n let opt;\r\n\r\n if (currency) {\r\n opt = {\r\n style: 'currency',\r\n currency: 'CNY'\r\n };\r\n } else {\r\n opt = {\r\n minimumFractionDigits: 2,\r\n };\r\n }\r\n\r\n return new Intl.NumberFormat(locale, { ...opt, ...options });\r\n }, [currency, locale, options]);\r\n\r\n if (className) {\r\n return <span className={className}>{formatter.format(value)}</span>;\r\n }\r\n\r\n return <>{formatter.format(value)}</>;\r\n}\r\n","import { Button, ButtonProps } from 'react-bootstrap';\r\n\r\ninterface CustomButtonProps extends ButtonProps {\r\n loading: boolean;\r\n}\r\n\r\nexport default function LoadingButton({ loading, disabled, children, ...props }: CustomButtonProps) {\r\n\r\n return <Button {...props} disabled={loading || disabled}>\r\n {loading ? 'Loading…' : children}\r\n </Button>;\r\n}\r\n","import { ComponentProps, lazy, Suspense } from 'react';\r\n\r\nconst LazyImageZoom = lazy(() => import('./lazy/image-zoom'));\r\n\r\nexport default function ImageZoom(props: ComponentProps<typeof LazyImageZoom>) {\r\n return <Suspense fallback={null}>\r\n <LazyImageZoom {...props} />\r\n </Suspense>;\r\n}\r\n","import request, { RequestConfig, showRequestError } from '../request';\r\nimport { createElement, ElementType, MouseEvent, useCallback } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport Button, { ButtonProps } from './button';\r\nimport useSafeState from '../hooks/use-safe-state';\r\nimport Modal from './modal';\r\n\r\ninterface Props extends Omit<ButtonProps, 'as'> {\r\n url: RequestConfig;\r\n method?: AxiosRequestConfig['method'];\r\n confirm?: string;\r\n onSuccess?: (result: any) => void;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport default function RequestButton({\r\n url,\r\n method,\r\n confirm,\r\n onSuccess,\r\n children,\r\n disabled,\r\n as = Button,\r\n ...props\r\n}: Props) {\r\n\r\n const [fetching, setFetching] = useSafeState(false);\r\n\r\n const handleClick = useCallback(async (e: MouseEvent) => {\r\n e.preventDefault();\r\n try {\r\n setFetching(true);\r\n if (confirm) {\r\n if (!await Modal.confirm({ message: confirm })) {\r\n return;\r\n }\r\n }\r\n\r\n const config = typeof url === 'string' ? { url, method } : { method, ...url };\r\n\r\n const result = await request(config);\r\n\r\n if (onSuccess) {\r\n onSuccess(result);\r\n }\r\n } catch (e) {\r\n showRequestError(e);\r\n } finally {\r\n setFetching(false);\r\n }\r\n }, [url, method, setFetching]);\r\n\r\n return createElement(as, {\r\n ...props,\r\n disabled: disabled || fetching,\r\n onClick: handleClick\r\n }, children);\r\n}\r\n","import { forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomFormType } from './lazy/form';\r\n\r\nconst LazyForm = lazy(() => import('./lazy/form'));\r\n\r\nconst Form: CustomFormType = forwardRef((props, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyForm {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Form;\r\n\r\nexport type { FormProps, FormType } from './lazy/form';\r\n","import { ComponentProps, forwardRef, lazy, Suspense } from 'react';\r\nimport type { CustomTableType } from './lazy/table';\r\n\r\nconst LazyTable = lazy(() => import('./lazy/table'));\r\n\r\nconst Table: CustomTableType = forwardRef((props: ComponentProps<typeof LazyTable>, ref) => {\r\n return <Suspense fallback={null}>\r\n <LazyTable {...props} ref={ref} />\r\n </Suspense>;\r\n});\r\n\r\nexport default Table;\r\n\r\nexport type { TableProps, Columns, TableType } from './lazy/table';\r\n","import { useCallback, useState } from 'react';\r\n\r\ninterface Options {\r\n onHide?: () => void;\r\n onShow?: () => void;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport default function useOverlayState({ onHide, onShow }: Options = {}) {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const [key, setKey] = useState(`visible-${id}`);\r\n\r\n const hide = useCallback(() => {\r\n setVisible(false);\r\n if (onHide) {\r\n onHide();\r\n }\r\n }, [setVisible, onHide]);\r\n\r\n const exit = useCallback(() => {\r\n setKey(`visible-${++id}`);\r\n }, [setKey, id]);\r\n\r\n const show = useCallback(() => {\r\n setVisible(true);\r\n if (onShow) {\r\n onShow();\r\n }\r\n }, [setVisible, onShow]);\r\n\r\n const state = {\r\n show: visible,\r\n onHide: hide,\r\n onExited: exit,\r\n key\r\n };\r\n\r\n return {\r\n visible,\r\n show,\r\n hide,\r\n state\r\n };\r\n}\r\n","import {\r\n createElement,\r\n ElementType,\r\n forwardRef,\r\n ForwardRefExoticComponent,\r\n MouseEvent,\r\n PropsWithChildren,\r\n PropsWithoutRef,\r\n ReactNode,\r\n RefAttributes,\r\n useImperativeHandle\r\n} from 'react';\r\nimport useOverlayState from '../hooks/use-overlay-state';\r\nimport Modal, { ModalProps } from './modal';\r\nimport { ButtonProps } from 'react-bootstrap';\r\nimport Button from './button';\r\n\r\nexport interface ModalButtonProps extends Omit<ButtonProps, 'as'> {\r\n text: ReactNode;\r\n modalProps?: Omit<ModalProps, 'children' | 'confirmLoading' | 'onOk'>;\r\n onOk?: () => any;\r\n onShow?: () => void;\r\n confirmLoading?: boolean;\r\n as?: ElementType | ButtonProps['as'];\r\n}\r\n\r\nexport interface ModalType {\r\n close: () => void;\r\n}\r\n\r\ntype ModalButtonType = ForwardRefExoticComponent<PropsWithoutRef<PropsWithChildren<ModalButtonProps>>\r\n & RefAttributes<ModalType>>\r\n\r\nconst ModalButton: ModalButtonType = forwardRef(({\r\n text,\r\n onOk,\r\n modalProps,\r\n children,\r\n onShow,\r\n confirmLoading,\r\n as = Button,\r\n ...props\r\n}, ref) => {\r\n\r\n const { state, show, hide } = useOverlayState({ onShow });\r\n\r\n useImperativeHandle(ref, () => ({\r\n close: hide\r\n }));\r\n\r\n const handleOk = async (e: MouseEvent) => {\r\n if (onOk) {\r\n const result = await onOk();\r\n if (result === false) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n const button = createElement(as, {\r\n ...props,\r\n onClick: show\r\n }, text);\r\n\r\n return <>\r\n {button}\r\n <Modal\r\n header={text}\r\n {...modalProps}\r\n {...state}\r\n confirmLoading={confirmLoading}\r\n onOk={handleOk}\r\n >\r\n {children}\r\n </Modal>\r\n </>;\r\n});\r\n\r\nexport default ModalButton;\r\n","import ModalButton, { ModalButtonProps, ModalType } from './modal-button';\r\nimport { ReactNode, useCallback, useRef, useState } from 'react';\r\nimport Form, { FormProps, FormType } from './form';\r\n\r\nexport interface ModalFormProps<T = any> extends FormProps<T> {\r\n text: ReactNode;\r\n buttonProps?: Omit<ModalButtonProps, 'text' | 'modalProps' | 'confirmLoading' | 'onOk'>;\r\n modalProps?: ModalButtonProps['modalProps'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport default function ModalForm<T = any>({\r\n text,\r\n onSuccess,\r\n buttonProps,\r\n modalProps,\r\n children,\r\n ...props\r\n}: ModalFormProps<T>) {\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const ref = useRef<ModalType>(null);\r\n const form = useRef<FormType>(null);\r\n\r\n const handleOk = useCallback(() => {\r\n form.current?.submit();\r\n return false;\r\n }, []);\r\n\r\n const handleSuccess = useCallback((data) => {\r\n if (onSuccess) {\r\n onSuccess(data);\r\n }\r\n ref.current?.close();\r\n }, [onSuccess]);\r\n\r\n return <ModalButton\r\n ref={ref}\r\n text={text}\r\n {...buttonProps}\r\n modalProps={modalProps}\r\n onOk={handleOk}\r\n confirmLoading={loading}\r\n >\r\n <Form\r\n {...props}\r\n onSubmitting={setLoading}\r\n ref={form}\r\n onSuccess={handleSuccess}\r\n >\r\n {children}\r\n <input type='submit' hidden />\r\n </Form>\r\n </ModalButton>;\r\n}\r\n","import { useAsyncCallback, UseAsyncCallbackOptions } from 'react-async-hook';\r\nimport request, { isRequestError, RequestConfig } from '../request';\r\nimport { DependencyList, useCallback, useEffect } from 'react';\r\nimport { AxiosRequestConfig } from 'axios';\r\nimport { values } from 'lodash';\r\n\r\ntype UseRequestOptions<T> = {\r\n manual?: boolean\r\n refreshDeps?: DependencyList;\r\n} & UseAsyncCallbackOptions<T>;\r\n\r\nexport default function useRequest<T = any>(config: RequestConfig, {\r\n manual,\r\n refreshDeps,\r\n ...options\r\n}: UseRequestOptions<T> = {}) {\r\n let { execute, currentParams, error, ...others } = useAsyncCallback(async (params?: AxiosRequestConfig) => {\r\n\r\n config = typeof config === 'string' ? { url: config } : config;\r\n\r\n return await request<T>({\r\n ...config,\r\n ...params\r\n });\r\n }, options);\r\n\r\n useEffect(() => {\r\n if (!manual && !refreshDeps) {\r\n try {\r\n execute();\r\n } catch {\r\n\r\n }\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (refreshDeps) {\r\n refresh();\r\n }\r\n }, refreshDeps);\r\n\r\n const refresh = useCallback(async () => {\r\n try {\r\n if (currentParams) {\r\n await execute(...currentParams);\r\n } else {\r\n await execute();\r\n }\r\n } catch {\r\n\r\n }\r\n }, [execute, currentParams]);\r\n\r\n if (error && isRequestError(error)) {\r\n const errors = error.errors;\r\n error = new Error(typeof errors === 'string' ? errors : values(errors).join(''));\r\n }\r\n\r\n return {\r\n refresh,\r\n execute,\r\n error,\r\n ...others\r\n };\r\n}\r\n","import { DependencyList, useCallback, useEffect, useRef } from 'react';\r\n\r\nexport default function useCallbackRef<T extends (...args: any[]) => any>(\r\n callback: T | undefined,\r\n deps: DependencyList = [],\r\n) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return useCallback(((...args) => callbackRef.current?.(...args)) as T, deps);\r\n}\r\n","import { Dispatch, SetStateAction, useState } from 'react';\r\nimport useCallbackRef from './use-callback-ref';\r\n\r\nexport interface UseControllableStateProps<T> {\r\n value?: T;\r\n defaultValue?: T | (() => T);\r\n onChange?: (value: T) => void;\r\n shouldUpdate?: (prev: T, next: T) => boolean;\r\n}\r\n\r\nexport default function useControllableState<T>(props: UseControllableStateProps<T>) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n shouldUpdate = (prev, next) => prev !== next,\r\n } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\r\n\r\n const [uncontrolledState, setUncontrolledState] = useState(defaultValue as T);\r\n const controlled = valueProp !== undefined;\r\n const value = controlled ? valueProp : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) {\r\n return;\r\n }\r\n\r\n if (!controlled) {\r\n setUncontrolledState(nextValue);\r\n }\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue] as [T, Dispatch<SetStateAction<T>>];\r\n}\r\n","import { debounce, DebouncedFunc } from 'lodash';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nexport default function useDebounce<T extends (...args: any) => any>(callback: T, wait: number, options?: {}): DebouncedFunc<T> {\r\n const callbackRef = useRef<T>(callback);\r\n const debouncedCallbackRef = useRef<DebouncedFunc<T>>(\r\n debounce(callback, wait, options)\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n useEffect(() => {\r\n debouncedCallbackRef.current = debounce((...args: any) => {\r\n callbackRef.current(...args);\r\n }, wait, options);\r\n }, [wait, options]);\r\n\r\n return debouncedCallbackRef.current;\r\n}\r\n"],"names":["CustomSwal","withReactContent","Swal","defaultOptions","confirmButtonText","cancelButtonText","Message","confirm","async","isConfirmed","fire","icon","showCancelButton","options","data","preConfirm","e","Error","showValidationMessage","message","success","toast","position","timer","showConfirmButton","error","close","result","defaults","MessageContext","createContext","wrapMessage","Component","_ref","resolve","destroy","show","setShow","initState","callbackRef","useRef","state","setState","useState","useEffect","current","value","callback","useStateWithCallback","context","useContext","handleResolve","useCallback","useMemo","onHide","onExited","container","_jsx","createMessage","Promise","component","hide","listener","memoryState","Set","modal","add","delete","Tooltip","tooltip","children","placement","OverlayTrigger","overlay","BsTooltip","id","uniqueId","TableContext","Button","forwardRef","ref","loading","percent","disabled","variant","props","_jsxs","Spinner","as","size","role","animation","className","button","BsButton","Confirm","title","okText","cancelText","Modal","centered","Header","Title","Body","Footer","onClick","header","footer","closable","onOk","onCancel","okButtonProps","bodyAs","headerAs","confirmLoading","rest","setLoading","okButton","defaultPrevented","cancelButton","_Fragment","ReactModal","closeButton","noticeInstance","Provider","Array","from","map","index","Fragment","notice","type","Notification","newInstance","prefixCls","maxCount","style","top","right","instance","getNoticeInstance","duration","content","Alert","Toast","reduce","isRecord","rax","attach","axios","raxConfig","retryDelay","backoffType","shouldRetry","config","response","retryDecider","method","toUpperCase","status","maxContentLength","Infinity","maxBodyLength","baseURL","authTokenName","interceptors","request","use","key","token","localStorage","getItem","headers","Authorization","reject","location","window","href","undefined","isAxiosError","errors","isRequestError","showRequestError","Object","values","join","url","paramsSerializer","params","queryString","stringify","sort","skipNull","skipEmptyString","arrayFormat","useSafeState","initialState","unmountedRef","useUnmountedRef","currentState","WaitModal","open","checkUrl","onComplete","checking","setChecking","order_no","err","then","catch","backdrop","preventDefault","waitPayComplete","pay_url","Container","styled","div","Icon","Extra","IconMap","info","warning","Result","extra","Dimmer","active","inverted","Loader","wrap","Wrap","$height","Card","BsCard","classNames","entries","_ref2","name","Space","direction","small","middle","large","items","Children","child","Item","$direction","$size","css","LazySteps","lazy","import","LazyStep","Step","default","Steps","Suspense","fallback","Statistic","Content","noop","isInteger","isFinite","Math","floor","Pagination","total","onChange","defaultCurrent","defaultPageSize","setCurrent","pageSize","setPageSize","allPages","handleChange","p","prevPage","nextPage","pagerList","jumpPrev","jumpNext","firstPager","lastPager","i","push","BsPagination","Last","First","Prev","Next","left","max","min","pageBufferSize","unshift","NumberFormat","locale","currency","formatter","opt","minimumFractionDigits","Intl","format","LoadingButton","LazyImageZoom","ImageZoom","RequestButton","onSuccess","fetching","setFetching","handleClick","createElement","LazyForm","Form","LazyTable","Table","useOverlayState","onShow","arguments","length","visible","setVisible","setKey","exit","ModalButton","text","modalProps","useImperativeHandle","ModalForm","buttonProps","form","handleOk","submit","handleSuccess","onSubmitting","hidden","useRequest","manual","refreshDeps","execute","currentParams","others","useAsyncCallback","refresh","useCallbackRef","deps","_len","args","_key","useControllableState","valueProp","defaultValue","shouldUpdate","prev","next","onChangeProp","shouldUpdateProp","uncontrolledState","setUncontrolledState","controlled","setValue","nextValue","useDebounce","wait","debouncedCallbackRef","debounce"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import n from"rc-table";import{unstable_batchedUpdates as a}from"react-dom";import{FormControl as o,Table as c}from"react-bootstrap";import{useUrlSearchParams as i}from"use-url-search-params";import*as l from"react";import{useState as s,useCallback as d,useRef as u,useEffect as p,memo as m,forwardRef as h,useImperativeHandle as f,useMemo as g}from"react";import{B as v,a as y,P as b,b as x,r as w,N as j,L as C,T as k,C as S,S as z}from"./index-6ae8237d.js";import E from"styled-components";import O from"./form-74ef0417.js";import"sweetalert2/dist/sweetalert2.js";import"sweetalert2-react-content";import"lodash";import"axios";import"query-string";import"retry-axios";import"rc-notification";import"classnames";import"react-async-hook";import"@topthink/json-form";const V=function(t){let{indeterminate:r=!1,...n}=t;const a=u(null);return p((()=>{a.current&&(a.current.indeterminate=r)}),[r]),e("input",{ref:a,...n,className:"form-check-input",type:"checkbox"})};var N;function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},H.apply(this,arguments)}const K=e=>l.createElement("svg",H({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),N||(N=l.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zM511.78 714.496c22.71 0 36.425-15.854 36.425-40.704V547.365H682.35c24.009 0 40.722-12.874 40.722-35.584 0-23.132-15.854-36.426-40.722-36.426H548.206V340.773c0-24.85-13.715-40.704-36.425-40.704s-35.566 16.713-35.566 40.722v134.583H342.49c-24.85 0-41.142 13.275-41.142 36.407 0 22.71 17.152 35.584 41.142 35.584h133.724v126.427c0 23.99 12.855 40.704 35.566 40.704z"})));var M;function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},q.apply(this,arguments)}const B=e=>l.createElement("svg",q({viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"currentColor"},e),M||(M=l.createElement("path",{d:"M252.069 906.496h520.283c89.582 0 134.144-44.562 134.144-132.846V250.331c0-88.283-44.562-132.845-134.144-132.845H252.069c-89.143 0-134.583 44.141-134.583 132.845V773.67c0 88.704 45.44 132.845 134.583 132.845zm1.28-68.992c-42.844 0-66.853-22.71-66.853-67.291V253.806c0-44.58 24.01-67.292 66.853-67.292h517.723c42.423 0 66.432 22.711 66.432 67.292v516.388c0 44.58-24.01 67.292-66.432 67.292zm86.582-289.719h344.576c23.991 0 40.704-12.855 40.704-35.566 0-23.15-15.433-36.425-40.704-36.425H339.931c-24.868 0-40.722 13.276-40.722 36.425 0 22.711 16.713 35.566 40.722 35.566z"})));function P(r){let{data:n,options:a,columns:o,onSearch:c}=r;const[i,l]=s(0),u={"ui:col":10,"ui:order":a.order},p={};a.fields.forEach((e=>{const t=o.find((t=>t.dataIndex===e));if(t){const r=t.title;if("string"==typeof r){if(u[e]={"ui:col":4,"ui:labelCol":3,"ui:placeholder":"请输入",...a.ui?.[e]},t.valueEnum){const n=t.valueEnum;return u[e]["ui:placeholder"]="请选择",p[e]={title:r,type:"string",enum:Object.keys(n).flatMap((e=>"string"==typeof n[e].text?[e]:[])),enumNames:Object.keys(n).flatMap((e=>{const t=n[e].text;return"string"==typeof t?[t]:[]}))}}return p[e]={title:r,type:"string"}}}})),a.extraFields&&Object.entries(a.extraFields).forEach((e=>{let[t,r]=e;u[t]={"ui:col":4,"ui:labelCol":3,"ui:placeholder":"请输入",...a.ui?.[t]},p[t]={title:r,type:"string"}}));const m={type:"object",properties:p},h=d((e=>{let{formData:t}=e;c(t)}),[c]),f=d((()=>{l((e=>e+1)),c({})}),[]);return e(T,{children:e(O,{formContext:{layout:"horizontal"},schema:m,uiSchema:u,onSubmit:h,formData:n,children:e("div",{className:"col-2 ms-auto mt-auto",children:t("div",{className:"justify-content-end d-flex gap-2 ",children:[e(v,{className:"px-4",onClick:f,variant:"secondary",children:"重置"}),e(v,{className:"px-4",type:"submit",variant:"primary",children:"查询"})]})})})},i)}const T=E.div`
|
|
2
|
+
margin-bottom: 1rem;
|
|
3
|
+
`;function _(t){let{keyword:r,onKeywordChange:n}=t;const[a,c]=s(r),i=y(n,500);p((()=>{c(r)}),[r]);const l=d((e=>{c(e.target.value),i(e.target.value)}),[i,c]);return e(o,{value:a,onChange:l,type:"search",placeholder:"Search..."})}const D=E.thead`
|
|
4
|
+
th {
|
|
5
|
+
padding: 0.5rem 0.5rem;
|
|
6
|
+
border-bottom-width: 1px;
|
|
7
|
+
border-color: var(--bs-border-color);
|
|
8
|
+
}
|
|
9
|
+
`,F={table:t=>e(c,{...t,className:"mb-0 align-middle table-hover"}),header:{wrapper:t=>e(D,{...t})}},I=E.a`
|
|
10
|
+
cursor: pointer;
|
|
11
|
+
width: 28px;
|
|
12
|
+
height: 28px;
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
vertical-align: middle;
|
|
17
|
+
`,R=function(t){let{record:r,expanded:n,expandable:a,onExpand:o}=t;return e(I,a?{onClick:e=>o(r,e),children:e(n?B:K,{})}:{})},A=E(b)`
|
|
18
|
+
margin-bottom: 0;
|
|
19
|
+
justify-content: flex-end;
|
|
20
|
+
margin-top: 1rem;
|
|
21
|
+
`;const L=h(((o,c)=>{let{source:l,rowKey:m="id",paginate:h=!0,toolBarRender:v,columns:y=[],search:b,rowSelection:z,card:E=!0,expandable:O={},sync:N=!1,...H}=o;const[K,M]=s([]),[q,B]=s(h?{total:0,current:1,pageSize:10}:null),[T,D]=s(!0),[I,L]=i({}),[$,W]=function(t,r,n){const[a,o]=s((()=>new Set(t?.selectedRowKeys||[]))),c=e=>"string"==typeof r?e[r]:r(e),i=e=>n.find((t=>c(t)===e)),l=d((e=>{e instanceof Set||(e=new Set(e)),o(e);const r=Array.from(e),n=r.map((function(e){return i(e)}));t?.onChange&&t?.onChange(r,n)}),[i]);return[d((r=>{if(!t)return r;const o=n.map(c),i=o.every((function(e){return a.has(e)})),s=o.some((function(e){return a.has(e)}));return[{key:"selection",title:e(V,{checked:i&&n.length>0,indeterminate:!i&&s,onChange:()=>{i?o.forEach((function(e){a.delete(e)})):o.forEach((function(e){a.add(e)})),l(new Set(a))}}),width:30,align:"center",render(t){let{record:r}=t;const n=c(r),o=a.has(n);return e(V,{checked:o,onChange:()=>{o?a.delete(n):a.add(n),l(new Set(a))}})}},...r]}),[n,t,a]),l]}(z,m,K),[X,Y]=x({value:N?I||{}:void 0,defaultValue:{},onChange:e=>{N&&L(e)}}),[Z,ee]=x({value:N?I.q||"":void 0,defaultValue:"",onChange:e=>{N&&L({q:e||void 0})}}),[te,re]=x({value:N?I.page||1:void 0,defaultValue:1,onChange:e=>{N&&L({page:e||void 0})}}),ne=d((async()=>{D(!0),W([]);try{let e;const t={...X,q:Z,page:te>1?te:void 0};e="string"==typeof l?await w({url:l,params:t}):await l(t),h&&function(e){return"current_page"in e}(e)&&(B({total:e.total,current:e.current_page,pageSize:e.per_page}),e=e.data),M(e)}catch(e){}finally{D(!1)}}),[l,M,Z,te,X]);p((()=>{ne()}),[Z,te,X]);const ae=u({reload:ne});p((()=>{ae.current={reload:ne}}),[ne]),f(c,(()=>ae.current));const oe=g((()=>$(y).map((t=>{let{render:r,valueType:n,valueEnum:a,...o}=t;const c={...o};return r?c.render=(e,t,n)=>r({value:e,record:t,index:n,action:ae.current}):"currency"===n?c.render=t=>e(j,{value:t}):a&&(c.render=t=>a[t]?a[t].status?e("span",{className:`text-${a[t].status}`,children:a[t].text}):a[t].text:t),c}))),[y,$,ae]),ce=t(r,{children:[e(C,{loading:T}),"object"==typeof b&&e(P,{data:X,columns:y,options:b,onSearch:e=>{a((()=>{re(1),Y(e)}))}}),!1!==v&&t(G,{children:[e(Q,{size:12,children:v&&v(ae.current)}),t(J,{size:12,children:[!0===b&&e(_,{keyword:Z,onKeywordChange:e=>{a((()=>{re(1),ee(e)}))}}),e(U,{onClick:ae.current.reload,children:e("i",{className:"bi bi-arrow-repeat"})})]})]}),e(k.Provider,{value:!0,children:e(n,{...H,expandable:{expandIcon:R,...O},rowKey:m,columns:oe,components:F,data:K})}),q&&e(A,{...q,onChange:re})]});return E?e(S,{children:ce}):ce}));var $=m(L);const G=E.div`
|
|
22
|
+
display: flex;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
padding-bottom: 1rem;
|
|
25
|
+
height: 48px;
|
|
26
|
+
border-bottom: 2px solid #212529;
|
|
27
|
+
`,J=E(z)`
|
|
28
|
+
|
|
29
|
+
`,Q=E(z)`
|
|
30
|
+
|
|
31
|
+
`,U=E.span`
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
font-size: 20px;
|
|
34
|
+
line-height: 1;
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
color: var(--bs-primary);
|
|
38
|
+
}
|
|
39
|
+
`;export{$ as default};
|
|
40
|
+
//# sourceMappingURL=index-7a7c06a9.js.map
|