@flatbiz/antd 4.0.16 → 4.0.17

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/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {okHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {cancelHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n initialValues?: TPlainObject;\n fieldNames: TPlainObject;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject>;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n queryCondition: TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n initialValues?: TPlainObject;\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n};\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n useEffectCustom(() => {\n if (props.initRequest !== false || !state.isInit) {\n void onRequest(props.initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const respData = (await props.serviceConfig.onRequest(allState.queryCondition)) || {};\n setDataSource(respData[fieldNames.list]);\n setTotal(respData[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n if (values) {\n void actions.updateFilterCondition(values);\n }\n });\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n queryCondition: state.queryCondition,\n };\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n initialValues: props.initialValues,\n fieldNames,\n }}\n >\n <Fragment>{props.children}</Fragment>\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n debugger;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n width: props.width,\n });\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const [form] = Form.useForm();\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const easyTableCtx = useEasyTableCtx();\n const [state, actions] = easyTableModel(easyTableCtx.modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n easyTableCtx.onRequest(form.getFieldsValue());\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n easyTableCtx.onRequest();\n });\n\n const formOperateColProps = {\n rightList: [\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...props.queryButtonProps}>\n {props.queryButtonProps?.text || '查询'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"2\" onClick={onReset} {...props.resetButtonProps}>\n {props.resetButtonProps?.text || '重置'}\n </ButtonWrapper>,\n ],\n ...props.filterOperate?.(form),\n };\n\n if (props.isPure) {\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n {children}\n </Form>\n </SimpleLayout>\n );\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </Form>\n </SimpleLayout>\n );\n};\n","import { TAny } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement } from 'react';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'pagination'> & {\n children?: ReactElement;\n pagination?: false;\n};\n\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, ...otherProps } = props;\n\n const easyTableCtx = useEasyTableCtx();\n const [state] = easyTableModel(easyTableCtx.modelKey).useStore();\n const fieldNames = easyTableCtx.fieldNames;\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n easyTableCtx.onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n props.onChange?.(data, ...otherProps);\n };\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n pagination={{\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: easyTableCtx.tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n }}\n {...otherProps}\n onChange={onChangePage}\n loading={easyTableCtx.loading}\n dataSource={easyTableCtx.tableList}\n />\n </SimpleLayout>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n tableRowIndex: props.tableRowIndex,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n // templates: [\n // editorTemplates.block,\n // editorTemplates.primary_p,\n // editorTemplates.secondary_p,\n // editorTemplates.warning_p,\n // editorTemplates.danger_p,\n // editorTemplates.success_p,\n // editorTemplates.p,\n // ],\n // template_replace_values: {\n // varStyle: varStyleString,\n // },\n // template_preview_replace_values: {\n // varStyle: varStyleString,\n // },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...style, ...props.style }}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置数据,value为code、label为色值,例如:{ 1:'red', 2: 'blue'}\n */\n colorMap?: Record<string, string>;\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorMap?: TagWrapperProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容 */\n extra: ReactElement;\n onClick?: (e) => void;\n // 是否显示数据\n showData?: boolean;\n // 显示最大长度,多余省略\n showMaxNumber?: number;\n extraPosition?: 'before' | 'after';\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n if (options.extra && showData) {\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n if (options.extra) {\n return options.extra;\n }\n return <span onClick={options.onClick}>{value}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示数据,默认值:true\n * 3. onClick 点击事件,showData != false 有效\n * 4. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","target","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","map","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","concat","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","_createCtx","_createCtx2","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","list","pageNo","pageSize","initRequest","initialValues","allState","clearQueryCondition","$await_4","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","targetIndex","findIndex","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","temp","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","_props$queryButtonPro","_props$resetButtonPro","childrens","Children","easyTableCtx","onQuery","getFieldsValue","onReset","resetFields","formOperateColProps","queryButtonProps","resetButtonProps","filterOperate","isPure","formRowChildren","gutter","EasyTableTable","onChangePage","_easyTableCtx$onReque","_len","arguments","Array","_key","Table","scroll","x","bordered","pagination","showSizeChanger","showTotal","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","defaultValue","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","rowKey","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","Result","subTitle","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","onPreChange","$If_1","this","isCancel","checked","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagWrapper","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/easy-table/context.ts","@flatbiz/antd/src/easy-table/model.ts","@flatbiz/antd/src/easy-table/easy-table.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/easy-table/filter.tsx","@flatbiz/antd/src/easy-table/table.tsx","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n // 是否折叠合拢\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中元素为ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {okHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {cancelHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useEasyTableCtx, EasyTableCtxProvider] = createCtx<{\n modelKey: string;\n onRequest: (params?: TPlainObject) => void;\n tableList: TPlainObject[];\n tableTotal: number;\n loading?: boolean;\n initialValues?: TPlainObject;\n fieldNames: TPlainObject;\n}>();\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\n\nexport type ModelState = {\n queryCondition: TPlainObject;\n isInit: boolean;\n};\n\ntype ModelActionParams = {\n updateFilterCondition?: Partial<ModelState['queryCondition']>;\n resetFilterCondition: void;\n updateInitStatus: void;\n};\n\nconst defaultState: ModelState = {\n queryCondition: {},\n isInit: true,\n};\n\nconst _EasyTableModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n updateFilterCondition: (params) => {\n return (state) => {\n state.queryCondition = {\n ...state.queryCondition,\n ...params,\n };\n };\n },\n resetFilterCondition: () => {\n return (state) => {\n state.queryCondition = defaultState.queryCondition;\n };\n },\n updateInitStatus: () => {\n return (state) => {\n state.isInit = false;\n };\n },\n },\n state: defaultState,\n};\n\nconst easyTableModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const easyTableModel = (key: string) => {\n if (!easyTableModels[key]) {\n easyTableModels[key] = Model(_EasyTableModel);\n }\n return easyTableModels[key];\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message } from 'antd';\nimport { forwardRef, Fragment, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { EasyTableCtxProvider } from './context';\nimport { easyTableModel } from './model';\n\ntype EasyTableServiceConfig = {\n onRequest: (params?: TPlainObject) => Promise<TPlainObject>;\n};\n\nexport type EasyTableRefApi = {\n onRequest: (params?: TPlainObject) => void;\n queryCondition: TPlainObject;\n clearQueryCondition: (values?: TPlainObject) => void;\n};\n\nexport type EasyTableProps = {\n children: ReactElement | ReactElement[];\n modelKey: string;\n serviceConfig: EasyTableServiceConfig;\n initialValues?: TPlainObject;\n fieldNames?: { list?: string; total?: string; pageNo?: string; pageSize?: string };\n /** 初始化是否请求,默认值:true */\n initRequest?: boolean;\n};\n\n/**\n * 对 查询条件+表格数据 进行深度封装,内置数据交互处理\n * ```\n * 1. 需要获取查询条件、主动发起请求等可通过ref操作\n * 2. 可通过属性 initRequest 设置初始化是否请求数据\n * 3. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize\n * ```\n */\nexport const EasyTable = forwardRef<EasyTableRefApi, EasyTableProps>((props: EasyTableProps, ref) => {\n const [dataSource, setDataSource] = useState<TPlainObject[]>([]);\n const [total, setTotal] = useState<number>(0);\n const [loading, setLoading] = useState<boolean>(false);\n const [state, actions] = easyTableModel(props.modelKey).useStore();\n const fieldNames = {\n list: 'list',\n total: 'tatal',\n pageNo: 'pageNo',\n pageSize: 'pageSize',\n ...props.fieldNames,\n };\n\n useEffectCustom(() => {\n if (props.initRequest !== false || !state.isInit) {\n void onRequest(props.initialValues);\n }\n void actions.updateInitStatus();\n }, []);\n\n const onRequest = hooks.useCallbackRef(async (params) => {\n try {\n setLoading(true);\n const allState = await actions.updateFilterCondition(params);\n const respData = (await props.serviceConfig.onRequest(allState.queryCondition)) || {};\n setDataSource(respData[fieldNames.list]);\n setTotal(respData[fieldNames.total]);\n setLoading(false);\n } catch (error) {\n setLoading(false);\n void message.error(error.message);\n }\n });\n\n const clearQueryCondition = hooks.useCallbackRef(async (values?: TPlainObject) => {\n await actions.resetFilterCondition();\n if (values) {\n void actions.updateFilterCondition(values);\n }\n });\n\n useImperativeHandle(ref, () => {\n return {\n onRequest: onRequest,\n clearQueryCondition,\n queryCondition: state.queryCondition,\n };\n });\n\n return (\n <EasyTableCtxProvider\n value={{\n modelKey: props.modelKey,\n onRequest,\n tableList: dataSource,\n tableTotal: total,\n loading,\n initialValues: props.initialValues,\n fieldNames,\n }}\n >\n <Fragment>{props.children}</Fragment>\n </EasyTableCtxProvider>\n );\n});\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n // 栅格占位格数,不考虑响应式\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * 1. 设置 span 栅格占位格数,不考虑响应式\n * 2. grid 自定义响应式网格布局\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n const span = temp.props?.span as number;\n return temp.props?.[screenType] || span || defaultGrid[screenType];\n });\n if (operateColIndex < 0) {\n return { gridList: _currentGridList, gridGroupList: [] };\n }\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n width: props.width,\n });\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance } from 'antd';\nimport { Children, ReactElement } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { FormCol, FormOperateCol, FormOperateColProps, FormRow } from '../form-grid';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableFilterProps = {\n children: ReactElement | ReactElement[] | ((form: FormInstance) => ReactElement);\n /** isPure = true时无效 */\n filterOperate?: (form: FormInstance) => FormOperateColProps;\n /** 是否为纯净模式(查询条件布局是否自定义), */\n isPure?: boolean;\n // 查询按钮配置\n queryButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n // 重置按钮配置\n resetButtonProps?: Omit<ButtonProps, 'onClick'> & { text?: string };\n};\n\n/**\n * 过滤条件\n * @param props\n * @returns\n *\n *```\n *1. 用法1\n * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * <EasyTableFilter>\n * <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * </EasyTableFilter>\n *\n * -- 自定义网格布局 使用 FormCol组件包装 Form.Item\n * <EasyTableFilter>\n * <FormCol span={12}><Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item></FormCol>\n * </EasyTableFilter>\n *\n * -- children 可为 function\n * <EasyTableFilter>\n * {(form) => {\n * return <Form.Item name=\"field1\" label=\"条件1\">xxx</Form.Item>\n * }}\n * </EasyTableFilter>\n *2. 用户2(自定义布局)\n * EasyTableFilter设置 isPure = true,FormItem无布局规则\n *3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例\n *4. 默认布局下,可通过设置 filterOperate 设置操作按钮\n *```\n */\nexport const EasyTableFilter = (props: EasyTableFilterProps) => {\n const [form] = Form.useForm();\n\n const children = typeof props.children === 'function' ? props.children(form) : props.children;\n const childrens = Children.toArray(children);\n const easyTableCtx = useEasyTableCtx();\n const [state, actions] = easyTableModel(easyTableCtx.modelKey).useStore();\n\n const onQuery = hooks.useCallbackRef(() => {\n easyTableCtx.onRequest(form.getFieldsValue());\n });\n\n const onReset = hooks.useCallbackRef(async () => {\n await actions.resetFilterCondition();\n form.resetFields();\n easyTableCtx.onRequest();\n });\n\n const formOperateColProps = {\n rightList: [\n <ButtonWrapper key=\"1\" type=\"primary\" onClick={onQuery} {...props.queryButtonProps}>\n {props.queryButtonProps?.text || '查询'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"2\" onClick={onReset} {...props.resetButtonProps}>\n {props.resetButtonProps?.text || '重置'}\n </ButtonWrapper>,\n ],\n ...props.filterOperate?.(form),\n };\n\n if (props.isPure) {\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n {children}\n </Form>\n </SimpleLayout>\n );\n }\n\n const formRowChildren = childrens\n .map((item, index) => {\n if ((item as ReactElement).type['domTypeName'] === 'FormCol') {\n return item;\n }\n return <FormCol key={index}>{item}</FormCol>;\n })\n .concat(<FormOperateCol {...formOperateColProps} />);\n\n return (\n <SimpleLayout>\n <Form\n form={form}\n initialValues={{\n ...easyTableCtx.initialValues,\n ...state.queryCondition,\n }}\n >\n <FormRow gutter={[15, 0]}>{formRowChildren}</FormRow>\n </Form>\n </SimpleLayout>\n );\n};\n","import { TAny, TPlainObject } from '@flatbiz/utils';\nimport { Table, TableProps } from 'antd';\nimport { ReactElement } from 'react';\nimport { SimpleLayout } from '../simple-layout';\nimport { useEasyTableCtx } from './context';\nimport { easyTableModel } from './model';\n\nexport type EasyTableTableProps = Omit<TableProps<TAny>, 'dataSource' | 'loading' | 'rowKey'> & {\n children?: ReactElement;\n /** 表格行 key 的取值,可以是字符串或一个函数 */\n rowKey: string | ((record: TPlainObject, index?: number) => React.Key);\n};\n\n/**\n * 表格渲染\n * @param props\n * ```\n * 1. 继承了 TableProps 可设置antd table功能\n * ```\n */\nexport const EasyTableTable = (props: EasyTableTableProps) => {\n const { children, ...otherProps } = props;\n\n const easyTableCtx = useEasyTableCtx();\n const [state] = easyTableModel(easyTableCtx.modelKey).useStore();\n const fieldNames = easyTableCtx.fieldNames;\n\n const onChangePage: TableProps<TAny>['onChange'] = (data, ...otherProps) => {\n easyTableCtx.onRequest({ [fieldNames.pageSize]: data.pageSize, [fieldNames.pageNo]: data.current });\n props.onChange?.(data, ...otherProps);\n };\n\n return (\n <SimpleLayout>\n {children ? <SimpleLayout>{children}</SimpleLayout> : null}\n <Table\n size=\"small\"\n scroll={{ x: 'max-content' }}\n bordered\n pagination={{\n showSizeChanger: true,\n current: state.queryCondition[fieldNames.pageNo],\n pageSize: state.queryCondition[fieldNames.pageSize],\n total: easyTableCtx.tableTotal,\n showTotal: (total) => `共 ${total} 条记录`,\n }}\n {...otherProps}\n rowKey={props.rowKey}\n onChange={onChangePage}\n loading={easyTableCtx.loading}\n dataSource={easyTableCtx.tableList}\n />\n </SimpleLayout>\n );\n};\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n tableRowIndex: props.tableRowIndex,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n // templates: [\n // editorTemplates.block,\n // editorTemplates.primary_p,\n // editorTemplates.secondary_p,\n // editorTemplates.warning_p,\n // editorTemplates.danger_p,\n // editorTemplates.success_p,\n // editorTemplates.p,\n // ],\n // template_replace_values: {\n // varStyle: varStyleString,\n // },\n // template_preview_replace_values: {\n // varStyle: varStyleString,\n // },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...style, ...props.style }}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置数据,value为code、label为色值,例如:{ 1:'red', 2: 'blue'}\n */\n colorMap?: Record<string, string>;\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorMap?: TagWrapperProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容 */\n extra: ReactElement;\n onClick?: (e) => void;\n // 是否显示数据\n showData?: boolean;\n // 显示最大长度,多余省略\n showMaxNumber?: number;\n extraPosition?: 'before' | 'after';\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n if (options.extra && showData) {\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n if (options.extra) {\n return options.extra;\n }\n return <span onClick={options.onClick}>{value}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示数据,默认值:true\n * 3. onClick 点击事件,showData != false 有效\n * 4. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content?: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","target","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","map","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","concat","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","_createCtx","_createCtx2","useEasyTableCtx","EasyTableCtxProvider","queryCondition","isInit","_EasyTableModel","updateFilterCondition","resetFilterCondition","updateInitStatus","easyTableModels","easyTableModel","EasyTable","dataSource","setDataSource","total","setTotal","_useState3","_easyTableModel$useSt","list","pageNo","pageSize","initRequest","initialValues","allState","clearQueryCondition","$await_4","tableList","tableTotal","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_objectWithoutPropertiesLoose","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","keys","order","targetIndex","findIndex","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","currentValue","hasOperateList","find","temp","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","_temp$props2","span","itemProps","newProps","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","desc","contentStyle","EasyTableFilter","_props$queryButtonPro","_props$resetButtonPro","childrens","Children","easyTableCtx","onQuery","getFieldsValue","onReset","resetFields","formOperateColProps","queryButtonProps","resetButtonProps","filterOperate","isPure","formRowChildren","gutter","EasyTableTable","onChangePage","_easyTableCtx$onReque","_len","arguments","Array","_key","Table","scroll","x","bordered","pagination","showSizeChanger","showTotal","rowKey","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","defaultValue","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","Result","subTitle","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","onPreChange","$If_1","this","isCancel","checked","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagWrapper","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}